Determining Overlap Between Peaks?

Hi there,

I have a data set that I used MultiPeak Fitting 2 on. I'm interested in determining the amount of overlap present between the resulting peaks (i.e. the area of Peak0 contains x% of Peak1 y% of Peak2, etc.). I know that MPF2 provides the area, for each individual peak, but it would be useful to me to know how much the areas of said peaks intersect.

Does Igor have a built-in feature that determines this?

Any suggestions are welcome.



Nothing built-in or part of MPF2.

The solution to the problem would depend on how you define the area of overlap. I can think of a few ways. Perhaps you could make a picture of what you want to compute and post it?

Hi John,

Here's how I'm thinking of defining the overlap.

Using Peak3[RED] as a reference, it can be seen that Peak2[GREEN] and Peak1[YELLOW] are overlapping with it. What I'd like to know is how much of Peak3's area overlaps with the area of Peak2 and separately for Peak1.

I suppose what I want is something along the lines of:

Overlap b/n Peaks 3 &1=(Area of Peak3 - Area of Peak 1 present in range of Peak 3)/(Area of Peak3)

Thanks for any and all suggestions!


The range of a gaussian peak is not defined- the tails are infinite. The tails get smaller, at a rate that allows the integral from -inf to inf to converge. If you are referencing the red and yellow areas, you might ask what is the orange area. You might want two areas- the orange area to the left and right of the point of intersection.

Is that a XPS/ARPES spectrum? I'm going to be a bit bold here, and having used these techniques is also a bit longer past my present expertise, but are you sure this is a valid approach from a scientific POV?

In reply to by vmmr5596

The overlap between two Gaussian peaks is simply the minimum of the two.

Execute from the command line for a rough estimation:

make peak1=100*gauss(x, 20, 20)
make peak2=50*gauss(x, 100, 30)
duplicate peak2 overlap
overlap=min(peak1, peak2)
Display peak1,peak2, overlap
ModifyGraph mode(overlap)=7, hbFill(overlap)=2
print area(overlap)

You can also define an overlap function that takes the Gaussian coefficients as parameters:

Function OverlapFunc(w, inX)
    Wave w
    Variable inX
    return min(w[0]*gauss(inX,w[1], w[2]), w[3]*gauss(inX,w[4], w[5]))

Then from the command line

make /o  w_coef={100,20,20,50,100,30}
print integrate1D(OverlapFunc, -1000,1000,2,0, w_coef) // choose limits wisely

I echo Thomas' comment, though, and wonder what significance a determination of 'peak overlap' could have.