17 #include <JANA/JApplication.h>
18 #include <JANA/JEventLoop.h>
46 pthread_mutex_init(&mutex, NULL);
65 TDirectory *
dir = (TDirectory*)gROOT->FindObject(
"TRACKING");
66 if(!dir)dir =
new TDirectoryFile(
"TRACKING",
"TRACKING");
69 fdc_cov =
new TProfile2D(
"fdc_cov",
"FDC Covariance calculated from residuals", 24, 0.5, 24.5, 24, 0.5, 24.5);
71 fdc_cov->SetXTitle(
"Layer number");
72 fdc_cov->SetYTitle(
"Layer number");
73 fdc_cov_calc = (TProfile2D*)fdc_cov->Clone(
"fdc_cov_calc");
74 fdc_cov_calc->SetTitle(
"FDC Covariance calculated from materials");
88 _DBG_<<
"Cannot get DApplication from JEventLoop! (are you using a JApplication based program perhaps?)"<<endl;
89 return RESOURCE_UNAVAILABLE;
94 vector<double> z_wires;
122 vector<const DMCThrown*> mcthrowns;
123 vector<const DMCTrackHit*> mctrackhits;
124 vector<const DMCTrajectoryPoint*> mctrajectorypoints;
125 vector<const DFDCPseudo*> fdcpseudohits;
127 loop->Get(mcthrowns);
128 loop->Get(mctrackhits);
129 loop->Get(mctrajectorypoints);
130 loop->Get(fdcpseudohits);
135 if(mcthrowns.size() !=1){
136 _DBG_<<
" mcthrowns.size()="<<mcthrowns.size()<<endl;
143 for(
unsigned int i=0; i<mctrackhits.size(); i++){
146 if((hit->
z < (Z_fdc1+0.5)) && (hit->
z > (Z_fdc1-0.5))){
152 if(!mctrackhit1)
return NOERROR;
154 pos_mctrackhit1.SetXYZ(mctrackhit1->
r*cos(mctrackhit1->
phi), mctrackhit1->
r*
sin(mctrackhit1->
phi), mctrackhit1->
z);
161 double diff_min = 1.0E6;
163 for(
unsigned int i=0; i<mctrajectorypoints.size(); i++){
166 double diff = (pos_traj-pos_mctrackhit1).Mag();
167 s1 += (double)traj->
step;
169 pos_fdc1.SetXYZ(traj->
x, traj->
y, traj->
z);
170 mom_fdc1.SetXYZ(traj->
px, traj->
py, traj->
pz);
180 rt->
Swim(pos_fdc1, mom_fdc1);
183 pthread_mutex_lock(&mutex);
186 vector<double> resi_by_layer(24,-1000);
188 for(
unsigned int i=0; i<fdcpseudohits.size(); i++){
189 const DFDCPseudo *fdcpseudohit = fdcpseudohits[i];
197 double mass = 0.13957;
198 double beta = 1.0/
sqrt(1.0 + pow(mass/mom_doca.Mag(), 2.0))*2.998E10;
199 double tof = (s+s1)/beta/1.0E-9;
200 double dist = (fdcpseudohit->
time - tof)*55E-4;
201 double resi = dist - doca;
204 if(layer>=1 && layer<=24){
205 resi_by_layer[layer-1] = resi;
211 for(
int layer1=1; layer1<=24; layer1++){
212 double resi1 = resi_by_layer[layer1-1];
213 if(!finite(resi1) || fabs(resi1)>100.0)
continue;
215 for(
int layer2=layer1; layer2<=24; layer2++){
216 double resi2 = resi_by_layer[layer2-1];
217 if(!finite(resi2) || fabs(resi2)>100.0)
continue;
219 fdc_cov->Fill(layer1, layer2, resi1*resi2);
220 fdc_cov->Fill(layer2, layer1, resi1*resi2);
227 for(
int layerA=1; layerA<=24; layerA++){
231 for(
int layerB=layerA; layerB<=24; layerB++){
237 double sA = stepA->
s;
238 double sB = stepB->
s;
241 if(step0->
s>step_end->
s)
continue;
246 double sigmaAB = sA*sB*itheta02 -(sA+sB)*itheta02s + itheta02s2;
248 fdc_cov_calc->Fill(layerA, layerB, sigmaAB);
249 fdc_cov_calc->Fill(layerB, layerA, sigmaAB);
255 pthread_mutex_unlock(&mutex);
bool GetFDCZ(vector< double > &z_wires) const
z-locations for each of the FDC wire planes in cm
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)
const DFDCWire * wire
DFDCWire for this wire.
class DFDCPseudo: definition for a reconstructed point in the FDC
jerror_t fini(void)
Invoked via DEventProcessor virtual method.
DetectorSystem_t system
particle type
jerror_t evnt(jana::JEventLoop *loop, uint64_t eventnumber)
Invoked via DEventProcessor virtual method.
DRootGeom * GetRootGeom(unsigned int run_number)
double DistToRT(double x, double y, double z) const
float z
coordinates of hit in cm and rad
DGeometry * GetDGeometry(unsigned int run_number)
void SetDRootGeom(const DRootGeom *RootGeom)
double time
time corresponding to this pseudopoint.
jerror_t init(void)
Invoked via DEventProcessor virtual method.
jerror_t erun(void)
Invoked via DEventProcessor virtual method.
DEventProcessor_fdc_covariance_hists()
jerror_t brun(jana::JEventLoop *loop, int32_t runnumber)
~DEventProcessor_fdc_covariance_hists()