FairRoot/PandaRoot
PndEmcSimCrystalCalibrator.cxx
Go to the documentation of this file.
1 //---------------------------------------------------------
2 // Description:
3 // Calibrator for Emc Crystals for use in Simulations
4 //
5 // Christian Hammann
6 // 31.7.2012
7 
8 //---------------------------------------------------------
9 
11 #include <iostream>
12 
13 using std::map;
14 using std::pair;
15 using std::make_pair;
16 
18 };
19 
20 void PndEmcSimCrystalCalibrator::SetCalibration(Int_t ModId, Double_t cal, Int_t SignalNr, Double_t overflow){
21  if((int)fModuleCalibrationMaps.size() < SignalNr+1) {
22  fModuleCalibrationMaps.resize(SignalNr+1);
23  fCrystalCalibrationMaps.resize(SignalNr+1);
24  }
25  fModuleCalibrationMaps[SignalNr].insert(pair<Int_t, pair<Double_t,Double_t> >(ModId, make_pair(1.0/cal, overflow)));
26  }
27 
28 void PndEmcSimCrystalCalibrator::CreateRandomCalibration(Double_t ){ // Sigma //[R.K.03/2017] unused variable(s)
29  //not implemented yet
30 };
31 
33  return kTRUE;
34 };
35 
37  Int_t ModId = (Int_t)(DetId / 1e8);
38 
39 
40  CalibrationStatus_t returnValue = kCALERROR;
41 
42  if((int)fModuleCalibrationMaps.size() <= SignalNr) {
43  if(fVerbose) std::cout << "no calibration found for signal number " << SignalNr << std::endl;
44  returnValue = kCALMISSING;
45  } else {
46 
47  if(fRandomCal) {
48  map<Long_t,Double_t>::iterator it2;
49  it2 = fCrystalCalibrationMaps[SignalNr].find(DetId);
50  if(it2!=fCrystalCalibrationMaps[SignalNr].end()){
51  Energy*=it2->second;
52  } else {
53  return kCALMISSING;
54  }
55  }
56 
57 
58  map<Int_t, pair<Double_t, Double_t> >::iterator it;
59  it=fModuleCalibrationMaps[SignalNr].find(ModId);
60  if(it!=fModuleCalibrationMaps[SignalNr].end()) {
61  Double_t calib = it->second.first;
62  Double_t overflow = it->second.second;
63 
64  if(fVerbose) std::cout << "Calibrating signal " << SignalNr << "\t calib constant: " << calib << "\t overflow: " << overflow << std::endl;
65  if(overflow>0 && Energy>=overflow) {
66  returnValue = kCALOVERFLOW;
67  } else {
68  returnValue = kCALOK;
69  }
70  Energy*=calib;
71  }
72  }
73  return returnValue;
74 }
75 
76 
int fVerbose
Definition: poormantracks.C:24
PndTransMap * map
Definition: sim_emc_apd.C:99
#define verbose
std::vector< std::map< Long_t, Double_t > > fCrystalCalibrationMaps
virtual void CreateRandomCalibration(Double_t Sigma)
Creates a random gaussion distributed calibration for all crystals Not implemented yet...
Double_t
virtual void SetCalibration(Int_t ModId, Double_t cal, Int_t SignalNr=1, Double_t overflow=-1)
Set Calibration for a Module.
Class to simulate a Calibration.
std::vector< std::map< Int_t, std::pair< Double_t, Double_t > > > fModuleCalibrationMaps
virtual CalibrationStatus_t Calibrate(Double_t &Energy, Long_t DetId, Int_t SignalNr=1)
Apply CrystalCalibration to Energy of Crystal derId.
ClassImp(PndEmcSimCrystalCalibrator)
Abstract interface for a emc calibrator.