15 #include <JANA/JApplication.h>
30 #include <TDirectory.h>
115 initialized_histograms =
false;
143 japp->RootWriteLock();
146 if(initialized_histograms){
158 Int_t RTVSNMAX = 8192;
160 Char_t rtunits[8] =
"0.125ns";
162 if (runnumber > 3675) {
186 const Int_t EMAX = 21000;
190 const Int_t
TMAX = 2000;
194 const Int_t NSTRAWS = 3522;
195 const Float_t HALF = 0.5;
196 const Float_t NSTRAWSPH = 3522.5;
200 TDirectory *
main = gDirectory;
201 gDirectory->mkdir(
"CDC_expert")->cd();
208 const Int_t straws[29] = {0,42,42,54,54,66,66,80,80,93,93,106,106,123,123,135,135,146,146,158,158,170,170,182,182,197,197,209,209};
211 cdc_e =
new TH1D(
"cdc_e",
"CDC charge (fC);charge (fC)",200,0,EMAX);
212 cdc_e_vs_n =
new TH2D(
"cdc_e_vs_n",
"CDC charge (fC) vs straw number;straw;charge (fC)",NSTRAWS,HALF,NSTRAWSPH,100,0,EMAX);
214 cdc_e_vs_t =
new TH2D(
"cdc_e_vs_t",
"CDC charge (fC) vs time (ns);time (ns);charge (fC)",150,-250,TMAX,100,0,EMAX);
217 cdc_t =
new TH1D(
"cdc_t",
"CDC time (ns);time (ns)",300,-250,TMAX);
218 cdc_t_vs_n =
new TH2D(
"cdc_t_vs_n",
"CDC time (ns) vs straw number;straw;time (ns)",NSTRAWS,HALF,NSTRAWSPH,150,-250,TMAX);
223 cdc_raw_int_vs_t =
new TH2I(
"cdc_raw_int_vs_t",Form(
"CDC integral (ADC units), pedestal subtracted, vs raw time (units of %s);time (%s);integral, pedestal subtracted (ADC units)",rtunits,rtunits),(Int_t)256,0,RTVSNMAX,100,0,IMAX);
227 cdc_windata_ped_roc25 =
new TH2I(
"cdc_windata_ped_roc25",
"CDC pedestal (ADC units) from raw window data vs slot*100+channel, ROC 25;slot*100 + channel;pedestal",1600,200+HALF,1800+HALF,(Int_t)PMAX/4,0,PMAX);
228 cdc_windata_ped_roc26 =
new TH2I(
"cdc_windata_ped_roc26",
"CDC pedestal (ADC units) from raw window data vs slot*100+channel, ROC 26;slot*100 + channel;pedestal",1600,200+HALF,1800+HALF,(Int_t)PMAX/4,0,PMAX);
229 cdc_windata_ped_roc27 =
new TH2I(
"cdc_windata_ped_roc27",
"CDC pedestal (ADC units) from raw window data vs slot*100+channel, ROC 27;slot*100 + channel;pedestal",1600,200+HALF,1800+HALF,(Int_t)PMAX/4,0,PMAX);
230 cdc_windata_ped_roc28 =
new TH2I(
"cdc_windata_ped_roc28",
"CDC pedestal (ADC units) from raw window data vs slot*100+channel, ROC 28;slot*100 + channel;pedestal",1600,200+HALF,1800+HALF,(Int_t)PMAX/4,0,PMAX);
234 if (runnumber > 3675) {
236 gDirectory->mkdir(
"bad_t",
"CDC Bad time flagged")->cd();
240 cdc_o_badt =
new TH2I(
"cdc_o_badt",
"CDC occupancy by straw,ring, events with bad time flagged;straw;ring",209,0.5,209.5,28,0.5,28.5);
241 cdc_ped_badt =
new TH1I(
"cdc_ped_badt",
"CDC pedestal, events with bad time flagged;straw;pedestal",256,0,PMAX);
242 cdc_raw_t_badt =
new TH1I(
"cdc_raw_t_badt",Form(
"CDC raw time (units of %s), events with bad time flagged;straw;raw time (%s)",rtunits,rtunits),256,0,RTMAX);
243 cdc_raw_amp_badt =
new TH1I(
"cdc_raw_amp_badt",
"CDC amplitude (ADC units), events with bad time flagged;ADC units",256,0,AMAX);
244 cdc_raw_int_badt =
new TH1I(
"cdc_raw_intpp_badt",
"CDC integral (ADC units), pedestal subtracted, events with bad time flagged;ADC units",100,0,IMAX);
245 cdc_raw_intpp_badt =
new TH1I(
"cdc_raw_intpp_badt",
"CDC integral (ADC units), including pedestal, events with bad time flagged;ADC units",100,0,IMAX);
247 gDirectory->cd(
"../");
248 gDirectory->mkdir(
"overflows",
"CDC overflow flagged")->cd();
250 cdc_o_overflow =
new TH2I(
"cdc_o_overflow",
"CDC overflow occupancy by straw,ring;straw;ring",209,0.5,209.5,28,0.5,28.5);
251 cdc_ped_overflow =
new TH1I(
"cdc_ped_overflow",
"CDC pedestal, events with ADC overflow;pedestal",256,0,PMAX);
252 cdc_raw_t_overflow =
new TH1I(
"cdc_raw_t_overflow",Form(
"CDC raw time (units of %s), events with ADC overflow;raw time (%s)",rtunits,rtunits),256,0,RTMAX);
253 cdc_raw_amp_overflow =
new TH1I(
"cdc_raw_amp_overflow",
"CDC amplitude (ADC units), events with ADC overflow;ADC units",256,0,AMAX);
254 cdc_raw_int_overflow =
new TH1I(
"cdc_raw_intpp_overflow",
"CDC integral (ADC units), pedestal subtracted, events with ADC overflow;ADC units",100,0,IMAX);
255 cdc_raw_intpp_overflow =
new TH1I(
"cdc_raw_intpp_overflow",
"CDC integral (ADC units), including pedestal, events with ADC overflow;ADC units",100,0,IMAX);
257 gDirectory->cd(
"../");
264 gDirectory->mkdir(
"rings_e_vs_t",
"CDC rings: charge vs time")->cd();
266 for (i=1; i<29; i++) {
267 cdc_e_vs_t_ring[i] =
new TH2D(Form(
"cdc_e_vs_t_ring[%i]",i),
"CDC charge (fC) vs time (ns);time (ns);charge (fC)",150,0,TMAX,100,0,EMAX);
270 gDirectory->cd(
"../");
273 gDirectory->mkdir(
"rings_int_vs_raw_t",
"CDC rings: integral vs raw time (pedestal subtracted)")->cd();
275 for (i=1; i<29; i++) {
276 cdc_raw_int_vs_t_ring[i] =
new TH2I(Form(
"cdc_raw_int_vs_t_ring[%i]",i),Form(
"CDC integral (ADC units), pedestal subtracted, vs raw time (%s);raw time (%s);integral, pedestal subtracted (ADC units)",rtunits,rtunits),256,0,RTVSNMAX,100,0,IMAX);
280 gDirectory->cd(
"../");
284 gDirectory->mkdir(
"rings_e",
"CDC rings: charge vs straw")->cd();
286 for (i=1; i<29; i++) {
287 cdc_e_ring[i] =
new TH2D(Form(
"cdc_e_ring[%i]",i),Form(
"CDC charge (fC), ring %i;straw;charge (fC)",i),straws[i],HALF,straws[i]+HALF,100,0,EMAX);
290 gDirectory->cd(
"../");
291 gDirectory->mkdir(
"rings__t",
"CDC rings: time vs straw")->cd();
293 for (i=1; i<29; i++) {
294 cdc_t_ring[i] =
new TH2D(Form(
"cdc_t_ring[%i]",i),Form(
"CDC time (ns), ring %i;straw;time (ns)",i),straws[i],HALF,straws[i]+HALF,150,0,TMAX);
298 gDirectory->cd(
"../");
299 gDirectory->mkdir(
"rings_pedestal",
"CDC rings: pedestal vs straw")->cd();
301 for (i=1; i<29; i++) {
302 cdc_ped_ring[i] =
new TH2I(Form(
"cdc_ped_ring[%i]",i),Form(
"CDC pedestal (ADC units), ring %i;straw;pedestal",i),straws[i],HALF,straws[i]+HALF,(Int_t)PMAX/2,0,PMAX);
305 gDirectory->cd(
"../");
306 gDirectory->mkdir(
"rings_windata_pedestal",
"CDC rings: pedestal from raw window data vs straw")->cd();
308 for (i=1; i<29; i++) {
309 cdc_windata_ped_ring[i] =
new TH2I(Form(
"cdc_windata_ped_ring[%i]",i),Form(
"CDC pedestal (ADC units) from raw window data, ring %i;straw;pedestal",i),straws[i],HALF,straws[i]+HALF,(Int_t)PMAX/2,0,PMAX);
316 gDirectory->cd(
"../");
317 gDirectory->mkdir(
"rings_raw_t",
"CDC rings: raw time vs straw")->cd();
319 for (i=1; i<29; i++) {
320 cdc_raw_t_ring[i] =
new TH2I(Form(
"cdc_raw_t_ring[%i]",i),Form(
"CDC raw time (units of %s), ring %i;straw;raw time (%s)",rtunits,i,rtunits),straws[i],HALF,straws[i]+HALF,256,0,RTVSNMAX);
324 gDirectory->cd(
"../");
325 gDirectory->mkdir(
"rings_raw_amp",
"CDC rings: amplitude")->cd();
327 for (i=1; i<29; i++) {
328 cdc_raw_amp_ring[i] =
new TH2I(Form(
"cdc_raw_amp_ring[%i]",i),Form(
"CDC amplitude (ADC units), ring %i",i),straws[i],HALF,straws[i]+HALF,256,0,AMAX);
333 gDirectory->cd(
"../");
334 gDirectory->mkdir(
"rings_raw_integral",
"CDC rings: integral vs straw (pedestal subtracted)")->cd();
336 for (i=1; i<29; i++) {
337 cdc_raw_int_ring[i] =
new TH2I(Form(
"cdc_raw_int_ring[%i]",i),Form(
"CDC integral (ADC units), pedestal subtracted, ring %i",i),straws[i],HALF,straws[i]+HALF,100,0,IMAX);
341 gDirectory->cd(
"../");
342 gDirectory->mkdir(
"rings_raw_integral_incl_ped",
"CDC rings: integral vs straw (including pedestal)")->cd();
344 for (i=1; i<29; i++) {
345 cdc_raw_intpp_ring[i] =
new TH2I(Form(
"cdc_raw_intpp_ring[%i]",i),Form(
"CDC integral (ADC units), including pedestal, ring %i",i),straws[i],HALF,straws[i]+HALF,100,0,IMAX);
353 initialized_histograms =
true;
385 uint32_t nsamples_integral;
386 uint32_t nsamples_pedestal;
393 const uint16_t NPEDSAMPLES=16;
396 int straw_offset[29] = {0,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};
400 eventLoop->GetSingle(locTrigger);
412 vector<const DCDCHit*> hits;
413 eventLoop->Get(hits);
416 vector<const DCDCDigiHit*> digihits;
417 eventLoop->Get(digihits);
420 vector<const Df125WindowRawData*> wrdvector;
421 eventLoop->Get(wrdvector);
425 japp->RootFillLock(
this);
427 for(uint32_t i=0; i<hits.size(); i++) {
438 n = straw_offset[ring] + straw;
459 for(uint32_t i=0; i<digihits.size(); i++) {
470 vector<uint16_t> samples;
484 digihit->GetSingle(pi);
489 pi->GetSingle(windat);
490 }
else if (i < (uint32_t)wrdvector.size()) {
491 windat = wrdvector[i];
497 if ((nsamples_integral > 0) && (nsamples_pedestal > 0)) PED_SUB = kTRUE;
499 digihit->GetSingle(pp);
503 digihit->GetSingle(cp);
517 if (windat->
samples.size()>=NPEDSAMPLES) {
521 for (uint16_t j=0; j<NPEDSAMPLES; j++) winped += (uint32_t)windat->
samples[j];
523 winped = (uint32_t)winped/16.0;
542 ring = digihit->
ring;
543 straw = digihit->
straw;
554 total_ped = p*nsamples_integral/nsamples_pedestal;
555 integ = integral - total_ped;
598 japp->RootFillUnLock(
this);
static TH2I * cdc_ped_ring[29]
uint32_t first_max_amp
from second word
uint32_t nsamples_integral
number of samples used in integral
~JEventProcessor_CDC_expert()
jerror_t fini(void)
Called after last event of last event source has been processed.
static TH2I * cdc_raw_int_vs_t_ring[29]
static TH1I * cdc_raw_intpp_badt
uint32_t nsamples_pedestal
number of samples used in pedestal
static TH2I * cdc_o_overflow
static TH2D * cdc_e_ring[29]
uint32_t pulse_peak
from Pulse Pedestal Data word
sprintf(text,"Post KinFit Cut")
static TH2I * cdc_windata_ped_ring[29]
uint32_t Get_L1FrontPanelTriggerBits(void) const
static TH2I * cdc_raw_int_ring[29]
uint32_t overflow_count
from first word
jerror_t init(void)
Called once at program start.
uint32_t pulse_time
identified pulse time as returned by FPGA algorithm
bool Get_IsPhysicsEvent(void) const
static TH2D * cdc_e_vs_t_ring[29]
static TH1I * cdc_raw_t_overflow
static TH1I * cdc_raw_intpp_overflow
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
static TH1I * cdc_ped_overflow
uint32_t pulse_integral
identified pulse integral as returned by FPGA algorithm
static TH2I * cdc_windata_ped_roc25
vector< uint16_t > samples
static TH2I * cdc_raw_t_ring[29]
static TH1I * cdc_raw_amp_overflow
static TH1I * cdc_raw_t_badt
static TH1I * cdc_raw_int_overflow
static TH1I * cdc_raw_amp_badt
uint32_t time_quality_bit
from first word
static TH2I * cdc_windata_ped_roc27
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
static TH1I * cdc_raw_int_badt
static TH2I * cdc_windata_ped_roc26
static TH2I * cdc_raw_int_vs_t
static TH2I * cdc_windata_ped_roc28
static TH2I * cdc_raw_amp_ring[29]
JEventProcessor_CDC_expert()
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
uint32_t pedestal
pedestal info used by FPGA (if any)
static TH2I * cdc_raw_intpp_ring[29]
static TH1I * cdc_ped_badt
int main(int argc, char *argv[])
static TH2D * cdc_t_ring[29]