12 #include <JANA/JApplication.h>
13 #include <JANA/JFactory.h>
33 int LH_module=(mod-1)%2;
34 int package=(mod-1)/12;
35 int cell=(mod-1-package*12)/2;
37 int rotation = -45 + 90*LH_module -60*cell;
38 if(rotation<-180)rotation+=360;
43 if(rotation>0)crate=3;
46 if(rotation>0)crate=2;
75 if(crate==1)act_crate=
"ROCFDC4";
76 if(crate==2)act_crate=
"ROCFDC13";
77 if(crate==3)act_crate=
"ROCFDC14";
80 if(act_slot>10)act_slot+=2;
85 return crate*12+slot+1;
113 fBeamEventCounter = 0;
115 BEAM_EVENTS_TO_KEEP = 1000000000;
118 DO_TDC_ADC_ALIGN = 0;
123 DO_HIGH_RESOLUTION = 0;
128 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:DO_ROUGH_TIMING", DO_ROUGH_TIMING,
"Set to > 0 to do rough timing of all detectors");
129 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:DO_CDC_TIMING", DO_CDC_TIMING,
"Set to > 0 to do CDC Per channel Alignment");
130 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:DO_TDC_ADC_ALIGN", DO_TDC_ADC_ALIGN,
"Set to > 0 to do TDC/ADC alignment of SC,TOF,TAGM,TAGH");
131 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:DO_TRACK_BASED", DO_TRACK_BASED,
"Set to > 0 to do Track Based timing corrections");
132 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:DO_HIGH_RESOLUTION", DO_HIGH_RESOLUTION,
"Set to > 0 to increase the resolution of the track Based timing corrections");
133 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:DO_VERIFY", DO_VERIFY,
"Set to > 0 to verify timing with current constants");
134 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:REQUIRE_BEAM", REQUIRE_BEAM,
"Set to 0 to skip beam current check");
135 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:BEAM_EVENTS_TO_KEEP", BEAM_EVENTS_TO_KEEP,
"Set to the number of beam on events to use");
136 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:DO_OPTIONAL", DO_OPTIONAL,
"Set to >0 to enable optional histograms ");
137 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:DO_REACTION", DO_REACTION,
"Set to >0 to run DReaction");
138 gPARMS->SetDefaultParameter(
"HLDETECTORTIMING:USE_RF_BUNCH", USE_RF_BUNCH,
"Set to 0 to disable use of 2 vote RF Bunch");
142 if (DO_ROUGH_TIMING > 0 || DO_CDC_TIMING > 0 || DO_TDC_ADC_ALIGN > 0 || DO_TRACK_BASED > 0) DO_VERIFY = 0;
145 if(DO_TDC_ADC_ALIGN){
146 NBINS_TDIFF = 2800; MIN_TDIFF = -150.0; MAX_TDIFF = 550.0;
149 NBINS_TDIFF = 200; MIN_TDIFF = -40.0; MAX_TDIFF = 40.0;
153 if (DO_HIGH_RESOLUTION) {
154 NBINS_TAGGER_TIME = 400; MIN_TAGGER_TIME = -20; MAX_TAGGER_TIME = 20;
155 NBINS_MATCHING = 1000; MIN_MATCHING_T = -10; MAX_MATCHING_T = 10;
157 NBINS_TAGGER_TIME = 1600; MIN_TAGGER_TIME = -200; MAX_TAGGER_TIME = 400;
159 NBINS_MATCHING = 800; MIN_MATCHING_T = -100; MAX_MATCHING_T = 100;
161 }
else if (DO_VERIFY){
162 NBINS_TAGGER_TIME = 200; MIN_TAGGER_TIME = -20; MAX_TAGGER_TIME = 20;
163 NBINS_MATCHING = 1000; MIN_MATCHING_T = -10; MAX_MATCHING_T = 10;
165 NBINS_TAGGER_TIME = 100; MIN_TAGGER_TIME = -50; MAX_TAGGER_TIME = 50;
166 NBINS_MATCHING = 100; MIN_MATCHING_T = -10; MAX_MATCHING_T = 10;
169 NBINS_RF_COMPARE = 200; MIN_RF_COMPARE = -2.2; MAX_RF_COMPARE = 2.2;
194 loop->GetSingle(locTrigger);
199 vector<const DParticleID *> locParticleID_algos;
200 loop->Get(locParticleID_algos);
201 if(locParticleID_algos.size()<1){
202 _DBG_<<
"Unable to get a DParticleID object! NO PID will be done!"<<endl;
203 return RESOURCE_UNAVAILABLE;
205 auto locParticleID = locParticleID_algos[0];
214 vector<const DEPICSvalue *> epicsValues;
215 loop->Get(epicsValues);
216 for(
unsigned int j = 0; j < epicsValues.size(); j++){
218 if (strcmp((thisValue->
name).c_str(),
"IBCAD00CRCUR6") == 0){
219 BEAM_CURRENT = thisValue->
fval;
222 "Beam Current; Beam Current [nA]; Entries",
231 if (BEAM_CURRENT < 10.0) {
233 0,
"Beam On Events (0 = no beam, 1 = beam > 10nA)",
241 1,
"Beam On Events (0 = no beam, 1 = beam > 10nA)",
246 if (fBeamEventCounter >= BEAM_EVENTS_TO_KEEP) {
247 cout<<
"Maximum number of Beam Events reached" << endl;
254 vector<const DCDCHit *> cdcHitVector;
255 vector<const DFDCHit *> fdcHitVector;
256 vector<const DSCHit *> scHitVector;
257 vector<const DBCALUnifiedHit *> bcalUnifiedHitVector;
258 vector<const DTOFHit *> tofHitVector;
259 vector<const DFCALHit *> fcalHitVector;
260 vector<const DTAGMHit *> tagmHitVector;
261 vector<const DTAGHHit *> taghHitVector;
263 loop->Get(cdcHitVector);
264 loop->Get(fdcHitVector);
265 loop->Get(scHitVector);
266 loop->Get(bcalUnifiedHitVector);
267 loop->Get(tofHitVector);
268 loop->Get(fcalHitVector);
269 loop->Get(tagmHitVector,
"Calib");
270 loop->Get(taghHitVector,
"Calib");
274 loop->GetSingle(locTTabUtilities);
277 float xMin = -500, xMax = 1500;
280 for (i = 0; i < cdcHitVector.size(); i++){
281 Fill1DHistogram (
"HLDetectorTiming",
"CDC",
"CDCHit time", cdcHitVector[i]->t,
282 "CDCHit time;t [ns];", nBins, xMin, xMax);
283 if(DO_VERIFY || DO_CDC_TIMING){
285 Fill2DHistogram(
"HLDetectorTiming",
"CDC",
"CDCHit time per Straw Raw",
286 cdcHitVector[i]->t, GetCCDBIndexCDC(cdcHitVector[i]),
287 "Hit time for each CDC wire; t [ns]; CCDB Index",
288 750, -500, 1000, nStraws, 0.5, nStraws + 0.5);
293 for (i = 0; i < fdcHitVector.size(); i++){
294 if(fdcHitVector[i]->type == 0 ) {
295 Fill1DHistogram (
"HLDetectorTiming",
"FDC",
"FDCHit Wire time", fdcHitVector[i]->t,
296 "FDCHit Wire time;t [ns];", nBins, xMin, xMax);
299 int module = 2 * fdcHitVector[i]->gLayer - 1;
300 if(fdcHitVector[i]->element > 48)
302 Fill2DHistogram (
"HLDetectorTiming",
"FDC",
"FDCHit Wire time vs. module",
303 module, fdcHitVector[i]->t,
304 "FDCHit Wire time; module/slot; t [ns];",
305 48, 0.5, 48.5, 400, -200, 600);
309 Fill1DHistogram (
"HLDetectorTiming",
"FDC",
"FDCHit Cathode time", fdcHitVector[i]->t,
310 "FDCHit Cathode time;t [ns];", nBins, xMin, xMax);
315 for (i = 0; i < scHitVector.size(); i++){
317 Fill1DHistogram (
"HLDetectorTiming",
"SC",
"SCHit time", scHitVector[i]->t,
318 "SCHit time;t [ns];", nBins, xMin, xMax);
320 for (i = 0; i < bcalUnifiedHitVector.size(); i++){
321 int the_cell = (bcalUnifiedHitVector[i]->module - 1) * 16 + (bcalUnifiedHitVector[i]->
layer - 1) * 4 + bcalUnifiedHitVector[i]->sector;
323 int the_tdc_cell = (bcalUnifiedHitVector[i]->module - 1) * 12 + (bcalUnifiedHitVector[i]->
layer - 1) * 4 + bcalUnifiedHitVector[i]->sector;
327 bcalUnifiedHitVector[i]->GetSingle(thisADCHit);
328 bcalUnifiedHitVector[i]->GetSingle(thisTDCHit);
330 if (thisADCHit != NULL){
331 Fill1DHistogram (
"HLDetectorTiming",
"BCAL",
"BCALHit ADC time", thisADCHit->
t,
332 "BCALHit ADC time; t_{ADC} [ns]; Entries", nBins, xMin, xMax);
335 if (bcalUnifiedHitVector[i]->end == 0){
336 Fill2DHistogram (
"HLDetectorTiming",
"BCAL",
"BCALHit Upstream Per Channel ADC Hit Time",
337 the_cell, thisADCHit->
t,
338 "BCALHit Upstream Per Channel Hit Time; cellID; t_{ADC} [ns] ",
339 768, 0.5, 768.5, 250, -50, 50);
342 Fill2DHistogram (
"HLDetectorTiming",
"BCAL",
"BCALHit Downstream Per Channel ADC Hit Time",
343 the_cell, thisADCHit->
t,
344 "BCALHit Downstream Per Channel Hit Time; cellID; t_{ADC} [ns] ",
345 768, 0.5, 768.5, 250, -50, 50);
350 if (thisTDCHit != NULL){
351 Fill1DHistogram (
"HLDetectorTiming",
"BCAL",
"BCALHit TDC time", thisTDCHit->
t,
352 "BCALHit TDC time; t_{TDC} [ns]; Entries", nBins, xMin, xMax);
355 if (bcalUnifiedHitVector[i]->end == 0){
356 Fill2DHistogram (
"HLDetectorTiming",
"BCAL",
"BCALHit Upstream Per Channel TDC Hit Time",
357 the_tdc_cell, thisTDCHit->
t,
358 "BCALHit Upstream Per Channel TDC Hit Time; cellID; t_{TDC} [ns] ",
359 576, 0.5, 576.5, 350, -50, 300);
362 Fill2DHistogram (
"HLDetectorTiming",
"BCAL",
"BCALHit Downstream Per Channel TDC Hit Time",
363 the_tdc_cell, thisTDCHit->
t,
364 "BCALHit Downstream Per Channel TDC Hit Time; cellID; t_{TDC} [ns] ",
365 576, 0.5, 576.5, 350, -50, 300);
370 if (thisADCHit != NULL && thisTDCHit != NULL){
371 if (bcalUnifiedHitVector[i]->end == 0){
372 Fill2DHistogram (
"HLDetectorTiming",
"BCAL",
"BCALHit Upstream Per Channel TDC-ADC Hit Time",
373 the_tdc_cell, thisTDCHit->
t - thisADCHit->
t,
374 "BCALHit Upstream Per Channel TDC-ADC Hit Time; cellID; t_{TDC} - t_{ADC} [ns] ",
375 576, 0.5, 576.5, NBINS_TDIFF, MIN_TDIFF, MAX_TDIFF);
378 Fill2DHistogram (
"HLDetectorTiming",
"BCAL",
"BCALHit Downstream Per Channel TDC-ADC Hit Time",
379 the_tdc_cell, thisTDCHit->
t - thisADCHit->
t,
380 "BCALHit Downstream Per Channel TDC-ADC Hit Time; cellID; t_{TDC} - t_{ADC} [ns] ",
381 576, 0.5, 576.5, NBINS_TDIFF, MIN_TDIFF, MAX_TDIFF);
386 for (i = 0; i < tofHitVector.size(); i++){
387 Fill1DHistogram (
"HLDetectorTiming",
"TOF",
"TOFHit time", tofHitVector[i]->t,
388 "TOFHit time;t [ns];", nBins, xMin, xMax);
392 double fcalHitETot = 0;
393 double fcalHitEwtT = 0;
394 for (i = 0; i < fcalHitVector.size(); i++){
395 fcalHitETot += fcalHitVector[i]->E;
396 fcalHitEwtT += fcalHitVector[i]->E * fcalHitVector[i]->t;
398 fcalHitEwtT /= fcalHitETot;
400 for (i = 0; i < fcalHitVector.size(); i++){
401 Fill1DHistogram (
"HLDetectorTiming",
"FCAL",
"FCALHit time", fcalHitVector[i]->t,
402 "FCALHit time;t [ns];", nBins, xMin, xMax);
405 vector<const DFCALGeometry*> fcalGeomVect;
406 loop->Get( fcalGeomVect );
407 if (fcalGeomVect.size() < 1){
408 cout <<
"FCAL Geometry not available?" << endl;
409 return OBJECT_NOT_AVAILABLE;
413 fcalHitVector[i]->row, fcalHitVector[i]->
column,
414 "FCAL Hit Occupancy; column; row",
415 61, -1.5, 59.5, 61, -1.5, 59.5);
416 double locTime = ( fcalHitVector[i]->t - fcalHitEwtT )*
k_to_nsec;
419 fcalHitVector[i]->row, fcalHitVector[i]->
column, locTime,
420 "FCAL Hit Local Time [ns]; column; row",
421 61, -1.5, 59.5, 61, -1.5, 59.5);
424 Fill2DHistogram(
"HLDetectorTiming",
"FCAL",
"FCALHit Per Channel Time",
425 fcalGeom.
channel(fcalHitVector[i]->row, fcalHitVector[i]->column), fcalHitVector[i]->t,
426 "FCAL Per Channel Hit time; channel; t [ns]",
431 for (i = 0; i < tagmHitVector.size(); i++){
432 Fill1DHistogram (
"HLDetectorTiming",
"TAGM",
"TAGMHit time", tagmHitVector[i]->t,
433 "TAGMHit time;t [ns];", nBins, xMin, xMax);
435 for (i = 0; i < taghHitVector.size(); i++){
436 Fill1DHistogram (
"HLDetectorTiming",
"TAGH",
"TAGHHit time", taghHitVector[i]->t,
437 "TAGHHit time;t [ns];", nBins, xMin, xMax);
444 for (i = 0; i < scHitVector.size(); i++){
445 int nSCCounters = 30;
446 const DSCHit *thisSCHit = scHitVector[i];
448 Fill1DHistogram (
"HLDetectorTiming",
"SC",
"SCHit ADC time", scHitVector[i]->t,
449 "SCHit ADC only time;t [ns];", nBins, xMin, xMax);
451 for (
auto hit = scHitVector.begin(); hit != scHitVector.end(); hit++){
452 if ((*hit)->has_TDC && !(*hit)->has_fADC){
453 if (scHitVector[i]->sector == (*hit)->sector){
455 scHitVector[i]->sector, (*hit)->t_TDC - scHitVector[i]->t_fADC,
456 "SC #Deltat TDC-ADC; Sector ;t_{TDC} - t_{ADC} [ns]", nSCCounters, 0.5, nSCCounters + 0.5, NBINS_TDIFF, MIN_TDIFF, MAX_TDIFF);
462 Fill1DHistogram (
"HLDetectorTiming",
"SC",
"SCHit TDC time", scHitVector[i]->t,
463 "SCHit TDC only time;t [ns];", nBins, xMin, xMax);
466 Fill1DHistogram (
"HLDetectorTiming",
"SC",
"SCHit Matched time", scHitVector[i]->t,
467 "SCHit Matched ADC/TDC time;t [ns];", nBins, xMin, xMax);
468 Fill1DHistogram (
"HLDetectorTiming",
"SC",
"SCHit ADC time", scHitVector[i]->t_fADC,
469 "SCHit ADC only time;t [ns];", nBins, xMin, xMax);
470 Fill1DHistogram (
"HLDetectorTiming",
"SC",
"SCHit TDC time", scHitVector[i]->t_TDC,
471 "SCHit TDC only time;t [ns];", nBins, xMin, xMax);
474 scHitVector[i]->sector, scHitVector[i]->t_TDC - scHitVector[i]->t_fADC,
475 "SC #Deltat TDC-ADC; Sector ;t_{TDC} - t_{ADC} [ns]", nSCCounters, 0.5, nSCCounters + 0.5, NBINS_TDIFF, MIN_TDIFF, MAX_TDIFF);
479 for (i = 0; i < tagmHitVector.size(); i++){
481 const DTAGMHit *thisTAGMHit = tagmHitVector[i];
482 int nTAGMCounters = 122;
485 Fill1DHistogram (
"HLDetectorTiming",
"TAGM",
"TAGMHit ADC time", tagmHitVector[i]->t,
486 "TAGMHit ADC only time;t [ns];", nBins, xMin, xMax);
488 for (
auto hit = tagmHitVector.begin(); hit != tagmHitVector.end(); hit++){
489 if ((*hit)->has_TDC && !(*hit)->has_fADC){
491 Fill2DHistogram(
"HLDetectorTiming",
"TAGM",
"TAGMHit TDC_ADC Difference",
492 GetCCDBIndexTAGM(tagmHitVector[i]), (*hit)->t - tagmHitVector[i]->time_fadc,
494 "TAGM #Deltat TDC-ADC; Column ;t_{TDC} - t_{ADC} [ns]", nTAGMCounters, 0.5, nTAGMCounters + 0.5, NBINS_TDIFF, MIN_TDIFF, MAX_TDIFF);
500 Fill1DHistogram (
"HLDetectorTiming",
"TAGM",
"TAGMHit TDC time", tagmHitVector[i]->t,
501 "TAGMHit TDC only time;t [ns];", nBins, xMin, xMax);
504 Fill1DHistogram (
"HLDetectorTiming",
"TAGM",
"TAGMHit Matched time", tagmHitVector[i]->t,
505 "TAGMHit Matched ADC/TDC time;t [ns];", nBins, xMin, xMax);
506 Fill1DHistogram (
"HLDetectorTiming",
"TAGM",
"TAGMHit ADC time", tagmHitVector[i]->time_fadc,
507 "TAGMHit ADC only time;t [ns];", nBins, xMin, xMax);
508 Fill1DHistogram (
"HLDetectorTiming",
"TAGM",
"TAGMHit TDC time", tagmHitVector[i]->t,
509 "TAGMHit TDC only time;t [ns];", nBins, xMin, xMax);
511 Fill2DHistogram(
"HLDetectorTiming",
"TAGM",
"TAGMHit TDC_ADC Difference",
512 GetCCDBIndexTAGM(tagmHitVector[i]), tagmHitVector[i]->t - tagmHitVector[i]->time_fadc,
513 "TAGM #Deltat TDC-ADC; Column ;t_{TDC} - t_{ADC} [ns]", nTAGMCounters, 0.5, nTAGMCounters + 0.5, NBINS_TDIFF, MIN_TDIFF, MAX_TDIFF);
515 Fill2DHistogram(
"HLDetectorTiming",
"TAGM",
"TAGM Per Channel TDC Time",
517 "TAGM Per Channel TDC time; Column ;t_{TDC} [ns]", nTAGMCounters, 0.5, nTAGMCounters + 0.5, 100, -50, 50);
523 for (i = 0; i < taghHitVector.size(); i++){
525 const DTAGHHit *thisTAGHHit = taghHitVector[i];
526 int nTAGHCounters = 274;
529 Fill1DHistogram (
"HLDetectorTiming",
"TAGH",
"TAGHHit ADC time", taghHitVector[i]->t,
530 "TAGHHit ADC only time;t [ns];", nBins, xMin, xMax);
532 for (
auto hit = taghHitVector.begin(); hit != taghHitVector.end(); hit++){
533 if ((*hit)->has_TDC && !(*hit)->has_fADC){
534 if (taghHitVector[i]->counter_id == (*hit)->counter_id){
535 Fill2DHistogram(
"HLDetectorTiming",
"TAGH",
"TAGHHit TDC_ADC Difference",
536 taghHitVector[i]->counter_id, (*hit)->time_tdc - taghHitVector[i]->time_fadc,
537 "TAGH #Deltat TDC-ADC; Counter ID ;t_{TDC} - t_{ADC} [ns]", nTAGHCounters, 0.5, nTAGHCounters + 0.5, NBINS_TDIFF, MIN_TDIFF, MAX_TDIFF);
543 Fill1DHistogram (
"HLDetectorTiming",
"TAGH",
"TAGHHit TDC time", taghHitVector[i]->t,
544 "TAGHHit TDC only time;t [ns];", nBins, xMin, xMax);
547 Fill1DHistogram (
"HLDetectorTiming",
"TAGH",
"TAGHHit Matched time", taghHitVector[i]->t,
548 "TAGHHit Matched ADC/TDC time;t [ns];", nBins, xMin, xMax);
549 Fill1DHistogram (
"HLDetectorTiming",
"TAGH",
"TAGHHit ADC time", taghHitVector[i]->time_fadc,
550 "TAGHHit ADC only time;t [ns];", nBins, xMin, xMax);
551 Fill1DHistogram (
"HLDetectorTiming",
"TAGH",
"TAGHHit TDC time", taghHitVector[i]->time_tdc,
552 "TAGHHit TDC only time;t [ns];", nBins, xMin, xMax);
555 Fill2DHistogram(
"HLDetectorTiming",
"TAGH",
"TAGHHit TDC_ADC Difference",
556 taghHitVector[i]->counter_id, taghHitVector[i]->time_tdc - taghHitVector[i]->time_fadc,
557 "TAGH #Deltat TDC-ADC; Counter ID ;t_{TDC} - t_{ADC} [ns]", nTAGHCounters, 0.5, nTAGHCounters + 0.5, NBINS_TDIFF, MIN_TDIFF, MAX_TDIFF);
560 for (i = 0; i < tofHitVector.size(); i++){
561 const DTOFHit *thisTOFHit = tofHitVector[i];
562 int nTOFCounters = 176;
564 Fill1DHistogram (
"HLDetectorTiming",
"TOF",
"TOFHit ADC time", tofHitVector[i]->t,
565 "TOFHit ADC only time;t [ns];", nBins, xMin, xMax);
567 for (
auto hit = tofHitVector.begin(); hit != tofHitVector.end(); hit++){
568 if ((*hit)->has_TDC && !(*hit)->has_fADC){
569 if (GetCCDBIndexTOF(tofHitVector[i]) == GetCCDBIndexTOF(*hit)){
570 Fill2DHistogram(
"HLDetectorTiming",
"TOF",
"TOFHit TDC_ADC Difference",
571 GetCCDBIndexTOF(tofHitVector[i]), (*hit)->t_TDC - tofHitVector[i]->t_fADC,
572 "TOF #Deltat TDC-ADC; CDCB Index ;t_{TDC} - t_{ADC} [ns]", nTOFCounters, 0.5, nTOFCounters + 0.5, NBINS_TDIFF, MIN_TDIFF, MAX_TDIFF);
578 Fill1DHistogram (
"HLDetectorTiming",
"TOF",
"TOFHit TDC time", tofHitVector[i]->t,
579 "TOFHit TDC only time;t [ns];", nBins, xMin, xMax);
582 Fill1DHistogram (
"HLDetectorTiming",
"TOF",
"TOFHit Matched time", tofHitVector[i]->t,
583 "TOFHit Matched ADC/TDC time;t [ns];", nBins, xMin, xMax);
584 Fill1DHistogram (
"HLDetectorTiming",
"TOF",
"TOFHit ADC time", tofHitVector[i]->t_fADC,
585 "TOFHit ADC only time;t [ns];", nBins, xMin, xMax);
586 Fill1DHistogram (
"HLDetectorTiming",
"TOF",
"TOFHit TDC time", tofHitVector[i]->t_TDC,
587 "TOFHit TDC only time;t [ns];", nBins, xMin, xMax);
589 Fill2DHistogram(
"HLDetectorTiming",
"TOF",
"TOFHit TDC_ADC Difference",
590 GetCCDBIndexTOF(tofHitVector[i]), tofHitVector[i]->t_TDC - tofHitVector[i]->t_fADC,
591 "TOF #Deltat TDC-ADC; CDCB Index ;t_{TDC} - t_{ADC} [ns]", nTOFCounters, 0.5, nTOFCounters + 0.5, NBINS_TDIFF, MIN_TDIFF, MAX_TDIFF);
602 float nBinsE = 160, EMin = 3.0, EMax = 12.0;
605 loop->GetSingle(thisRFBunch,
"Calibrations");
610 for (
unsigned int j = 0 ; j < tagmHitVector.size(); j++){
611 int nTAGMColumns = 122;
612 if(tagmHitVector[j]->has_fADC){
615 sprintf(name,
"Column %.3i Row %.1i", tagmHitVector[j]->
column, tagmHitVector[j]->row);
616 sprintf(title,
"TAGM Column %i t_{ADC} - t_{RF}; t_{ADC} - t_{RF} [ns]; Entries", tagmHitVector[j]->
column);
619 tagmHitVector[j]->time_fadc - locShiftedTime,
621 NBINS_RF_COMPARE, MIN_RF_COMPARE, MAX_RF_COMPARE);
624 if(tagmHitVector[j]->has_TDC){
627 sprintf(name,
"Column %.3i Row %.1i", tagmHitVector[j]->
column, tagmHitVector[j]->row);
628 sprintf(title,
"TAGM Column %i t_{TDC} - t_{RF}; t_{TDC} - t_{RF} [ns]; Entries", tagmHitVector[j]->
column);
631 tagmHitVector[j]->t - locShiftedTime,
633 NBINS_RF_COMPARE, MIN_RF_COMPARE, MAX_RF_COMPARE);
638 "#Deltat TAGM-RFBunch; CCDB Index ;t_{TAGM} - t_{SC @ target} [ns]",
639 nTAGMColumns, 0.5, nTAGMColumns + 0.5, NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME);
640 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - RFBunch Time",
641 tagmHitVector[j]->t - thisRFBunch->
dTime, tagmHitVector[j]->E,
642 "Tagger - RFBunch Time; #Deltat_{Tagger - SC} [ns]; Energy [GeV]",
643 NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME, nBinsE, EMin, EMax);
644 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - RFBunch 1D Time",
645 tagmHitVector[j]->t - thisRFBunch->
dTime,
646 "Tagger - RFBunch Time; #Deltat_{Tagger - RFBunch} [ns]; Entries",
649 if (tagmHitVector[j]->row == 0){
650 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"TAGM - RFBunch 1D Time",
651 tagmHitVector[j]->t - thisRFBunch->
dTime,
652 "TAGM - RFBunch Time; #Deltat_{TAGM - RFBunch} [ns]; Entries",
659 for (
unsigned int j = 0 ; j < taghHitVector.size(); j++){
660 int nTAGHCounters = 274;
662 if(taghHitVector[j]->has_fADC){
665 sprintf(name,
"Counter ID %.3i", taghHitVector[j]->counter_id);
666 sprintf(title,
"TAGH Counter ID %i t_{ADC} - t_{RF}; t_{ADC} - t_{RF} [ns]; Entries", taghHitVector[j]->counter_id);
669 taghHitVector[j]->time_fadc - locShiftedTime,
671 NBINS_RF_COMPARE, MIN_RF_COMPARE, MAX_RF_COMPARE);
673 if(taghHitVector[j]->has_TDC){
676 sprintf(name,
"Counter ID %.3i", taghHitVector[j]->counter_id);
677 sprintf(title,
"TAGH Counter ID %i t_{TDC} - t_{RF}; t_{TDC} - t_{RF} [ns]; Entries", taghHitVector[j]->counter_id);
680 taghHitVector[j]->time_tdc - locShiftedTime,
682 NBINS_RF_COMPARE, MIN_RF_COMPARE, MAX_RF_COMPARE);
686 taghHitVector[j]->counter_id, taghHitVector[j]->t - thisRFBunch->
dTime,
687 "#Deltat TAGH-RFBunch; Counter ID ;t_{TAGH} - t_{RFBunch} [ns]",
688 nTAGHCounters, 0.5, nTAGHCounters + 0.5, NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME);
690 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - RFBunch Time",
691 taghHitVector[j]->t - thisRFBunch->
dTime, taghHitVector[j]->E,
692 "Tagger - RFBunch Time; #Deltat_{Tagger - RFBunch} [ns]; Energy [GeV]",
693 NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME, nBinsE, EMin, EMax);
695 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - RFBunch 1D Time",
696 taghHitVector[j]->t - thisRFBunch->
dTime,
697 "Tagger - RFBunch Time; #Deltat_{Tagger - RFBunch} [ns]; Entries",
702 if (!DO_TRACK_BASED && !DO_VERIFY )
return NOERROR;
707 vector<const DChargedTrack *> chargedTrackVector;
708 loop->Get(chargedTrackVector);
710 for (i = 0; i < chargedTrackVector.size(); i++){
713 if (chargedTrackVector[i]->Get_Charge() > 0)
continue;
716 if (pionHypothesis == NULL)
continue;
719 double trackingFOM = TMath::Prob(locTrackTimeBased->chisq, locTrackTimeBased->Ndof);
724 float trackingFOMCut = 2.87E-7;
725 int trackingNDFCut = 5;
727 if(trackingFOM < trackingFOMCut)
continue;
728 if( locTrackTimeBased->Ndof < trackingNDFCut)
continue;
739 if (locSCHitMatchParams == NULL)
continue;
745 float flightTimeCorrectedSCTime = locSCHitMatchParams->dHitTime - locSCHitMatchParams->dFlightTime - targetCenterCorrection;
748 sprintf(name,
"Sector %.2i", locSCHitMatchParams->dSCHit->sector);
749 sprintf(title,
"SC Sector %i t_{Target} - t_{RF}; t_{Target} - t_{RF} [ns]; Entries", locSCHitMatchParams->dSCHit->sector);
752 flightTimeCorrectedSCTime - locShiftedTime,
754 NBINS_RF_COMPARE, MIN_RF_COMPARE, MAX_RF_COMPARE);
756 flightTimeCorrectedSCTime - thisRFBunch->
dTime,
757 "t_{SC} - t_{RF} at Target; t_{SC} - t_{RF} at Target [ns]; Entries",
758 NBINS_MATCHING, MIN_MATCHING_T, MAX_MATCHING_T);
763 vector<DTrackFitter::pull_t> pulls = thisTimeBasedTrack->
pulls;
764 double earliestCDCTime = 10000.;
765 double earliestFDCTime = 10000.;
766 for (
size_t iPull = 0; iPull < pulls.size(); iPull++){
767 if ( pulls[iPull].
cdc_hit !=
nullptr && pulls[iPull].tdrift < earliestCDCTime) earliestCDCTime = pulls[iPull].tdrift;
768 if ( pulls[iPull].fdc_hit !=
nullptr && pulls[iPull].tdrift < earliestFDCTime) earliestFDCTime = pulls[iPull].tdrift;
772 vector < const DCDCTrackHit *> cdcTrackHitVector;
774 if (cdcTrackHitVector.size() != 0){
775 float earliestTime = 10000;
776 for (
unsigned int iCDC = 0; iCDC < cdcTrackHitVector.size(); iCDC++){
777 if (cdcTrackHitVector[iCDC]->tdrift < earliestTime) earliestTime = cdcTrackHitVector[iCDC]->tdrift;
780 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"Earliest CDC Time Minus Matched SC Time",
781 earliestTime - locSCHitMatchParams->dHitTime,
782 "Earliest CDC Time Minus Matched SC Time; t_{CDC} - t_{SC} [ns];",
787 for (
unsigned int j = 0 ; j < tagmHitVector.size(); j++){
788 int nTAGMColumns = 122;
790 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"TAGM - SC Target Time",
791 GetCCDBIndexTAGM(tagmHitVector[j]), tagmHitVector[j]->t - flightTimeCorrectedSCTime,
792 "#Deltat TAGM-SC; Column ;t_{TAGM} - t_{SC @ target} [ns]", nTAGMColumns, 0.5, nTAGMColumns + 0.5, NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME);
793 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - SC Target Time",
794 tagmHitVector[j]->t - flightTimeCorrectedSCTime, tagmHitVector[j]->E,
795 "Tagger - SC Target Time; #Deltat_{Tagger - SC} [ns]; Energy [GeV]",
796 NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME, nBinsE, EMin, EMax);
797 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - SC 1D Target Time",
798 tagmHitVector[j]->t - flightTimeCorrectedSCTime,
799 "Tagger - SC Time at Target; #Deltat_{Tagger - SC} [ns]; Entries",
803 for (
unsigned int j = 0 ; j < taghHitVector.size(); j++){
804 int nTAGHCounters = 274;
805 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"TAGH - SC Target Time",
806 taghHitVector[j]->counter_id, taghHitVector[j]->t - flightTimeCorrectedSCTime,
807 "#Deltat TAGH-SC; Counter ID ;t_{TAGH} - t_{SC @ target} [ns]", nTAGHCounters, 0.5, nTAGHCounters + 0.5, NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME);
809 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - SC Target Time",
810 taghHitVector[j]->t - flightTimeCorrectedSCTime, taghHitVector[j]->E,
811 "Tagger - SC Target Time; #Deltat_{Tagger - SC} [ns]; Energy [GeV]",
812 NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME, nBinsE, EMin, EMax);
814 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - SC 1D Target Time",
815 taghHitVector[j]->t - flightTimeCorrectedSCTime,
816 "Tagger - SC Time at Target; #Deltat_{Tagger - SC} [ns]; Entries",
820 if (locTOFHitMatchParams != NULL){
822 float flightTimeCorrectedTOFTime = locTOFHitMatchParams->dHitTime - locTOFHitMatchParams->dFlightTime - targetCenterCorrection;
823 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"TOF - SC Target Time",
824 flightTimeCorrectedTOFTime - flightTimeCorrectedSCTime,
825 "t_{TOF} - t_{SC} at Target; t_{TOF} - t_{SC} at Target [ns]; Entries",
826 NBINS_MATCHING, MIN_MATCHING_T, MAX_MATCHING_T);
828 flightTimeCorrectedTOFTime - thisRFBunch->
dTime,
829 "t_{TOF} - t_{RF} at Target; t_{TOF} - t_{RF} at Target [ns]; Entries",
830 NBINS_MATCHING, MIN_MATCHING_T, MAX_MATCHING_T);
832 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"Earliest Flight-time Corrected FDC Time",
834 "Earliest Flight-time corrected FDC Time; t_{FDC} [ns];",
838 if (locBCALShowerMatchParams != NULL){
839 float flightTimeCorrectedBCALTime = locBCALShowerMatchParams->dBCALShower->t - locBCALShowerMatchParams->dFlightTime - targetCenterCorrection;
840 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"BCAL - SC Target Time",
841 flightTimeCorrectedBCALTime - flightTimeCorrectedSCTime,
842 "t_{BCAL} - t_{SC} at Target; t_{BCAL} - t_{SC} [ns]; Entries",
843 NBINS_MATCHING, MIN_MATCHING_T, MAX_MATCHING_T);
845 flightTimeCorrectedBCALTime - thisRFBunch->
dTime,
846 "t_{BCAL} - t_{RF} at Target; t_{BCAL} - t_{RF} [ns]; Entries",
847 NBINS_MATCHING, MIN_MATCHING_T, MAX_MATCHING_T);
849 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"BCAL - SC Target Time Vs Correction",
850 locBCALShowerMatchParams->dFlightTime, flightTimeCorrectedBCALTime - flightTimeCorrectedSCTime,
851 "t_{BCAL} - t_{SC} at Target; Flight time [ns]; t_{BCAL} - t_{SC} [ns]",
852 100, 0, 20, 50, -10, 10);
854 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"Earliest Flight-time Corrected CDC Time",
856 "Earliest Flight-time Corrected CDC Time; t_{CDC} [ns];",
859 if (locFCALShowerMatchParams != NULL){
860 float flightTimeCorrectedFCALTime = locFCALShowerMatchParams->dFCALShower->getTime() - locFCALShowerMatchParams->dFlightTime - targetCenterCorrection;
861 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"FCAL - SC Target Time",
862 flightTimeCorrectedFCALTime - flightTimeCorrectedSCTime,
863 "t_{FCAL} - t_{SC} at Target; t_{FCAL} - t_{SC} [ns]; Entries",
864 NBINS_MATCHING, MIN_MATCHING_T, MAX_MATCHING_T);
866 flightTimeCorrectedFCALTime - thisRFBunch->
dTime,
867 "t_{FCAL} - t_{RF} at Target; t_{FCAL} - t_{RF} [ns]; Entries",
868 NBINS_MATCHING, MIN_MATCHING_T, MAX_MATCHING_T);
875 vector<const DAnalysisResults*> locAnalysisResultsVector;
876 loop->Get(locAnalysisResultsVector);
878 deque<const DParticleCombo*> locPassedParticleCombos;
879 locAnalysisResultsVector[0]->Get_PassedParticleCombos(locPassedParticleCombos);
881 for (i=0; i < locPassedParticleCombos.size(); i++){
882 double taggerTime = locPassedParticleCombos[i]->Get_ParticleComboStep(0)->Get_InitialParticle_Measured()->time();
885 for (
unsigned int j = 0 ; j < tagmHitVector.size(); j++){
886 if (taggerTime == tagmHitVector[j]->t){
887 int nTAGMColumns = 122;
889 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"TAGM - RFBunch Time p2pi",
891 "#Deltat TAGM-RFBunch; Column ;t_{TAGM} - t_{SC @ target} [ns]",
892 nTAGMColumns, 0.5, nTAGMColumns + 0.5, NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME);
893 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - RFBunch Time p2pi",
894 tagmHitVector[j]->t - thisRFBunch->
dTime, tagmHitVector[j]->E,
895 "Tagger - RFBunch Time; #Deltat_{Tagger - SC} [ns]; Energy [GeV]",
896 NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME, nBinsE, EMin, EMax);
897 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - RFBunch 1D Time p2pi",
898 tagmHitVector[j]->t - thisRFBunch->
dTime,
899 "Tagger - RFBunch Time; #Deltat_{Tagger - RFBunch} [ns]; Entries",
904 for (
unsigned int j = 0 ; j < taghHitVector.size(); j++){
905 if (taggerTime == taghHitVector[j]->t){
906 int nTAGHCounters = 274;
907 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"TAGH - RFBunch Time p2pi",
908 taghHitVector[j]->counter_id, taghHitVector[j]->t - thisRFBunch->
dTime,
909 "#Deltat TAGH-RFBunch; Counter ID ;t_{TAGH} - t_{RFBunch} [ns]",
910 nTAGHCounters, 0.5, nTAGHCounters + 0.5, NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME);
912 Fill2DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - RFBunch Time p2pi",
913 taghHitVector[j]->t - thisRFBunch->
dTime, taghHitVector[j]->E,
914 "Tagger - RFBunch Time; #Deltat_{Tagger - RFBunch} [ns]; Energy [GeV]",
915 NBINS_TAGGER_TIME,MIN_TAGGER_TIME,MAX_TAGGER_TIME, nBinsE, EMin, EMax);
917 Fill1DHistogram(
"HLDetectorTiming",
"TRACKING",
"Tagger - RFBunch 1D Time p2pi",
918 taghHitVector[j]->t - thisRFBunch->
dTime,
919 "Tagger - RFBunch Time; #Deltat_{Tagger - RFBunch} [ns]; Entries",
942 TH2I *fdc_time_module_hist = (TH2I*)gDirectory->Get(
"HLDetectorTiming/FDC/FDCHit Wire time vs. module");
943 if(fdc_time_module_hist != NULL) {
946 for(
int ibin=1; ibin<=48; ibin++){
949 ss << act_crate <<
"/" << act_slot;
950 fdc_time_module_hist->GetXaxis()->SetBinLabel(ibin, ss.str().c_str());
952 fdc_time_module_hist->LabelsOption(
"v");
974 int plane = thisHit->
plane;
975 int bar = thisHit->
bar;
976 int end = thisHit->
end;
978 int CCDBIndex = plane * 88 + end * 44 + bar;
988 int row = thisHit->
row;
991 int CCDBIndex = column + row;
992 if (column > 9) CCDBIndex += 5;
993 if (column > 27) CCDBIndex += 5;
994 if (column > 81) CCDBIndex += 5;
995 if (column > 99) CCDBIndex += 5;
1002 int ring = thisHit->
ring;
1003 int straw = thisHit->
straw;
1005 int CCDBIndex = GetCCDBIndexCDC(ring, straw);
1012 int StartIndex[28] = {0, 42, 84, 138, 192, 258, 324, 404, 484, 577, 670, 776, 882, 1005, 1128, 1263, 1398, 1544, 1690, 1848, 2006, 2176, 2346, 2528, 2710, 2907, 3104, 3313};
1014 int CCDBIndex = StartIndex[ring - 1] + straw;
DRFTime_factory * locRFTimeFactory
jerror_t fini(void)
Called after last event of last event source has been processed.
int GetCCDBIndexTOF(const DTOFHit *)
sprintf(text,"Post KinFit Cut")
const DVector3 & position(void) const
const DTrackTimeBased * Get_TrackTimeBased(void) const
uint32_t Get_L1FrontPanelTriggerBits(void) const
int GetCCDBIndexTAGM(const DTAGMHit *)
shared_ptr< const DTOFHitMatchParams > Get_TOFHitMatchParams(void) const
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
int GetCCDBIndexCDC(const DCDCHit *)
~JEventProcessor_HLDetectorTiming()
DGeometry * GetDGeometry(unsigned int run_number)
static int Get_FDCTDC_crate_slot(int mod, string &act_crate, int &act_slot)
int GetCCDBIndexBCAL(const DBCALHit *)
Not implimented.
shared_ptr< const DSCHitMatchParams > Get_SCHitMatchParams(void) const
void cdc_hit(Int_t &, Int_t &, Int_t &, Int_t[], Int_t, Int_t, Int_t, Int_t, Int_t, Int_t)
shared_ptr< const DFCALShowerMatchParams > Get_FCALShowerMatchParams(void) const
vector< DTrackFitter::pull_t > pulls
Holds pulls used in chisq calc. (not including off-diagonals)
int channel(int row, int column) const
JEventProcessor_HLDetectorTiming()
shared_ptr< const DBCALShowerMatchParams > Get_BCALShowerMatchParams(void) const
File: DTOFHit.h Created: Tue Jan 18 16:15:26 EST 2011 Creator: B. Zihlmann Purpose: Container class t...
int GetCCDBIndexTAGM(unsigned int column, unsigned int row)
unsigned int dNumParticleVotes
double Step_TimeToNearInputTime(double locTimeToStep, double locTimeToStepTo) const
jerror_t init(void)
Called once at program start.
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
bool GetTargetZ(double &z_target) const
z-location of center of target
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
int numActiveBlocks() const
A DEPICSvalue object holds information for a single EPICS value read from the data stream...