59 const Int_t IMAX = 100000;
60 const Int_t IPPMAX = 150000;
61 const Int_t
PMAX = 256;
62 const Int_t AMAX = 4096;
63 const Int_t RTMAX = 1800;
64 const Int_t RTMIN = 160;
65 const Int_t RTBINS = 164;
67 const Int_t RTVSNMAX = 1024;
69 const Int_t EMAX = 21000;
73 const Int_t
TMAX = 1250;
75 const Int_t
TMIN = -250;
76 const Int_t
TBINS = 250;
79 const Int_t NSTRAWS = 3522;
80 const Float_t HALF = 0.5;
81 const Float_t NSTRAWSPH = 3522.5;
85 Char_t deadstraws[32] =
"(#709 and #2384 disconnected)";
86 Char_t deadrow11[30] =
"(#39 disconnected)";
87 Char_t deadrow23[30] =
"(#38 disconnected)";
91 TDirectory *
main = gDirectory;
93 gDirectory->mkdir(
"CDC_expert_2")->cd();
94 TDirectory *xd = gDirectory;
100 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};
103 cdc_e =
new TH1D(
"cdc_e",
"CDC charge (fC);charge (fC)",200,0,EMAX);
104 cdc_e_vs_n =
new TH2D(
"cdc_e_vs_n",Form(
"CDC charge (fC) vs straw number;straw %s;charge (fC)",deadstraws),NSTRAWS,HALF,NSTRAWSPH,100,0,EMAX);
106 cdc_e_vs_t =
new TH2D(
"cdc_e_vs_t",
"CDC charge (fC) vs time (ns);time (ns);charge (fC)",TBINS,TMIN,TMAX,100,0,EMAX);
109 cdc_t =
new TH1D(
"cdc_t",
"CDC time (ns);time (ns)",TBINS*2,TMIN,TMAX);
110 cdc_t_vs_n =
new TH2D(
"cdc_t_vs_n",Form(
"CDC time (ns) vs straw number;straw %s;time (ns)",deadstraws),NSTRAWS,HALF,NSTRAWSPH,TBINS,TMIN,TMAX);
113 cdc_rt =
new TH1I(
"cdc_rt",
"CDC raw time (0.8ns);raw time (0.8ns)",RTMAX-RTMIN,RTMIN,RTMAX);
114 cdc_rt_qf0 =
new TH1I(
"cdc_rt_qf0",
"CDC raw time with qf=0 (0.8ns);raw time (0.8ns)",RTMAX-RTMIN,RTMIN,RTMAX);
115 cdc_rt_vs_n =
new TH2I(
"cdc_rt_vs_n",Form(
"CDC raw time (0.8ns) vs straw number;straw %s;raw time (0.8ns)",deadstraws),NSTRAWS,HALF,NSTRAWSPH,RTBINS,RTMIN,RTMAX);
118 cdc_amp =
new TH1I(
"cdc_amp",
"CDC amplitude;amplitude",256,0,AMAX);
119 cdc_amp_vs_n =
new TH2I(
"cdc_amp_vs_n",Form(
"CDC amplitude vs straw number;straw %s;amplitude",deadstraws),NSTRAWS,HALF,NSTRAWSPH,256,0,AMAX);
126 cdc_int_vs_raw_t =
new TH2I(
"cdc_int_vs_raw_t",Form(
"CDC integral (ADC units), pedestal subtracted, vs raw time (0.8ns);raw time (0.8ns);integral, pedestal subtracted (ADC units)"),(Int_t)RTBINS,RTMIN,RTMAX,100,0,IMAX);
128 cdc_what_is_n =
new TH2I(
"cdc_what_is_n",
"CDC slot*100 + channel vs straw number, bin content=(rocid-24);straw;slot*100 + channel",NSTRAWS,HALF,NSTRAWSPH,1600,200+HALF,1800+HALF);
131 gDirectory->mkdir(
"pedestals_by_roc",
"CDC Pedestals for each ROC")->cd();
133 cdc_initped_roc25 =
new TH2I(
"cdc_initped_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);
134 cdc_initped_roc26 =
new TH2I(
"cdc_initped_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);
135 cdc_initped_roc27 =
new TH2I(
"cdc_initped_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);
136 cdc_initped_roc28 =
new TH2I(
"cdc_initped_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);
138 cdc_ped_roc25 =
new TH2I(
"cdc_ped_roc25",
"CDC pedestal (ADC units) vs slot*100+channel, ROC 25;slot*100 + channel;pedestal",1600,200+HALF,1800+HALF,(Int_t)PMAX/4,0,PMAX);
139 cdc_ped_roc26 =
new TH2I(
"cdc_ped_roc26",
"CDC pedestal (ADC units) vs slot*100+channel, ROC 26;slot*100 + channel;pedestal",1600,200+HALF,1800+HALF,(Int_t)PMAX/4,0,PMAX);
140 cdc_ped_roc27 =
new TH2I(
"cdc_ped_roc27",
"CDC pedestal (ADC units) vs slot*100+channel, ROC 27;slot*100 + channel;pedestal",1600,200+HALF,1800+HALF,(Int_t)PMAX/4,0,PMAX);
141 cdc_ped_roc28 =
new TH2I(
"cdc_ped_roc28",
"CDC pedestal (ADC units) vs slot*100+channel, ROC 28;slot*100 + channel;pedestal",1600,200+HALF,1800+HALF,(Int_t)PMAX/4,0,PMAX);
145 gDirectory->mkdir(
"amp_by_roc",
"CDC amplitudes for each ROC")->cd();
147 cdc_amp_roc25 =
new TH2I(
"cdc_amp_roc25",
"CDC amplitude (ADC units) vs slot*100+channel, ROC 25;slot*100 + channel;amplitude",1600,200+HALF,1800+HALF,256,0,AMAX);
148 cdc_amp_roc26 =
new TH2I(
"cdc_amp_roc26",
"CDC amplitude (ADC units) vs slot*100+channel, ROC 26;slot*100 + channel;amplitude",1600,200+HALF,1800+HALF,256,0,AMAX);
149 cdc_amp_roc27 =
new TH2I(
"cdc_amp_roc27",
"CDC amplitude (ADC units) vs slot*100+channel, ROC 27;slot*100 + channel;amplitude",1600,200+HALF,1800+HALF,256,0,AMAX);
150 cdc_amp_roc28 =
new TH2I(
"cdc_amp_roc28",
"CDC amplitude (ADC units) vs slot*100+channel, ROC 28;slot*100 + channel;amplitude",1600,200+HALF,1800+HALF,256,0,AMAX);
155 gDirectory->mkdir(
"bad_t",
"CDC Bad time flagged")->cd();
157 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);
158 cdc_ped_badt =
new TH1I(
"cdc_ped_badt",
"CDC pedestal, events with bad time flagged;straw;pedestal",256,0,PMAX);
159 cdc_raw_t_badt =
new TH1I(
"cdc_raw_t_badt",Form(
"CDC raw time (0.8ns), events with bad time flagged;straw;raw time (0.8ns)"),RTBINS,RTMIN,RTMAX);
160 cdc_amp_badt =
new TH1I(
"cdc_amp_badt",
"CDC amplitude (ADC units), events with bad time flagged;ADC units",256,0,AMAX);
164 cdc_qf =
new TH1I(
"cdc_qf",
"CDC time quality factor;time quality factor (0:good, 1:zero, 2:hi ped, 3: below TH, 4:late TCL, 5: neg ups, 9:hi ups)",10,0,10);
165 cdc_qf_vs_n =
new TH2I(
"cdc_qf_vs_n",
"CDC time quality factor vs straw number;straw;time quality factor",NSTRAWS,HALF,NSTRAWSPH,10,0,10);
166 cdc_qf_vs_a =
new TH2I(
"cdc_qf_vs_a",
"CDC time quality factor vs amplitude;amplitude;time quality factor",128,0,AMAX,10,0,10);
167 cdc_qf_vs_rt =
new TH2I(
"cdc_qf_vs_raw_t",
"CDC time quality factor vs raw time;time;time quality factor",RTBINS,RTMIN,RTMAX,10,0,10);
172 gDirectory->mkdir(
"overflows",
"CDC overflow flagged")->cd();
174 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);
175 cdc_ped_overflow =
new TH1I(
"cdc_ped_overflow",
"CDC pedestal, events with ADC overflow;pedestal",256,0,PMAX);
176 cdc_raw_t_overflow =
new TH1I(
"cdc_raw_t_overflow",Form(
"CDC raw time (0.8ns), events with ADC overflow;raw time (0.8ns)"),RTBINS,RTMIN,RTMAX);
183 gDirectory->mkdir(
"rings_e_vs_t",
"CDC rings: charge vs time")->cd();
184 for (i=1; i<29; i++) {
185 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)",TBINS,TMIN,TMAX,100,0,EMAX);
190 gDirectory->mkdir(
"rings_int_vs_raw_t",
"CDC rings: integral vs raw time (pedestal subtracted)")->cd();
191 for (i=1; i<29; i++) {
192 cdc_int_vs_raw_t_ring[i] =
new TH2I(Form(
"cdc_int_vs_raw_t_ring[%i]",i),Form(
"CDC integral (ADC units), pedestal subtracted, vs raw time (0.8ns);raw time (0.8ns);integral, pedestal subtracted (ADC units)"),RTBINS,RTMIN,RTMAX,100,0,IMAX);
204 gDirectory->mkdir(
"rings_t",
"CDC rings: time vs straw")->cd();
205 for (i=1; i<29; i++) {
206 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,TBINS,TMIN,TMAX);
208 cdc_t_ring[11]->GetXaxis()->SetTitle(Form(
"pedestal %s",deadrow11));
209 cdc_t_ring[23]->GetXaxis()->SetTitle(Form(
"pedestal %s",deadrow23));
213 gDirectory->mkdir(
"rings_pedestal",
"CDC rings: pedestal vs straw")->cd();
214 for (i=1; i<29; i++) {
215 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);
217 cdc_ped_ring[11]->GetXaxis()->SetTitle(Form(
"Straw number, %s",deadrow11));
218 cdc_ped_ring[23]->GetXaxis()->SetTitle(Form(
"Straw number, %s",deadrow23));
222 gDirectory->mkdir(
"rings_initpedestal",
"CDC rings: initial pedestal from raw window data vs straw")->cd();
223 for (i=1; i<29; i++) {
224 cdc_initped_ring[i] =
new TH2I(Form(
"cdc_initped_ring[%i]",i),Form(
"CDC initial pedestal (ADC units) from raw window data, ring %i;straw;pedestal",i),straws[i],HALF,straws[i]+HALF,(Int_t)PMAX/2,0,PMAX);
226 cdc_initped_ring[11]->GetXaxis()->SetTitle(Form(
"Straw number, %s",deadrow11));
227 cdc_initped_ring[23]->GetXaxis()->SetTitle(Form(
"Straw number, %s",deadrow23));
232 gDirectory->mkdir(
"rings_raw_t",
"CDC rings: raw time vs straw")->cd();
233 for (i=1; i<29; i++) {
234 cdc_raw_t_ring[i] =
new TH2I(Form(
"cdc_raw_t_ring[%i]",i),Form(
"CDC raw time (0.8ns), ring %i;straw;raw time (0.8ns)",i),straws[i],HALF,straws[i]+HALF,256,0,RTVSNMAX);
236 cdc_raw_t_ring[11]->GetXaxis()->SetTitle(Form(
"Straw number, %s",deadrow11));
237 cdc_raw_t_ring[23]->GetXaxis()->SetTitle(Form(
"Straw number, %s",deadrow23));
241 gDirectory->mkdir(
"rings_amp",
"CDC rings: amplitude")->cd();
242 for (i=1; i<29; i++) {
243 cdc_amp_ring[i] =
new TH2I(Form(
"cdc_amp_ring[%i]",i),Form(
"CDC amplitude (ADC units), ring %i",i),straws[i],HALF,straws[i]+HALF,256,0,AMAX);
245 cdc_amp_ring[11]->GetXaxis()->SetTitle(Form(
"Straw number, %s",deadrow11));
246 cdc_amp_ring[23]->GetXaxis()->SetTitle(Form(
"Straw number, %s",deadrow23));
257 gDirectory->mkdir(
"rings_integral_incl_ped",
"CDC rings: integral vs straw (including pedestal)")->cd();
258 for (i=1; i<29; i++) {
259 cdc_intpp_ring[i] =
new TH2I(Form(
"cdc_intpp_ring[%i]",i),Form(
"CDC integral (ADC units), including pedestal, ring %i",i),straws[i],HALF,straws[i]+HALF,100,0,IPPMAX);
261 cdc_intpp_ring[11]->GetXaxis()->SetTitle(Form(
"Straw number, %s",deadrow11));
262 cdc_intpp_ring[23]->GetXaxis()->SetTitle(Form(
"Straw number, %s",deadrow23));
315 uint16_t ISCALE = 16;
322 const uint16_t NPEDSAMPLES=16;
325 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};
328 eventLoop->GetSingle(locTrigger);
340 vector<const DCDCHit*> hits;
341 eventLoop->Get(hits);
344 vector<const DCDCDigiHit*> digihits;
345 eventLoop->Get(digihits);
348 japp->RootFillLock(
this);
352 for (uint32_t i=0; i<hits.size(); i++) {
363 n = straw_offset[ring] + straw;
388 for (uint32_t i=0; i<digihits.size(); i++) {
390 digihit = digihits[i];
392 ring = digihit->
ring;
393 straw = digihit->
straw;
395 n = straw_offset[ring] + straw;
402 digihit->GetSingle(cp);
408 ISCALE = 1<<cf->
IBIT;
409 ASCALE = 1<<cf->
ABIT;
410 PSCALE = 1<<cf->
PBIT;
430 int lastsample = NW-20-1;
431 int timesample = int(0.1*rt);
432 if (timesample+IE < lastsample) lastsample = timesample+IE;
434 int pulselength = 1 + lastsample - timesample;
436 integ = integral - p*pulselength;
446 originalq = rt - 10*int(0.1*rt);
512 if (wrd->
samples.size()>=NPEDSAMPLES) {
514 for (uint16_t j=0; j<NPEDSAMPLES; j++) initped += (uint32_t)wrd->
samples[j];
516 initped = (uint32_t)initped/16.0;
534 japp->RootFillUnLock(
this);
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
uint32_t first_max_amp
from second word
TH2D * cdc_e_vs_t_ring[29]
TH2I * cdc_raw_t_ring[29]
jerror_t init(void)
Called once at program start.
~JEventProcessor_CDC_expert_2()
TH2I * cdc_int_vs_raw_t_ring[29]
JEventProcessor_CDC_expert_2()
uint32_t pedestal
from second word
uint32_t Get_L1FrontPanelTriggerBits(void) const
uint32_t overflow_count
from first word
uint32_t le_time
from first word
bool Get_IsPhysicsEvent(void) const
TH1I * cdc_raw_t_overflow
jerror_t fini(void)
Called after last event of last event source has been processed.
vector< uint16_t > samples
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
uint32_t time_quality_bit
from first word
TH2I * cdc_initped_ring[29]
TH2I * cdc_intpp_ring[29]
uint32_t integral
from second word
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
int main(int argc, char *argv[])