10 #include <TDirectory.h>
17 #include <JANA/JApplication.h>
18 #include <JANA/JFactory.h>
49 gPARMS->SetDefaultParameter(
"IMAGING:MC_RECON_CHECK",MC_RECON_CHECK,
"Turn on/off comparison to MC");
51 gPARMS->SetDefaultParameter(
"IMAGING:DEBUG_LEVEL",DEBUG_LEVEL);
53 gPARMS->SetDefaultParameter(
"IMAGING:FIT_CL_CUT",FIT_CL_CUT,
"CL cut for vertex fit");
55 gPARMS->SetDefaultParameter(
"IMAGING:TRACK_CL_CUT",TRACK_CL_CUT,
"CL cut for tracks");
57 gPARMS->SetDefaultParameter(
"IMAGING:DOCA_CUT",DOCA_CUT,
"Maximum doca between tracks");
60 gDirectory->mkdir(
"Vertexes")->cd();
62 TwoTrackXYZ=
new TH3I(
"TwoTrackXYZ",
"z vs y vs x",400,-10,10,
63 400,-10,10,140,30,100);
64 TwoTrackXYZ->SetXTitle(
"x (cm)");
65 TwoTrackXYZ->SetYTitle(
"y (cm)");
66 TwoTrackXYZ->SetZTitle(
"z (cm)");
68 TwoTrackZ=
new TH1F(
"TwoTrackZ",
"z for r<0.5 cm",1000,0,200);
69 TwoTrackZ->SetXTitle(
"z [cm]");
71 TwoTrackPocaCut=
new TH2F(
"TwoTrackPocaCut",
"2track POCA,doca cut",4000,0,400,650,0,65);
72 TwoTrackPocaCut->SetXTitle(
"z (cm)");
73 TwoTrackPocaCut->SetYTitle(
"r (cm)");
75 TwoTrackXY_at_65cm=
new TH2F(
"TwoTrackXY_at_65cm",
"y vs x near 65 cm",400,-5,5,400,-5,5);
76 TwoTrackXY_at_65cm->SetXTitle(
"x [cm]");
77 TwoTrackXY_at_65cm->SetYTitle(
"y [cm]");
79 TwoTrackDz=
new TH1F(
"TwoTrackDz",
"#deltaz at x,y vertex",100,-10,10);
80 TwoTrackDz->SetXTitle(
"#Deltaz [cm]");
82 TwoTrackDoca=
new TH1F(
"TwoTrackDoca",
"#deltar",1000,0,10);
83 TwoTrackDoca->SetXTitle(
"d [cm]");
86 MCVertexDiff=
new TH3I(
"MCVertexDiff",
"dz vs dy vs dx",400,-10,10,
87 400,-10,10,400,-10,10);
88 MCVertexDxVsZ=
new TH2F(
"MCVertexDxVsZ",
"dx vs z",400,0,200,400,-10,10);
89 MCVertexDyVsZ=
new TH2F(
"MCVertexDyVsZ",
"dy vs z",400,0,200,400,-10,10);
90 MCVertexDzVsZ=
new TH2F(
"MCVertexDzVsZ",
"dz vs z",400,0,200,400,-10,10);
91 MCVertexDxVsR=
new TH2F(
"MCVertexDxVsR",
"dx vs R",120,0,60,400,-10,10);
92 MCVertexDyVsR=
new TH2F(
"MCVertexDyVsR",
"dy vs R",120,0,60,400,-10,10);
93 MCVertexDzVsR=
new TH2F(
"MCVertexDzVsR",
"dz vs R",120,0,60,400,-10,10);
96 gDirectory->cd(
"../");
112 eventLoop->GetSingle(dAnalysisUtilities);
136 vector<const DChargedTrack*>tracks;
138 if (tracks.size()<2)
return NOERROR;
140 vector<const DMCThrown*>mcthrowns;
142 loop->Get(mcthrowns);
145 japp->RootWriteLock();
147 if (MC_RECON_CHECK && tracks.size()==2){
151 for (
unsigned int i=0;i<mcthrowns.size();i++){
152 if (mcthrowns[i]->parentid==1){
153 truevertex=mcthrowns[i]->position();
157 const DTrackTimeBased *track1=tracks[0]->Get_BestTrackingFOM()->Get_TrackTimeBased();
161 if (dAnalysisUtilities->Calc_DOCA(track1,track2,pos1_out,pos2_out,doca)
163 DVector3 vertex=0.5*(pos1_out+pos2_out);
165 double ztrue=truevertex.z();
166 double rtrue=truevertex.Perp();
167 MCVertexDiff->Fill(diff.x(),diff.y(),diff.z());
168 MCVertexDxVsZ->Fill(ztrue,diff.x());
169 MCVertexDyVsZ->Fill(ztrue,diff.y());
170 MCVertexDzVsZ->Fill(ztrue,diff.z());
171 MCVertexDxVsR->Fill(rtrue,diff.x());
172 MCVertexDyVsR->Fill(rtrue,diff.y());
173 MCVertexDzVsR->Fill(rtrue,diff.z());
182 for (
unsigned int i=0;i<tracks.size()-1;i++){
183 const DTrackTimeBased *track1=tracks[i]->Get_BestTrackingFOM()->Get_TrackTimeBased();
184 if (TMath::Prob(track1->
chisq,track1->
Ndof)>TRACK_CL_CUT){
188 for (
unsigned int j=i+1;j<tracks.size();j++){
191 if (TMath::Prob(track2->
chisq,track2->
Ndof)>TRACK_CL_CUT){
197 double doca=1e7,s1=0,s2=0.;
198 DVector3 pos2_out,pos1_out,mom2_out,mom1_out;
204 doca=dAnalysisUtilities->Calc_DOCA(dir1,dir2,pos1,pos2,pos1_out,
208 dAnalysisUtilities->Calc_DOCA(track1,track2,pos1_out,pos2_out,doca);
211 TwoTrackDoca->Fill(doca);
212 TwoTrackDz->Fill(pos1_out.z()-pos2_out.z());
217 DVector3 myvertex=0.5*(pos1_out+pos2_out);
219 TwoTrackPocaCut->Fill(myvertex.z(),myvertex.Perp());
220 TwoTrackXYZ->Fill(myvertex.x(),myvertex.y(),myvertex.z());
221 if (myvertex.z()>64.5 && myvertex.z()<65.5){
222 TwoTrackXY_at_65cm->Fill(myvertex.x(),myvertex.y());
224 if (myvertex.Perp()<0.5){
225 TwoTrackZ->Fill(myvertex.z());
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
Called everytime a new run number is detected.
float chisq
Chi-squared for the track (not chisq/dof!)
DMagneticFieldMap * GetBfield(unsigned int run_number=1)
JEventProcessor_imaging()
jerror_t fini(void)
Called after last event of last event source has been processed.
~JEventProcessor_imaging()
const DVector3 & position(void) const
jerror_t init(void)
Called once at program start.
jerror_t erun(void)
Called everytime run number changes, provided brun has been called.
int Ndof
Number of degrees of freedom in the fit.
const DVector3 & momentum(void) const
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)
Called every event.