2 #include "G4Poisson.hh" 3 #include "Randomize.hh" 5 #include <CCDB/Calibration.h> 6 #include <CCDB/Model/Assignment.h> 7 #include <CCDB/CalibrationGenerator.h> 14 #include "CLHEP/Units/PhysicalConstants.h" 15 using namespace CLHEP;
21 cout<<
"Entering initializeCTOF"<<endl;
25 if(runno == -1)
return ctc;
28 ctc.
date =
"2015-11-29";
29 if(getenv (
"CCDB_CONNECTION") != NULL)
30 ctc.
connection = (string) getenv(
"CCDB_CONNECTION");
32 ctc.
connection =
"mysql://clas12reader@clasdb.jlab.org/clas12";
44 cout<<
"CTOF:Setting time resolution"<<endl;
48 ctc.
tres.push_back(1e-3*65.);
53 vector<vector<double> > data;
55 auto_ptr<Calibration> calib(CalibrationGenerator::CreateCalibration(ctc.
connection));
56 cout<<
"Connecting to "<<ctc.
connection<<
"/calibration/ctof"<<endl;
58 cout<<
"CTOF:Getting attenuation"<<endl;
59 sprintf(ctc.
database,
"/calibration/ctof/attenuation:%d",ctc.
runNo);
60 data.clear(); calib->GetCalib(data,ctc.
database);
61 for(
unsigned row = 0; row < data.size(); row++)
63 isec = data[row][0]; ilay = data[row][1]; istr = data[row][2];
64 ctc.
attlen[isec-1][ilay-1][0].push_back(data[row][3]);
65 ctc.
attlen[isec-1][ilay-1][1].push_back(data[row][4]);
68 cout<<
"CTOF:Getting effective_velocity"<<endl;
69 sprintf(ctc.
database,
"/calibration/ctof/effective_velocity:%d",ctc.
runNo);
70 data.clear(); calib->GetCalib(data,ctc.
database);
71 for(
unsigned row = 0; row < data.size(); row++)
73 isec = data[row][0]; ilay = data[row][1]; istr = data[row][2];
74 ctc.
veff[isec-1][ilay-1][0].push_back(data[row][3]);
75 ctc.
veff[isec-1][ilay-1][1].push_back(data[row][4]);
78 cout<<
"CTOF:Getting status"<<endl;
79 sprintf(ctc.
database,
"/calibration/ctof/status:%d",ctc.
runNo);
80 data.clear() ; calib->GetCalib(data,ctc.
database);
81 for(
unsigned row = 0; row < data.size(); row++)
83 isec = data[row][0]; ilay = data[row][1]; istr = data[row][2];
84 ctc.
status[isec-1][ilay-1][0].push_back(data[row][3]);
85 ctc.
status[isec-1][ilay-1][1].push_back(data[row][4]);
88 cout<<
"CTOF:Getting gain_balance"<<endl;
89 sprintf(ctc.
database,
"/calibration/ctof/gain_balance:%d",ctc.
runNo);
90 data.clear() ; calib->GetCalib(data,ctc.
database);
91 for(
unsigned row = 0; row < data.size(); row++)
93 isec = data[row][0]; ilay = data[row][1]; istr = data[row][2];
94 ctc.
countsForMIP[isec-1][ilay-1][0].push_back(data[row][3]);
95 ctc.
countsForMIP[isec-1][ilay-1][1].push_back(data[row][4]);
119 if(ctc.
runNo != runno)
121 cout <<
" > Initializing " << HCname <<
" digitization for run number " << runno << endl;
122 ctc = initializeCTOFConstants(runno);
130 map<string, double> dgtz;
131 vector<identifier> identity = aHit->
GetId();
135 int paddle = identity[0].id;
143 double dUp = length + tInfos.
ly;
144 double dDn = length - tInfos.
ly;
147 double attlenUp = ctc.
attlen[sector-1][panel-1][0][paddle-1];
148 double attlenDn = ctc.
attlen[sector-1][panel-1][1][paddle-1];
151 double attUp = exp(-dUp/cm/attlenUp);
152 double attDn = exp(-dDn/cm/attlenDn);
158 double gainUp = sqrt(attUp*attDn);
159 double gainDn = gainUp;
162 double eneUp = tInfos.
eTot*attUp;
163 double eneDn = tInfos.
eTot*attDn;
185 double npheUp = G4Poisson(eneUp*ctc.
pmtPEYld);
194 double timeWalkUp = 0.;
195 double tUpU = tInfos.
time + dUp/ctc.
veff[sector-1][panel-1][0][paddle-1]/cm + timeWalkUp;
196 double tUp = G4RandGauss::shoot(tUpU, sqrt(2)*ctc.
tres[paddle-1]);
201 double npheDn = G4Poisson(eneDn*ctc.
pmtPEYld);
210 double timeWalkDn = 0.;
211 double tDnU = tInfos.
time + dDn/ctc.
veff[sector-1][panel-1][1][paddle-1]/cm + timeWalkDn;
212 double tDn = G4RandGauss::shoot(tDnU, sqrt(2)*ctc.
tres[paddle-1]);
218 dgtz[
"paddle"] = paddle;
219 dgtz[
"ADCU"] = (int) adcu;
220 dgtz[
"ADCD"] = (int) adcd;
221 dgtz[
"TDCU"] = (int) tdcu;
222 dgtz[
"TDCD"] = (int) tdcd;
223 dgtz[
"ADCUu"] = (int) adcuu;
224 dgtz[
"ADCDu"] = (int) adcdu;
225 dgtz[
"TDCUu"] = (int) tdcuu;
226 dgtz[
"TDCDu"] = (int) tdcdu;
233 id[
id.size()-1].id_sharing = 1;
240 map< string, vector <int> > MH;
vector< double > attlen[1][1][2]
void initWithRunNumber(int runno)
vector< identifier > processID(vector< identifier >, G4Step *, detector)
map< string, vector< int > > multiDgt(MHit *, int)
vector< identifier > GetId()
vector< int > status[1][1][2]
vector< double > veff[1][1][2]
vector< double > countsForMIP[1][1][2]
vector< double > dimensions
vector of dimensions. Size, units depends on solid type
map< string, double > integrateDgt(MHit *, int)