42 #define DigiHitTypes(X) \
47 X(DFDCCathodeDigiHit) \
62 X(DTPOLSectorDigiHit)\
66 #include <JANA/JApplication.h>
67 #include <JANA/JFactory.h>
97 japp->RootWriteLock();
100 TDirectory *
main = gDirectory;
101 gDirectory->mkdir(
"occupancy")->cd();
108 bcal_adc_occ =
new TH2I(
"bcal_adc_occ",
"ADC occupancy (DBCALDigiHit);Module", 48, 0.5, 48.5, 33, 0.5, 33.5);
110 for(
int ibin = 1; ibin <= 16; ibin++)
113 int layer = 1 + (idy%4);
114 int sector = 1 + idy/4;
117 ss <<
"D S" << sector <<
" L" <<
layer;
118 bcal_adc_occ->GetYaxis()->SetBinLabel(ibin, ss.str().c_str());
121 ss <<
"U S" << sector <<
" L" <<
layer;
122 bcal_adc_occ->GetYaxis()->SetBinLabel(ibin + 17, ss.str().c_str());
126 bcal_tdc_occ =
new TH2I(
"bcal_tdc_occ",
"TDC occupancy (DBCALDigiTDCHit);Module", 48, 0.5, 48.5, 25, 0.5, 25.5);
128 for(
int ibin = 1; ibin <= 12; ibin++)
132 int layer = 1 + (idy%3);
133 int sector = 1 + idy/3;
136 ss <<
"D S" << sector <<
" L" <<
layer;
137 bcal_tdc_occ->GetYaxis()->SetBinLabel(ibin, ss.str().c_str());
140 ss <<
"U S" << sector <<
" L" <<
layer;
141 bcal_tdc_occ->GetYaxis()->SetBinLabel(ibin + 13, ss.str().c_str());
143 bcal_num_events =
new TH1I(
"bcal_num_events",
"BCAL number of events", 1, 0.0, 1.0);
146 ccal_occ =
new TH2F(
"ccal_occ",
"CCAL Occupancy; column; row", 14, -1.5, 12.5, 14, -1.5, 12.5);
147 ccal_num_events =
new TH1I(
"ccal_num_events",
"CCAL number of events", 1, 0.0, 1.0);
150 int Nstraws[28] = {42, 42, 54, 54, 66, 66, 80, 80, 93, 93, 106, 106, 123, 123,
151 135, 135, 146, 146, 158, 158, 170, 170, 182, 182, 197, 197, 209, 209};
152 double radius[28] = {10.72134, 12.08024, 13.7795, 15.14602, 18.71726, 20.2438, 22.01672,
153 23.50008, 25.15616, 26.61158, 28.33624, 29.77388, 31.3817, 32.75838,
154 34.43478, 35.81146, 38.28542, 39.7002, 41.31564, 42.73042, 44.34078,
155 45.75302, 47.36084, 48.77054, 50.37582, 51.76012, 53.36286, 54.74716};
156 double phi[28] = {0, 0.074707844, 0.038166294, 0.096247609, 0.05966371, 0.012001551, 0.040721951,
157 0.001334527, 0.014963808, 0.048683644, 0.002092645, 0.031681749, 0.040719354,
158 0.015197341, 0.006786058, 0.030005892, 0.019704045, -0.001782064, -0.001306618,
159 0.018592421, 0.003686784, 0.022132975, 0.019600866, 0.002343723, 0.021301449,
160 0.005348855, 0.005997358, 0.021018761};
164 for(
int iring=0; iring<28; iring++){
165 double r_start = radius[iring] - 0.8;
166 double r_end = radius[iring] + 0.8;
167 double phi_start = phi[iring];
168 double phi_end = phi_start + TMath::TwoPi();
171 sprintf(hname,
"cdc_occ_ring_%02d", iring+1);
172 cdc_occ_ring[iring] =
new TH2F(hname,
"", Nstraws[iring], phi_start, phi_end, 1, r_start, r_end);
174 cdc_num_events =
new TH1I(
"cdc_num_events",
"CDC number of events", 1, 0.0, 1.0);
175 new TH2D(
"cdc_axes",
"CDC Occupancy", 100, -57.0*4.0/3.0, 57.0*4.0/3.0, 100, -57.0, 57.0);
178 fcal_occ =
new TH2F(
"fcal_occ",
"FCAL Occupancy; column; row", 61, -1.5, 59.5, 61, -1.5, 59.5);
179 fcal_num_events =
new TH1I(
"fcal_num_events",
"FCAL number of events", 1, 0.0, 1.0);
182 fdc_cathode_occ =
new TH2F(
"fdc_cathode_occ",
"FDC Cathode Occupancy; Channel;", 48, 0.5, 48.5, 216, 0.5, 216.5);
183 fdc_wire_occ =
new TH2F(
"fdc_wire_occ",
"FDC Wire Occupancy; Channel;", 24, 0.5, 24.5, 96, 0.5, 96.5);
184 fdc_num_events =
new TH1I(
"fdc_num_events",
"FDC number of events", 1, 0.0, 1.0);
187 psc_adc_left_occ =
new TH1I(
"psc_adc_left_occ",
"PSC fADC hit occupancy Left", 8, 0.5, 8.5);
188 psc_adc_right_occ =
new TH1I(
"psc_adc_right_occ",
"PSC fADC hit occupancy Right", 8, 0.5, 8.5);
189 psc_tdc_left_occ =
new TH1I(
"psc_tdc_left_occ",
"PSC TDC hit occupancy Left", 8, 0.5, 8.5);
190 psc_tdc_right_occ =
new TH1I(
"psc_tdc_right_occ",
"PSC TDC hit occupancy Right", 8, 0.5, 8.5);
191 ps_left_occ =
new TH1I(
"ps_left_occ",
"PS fADC hit occupancy Left", 145, 0.5, 145.5);
192 ps_right_occ =
new TH1I(
"ps_right_occ",
"PS fADC hit occupancy Right", 145, 0.5, 145.5);
193 ps_num_events =
new TH1I(
"ps_num_events",
"PS number of events", 1, 0.0, 1.0);
196 rf_occ =
new TH1D(
"rf_occ",
"RF TDC Occupancy", 4, 0.5, 4.5);
197 rf_occ->GetXaxis()->SetBinLabel(1,
"FDC");
198 rf_occ->GetXaxis()->SetBinLabel(2,
"PSC");
199 rf_occ->GetXaxis()->SetBinLabel(3,
"TAGH");
200 rf_occ->GetXaxis()->SetBinLabel(4,
"TOF");
201 rf_num_events =
new TH1I(
"rf_num_events",
"RF number of events", 1, 0.0, 1.0);
208 L1GTPRate =
new TH2F(
"L1GTPRate",
"L1 GTP Rate by bit;Trigger Bit;L1 GTP Rate (kHz)", 8, 0.5, 8.5, 1000, 0.0, 100.0);
209 L1livetime =
new TH1F(
"L1livetime",
"L1 instantaneous livetime from TS scalers", 200, 0.0, 100.0);
212 st_adc_occ =
new TH1I(
"st_adc_occ",
"ST fADC250 DigiHit Occupancy; Channel Number; fADC250 Counts", 30, 0.5, 30 + 0.5);
213 st_tdc_occ =
new TH1I(
"st_tdc_occ",
"ST TDC DigiHit Occupancy; Channel Number; TDC Counts", 30, 0.5, 30 + 0.5);
214 st_num_events =
new TH1I(
"st_num_events",
"Start Counter number of events", 1, 0.0, 1.0);
218 tagh_adc_occ =
new TH1I(
"tagh_adc_occ",
"TAGH fADC hit occupancy;counter (slot) ID;raw hits / counter",Nslots,0.5,0.5+Nslots);
219 tagh_tdc_occ =
new TH1I(
"tagh_tdc_occ",
"TAGH TDC hit occupancy;counter (slot) ID;raw hits / counter",Nslots,0.5,0.5+Nslots);
220 tag_num_events =
new TH1I(
"tag_num_events",
"TAGGER number of events", 1, 0.0, 1.0);
224 tagm_adc_occ =
new TH1I(
"tagm_adc_occ",
"TAGM FADC250 column occupancy", NCOLUMNS, 0., NCOLUMNS + 1.);
225 tagm_tdc_occ =
new TH1I(
"tagm_tdc_occ",
"TAGM F1TDC column occupancy", NCOLUMNS, 0., NCOLUMNS + 1.);
229 tpol_occ =
new TH1I(
"tpol_occ",
"TPOL fADC hit occupancy;sector;raw hits / counter",Nsectors,0.5,0.5+Nsectors);
232 tof_num_events =
new TH1I(
"tof_num_events",
"TOF number of events", 1, 0.0, 1.0);
233 tof_tdc_S_occ =
new TH1I(
"tof_tdc_S_occ",
"TOF, TDC Occupancy",86,1,44);
234 tof_tdc_N_occ =
new TH1I(
"tof_tdc_N_occ",
"TOF, TDC Occupancy",86,1,44);
235 tof_tdc_U_occ =
new TH1I(
"tof_tdc_U_occ",
"TOF, TDC Occupancy",86,1,44);
236 tof_tdc_D_occ =
new TH1I(
"tof_tdc_D_occ",
"TOF, TDC Occupancy",86,1,44);
238 tof_adc_S_occ =
new TH1I(
"tof_adc_S_occ",
"TOF, fADC Occupancy",86,1,44);
239 tof_adc_N_occ =
new TH1I(
"tof_adc_N_occ",
"TOF, fADC Occupancy",86,1,44);
240 tof_adc_U_occ =
new TH1I(
"tof_adc_U_occ",
"TOF, fADC Occupancy",86,1,44);
241 tof_adc_D_occ =
new TH1I(
"tof_adc_D_occ",
"TOF, fADC Occupancy",86,1,44);
244 dirc_num_events =
new TH1I(
"dirc_num_events",
"DIRC number of events", 1, 0.0, 1.0);
245 dirc_tdc_pixel_N_occ_led =
new TH2I(
"dirc_tdc_pixel_N_occ_led",
"DIRC, TDC North (Upper) Pixel Occupancy: LED trigger; pixel rows; pixel columns",144,-0.5,143.5,48,-0.5,47.5);
246 dirc_tdc_pixel_S_occ_led =
new TH2I(
"dirc_tdc_pixel_S_occ_led",
"DIRC, TDC South (Lower) Pixel Occupancy: LED trigger; pixel rows; pixel columns",144,-0.5,143.5,48,-0.5,47.5);
247 dirc_tdc_pixel_N_occ =
new TH2I(
"dirc_tdc_pixel_N_occ",
"DIRC, TDC North (Upper) Pixel Occupancy: Non-LED triggers; pixel rows; pixel columns",144,-0.5,143.5,48,-0.5,47.5);
248 dirc_tdc_pixel_S_occ =
new TH2I(
"dirc_tdc_pixel_S_occ",
"DIRC, TDC South (Lower) Pixel Occupancy; Non-LED triggers; pixel rows; pixel columns",144,-0.5,143.5,48,-0.5,47.5);
251 #define FillDigiHitMap(A) digihitbinmap[#A]=(double)(digihitbinmap.size());
254 digihits_trig1 =
new TH2I(
"digihits_trig1",
"Digihits",
digihitbinmap.size(), 0.5, 0.5+(double)
digihitbinmap.size(), 151, 0.0, 151.0);
255 digihits_trig1->SetYTitle(
"Nhits/event");
256 digihits_scale_factors =
new TH1F(
"digihits_scale_factors",
"Digihits scale factors",
digihitbinmap.size()+1, 0.5, 0.5+(double)
digihitbinmap.size()+1.0);
258 digihits_trig1->GetXaxis()->SetBinLabel(p.second, p.first.c_str());
259 digihits_scale_factors->GetXaxis()->SetBinLabel(p.second, p.first.c_str());
261 digihits_trig3 = (TH2I*)digihits_trig1->Clone(
"digihits_trig3");
262 digihits_trig4 = (TH2I*)digihits_trig1->Clone(
"digihits_trig4");
277 for(
auto p :
digihitsclmap) digihits_scale_factors->Fill(digihitbinmap[p.first], p.second);
278 digihits_scale_factors->Fill((
double)digihitbinmap.size()+1.0, 1.0);
295 vector<const DDIRCGeometry*> locDIRCGeometry;
296 eventLoop->Get(locDIRCGeometry);
297 dDIRCGeometry = locDIRCGeometry[0];
310 #define GetDigihits(A) vector<const A*> v##A; loop->Get(v##A);
314 vector<const DL1Trigger*> l1triggers;
315 loop->Get(l1triggers);
316 const DL1Trigger* l1trigger = l1triggers.empty() ? NULL : l1triggers[0];
319 vector<bool>
trig(32, 0);
320 vector<bool> fp_trig(32, 0);
322 for(
int itrig=0; itrig<32; itrig++) trig[itrig] = (l1trigger->
trig_mask >> itrig)&0x01;
323 for(
int itrig=0; itrig<32; itrig++) fp_trig[itrig] = (l1trigger->
fp_trig_mask >> itrig)&0x01;
329 vector<const DBCALHit *> bcal_hits;
330 loop->Get(bcal_hits);
331 double total_bcal_energy = 0.;
332 for(
unsigned int i=0; i<bcal_hits.size(); i++) {
333 total_bcal_energy += bcal_hits[i]->E;
337 japp->RootFillLock(
this);
343 && (total_bcal_energy < 20.) ) {
347 for(
unsigned int i = 0; i < vDBCALDigiHit.size(); i++){
354 bcal_adc_occ->Fill(ix, iy+17);
356 bcal_adc_occ->Fill(ix, iy);
360 for(
unsigned int i = 0; i < vDBCALTDCDigiHit.size(); i++){
374 ccal_num_events->Fill(0.5);
375 for(
size_t loc_i = 0; loc_i < vDCCALDigiHit.size(); ++loc_i){
376 ccal_occ->Fill(vDCCALDigiHit[loc_i]->
column, vDCCALDigiHit[loc_i]->row);
381 for(uint32_t i=0; i<vDCDCDigiHit.size(); i++) {
384 int ring = digihit->
ring-1;
385 int straw = digihit->
straw;
387 Double_t w =
cdc_occ_ring[ring]->GetBinContent(straw, 1) + 1.0;
392 fcal_num_events->Fill(0.5);
393 for(
size_t loc_i = 0; loc_i < vDFCALDigiHit.size(); ++loc_i){
394 fcal_occ->Fill(vDFCALDigiHit[loc_i]->
column, vDFCALDigiHit[loc_i]->row);
399 for(
unsigned int i = 0; i < vDFDCCathodeDigiHit.size(); i++){
400 uint32_t strip = vDFDCCathodeDigiHit[i]->strip;
401 if(vDFDCCathodeDigiHit[i]->strip_type == 3) strip += 9*12;
403 if (vDFDCCathodeDigiHit[i]->view == 3) ud = 0;
404 fdc_cathode_occ->Fill((vDFDCCathodeDigiHit[i]->package - 1)*12 + vDFDCCathodeDigiHit[i]->chamber*2 + ud, strip);
406 for(
unsigned int i = 0; i < vDFDCWireDigiHit.size(); i++){
407 fdc_wire_occ->Fill((vDFDCWireDigiHit[i]->package - 1)*6 + vDFDCWireDigiHit[i]->chamber, vDFDCWireDigiHit[i]->wire);
413 for(
unsigned int i=0; i < vDPSCDigiHit.size(); i++) {
418 psc_adc_right_occ->Fill(hit->
counter_id - Nmods);
420 for(
unsigned int i=0; i < vDPSCTDCDigiHit.size(); i++) {
425 psc_tdc_right_occ->Fill(hit->
counter_id - Nmods);
427 for(
unsigned int i=0; i < vDPSDigiHit.size(); i++) {
430 ps_left_occ->Fill(hit->
column);
432 ps_right_occ->Fill(hit->
column);
436 rf_num_events->Fill(0.5);
437 for(
size_t loc_i = 0; loc_i < vDRFTDCDigiTime.size(); ++loc_i){
439 rf_occ->Fill(dRFBinValueMap[locSystem]);
447 for(
unsigned int ii = 0; ii < 8; ++ii) L1GTPRate->Fill(ii + 1, Float_t(l1trigger->
gtp_rate[ii])/1000.0);
448 L1livetime->Fill((
double)l1trigger->
live_inst/10.0);
454 for(uint32_t i = 0; i < vDSCDigiHit.size(); i++) st_adc_occ->Fill(vDSCDigiHit[i]->sector);
455 for(uint32_t i = 0; i < vDSCTDCDigiHit.size(); i++) st_tdc_occ->Fill(vDSCTDCDigiHit[i]->sector);
458 tag_num_events->Fill(0.5);
459 for(
unsigned int i=0; i < vDTAGHDigiHit.size(); i++) tagh_adc_occ->Fill(vDTAGHDigiHit[i]->counter_id);
460 for(
unsigned int i=0; i < vDTAGHTDCDigiHit.size(); i++) tagh_tdc_occ->Fill(vDTAGHTDCDigiHit[i]->counter_id);
463 for(uint32_t i=0; i< vDTAGMDigiHit.size(); i++) {
465 if (hit->
row == 0) tagm_adc_occ->Fill(hit->
column);
467 for(uint32_t i=0; i< vDTAGMTDCDigiHit.size(); i++) {
469 if (hit->
row == 0) tagm_tdc_occ->Fill(hit->
column);
473 for(
unsigned int i=0; i < vDTPOLSectorDigiHit.size(); i++) tpol_occ->Fill(vDTPOLSectorDigiHit[i]->sector);
478 for(uint32_t i=0; i<vDTOFDigiHit.size(); i++){
481 int plane = hit->
plane;
485 if( plane==0 && end==0 ) tof_adc_U_occ->Fill(bar);
486 if( plane==0 && end==1 ) tof_adc_D_occ->Fill(bar);
487 if( plane==1 && end==0 ) tof_adc_N_occ->Fill(bar);
488 if( plane==1 && end==1 ) tof_adc_S_occ->Fill(bar);
492 for(uint32_t i=0; i<vDTOFTDCDigiHit.size(); i++){
495 int plane = hit->
plane;
499 if( plane==0 && end==0 ) tof_tdc_U_occ->Fill(bar);
500 if( plane==0 && end==1 ) tof_tdc_D_occ->Fill(bar);
501 if( plane==1 && end==0 ) tof_tdc_N_occ->Fill(bar);
502 if( plane==1 && end==1 ) tof_tdc_S_occ->Fill(bar);
507 for(uint32_t i=0; i<vDDIRCTDCDigiHit.size(); i++){
513 if(fp_trig[14]) dirc_tdc_pixel_N_occ_led->Fill(dDIRCGeometry->GetPixelRow(ch), dDIRCGeometry->GetPixelColumn(ch));
514 else dirc_tdc_pixel_N_occ->Fill(dDIRCGeometry->GetPixelRow(ch), dDIRCGeometry->GetPixelColumn(ch));
517 if(fp_trig[14]) dirc_tdc_pixel_S_occ_led->Fill(dDIRCGeometry->GetPixelRow(ch), dDIRCGeometry->GetPixelColumn(ch));
518 else dirc_tdc_pixel_S_occ->Fill(dDIRCGeometry->GetPixelRow(ch), dDIRCGeometry->GetPixelColumn(ch));
523 #define FillDigiHitHist(A) \
524 scale = digihitsclmap[#A]; \
525 if(scale==0.0) scale = digihitsclmap[#A] = 1.0; \
526 digihits_trigX->Fill(digihitbinmap[#A], v##A.size()/scale);
530 TH2I *digihits_trigX = digihits_trig1;
534 TH2I *digihits_trigX = digihits_trig3;
538 TH2I *digihits_trigX = digihits_trig4;
542 japp->RootFillUnLock(
this);
static TH1I * ps_num_events
vector< uint32_t > gtp_rate
int column
column number 1-102
sprintf(text,"Post KinFit Cut")
#define FillDigiHitHist(A)
map< string, double > digihitsclmap
#define FillDigiHitMap(A)
static TH2I * bcal_tdc_occ
static TH1I * tof_num_events
static TH1I * dirc_num_events
JEventProcessor_occupancy_online()
static TH1I * bcal_num_events
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
static TH1I * st_num_events
static TH1I * cdc_num_events
~JEventProcessor_occupancy_online()
int end
left/right 0/1 or North/South 0/1
static TH2D * cdc_occ_ring[29]
int plane
plane (0: vertical, 1: horizontal)
static const unsigned int kCounterCount
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
map< string, double > digihitbinmap
int main(int argc, char *argv[])
static const int NSECTORS