OpenCOMPES / sed

Single Event Data Frame Processor: Backend to handle photoelectron resolved datastreams
https://opencompes.github.io/sed/
MIT License
3 stars 1 forks source link

Energy calibration for core levels using side bands #426

Open kutnyakhov opened 2 weeks ago

kutnyakhov commented 2 weeks ago

It would be nice to add the possibility of using side bands measured at t0 for energy calibration. If we e.g. bin data in dldTimeSteps and delayStage, select slices around to and also select in dldTimeSteps position around main core level peaks as well as around SBs we can get in some cases 5-10 energy points which are well-defined and they are intense enough to be used for find_bias_peaks routine. The only problem is that all of those will contain only one sample bias value, but this can be fed inside as an array of biases/energies. This would be of help in case users forgot to do a proper energy calibration run (happening quite often :) )

kutnyakhov commented 1 week ago

Just to get a better idea about what I am talking about, here is a small figure of EDC from W4f core levels with defined regions for dldTimeSteps (yellow and red) as well as several orders of side bands right at t0. W4f_side_bands+ Those defined regions will directly correspond to kinetic energies of those peaks (31.4 eV, 33.6 eV) and side bands (26.6 eV, 27.8 eV, 29.0 eV, 30.2 eV and, 34.8 eV)

rettigl commented 1 week ago

It's clear what you mean, and it should be possible to use the current fitting routine also for this case. Just the parameter generation will require a new workflow (e.g. multi peak identification routine).

zain-sohail commented 2 days ago

It's clear what you mean, and it should be possible to use the current fitting routine also for this case. Just the parameter generation will require a new workflow (e.g. multi peak identification routine).

I have tested the routine to find peaks:

# binned data
roi = slice(4000, 4500)
delay = slice(1246.2,1246.6)
data = res.sel(delayStage=delay, dldTimeSteps=roi).sum('delayStage')

from scipy.signal import find_peaks
distance = 7
peaks, _ = find_peaks(data, height=None, distance=distance)

Which gives me this

image

Could you explain how this adds with the current fitting routine?