BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnStsVectorFinderV9.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
6/*** BmnStsVectorFinder.h
7 *@author A.Zinchenko <Alexander.Zinchenko@jinr.ru>
8 **
9 ** Vector Finder in BM@N tracker
10 **/
11
12#ifndef BMNSTSVECTORFINDERV9_H
13#define BMNSTSVECTORFINDERV9_H 1
14
15#include "BmnGemStripStationSet.h"
16#include "BmnSiliconStationSet.h"
17#include "BmnStsKFTrackFitter.h"
18#include "BmnToCbmHitConverter.h" // AZ-230626
19#include "CbmStsKFTrackFitter.h"
20#include "CbmStsTrack.h"
21#include "FairTask.h"
22
23#include <TClonesArray.h>
24#include <TMVA/Reader.h> //AZ-300922
25#include <TProfile2D.h>
26#include <TVector3.h>
27#include <fstream>
28#include <set>
29#include <string>
30#include <unordered_map>
31
32// typedef std::pair<Double_t,std::map<Int_t,Int_t> > candvec;
33
34class BmnStsVectorFinderV9 : public FairTask
35{
36
37 public:
38 struct hitinfo
39 {
42 : xyz(v3)
43 , phx(phxi)
44 , tx(txi)
45 , ty(tyi)
46 , used(0)
47 {
48 ;
49 }
54 int used;
55 };
56
57 struct candvec
58 {
64 // Double_t varx;
66 std::map<Int_t, Int_t> stahit;
67 std::string code;
68 FairTrackParam param;
71 candvec(Double_t momi, std::map<Int_t, Int_t> stahi)
72 : nskips(0)
73 , momxz(momi)
74 , stahit(stahi)
75 {
76 ;
77 }
78 };
79
80 /** Default constructor **/
82
83 /** Destructor **/
85
86 /** Virtual method Init **/
87 virtual InitStatus Init();
88
89 /** Virtual method Exec **/
90 virtual void Exec(Option_t* opt);
91
92 /** Virtual method FinishEvent **/
93 virtual void FinishEvent();
94
95 /** Virtual method Finish **/
96 virtual void Finish();
97
99 void SetNofSiStations(int nsi) { fNSi = nsi; } // AZ-051022
100 int GetNofSiStations() const { return fNSi; } // AZ-280725
101 void SetOutBranch(TString outBranch) { fOutBranch = outBranch; } // AZ-041125
102 void SetExactSel(int trID) { fExactSel = trID; } // AZ-251225
103 TClonesArray* GetVectorArray() { return fVectorArray; } // AZ-230626
104 void SetKillHitsTxP(int ikill = 1) { fKillHitsTxP = ikill; } // AZ-230626
105 void SetTracksToKill(TClonesArray* tracks) { fTracksToKill = tracks; } // AZ-230626
106
107 private:
108 // void ReadMatBudget();
109 void ReadTxInfo(TString fileName);
111 std::set<Int_t> GetHitId(CbmStsHit* hit, Int_t& idmaxP);
112 std::set<Int_t> GetHitIdBmn(CbmStsHit* hit, Int_t& idmaxP);
113 std::set<Int_t> GetHitId(Int_t hitInd, Int_t& idmaxP)
114 {
115 return GetHitId((CbmStsHit*)fHitArray->UncheckedAt(hitInd), idmaxP);
116 }
117 // AZ-080623 void BuildTrackCand();
118 void FillHitInfo(); // AZ-080623
120 int FindBin(int ista, Float_t binw, Float_t tx);
121 Float_t BinCenterTx(int ista, int ibin, Float_t binw);
122 void DTxWindow(int ista2, Float_t tx, int idu, Float_t curvCut, Float_t* dtx);
123 Bool_t CheckVarx(Double_t dx, Double_t dz, Double_t tx, Double_t distxz, Double_t& varx); // AZ-310722
129 void MakeStsTrack(candvec& cand, std::string& hitcode, CbmStsTrack& track);
130 void ExtendTracks(Int_t ista);
131 TVector3 Parabola(TVector3& pos0, TVector3& pos1, TVector3& pos2, int ix = 0);
132 void FitTracks();
139 // AZ-280722 Double_t LinearFit(CbmStsTrack *tr, Int_t newtr, Double_t &ty);
140 Double_t LinearFit(candvec& cand, candvec& cand2, CbmStsTrack* tr, Int_t newtr, Double_t& ty); // AZ-280722
141 Double_t Curv3(candvec& cand1, candvec& cand2, candvec& cand3, int newtr3);
142 std::set<int> KalmanWindow(candvec& cand, int hitIndx);
143 std::string MakeCode(candvec& cand);
144 void PrintHits(candvec& cand);
145 void InitTMVA3(); // AZ-300922
146 Float_t TMVAOutput3(candvec& aaa1, candvec& aaa2, int mult2); // AZ-300922
147 void InitTMVA2(); // AZ-221022
148 Float_t TMVAOutput2(candvec& aaa1); // AZ-241022
149 void InitTMVAtracks(); // AZ-040525
150 void TMVAOutputTra(); // AZ-040525
151 void GoToTarget(); // AZ-240625
152 void KillHitsTxP(); // AZ-230626
153
154 /** Input / output array of CbmStsHits **/
156 TClonesArray* fVectorArray; // output tracks
157 int fEvent;
158 Int_t fPass; // pass number
159 Int_t fNsta; // number of stations
160 Int_t fNbranches; // max number of branches in a triplet from one doublet
161 Int_t fExact; // exact match - for debug
162 Int_t fExactSel; // exact match for selected ID - for debug
163 Int_t discarded; // number of discarded 3-hit candidates with bad chi2, debug
164 int fOut; // AZ-210922 - flag for writing out
165 TVector3 fXyzv; // mean vertex position
166 Double_t fBy; // max. field in Tesla
167 // AZ-080623 std::multimap<Double_t,Int_t> fmapPhx[19], fmapTy[19], fmapX[19], fmapY[19];
168 std::multimap<Double_t, Int_t> fmapTx[19], fmapTy[19], fmapX[19], fmapY[19];
169 std::vector<candvec> fSeedVec[19]; //
170 std::vector<candvec> fCandVec[19]; //
171 std::set<string> fCandCodes[19];
172 // std::multimap<Int_t,candvec> fCandMap2[19]; //
173 // std::multimap<Int_t,candvec> fCandMap3[19]; //
174
175 std::vector<candvec> fCandVec2[19]; // doublets
176 std::unordered_map<std::string, int> fMap2Out; // AZ-210922 - doublets for writing out
177 // AZ-240623 std::map<std::string,int> *fMap2OutPtr; //AZ-210922 - doublets for writing out
178 std::unordered_map<std::string, int> fMap3Out; // AZ-260922 - triplets for writing out
179 // AZ-240623 std::map<std::string,int> *fMap3OutPtr; //AZ-260922 - triplets for writing out
180 std::ofstream fStream2out; // 240623
181 std::ofstream fStream3out; // 240623
182 // AZ-130722 std::multimap<int,int> fMap2[19]; // hit index -> index in fCandVec2
183 std::unordered_multimap<int, int> fMap2[19]; // AZ-130722 hit index -> index in fCandVec2
184
185 std::vector<candvec> fCandVec3[19]; // triplets
186 // AZ-130722 std::multimap<int,int> fMap3[19]; // hit index -> index in fCandVec3
187 std::unordered_multimap<int, int> fMap3[19]; // AZ-130722 hit index -> index in fCandVec3
188 // AZ-130722 std::map<std::string,int> fMapCode3[19]; // triplet code -> index in fCandVec3
189 std::unordered_map<std::string, int> fMapCode3[19]; // AZ-130722 triplet code -> index in fCandVec3
190
191 std::multimap<Double_t, CbmStsTrack> fTracks; //
192 // AZ-130722 std::map<Int_t,hitinfo> fmapHits;
193 std::unordered_map<Int_t, hitinfo> fmapHits; // AZ-130722
194 // AZ-130722 std::multimap<Int_t,Int_t> fHit2id, fClusMaps[2];
195 std::unordered_multimap<Int_t, Int_t> fHit2id, fClusMaps[2]; // AZ-130722
196 // AZ-240626 Int_t *fNhitsMin, fNskips[20];
197 // AZ-240626 Double_t *fdTanX, *fdTanY, *fdTanY3, *fdTanXB0, *fPhiXZ, *fTanXmax, *fZmean, *fPTcut, *fCurvSta;
198 int fNskips[20];
199 vector<int> fNhitsMin;
201
202 // CbmStsKFTrackFitter fitter;
204 std::set<string> fCandSet[19];
205
206 // AZ-070623 - binned hits in Tx
207 std::unordered_multimap<int, int> fTxBins[19];
208 std::unordered_map<int, std::unordered_map<int, std::vector<Float_t>>> fStatData;
211
213 // std::map<Double_t,TProfile2D*> fMatHistos;
214 int fUseTMVA; // AZ-300922
215 int fTMVAtracks; // AZ-040525
216 int fNSi; // AZ-051022
217 Float_t fVarTMVA[20]; // AZ-300922
218 // TMVA::Reader* fReaderTMVA3; // AZ-300922
219 std::map<int, TMVA::Reader*> fReadersTMVA3; // AZ-080525 - for triplets
220 TMVA::Reader* fReaderTMVA2; // AZ-221022
221 std::map<int, TMVA::Reader*> fTmvaReaders; // AZ-040525 - for tracks
222 // std::ofstream *fOutf; // AZ-290525
223
227 int fKillHitsTxP; // AZ-230626
228 TClonesArray* fTracksToKill; // AZ-230626
230 BmnGemStripStationSet* fGemStationSet; //! Entire GEM detector
231 BmnSiliconStationSet* fSilStationSet; //! Entire SILICON detector
232
235
237};
238
239#endif
bool Bool_t
int Int_t
float Float_t
double Double_t
const char Option_t
#define ClassDef(name, id)
std::set< string > fCandCodes[19]
std::unordered_multimap< int, int > fMap3[19]
virtual void FinishEvent()
Virtual method FinishEvent.
Double_t Curv3(candvec &cand1, candvec &cand2, candvec &cand3, int newtr3)
std::unordered_multimap< int, int > fTxBins[19]
void ReadTxInfo(TString fileName)
std::unordered_multimap< Int_t, Int_t > fHit2id
virtual void Exec(Option_t *opt)
Virtual method Exec.
vector< Double_t > fPTcut
vector< Double_t > fCurvSta
virtual InitStatus Init()
Virtual method Init.
std::multimap< Double_t, Int_t > fmapTx[19]
Float_t TMVAOutput3(candvec &aaa1, candvec &aaa2, int mult2)
vector< Double_t > fPhiXZ
void SetKillHitsTxP(int ikill=1)
vector< Double_t > fdTanX
virtual void Finish()
Virtual method Finish.
std::multimap< Double_t, Int_t > fmapX[19]
std::unordered_map< Int_t, hitinfo > fmapHits
void ExtendTracks(Int_t ista)
std::set< Int_t > GetHitId(CbmStsHit *hit, Int_t &idmaxP)
std::set< Int_t > GetHitId(Int_t hitInd, Int_t &idmaxP)
BmnStsVectorFinderV9 & operator=(const BmnStsVectorFinderV9 &)
void ExtendTrack(candvec cand)
std::vector< candvec > fCandVec2[19]
vector< Double_t > fZmean
void DTxWindow(int ista2, Float_t tx, int idu, Float_t curvCut, Float_t *dtx)
Int_t ExcludeHits(Int_t minHits, TClonesArray *trArray)
TClonesArray * GetVectorArray()
std::unordered_map< int, std::unordered_map< int, std::vector< Float_t > > > fStatData
Double_t Proxim(Double_t ang1, Double_t ang2)
vector< Double_t > fTanXmax
void MakeStsTrack(candvec &cand, std::string &hitcode, CbmStsTrack &track)
std::map< int, TMVA::Reader * > fTmvaReaders
std::vector< candvec > fCandVec[19]
BmnToCbmHitConverter * fHitConverter
std::vector< candvec > fSeedVec[19]
void SetTracksToKill(TClonesArray *tracks)
Double_t LinearFit(candvec &cand, candvec &cand2, CbmStsTrack *tr, Int_t newtr, Double_t &ty)
std::set< Int_t > GetHitIdBmn(CbmStsHit *hit, Int_t &idmaxP)
Double_t FitTrack(candvec &cand)
std::multimap< Double_t, Int_t > fmapY[19]
BmnStsKFTrackFitter fitter
std::unordered_multimap< Int_t, Int_t > fClusMaps[2]
Double_t FilterHit(candvec &cand, CbmStsTrack &track)
std::string MakeCode(candvec &cand)
~BmnStsVectorFinderV9()
Destructor.
std::map< int, TMVA::Reader * > fReadersTMVA3
std::unordered_map< std::string, int > fMap2Out
std::unordered_map< std::string, int > fMap3Out
Float_t BinCenterTx(int ista, int ibin, Float_t binw)
std::set< Int_t > GetHitId(CbmStsHit *hit, Int_t &idmaxP)
std::set< int > KalmanWindow(candvec &cand, int hitIndx)
BmnGemStripStationSet * fGemStationSet
vector< Double_t > fdTanXB0
int FindBin(int ista, Float_t binw, Float_t tx)
Float_t TMVAOutput2(candvec &aaa1)
vector< Double_t > fdTanY
std::multimap< Double_t, CbmStsTrack > fTracks
vector< Double_t > fdTanY3
void SetOutBranch(TString outBranch)
std::unordered_map< std::string, int > fMapCode3[19]
void SetMatBudgetFileName(TString s)
Double_t DxVsMom(Int_t ista, candvec &aaa)
void PrintHits(candvec &cand)
BmnStsVectorFinderV9(const BmnStsVectorFinderV9 &)
Entire SILICON detector.
std::multimap< Double_t, Int_t > fmapTy[19]
TClonesArray * fClusArray[4]
Input / output array of CbmStsHits.
std::unordered_multimap< int, int > fMap2[19]
Bool_t AreTracksDoubles(CbmStsTrack &tr1, CbmStsTrack &tr2)
BmnStsVectorFinderV9()
Default constructor.
std::set< string > fCandSet[19]
Bool_t CheckVarx(Double_t dx, Double_t dz, Double_t tx, Double_t distxz, Double_t &varx)
TVector3 Parabola(TVector3 &pos0, TVector3 &pos1, TVector3 &pos2, int ix=0)
BmnSiliconStationSet * fSilStationSet
Entire GEM detector.
std::vector< candvec > fCandVec3[19]
std::map< Int_t, Int_t > stahit
candvec(Double_t momi, std::map< Int_t, Int_t > stahi)
hitinfo(TVector3 v3, Double_t phxi, Double_t txi, Double_t tyi)