30 #include "FairRootManager.h"
31 #include "FairRunAna.h"
32 #include "FairRuntimeDb.h"
34 #include "TClonesArray.h"
35 #include "TStopwatch.h"
67 FairRootManager* ioman = FairRootManager::Instance();
70 cout <<
"-E- PndEmcMultiWaveformToCalibratedDigi::Init: "
71 <<
"RootManager not instantiated!" << endl;
76 fWaveformArray = (TClonesArray*) ioman->GetObject(
"EmcMultiWaveform");
78 cout <<
"-W- PndEmcMultiWaveformToCalibratedDigi::Init: "
79 <<
"No PndEmcMultiWaveform array!" << endl;
114 cout <<
"-W- PndEmcMultiWaveformToCalibratedDigi::Init: "
115 <<
"Unknown digi position method!" << endl;
127 std::vector<Double_t> params;
128 params.push_back(30);
158 cout <<
"-I- PndEmcMultiWaveformToCalibratedDigi: Read "<<
fCalibrationMap.size() <<
" Calibration Entries" << endl;
160 cout <<
"-I- PndEmcMultiWaveformToCalibratedDigi: Intialization successfull" << endl;
172 if ( !
fDigiArray ) Fatal(
"Exec",
"No Digi Array");
191 std::map<Int_t,Double_t>::iterator it;
193 for (Int_t iWaveform=0; iWaveform<nWaveforms; iWaveform++) {
209 for(Int_t iSignal=0; iSignal < nSignal; iSignal++){
211 nHits[iSignal] = thePSA->
Process(theWaveform);
213 for(Int_t iHit = 0; iHit < nHits[iSignal]; iHit ++){
214 thePSA->
GetHit(iHit,hitenergies[iSignal][iHit],hittimes[iSignal][iHit]);
219 for(Int_t iHit = 0; iHit < nHits[0]; iHit++){
221 peakPosition = hittimes[0][iHit];
222 energy = hitenergies[0][iHit];
223 if(nSignal > 1 && energy > 1500.){
227 for(Int_t iHit1 = 0; iHit1<nHits[1]; iHit1++){
229 if(
TMath::Abs(peakPosition - hittimes[1][iHit1]) < 10.){
231 energy = hitenergies[1][iHit1];
232 peakPosition = hittimes[0][iHit];
240 energy/=theEnergyNorm;
241 digi_time = peakPosition/theSampleRate;
254 if(hitIndex == 45) std::cout <<
"found highgain value of " << it->second <<
" for hitIndex " << hitIndex << std::endl;
265 PndEmcDigi* myDigi =
new((*fDigiArray)[i_digi])
PndEmcDigi(trackId,detId, energy, digi_time, hitIndex);
266 myDigi->AddLink(FairLink(
"EmcMultiWaveform", iWaveform));
276 cout <<
"PndEmcMultiWaveformToCalibratedDigi, Real time " << rtime <<
" s, CPU time " << ctime <<
" s" << endl;
284 FairRun*
run = FairRun::Instance();
285 if ( ! run ) Fatal(
"SetParContainers",
"No analysis run");
287 FairRuntimeDb* db = run->GetRuntimeDb();
288 if ( ! db ) Fatal(
"SetParContainers",
"No runtime database");
308 std::cerr <<
"Cannot open calibration file!" << endl;
313 while (in.getline(buf, 255)) {
315 TObjArray *tokens = tmp.Tokenize(
" \t;");
316 if(tokens->GetEntries()<2){
319 tmp=tokens->UncheckedAt(0)->GetName();
320 TString tmp2 = tokens->UncheckedAt(1)->GetName();
321 if(tmp.IsDigit() && tmp2.IsFloat()){
322 fCalibrationMap.insert(std::pair<Int_t,Double_t>(tmp.Atoi(),tmp2.Atof()));
325 if(tokens->GetEntries()<3){
328 tmp2 = tokens->UncheckedAt(2)->GetName();
329 if(tmp.IsDigit() && tmp2.IsFloat()){
330 fGainMap.insert(std::pair<Int_t,Double_t>(tmp.Atoi(),tmp2.Atof()));
338 std::cout <<
"calibration values:" << std::endl;
339 std::map<Int_t,Double_t>::iterator it;
340 std::map<Int_t,Double_t>::iterator it2;
344 std::cout << detid <<
"\t" << (*it).second <<
"\t";
347 std::cout << (*it2).second;
Double_t GetEmcDigiPositionDepthShashlyk()
Double_t GetPMT_Shaping_diff_time()
static void selectDigiPositionMethod(PositionMethod, double positionDepthPWO=0., double positionDepthShahslyk=0., double rescaleFactor=1.)
Int_t GetNumber_of_samples_in_waveform()
Pulseshape analysis for ADC waveforms.
represents the reconstructed hit of one emc crystal
Double_t val[nBoxes][nFEBox]
virtual Int_t Process(const PndEmcWaveform *waveform)=0
Find Hits in Waveform.
Double_t GetCrystal_time_constant()
void SetPersistency(Bool_t val=kTRUE)
Pulseshape analysis for ADC waveforms.
virtual void GetHit(Int_t i, Double_t &energy, Double_t &time)=0
Get energy and time of hit.
Double_t GetASIC_Shaping_int_time()
Pulseshape from an CRRC-Shaper.
Double_t GetEnergyDigiThreshold()
Pulseshape from an APFEL ASIC preamplifier shaper.
parameter set of Emc digitisation
virtual void SetEnergy(Double32_t energy)
Baseclass for pulseshapeanalysis ( featureextraction )
represents the deposited energy of one emc crystal from simulation
Double_t GetSampleRate_PMT()
virtual void SetTime(Double32_t time)
Double_t GetShashlyk_time_constant()
Int_t GetNumber_of_samples_in_waveform_pmt()
Double_t GetPMT_Shaping_int_time()
Parameter set for Emc Reco.
Double_t GetEmcDigiPositionDepthPWO()