14 #include <JANA/JApplication.h>
22 #include <TDirectory.h>
169 TDirectory *
main = gDirectory;
170 TDirectory *tagmdir = gDirectory->mkdir(
"tagm");
175 "TAGM FADC250 column occupancy",
178 "TAGM FADC250 pulse integral (log10)",
182 "TAGM FADC250 pulse integral (log10) vs column",
187 "TAGM FADC250 pulse time counter",
190 "TAGM FADC250 pulse time counter vs column",
194 "TAGM FADC250 pulse pedestal",
197 "TAGM FADC250 pulse pedestal vs column",
201 "TAGM FADC250 quality factor",
205 "TAGM FADC250 quality factor vs column",
210 "TAGM number of samples used in pulse integral",
214 "TAGM samples used in pulse integral vs column",
219 "TAGM number of samples used in pulse pedestal",
223 "TAGM samples used in pulse pedestal vs column",
228 "TAGM pulse integral (log10) vs number of samples",
234 "TAGM pulse pedestal vs pedestal samples",
241 "TAGM F1TDC column occupancy",
244 "TAGM F1TDC pulse time counter",
247 "TAGM F1TDC pulse time counter vs column",
253 "TAGM hit column occupancy",
256 "TAGM hit pulse height (pixels)",
259 "TAGM hit pulse height (pixels) vs column",
263 "TAGM hit pulse time (ns)",
266 "TAGM hit pulse time (ns) vs column",
270 "TAGM hit discriminator time (ns)",
273 "TAGM hit discriminator time (ns) vs column",
277 "TAGM pulse time vs discriminator time (ns)",
282 TDirectory *adc_pint_dir = gDirectory->mkdir(
"tagm_adc_pint_col");
283 TDirectory *adc_time_dir = gDirectory->mkdir(
"tagm_adc_time_col");
284 TDirectory *adc_ped_dir = gDirectory->mkdir(
"tagm_adc_ped_col");
285 TDirectory *adc_qf_dir = gDirectory->mkdir(
"tagm_adc_qf_col");
286 TDirectory *tdc_time_dir = gDirectory->mkdir(
"tagm_tdc_time_col");
287 TDirectory *adc_mult_dir = gDirectory->mkdir(
"tagm_adc_mult_col");
288 TDirectory *tdc_mult_dir = gDirectory->mkdir(
"tagm_tdc_mult_col");
289 TDirectory *hit_time_dir = gDirectory->mkdir(
"tagm_hit_time_col");
290 for (
unsigned int i = 0; i <
NCOLUMNS; i++) {
293 Form(
"FADC250 pulse integral (log10)"
294 " for TAGM column %i", i+1),
299 Form(
"FADC250 pulse time counter"
300 " for TAGM column %i", i+1),
305 Form(
"FADC250 pulse pedestal"
306 " for TAGM column %i", i+1),
311 Form(
"FADC250 pulse QF"
312 " for TAGM column %i", i+1),
317 Form(
"F1TDC hit time counter"
318 " for TAGM column %i", i+1),
323 Form(
"FADC250 pulse multiplicity"
324 " for TAGM column %i", i+1),
328 Form(
"F1TDC hit multiplicity"
329 " for TAGM column %i", i+1),
333 Form(
"hit time for TAGM column %i", i+1),
341 "TAGM TDC-ADC hit time difference, nearby pairs",
345 "TAGM F1TDC time difference, all pairs",
351 "TAGM F1TDC multiplicity",
354 "TAGM FADC250 multiplicity",
357 "TAGM FADC250 multiplicity vs column",
358 NCOLUMNS, 0., NCOLUMNS + 1., 10, 0.5, 10.5);
360 "TAGM F1TDC multiplicity vs column",
361 NCOLUMNS, 0., NCOLUMNS + 1., 10, 0.5, 10.5);
363 "TAGM FADC250 vs. F1TDC multiplicity",
364 10, 0.5, 10.5, 10, 0.5, 10.5);
368 "TAGM number of events", 1, 0.5, 1.5);
371 TDirectory *singles_dir = gDirectory->mkdir(
"singles (low-gain only)");
374 "TAGM FADC250 singles occupancy",
377 "TAGM FADC250 pulse integral (log10)",
381 "TAGM FADC250 pulse integral (log10) vs fiber no.",
386 "TAGM FADC250 pulse time counter",
389 "TAGM FADC250 pulse time counter vs fiber no.",
393 "TAGM FADC250 pulse pedestal",
396 "TAGM FADC250 pulse pedestal vs fiber no.",
400 "TAGM FADC250 quality factor",
404 "TAGM FADC250 quality factor vs fiber no.",
409 "TAGM number of samples used in pulse integral",
413 "TAGM samples used in pulse integral vs fiber no.",
418 "TAGM number of samples used in pulse pedestal",
422 "TAGM samples used in pulse pedestal vs fiber no.",
427 "TAGM pulse integral (log10) vs number of samples",
433 "TAGM pulse pedestal vs pedestal samples",
440 "TAGM F1TDC column occupancy",
443 "TAGM F1TDC pulse time counter",
446 "TAGM F1TDC pulse time counter vs fiber no.",
452 "TAGM hit fiber no. occupancy",
455 "TAGM hit pulse height (pixels)",
458 "TAGM hit pulse height (pixels) vs fiber no.",
462 "TAGM hit pulse time (ns)",
465 "TAGM hit pulse time (ns) vs fiber no.",
469 "TAGM hit discriminator time (ns)",
472 "TAGM hit discriminator time (ns) vs fiber no.",
476 "TAGM pulse time vs discriminator time (ns)",
481 TDirectory *adc_pint_sdir = gDirectory->mkdir(
"tagms_adc_pint_sng");
482 TDirectory *adc_time_sdir = gDirectory->mkdir(
"tagms_adc_time_sng");
483 TDirectory *adc_ped_sdir = gDirectory->mkdir(
"tagms_adc_ped_sng");
484 TDirectory *adc_qf_sdir = gDirectory->mkdir(
"tagms_adc_qf_sng");
485 TDirectory *tdc_time_sdir = gDirectory->mkdir(
"tagms_tdc_time_sng");
486 TDirectory *adc_mult_sdir = gDirectory->mkdir(
"tagms_adc_mult_sng");
487 TDirectory *tdc_mult_sdir = gDirectory->mkdir(
"tagms_tdc_mult_sng");
488 TDirectory *hit_time_sdir = gDirectory->mkdir(
"tagms_hit_time_sng");
489 for (
unsigned int i = 0; i <
NSINGLES; i++) {
492 Form(
"FADC250 pulse integral (log10)"
493 " for TAGM fiber no. %i", i+1),
498 Form(
"FADC250 pulse time counter"
499 " for TAGM fiber no. %i", i+1),
504 Form(
"FADC250 pulse pedestal"
505 " for TAGM fiber no. %i", i+1),
510 Form(
"FADC250 pulse QF"
511 " for TAGM fiber no. %i", i+1),
516 Form(
"F1TDC hit time counter"
517 " for TAGM fiber no. %i", i+1),
522 Form(
"FADC250 pulse multiplicity"
523 " for TAGM fiber no. %i", i+1),
527 Form(
"F1TDC hit multiplicity"
528 " for TAGM fiber no. %i", i+1),
532 Form(
"hit time for TAGM fiber no. %i", i+1),
540 "TAGM TDC-ADC hit time difference, nearby pairs",
544 "TAGM F1TDC time difference, all pairs",
550 "TAGM FADC250 multiplicity vs fiber no.",
551 NSINGLES, 0., NSINGLES + 1., 10, 0.5, 10.5);
553 "TAGM F1TDC multiplicity vs fiber no.",
554 NSINGLES, 0., NSINGLES + 1., 10, 0.5, 10.5);
582 std::vector<const DTAGMDigiHit*> digihits;
583 std::vector<const DTAGMTDCDigiHit*> tdcdigihits;
584 std::vector<const DTAGMHit*> hits;
585 eventLoop->Get(digihits);
586 eventLoop->Get(tdcdigihits);
587 eventLoop->Get(hits,
"Calib");
591 japp->RootFillLock(
this);
594 if( (digihits.size()>0) || (tdcdigihits.size()>0) )
605 for (
unsigned int i=0; i <
NCOLUMNS; ++i)
606 column_adc_hits[i] = column_tdc_hits[i] = 0;
607 int column_adc_hits_total = 0;
608 int column_tdc_hits_total = 0;
611 std::vector<const DTAGMDigiHit*>::iterator iter;
612 for (iter = digihits.begin(); iter != digihits.end(); ++iter) {
613 int row = (*iter)->row;
614 int column = (*iter)->column;
615 uint32_t pedestal_avg;
616 if ((*iter)->nsamples_pedestal == 0)
617 pedestal_avg = (*iter)->pedestal;
619 pedestal_avg = (*iter)->pedestal / (*iter)->nsamples_pedestal;
639 log10((*iter)->pulse_integral));
650 ++column_adc_hits[column - 1];
651 ++column_adc_hits_total;
656 std::vector<const DTAGMTDCDigiHit*>::iterator titer;
657 for (titer = tdcdigihits.begin(); titer != tdcdigihits.end(); ++titer) {
658 int row = (*titer)->row;
659 int column = (*titer)->column;
673 ++column_tdc_hits[column - 1];
674 ++column_tdc_hits_total;
679 for (
unsigned int col = 0; col <
NCOLUMNS; ++col){
680 if (column_adc_hits[col] > 0) {
685 if (column_tdc_hits[col] > 0) {
692 std::vector<const DTAGMHit*>::iterator hiter;
693 for (hiter = hits.begin(); hiter != hits.end(); ++hiter) {
694 int row = (*hiter)->row;
695 int column = (*hiter)->column;
717 if ((column_tdc_hits_total > 1) && (column_adc_hits_total > 1) ) {
718 for (titer = tdcdigihits.begin(); titer != tdcdigihits.end(); ++titer) {
719 for (iter = digihits.begin(); iter != digihits.end(); ++iter) {
720 if ((*iter)->column == (*titer)->column &&
721 (*iter)->row == 0 && (*titer)->row ==0)
735 for (
unsigned int i=0; i <
NSINGLES; ++i)
736 single_adc_hits[i] = single_tdc_hits[i] = 0;
737 int single_adc_hits_total = 0;
738 int single_tdc_hits_total = 0;
741 for (iter = digihits.begin(); iter != digihits.end(); ++iter) {
742 int row = (*iter)->row;
743 int column = (*iter)->column;
744 uint32_t pedestal_avg = (*iter)->pedestal / (*iter)->nsamples_pedestal;
745 int fiberNo = (row < 1)? 0 :
747 (column == 25)? row + 5 :
748 (column == 79)? row + 10 :
749 (column == 97)? row + 15 : 0;
769 log10((*iter)->pulse_integral));
780 ++single_adc_hits[fiberNo - 1];
781 ++single_adc_hits_total;
786 for (titer = tdcdigihits.begin(); titer != tdcdigihits.end(); ++titer) {
787 int row = (*titer)->row;
788 int column = (*titer)->column;
789 int fiberNo = (row < 1)? 0 :
791 (column == 25)? row + 5 :
792 (column == 79)? row + 10 :
793 (column == 97)? row + 15 : 0;
807 ++single_tdc_hits[fiberNo - 1];
808 ++single_tdc_hits_total;
813 for (
unsigned int fno = 0; fno <
NSINGLES; ++fno){
814 if (single_adc_hits[fno] > 0) {
819 if (single_tdc_hits[fno] > 0) {
826 for (hiter = hits.begin(); hiter != hits.end(); ++hiter) {
827 int row = (*hiter)->row;
828 int column = (*hiter)->column;
829 int fiberNo = (row < 1)? 0 :
831 (column == 25)? row + 5 :
832 (column == 79)? row + 10 :
833 (column == 97)? row + 15 : 0;
855 if ((single_tdc_hits_total > 1) && (single_adc_hits_total > 1) ) {
856 for (titer = tdcdigihits.begin(); titer != tdcdigihits.end(); ++titer) {
857 for (iter = digihits.begin(); iter != digihits.end(); ++iter) {
858 if ((*iter)->row > 0 && (*iter)->column == (*titer)->column &&
859 (*iter)->row == (*titer)->row)
868 japp->RootFillUnLock(
this);
static TH2F * tagms_adc_nsi_2d
static TH1F * tagms_hit_tdiff
TH1F ** tagms_adc_time_sng
static TH2F * tagm_adc_pint_2d
static TH2F * tagm_adc_mult_2d
TH1F ** tagm_tdc_mult_col
TH1F ** tagms_adc_ped_sng
static TH1F * tagms_tdc_tdiff_all
static TH1F * tagms_hit_npix
static TH1F * tagm_hit_tdiff
static TH1F * tagms_adc_nsp
static TH1F * tagm_tdc_tdiff_all
static TH2F * tagms_hit_time_tadc
const float_t TDC_NS_PER_COUNT
TH1F ** tagms_tdc_time_sng
static TH2F * tagm_tdc_mult_2d
static TH1F * tagm_adc_qf
const uint32_t BINCOUNT_HIT_TADC
const uint32_t BINCOUNT_ADC_PED
static TH2F * tagm_adc_ped_nsp
TH1F ** tagm_adc_time_col
const uint32_t BINCOUNT_HIT_NPIX
static TH2F * tagm_adc_pint_nsi
static TH1F * tagm_num_events
const float MIN_ADC_PINT_LOG10
static TH2F * tagm_adc_tdc_mult
static TH1F * tagms_adc_time
static TH1F * tagms_adc_nsi
static TH2F * tagms_tdc_mult_2d
static TH1F * tagms_hit_seen
static TH2F * tagms_adc_ped_2d
static TH1F * tagm_adc_pint
const uint32_t BINCOUNT_ADC_TIME
static TH2F * tagm_adc_time_2d
const float MAX_ADC_PINT_LOG10
static TH1F * tagm_tdc_mult
jerror_t fini(void)
Called after last event of last event source has been processed.
static TH1F * tagm_adc_nsp
static TH2F * tagm_hit_time_tadc
static TH1F * tagm_adc_mult
const uint32_t BINCOUNT_ADC_NSI
static TH1F * tagms_hit_time
static TH2F * tagm_tdc_time_2d
static TH1F * tagms_hit_tadc
static TH1F * tagm_hit_seen
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
static TH2F * tagm_hit_npix_2d
const float_t ADC_NS_PER_COUNT
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
static TH2F * tagms_adc_time_2d
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
static TH2F * tagm_adc_qf_2d
const uint32_t BINCOUNT_ADC_PINT
jerror_t init(void)
Called once at program start.
const uint32_t BINCOUNT_HIT_TIME
TH1F ** tagms_adc_mult_sng
static TH2F * tagms_adc_pint_2d
static TH2F * tagms_hit_npix_2d
JEventProcessor_TAGM_online()
const uint32_t BINCOUNT_ADC_QF
TH1F ** tagms_hit_time_sng
TH1F ** tagm_hit_time_col
static TH2F * tagms_adc_pint_nsi
TH1F ** tagms_tdc_mult_sng
static TH2F * tagms_tdc_time_2d
TH1F ** tagms_adc_pint_sng
const uint32_t BINCOUNT_ADC_NSP
static TH1F * tagm_tdc_seen
static TH1F * tagms_adc_seen
static TH1F * tagm_hit_tadc
static TH2F * tagms_hit_tadc_2d
static TH2F * tagms_adc_qf_2d
TH1F ** tagm_adc_pint_col
static TH1F * tagm_hit_npix
static TH1F * tagm_hit_time
static TH1F * tagms_adc_qf
static TH2F * tagm_hit_tadc_2d
static TH1F * tagm_adc_nsi
static TH2F * tagms_adc_mult_2d
static TH2F * tagm_hit_time_2d
static TH1F * tagms_tdc_time
TH1F ** tagm_adc_mult_col
static TH1F * tagms_tdc_seen
static TH2F * tagms_adc_ped_nsp
static TH1F * tagm_adc_time
static TH1F * tagm_tdc_time
static TH2F * tagm_adc_nsp_2d
const uint32_t BINCOUNT_TDC_TIME
static TH2F * tagms_adc_nsp_2d
static TH2F * tagms_hit_time_2d
TH1F ** tagm_tdc_time_col
static TH2F * tagm_adc_ped_2d
static TH1F * tagm_adc_ped
static TH1F * tagms_adc_ped
int main(int argc, char *argv[])
~JEventProcessor_TAGM_online()
static TH2F * tagm_adc_nsi_2d
static TH1F * tagms_adc_pint
static TH1F * tagm_adc_seen