13 #include <JANA/JApplication.h>
26 #include <TDirectory.h>
31 #define TDC_v3BIN_SIZE 0.1118 // ns/LSB
72 strip_angle=15.*
PI/180.;
73 cell_rot_step=60.*
PI/180.;
76 TDirectory *
main = gDirectory;
77 gDirectory->mkdir(
"FDC")->cd();
80 fdc_num_events =
new TH1I(
"fdc_num_events",
"FDC Number of events",1, 0.5, 1.5);
81 fdcow =
new TH2I(
"fdcow",
"FDC wire occupancy by wire,gLayer",96,0.5,96.5,
83 fdcow->SetXTitle(
"wire number");
84 fdcow->SetYTitle(
"plane");
85 fdcos =
new TH2I(
"fdcos",
"FDC strip occupancy by strip,plane",192,0.5,
87 fdcos->SetXTitle(
"Strip number");
88 fdcos->SetYTitle(
"plane");
90 for(
int iPlane = 0; iPlane < 24; iPlane++){
93 sprintf(hname,
"fdc_occ_plane_%02d", iPlane);
94 sprintf(htitle,
"FDC Occupancy Package %01d Cell %01d", (iPlane / 6) + 1, (iPlane % 6) + 1);
95 fdc_occ_plane[iPlane] =
new TH2F(hname, htitle, 100, -50.0, 50.0, 100, -50.0, 50.0);
98 for (
unsigned k=0;k<4;k++){
99 char mypackagename[40];
101 sprintf(mypackagename,
"Package_%d",package);
102 gDirectory->mkdir(mypackagename)->cd();
104 char hname[80],htitle[80];
105 for (
unsigned i=0;i<6;i++){
108 sprintf(hname,
"fdc_pack%d_chamber%d_wire_occ",package,chamber);
109 sprintf(htitle,
"FDC wire occupancy for Package %d Chamber %d",package,
114 sprintf(hname,
"fdc_pack%d_chamber%d_upstream_cathode_occ",package,
116 sprintf(htitle,
"FDC upstream cathode occupancy for Package %d Chamber %d",
121 sprintf(hname,
"fdc_pack%d_chamber%d_upstream_cathode_time",package,
123 sprintf(htitle,
"FDC upstream cathode times for Package %d Chamber %d",
129 sprintf(hname,
"fdc_pack%d_chamber%d_upstream_cathode_pulse_height",package,
131 sprintf(htitle,
"FDC upstream cathode pulse heights for Package %d Chamber %d",
138 sprintf(hname,
"fdc_pack%d_chamber%d_downstream_cathode_occ",package,
140 sprintf(htitle,
"FDC downstream cathode occupancy for Package %d Chamber %d",
146 sprintf(hname,
"fdc_pack%d_chamber%d_downstream_cathode_time",package,
148 sprintf(htitle,
"FDC downstream cathode times for Package %d Chamber %d",
154 sprintf(hname,
"fdc_pack%d_chamber%d_downstream_cathode_pulse_height",package,
156 sprintf(htitle,
"FDC downstream cathode pulse heights for Package %d Chamber %d",
163 gDirectory->cd(
"../");
187 for(
int pack=0;pack<4;pack++){
188 for(
int cell=0;cell<6;cell++){
189 for(
int wire=0;wire<96;wire++){
190 TDCnh[pack][cell][wire]=0;
191 for(
int hit=0;hit<20;hit++){
192 TDCval[pack][cell][wire][hit]=-1000.;
195 for(
int ud=0;ud<2;ud++){
196 for(
int strip=0;strip<192;strip++){
197 ADCnh[pack][cell][ud][strip]=0;
198 for(
int hit=0;hit<20;hit++){
199 ADCmax[pack][cell][ud][strip][hit]=-1000.;
200 ADCtime[pack][cell][ud][strip][hit]=-1000.;
208 vector<const DFDCWireDigiHit*>anodedigis;
209 eventLoop->Get(anodedigis);
212 vector<const DFDCCathodeDigiHit *>cathodedigis;
213 eventLoop->Get(cathodedigis);
216 vector<const DFDCPseudo *>fdcpseudohits;
217 eventLoop->Get(fdcpseudohits);
221 japp->RootFillLock(
this);
223 if( (anodedigis.size()>0) || (cathodedigis.size()>0) )
226 for(
unsigned int i = 0; i < fdcpseudohits.size(); i++){
227 fdc_occ_plane[fdcpseudohits[i]->wire->layer - 1]->Fill(fdcpseudohits[i]->xy.X(),fdcpseudohits[i]->xy.Y());
230 for (
unsigned int i=0;i<cathodedigis.size();i++){
234 if(digi->
view==3)ud=1;
237 int strip=digi->
strip-1;
240 digi->GetSingle(pulseped);
248 ADCmax[pack][cell][ud][strip][ADCnh[pack][cell][ud][strip]]=peak-ped;
251 digi->GetSingle(pulsetime);
255 if(t_pulse_num==p_pulse_num){
257 float time=pulsetime->
time/8;
258 ADCtime[pack][cell][ud][strip][ADCnh[pack][cell][ud][strip]]=time;
261 ADCnh[pack][cell][ud][strip]++;
266 for (
unsigned int i=0;i<anodedigis.size();i++){
270 int wire=wdigi->
wire-1;
272 TDCval[pack][cell][wire][TDCnh[pack][cell][wire]]=time;
274 TDCnh[pack][cell][wire]++;
278 for (
int pack=0;pack<4;pack++){
279 for (
int cell=0;cell<6;cell++){
280 for (
int wire=0;wire<96;wire++){
281 if(TDCval[pack][cell][wire][0]>0){
284 int plane=6*pack+cell+1;
285 fdcow->Fill(wire+1,plane);
291 for (
int pack=0;pack<4;pack++){
292 for (
int cell=0;cell<6;cell++){
293 for (
int ud=0;ud<2;ud++){
294 for (
int strip=0;strip<192;strip++){
295 val=ADCmax[pack][cell][ud][strip][0];
298 if(strip>2)val1=ADCmax[pack][cell][ud][strip-1][0];
300 if(strip<191)val2=ADCmax[pack][cell][ud][strip+1][0];
301 if(val1>thresh||val2>thresh){
304 for (
int nh=0;nh<ADCnh[pack][cell][ud][strip];nh++){
305 fdc_cathode_time[ud][pack][cell]->Fill(ADCtime[pack][cell][ud][strip][nh],strip);
308 int plane=12*pack+2*cell+ud+1;
309 fdcos->Fill(strip+1,plane);
318 japp->RootFillUnLock(
this);
static TH2F * fdc_occ_plane[24]
static TH2I * fdc_cathode_time[2][4][6]
static TH1I * fdc_num_events
uint32_t pulse_peak
from Pulse Pedestal Data word
sprintf(text,"Post KinFit Cut")
static TH1I * fdc_cathode_occ[2][4][6]
static TH2I * fdc_cathode_pulse_height[2][4][6]
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.
JEventProcessor_FDC_online()
static TH1I * fdc_wire_occ[4][6]
uint32_t pulse_number
from Pulse Time Data word
jerror_t init(void)
Called once at program start.
jerror_t fini(void)
Called after last event of last event source has been processed.
uint32_t time
from Pulse Time Data word
uint32_t pulse_number
from Pulse Pedestal Data word
uint32_t pedestal
from Pulse Pedestal Data word
~JEventProcessor_FDC_online()
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.
int main(int argc, char *argv[])