BmnRoot
Loading...
Searching...
No Matches
BmnStsVectorFinder.h
Go to the documentation of this file.
1// -------------------------------------------------------------------------
2// ----- BmnStsVectorFinder header file -----
3// ----- Created 3/12/21 by A.Zinchenko, D.Zinchenko, R.Zinchenko -----
4// -------------------------------------------------------------------------
5
12#ifndef BMNSTSVECTORFINDER_H
13#define BMNSTSVECTORFINDER_H 1
14
15#include "BmnStsKFTrackFitter.h"
16#include "CbmStsKFTrackFitter.h"
17#include "CbmStsTrack.h"
18
19#include "FairTask.h"
20
21#include <TClonesArray.h>
22#include <TMVA/Reader.h> //AZ-300922
23#include <TProfile2D.h>
24#include <TVector3.h>
25
26#include <set>
27#include <string>
28#include <unordered_map>
29
30//typedef std::pair<Double_t,std::map<Int_t,Int_t> > candvec;
31
32class BmnStsVectorFinder : public FairTask
33{
34
35 public:
36
37 struct hitinfo {
39 hitinfo (TVector3 v3, Double_t phxi, Double_t txi, Double_t tyi) : xyz(v3), phx(phxi), tx(txi), ty(tyi), used(0) {;}
40 TVector3 xyz;
41 Double_t phx;
42 Double_t tx;
43 Double_t ty;
44 int used;
45 };
46
47 struct candvec {
48 Int_t nskips;
49 Int_t idmaxP;
50 Double_t momxz;
51 Double_t ty;
52 Double_t lengxz;
53 //Double_t varx;
54 Double_t tx;
55 std::map<Int_t,Int_t> stahit;
56 std::string code;
57 FairTrackParam param;
58 Double_t chi2;
60 candvec (Double_t momi, std::map<Int_t,Int_t> stahi) : nskips(0), momxz(momi), stahit(stahi) {;}
61 };
62
65
68
70 virtual InitStatus Init();
71
73 virtual void Exec(Option_t* opt);
74
76 virtual void FinishEvent();
77
79 virtual void Finish();
80
81 void SetMatBudgetFileName (TString s) { fMatBudgetFileName = s; }
82 void SetNofSiStations(int nsi) { fNSi = nsi; } //AZ-051022
83
84 private:
85
86 //void ReadMatBudget();
87 Int_t ExcludeHits(Int_t minHits, TClonesArray *trArray);
88 std::set<Int_t> GetHitId(CbmStsHit *hit, Int_t &idmaxP);
89 std::set<Int_t> GetHitIdBmn(CbmStsHit *hit, Int_t &idmaxP);
90 std::set<Int_t> GetHitId(Int_t hitInd, Int_t &idmaxP) {
91 return GetHitId((CbmStsHit*)fHitArray->UncheckedAt(hitInd), idmaxP); }
92 void BuildTrackCand();
93 void BuildDoublets();
94 Bool_t CheckVarx(Double_t dx, Double_t dz, Double_t tx, Double_t distxz, Double_t& varx); //AZ-310722
95 void BuildTriplets();
96 void BuildTracks();
97 void ExtendTrack(candvec cand);
98 Double_t FitTrack(candvec &cand);
99 Double_t FilterHit(candvec &cand, CbmStsTrack &track);
100 void MakeStsTrack(candvec &cand, std::string &hitcode, CbmStsTrack &track);
101 void ExtendTracks(Int_t ista);
102 TVector3 Parabola(TVector3& pos0, TVector3& pos1, TVector3& pos2);
103 void FitTracks();
104 void RemoveDoubles();
105 Bool_t AreTracksDoubles(CbmStsTrack &tr1, CbmStsTrack &tr2);
106 void RemoveFakes();
107 void ExcludeFakes();
108 Double_t DxVsMom(Int_t ista, candvec &aaa);
109 Double_t Proxim(Double_t ang1, Double_t ang2);
110 //AZ-280722 Double_t LinearFit(CbmStsTrack *tr, Int_t newtr, Double_t &ty);
111 Double_t LinearFit(candvec &cand, candvec &cand2, CbmStsTrack *tr, Int_t newtr, Double_t &ty); //AZ-280722
112 Double_t Curv3(candvec &cand1, candvec &cand2, candvec &cand3, int newtr3);
113 std::set<int> KalmanWindow(candvec &cand, int hitIndx);
114 std::string MakeCode(candvec &cand);
115 void PrintHits(candvec &cand);
116 void InitTMVA3(); //AZ-300922
117 Float_t TMVAOutput3(candvec &aaa1, candvec &aaa2); //AZ-300922
118 void InitTMVA2(); //AZ-221022
119 Float_t TMVAOutput2(candvec &aaa1); //AZ-241022
120
122 TClonesArray *fClusArray[4], *fHitArray, *fTrackArray, *fDigiMatches, *fStsPoints, *fSilPoints;
123 TClonesArray *fVectorArray; // output tracks
124 Int_t fPass; // pass number
125 Int_t fNsta; // number of stations
126 Int_t fNbranches; // max number of branches in a triplet from one doublet
127 Int_t fExact; // exact match - for debug
128 Int_t fExactSel; // exact match for selected ID - for debug
129 Int_t discarded; // number of discarded 3-hit candidates with bad chi2, debug
130 int fOut; //AZ-210922 - flag for writing out
131 TVector3 fXyzv; // mean vertex position
132 Double_t fBy; // max. field in Tesla
133 std::multimap<Double_t,Int_t> fmapPhx[19], fmapTy[19], fmapX[19], fmapY[19];
134 std::vector<candvec> fSeedVec[19]; //
135 std::vector<candvec> fCandVec[19]; //
136 std::set<string> fCandCodes[19];
137 //std::multimap<Int_t,candvec> fCandMap2[19]; //
138 //std::multimap<Int_t,candvec> fCandMap3[19]; //
139
140 std::vector<candvec> fCandVec2[19]; // doublets
141 std::map<std::string,int> fMap2Out; //AZ-210922 - doublets for writing out
142 std::map<std::string,int> *fMap2OutPtr; //AZ-210922 - doublets for writing out
143 std::map<std::string,int> fMap3Out; //AZ-260922 - triplets for writing out
144 std::map<std::string,int> *fMap3OutPtr; //AZ-260922 - triplets for writing out
145 //AZ-130722 std::multimap<int,int> fMap2[19]; // hit index -> index in fCandVec2
146 std::unordered_multimap<int,int> fMap2[19]; //AZ-130722 hit index -> index in fCandVec2
147
148 std::vector<candvec> fCandVec3[19]; // triplets
149 //AZ-130722 std::multimap<int,int> fMap3[19]; // hit index -> index in fCandVec3
150 std::unordered_multimap<int,int> fMap3[19]; //AZ-130722 hit index -> index in fCandVec3
151 //AZ-130722 std::map<std::string,int> fMapCode3[19]; // triplet code -> index in fCandVec3
152 std::unordered_map<std::string,int> fMapCode3[19]; //AZ-130722 triplet code -> index in fCandVec3
153
154 std::multimap<Double_t,CbmStsTrack> fTracks; //
155 //AZ-130722 std::map<Int_t,hitinfo> fmapHits;
156 std::unordered_map<Int_t,hitinfo> fmapHits; //AZ-130722
157 //AZ-130722 std::multimap<Int_t,Int_t> fHit2id, fClusMaps[2];
158 std::unordered_multimap<Int_t,Int_t> fHit2id, fClusMaps[2]; //AZ-130722
159 Int_t *fNhitsMin, fNskips[20];
160 Double_t *fdTanX, *fdTanY, *fdTanY3, *fdTanXB0, *fPhiXZ, *fTanXmax, *fZmean, *fPTcut, *fCurvSta;
161 //CbmStsKFTrackFitter fitter;
162 BmnStsKFTrackFitter fitter;
163 std::set<string> fCandSet[19];
164
165 TString fMatBudgetFileName;
166 //std::map<Double_t,TProfile2D*> fMatHistos;
167 int fUseTMVA; //AZ-300922
168 int fNSi; //AZ-051022
169 Float_t fVarTMVA[20]; //AZ-300922
170 TMVA::Reader *fReaderTMVA3; //AZ-300922
171 TMVA::Reader *fReaderTMVA2; //AZ-221022
172
174 BmnStsVectorFinder& operator=(const BmnStsVectorFinder&);
175
176 ClassDef(BmnStsVectorFinder,0);
177
178};
179
180#endif
virtual InitStatus Init()
void SetMatBudgetFileName(TString s)
virtual void Finish()
virtual void FinishEvent()
void SetNofSiStations(int nsi)
virtual void Exec(Option_t *opt)
candvec(Double_t momi, std::map< Int_t, Int_t > stahi)
std::map< Int_t, Int_t > stahit
hitinfo(TVector3 v3, Double_t phxi, Double_t txi, Double_t tyi)