15 #include <JANA/JEventLoop.h>
26 #define MIN_CDC_HITS 8
27 #define MIN_FDC_HITS 8
28 #define MIN_CDC_FDC_HITS 8
29 #define MIN_BCAL_HITS 4
30 #define MIN_FCAL_HITS 4
31 #define MIN_TOF_HITS 1
32 #define MIN_UPV_HITS 4
70 TDirectory *
dir =
new TDirectoryFile(
"ACCEPTANCE",
"ACCEPTANCE");
77 int N_theta_bins = 400;
79 float theta_hi = M_PI*57.3;
80 CDC =
new TH2F(
"CDC",
"CDC acceptance",N_p_bins, p_lo, p_hi, N_theta_bins, theta_lo, theta_hi);
81 FDC =
new TH2F(
"FDC",
"FDC acceptance",N_p_bins, p_lo, p_hi, N_theta_bins, theta_lo, theta_hi);
82 CDC_FDC =
new TH2F(
"CDC_FDC",
"CDC_FDC acceptance",N_p_bins, p_lo, p_hi, N_theta_bins, theta_lo, theta_hi);
83 BCAL =
new TH2F(
"BCAL",
"BCAL acceptance",N_p_bins, p_lo, p_hi, N_theta_bins, theta_lo, theta_hi);
84 FCAL =
new TH2F(
"FCAL",
"FCAL acceptance",N_p_bins, p_lo, p_hi, N_theta_bins, theta_lo, theta_hi);
85 TOF =
new TH2F(
"TOF",
"TOF acceptance",N_p_bins, p_lo, p_hi, N_theta_bins, theta_lo, theta_hi);
86 thrown_charged =
new TH2F(
"thrown_charged",
"thrown charged particles",N_p_bins, p_lo, p_hi, N_theta_bins, theta_lo, theta_hi);
87 thrown_photon =
new TH2F(
"thrown_photon",
"thrown photons",N_p_bins, p_lo, p_hi, N_theta_bins, theta_lo, theta_hi);
89 FDC_anode_hits_per_event =
new TH1D(
"FDC_anode_hits_per_event",
"FDC anode hits/event", 201, -0.5, 200.5);
90 FDC_anode_hits_per_layer =
new TH1D(
"FDC_anode_hits_per_layer",
"FDC anode hits/layer", 24, 0.5, 24.5);
91 FDC_anode_hits_per_wire =
new TH1D(
"FDC_anode_hits_per_wire",
"FDC anode hits/wire", 96, 0.5, 96.5);
93 CDC_nhits_vs_pthrown =
new TH1D(
"CDC_nhits_vs_pthrown",
"Number of CDC hits per event vs. thrown momentum", 40, 0.0, 9.0);
94 FDC_nhits_vs_pthrown =
new TH1D(
"FDC_nhits_vs_pthrown",
"Number of FDC anode hits per event vs. thrown momentum", 40, 0.0, 9.0);
95 pthrown =
new TH1D(
"pthrown",
"thrown momentum", 40, 0.0, 9.0);
108 vector<const DMCThrown*> mcthrowns;
109 vector<const DMCTrackHit*> mctrackhits;
110 loop->Get(mcthrowns);
111 loop->Get(mctrackhits);
114 double Ncdc_anode = 0.0;
115 vector<const DCDCTrackHit*> cdctrackhits;
116 loop->Get(cdctrackhits);
117 Ncdc_anode = (double)cdctrackhits.size();
120 double Nfdc_anode = 0.0;
121 vector<const DFDCHit*> fdchits;
126 japp->RootFillLock(
this);
128 for(
unsigned int i=0; i<fdchits.size(); i++){
129 if(fdchits[i]->type==0){
133 FDC_anode_hits_per_wire->Fill(fdchits[i]->element);
136 FDC_anode_hits_per_event->Fill(Nfdc_anode);
139 for(
unsigned int i=0;i<mcthrowns.size();i++){
140 const DMCThrown *mcthrown = mcthrowns[i];
142 if(mcthrown->
charge() != 0.0){
143 thrown_charged->Fill(mcthrown->
momentum().Mag(), mcthrown->
momentum().Theta()*57.3);
144 }
else if(mcthrown->
type == 1){
145 thrown_photon->Fill(mcthrown->
momentum().Mag(), mcthrown->
momentum().Theta()*57.3);
150 map<int,int> cdchits;
151 map<int,int> fdchitmap;
152 map<int,int> bcalhits;
153 for(
unsigned int i=0;i<mctrackhits.size();i++){
156 switch(mctrackhit->
system){
164 bcalhits[mctrackhit->
track]++;
172 if(mcthrowns.size()==1){
173 double p = mcthrowns[0]->momentum().Mag();
174 CDC_nhits_vs_pthrown->Fill(p, Ncdc_anode);
175 FDC_nhits_vs_pthrown->Fill(p, Nfdc_anode);
187 map<int,int>::iterator iter;
188 for(iter=cdchits.begin(); iter!=cdchits.end(); iter++){
191 if(iter->first<=0 || iter->first>(
int)mcthrowns.size())
continue;
192 const DMCThrown *mcthrown = mcthrowns[iter->first-1];
198 for(iter=fdchitmap.begin(); iter!=fdchitmap.end(); iter++){
201 if(iter->first<=0 || iter->first>(
int)mcthrowns.size())
continue;
202 const DMCThrown *mcthrown = mcthrowns[iter->first-1];
207 if(cdchits.find(iter->first) != cdchits.end()){
208 int cdc_fdc_hits = cdchits.find(iter->first)->second + iter->second;
210 CDC_FDC->Fill(mcthrown->
momentum().Mag(), mcthrown->
momentum().Theta()*57.3);
214 japp->RootFillUnLock(
this);
225 japp->RootFillLock(
this);
227 CDC->Divide(thrown_charged);
228 FDC->Divide(thrown_charged);
229 CDC_FDC->Divide(thrown_charged);
231 japp->RootFillUnLock(
this);
jerror_t fini(void)
Invoked via DEventProcessor virtual method.
DEventProcessor_acceptance_hists()
DetectorSystem_t system
particle type
jerror_t init(void)
Invoked via DEventProcessor virtual method.
static int gLayer(const DFDCHit *h)
DFDCGeometry::gLayer(): Compute the global layer (detection layer 1-24) number based on module and la...
jerror_t evnt(JEventLoop *loop, uint64_t eventnumber)
Invoked via DEventProcessor virtual method.
jerror_t erun(void)
Invoked via DEventProcessor virtual method.
double charge(void) const
~DEventProcessor_acceptance_hists()
int primary
primary track=1 not primary track=0
const DVector3 & momentum(void) const
int type
GEANT particle ID.