1 namespace ExtractTDCADCTimingNS {
4 TH1I *
Get1DHistogram(
const char * plugin,
const char * directoryName,
const char * name,
bool print =
true){
6 TString fullName = TString(plugin) +
"/" + TString(directoryName) +
"/" + TString(name);
7 thisFile->GetObject(fullName, histogram);
9 if (print) cout <<
"Unable to find histogram " << fullName.Data() << endl;
15 TH2I *
Get2DHistogram(
const char * plugin,
const char * directoryName,
const char * name){
17 TString fullName = TString(plugin) +
"/" + TString(directoryName) +
"/" + TString(name);
18 thisFile->GetObject(fullName, histogram);
20 cout <<
"Unable to find histogram " << fullName.Data() << endl;
29 sprintf(command,
"ccdb dump %s:%i:%s", path.Data(),
run, variation.Data());
30 FILE* inputPipe = gSystem->OpenPipe(command,
"r");
35 if(fgets(buff,
sizeof(buff), inputPipe) == NULL)
40 while(fgets(buff,
sizeof(buff), inputPipe) != NULL){
41 istringstream locConstantsStream(buff);
42 while (locConstantsStream >> entry){
44 if (counter %
column == 0) container.push_back(entry);
48 gSystem->ClosePipe(inputPipe);
53 sprintf(command,
"ccdb dump %s:%i:%s", path.Data(),
run, variation.Data());
54 FILE* inputPipe = gSystem->OpenPipe(command,
"r");
59 if(fgets(buff,
sizeof(buff), inputPipe) == NULL)
62 while(fgets(buff,
sizeof(buff), inputPipe) != NULL){
63 istringstream locConstantsStream(buff);
64 locConstantsStream >> constant1;
67 gSystem->ClosePipe(inputPipe);
72 sprintf(command,
"ccdb dump %s:%i:%s", path.Data(),
run, variation.Data());
73 FILE* inputPipe = gSystem->OpenPipe(command,
"r");
78 if(fgets(buff,
sizeof(buff), inputPipe) == NULL)
81 while(fgets(buff,
sizeof(buff), inputPipe) != NULL){
82 istringstream locConstantsStream(buff);
83 locConstantsStream >> constant1 >> constant2;
86 gSystem->ClosePipe(inputPipe);
90 int CCDBIndex = column + row;
91 if (column > 9) CCDBIndex += 5;
92 if (column > 27) CCDBIndex += 5;
93 if (column > 81) CCDBIndex += 5;
94 if (column > 99) CCDBIndex += 5;
101 if (
id >= 132 &&
id <= 172)
throw(
"TAGH: unknown id in [132,172]");
102 int HVid = (
id <= 131) ?
id : (
id - 274 + 233);
103 return int((HVid-1)/N) + 1;
109 Double_t
f = par[0]*TMath::Exp(-0.5 * (TMath::Power((xx - par[1]) / par[2] , 2) ) )+ par[0]*TMath::Exp(-0.5 * (TMath::Power((xx - par[1] - par[3]) / par[2] , 2) ) );
116 Double_t
f = par[0]*TMath::Exp(-0.5 * (TMath::Power((xx - par[1]) / par[2] , 2) ) )+ par[0]*TMath::Exp(-0.5 * (TMath::Power((xx - par[1] + par[3]) / par[2] , 2) ) );
120 void SetPrimaryPeaks(TString fileName =
"hd_root.root",
int runNumber = 10390, TString variation =
"default", TString prefix =
""){
123 cout <<
"Performing TDC/ADC timing fits for File: " << fileName.Data() <<
" Run: " << runNumber <<
" Variation: " << variation.Data() << endl;
127 cout <<
"Unable to open file " << fileName.Data() <<
"...Exiting" << endl;
135 bool AssumeADCTDCAlignment =
true;
151 cout <<
"Grabbing CCDB constants..." << endl;
154 double cdc_base_time, fcal_base_time;
155 double sc_base_time_tdc, sc_base_time_adc;
156 double fdc_base_time_tdc, fdc_base_time_adc;
157 double bcal_base_time_tdc, bcal_base_time_adc;
158 double tagm_base_time_tdc, tagm_base_time_adc;
159 double tagh_base_time_tdc, tagh_base_time_adc;
160 double tof_base_time_tdc, tof_base_time_adc;
165 GetCCDBConstants1(
"/FCAL/base_time_offset",runNumber, variation, fcal_base_time);
166 GetCCDBConstants1(
"/PHOTON_BEAM/RF/beam_period",runNumber, variation, beam_period);
167 GetCCDBConstants2(
"/FDC/base_time_offset" ,runNumber, variation, fdc_base_time_adc, fdc_base_time_tdc);
168 GetCCDBConstants2(
"/BCAL/base_time_offset" ,runNumber, variation, bcal_base_time_adc, bcal_base_time_tdc);
169 GetCCDBConstants2(
"/PHOTON_BEAM/microscope/base_time_offset" ,runNumber, variation, tagm_base_time_adc, tagm_base_time_tdc);
170 GetCCDBConstants2(
"/PHOTON_BEAM/hodoscope/base_time_offset" ,runNumber, variation, tagh_base_time_adc, tagh_base_time_tdc);
171 GetCCDBConstants2(
"/START_COUNTER/base_time_offset" ,runNumber, variation, sc_base_time_adc, sc_base_time_tdc);
172 GetCCDBConstants2(
"/TOF/base_time_offset" ,runNumber, variation, tof_base_time_adc, tof_base_time_tdc);
174 cout <<
"CDC base times = " << cdc_base_time << endl;
175 cout <<
"FCAL base times = " << fcal_base_time << endl;
176 cout <<
"FDC base times = " << fdc_base_time_adc <<
", " << fdc_base_time_tdc << endl;
177 cout <<
"BCAL base times = " << bcal_base_time_adc <<
", " << bcal_base_time_tdc << endl;
178 cout <<
"SC base times = " << sc_base_time_adc <<
", " << sc_base_time_tdc << endl;
179 cout <<
"TOF base times = " << tof_base_time_adc <<
", " << tof_base_time_tdc << endl;
180 cout <<
"TAGH base times = " << tagh_base_time_adc <<
", " << tagh_base_time_tdc << endl;
181 cout <<
"TAGM base times = " << tagm_base_time_adc <<
", " << tagm_base_time_tdc << endl;
183 cout <<
"beam_period = " << beam_period << endl;
185 cout <<
"Done grabbing CCDB constants...Entering fits..." << endl;
190 float CDC_ADC_Offset = 0.0;
192 if(this1DHist != NULL){
193 Int_t firstBin = this1DHist->FindLastBinAbove( 1 , 1);
194 for (
int i = 0; i <= 25; i++){
195 if ((firstBin + i) > 0) this1DHist->SetBinContent((firstBin + i), 0);
198 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
199 TF1 *
f =
new TF1(
"f",
"gaus");
200 f->SetParameters(100, maximum, 20);
201 f->FixParameter(1 , maximum);
202 TFitResultPtr fr = this1DHist->Fit(f,
"S",
"", maximum - 20, maximum + 20);
203 double mean = fr->Parameter(1);
204 float sigma = fr->Parameter(2);
205 CDC_ADC_Offset = mean -
sigma;
209 outFile.open(prefix +
"cdc_base_time.txt");
210 outFile << cdc_base_time - (CDC_ADC_Offset-
nominalCDCTime) << endl;
214 float FDC_ADC_Offset = 0.0, FDC_TDC_Offset = 0.0;
216 if(this1DHist != NULL){
217 Int_t firstBin = this1DHist->FindFirstBinAbove( 1 , 1);
218 for (
int i = 0; i <= 30; i++){
219 if ((firstBin + i) > 0) this1DHist->SetBinContent((firstBin + i), 0);
222 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
223 TF1 *
f =
new TF1(
"f",
"gaus");
224 f->SetParameters(100, maximum, 20);
225 f->FixParameter(1 , maximum);
226 TFitResultPtr fr = this1DHist->Fit(f,
"S",
"", maximum - 25, maximum + 20);
227 double mean = fr->Parameter(1);
228 float sigma = fr->Parameter(2);
229 FDC_ADC_Offset = mean;
233 if(this1DHist != NULL){
234 Int_t firstBin = this1DHist->FindLastBinAbove( 1 , 1);
235 for (
int i = 0; i <= 25; i++){
236 if ((firstBin + i) > 0) this1DHist->SetBinContent((firstBin + i), 0);
239 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
240 TF1 *
f =
new TF1(
"f",
"gaus");
241 f->SetParameters(10000, maximum, 30);
243 TFitResultPtr fr = this1DHist->Fit(f,
"S",
"", maximum - 18, maximum + 6);
244 double mean = fr->Parameter(1);
245 float sigma = fr->Parameter(2);
246 FDC_TDC_Offset = mean;
250 outFile.open(prefix +
"fdc_base_time.txt");
252 <<
" " << fdc_base_time_tdc - (FDC_TDC_Offset-nominalFDCWireTime) << endl;
262 float SC_ADC_Offset = 0.0;
263 float SC_TDC_Offset = 0.0;
264 float TOF_ADC_Offset = 0.0;
265 float TOF_TDC_Offset = 0.0;
266 float FCAL_Offset = 0.0;
267 float BCAL_ADC_Offset = 0.0;
268 float BCAL_TDC_Offset = 0.0;
269 float TAGH_ADC_Offset = 0.0;
270 float TAGH_TDC_Offset = 0.0;
271 float TAGM_ADC_Offset = 0.0;
272 float TAGM_TDC_Offset = 0.0;
276 if(this1DHist != NULL){
278 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
279 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 5, maximum + 5);
280 double mean = fr->Parameter(1);
283 outFile.open(prefix +
"fcal_base_time.txt");
289 if(this1DHist != NULL){
291 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
292 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 7, maximum + 7);
293 double mean = fr->Parameter(1);
294 BCAL_ADC_Offset = mean;
297 if(this1DHist != NULL){
299 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
300 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 7, maximum + 7);
301 double mean = fr->Parameter(1);
302 BCAL_TDC_Offset = mean;
304 outFile.open(prefix +
"bcal_base_time.txt");
306 <<
" " << bcal_base_time_tdc - (BCAL_TDC_Offset-nominalBCALTDCTime) << endl;
310 if(AssumeADCTDCAlignment) {
311 double SC_Offset = 0.;
312 double TOF_Offset = 0.;
313 double TAGM_Offset = 0.;
314 double TAGH_Offset = 0.;
318 if(this1DHist != NULL){
320 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
321 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 5, maximum + 5);
322 double mean = fr->Parameter(1);
325 outFile.open(prefix +
"sc_base_time.txt");
327 <<
" " << sc_base_time_tdc - (SC_Offset-nominalSCTime) << endl;
332 if(this1DHist != NULL){
333 Int_t firstBin = this1DHist->FindFirstBinAbove(1 , 1);
334 for (
int i = 0; i <= 20; i++){
335 if ((firstBin + i) > 0) this1DHist->SetBinContent((firstBin + i), 0);
338 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
339 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 4, maximum + 4);
340 double mean = fr->Parameter(1);
343 outFile.open(prefix +
"tof_base_time.txt");
345 <<
" " << tof_base_time_tdc - (TOF_Offset-nominalTOFTime) << endl;
350 if(this1DHist != NULL){
352 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
353 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 10, maximum + 10);
354 double mean = fr->Parameter(1);
357 outFile.open(prefix +
"tagh_base_time.txt");
359 <<
" " << tagh_base_time_tdc - (TAGH_Offset-nominalTAGHTime) << endl;
364 if(this1DHist != NULL){
365 Int_t firstBin = this1DHist->FindFirstBinAbove( 1 , 1);
366 for (
int i = 0; i <= 100; i++){
367 if ((firstBin + i) > 0) this1DHist->SetBinContent((firstBin + i), 0);
370 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
371 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 10, maximum + 8);
372 double mean = fr->Parameter(1);
375 outFile.open(prefix +
"tagm_base_time.txt");
377 <<
" " << tagm_base_time_tdc - (TAGM_Offset-nominalTAGMTime) << endl;
384 if(this1DHist != NULL){
386 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
387 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 5, maximum + 5);
388 double mean = fr->Parameter(1);
389 SC_ADC_Offset = mean;
392 if(this1DHist != NULL){
394 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
395 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 5, maximum + 5);
396 double mean = fr->Parameter(1);
397 SC_TDC_Offset = mean;
399 outFile.open(prefix +
"sc_base_time.txt");
401 <<
" " << sc_base_time_tdc - (SC_TDC_Offset-nominalSCTime) << endl;
406 if(this1DHist != NULL){
407 Int_t firstBin = this1DHist->FindFirstBinAbove(1 , 1);
408 for (
int i = 0; i <= 20; i++){
409 if ((firstBin + i) > 0) this1DHist->SetBinContent((firstBin + i), 0);
412 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
413 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 4, maximum + 4);
414 double mean = fr->Parameter(1);
415 TOF_ADC_Offset = mean;
418 if(this1DHist != NULL){
420 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
421 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 4, maximum + 4);
422 double mean = fr->Parameter(1);
423 TOF_TDC_Offset = mean;
425 outFile.open(prefix +
"tof_base_time.txt");
427 <<
" " << tof_base_time_tdc - (TOF_TDC_Offset-nominalTOFTime) << endl;
432 if(this1DHist != NULL){
434 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
435 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 10, maximum + 10);
436 double mean = fr->Parameter(1);
437 TAGH_ADC_Offset = mean;
440 if(this1DHist != NULL){
442 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
443 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 10, maximum + 10);
444 double mean = fr->Parameter(1);
445 TAGH_TDC_Offset = mean;
447 outFile.open(prefix +
"tagh_base_time.txt");
449 <<
" " << tagh_base_time_tdc - (TAGH_TDC_Offset-nominalTAGHTime) << endl;
454 if(this1DHist != NULL){
455 Int_t firstBin = this1DHist->FindFirstBinAbove( 1 , 1);
456 for (
int i = 0; i <= 90; i++){
457 if ((firstBin + i) > 0) this1DHist->SetBinContent((firstBin + i), 0);
460 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
461 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 10, maximum + 8);
462 double mean = fr->Parameter(1);
463 TAGM_ADC_Offset = mean;
466 if(this1DHist != NULL){
467 Int_t firstBin = this1DHist->FindFirstBinAbove( 1 , 1);
468 for (
int i = 0; i <= 90; i++){
469 if ((firstBin + i) > 0) this1DHist->SetBinContent((firstBin + i), 0);
472 Double_t maximum = this1DHist->GetBinCenter(this1DHist->GetMaximumBin());
473 TFitResultPtr fr = this1DHist->Fit(
"gaus",
"S",
"", maximum - 10, maximum + 8);
474 double mean = fr->Parameter(1);
475 TAGM_TDC_Offset = mean;
477 outFile.open(prefix +
"tagm_base_time.txt");
479 <<
" " << tagm_base_time_tdc - (TAGM_TDC_Offset-nominalTAGMTime) << endl;
int GetF1TDCslotTAGH(int id)
double nominalFDCWireTime
sprintf(text,"Post KinFit Cut")
double nominalBCALTDCTime
void GetCCDBConstants(TString path, Int_t run, TString variation, vector< double > &container, Int_t column=1)
Double_t sigma[NCHANNELS]
void GetCCDBConstants2(TString path, Int_t run, TString variation, double &constant1, double &constant2)
void SetPrimaryPeaks(TString fileName="hd_root.root", int runNumber=10390, TString variation="default", TString prefix="")
void GetCCDBConstants1(TString path, Int_t run, TString variation, double &constant1)
double nominalBCALADCTime
int GetCCDBIndexTAGM(unsigned int column, unsigned int row)
double nominalFDCCathodeTime