This is a reference manual for algorithms implemented for the Integrated Data Processing Environment for Time Correlation Experiments. All work-flow can be split for main procedures:

covered by this note with extensive references to the specific code.

Content

Pre-processing

Pre-processing algorithms consist of four procedures

described in this section.

Dark run scan

Defines for the dark run

Submit command

psana -c /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0020-peds-scan.cfg /reg/d/ana12/xcs/xcsi0112/xtc/e167-r0020-*.xtc

PSANA configuration script *peds-scan.cfg

[psana] 
#files = /reg/d/ana12/xcs/xcsi0112/xtc/e167-r0020-*.xtc 
#skip-events = IS_NOT_USED 
#events = FOR_ALL_EVENTS 
modules = ImgAlgos.ImgTimeStampList 

[ImgAlgos.ImgTimeStampList] 
print_bits = 13 
out_file = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0020-peds-scan-tstamp-list.txt 
#======EOF====== 

PSANA module ImgAlgos.ImgTimeStampList

Pedestals averaging

Defines for dark run

Submit command

psana -c /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0020-peds.cfg /reg/d/ana12/xcs/xcsi0112/xtc/e167-r0020-*.xtc

PSANA configuration script *peds.cfg

[psana] 
#files = /reg/d/ana12/xcs/xcsi0112/xtc/e167-r0020-*.xtc 
skip-events = 0 
events = 75 
modules = ImgAlgos.Tahometer ImgAlgos.PrincetonImageProducer ImgAlgos.ImgAverage 

[ImgAlgos.Tahometer] 
print_bits = 7 

[ ImgAlgos.PrincetonImageProducer ] 
source = DetInfo(:Princeton) 
key_in = 
key_out = img 
print_bits = 1 

[ImgAlgos.ImgAverage] 
source = DetInfo(:Princeton) 
key = img 
avefile = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0020-peds-ave.txt 
rmsfile = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0020-peds-rms.txt 
hotpix_mask = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0020-hotpix-mask-thr-10.0ADU.txt 
hotpix_thr_adu = 10.0 
print_bits = 21 

PSANA module ImgAlgos.PrincetonImageProducer

PSANA module ImgAlgos.ImgAverage

Data types:

PSANA module ImgAlgos.Tahometer

Data scan

Defines for data run

Submit command

psana -c /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-data-scan.cfg /reg/d/ana12/xcs/xcsi0112/xtc/e167-r0015-*.xtc

PSANA configuration script *data-scan.cfg

[psana] 
#psana -m psana_examples.DumpPrinceton /reg/d/psdm/XCS/xcsi0112/xtc/e167-r0015-s00-c00.xtc 
#files = /reg/d/ana12/xcs/xcsi0112/xtc/e167-r0015-*.xtc 
modules = ImgAlgos.Tahometer ImgAlgos.ImgTimeStampList ImgAlgos.IntensityMonitorsData 
#skip-events = IS_NOT_USED 
#events = FOR_ALL_EVENTS 

[ImgAlgos.Tahometer] 
print_bits = 11 

[ImgAlgos.ImgTimeStampList] 
print_bits = 13 
out_file = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-data-scan-tstamp-list.txt 

[ImgAlgos.IntensityMonitorsData] 
print_bits = 45 
#file_type = bin 
#file_data = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-data-scan-mons-data.txt 
file_data = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-data-scan-mons-data.txt 
file_header = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-data-scan-mons-comments.txt 
#======EOF====== 

PSANA module ImgAlgos.ImgTimeStampList

PSANA module ImgAlgos.IntensityMonitorsData

IntensityMonitorsData produces files:

Data averaging

Defines for data run

Submit command

psana -c /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-data-aver.cfg /reg/d/ana12/xcs/xcsi0112/xtc/e167-r0015-*.xtc

PSANA configuration script *data-aver.cfg

[psana] 
#files = /reg/d/ana12/xcs/xcsi0112/xtc/e167-r0015-*.xtc 
skip-events = 0 
events = 500 
modules = ImgAlgos.Tahometer ImgAlgos.PrincetonImageProducer ImgAlgos.ImgAverage ImgAlgos.ImgMaskEvaluation 

[ImgAlgos.Tahometer] 
print_bits = 7 

[ ImgAlgos.PrincetonImageProducer ] 
source = DetInfo(:Princeton) 
key_in = 
key_out = img 
print_bits = 1 

[ImgAlgos.ImgAverage] 
source = DetInfo(:Princeton) 
key = img 
avefile = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-data-ave.txt 
rmsfile = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-data-rms.txt 
print_bits = 25 
#evts_stage1 = 100 
#evts_stage2 = 100 
#gate_width1 = 200 
#gate_width2 = 50 

[ImgAlgos.ImgMaskEvaluation] 
source = DetInfo(:Princeton) 
key = img 
file_mask_satu = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-satpix-mask-level-65000ADU.txt 
file_mask_nois =  
file_mask_comb = 
file_frac_satu = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-satpix-frac-level-65000ADU.txt 
file_frac_nois =  
thre_satu = 65000 
frac_satu = 0 
dr_SoN_ave = 1 
thre_SoN = 5 
frac_nois = 0.05 
print_bits = 29 
#======EOF====== 

PSANA module ImgAlgos.ImgMaskEvaluation

The ImgAlgos.ImgMaskEvaluation produces the saturated pixel mask; the image size txt file *-satpix-mask-level-65000ADU.txt, consistiong 0(zero) or 1(one) for each bin.

Data processing

Data processing stage consists of three procedures:

Spliting

Submit command

psana -c /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-cora-xcsi0112-r0015-split.cfg /reg/d/ana12/xcs/xcsi0112/xtc/e167-r0015-*.xtc

PSANA configuration script *split.cfg

[psana] 
# Command to run this script from release directory: 
# psana -c ImgAlgos/data/psana-split.cfg <path-to-xtc-file-name-pattern-for-one-run> 

#files = /reg/d/ana12/xcs/xcsi0112/xtc/e167-r0015-*.xtc 
skip-events = 0 
events = 500 

modules = ImgAlgos.Tahometer ImgAlgos.PrincetonImageProducer ImgAlgos.ImgCalib ImgAlgos.ImgIntMonCorr ImgAlgos.ImgIntForBins ImgAlgos.ImgVsTimeSplitInFiles ImgAlgos.ImgAverage

[ImgAlgos.Tahometer] 
print_bits = 7 

[ ImgAlgos.PrincetonImageProducer ] 
source = DetInfo(:Princeton) 
key_in = 
key_out = img 
print_bits = 1 

[ImgAlgos.ImgCalib] 
source = DetInfo(:Princeton) 
key_in = img 
key_out = calibrated 
fname_peds = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0020-peds-ave.txt 
fname_bkgd = 
fname_gain = 
fname_mask = 
fname_rms =  
threshold_nrms = 0 
do_threshold = true 
threshold = 20.0 
below_thre_value = 0 
print_bits = 5 

[ImgAlgos.ImgIntMonCorr] 
source = DetInfo(:Princeton) 
key_in = calibrated 
key_out = imon_corrected 
fname_imon_cfg = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-cora-xcsi0112-r0015-imon-cfg.txt 
print_bits = 1 

[ImgAlgos.ImgIntForBins] 
source = DetInfo(:Princeton) 
key_in = imon_corrected 
fname_map_bins = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-cora-r0015-map-static-q.txt 
fname_int_bins = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-cora-r0015-int-static-q.txt 
number_of_bins = 1 
print_bits = 33 


[ImgAlgos.ImgVsTimeSplitInFiles] 
source = DetInfo(:Princeton) 
key = imon_corrected 
fname_prefix = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-cora 
file_type = bin 
add_tstamp = false 
ampl_thr = 20.0 
ampl_min = 1 
nfiles_out = 8 
print_bits = 29 


[ImgAlgos.ImgAverage] 
source = DetInfo(:Princeton) 
key = calibrated 
avefile = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-data-ave.txt 
rmsfile = /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-xcsi0112-r0015-data-rms.txt
#======EOF====== 

PSANA module ImgAlgos.ImgCalib

PSANA module ImgAlgos.ImgIntMonCorr

PSANA module ImgAlgos.ImgIntForBins

Gets the file *-map-static-q.txt with a map of static q bin numbers

Produces the file *-int-static-q.txt with intensities averaged over statis q bins:

       0  44.460 
       1  27.982 
       2  62.282 
       3  0.875 
       4  73.732 
       5  698.901 
       6  4.923 
       7  227.669 
       8  28.298 
...

PSANA module ImgAlgos.ImgVsTimeSplitInFiles

Gets/produces the file *-tau.txt with a list of tau intervals in terms of time(event) indexes, for example:

 1 2 3 4 5 6 7 8 9 10 12 14 16 20

Produces the file *-med.txt with metadata parameters from splitting algorithm:

IMAGE_ROWS      1300
IMAGE_COLS      1340
IMAGE_SIZE      1742000
NUMBER_OF_FILES 8
BLOCK_SIZE      217750
REST_SIZE       0
NUMBER_OF_IMGS  500
FILE_TYPE       bin
DATA_TYPE       f
TIME_SEC_AVE    8.088413
TIME_SEC_RMS    0.063639
TIME_INDEX_MAX       499

Processing

Submit command

corana -f /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-cora-r0015-b0000.bin -t ./tau-list.txt

Module ImgAlgos.corana

Module ImgAlgos.CorAnaData

Evaluation of correlators:

ImgAlgos/include/CorAna.h:  typedef float cor_t;

void CorAnaData::evaluateCorTau(unsigned tau) // tau in number of frames between images
{
  m_log << "\nCorAnaData::evaluateCorTau(tau): tau=" << tau;
  std::fill_n(m_sum_gi, m_blk_size, double(0));
  std::fill_n(m_sum_gf, m_blk_size, double(0));
  std::fill_n(m_sum_g2, m_blk_size, double(0));
  std::fill_n(m_sum_st, m_blk_size, unsigned(0));
  std::fill_n(m_cor_gi, m_blk_size, cor_t(0));
  std::fill_n(m_cor_gf, m_blk_size, cor_t(0));
  std::fill_n(m_cor_g2, m_blk_size, cor_t(0));

  for (unsigned ti=0; ti<m_tind_size-tau; ti++) {
       unsigned tf=ti+tau;

       if ( ! (tf<m_tind_size) ) break;
       
       // get the event index in array for time index
       int evi = m_tind_to_evind[ti];
       int evf = m_tind_to_evind[tf];

       // If the event does not exist for specified time index -> skip it in sum
       if(evi<0) continue;
       if(evf<0) continue;

       sumCorTau((unsigned)evi,(unsigned)evf);
  }
}

//----------------
void CorAnaData::sumCorTau(unsigned i, unsigned f) // i and f are the event indexes
{
   data_t* p_i = &m_data[i*m_blk_size];
   data_t* p_f = &m_data[f*m_blk_size];
   double Ii, If;

   for(unsigned pix=0; pix<m_blk_size; pix++) {
     Ii = p_i[pix]; 
     If = p_f[pix]; 
     m_sum_gi[pix] += Ii; 
     m_sum_gf[pix] += If; 
     m_sum_g2[pix] += Ii*If; 
     m_sum_st[pix] ++; 
   }
}

Averaging:

   for(unsigned pix=0; pix<m_blk_size; pix++) {
       if(m_sum_st[pix]<1) continue;
       m_cor_gi[pix] = cor_t( m_sum_gi[pix] / m_sum_st[pix] ); 
       m_cor_gf[pix] = cor_t( m_sum_gf[pix] / m_sum_st[pix] ); 
       m_cor_g2[pix] = cor_t( m_sum_g2[pix] / m_sum_st[pix] ); 
   }

Module ImgAlgos.CorAna

Module ImgAlgos.CorAnaInputParameters

Merging

Submit command

corana_merge -f /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-cora-r0015-b0000-result.bin -t /reg/neh/home1/dubrovin/LCLS/PSANA-V01/work/t1-cora-r0015-tau.txt

Module ImgAlgos.corana_merge

Module ImgAlgos.CorAnaMergeFiles

Presentation of results

Presentation of results is implemented in the GUIViewResults.py, which basically is a panel of buttons for different plots.

Summary

In this note we presented a functional description of implemented procedures for time correlation analysis. All modules have convenient reference to the latest version of the code.

References