Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /epic-lfhcal-tbana/NewStructure/waveform_fitting/max_sample_fit_n_integ.cc was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 #include "waveform_fit_base.h"
0002 #include "max_sample_fit_n_integ.h"
0003 
0004 #include <iostream>
0005 
0006 max_sample_fit_n_integ::max_sample_fit_n_integ() : waveform_fit_base{} {
0007     max_sample_value  = 0;
0008     pedestal_value    = 0;
0009     max_sample        = 0;
0010     integ_nSample     = 0;
0011     
0012     saturated         = false;
0013     stale             = true;
0014 }
0015 
0016 max_sample_fit_n_integ::max_sample_fit_n_integ( int n) : waveform_fit_base{} {
0017     max_sample_value  = 0;
0018     pedestal_value    = 0;
0019     max_sample        = 0;
0020     integ_nSample     = 0;
0021     
0022     
0023     saturated         = false;
0024     stale             = true;
0025     nSample           = n;
0026     if (!( nSample == 3 || nSample == 5)) {
0027       std::cerr << "max_sample_fit_n_integ: Waveform has not been set" << std::endl;
0028       return;
0029     }
0030 }
0031 
0032 max_sample_fit_n_integ::~max_sample_fit_n_integ() {
0033 }
0034 
0035 void max_sample_fit_n_integ::fit() {
0036     if (waveform.empty()) {
0037         std::cerr << "max_sample_fit_n_integ: Waveform has not been set" << std::endl;
0038         return;
0039     }
0040     pedestal_value      = waveform[0];
0041     max_sample_value    = waveform[0];
0042     max_sample          = 0;
0043     for (size_t i = 0; i < waveform.size(); ++i) {
0044         if (waveform[i] > max_sample_value) {
0045             max_sample_value  = waveform[i];
0046             max_sample        = i;
0047         }
0048         if (waveform[i] > 1000) {  // Check for saturation. TODO: Make this a parameter
0049             saturated = true;
0050         }
0051     }
0052     if (nSample == 3){
0053       integ_nSample = max_sample_value - pedestal_value;
0054       if (max_sample > 0 )
0055         integ_nSample = integ_nSample+ (waveform[max_sample-1] - pedestal_value);
0056       if (max_sample < waveform.size()-1)
0057         integ_nSample = integ_nSample+ (waveform[max_sample+1] - pedestal_value);
0058     } else if (nSample == 5){
0059       integ_nSample = max_sample_value - pedestal_value;
0060       if (max_sample > 1 )
0061         integ_nSample = integ_nSample+ (waveform[max_sample-2] - pedestal_value);
0062       if (max_sample > 0 )
0063         integ_nSample = integ_nSample+ (waveform[max_sample-1] - pedestal_value);
0064       if (max_sample < waveform.size()-1)
0065         integ_nSample = integ_nSample+ (waveform[max_sample+1] - pedestal_value);
0066       if (max_sample < waveform.size()-2)
0067         integ_nSample = integ_nSample+ (waveform[max_sample+2] - pedestal_value);
0068     }
0069     E         = integ_nSample;  // The energy is the maximum sample value minus the pedestal
0070     fit_ndf   = -1;
0071     fit_chi2  = -1;  // Not applicable for max sample fit
0072     stale     = false;
0073 }
0074 
0075 void max_sample_fit_n_integ::fit_with_average_ped(double ped) {
0076     if (waveform.empty()) {
0077         std::cerr << "max_sample_fit_n_integ: Waveform has not been set" << std::endl;
0078         return;
0079     }
0080     pedestal_value      = ped;
0081     max_sample_value    = ped;
0082     max_sample          = 0;
0083     for (size_t i = 0; i < waveform.size(); ++i) {
0084         if (waveform[i] > max_sample_value) {
0085             max_sample_value  = waveform[i];
0086             max_sample        = i;
0087         }
0088         if (waveform[i] > 1000) {  // Check for saturation. TODO: Make this a parameter
0089             saturated = true;
0090         }
0091     }
0092     if (nSample == 3){
0093       integ_nSample = max_sample_value - pedestal_value;
0094       if (max_sample > 0 )
0095         integ_nSample = integ_nSample+ (waveform[max_sample-1] - pedestal_value);
0096       if (max_sample < waveform.size()-1)
0097         integ_nSample = integ_nSample+ (waveform[max_sample+1] - pedestal_value);
0098     } else if (nSample == 5){
0099       integ_nSample = max_sample_value - pedestal_value;
0100       if (max_sample > 1 )
0101         integ_nSample = integ_nSample+ (waveform[max_sample-2] - pedestal_value);
0102       if (max_sample > 0 )
0103         integ_nSample = integ_nSample+ (waveform[max_sample-1] - pedestal_value);
0104       if (max_sample < waveform.size()-1)
0105         integ_nSample = integ_nSample+ (waveform[max_sample+1] - pedestal_value);
0106       if (max_sample < waveform.size()-2)
0107         integ_nSample = integ_nSample+ (waveform[max_sample+2] - pedestal_value);
0108     } 
0109 
0110     
0111     E         = integ_nSample;  // The energy is the maximum sample value minus the average pedestal
0112     fit_ndf   = -1;
0113     fit_chi2  = -1;  // Not applicable for max sample fit
0114     stale     = false;
0115 }
0116 
0117 
0118 int max_sample_fit_n_integ::get_pedestal() {
0119     if (stale) {
0120         return -1;
0121     }
0122     return pedestal_value;
0123 }