9#include "BmnEventHeader.h"
10#include "BmnFieldMap.h"
11#include "BmnGemStripHit.h"
24 : fInnerTracks(nullptr)
33 , fGemLowerCluster(nullptr)
38 , fGlobalTracks(nullptr)
40 , fInnerTrackBranchName(
"StsTrack")
60 , fNGoodInnerTracks(0)
61 , fNGoodGlobalTracks(0)
65 : fInnerTracks(nullptr)
73 , fGemLowerCluster(nullptr)
78 , fGlobalTracks(nullptr)
80 , fInnerTrackBranchName(
"StsTrack")
101 , fNGoodInnerTracks(0)
102 , fNGoodGlobalTracks(0)
108 fGlobalTracks->Delete();
109 delete fGlobalTracks;
124 cout <<
"BmnGlobalTracking::Init started\n";
128 FairRootManager* ioman = FairRootManager::Instance();
130 Fatal(
"Init",
"FairRootManager is not instantiated");
132 fSilHits = (TClonesArray*)ioman->GetObject(
"BmnSiliconHit");
133 fGemHits = (TClonesArray*)ioman->GetObject(
"BmnGemStripHit");
134 fCscHits = (TClonesArray*)ioman->GetObject(
"BmnCSCHit");
135 fTof1Hits = (TClonesArray*)ioman->GetObject(
"BmnTof400Hit");
136 fTof2Hits = (TClonesArray*)ioman->GetObject(
"BmnTof700Hit");
138 fVertexL1 = (
CbmVertex*)ioman->GetObject(
"MpdVertex.");
141 fStsTracks = (TClonesArray*)ioman->GetObject(fInnerTrackBranchName);
142 fStsHits = (TClonesArray*)ioman->GetObject(
"StsHit");
143 fGemLowerCluster = (TClonesArray*)ioman->GetObject(
"BmnGemLowerCluster");
145 printf(
"BmnGlobalTracking::Init(): branch %s was found!\n", fInnerTrackBranchName.Data());
146 fGlobalTracks =
new TClonesArray(
"BmnGlobalTrack", 100);
147 ioman->Register(
"BmnGlobalTrack",
"GLOBAL", fGlobalTracks, kTRUE);
149 fInnerTracks = (TClonesArray*)ioman->GetObject(
"BmnGlobalTrack");
150 fGemTracks = (TClonesArray*)ioman->GetObject(
"BmnGemTrack");
152 cout <<
"BmnGlobalTracking::Init(): branch BmnInnerTrack not found! Task will be deactivated" << endl;
156 printf(
"BmnGlobalTracking::Init(): branch BmnInnerTrack was found! Global tracks will be based on BMN "
161 fDchTracks = (TClonesArray*)ioman->GetObject(
"BmnDchTrack");
166 fDchHits =
new TClonesArray(
"BmnHit", 100);
169 fDchHits = (TClonesArray*)ioman->GetObject(
"BmnDchHit");
172 TString dir = getenv(
"VMCWORKDIR");
183 TString calibFileName1 = dir +
"/input/q_calib1.root";
184 fCalib1_file = TFile::Open(calibFileName1);
185 for (Int_t
i = 0;
i < nGemSt; ++
i) {
186 TH1F* hA0 = (TH1F*)fCalib1_file->Get(Form(
"hA0_run_%d",
i));
187 TH1F* hA1 = (TH1F*)fCalib1_file->Get(Form(
"hA1_run_%d",
i));
188 TH1F* hB0 = (TH1F*)fCalib1_file->Get(Form(
"hB0_run_%d",
i));
189 TH1F* hB1 = (TH1F*)fCalib1_file->Get(Form(
"hB1_run_%d",
i));
191 qCalib_a0[
i] = hA0->GetBinContent(hA0->FindBin(fRunId));
192 qCalib_a1[
i] = hA1->GetBinContent(hA1->FindBin(fRunId));
193 qCalib_b0[
i] = hB0->GetBinContent(hB0->FindBin(fRunId));
194 qCalib_b1[
i] = hB1->GetBinContent(hB1->FindBin(fRunId));
198 fCalib1_file->Close();
201 TString calibFileName2 = dir +
"/input/q_calib2.root";
202 fCalib2_file = TFile::Open(calibFileName2);
203 for (Int_t
i = 0;
i < nGemSt; ++
i) {
204 TH1F* hA0 = (TH1F*)fCalib2_file->Get(Form(
"hA0_run_%d",
i));
205 TH1F* hA1 = (TH1F*)fCalib2_file->Get(Form(
"hA1_run_%d",
i));
206 TH1F* hB0 = (TH1F*)fCalib2_file->Get(Form(
"hB0_run_%d",
i));
207 TH1F* hB1 = (TH1F*)fCalib2_file->Get(Form(
"hB1_run_%d",
i));
209 qCalib_a0[
i] *= hA0->GetBinContent(hA0->FindBin(fRunId));
210 qCalib_a1[
i] *= hA1->GetBinContent(hA1->FindBin(fRunId));
212 qCalib_b0[
i] * hA0->GetBinContent(hA0->FindBin(fRunId)) + hB0->GetBinContent(hB0->FindBin(fRunId));
214 qCalib_b1[
i] * hA1->GetBinContent(hA1->FindBin(fRunId)) + hB1->GetBinContent(hB1->FindBin(fRunId));
218 fCalib2_file->Close();
220 TString ResXY_vs_mom_TOF400 = dir +
"/input/fitFunctions_ResXY_vs_mom_TOF400.root";
221 fTOF400_file = TFile::Open(ResXY_vs_mom_TOF400);
222 fitMeanPosResX_tof400 = (TF1*)fTOF400_file->Get(
"fitMeanPosResX");
223 fitMeanPosResY_tof400 = (TF1*)fTOF400_file->Get(
"fitMeanPosResY");
224 fitMeanNegResX_tof400 = (TF1*)fTOF400_file->Get(
"fitMeanNegResX");
225 fitMeanNegResY_tof400 = (TF1*)fTOF400_file->Get(
"fitMeanNegResY");
226 fitSigmaPosResX_tof400 = (TF1*)fTOF400_file->Get(
"fitSigmaPosResX");
227 fitSigmaPosResY_tof400 = (TF1*)fTOF400_file->Get(
"fitSigmaPosResY");
228 fitSigmaNegResX_tof400 = (TF1*)fTOF400_file->Get(
"fitSigmaNegResX");
229 fitSigmaNegResY_tof400 = (TF1*)fTOF400_file->Get(
"fitSigmaNegResY");
230 fTOF400_file->Close();
232 TString ResXY_vs_mom_TOF700 = dir +
"/input/fitFunctions_ResXY_vs_mom_TOF700.root";
233 fTOF700_file = TFile::Open(ResXY_vs_mom_TOF700);
234 fitMeanPosResX_tof700 = (TF1*)fTOF700_file->Get(
"fitMeanPosResX");
235 fitMeanPosResY_tof700 = (TF1*)fTOF700_file->Get(
"fitMeanPosResY");
236 fitMeanNegResX_tof700 = (TF1*)fTOF700_file->Get(
"fitMeanNegResX");
237 fitMeanNegResY_tof700 = (TF1*)fTOF700_file->Get(
"fitMeanNegResY");
238 fitSigmaPosResX_tof700 = (TF1*)fTOF700_file->Get(
"fitSigmaPosResX");
239 fitSigmaPosResY_tof700 = (TF1*)fTOF700_file->Get(
"fitSigmaPosResY");
240 fitSigmaNegResX_tof700 = (TF1*)fTOF700_file->Get(
"fitSigmaNegResX");
241 fitSigmaNegResY_tof700 = (TF1*)fTOF700_file->Get(
"fitSigmaNegResY");
242 fTOF700_file->Close();
244 fEvHead = (TClonesArray*)ioman->GetObject(
"EventHeader");
247 cout <<
"Init. No EventHeader array!" << endl;
250 cout <<
"BmnGlobalTracking::Init finished\n";
261 fGlobalTracks->Delete();
267 cout <<
"\n======================== Global tracking exec started =====================\n" << endl;
285 Double_t dchTxCorr = +0.006;
286 Double_t dchTyCorr = -0.0003;
287 Double_t dchXCorr = -6.97;
288 Double_t dchYCorr = -2.92;
289 for (Int_t trIdx = 0; trIdx < fDchTracks->GetEntriesFast(); ++trIdx) {
292 Double_t zDCH = parDch->GetZ();
294 }
else if (zDCH > 650) {
296 parDch->SetTx(parDch->GetTx() + dchTxCorr);
297 parDch->SetTy(parDch->GetTy() + dchTyCorr);
298 parDch->SetX(parDch->GetX() + dchXCorr);
299 parDch->SetY(parDch->GetY() + dchYCorr);
304 Double_t cscXCorr = +0.87;
305 Double_t cscYCorr = -0.12;
306 for (Int_t hitIdx = 0; hitIdx < fCscHits->GetEntriesFast(); ++hitIdx) {
308 hit->SetX(hit->GetX() + cscXCorr);
309 hit->SetY(hit->GetY() + cscYCorr);
313 Double_t tof400XCorr = -2.03;
314 Double_t tof400YCorr = +0.60;
315 for (Int_t hitIdx = 0; hitIdx < fTof1Hits->GetEntriesFast(); ++hitIdx) {
317 hit->SetX(hit->GetX() + tof400XCorr);
318 hit->SetY(hit->GetY() + tof400YCorr);
322 Double_t tof700XCorr = +2.00;
323 Double_t tof700YCorr = -5.74;
324 for (Int_t hitIdx = 0; hitIdx < fTof2Hits->GetEntriesFast(); ++hitIdx) {
326 hit->SetX(hit->GetX() + tof700XCorr);
327 hit->SetY(hit->GetY() + tof700YCorr);
334 for (Int_t
i = 0;
i < fStsTracks->GetEntriesFast(); ++
i) {
351 fPDG = (globTr.
GetP() > 0.) ? 2212 : -211;
353 const Float_t tZ = -0.01942;
361 Float_t dca = Sqrt(Sq(fVertexL1->
GetX() - parF.GetX()) + Sq(fVertexL1->
GetY() - parF.GetY()));
366 virtualVertexHit->SetXYZ(fVertexL1->
GetX(), fVertexL1->
GetY(), fVertexL1->
GetZ());
371 fKalman->
Update(&parF, virtualVertexHit, chi);
377 new ((*fGlobalTracks)[fGlobalTracks->GetEntriesFast()])
BmnGlobalTrack(globTr);
429 }
else if (fInnerTracks) {
457 fTime += sw.RealTime();
461 cout <<
"\n======================== Global tracking exec finished ====================\n" << endl;
464BmnStatus BmnGlobalTracking::MatchingTOF400()
467 cout <<
"Matching of TOF-400 started" << endl;
468 TClonesArray* tofHits = fTof1Hits;
478 map<Float_t, pair<Int_t, Int_t>> distPairs = FindPairsTof400(fGlobalTracks, tofHits, -1, -1);
480 for (
auto const& distPair : distPairs) {
482 pair<Int_t, Int_t> idxes = distPair.second;
493 Float_t mom = 1.0 / par.GetQp();
494 Float_t xMomCorr = (mom > 0) ? fitMeanPosResX_tof400->Eval(mom) : fitMeanNegResX_tof400->Eval(mom);
495 Float_t yMomCorr = (mom > 0) ? fitMeanPosResY_tof400->Eval(mom) : fitMeanNegResY_tof400->Eval(mom);
496 hit->
SetResXY(par.GetX() - xMomCorr - hit->GetX(), par.GetY() - yMomCorr - hit->GetY());
500 track->
SetBeta(len / hit->GetTimeStamp() / (TMath::C() * 1e-7), 1);
503 hit->
SetModule(((hit->GetDetectorID() & 0x0000FF00) >> 8) - 1);
511BmnStatus BmnGlobalTracking::MatchingTOF700()
514 cout <<
"Matching of TOF-700 started" << endl;
515 TClonesArray* tofHits = fTof2Hits;
519 map<Float_t, pair<Int_t, Int_t>> distPairs = FindPairsTof700(fGlobalTracks, tofHits, -1, -1);
521 for (
auto const& distPair : distPairs) {
523 pair<Int_t, Int_t> idxes = distPair.second;
534 Float_t mom = 1.0 / par.GetQp();
535 Float_t xMomCorr = (mom > 0) ? fitMeanPosResX_tof700->Eval(mom) : fitMeanNegResX_tof700->Eval(mom);
536 Float_t yMomCorr = (mom > 0) ? fitMeanPosResY_tof700->Eval(mom) : fitMeanNegResY_tof700->Eval(mom);
537 hit->
SetResXY(par.GetX() - xMomCorr - hit->GetX(), par.GetY() - yMomCorr - hit->GetY());
541 track->
SetBeta(len / (hit->GetTimeStamp()) / (TMath::C() * 1e-7), 2);
544 hit->
SetModule(((hit->GetDetectorID() & 0x0000FF00) >> 8) - 1);
552BmnStatus BmnGlobalTracking::MatchingScWall()
555 cout <<
"Matching of ScWall started " << fScWall << endl;
559 for (Int_t trIdx = 0; trIdx < fGlobalTracks->GetEntriesFast(); ++trIdx) {
562 Double_t minDX = DBL_MAX;
563 Double_t minDY = DBL_MAX;
573 for (Int_t
i = 1;
i <= nCells; ++
i) {
578 Float_t dX = par.GetX() - cell->GetX();
579 Float_t dY = par.GetY() - cell->GetY();
581 if (Abs(dX) < xCut && Abs(dY) < yCut && Abs(dX) < Abs(minDX) && Abs(dY) < Abs(minDY)) {
597BmnStatus BmnGlobalTracking::MatchingFarCsc()
600 cout <<
"Matching of LCSC started" << endl;
606 Double_t dZ = fDoAlign ? -7 : 0;
607 const Double_t dXX[] = {0.944, 0.891, 0.885, 0.992, 0.559, 0.582, 0.606, 0.588};
608 const Double_t dYY[] = {-0.735, -0.653, -0.583, -1.219, -0.458, -0.376, -0.506, -0.128};
611 Double_t sigmaXResid = (fIsExp) ? 2.0 : 2.0;
612 Double_t sigmaYResid = (fIsExp) ? 2.0 : 2.0;
613 Double_t xCut = 3 * sigmaXResid;
614 Double_t yCut = 3 * sigmaYResid;
616 Int_t N_tr = fGlobalTracks->GetEntriesFast();
617 Int_t N_csc = fCscHits->GetEntriesFast();
619 TString VMCWORKDIR = gSystem->Getenv(
"VMCWORKDIR");
620 BmnCSCStationSet stationSet(VMCWORKDIR +
"/parameters/csc/XMLConfigs/" +
"FullCSCRun8.xml");
624 for (Int_t i_csc = 0; i_csc < N_csc; i_csc++) {
628 if (minZ > pCscHit->GetZ())
629 minZ = pCscHit->GetZ();
632 for (Int_t i_tr = 0; i_tr < N_tr; i_tr++) {
637 for (Int_t i_csc = 0; i_csc < N_csc; i_csc++) {
646 FairTrackParam p = parMinZ;
657 Double_t dx = p.GetX() - (pCscHit->GetX() + dX);
658 Double_t dy = p.GetY() - (pCscHit->GetY() + dY);
659 if (Abs(dx) < xCut && Abs(dy) < yCut) {
695 Float_t mom = gl->
GetP();
701 set<Float_t> signalsLow;
704 for (Int_t hitIdx = 0; hitIdx < nHits; ++hitIdx) {
712 Float_t a = (hit->GetY() > 0) ? qCalib_a0[idx] : qCalib_a1[idx];
713 Float_t b = (hit->GetY() > 0) ? qCalib_b0[idx] : qCalib_b1[idx];
717 Int_t usedHits = (nGemHits == 3) ? 2
718 : (nGemHits == 4) ? 2
719 : (nGemHits == 5) ? 3
720 : (nGemHits == 6) ? 4
721 : (nGemHits == 7) ? 4
723 auto it = signalsLow.begin();
724 Float_t totSigLow = 0.0;
725 for (Int_t
i = 0;
i < usedHits; ++
i) {
729 Float_t dedx = (usedHits > 0) ? totSigLow / usedHits : -100;
732 TF1* hypCut =
new TF1(
"hypCut",
"20000*TMath::Exp(-2.0*TMath::Sqrt(x)) + 600.0", 0, 15);
734 if (dedx > hypCut->Eval(mom))
742Int_t BmnGlobalTracking::FindNearestHit(FairTrackParam* par, TClonesArray* hits, Float_t xCut, Float_t yCut)
747 Double_t minDX = DBL_MAX;
748 Double_t minDY = DBL_MAX;
752 Double_t minZ = 10000.0;
753 for (Int_t hitIdx = 0; hitIdx < hits->GetEntriesFast(); ++hitIdx) {
755 if (hit->GetZ() < minZ)
759 FairTrackParam parMinZ(*par);
763 for (Int_t hitIdx = 0; hitIdx < hits->GetEntriesFast(); ++hitIdx) {
766 FairTrackParam param = parMinZ;
770 Float_t dX = param.GetX() - hit->GetX();
771 Float_t dY = param.GetY() - hit->GetY();
773 if (Abs(dX) < xCut && Abs(dY) < yCut && Abs(dX) < Abs(minDX) && Abs(dY) < Abs(minDY)) {
788map<Float_t, pair<Int_t, Int_t>> BmnGlobalTracking::FindPairsTof700(TClonesArray* tracks,
794 Bool_t useFixCutX = (xCut > 0);
795 Bool_t useFixCutY = (yCut > 0);
797 map<Float_t, pair<Int_t, Int_t>> distancesPairs;
799 Double_t minZ = 10000.0;
800 for (Int_t hitIdx = 0; hitIdx < hits->GetEntriesFast(); ++hitIdx) {
802 if (hit->GetZ() < minZ)
806 for (Int_t trIdx = 0; trIdx < tracks->GetEntriesFast(); ++trIdx) {
811 for (Int_t hitIdx = 0; hitIdx < hits->GetEntriesFast(); ++hitIdx) {
814 FairTrackParam param = parMinZ;
817 Float_t mom = 1.0 / param.GetQp();
818 Float_t xMomCorr = (mom > 0) ? fitMeanPosResX_tof700->Eval(mom) : fitMeanNegResX_tof700->Eval(mom);
819 Float_t yMomCorr = (mom > 0) ? fitMeanPosResY_tof700->Eval(mom) : fitMeanNegResY_tof700->Eval(mom);
820 Float_t xSigma = (mom > 0) ? fitSigmaPosResX_tof700->Eval(mom) : fitSigmaNegResX_tof700->Eval(mom);
821 Float_t ySigma = (mom > 0) ? fitSigmaPosResY_tof700->Eval(mom) : fitSigmaNegResY_tof700->Eval(mom);
823 Float_t dX = Abs(param.GetX() - xMomCorr - hit->GetX());
824 Float_t dY = Abs(param.GetY() - yMomCorr - hit->GetY());
829 if (dX < xCut && dY < yCut) {
830 Float_t
dist = Sqrt(dX * dX + dY * dY);
831 distancesPairs.insert(pair<Float_t, pair<Int_t, Int_t>>(
dist, pair<Int_t, Int_t>(trIdx, hitIdx)));
836 return distancesPairs;
839map<Float_t, pair<Int_t, Int_t>> BmnGlobalTracking::FindPairsTof400(TClonesArray* tracks,
845 Bool_t useFixCutX = (xCut > 0);
846 Bool_t useFixCutY = (yCut > 0);
848 map<Float_t, pair<Int_t, Int_t>> distancesPairs;
850 Double_t minZ = 10000.0;
851 for (Int_t hitIdx = 0; hitIdx < hits->GetEntriesFast(); ++hitIdx) {
853 if (hit->GetZ() < minZ)
857 for (Int_t trIdx = 0; trIdx < tracks->GetEntriesFast(); ++trIdx) {
862 for (Int_t hitIdx = 0; hitIdx < hits->GetEntriesFast(); ++hitIdx) {
865 FairTrackParam param = parMinZ;
868 Float_t mom = 1.0 / param.GetQp();
869 Float_t xMomCorr = (mom > 0) ? fitMeanPosResX_tof400->Eval(mom) : fitMeanNegResX_tof400->Eval(mom);
870 Float_t yMomCorr = (mom > 0) ? fitMeanPosResY_tof400->Eval(mom) : fitMeanNegResY_tof400->Eval(mom);
871 Float_t xSigma = (mom > 0) ? fitSigmaPosResX_tof400->Eval(mom) : fitSigmaNegResX_tof400->Eval(mom);
872 Float_t ySigma = (mom > 0) ? fitSigmaPosResY_tof400->Eval(mom) : fitSigmaNegResY_tof400->Eval(mom);
874 Float_t dX = Abs(param.GetX() - xMomCorr - hit->GetX());
875 Float_t dY = Abs(param.GetY() - yMomCorr - hit->GetY());
880 if (dX < xCut && dY < yCut) {
881 Float_t
dist = Sqrt(dX * dX + dY * dY);
882 distancesPairs.insert(pair<Float_t, pair<Int_t, Int_t>>(
dist, pair<Int_t, Int_t>(trIdx, hitIdx)));
887 return distancesPairs;
890Int_t BmnGlobalTracking::FindNearestHit(FairTrackParam* par,
894 vector<Int_t> stations)
899 Double_t minDX = DBL_MAX;
900 Double_t minDY = DBL_MAX;
904 Double_t minZ = 10000.0;
905 for (Int_t hitIdx = 0; hitIdx < hits->GetEntriesFast(); ++hitIdx) {
908 if (st != stations[0] && st != stations[1])
910 if (hit->GetZ() < minZ)
914 FairTrackParam parMinZ(*par);
918 for (Int_t hitIdx = 0; hitIdx < hits->GetEntriesFast(); ++hitIdx) {
922 if (st != stations[0] && st != stations[1])
925 FairTrackParam param = parMinZ;
929 Float_t dX = param.GetX() - hit->GetX();
930 Float_t dY = param.GetY() - hit->GetY();
932 if (Abs(dX) < xCut && Abs(dY) < yCut && Abs(dX) < Abs(minDX) && Abs(dY) < Abs(minDY)) {
951 cout <<
"Matching of CSC started" << endl;
955 fPDG = (glTr->
GetP() > 0.) ? 2212 : -211;
958 Double_t sigmaXcscgemResid = 2.0;
959 Double_t sigmaYcscgemResid = 2.0;
960 Double_t xCut = 3 * sigmaXcscgemResid;
961 Double_t yCut = 3 * sigmaYcscgemResid;
968 Int_t minIdx = FindNearestHit(glTr->
GetParamLast(), fCscHits, xCut, yCut);
1041 cout <<
"Matching of DCH started" << endl;
1045 if (fDchTracks->GetEntriesFast() == 0)
1047 fPDG = (tr->
GetP() > 0.) ? 2212 : -211;
1049 Double_t minDX = DBL_MAX;
1050 Double_t minDY = DBL_MAX;
1052 Int_t minTrackId = -1;
1055 Double_t sigmaXdchGgemResid = (fIsExp) ? 5.54 : 1;
1056 Double_t sigmaYdchGgemResid = (fIsExp) ? 2.33 : 1;
1057 Double_t xCut = 3 * sigmaXdchGgemResid;
1058 Double_t yCut = 3 * sigmaYdchGgemResid;
1060 for (Int_t iTr = 0; iTr < fDchTracks->GetEntriesFast(); ++iTr) {
1071 Double_t dX = glPar.GetX() - dchPar.GetX();
1072 Double_t dY = glPar.GetY() - dchPar.GetY();
1073 if (Abs(dX) < xCut && Abs(dY) < yCut && Abs(dX) < minDX && Abs(dY) < minDY) {
1081 if (minTrack ==
nullptr)
1102 cout <<
"Matching of DCH started" << endl;
1106 if (fDchTracks->GetEntriesFast() == 0)
1108 fPDG = (tr->
GetP() > 0.) ? 2212 : -211;
1111 Double_t sigmaXdchGgemResid = (fIsExp) ? 5.54 : 1;
1112 Double_t sigmaYdchGgemResid = (fIsExp) ? 2.33 : 1;
1113 Double_t xCut = 3 * sigmaXdchGgemResid;
1114 Double_t yCut = 3 * sigmaYdchGgemResid;
1117 Double_t zDchTh1 = 550.0;
1118 Double_t zDchTh2 = 650.0;
1120 Double_t minZ = 10000.0;
1121 for (Int_t iTr = 0; iTr < fDchTracks->GetEntriesFast(); ++iTr) {
1125 if (trZ < zDchTh1 && num == 1)
1127 if (trZ > zDchTh2 && num == 2)
1139 Double_t minDX = DBL_MAX;
1140 Double_t minDY = DBL_MAX;
1144 for (Int_t iTr = 0; iTr < fDchTracks->GetEntriesFast(); ++iTr) {
1152 if (trZ < zDchTh1 && num == 1)
1154 if (trZ > zDchTh2 && num == 2)
1159 FairTrackParam param = parMinZ;
1166 if (Abs(dX) < xCut && Abs(dY) < yCut && Abs(dX) < Abs(minDX) && Abs(dY) < Abs(minDY)) {
1203 cout <<
"REFIT started" << endl;
1206 fPDG = (parFirst.GetQp() > 0.) ? 2212 : -211;
1208 Double_t totChi2 = 0.0;
1222 for (Int_t hitIdx = 0; hitIdx < cbmTrack->
GetNStsHits(); hitIdx++) {
1229 }
else if (fInnerTracks) {
1231 for (Int_t hitIdx = 0; hitIdx < gemTrack->
GetNHits(); hitIdx++) {
1329 for (Int_t hitIdx = cbmTrack->
GetNStsHits() - 1; hitIdx >= 0; hitIdx--) {
1337 }
else if (fInnerTracks) {
1339 for (Int_t hitIdx = gemTrack->
GetNHits() - 1; hitIdx >= 0; hitIdx--) {
1367 pos = TVector3(fVertexL1->
GetX(), fVertexL1->
GetY(), fVertexL1->
GetZ());
1369 pos = TVector3(0.0, 0.0, 0.0);
1371 TVector3 dpos = TVector3(0.05, 0.05, 0.0);
1394 Int_t pdg = (par.GetQp() > 0) ? 2212 : -211;
1396 Double_t Alpha_in = ATan(par.GetTx());
1398 Double_t Bdl = Abs(MagFieldIntegral(par, -200.0, 600.0, 1.0) * 0.001);
1400 Double_t Alpha_out = ATan(par.GetTx());
1410 Double_t momInt = 0.3 * Bdl / (Sin(Alpha_out) - Sin(Alpha_in));
1412 if (!IsNaN(momInt) && Abs(momInt) > 0.01 && Abs(momInt) < 100) {
1423 printf(
"Work time of BmnGlobalTracking: %4.2f sec.\n", fTime);
1427Double_t BmnGlobalTracking::MagFieldIntegral(FairTrackParam& par, Double_t zMin, Double_t zMax, Double_t step)
1433 Int_t pdg = (par.GetQp() > 0.) ? 2212 : -211;
1434 FairField* field = FairRunAna::Instance()->GetField();
1436 Double_t z = par.GetZ();
1437 Double_t integral = 0.0;
1441 integral += field->GetBy(par.GetX(), par.GetY(), par.GetZ());
1447void BmnGlobalTracking::PrintStatistics()
1449 printf(
"================================================================================\n");
1450 printf(
"======= Statistics of Global tracking\n");
1451 printf(
"======= Number of input inner tracks: %ld\n", fNInnerTracks);
1452 printf(
"======= Number of input inner tracks with 4+ hits extrapolated to the Vertex: %ld (%4.1f%%)\n",
1453 fNGoodInnerTracks, fNGoodInnerTracks * 100.0 / fNInnerTracks);
1454 printf(
"======= Number of tracks matched with near CSC: %ld\n", fNMatchedNearCsc);
1455 printf(
"======= Number of tracks matched with TOF-400: %ld\n", fNMatchedTof400);
1456 printf(
"======= Number of tracks matched with far CSC: %ld\n", fNMatchedFarCsc);
1457 printf(
"======= Number of tracks matched with DCH-1: %ld\n", fNMatchedDch1);
1458 printf(
"======= Number of tracks matched with TOF-700: %ld\n", fNMatchedTof700);
1459 printf(
"======= Number of tracks matched with DCH-2: %ld\n", fNMatchedDch2);
1460 printf(
"======= Number of refitted output tracks: %ld (%4.1f%%)\n", fNGoodGlobalTracks,
1461 fNGoodGlobalTracks * 100.0 / fNInnerTracks);
1462 printf(
"================================================================================\n");
1470 resultTree->Branch(
"BmnDchHit", &fDchHits);
1472 resultTree->Branch(
"BmnGlobalTrack", &fGlobalTracks);
void UpdateTrackParam(FairTrackParam *initPar, const FairTrackParam *detPar, Double_t &chiSq)
vector< Double_t > dist(vector< Double_t > qp, Double_t mu)
Bool_t IsParCorrect(const FairTrackParam *par, const Bool_t isField)
Int_t GetPointModuleOwnership(Double_t xcoord, Double_t ycoord, Double_t zcoord)
void SetChi2InVertex(Double_t chi)
void SetScWallSignal(Double_t sig)
void SetGemTrackIndex(Int_t iGem)
void AddCscHitIndex(Int_t i, Int_t iCsc)
Int_t GetTof2HitIndex() const
Int_t GetDchTrackIndex() const
void SetDch1TrackIndex(Int_t iDch1Track)
void SetTof2HitIndex(Int_t iTof2Hit)
void SetDchTrackIndex(Int_t iDch)
Int_t GetCscHitIndex(Int_t idx) const
void SetDCAInVertex(Double_t chi)
Int_t GetGemTrackIndex() const
void SetBeta(Double_t b, Int_t tofID)
Int_t GetTof1HitIndex() const
void SetdQdNLower(Double_t q)
void SetDch2TrackIndex(Int_t iDch2Track)
void SetScWallCellId(Int_t iScWall)
void SetTof1HitIndex(Int_t iTof1Hit)
BmnGlobalTracking()
Constructor.
virtual ~BmnGlobalTracking()
Destructor.
virtual void Exec(Option_t *opt)
Inherited from FairTask.
virtual void OnlineWrite(const std::unique_ptr< TTree > &resultTree)
Write task resul to tree.
virtual InitStatus Init()
Inherited from FairTask.
virtual void Finish()
Inherited from FairTask.
void SetModule(Int_t mod)
void SetLength(Double_t len)
void SetUsing(Bool_t use)
void SetResXY(Double_t resX, Double_t resY)
Short_t GetStation() const
BmnStatus TGeoTrackPropagate(FairTrackParam *par, Double_t zOut, Int_t pdg, vector< Double_t > *F, Double_t *length, Bool_t isField)
BmnStatus Update(FairTrackParam *par, const BmnHit *hit, Double_t &chiSq)
Class for Bmn ScWall module data container in event.
float GetSignal() const
Deposited Signal.
Class for Bmn ScWall data container in event.
BmnScWallCell * GetCell(uint8_t cell_id)
Cell info.
void SetChi2(Double_t chi2)
Float_t GetLength() const
void SetParamLast(FairTrackParam &par)
FairTrackParam * GetParamFirst()
Int_t GetHitIndex(Int_t iHit) const
void SetParamFirst(FairTrackParam &par)
FairTrackParam * GetParamLast()
void SetLength(Double_t length)
virtual Int_t GetStationNr() const
Int_t GetSystemId() const
FairTrackParam * GetParamLast()
Int_t GetNStsHits() const
Int_t GetStsHitIndex(Int_t iHit) const
FairTrackParam * GetParamFirst()
Double_t GetCovariance(Int_t i, Int_t j) const