18 #include <JANA/JApplication.h>
19 #include <JANA/JEventLoop.h>
25 #include <BCAL/DBCALMCResponse.h>
45 pthread_mutex_init(&mutex, NULL);
63 TDirectory *
dir = (TDirectory*)gROOT->FindObject(
"CALORIMETRY");
64 if(!dir)dir =
new TDirectoryFile(
"CALORIMETRY",
"CALORIMETRY");
68 phtneff =
new TTree(
"phtneff",
"Photon Reconstruction Efficiency");
69 phtneff->Branch(
"E",
"photon",&phtn_ptr);
74 RootFile =
new TFile(
"photoneff.root",
"RECREATE");
76 JParameterManager *parms = app->GetJParameterManager();
80 parms->SetDefaultParameter(
"TRKEFF:DEBUG",
DEBUG);
115 vector<const DFCALHit*> fcalhits;
116 vector<const DBCALMCResponse*> bcalhits;
117 vector<const DPhoton*> photons;
118 vector<const DMCThrown*> mcthrowns;
119 vector<const DMCTrajectoryPoint*> mctrajpoints;
124 loop->Get(mcthrowns);
125 loop->Get(mctrajpoints);
128 for(
unsigned int i=0; i<mcthrowns.size(); i++){
129 const DMCThrown *mcthrown = mcthrowns[i];
132 if(fabs(mcthrowns[i]->charge())!=0.0)
continue;
137 bool locIsRecon = isReconstructable(mcthrown, loop);
140 japp->RootWriteLock();
142 phtn.pthrown = pthrown;
144 phtn.pfit.SetXYZ(0,0,0);
147 phtn.delta_E_over_E=1.0E20;
148 phtn.delta_theta=1.0E20;
149 phtn.delta_phi=1.0E20;
150 phtn.isreconstructable = locIsRecon;
153 phtn.event = eventnumber;
155 double fom_best = 1.0E8;
158 for(
unsigned int j=0; j<photons.size(); j++){
159 const DPhoton *
photon = photons[j];
165 double delta_E_over_E = (pfit.Mag()-pthrown.Mag())/pthrown.Mag();
166 double delta_theta = (pfit.Theta() - pthrown.Theta())*1000.0;
167 double delta_phi = (pfit.Phi() - pthrown.Phi())*1000.0;
171 double fom = fabs(delta_E_over_E);
178 phtn.delta_E_over_E = delta_E_over_E;
179 phtn.delta_theta = delta_theta;
180 phtn.delta_phi = delta_phi;
181 phtn.Nbcal = bcalhits.size();
182 phtn.Nfcal = fcalhits.size();
212 vector<const DBCALMCResponse*> bcalhits;
213 vector<const DFCALHit*> fcalhits;
219 for(
unsigned int i=0; i<bcalhits.size(); i++)Ebcal += (bcalhits[i])->E;
220 if(Ebcal>0.5*mcthrown->
energy())
return true;
223 for(
unsigned int i=0; i<fcalhits.size(); i++)Efcal += (fcalhits[i])->E;
224 if(Efcal>0.5*mcthrown->
energy())
return true;
double energy(void) const
jerror_t brun(JEventLoop *loop, int32_t runnumber)
DEventProcessor_photoneff_hists()
jerror_t evnt(JEventLoop *loop, uint64_t eventnumber)
Invoked via DEventProcessor virtual method.
bool isReconstructable(const DMCThrown *mcthrown, JEventLoop *loop)
jerror_t init(void)
Invoked via DEventProcessor virtual method.
jerror_t fini(void)
Invoked via DEventProcessor virtual method.
const DVector3 & momentum(void) const
~DEventProcessor_photoneff_hists()
jerror_t erun(void)
Invoked via DEventProcessor virtual method.