17 #include <JANA/JApplication.h>
18 #include <JANA/JEventLoop.h>
45 pthread_mutex_init(&mutex, NULL);
64 TDirectory *
dir = (TDirectory*)gROOT->FindObject(
"TRACKING");
65 if(!dir)dir =
new TDirectoryFile(
"TRACKING",
"TRACKING");
68 cdc_cov =
new TProfile2D(
"cdc_cov",
"CDC Covariance calculated from residuals", 27, 0.5, 27.5, 27, 0.5, 27.5);
70 cdc_cov->SetXTitle(
"Ring number");
71 cdc_cov->SetYTitle(
"Ring number");
72 cdc_cov_calc = (TProfile2D*)cdc_cov->Clone(
"cdc_cov_calc");
73 cdc_cov_calc->SetTitle(
"CDC Covariance calculated from materials");
88 _DBG_<<
"Cannot get DApplication from JEventLoop! (are you using a JApplication based program perhaps?)"<<endl;
89 return RESOURCE_UNAVAILABLE;
126 vector<const DMCThrown*> mcthrowns;
127 vector<const DMCTrackHit*> mctrackhits;
128 vector<const DMCTrajectoryPoint*> mctrajectorypoints;
129 vector<const DCDCTrackHit*> cdctrackhits;
131 loop->Get(mcthrowns);
132 loop->Get(mctrackhits);
133 loop->Get(mctrajectorypoints);
134 loop->Get(cdctrackhits);
139 if(mcthrowns.size() !=1){
140 _DBG_<<
" mcthrowns.size()="<<mcthrowns.size()<<endl;
147 for(
unsigned int i=0; i<mctrackhits.size(); i++){
150 if((hit->
r < (R_cdc1+0.8)) && (hit->
r > (R_cdc1-0.8))){
156 if(!mctrackhit1)
return NOERROR;
158 pos_mctrackhit1.SetXYZ(mctrackhit1->
r*cos(mctrackhit1->
phi), mctrackhit1->
r*
sin(mctrackhit1->
phi), mctrackhit1->
z);
165 double diff_min = 1.0E6;
167 for(
unsigned int i=0; i<mctrajectorypoints.size(); i++){
170 double diff = (pos_traj-pos_mctrackhit1).Mag();
171 s1 += (double)traj->
step;
173 pos_cdc1.SetXYZ(traj->
x, traj->
y, traj->
z);
174 mom_cdc1.SetXYZ(traj->
px, traj->
py, traj->
pz);
184 rt->
Swim(pos_cdc1, mom_cdc1);
191 vector<double> resi_by_layer(27,-1000);
193 for(
unsigned int i=0; i<cdctrackhits.size(); i++){
202 double mass = 0.13957;
203 double beta = 1.0/
sqrt(1.0 + pow(mass/mom_doca.Mag(), 2.0))*2.998E10;
204 double tof = (s+s1)/beta/1.0E-9;
205 double dist = (cdctrackhit->
tdrift - tof)*55E-4;
206 double resi = dist - doca;
209 if(layer>=1 && layer<=27){
210 resi_by_layer[layer-1] = resi;
216 for(
int layer1=1; layer1<=27; layer1++){
217 double resi1 = resi_by_layer[layer1-1];
218 if(!finite(resi1) || fabs(resi1)>100.0)
continue;
220 for(
int layer2=layer1; layer2<=27; layer2++){
221 double resi2 = resi_by_layer[layer2-1];
222 if(!finite(resi2) || fabs(resi2)>100.0)
continue;
224 cdc_cov->Fill(layer1, layer2, resi1*resi2);
225 cdc_cov->Fill(layer2, layer1, resi1*resi2);
232 for(
int layerA=1; layerA<=27; layerA++){
236 for(
int layerB=layerA; layerB<=27; layerB++){
242 double sA = stepA->
s;
243 double sB = stepB->
s;
246 if(step0->
s>step_end->
s)
continue;
251 double sigmaAB = sA*sB*itheta02 -(sA+sB)*itheta02s + itheta02s2;
253 cdc_cov_calc->Fill(layerA, layerB, sigmaAB);
254 cdc_cov_calc->Fill(layerB, layerA, sigmaAB);
259 RootFillUnLock(
this);
jerror_t init(void)
Invoked via DEventProcessor virtual method.
~DEventProcessor_cdc_covariance_hists()
const swim_step_t * GetLastSwimStep(void) const
DMagneticFieldMap * GetBfield(unsigned int run_number=1)
DVector3 GetLastDOCAPoint(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)
DetectorSystem_t system
particle type
DRootGeom * GetRootGeom(unsigned int run_number)
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.
jerror_t brun(jana::JEventLoop *loop, int32_t runnumber)
void SetDRootGeom(const DRootGeom *RootGeom)
DEventProcessor_cdc_covariance_hists()
jerror_t fini(void)
Invoked via DEventProcessor virtual method.
jerror_t evnt(jana::JEventLoop *loop, uint64_t eventnumber)
Invoked via DEventProcessor virtual method.