12 #include <JANA/JEventLoop.h>
45 pthread_mutex_init(&mutex, NULL);
64 TDirectory *
dir =
new TDirectoryFile(
"CDC",
"CDC");
68 cdctree =
new TTree(
"cdc",
"CDC Truth points");
69 cdchittree =
new TTree(
"cdchit",
"CDC Hits");
70 cdcbranch = cdctree->Branch(
"T",
"CDC_branch",&cdc_ptr);
71 cdchitbranch = cdchittree->Branch(
"H",
"CDChit_branch",&cdchit_ptr);
73 idEdx =
new TH1D(
"idEdx",
"Integrated dE/dx in CDC", 10000, 0.0, 1.0E-3);
74 idEdx->SetXTitle(
"dE/dx (GeV/cm)");
75 idEdx_vs_p =
new TH2D(
"idEdx_vs_p",
"Integrated dE/dx vs. momentum in CDC", 100, 0.0, 1.0, 1000, 0.0, 1.0
E1);
76 idEdx->SetXTitle(
"momentum (GeV/c)");
77 idEdx->SetYTitle(
"dE/dx (MeV/g^{-1}cm^{2})");
121 vector<const DMCTrackHit*> mctrackhits;
122 vector<const DCDCHit*> cdchits;
123 vector<const DCDCTrackHit*> cdctrackhits;
124 vector<const DFDCHit*> fdchits;
125 vector<const DMCThrown*> mcthrowns;
126 loop->Get(mctrackhits);
128 loop->Get(cdctrackhits);
130 loop->Get(mcthrowns);
133 int Nfdc_wire_hits = 0;
134 for(
unsigned int i=0; i<fdchits.size(); i++)
if(fdchits[i]->type==0)Nfdc_wire_hits++;
138 const DMCThrown *mcthrown = mcthrowns.size()>0 ? mcthrowns[0]:NULL;
144 japp->RootWriteLock();
147 for(
unsigned int i=0; i<mctrackhits.size(); i++){
151 double r = mctrackhit->
r;
152 double phi = mctrackhit->
phi;
153 double x = r*cos(phi);
154 double y = r*
sin(phi);
155 cdc.pos_truth.SetXYZ(x, y, mctrackhit->
z);
163 for(
unsigned int i=0; i<cdchits.size(); i++){
164 const DCDCHit *hit = cdchits[i];
165 const DCDCWire *wire = (cdchits.size() == cdctrackhits.size()) ? cdctrackhits[i]->wire:NULL;
168 cdchit.straw = hit->
straw;
172 cdchit.pthrown = mcthrowns.size()>0 ? mcthrowns[0]->momentum().Mag():-1000.0;
173 cdchit.ncdchits = (int)cdchits.size();
174 cdchit.ntothits = (int)cdchits.size() + Nfdc_wire_hits;
176 if(mcthrown && wire){
177 cdchit.dx = rt->
Straw_dx(wire, 0.8);
186 if(mcthrown && wire){
188 double doca = rt->
DistToRT(wire, &s);
189 double mass = 0.13957;
190 double beta = 1.0/
sqrt(1.0 + pow(mass/mcthrown->
momentum().Mag(), 2.0))*2.998E10;
191 double tof = s/beta/1.0E-9;
192 double dist = (cdchit.t-tof)*55.0E-4;
193 cdchit.resi_thrown = doca-dist;
195 cdchit.resi_thrown = 0.0;
202 if(((Nfdc_wire_hits+cdchits.size()) >= 10) && (cdchits.size()>=5)){
204 idEdx->Fill(Q/dxtot);
209 double density = 0.85*1.66E-3 + 0.15*1.977E-3;
210 idEdx_vs_p->Fill(mcthrown->
momentum().Mag(), Q/dxtot*1000.0/density);
jerror_t brun(JEventLoop *eventLoop, int32_t runnumber)
double Straw_dx(const DCoordinateSystem *wire, double radius) const
DEventProcessor_cdc_hists()
jerror_t evnt(JEventLoop *loop, uint64_t eventnumber)
Invoked via DEventProcessor virtual method.
DMagneticFieldMap * GetBfield(unsigned int run_number=1)
const DVector3 & position(void) const
void Swim(const DVector3 &pos, const DVector3 &mom, double q=-1000.0, const TMatrixFSym *cov=NULL, double smax=2000.0, const DCoordinateSystem *wire=NULL)
jerror_t fini(void)
Invoked via DEventProcessor virtual method.
jerror_t init(void)
Invoked via DEventProcessor virtual method.
DetectorSystem_t system
particle type
double DistToRT(double x, double y, double z) const
float z
coordinates of hit in cm and rad
jerror_t erun(void)
Invoked via DEventProcessor virtual method.
~DEventProcessor_cdc_hists()
double charge(void) const
const DVector3 & momentum(void) const