PandaRoot
PndEmcWaveformToDigi.h
Go to the documentation of this file.
1 //---------------------------------------------------------------------- // File and Version Information:
2 // $Id: Exp $
3 //
4 // Description:
5 // Class PndEmcWaveformToDigi. Module to take the ADC waveforms and produces digi.
6 //
7 // Software developed for the BaBar Detector at the SLAC B-Factory.
8 // Adapted for the PANDA experiment at GSI
9 //
10 // Author List:
11 // Phil Strother Original Author
12 // Dima Melnichuk - adaption for PANDA
13 //
14 // Copyright Information:
15 // Copyright (C) 1996 Imperial College
16 //
17 //----------------------------------------------------------------------
18 //#pragma once
19 #ifndef PndEmcWaveformToDigi_H
20 #define PndEmcWaveformToDigi_H
21 
22 #include <PndPersistencyTask.h>
24 #include <string>
25 #include "FairTSBufferFunctional.h"
26 #include <map>
27 #include <list>
28 #include <set>
29 #include "TTree.h"
30 #include "TFile.h"
31 #include "TVectorD.h"
32 
33 class PndEmcHit;
35 class PndEmcWaveform;
36 
37 class TClonesArray;
38 class PndEmcDigiPar;
39 class PndEmcRecoPar;
40 class PndEmcFpgaPar;
41 class PndEmcAbsPSA;
44 
45 
51 {
52 public:
53  // Constructors
54  PndEmcWaveformToDigi(Int_t verbose=0, Bool_t storedigis=kTRUE);
55  // Destructor
56  virtual ~PndEmcWaveformToDigi();
57 
58  virtual InitStatus Init();
59  virtual void Exec(Option_t* opt);
60 
61  void SetStorageOfData(Bool_t val); // Method to specify whether digis are stored or not.
62  void RunTimeBased(){fTimeOrderedDigi = kTRUE;}
63 
64  void UseDigitizationVersion2() { fDigitizationVersion2 = kTRUE;}
65  void SetFakeOnline(bool d=true){fFakeOnline=d;};
66 
73  virtual void SetPSAAlgorithm(PndEmcAbsPSA *psa){fpsaAlgorithm=psa;}
80  virtual void SetPSAAlgorithmFWD(PndEmcAbsPSA *psa){fpsaAlgorithm_fwd=psa;}
88  virtual void SetPSAAlgorithmPMT(PndEmcAbsPSA *psa){fpsaAlgorithm_pmt=psa;}
96  virtual void SetCrystalCalibrator(PndEmcAbsCrystalCalibrator *Cal){fCalibrator=Cal;}
97 
98  virtual void FinishTask();
99 
100 protected:
102  virtual void SetParContainers();
103 private:
104  // don't allow copying (-Weffc++)
105  PndEmcWaveformToDigi(const PndEmcWaveformToDigi&); // no implementation
106  PndEmcWaveformToDigi& operator= (const PndEmcWaveformToDigi&); // no implementation
107 
108  //Double_t GetEventTimebyDigiTime(Double_t digiT, Double_t digiE, Int_t detID, bool PrintOut=false) const;
109  //Int_t GetIdxByEnergy(Double_t energy) const;
110 
111 private:
113  TClonesArray* fWaveformArray;
114  //TClonesArray* fMcTrackArray;
115  TClonesArray* fEvtHeaderArray;
116 
118  TClonesArray* fDigiArray;
119 
120  Double_t fSampleRate;
121  Double_t fSampleRate_PMT;
122  Double_t fSampleRate_FWD;
123  Double_t fEnergyDigiThreshold;
124  Double_t fASIC_Shaping_int_time; //s
125  Double_t fPMT_Shaping_int_time; //s
126  Double_t fPMT_Shaping_diff_time; //s
127  Double_t fCrystal_time_constant; //s
128  Double_t fShashlyk_time_constant; //s
129  Int_t fNumber_of_samples_in_waveform;
130  Int_t fNumber_of_samples_in_waveform_pmt;
131  Int_t fNumber_of_samples_in_waveform_fwd;
132  Double_t fFWD_Shaping_int_time;
133  Double_t fFWD_time_constant;
134 
135  //std::string fDigiPosMethod;// "surface" or "depth"
136  TString fDigiPosMethod;
137  Double_t fEmcDigiRescaleFactor;
138  Double_t fEmcDigiPositionDepthPWO;
139  Double_t fEmcDigiPositionDepthShashlyk;
140 
141  PndEmcAbsPulseshape* fPulseshape;
142  PndEmcAbsPulseshape* fPulseshape_pmt;
143  PndEmcAbsPulseshape* fPulseshape_fwd;
144  PndEmcAbsPSA *fpsaAlgorithm;
145  PndEmcAbsPSA *fpsaAlgorithm_pmt;
146  PndEmcAbsPSA *fpsaAlgorithm_fwd;
147 
148  PndEmcAbsCrystalCalibrator *fCalibrator;
149 
150  PndEmcDigiPar* fDigiPar;
151  PndEmcRecoPar* fRecoPar;
152  PndEmcFpgaPar* fFpgaPar;
154  //PndEmcDigiWriteoutBuffer* fDataBuffer;
155 
157  Int_t fVerbose;
158  Bool_t fStoreDigis;
159  Bool_t fTimeOrderedDigi;
160 
161  Double_t fWfNormalisation; // Waveform normalisation constant
162  Double_t fWfNormalisation_fwd; // Waveform normalisation constant
163  Double_t fWfNormalisation_pmt;
164 
165  BinaryFunctor* fFunctor;
166 
167  //coefficients
168  TVectorD CoeffMod3;
169  TVectorD CoeffMod5;
170  TVectorD CoeffModo;
171 
172  Int_t fEventNo;
173  Double_t fTimeWindow;
174  Double_t fTimeShift;
175  //buffer for undetermined event
176 
177  Int_t totDigisAboveThreshold;
178  Int_t totHits ;
179  Int_t totExpHits ;
180  Int_t totNumOfWave ;
181 
182  Bool_t fDigitizationVersion2;
183  //
184  bool fFakeOnline; // Flag to add ~factor2 of worse resolution .
185  Float_t SmearFakeOnline(Float_t energy);
186 
187  ClassDef(PndEmcWaveformToDigi,1);
188 };
189 
190 #endif
191 
192 
193 
194 
195 
virtual void SetPSAAlgorithmFWD(PndEmcAbsPSA *psa)
Set PSA Algorithm to be used for Forward Endcap.
void SetFakeOnline(bool d=true)
virtual void SetPSAAlgorithmPMT(PndEmcAbsPSA *psa)
Set PSA Algorithm to be used for Forward Shashlik.
stores crystal index coordinates (x,y) or (theta,phi)
virtual void FinishTask()
PndEmcWaveformToDigi(Int_t verbose=0, Bool_t storedigis=kTRUE)
parameter set of Emc digitisation
Definition: PndEmcDigiPar.h:12
virtual void SetCrystalCalibrator(PndEmcAbsCrystalCalibrator *Cal)
Set The Crystal Calibrator to use.
virtual void SetPSAAlgorithm(PndEmcAbsPSA *psa)
Set PSA Algorithm to be used for Barrel and Backward Endcap.
void SetStorageOfData(Bool_t val)
virtual void Exec(Option_t *opt)
virtual void SetParContainers()
represents a simulated waveform in an emc crystal
Baseclass for pulseshapeanalysis ( featureextraction )
Definition: PndEmcAbsPSA.h:21
represents the deposited energy of one emc crystal from simulation
Definition: PndEmcHit.h:28
pulseshape interface
Takes list of PndEmcWaveform and creates PndEmcDigi.
virtual InitStatus Init()
Abstract interface for a emc calibrator.
Parameter set for Emc Reco.
Definition: PndEmcRecoPar.h:12
virtual ~PndEmcWaveformToDigi()