12 #include <JANA/JApplication.h>
22 #include <TDirectory.h>
120 TDirectory *
mainDir = gDirectory;
121 TDirectory *pscDir = gDirectory->mkdir(
"PSC");
125 psc_num_events =
new TH1I(
"psc_num_events",
"PSC Number of events",1,0.5,1.5);
127 TDirectory *hitDir = gDirectory->mkdir(
"Hit"); hitDir->cd();
131 TString arm_str[] = {
"Left",
"Right"};
132 for (
int i = 0; i <
Narms; i++) {
133 gDirectory->mkdir(arm_str[i]+
"Arm")->cd();
134 TString strN =
"_" + arm_str[i] +
"Arm";
135 TString strT =
", " + arm_str[i] +
" arm";
136 hHit_HasTDCvsHasADC[i] =
new TH2F(
"Hit_HasTDCvsHasADC"+strN,
"PSC has TDC? vs. has ADC?"+strT+
";fADC status;TDC status",2,-0.5,1.5,2,-0.5,1.5);
137 hHit_Occupancy[i] =
new TH1I(
"Hit_Occupancy"+strN,
"PSC occupancy"+strT+
";module (counter);hits / module",
Nmods,0.5,0.5+
Nmods);
138 hHit_Integral[i] =
new TH1I(
"Hit_Integral"+strN,
"PSC fADC pulse integral"+strT+
";pulse integral;hits",250,0.0,10000.0);
139 hHit_IntegralVsModule[i] =
new TH2I(
"Hit_IntegralVsModule"+strN,
"PSC fADC pulse integral vs. module"+strT+
";module (counter);pulse integral",
Nmods,0.5,0.5+
Nmods,250,0.0,10000.0);
141 hHit_fadcTime[i] =
new TH1I(
"Hit_fadcTime"+strN,
"PSC fADC time"+strT+
";time [ns];hits / 400 ps",200,-40.0,40.0);
142 hHit_fadcTimeVsModule[i] =
new TH2I(
"Hit_fadcTimeVsModule"+strN,
"PSC fADC time vs. module"+strT+
";module (counter);time [ns]",
Nmods,0.5,0.5+
Nmods,200,-40.0,40.0);
143 hHit_Time[i] =
new TH1I(
"Hit_Time"+strN,
"PSC time"+strT+
";time [ns];hits / 400 ps",200,-40.0,40.0);
144 hHit_TimeVsModule[i] =
new TH2I(
"Hit_TimeVsModule"+strN,
"PSC time vs. module"+strT+
";module (counter);time [ns]",
Nmods,0.5,0.5+
Nmods,200,-40.0,40.0);
145 hHit_tdcTime[i] =
new TH1I(
"Hit_tdcTime"+strN,
"PSC TDC time"+strT+
";time [ns];hits / 400 ps",200,-40.0,40.0);
146 hHit_tdcadcTimeDiffVsModule[i] =
new TH2I(
"Hit_tdcadcTimeDiffVsModule"+strN,
"PSC TDC/ADC time difference vs. module"+strT+
";module (counter);time(TDC) - time(ADC) [ns]",
Nmods,0.5,0.5+
Nmods,200,-40.0,40.0);
151 TDirectory *digihitDir = gDirectory->mkdir(
"DigiHit"); digihitDir->cd();
153 hDigiHit_Arm =
new TH1I(
"DigiHit_Arm",
"PSC arm;arm;raw hits",Narms,-0.5,-0.5+Narms);
157 hDigiHit_Arm_cut =
new TH1I(
"DigiHit_Arm_cut",
"PSC arm (> 100 ADC integral counts);arm;raw hits",Narms,-0.5,-0.5+Narms);
159 for (
int i = 0; i <
Narms; i++) {
160 gDirectory->mkdir(arm_str[i]+
"Arm")->cd();
161 TString strN =
"_" + arm_str[i] +
"Arm";
162 TString strT =
", " + arm_str[i] +
" arm";
163 hDigiHit_NSamplesPedestal[i] =
new TH1I(
"DigiHit_NSamplesPedestal"+strN,
"PSC fADC pedestal samples"+strT+
";pedestal samples;raw hits",50,-0.5,49.5);
164 hDigiHit_Pedestal[i] =
new TH1I(
"DigiHit_Pedestal"+strN,
"PSC fADC pedestals"+strT+
";pedestal [fADC counts];raw hits",200,0.0,200.0);
165 hDigiHit_PedestalVsModule[i] =
new TProfile(
"DigiHit_PedestalVsModule"+strN,
"PSC pedestal vs. module"+strT+
";module (counter);average pedestal [fADC counts]",
Nmods,0.5,0.5+
Nmods,
"s");
166 hDigiHit_QualityFactor[i] =
new TH1I(
"DigiHit_QualityFactor"+strN,
"PSC fADC quality factor"+strT+
";quality factor;raw hits",4,-0.5,3.5);
168 hDigiHit_RawPeak[i] =
new TH1I(
"DigiHit_RawPeak"+strN,
"PSC fADC pulse peak (raw)"+strT+
";pulse peak (raw);raw hits",410,0.0,4100.0);
169 hDigiHit_RawPeakVsModule[i] =
new TH2I(
"DigiHit_RawPeakVsModule"+strN,
"PSC fADC pulse peak (raw) vs. module"+strT+
";module (counter);pulse peak (raw)",
Nmods,0.5,0.5+
Nmods,410,0.0,4100.0);
170 hDigiHit_RawIntegral[i] =
new TH1I(
"DigiHit_RawIntegral"+strN,
"PSC fADC pulse integral (raw)"+strT+
";pulse integral (raw);raw hits",500,0.0,20000.0);
171 hDigiHit_RawIntegralVsModule[i] =
new TH2I(
"DigiHit_RawIntegralVsModule"+strN,
"PSC fADC pulse integral (raw) vs. module"+strT+
";module (counter);pulse integral (raw)",
Nmods,0.5,0.5+
Nmods,500,0.0,20000.0);
172 hDigiHit_NSamplesIntegral[i] =
new TH1I(
"DigiHit_NSamplesIntegral"+strN,
"PSC fADC integral samples"+strT+
";integral samples;raw hits",60,-0.5,59.5);
173 hDigiHit_PeakVsModule[i] =
new TH2I(
"DigiHit_PeakVsModule"+strN,
"PSC fADC pulse peak vs. module"+strT+
";module (counter);pulse peak",
Nmods,0.5,0.5+
Nmods,410,0.0,4100.0);
174 hDigiHit_IntegralVsPeak[i] =
new TH2I(
"DigiHit_IntegralVsPeak"+strN,
"PSC fADC pulse integral vs. peak"+strT+
";pulse peak;pulse integral",410,0.0,4100.0,250,0.0,10000.0);
175 hDigiHit_IntegralVsModule[i] =
new TH2I(
"DigiHit_IntegralVsModule"+strN,
"PSC fADC pulse integral vs. module"+strT+
";module (counter);pulse integral",
Nmods,0.5,0.5+
Nmods,250,0.0,10000.0);
176 hDigiHit_PulseTime[i] =
new TH1I(
"DigiHit_PulseTime"+strN,
"PSC fADC pulse time"+strT+
";pulse time [62.5 ps];raw hits",2000,0.0,6500.0);
177 hDigiHit_fadcTime[i] =
new TH1I(
"DigiHit_fadcTime"+strN,
"PSC fADC pulse time"+strT+
";pulse time [ns];raw hits / 400 ps",1000,0.0,400.0);
178 hDigiHit_fadcTimeVsModule[i] =
new TH2I(
"DigiHit_fadcTimeVsModule"+strN,
"PSC fADC pulse time vs. module"+strT+
";module (counter);pulse time [ns]",
Nmods,0.5,0.5+
Nmods,1000,0.0,400.0);
179 hDigiHit_fadcTimeVsIntegral[i] =
new TH2I(
"DigiHit_fadcTimeVsIntegral"+strN,
"PSC fADC pulse time vs. integral"+strT+
";pulse integral;pulse time [ns]",250,0.0,10000.0,1000,0.0,400.0);
181 hDigiHit_fadcOccupancy_cut[i] =
new TH1I(
"DigiHit_fadcOccupancy_cut"+strN,
"PSC fADC hit occupancy (> 100 ADC integral counts)"+strT+
";module (counter);raw hits / module",
Nmods,0.5,0.5+
Nmods);
182 hDigiHit_fadcTime_cut[i] =
new TH1I(
"DigiHit_fadcTime_cut"+strN,
"PSC fADC pulse time (> 100 ADC integral counts)"+strT+
";pulse time [ns];raw hits / 400 ps",1000,0.0,400.0);
183 hDigiHit_fadcTimeVsModule_cut[i] =
new TH2I(
"DigiHit_fadcTimeVsModule_cut"+strN,
"PSC fADC pulse time vs. module (> 100 ADC integral counts)"+strT+
";module (counter);pulse time [ns]",
Nmods,0.5,0.5+
Nmods,1000,0.0,400.0);
184 hDigiHit_fadcTimeVsQF_cut[i] =
new TH2I(
"DigiHit_fadcTimeVsQF_cut"+strN,
"PSC fADC pulse time vs. quality factor (> 100 ADC integral counts)"+strT+
";fADC quality factor;pulse time [ns]",4,-0.5,3.5,1000,0.0,400.0);
186 hDigiHit_tdcOccupancy[i] =
new TH1I(
"DigiHit_tdcOccupancy"+strN,
"PSC TDC hit occupancy"+strT+
";module (counter);raw hits / module",
Nmods,0.5,0.5+
Nmods);
187 hDigiHit_tdcRawTime[i] =
new TH1I(
"DigiHit_tdcRawTime"+strN,
"PSC TDC raw time"+strT+
";time [60 ps];raw hits",1000,0.0,65500.0);
188 hDigiHit_tdcTime[i] =
new TH1I(
"DigiHit_tdcTime"+strN,
"PSC TDC time"+strT+
";time [ns];raw hits / 250 ps",3200,0.0,800.0);
190 hDigiHit_tdcTimeVsfadcTime[i] =
new TH2I(
"DigiHit_tdcTimeVsfadcTime"+strN,
"PSC TDC time vs. ADC time"+strT+
";fADC time [ns];TDC time [ns]",400,0.0,400.0,800,0.0,800.0);
191 hDigiHit_tdcadcTimeDiff[i] =
new TH1I(
"DigiHit_tdcadcTimeDiff"+strN,
"PSC TDC/ADC time difference"+strT+
";time(TDC) - time(ADC) [ns];hits",1000,0.0,400.0);
192 hDigiHit_tdcadcTimeDiffVsModule[i] =
new TH2I(
"DigiHit_tdcadcTimeDiffVsModule"+strN,
"PSC TDC/ADC time difference vs. module"+strT+
";module (counter);time(TDC) - time(ADC) [ns]",
Nmods,0.5,0.5+
Nmods,1000,0.0,400.0);
193 hDigiHit_tdcadcTimeDiffVsIntegral[i] =
new TH2I(
"DigiHit_tdcadcTimeDiffVsIntegral"+strN,
"PSC TDC/ADC time difference vs. pulse integral"+strT+
";pulse integral;time(TDC) - time(ADC) [ns]",500,0.0,15000.0,1000,0.0,400.0);
194 hDigiHit_adctdcMatchesVsModule[i] =
new TH2I(
"DigiHit_adctdcMatchesVsModule"+strN,
"PSC #TDC matches / fADC hit vs. module"+strT+
";module (counter);#TDC matches / fADC hit",
Nmods,0.5,0.5+
Nmods,5,-0.5,4.5);
224 vector<const DPSCDigiHit*> digihits;
225 eventLoop->Get(digihits);
226 vector<const DPSCTDCDigiHit*> tdcdigihits;
227 eventLoop->Get(tdcdigihits);
228 vector<const DPSCHit*> hits;
229 eventLoop->Get(hits);
232 eventLoop->GetSingle(ttabUtilities);
236 japp->RootFillLock(
this);
238 if (digihits.size() > 0 || tdcdigihits.size() > 0)
psc_num_events->Fill(1);
241 int NDigiHits[] = {0,0};
242 int NDigiHits_cut[] = {0,0};
245 for (
const auto& hit : digihits) {
246 int arm = (hit->counter_id <=
Nmods) ? 0 : 1;
247 int module = (hit->counter_id <=
Nmods) ? hit->counter_id : (hit->counter_id -
Nmods);
248 double ped = (double)hit->pedestal/hit->nsamples_pedestal;
252 if (ped == 0.0 || hit->pulse_peak == 0)
continue;
262 double pI = hit->pulse_integral - hit->nsamples_integral*ped;
266 double t_ns = 0.0625*hit->pulse_time;
272 NDigiHits_cut[arm]++;
284 for (
const auto& hit : digihits) {
285 double ped = (double)hit->pedestal/hit->nsamples_pedestal;
286 double pI = hit->pulse_integral - hit->nsamples_integral*ped;
288 int arm = (hit->counter_id <=
Nmods) ? 0 : 1;
289 int module = (hit->counter_id <=
Nmods) ? hit->counter_id : (hit->counter_id -
Nmods);
291 for (
const auto& tdchit : tdcdigihits) {
292 if (hit->counter_id == tdchit->counter_id) {
295 double T_adc = 0.0625*hit->pulse_time;
306 for (
const auto& hit : tdcdigihits) {
307 int arm = (hit->counter_id <=
Nmods) ? 0 : 1;
308 int module = (hit->counter_id <=
Nmods) ? hit->counter_id : (hit->counter_id -
Nmods);
318 for (
const auto& hit : hits) {
341 japp->RootFillUnLock(
this);
static TH1I * hDigiHit_NSamplesPedestal[Narms]
double Convert_DigiTimeToNs_F1TDC(const JObject *locTDCDigiHit) const
if(locHist_BCALShowerPhiVsZ!=NULL)
static TH1I * hDigiHit_fadcOccupancy[Narms]
static TH2I * hHit_IntegralVsModule[Narms]
static TH1I * hHit_fadcTime[Narms]
static TH1I * hDigiHit_tdcOccupancy[Narms]
static TH1I * hDigiHit_fadcTime_cut[Narms]
static TH1I * hDigiHit_NfadcHits_cut
static TH1I * hDigiHit_tdcadcTimeDiff[Narms]
static TH2I * hDigiHit_fadcTimeVsModule_cut[Narms]
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
static TH2I * hDigiHit_RawIntegralVsModule[Narms]
static TH2I * hDigiHit_IntegralVsPeak[Narms]
static TH1I * hDigiHit_QualityFactor[Narms]
static TH2I * hDigiHit_IntegralVsModule[Narms]
static TH1I * hDigiHit_PulseTime[Narms]
static TH2I * hDigiHit_NfadcHitsVsArm
static TH1I * hDigiHit_NtdcHits
static TH2I * hDigiHit_fadcTimeVsModule[Narms]
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
static TH1I * hDigiHit_tdcTime[Narms]
static TH1I * hHit_Time[Narms]
static TH2I * hDigiHit_tdcTimeVsfadcTime[Narms]
static TH2I * hDigiHit_PeakVsModule[Narms]
static TH2I * hHit_TimeVsModule[Narms]
static TH2I * hDigiHit_fadcTimeVsQF_cut[Narms]
static TH1I * hDigiHit_Arm_cut
static TH2I * hDigiHit_RawPeakVsModule[Narms]
JEventProcessor_PSC_online()
static TH1I * hDigiHit_tdcRawTime[Narms]
static TH2F * hHit_HasTDCvsHasADC[Narms]
static TH1I * hDigiHit_fadcOccupancy_cut[Narms]
static TH1I * hDigiHit_Pedestal[Narms]
static TH1I * hDigiHit_RawIntegral[Narms]
jerror_t fini(void)
Called after last event of last event source has been processed.
static int matches(char *d, char *c, t_iostream *fp)
static TH1I * psc_num_events
static TH2I * hHit_tdcadcTimeDiffVsModule[Narms]
static TH1I * hHit_Integral[Narms]
static TProfile * hDigiHit_PedestalVsModule[Narms]
static TH1I * hDigiHit_fadcTime[Narms]
static TH1I * hDigiHit_RawPeak[Narms]
static TH2I * hDigiHit_fadcTimeVsIntegral[Narms]
static TH1I * hHit_Occupancy[Narms]
static TH2I * hDigiHit_adctdcMatchesVsModule[Narms]
static TH1I * hDigiHit_NfadcHits
static TH1I * hHit_tdcTime[Narms]
static TH1I * hDigiHit_NSamplesIntegral[Narms]
static TH2I * hDigiHit_NfadcHitsVsArm_cut
static TH2I * hHit_NHitsVsArm
~JEventProcessor_PSC_online()
static TH2I * hHit_fadcTimeVsModule[Narms]
static TH2I * hDigiHit_tdcadcTimeDiffVsModule[Narms]
static TH2I * hDigiHit_tdcadcTimeDiffVsIntegral[Narms]
static TH1I * hDigiHit_Arm
static TH2I * hDigiHit_tdcTimeVsModule[Narms]
jerror_t init(void)
Called once at program start.