FairRoot/PandaRoot
Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
PndEmcPSAFPGAPileupAnalyser Class Reference

#include <PndEmcPSAFPGAPileupAnalyser.h>

Inheritance diagram for PndEmcPSAFPGAPileupAnalyser:
PndEmcPSAFPGASampleAnalyser PndEmcAbsPSA

Public Types

enum  pileup_t { kSingle =0, kPileup1 =1, kPileup2 =2, kInvalid =99 }
 
enum  status_t {
  kBaseline, kInPulse, kPulseDetected, kPulseFinished,
  kPileupFinished, kUndefined =99
}
 

Public Member Functions

 PndEmcPSAFPGAPileupAnalyser ()
 
virtual ~PndEmcPSAFPGAPileupAnalyser ()
 
virtual void SetVerbose (Int_t verbose=0)
 
virtual void initFromFile ()
 
virtual void Init (const std::vector< Double_t > &params, TF1 *R_thres, TF1 *R_mean, float extBaselineValue=0)
 
virtual void Init (const std::vector< Double_t > &params, TF1 *R_thres, TF1 *R_mean, unsigned int baselineStartSample, unsigned int baselineStopSample)
 
virtual void GetHit (Int_t i, Double_t &Energy, Double_t &Time)
 Get energy and time of hit. More...
 
virtual void GetHit (Int_t i, Double_t &Energy, Double_t &Time, pileup_t &PileupType)
 
void GetEnergyMeasures (Int_t i, Double_t &Amplitude, Double_t &Integral)
 
virtual void reset ()
 
virtual void put (float valueToStore)
 
virtual float baseline ()
 
virtual void initFromFile (const std::string &fname)
 
int nHits ()
 
float sampleTime (int index)
 
float sampleAmplitude (int index)
 
float sampleIntegral (int index)
 
virtual Int_t Process (const PndEmcWaveform *waveform)
 Find Hits in Waveform. More...
 
virtual void Process (const PndEmcWaveform *waveform, Double_t &amplitude, Double_t &time)
 Deprecated. Do not use. More...
 
virtual void Reset ()
 reset found hits More...
 
virtual void Init (const std::vector< Double_t > &params)
 
status_t GetStatus ()
 
 ClassDef (PndEmcAbsPSA, 1)
 

Protected Types

enum  { kWindow, kExtern, kFollow }
 

Protected Member Functions

virtual void setBaseline (float newBaseline)
 
virtual void setBaselineWindow (unsigned int startSample, unsigned int stopSample)
 
virtual void InitParameters (const std::vector< Double_t > &params)
 
virtual void Init2 (const std::vector< Double_t > &params, TF1 *R_thres, TF1 *R_mean)
 
 ClassDef (PndEmcPSAFPGAPileupAnalyser, 2)
 
virtual void init (SampleAnalyserParams &params)
 
 ClassDef (PndEmcPSAFPGASampleAnalyser, 2)
 

Protected Attributes

enum
PndEmcPSAFPGAPileupAnalyser:: { ... }  
baselineMode
 
Int_t fVerbose
 
TF1 * Int_thres
 
TF1 * Int_mean
 
unsigned int BaselineStartSample
 
unsigned int BaselineStopSample
 
float BaselineSum
 
PndEmcPSAFPGAFilterMWDMWD_filter1
 
PndEmcPSAFPGAFilterMWDMWD_filter2
 
PndEmcPSAFPGAFilterMWDMWD_filter3
 
PndEmcPSAFPGAFilterDelayCF_prev
 
bool energy_finished
 
bool timing_finished
 
bool func_defined
 
unsigned int cf_crossing
 
bool in_cfRise
 
float cfZero [MAX_NUMBER_OF_HITS]
 
float cfRise [MAX_NUMBER_OF_HITS]
 
pileup_t pileups [MAX_NUMBER_OF_HITS]
 
SampleAnalyserParams analyserParams
 
float baseline_value
 
unsigned int local_time
 
bool pulse_detected
 
int rough_pulse_timing
 
int cf_zero_crossing_points
 
PndEmcPSAFPGAFilterCFCF_filter
 
PndEmcPSAFPGAFilterMAMA_triggering
 
PndEmcPSAFPGAFilterDelayMA_delay
 
PndEmcPSAFPGAFilterDelayCF_delay
 
PndEmcPSAFPGAFilterDelaySignal_delay
 
PndEmcPSAFPGALinFitterCF_Fitter
 
int Number_of_hits
 
float time [MAX_NUMBER_OF_HITS]
 
float integral [MAX_NUMBER_OF_HITS]
 
float amplitude [MAX_NUMBER_OF_HITS]
 
status_t status
 

Detailed Description

Definition at line 17 of file PndEmcPSAFPGAPileupAnalyser.h.

Member Enumeration Documentation

anonymous enum
protected

Constructor & Destructor Documentation

PndEmcPSAFPGAPileupAnalyser::PndEmcPSAFPGAPileupAnalyser ( )
PndEmcPSAFPGAPileupAnalyser::~PndEmcPSAFPGAPileupAnalyser ( )
virtual

Definition at line 17 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References CF_prev, Int_mean, Int_thres, MWD_filter1, MWD_filter2, and MWD_filter3.

17  {
18  if(Int_thres!=NULL) delete Int_thres;
19  if(Int_mean!=NULL) delete Int_mean;
20  if(MWD_filter1!=NULL) delete MWD_filter1;
21  if(MWD_filter2!=NULL) delete MWD_filter2;
22  if(MWD_filter3!=NULL) delete MWD_filter3;
23  if(CF_prev!=NULL) delete CF_prev;
24 }
PndEmcPSAFPGAFilterMWD * MWD_filter2
PndEmcPSAFPGAFilterDelay * CF_prev
PndEmcPSAFPGAFilterMWD * MWD_filter3
PndEmcPSAFPGAFilterMWD * MWD_filter1

Member Function Documentation

virtual float PndEmcPSAFPGAPileupAnalyser::baseline ( )
inlinevirtual
PndEmcAbsPSA::ClassDef ( PndEmcAbsPSA  ,
 
)
inherited
PndEmcPSAFPGAPileupAnalyser::ClassDef ( PndEmcPSAFPGAPileupAnalyser  ,
 
)
protected
PndEmcPSAFPGASampleAnalyser::ClassDef ( PndEmcPSAFPGASampleAnalyser  ,
 
)
protectedinherited
void PndEmcPSAFPGAPileupAnalyser::GetEnergyMeasures ( Int_t  i,
Double_t Amplitude,
Double_t Integral 
)
void PndEmcPSAFPGAPileupAnalyser::GetHit ( Int_t  i,
Double_t energy,
Double_t time 
)
virtual

Get energy and time of hit.

Parameters
Int_tIndex of Hit
Double_tEnergy of Hit
Double_tTime of Hit
Returns

Reimplemented from PndEmcPSAFPGASampleAnalyser.

Definition at line 132 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References PndEmcPSAFPGASampleAnalyser::sampleAmplitude(), and PndEmcPSAFPGASampleAnalyser::sampleTime().

Referenced by GetHit().

132  {
133  Energy = sampleAmplitude(i);
134  Time = sampleTime(i);
135 }
Int_t i
Definition: run_full.C:25
void PndEmcPSAFPGAPileupAnalyser::GetHit ( Int_t  i,
Double_t Energy,
Double_t Time,
pileup_t PileupType 
)
virtual

Definition at line 138 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References GetHit(), i, kInvalid, PndEmcPSAFPGASampleAnalyser::nHits(), and pileups.

138  {
139  GetHit(i, Energy, Time);
140  if(i < nHits() && i >=0) {
141  PileupType = pileups[i];
142  } else {
143  PileupType = kInvalid;
144  }
145 }
Int_t i
Definition: run_full.C:25
pileup_t pileups[MAX_NUMBER_OF_HITS]
virtual void GetHit(Int_t i, Double_t &Energy, Double_t &Time)
Get energy and time of hit.
status_t PndEmcPSAFPGASampleAnalyser::GetStatus ( )
inlineinherited
void PndEmcPSAFPGAPileupAnalyser::Init ( const std::vector< Double_t > &  params,
TF1 *  R_thres,
TF1 *  R_mean,
float  extBaselineValue = 0 
)
virtual

Definition at line 70 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References Init2(), and setBaseline().

Referenced by PndEmcFWEndcapDigi::Init().

70  {
71  Init2(params, r_thres, r_mean);
72  setBaseline(extBaselineValue);
73 }
virtual void Init2(const std::vector< Double_t > &params, TF1 *R_thres, TF1 *R_mean)
virtual void setBaseline(float newBaseline)
void PndEmcPSAFPGAPileupAnalyser::Init ( const std::vector< Double_t > &  params,
TF1 *  R_thres,
TF1 *  R_mean,
unsigned int  baselineStartSample,
unsigned int  baselineStopSample 
)
virtual

Definition at line 75 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References Init2(), and setBaselineWindow().

75  {
76  Init2(params, r_thres, r_mean);
77  setBaselineWindow(baselineStartSample, baselineStopSample);
78 }
virtual void Init2(const std::vector< Double_t > &params, TF1 *R_thres, TF1 *R_mean)
virtual void setBaselineWindow(unsigned int startSample, unsigned int stopSample)
void PndEmcPSAFPGASampleAnalyser::Init ( const std::vector< Double_t > &  params)
virtualinherited

Definition at line 132 of file PndEmcPSAFPGASampleAnalyser.cxx.

References PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_delay, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_fit_offset, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_fitter_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_ratio, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::clock_unit, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::hit_threshold, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::iafactor, PndEmcPSAFPGASampleAnalyser::init(), PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::ma_trig_M, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd_length, and PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd_tau.

132  {
133  SampleAnalyserParams newParams;
134  newParams.ma_trig_M = (int) params.at(0);
135  newParams.hit_threshold = params.at(1);
136  newParams.cf_delay = (int) params.at(2);
137  newParams.cf_ratio = params.at(3);
138  newParams.cf_fitter_length = (int) params.at(4);
139  newParams.cf_fit_offset = (int) params.at(5);
140  newParams.mwd_length = (int) params.at(6);
141  newParams.mwd_tau = params.at(7);
142  newParams.clock_unit = params.at(8);
143  newParams.iafactor = params.at(9);
144  /*
145  std::cout << newParams.ma_trig_M << std::endl;
146  std::cout << newParams.hit_threshold << std::endl;
147  std::cout << newParams.cf_delay << std::endl;
148  std::cout << newParams.cf_ratio << std::endl;
149  std::cout << newParams.cf_fitter_length << std::endl;
150  std::cout << newParams.cf_fit_offset << std::endl;
151  std::cout << newParams.mwd_length << std::endl;
152  std::cout << newParams.mwd_tau << std::endl;
153 */
154  init(newParams);
155  return;
156 }
virtual void init(SampleAnalyserParams &params)
void PndEmcPSAFPGASampleAnalyser::init ( PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams params)
protectedvirtualinherited

Reimplemented in PndEmcPSAFPGADigitalFilterAnalyser.

Definition at line 45 of file PndEmcPSAFPGASampleAnalyser.cxx.

References PndEmcPSAFPGASampleAnalyser::analyserParams, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_delay, PndEmcPSAFPGASampleAnalyser::CF_delay, PndEmcPSAFPGASampleAnalyser::CF_filter, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_fit_offset, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_fitter_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_ratio, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::clock_unit, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::hit_threshold, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::iafactor, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::ma_trig_M, PndEmcPSAFPGASampleAnalyser::MA_triggering, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd2_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd2_tau, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd3_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd3_tau, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd_tau, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::rough_timing_corr, PndEmcPSAFPGAFilterDelay::set(), PndEmcPSAFPGAFilterMA::set(), PndEmcPSAFPGAFilterCF::set(), PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::sig_delay, and PndEmcPSAFPGASampleAnalyser::Signal_delay.

Referenced by PndEmcPSAFPGADigitalFilterAnalyser::init(), PndEmcPSAFPGASampleAnalyser::Init(), PndEmcPSAFPGASampleAnalyser::initFromFile(), and InitParameters().

45  {
62 
67 
68  return;
69 }
void set(unsigned int newBufferSize)
void set(unsigned int newBufferSize, float newRatio)
PndEmcPSAFPGAFilterDelay * Signal_delay
void set(unsigned int newBufferSize)
PndEmcPSAFPGAFilterDelay * CF_delay
void PndEmcPSAFPGAPileupAnalyser::Init2 ( const std::vector< Double_t > &  params,
TF1 *  R_thres,
TF1 *  R_mean 
)
protectedvirtual

Definition at line 81 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References PndEmcPSAFPGASampleAnalyser::analyserParams, CF_prev, func_defined, InitParameters(), Int_mean, Int_thres, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd2_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd2_tau, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd3_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd3_tau, MWD_filter1, MWD_filter2, MWD_filter3, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd_tau, PndEmcPSAFPGAFilterDelay::set(), PndEmcPSAFPGAFilterMWD::set(), PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::sig_delay, and PndEmcPSAFPGASampleAnalyser::Signal_delay.

Referenced by Init().

81  {
82 
83  InitParameters(params);
85 
86  if(MWD_filter1!=NULL) delete MWD_filter1;
88  if(MWD_filter2!=NULL) delete MWD_filter2;
90  if(MWD_filter3!=NULL) delete MWD_filter3;
92  if(CF_prev!=NULL) delete CF_prev;
94 
98  CF_prev->set(1);
99 
100  if(r_mean!=NULL && r_thres!=NULL) {
101  func_defined = true;
102 
103  if(Int_thres!=NULL) delete Int_thres;
104  Int_thres = new TF1("intThres", "(" +r_thres->GetExpFormula() + ")*x", r_thres->GetXmin(), r_thres->GetXmax());
105  Int_thres->SetParameters(r_thres->GetParameters());
106  Int_thres->SetNpx(1000);
107 
108  if(Int_mean!=NULL) delete Int_mean;
109  Int_mean = new TF1("intMean", "(" +r_mean->GetExpFormula() + ")*x", r_mean->GetXmin(), r_mean->GetXmax());
110  Int_mean->SetParameters(r_mean->GetParameters());
111  Int_mean->SetNpx(1000);
112 
113  } else {
114  std::cerr << "-W PndEmcPSAFPGAPileupAnalyser:Init2 no pileup separation function defined. All hits will be treated as single pulses" << std::endl;
115  }
116 }
void set(unsigned int newBufferSize)
PndEmcPSAFPGAFilterMWD * MWD_filter2
void set(float tau, unsigned int newBufferSize)
PndEmcPSAFPGAFilterDelay * CF_prev
virtual void InitParameters(const std::vector< Double_t > &params)
PndEmcPSAFPGAFilterMWD * MWD_filter3
PndEmcPSAFPGAFilterMWD * MWD_filter1
PndEmcPSAFPGAFilterDelay * Signal_delay
void PndEmcPSAFPGASampleAnalyser::initFromFile ( const std::string &  fname)
virtualinherited

Definition at line 71 of file PndEmcPSAFPGASampleAnalyser.cxx.

References PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_delay, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_fit_offset, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_fitter_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_ratio, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::clock_unit, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::hit_threshold, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::iafactor, PndEmcPSAFPGASampleAnalyser::init(), PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::ma_trig_M, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd_length, and PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd_tau.

Referenced by PndEmcPSAFPGASampleAnalyser::PndEmcPSAFPGASampleAnalyser().

71  {// fname //[R.K.03/2017] unused variable(s)
72  SampleAnalyserParams newParams;
73  newParams.hit_threshold = 200;
74  newParams.ma_trig_M = 30;
75  newParams.cf_delay = 5;
76  newParams.cf_ratio = 0.15;
77  newParams.cf_fitter_length = 5;
78  newParams.cf_fit_offset = 2;
79  newParams.mwd_length = 90;
80  newParams.mwd_tau = 2500;
81  newParams.clock_unit = 10;//ns
82  newParams.iafactor= 1.;//ns
83 
84 /* std::ifstream ifile(fname.c_str());
85  if(!ifile) {
86  std::cerr << "Can not open input file: " << fname << "\n";
87  exit(1);
88  }
89 
90  std::set<std::string> options;
91  options.insert("MWD_Tau");
92  options.insert("MWD_Length");
93  options.insert("TR_Thresh");
94  options.insert("CFD_Ratio");
95  options.insert("CFD_Delay");
96  options.insert("Fit_ofset");
97  options.insert("Fitter_L");
98  options.insert("MA_trig");
99 
100  //parser
101  for (pod::config_file_iterator i(ifile, options), e ; i != e; ++i) {
102  if (i->string_key == "MWD_Tau") {
103  newParams.mwd_tau = atof((i->value[0]).c_str());
104  }
105  if (i->string_key == "MWD_Length") {
106  newParams.mwd_length = atoi((i->value[0]).c_str());
107  }
108  if (i->string_key == "TR_Thresh") {
109  newParams.hit_threshold = atof((i->value[0]).c_str());
110  }
111  if (i->string_key == "CFD_Ratio") {
112  newParams.cf_ratio = atof((i->value[0]).c_str());
113  }
114  if (i->string_key == "CFD_Delay") {
115  newParams.cf_delay = atoi((i->value[0]).c_str());
116  }
117  if (i->string_key == "Fit_ofset") {
118  newParams.cf_fit_offset = atoi((i->value[0]).c_str());
119  }
120  if (i->string_key == "Fitter_L") {
121  newParams.cf_fitter_length = atoi((i->value[0]).c_str());
122  }
123  if (i->string_key == "MA_trig") {
124  newParams.ma_trig_M = atoi((i->value[0]).c_str());
125  }
126  }
127 
128  ifile.close();*/
129  init(newParams);
130  return;
131 }
virtual void init(SampleAnalyserParams &params)
virtual void PndEmcPSAFPGAPileupAnalyser::initFromFile ( )
inlinevirtual

Definition at line 26 of file PndEmcPSAFPGAPileupAnalyser.h.

26 {};
void PndEmcPSAFPGAPileupAnalyser::InitParameters ( const std::vector< Double_t > &  params)
protectedvirtual

Definition at line 42 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_delay, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_fit_offset, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_fitter_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_ratio, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::hit_threshold, PndEmcPSAFPGASampleAnalyser::init(), PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::ma_trig_M, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd2_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd2_tau, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd3_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd3_tau, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd_length, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::mwd_tau, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::rough_timing_corr, and PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::sig_delay.

Referenced by Init2().

42  {
43 
44  //define parameter initialization, otherwise conflict with clock_unit and iafactor parameters, which have been added to PndEmcPSAFPGASampleAnalyser
45  //
46  const Int_t size = params.size();
47  if(size!=14) {
48  std::cerr << "-W PndEmcPSAFPGAPileupAnalyser::InitParameters Mismatch in number of parameters (" << size << "!=14). Filling missing parameter values up with zeros..." << std::endl;
49  }
50 
51  SampleAnalyserParams newParams;
52  newParams.ma_trig_M = (size>0) ? (int) params.at(0): 0;
53  newParams.hit_threshold = (size>1) ? params.at(1): 0;
54  newParams.cf_delay = (size>2) ? (int) params.at(2): 0;
55  newParams.cf_ratio = (size>3) ? params.at(3): 0;
56  newParams.cf_fitter_length = (size>4) ? (int) params.at(4): 0;
57  newParams.cf_fit_offset = (size>5) ? (int) params.at(5): 0;
58  newParams.mwd_length = (size>6) ? (int) params.at(6): 0;
59  newParams.mwd_tau = (size>7) ? params.at(7): 0;
60  newParams.mwd2_length = (size>8) ? (int) params.at(8): 0;
61  newParams.mwd2_tau = (size>9) ? params.at(9): 0;
62  newParams.mwd3_length = (size>10) ? (int) params.at(10): 0;
63  newParams.mwd3_tau = (size>11) ? params.at(11): 0;
64  newParams.sig_delay = (size>12) ? params.at(12): 0;
65  newParams.rough_timing_corr = (size>13) ? params.at(13): 0;
66 
68 }
virtual void init(SampleAnalyserParams &params)
int PndEmcPSAFPGASampleAnalyser::nHits ( )
inlineinherited
Int_t PndEmcPSAFPGASampleAnalyser::Process ( const PndEmcWaveform waveform)
virtualinherited

Find Hits in Waveform.

Parameters
PndEmcWaveform
Returns
Return number of hits, negative if an error occurred

Implements PndEmcAbsPSA.

Reimplemented in PndEmcPSAFPGADigitalFilterAnalyser.

Definition at line 177 of file PndEmcPSAFPGASampleAnalyser.cxx.

References PndEmcWaveform::GetSignal(), PndEmcPSAFPGASampleAnalyser::nHits(), PndEmcPSAFPGASampleAnalyser::put(), and PndEmcPSAFPGASampleAnalyser::reset().

177  {
178  //std::cout<<"PndEmcPSAFPGASampleAnalyser::Process#"<<waveform->GetTimeStamp()
179  // <<", "<<waveform->GetActiveTime()<<std::endl;
180  reset();
181  std::vector<double> signal = waveform->GetSignal();
182  std::vector<double>::iterator it;
183  for(it = signal.begin(); it < signal.end();it++){
184  this->put(*it);
185  }
186  return this->nHits();
187 }
virtual std::vector< double > GetSignal() const
virtual void put(float valueToStore)=0
void PndEmcAbsPSA::Process ( const PndEmcWaveform waveform,
Double_t amplitude,
Double_t time 
)
virtualinherited

Deprecated. Do not use.

Parameters
PndEmcWaveform
Double_t
Double_t
Returns

Reimplemented in PndEmcPSAMatchedDigiFilter, PndEmcPSAParabolic, PndEmcPSAParabolicBaseline, and PndEmcPSATrapDigiFilter.

Definition at line 2 of file PndEmcAbsPSA.cxx.

References PndEmcAbsPSA::GetHit(), and PndEmcAbsPSA::Process().

2  {
3  if(Process(waveform)>0){
4  GetHit(0,amplitude,time);
5  }else{
6  amplitude = 0.;
7  time = 0.;
8  }
9  }; //deprecated do not use
virtual Int_t Process(const PndEmcWaveform *waveform)=0
Find Hits in Waveform.
virtual void GetHit(Int_t i, Double_t &energy, Double_t &time)=0
Get energy and time of hit.
void PndEmcPSAFPGAPileupAnalyser::put ( float  valueToStore)
virtual

Implements PndEmcPSAFPGASampleAnalyser.

Definition at line 153 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References a, PndEmcPSAFPGASampleAnalyser::amplitude, PndEmcPSAFPGASampleAnalyser::analyserParams, PndEmcPSAFPGASampleAnalyser::baseline_value, baselineMode, BaselineStartSample, BaselineStopSample, BaselineSum, cf_crossing, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_delay, PndEmcPSAFPGASampleAnalyser::CF_delay, PndEmcPSAFPGASampleAnalyser::CF_filter, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::cf_fit_offset, PndEmcPSAFPGASampleAnalyser::CF_Fitter, CF_prev, cfRise, cfZero, energy_finished, PndEmcPSAFPGALinFitter::fit(), func_defined, fVerbose, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::hit_threshold, i, in_cfRise, Int_mean, Int_thres, PndEmcPSAFPGASampleAnalyser::integral, PndEmcPSAFPGASampleAnalyser::kBaseline, PndEmcPSAFPGASampleAnalyser::kInPulse, kPileup1, kPileup2, PndEmcPSAFPGASampleAnalyser::kPileupFinished, PndEmcPSAFPGASampleAnalyser::kPulseDetected, PndEmcPSAFPGASampleAnalyser::kPulseFinished, kSingle, PndEmcPSAFPGASampleAnalyser::kUndefined, kWindow, PndEmcPSAFPGASampleAnalyser::local_time, MWD_filter1, MWD_filter2, MWD_filter3, PndEmcPSAFPGASampleAnalyser::Number_of_hits, PndEmcPSAFPGALinFitter::offset(), pileups, PndEmcPSAFPGASampleAnalyser::pulse_detected, PndEmcPSAFPGAFilterDelay::put(), PndEmcPSAFPGAFilterMWD::put(), PndEmcPSAFPGAFilterCF::put(), PndEmcPSAFPGALinFitter::putPoint(), PndEmcPSAFPGALinFitter::reset(), PndEmcPSAFPGASampleAnalyser::rough_pulse_timing, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::rough_timing_corr, PndEmcPSAFPGASampleAnalyser::SampleAnalyserParams::sig_delay, PndEmcPSAFPGASampleAnalyser::Signal_delay, PndEmcPSAFPGALinFitter::slope(), PndEmcPSAFPGASampleAnalyser::status, PndEmcPSAFPGASampleAnalyser::time, and timing_finished.

153  {
154 
157  BaselineSum += valueToStore;
158  }
161  }
162  } else {
163 
164  float signal = valueToStore - baseline_value;
165  float signal_delayed = (analyserParams.sig_delay>0) ? Signal_delay->put(signal) : signal;
166 
167  float mwd_value = MWD_filter1->put(signal);
168  float mwd2_value = MWD_filter2->put(mwd_value);
169  float mwd3_value = MWD_filter3->put(mwd2_value);
170 
171  float cf_value = CF_filter->put(mwd3_value);
172  float cf_value_delayed = (analyserParams.cf_fit_offset>0) ? CF_delay->put(cf_value) : cf_value;
173  float cf_value_prev = CF_prev->put(cf_value_delayed);
174 
175  status = kUndefined;
176 
177  if (!pulse_detected) {
178  if(signal > analyserParams.hit_threshold) { // new pulse detected..reset pulse specific quantities
180  energy_finished = false;
181  timing_finished = false;
182  pulse_detected = true;
184  cf_crossing = 0;
185  in_cfRise = false;
186  integral[Number_of_hits] = 0.0;
187  amplitude[Number_of_hits] = 0.0;
188 
189  if(fVerbose>=5) std::cout << "first time over thres: " << local_time << std::endl;
190  } else {
191  status = kBaseline;
192  }
193  }
194 
195  int dT = local_time - rough_pulse_timing;
196 
197  if(pulse_detected) { // over thres
198 
200 
201  if( (!(dT<analyserParams.sig_delay)) && (!energy_finished) ) { // delayed over thres
202  if(fVerbose>=5) std::cout << local_time << " ";
203  // Integral
204  integral[Number_of_hits] += signal_delayed;
205  // Amplitude
206  if(cf_crossing==0 && (signal_delayed > amplitude[Number_of_hits])) {
207  amplitude[Number_of_hits] = signal_delayed;
208  }
209  if(signal_delayed < analyserParams.hit_threshold) {
210  energy_finished = true;
211  if(fVerbose>=5) std::cout << local_time << std::endl;;
212  }
213  }
214 
215 
216  if( (!(dT<analyserParams.cf_delay)) && (!timing_finished) ) {
217  if((cf_value_prev < 0.0) && (cf_value_delayed >= 0.0)) { // new zero crossing
218  CF_Fitter->reset();
219  CF_Fitter->putPoint(local_time-1, cf_value_prev);
220  CF_Fitter->putPoint(local_time, cf_value_delayed);
221  CF_Fitter->fit();
222  double a = CF_Fitter->offset();
223  double k = CF_Fitter->slope();
224  cfZero[cf_crossing++] = (k>0) ? -a/k : 0;
225  in_cfRise = true;
226  }
227 
228  if(cf_value_delayed< cf_value_prev) {
229  if(in_cfRise) {
230  cfRise[cf_crossing-1] = cf_value_prev - cfRise[cf_crossing-1];
231  in_cfRise = false;
232  } else {
233  cfRise[cf_crossing] = cf_value_delayed;
234  }
235  }
236  if(energy_finished) {
237  timing_finished = true;
238  }
239  }
240 
242 
243  time[Number_of_hits] = (cf_crossing>0) ? cfZero[0] : rough_pulse_timing-analyserParams.rough_timing_corr;
244 
245  if(fVerbose>=2) {
246  std::cout << "Finaliyzing " << Number_of_hits << " hit" << std::endl;
247  std::cout << " time: " << time[Number_of_hits] << std::endl;
248  std::cout << " ampitude: " << amplitude[Number_of_hits] << "\t";
249  std::cout << " integral: " << integral[Number_of_hits] << std::endl;
250  }
251 
252  if(fVerbose >= 3) {
253  std::cout << "all zeroCrossings t/rise" << std::endl;
254  for(unsigned int i=0; i<cf_crossing; ++i) {
255  std::cout << cfZero[i] << "/" << cfRise[i] << std::endl;
256  }
257  }
258 
259 
260  if( (!func_defined) || (integral[Number_of_hits] < Int_thres->Eval(amplitude[Number_of_hits]))) { //single pulse
262  if(fVerbose>=2) std::cout << "single hit" << std::endl;
264  Number_of_hits++;
265  } else { //pileup pulse
267  if(fVerbose>=2) std::cout << "pileup hit" << std::endl;
268  //i2 = i_ges - i1
269  integral[Number_of_hits+1] = integral[Number_of_hits] - Int_mean->Eval(amplitude[Number_of_hits]);
270  //i1 = i_ges - i2
271  integral[Number_of_hits]-= integral[Number_of_hits+1];
272  amplitude[Number_of_hits+1] = Int_mean->GetX(integral[Number_of_hits+1], 0, 0, 5.e-4, 100, kTRUE);
273 
274  if(cf_crossing>1) {
275  float max_rise = 0;
276  for(unsigned int i=1; i<cf_crossing; ++i) {
277  if(cfRise[i] > max_rise) {
278  max_rise = cfRise[i];
279  time[Number_of_hits+1] = cfZero[i];
280  }
281  }
282  } else {
283  time[Number_of_hits+1] = rough_pulse_timing-analyserParams.rough_timing_corr;
284  }
286  pileups[Number_of_hits+1] = kPileup2;
287 
288 
289  if(fVerbose>=2) {
290  std::cout << "amp1: " << amplitude[Number_of_hits] << "\tint1: " << integral[Number_of_hits] << "\tamp2: " << amplitude[Number_of_hits+1] << "\tint2: " << integral[Number_of_hits+1] << std::endl;
291  }
292 
293  Number_of_hits+=2;
294  }
295  pulse_detected = false;
296  }
297  }
298 
299  if(fVerbose>=9) {
300  using namespace std;
301  cout << "#" << local_time <<" ";
302  cout << "mwd: " << mwd_value <<" ";
303  cout << "mwd 2: " << mwd2_value <<" ";
304  cout << "mwd 3: " << mwd3_value <<" ";
305  cout << "cf delay: " << cf_value_delayed <<" ";
306  if(pulse_detected) cout << "detec ";
307  if(!energy_finished) cout << "energy method running ";
308  if(!timing_finished) cout << "timing method running ";
309  cout << endl;
310  }
311  }
312  local_time++;
313 }
float integral[MAX_NUMBER_OF_HITS]
Int_t i
Definition: run_full.C:25
PndEmcPSAFPGAFilterMWD * MWD_filter2
float put(float valueToStore)
void putPoint(double ix, double iy)
pileup_t pileups[MAX_NUMBER_OF_HITS]
PndEmcPSAFPGAFilterDelay * CF_prev
float amplitude[MAX_NUMBER_OF_HITS]
Int_t a
Definition: anaLmdDigi.C:126
enum PndEmcPSAFPGAPileupAnalyser::@0 baselineMode
virtual float put(float valueToStore)
PndEmcPSAFPGAFilterMWD * MWD_filter3
PndEmcPSAFPGAFilterMWD * MWD_filter1
PndEmcPSAFPGAFilterDelay * Signal_delay
virtual float put(float valueToStore)
PndEmcPSAFPGAFilterDelay * CF_delay
void PndEmcPSAFPGAPileupAnalyser::reset ( )
virtual

Implements PndEmcPSAFPGASampleAnalyser.

Definition at line 26 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References BaselineSum, PndEmcPSAFPGASampleAnalyser::CF_delay, PndEmcPSAFPGASampleAnalyser::CF_filter, PndEmcPSAFPGASampleAnalyser::local_time, PndEmcPSAFPGASampleAnalyser::MA_triggering, MWD_filter1, MWD_filter2, MWD_filter3, PndEmcPSAFPGASampleAnalyser::Number_of_hits, PndEmcPSAFPGASampleAnalyser::pulse_detected, PndEmcPSAFPGAFilterDelay::resetToZero(), PndEmcPSAFPGAFilterMA::resetToZero(), PndEmcPSAFPGAFilterCF::resetToZero(), PndEmcPSAFPGAFilterMWD::resetToZero(), and PndEmcPSAFPGASampleAnalyser::rough_pulse_timing.

26  { //reset for every waveform to process
27  local_time = 0;
29  Number_of_hits = 0;
36  pulse_detected = false;
37  BaselineSum = 0;
38  return;
39 }
PndEmcPSAFPGAFilterMWD * MWD_filter2
PndEmcPSAFPGAFilterMWD * MWD_filter3
PndEmcPSAFPGAFilterMWD * MWD_filter1
PndEmcPSAFPGAFilterDelay * CF_delay
virtual void PndEmcPSAFPGASampleAnalyser::Reset ( )
inlinevirtualinherited

reset found hits

Returns

Reimplemented from PndEmcAbsPSA.

Definition at line 34 of file PndEmcPSAFPGASampleAnalyser.h.

References PndEmcPSAFPGASampleAnalyser::reset().

Referenced by PndEmcHighLowPSA::Reset().

34 {this->reset();};
float PndEmcPSAFPGASampleAnalyser::sampleAmplitude ( int  index)
inherited

Definition at line 165 of file PndEmcPSAFPGASampleAnalyser.cxx.

References PndEmcPSAFPGASampleAnalyser::amplitude, and PndEmcPSAFPGASampleAnalyser::nHits().

Referenced by GetEnergyMeasures(), GetHit(), and PndEmcPSAFPGASampleAnalyser::GetHit().

165  {
166  if(index < nHits() && index >= 0)
167  return amplitude[index];
168  return 0.0;
169 }
float amplitude[MAX_NUMBER_OF_HITS]
float PndEmcPSAFPGASampleAnalyser::sampleIntegral ( int  index)
inherited

Definition at line 171 of file PndEmcPSAFPGASampleAnalyser.cxx.

References PndEmcPSAFPGASampleAnalyser::integral, and PndEmcPSAFPGASampleAnalyser::nHits().

Referenced by GetEnergyMeasures().

171  {
172  if (index < nHits() && index >= 0)
173  return integral[index];
174  return 0.0;
175 }
float integral[MAX_NUMBER_OF_HITS]
float PndEmcPSAFPGASampleAnalyser::sampleTime ( int  index)
inherited

Definition at line 159 of file PndEmcPSAFPGASampleAnalyser.cxx.

References PndEmcPSAFPGASampleAnalyser::nHits(), and PndEmcPSAFPGASampleAnalyser::time.

Referenced by GetHit(), and PndEmcPSAFPGASampleAnalyser::GetHit().

159  {
160  if (index < nHits() && index >= 0)
161  return time[index];
162  return 0.0;
163 }
void PndEmcPSAFPGAPileupAnalyser::setBaseline ( float  newBaseline)
protectedvirtual

Reimplemented from PndEmcPSAFPGASampleAnalyser.

Definition at line 120 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References baselineMode, kExtern, and PndEmcPSAFPGASampleAnalyser::setBaseline().

Referenced by Init().

120  {
123 }
enum PndEmcPSAFPGAPileupAnalyser::@0 baselineMode
virtual void setBaseline(float newBaseline)
void PndEmcPSAFPGAPileupAnalyser::setBaselineWindow ( unsigned int  startSample,
unsigned int  stopSample 
)
protectedvirtual

Definition at line 125 of file PndEmcPSAFPGAPileupAnalyser.cxx.

References baselineMode, BaselineStartSample, BaselineStopSample, and kWindow.

Referenced by Init().

125  {
126  BaselineStartSample = startSample;
127  BaselineStopSample = stopSample;
129 }
enum PndEmcPSAFPGAPileupAnalyser::@0 baselineMode
virtual void PndEmcPSAFPGAPileupAnalyser::SetVerbose ( Int_t  verbose = 0)
inlinevirtual

Definition at line 22 of file PndEmcPSAFPGAPileupAnalyser.h.

References fVerbose, and verbose.

Referenced by PndEmcFWEndcapDigi::Init().

Member Data Documentation

float PndEmcPSAFPGASampleAnalyser::amplitude[MAX_NUMBER_OF_HITS]
protectedinherited
SampleAnalyserParams PndEmcPSAFPGASampleAnalyser::analyserParams
protectedinherited
float PndEmcPSAFPGASampleAnalyser::baseline_value
protectedinherited
enum { ... } PndEmcPSAFPGAPileupAnalyser::baselineMode

Referenced by put(), setBaseline(), and setBaselineWindow().

unsigned int PndEmcPSAFPGAPileupAnalyser::BaselineStartSample
protected

Definition at line 51 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by put(), and setBaselineWindow().

unsigned int PndEmcPSAFPGAPileupAnalyser::BaselineStopSample
protected

Definition at line 52 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by put(), and setBaselineWindow().

float PndEmcPSAFPGAPileupAnalyser::BaselineSum
protected

Definition at line 53 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by put(), and reset().

unsigned int PndEmcPSAFPGAPileupAnalyser::cf_crossing
protected

Definition at line 64 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by put().

PndEmcPSAFPGAFilterDelay* PndEmcPSAFPGASampleAnalyser::CF_delay
protectedinherited
PndEmcPSAFPGAFilterCF* PndEmcPSAFPGASampleAnalyser::CF_filter
protectedinherited
PndEmcPSAFPGALinFitter* PndEmcPSAFPGASampleAnalyser::CF_Fitter
protectedinherited
PndEmcPSAFPGAFilterDelay* PndEmcPSAFPGAPileupAnalyser::CF_prev
protected

Definition at line 58 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by Init2(), put(), and ~PndEmcPSAFPGAPileupAnalyser().

int PndEmcPSAFPGASampleAnalyser::cf_zero_crossing_points
protectedinherited
float PndEmcPSAFPGAPileupAnalyser::cfRise[MAX_NUMBER_OF_HITS]
protected

Definition at line 67 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by put().

float PndEmcPSAFPGAPileupAnalyser::cfZero[MAX_NUMBER_OF_HITS]
protected

Definition at line 66 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by put().

bool PndEmcPSAFPGAPileupAnalyser::energy_finished
protected

Definition at line 60 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by put().

bool PndEmcPSAFPGAPileupAnalyser::func_defined
protected

Definition at line 62 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by Init2(), and put().

Int_t PndEmcPSAFPGAPileupAnalyser::fVerbose
protected

Definition at line 47 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by put(), and SetVerbose().

bool PndEmcPSAFPGAPileupAnalyser::in_cfRise
protected

Definition at line 65 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by put().

TF1* PndEmcPSAFPGAPileupAnalyser::Int_mean
protected

Definition at line 49 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by Init2(), put(), and ~PndEmcPSAFPGAPileupAnalyser().

TF1* PndEmcPSAFPGAPileupAnalyser::Int_thres
protected

Definition at line 48 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by Init2(), put(), and ~PndEmcPSAFPGAPileupAnalyser().

float PndEmcPSAFPGASampleAnalyser::integral[MAX_NUMBER_OF_HITS]
protectedinherited
unsigned int PndEmcPSAFPGASampleAnalyser::local_time
protectedinherited
PndEmcPSAFPGAFilterDelay* PndEmcPSAFPGASampleAnalyser::MA_delay
protectedinherited
PndEmcPSAFPGAFilterMA* PndEmcPSAFPGASampleAnalyser::MA_triggering
protectedinherited
PndEmcPSAFPGAFilterMWD* PndEmcPSAFPGAPileupAnalyser::MWD_filter1
protected

Definition at line 55 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by Init2(), put(), reset(), and ~PndEmcPSAFPGAPileupAnalyser().

PndEmcPSAFPGAFilterMWD* PndEmcPSAFPGAPileupAnalyser::MWD_filter2
protected

Definition at line 56 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by Init2(), put(), reset(), and ~PndEmcPSAFPGAPileupAnalyser().

PndEmcPSAFPGAFilterMWD* PndEmcPSAFPGAPileupAnalyser::MWD_filter3
protected

Definition at line 57 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by Init2(), put(), reset(), and ~PndEmcPSAFPGAPileupAnalyser().

int PndEmcPSAFPGASampleAnalyser::Number_of_hits
protectedinherited
pileup_t PndEmcPSAFPGAPileupAnalyser::pileups[MAX_NUMBER_OF_HITS]
protected

Definition at line 68 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by GetHit(), and put().

bool PndEmcPSAFPGASampleAnalyser::pulse_detected
protectedinherited
int PndEmcPSAFPGASampleAnalyser::rough_pulse_timing
protectedinherited
PndEmcPSAFPGAFilterDelay* PndEmcPSAFPGASampleAnalyser::Signal_delay
protectedinherited
status_t PndEmcPSAFPGASampleAnalyser::status
protectedinherited

Definition at line 84 of file PndEmcPSAFPGASampleAnalyser.h.

Referenced by PndEmcPSAFPGASampleAnalyser::GetStatus(), and put().

float PndEmcPSAFPGASampleAnalyser::time[MAX_NUMBER_OF_HITS]
protectedinherited
bool PndEmcPSAFPGAPileupAnalyser::timing_finished
protected

Definition at line 61 of file PndEmcPSAFPGAPileupAnalyser.h.

Referenced by put().


The documentation for this class was generated from the following files: