125 "Start hits distribution of track in XY plane in MWPC0",
133 "Start hits distribution of track in XY plane in MWPC1",
141 "Start hits distribution of track in XY plane in MWPC2",
150 new TH1F(
"h_mwpc0_track_Xstart",
"Start hits distribution of track in X axis in MWPC0",
mwpcN, -
mwpcX,
mwpcX);
152 new TH1F(
"h_mwpc1_track_Xstart",
"Start hits distribution of track in X axis in MWPC1",
mwpcN, -
mwpcX,
mwpcX);
154 new TH1F(
"h_mwpc2_track_Xstart",
"Start hits distribution of track in X axis in MWPC2",
mwpcN, -
mwpcX,
mwpcX);
157 new TH1F(
"h_mwpc0_track_Ystart",
"Start hits distribution of track in Y axis in MWPC0",
mwpcN, -
mwpcY,
mwpcY);
159 new TH1F(
"h_mwpc1_track_Ystart",
"Start hits distribution of track in Y axis in MWPC1",
mwpcN, -
mwpcY,
mwpcY);
161 new TH1F(
"h_mwpc2_track_Ystart",
"Start hits distribution of track in Y axis in MWPC2",
mwpcN, -
mwpcY,
mwpcY);
169 new TH1F(
"h_mwpc_matched_track_Tx",
"Tx distribution of tracks in MWPC",
mwpcN, -0.1, 0.1);
171 new TH1F(
"h_mwpc_matched_track_Ty",
"Ty distribution of tracks in MWPC",
mwpcN, -0.1, 0.1);
173 new TH1I(
"h_mwpc_matched_track_nHits",
"Number of hit distribution of MWPC tracks", 8, 0, 8);
175 new TH1F(
"h_mwpc_matched_track_chi2",
"#Chi^2 distribution of tracks in MWPC",
mwpcN, 0.0, 10.0);
177 "Start hits distribution of track in XY plane in MWPC",
185 new TH1F(
"h_mwpc_matched_track_Xstart",
"Start hits distribution of track in X axis in MWPC",
mwpcN, -
mwpcX,
mwpcX);
187 new TH1F(
"h_mwpc_matched_track_Ystart",
"Start hits distribution of track in Y axis in MWPC",
mwpcN, -
mwpcY,
mwpcY);
189 new TH1I(
"h_mwpc_matched_track_nTracks",
"Number of tracks distribution in MWPC", 6, -1, 5);
192 new TH1F(
"h_mwpc_matched_track_dist_3d",
"h_mwpc_matched_track_dist_3d",
mwpcN, 0.0,
res_bound);
211 gROOT->LoadMacro(
"$VMCWORKDIR/macro/run/bmnloadlibs.C");
214 TString geoName = (runId >= 12 && runId <= 188) ?
"geometry_run1"
215 : (runId >= 220 && runId <= 395) ?
"geometry_run2"
216 : (runId >= 403 && runId <= 688) ?
"geometry_run3"
217 :
"WRONG runId = " + runId +
"! NO GEOMETRY FOUND!!!";
219 cout <<
"INFO: Geometry type: " << geoName << endl;
220 if (geoName.
Contains(
"NO GEOMETRY FOUND!!!"))
242 Int_t startEvent = 0;
256 tReco->
Branch(
"BmnDchHit", &dchHits);
257 tReco->
Branch(
"BmnMwpcHit", &mwpcHits);
258 tReco->
Branch(
"DchTracks", &dchTracks);
259 tReco->
Branch(
"Mwpc0Seeds", &mwpcTracks0);
260 tReco->
Branch(
"Mwpc1Seeds", &mwpcTracks1);
261 tReco->
Branch(
"Mwpc2Seeds", &mwpcTracks2);
262 tReco->
Branch(
"MwpcMatchedTracks", &mwpcMatchedTracks);
292 cout <<
"Time Selection: START" << endl;
294 TH1F* h_times0 =
new TH1F(
"h_times0",
"mwpc0_times", 40, 0.0, 40.0);
295 TH1F* h_times1 =
new TH1F(
"h_times1",
"mwpc1_times", 40, 0.0, 40.0);
296 TH1F* h_times2 =
new TH1F(
"h_times2",
"mwpc2_times", 40, 0.0, 40.0);
297 for (
Int_t iEv = startEvent; iEv < startEvent + events; iEv++) {
299 cout <<
"TIME SEECTION: \tRUN#" << runId <<
"\tEvent: " << iEv + 1 <<
"/" << startEvent + events << endl;
313 DigitsTimeSelection(h_times0, mwpc0_leftTime, mwpc0_rightTime);
314 DigitsTimeSelection(h_times1, mwpc1_leftTime, mwpc1_rightTime);
315 DigitsTimeSelection(h_times2, mwpc2_leftTime, mwpc2_rightTime);
321 cout <<
"Time Selection: FINISH" << endl;
323 for (
Int_t iEv = startEvent; iEv < startEvent + events; iEv++) {
330 mwpcTracks0->
Clear();
331 mwpcTracks1->
Clear();
332 mwpcTracks2->
Clear();
333 mwpcMatchedTracks->
Clear();
336 cout <<
"RECO: \tRUN#" << runId <<
"\tEvent: " << iEv + 1 <<
"/" << startEvent + events << endl;
337 cout <<
"Event: " << iEv << endl;
340 ProcessDchDigits(dchDigits, dchHits);
341 ProcessMwpcDigits(mwpcDigits, mwpcHits);
344 DchTrackFinder(dchHits, dchTracks);
345 MwpcTrackFinder(mwpcHits, mwpcTracks0, 0);
346 MwpcTrackFinder(mwpcHits, mwpcTracks1, 1);
347 MwpcTrackFinder(mwpcHits, mwpcTracks2, 2);
352 MwpcTrackMatchingByAllHits(mwpcHits, mwpcMatchedTracks);
368 gROOT->LoadMacro(
"$VMCWORKDIR/macro/run/bmnloadlibs.C");
396 for (
Int_t iEv = 0; iEv < events; iEv++) {
401 cout <<
"QA: \tRUN#" << runId <<
"\tEvent: " << iEv + 1 <<
"/" << events << endl;
441 Int_t digiCounter0 = 0;
442 Int_t digiCounter1 = 0;
443 Int_t digiCounter2 = 0;
450 if (plane / 6 == 0) {
451 if (time < mwpc0_leftTime || time > mwpc0_rightTime)
455 }
else if (plane / 6 == 1) {
456 if (time < mwpc1_leftTime || time > mwpc1_rightTime)
460 }
else if (plane / 6 == 2) {
461 if (time < mwpc2_leftTime || time > mwpc2_rightTime)
473 Int_t hitCounter0 = 0;
474 Int_t hitCounter1 = 0;
475 Int_t hitCounter2 = 0;
489 }
else if (mwpcId == 1) {
495 }
else if (mwpcId == 2) {
509 CbmTrack* tr = (CbmTrack*)mwpcTracks0->
At(trId);
510 FairTrackParam* par = tr->GetParamFirst();
522 CbmTrack* tr = (CbmTrack*)mwpcTracks1->
At(trId);
523 FairTrackParam* par = tr->GetParamFirst();
554 CbmTrack* tr = (CbmTrack*)mwpcMatchedTracks->
At(trId);
555 FairTrackParam* par = tr->GetParamFirst();
561 Float_t Az = par->GetQp() / Sqrt(Tx * Tx + Ty * Ty + 1.0);
592 return Abs(A * Mx + B * My + C) / Sqrt(A * A + B * B);
Short_t GetMwpcId() const
Int_t SetBranchAddress(const char *bname, T **add, TBranch **ptr=nullptr)
virtual Int_t Add(const char *name, Long64_t nentries=TTree::kMaxEntries)
Long64_t GetEntries() const override
Int_t GetEntry(Long64_t entry=0, Int_t getall=0) override
void Clear(Option_t *option="") override
void Close(Option_t *option="") override
static TGeoManager * Import(const char *filename, const char *name="", Option_t *option="")
virtual Int_t Fill(const char *name, Double_t w)
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const override
static TString Format(const char *fmt,...)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) const override
virtual Int_t Branch(const char *folder, Int_t bufsize=32000, Int_t splitlevel=99)
TVector3 Cross(const TVector3 &) const
void qa(Int_t runId=650, Int_t nEvents=0)
Float_t DistFromPointToLine3D(TVector3 direction, TVector3 vertex, TVector3 hit)
TH1I * h_mwpc2_track_nTracks
TH1I * h_mwpc1_digit_time
TH1F * h_mwpc2_track_chi2
TH1I * h_mwpc2_digit_time
TH1F * h_mwpc1_track_Xstart
TH1I * h_mwpc0_digit_nDigits
TH1I * h_mwpc2_track_nHits
TH1I * h_mwpc0_digit_time
TH2F * h_mwpc1_track_XYstart
TH1I * h_mwpc1_digit_nDigits
TH1F * h_mwpc_matched_track_chi2
TH2F * h_mwpc_matched_track_XYstart
TH1F * h_mwpc2_track_Xstart
TH2F * h_mwpc0_track_XYstart
TH1F * h_mwpc_matched_track_dist_3d
void reco(Int_t runId=648, Int_t nEvents=10000)
TH1I * h_mwpc2_digit_nDigits
TH1I * h_mwpc1_track_nHits
TH1F * h_mwpc2_track_Ystart
TH1F * h_mwpc1_track_Ystart
TH1I * h_mwpc0_track_nTracks
TH1I * h_mwpc0_track_nHits
Float_t DistFromPointToLine2D(Float_t A, Float_t B, Float_t C, Float_t Mx, Float_t My)
TH1F * h_mwpc0_track_chi2
TH1F * h_mwpc0_track_Xstart
TH2F * h_mwpc2_track_XYstart
TH1F * h_mwpc_matched_track_Ty
TH1F * h_mwpc1_track_chi2
TH1F * h_mwpc_matched_track_Tx
TH1F * h_mwpc0_track_Ystart
TH1F * h_mwpc_matched_track_Xstart
TH1I * h_mwpc_digit_planes
TH1I * h_mwpc_matched_track_nTracks
TH1I * h_mwpc1_track_nTracks
TH1F * h_mwpc_matched_track_Ystart
TH1I * h_mwpc_matched_track_nHits