7#include "BmnStsMatchTracks.h"
10#include "CbmStsCluster.h"
11#include "CbmStsDigiMatch.h"
12#include "CbmStsDigiScheme.h"
14#include "CbmStsPoint.h"
15#include "CbmStsSector.h"
16#include "CbmStsStation.h"
17#include "CbmStsTrack.h"
18#include "FairRootManager.h"
19#include "FairRunAna.h"
79 for (
int j = 0; j < 4; ++j)
94 FairRootManager* ioman = FairRootManager::Instance();
96 cout <<
"-E- BmnStsVectorFinderV9::Init: " <<
"RootManager not instantiated!" << endl;
110 for (
int j = 0; j < 4; ++j) {
113 cout <<
"-W- BmnStsVectorFinderV9::Init: " <<
"No BmnCluster array!" << j << endl;
166 fStream3out.open(
"triplets.txt", std::ofstream::out);
172 fStream2out.open(
"doublets.txt", std::ofstream::out);
182 vector<int> nHitsMin = {7, 5, 4, 4};
185 vector<Double_t> dTanX = {0.002, 0.003, 0.002, 0.008};
186 vector<Double_t> dTanXTMVA = {0.003, 0.0045, 0.003, 0.012};
187 vector<Double_t> dTanXB0 = {0.001, 0.002, 0.002, 0.002};
190 vector<Double_t> dTanY = {0.02, 0.02, 0.02, 0.03};
192 vector<Double_t> dTanYTMVA = {0.015, 0.03, 0.03, 0.045};
193 vector<Double_t> dTanYB0 = {0.01, 0.02, 0.02, 0.02};
195 vector<Double_t> dTanY3 = {0.03, 0.02, 0.015, 0.015};
196 vector<Double_t> dTanY3TMVA = {0.015, 0.03, 0.03, 0.045};
197 vector<Double_t> dTanY3B0 = {0.01, 0.02, 0.02, 0.02};
198 vector<Double_t> dTanXzero = {0.01, 0.02, 0.02, 0.02};
201 vector<Double_t> ptCut = {1.0, 0.7, 0.3, 0.1};
202 vector<Double_t> ptCutB0 = {1., 1., 1., 1.};
204 vector<Double_t> curvSta = {
205 12.0, 12.0, 12.0, 7.5, 5.5, 4.5,
206 3.6, 3.0, 3.0, 3.0, 3.0};
207 vector<Double_t> curvSta41 = {
208 12.0, 12.0, 12.0, 12.0, 7.5, 5.5, 4.5,
209 3.6, 3.0, 3.0, 3.0, 3.0};
212 vector<Double_t> phiXZ = {0.76, 0.69, 0.69, 0.95, 0.74, 0.60, 0.51, 0.44, 0.39, 0.35};
215 vector<Double_t> phiXZ4 = {0.60, 0.63, 0.61, 0.62, 0.95, 0.74,
216 0.60, 0.51, 0.44, 0.39, 0.35};
217 vector<Double_t> phiXZ41 = {1.00, 0.60, 0.63, 0.61, 0.62, 0.95,
218 0.74, 0.60, 0.51, 0.44, 0.39, 0.35};
219 vector<Double_t> tanXmax = {0.95, 0.83, 0.83, 1.40, 0.91, 0.68, 0.56, 0.47, 0.41, 0.37};
222 vector<Double_t> tanXmax4 = {0.68, 0.73, 0.69, 0.71, 1.40, 0.91,
223 0.68, 0.56, 0.47, 0.41, 0.37};
224 vector<Double_t> tanXmax41 = {1.50, 0.68, 0.73, 0.69, 0.71, 1.40,
225 0.91, 0.68, 0.56, 0.47, 0.41, 0.37};
226 vector<Double_t> zMean = {18.5, 27.2, 35.8, 60.9, 91.7, 123.4, 154.0, 185.8, 216.5, 248.0};
230 vector<Double_t> zMean4 = {17.6, 26.4, 35.1, 43.7, 63.6, 94.2,
231 126.5, 156.8, 189.0, 219.2, 251.4};
232 vector<Double_t> zMean41 = {7.6, 17.6, 26.4, 35.1, 43.7, 63.6,
233 94.2, 126.5, 156.8, 189.0, 219.2, 251.4};
236 FairField* magField = FairRunAna::Instance()->GetField();
267 for (
int j = 0; j < (int)
fPTcut.size(); ++j)
280 for (
Int_t j = 0; j < (int)dTanX.size(); ++j) {
290 for (
int j = 0; j < (int)
fCurvSta.size(); ++j)
297 fileGraphs +=
"/parameters/reco/";
299 fileGraphs +=
"fitGraphs_8kG.txt";
301 fileGraphs +=
"fitGraphs_8kG_vsp.txt";
319 cout <<
"-I- BmnStsVectorFinderV9: Intialisation successfull" << endl;
332 cout <<
" !!! Error opening Tx file " << fileName << endl;
337 int ista0 = -1, ista2;
338 vector<Float_t> params(10);
353 ista2 = 100 * ista0 + ista1;
358 unordered_map<int, vector<Float_t>> mstat;
376 for (
int j = 0; j < 5; ++j)
389 cout <<
"-I- BmnStsVectorFinderV9: Station info has been read from " << fileName << endl;
402 Fatal(
"Exec",
"No StsHit array");
414 for (
Int_t j = 0; j < 19; ++j) {
429 const Int_t nPass = 4;
431 for (
Int_t j = 0; j < nPass; ++j)
443 for (
Int_t ihit = 0; ihit < nHits0; ++ihit) {
445 if (hit->GetUniqueID() != 999)
447 if (hit->GetZ() > 400.0)
451 fClusMaps[0].insert(pair<Int_t, Int_t>(iclusF, ihit));
452 fClusMaps[1].insert(pair<Int_t, Int_t>(iclusB, ihit));
457 set<Int_t> idset =
GetHitId(hit, idmaxP);
458 for (set<Int_t>::iterator sit = idset.begin(); sit != idset.end(); ++sit)
459 fHit2id.insert(pair<Int_t, Int_t>(ihit, *sit));
468 for (
Int_t ipass = 0; ipass < nPass; ++ipass) {
478 cout <<
"-I- BmnStsVectorFinderV9: start - " << nHits0 <<
", end - " << nHits0 - nHitsOut << endl;
500 cout <<
"\n ***** Pass " << ipass <<
": Number of found tracks = " <<
fVectorArray->GetEntriesFast() - ntr0
508 cout <<
"discarded " <<
discarded <<
" track candidates" << endl;
538 unordered_multimap<Int_t, Int_t>::iterator mit;
539 pair<unordered_multimap<Int_t, Int_t>::iterator, unordered_multimap<Int_t, Int_t>::iterator> ret;
541 for (
Int_t itra = 0; itra < nTracks; ++itra) {
550 for (
Int_t ihit = 0; ihit < nHitsTr; ++ihit) {
562 for (mit = ret.first; mit != ret.second; ++mit) {
564 if (hit1->GetUniqueID() == 0)
566 hit1->SetUniqueID(1);
572 for (mit = ret.first; mit != ret.second; ++mit) {
574 if (hit1->GetUniqueID() == 0)
576 hit1->SetUniqueID(1);
581 if (hit->GetUniqueID() == 0)
590 ret =
fMap2[ista].equal_range(indx);
591 fMap2[ista].erase(ret.first, ret.second);
593 ret =
fMap3[ista].equal_range(indx);
594 for (mit = ret.first; mit != ret.second; ++mit) {
599 fMap3[ista].erase(ret.first, ret.second);
626 map<Int_t, Double_t> indF, indB;
632 for (
Int_t j = 0; j < nDigis; ++j) {
634 for (
Int_t j1 = 0; j1 < 3; ++j1) {
640 indF[p->GetTrackID()] = mom3.
Mag();
646 for (
Int_t j = 0; j < nDigis; ++j) {
648 for (
Int_t j1 = 0; j1 < 3; ++j1) {
654 indB[p->GetTrackID()] = 1.0;
660 for (map<Int_t, Double_t>::iterator mit = indF.begin(); mit != indF.end(); ++mit) {
661 Int_t id = (indB.count(mit->first) == 0) ? -mit->first : mit->first;
663 if (
id >= 0 && mit->second > pmax) {
670 if (hit->GetRefIndex() >= 0) {
672 idmaxP = p->GetTrackID();
676 for (map<Int_t, Double_t>::iterator mit = indB.begin(); mit != indB.end(); ++mit) {
677 if (ids.count(mit->first) > 0)
679 ids.insert(-mit->first);
706 ids.insert(p->GetTrackID());
708 idmaxP = *ids.begin();
741 cout <<
"nHits " << nHits << endl;
744 for (
Int_t ih = 0; ih < nHits; ++ih) {
746 if (hit->GetUniqueID())
748 if (hit->GetZ() > 400.0)
769 set<Int_t> ids =
GetHitId(hit, idmaxP);
775 set<Int_t> ids =
GetHitId(hit, idmaxP);
801 fmapX[ista].insert(pair<Double_t, Int_t>(pos[0], ih));
802 fmapY[ista].insert(pair<Double_t, Int_t>(pos[1], ih));
807 int ista2 = ista * 100 + ista + 1;
820 fTxBins[ista].insert(pair<int, int>(bin, ih));
881 const unordered_map<string, float> scaleMap4 = {
882 {
"01", 1.9}, {
"02", 2.8}, {
"12", 1.0}, {
"13", 1.5}, {
"23", 0.65}, {
"24", 1.4}, {
"34", 0.95},
883 {
"35", 1.5}, {
"45", 1.0}, {
"46", 1.5}, {
"56", 0.7}, {
"57", 1.0}, {
"67", 0.6}, {
"68", 0.7},
884 {
"78", 0.35}, {
"79", 0.5}, {
"89", 0.3}, {
"810", 0.35}, {
"910", 0.25}};
886 const unordered_map<string, float> scaleMap5 = {
887 {
"01", 11.5}, {
"02", 15.0}, {
"12", 1.9}, {
"13", 2.8}, {
"23", 1.0}, {
"24", 1.5}, {
"34", 0.65},
888 {
"35", 1.4}, {
"45", 0.95}, {
"46", 1.5}, {
"56", 1.0}, {
"57", 1.5}, {
"67", 0.7}, {
"68", 1.0},
889 {
"78", 0.6}, {
"79", 0.7}, {
"89", 0.35}, {
"810", 0.5}, {
"910", 0.3}, {
"911", 0.35}, {
"1011", 0.25}};
910 const unordered_map<string, float>& scaleMap = (
fNSi == 4) ? scaleMap4 : scaleMap5;
914 for (
Int_t ista = 0; ista <
fNsta - 1; ++ista) {
915 int nHits =
fTxBins[ista].size();
919 string ssta0 = to_string(ista);
921 for (
int istanext = ista + 1; istanext < ista + 3; ++istanext) {
923 if (istanext >
fNsta - 1)
925 if (
fmapX[istanext].size() == 0)
930 int nskips = istanext - (ista + 1);
931 int ibin0 = -99, ista2 = ista * 100 + istanext;
934 string ssta2 = ssta0 + to_string(istanext);
935 dty *= (scaleMap.find(ssta2)->second);
937 for (unordered_multimap<int, int>::iterator mit =
fTxBins[ista].begin(); mit !=
fTxBins[ista].end(); ++mit)
940 int ih = mit->second;
946 aaa.
stahit[ista] = mit->second;
947 aaa.
code =
"-" + to_string(aaa.
stahit[ista]) +
"-";
948 set<Int_t> ids =
GetHitId(mit->second, idmaxP);
951 int ibin = mit->first;
960 if (istanext <
fNSi) {
969 multimap<Double_t, Int_t>::iterator mitxb =
fmapTx[istanext].lower_bound(tx + dtx[0]);
970 multimap<Double_t, Int_t>::iterator mitxe =
fmapTx[istanext].upper_bound(tx + dtx[1]);
971 for (multimap<Double_t, Int_t>::iterator mit1 = mitxb; mit1 != mitxe; ++mit1)
972 if (
fmapHits[mit1->second].used == 0)
973 setTx.insert(mit1->second);
980 multimap<Double_t, candvec> mapDoublets;
983 multimap<Double_t, Int_t>::iterator mityb =
fmapTy[istanext].lower_bound(ty - dty);
984 multimap<Double_t, Int_t>::iterator mitye =
fmapTy[istanext].upper_bound(ty + dty);
986 set<Int_t> setTy, intersect;
987 for (multimap<Double_t, Int_t>::iterator mit1 = mityb; mit1 != mitye; ++mit1)
988 if (
fmapHits[mit1->second].used == 0)
989 setTy.insert(mit1->second);
990 set_intersection(setTx.begin(), setTx.end(), setTy.begin(), setTy.end(),
991 std::inserter(intersect, intersect.begin()));
998 for (set<Int_t>::iterator sit = intersect.begin(); sit != intersect.end(); ++sit) {
1000 if (hit->GetUniqueID())
1008 set<Int_t> ids1 =
GetHitId(*sit, idmaxP);
1010 if (idmaxP != aaa.
idmaxP)
1014 aaa1.
stahit[istanext] = *sit;
1019 Curv3(aaa1, aaa1, aaa1, 0);
1033 string code = to_string(ih) +
"-" + to_string(*sit);
1048 mapDoublets.insert(pair<Double_t, candvec>(-tmvaOut, aaa1));
1054 for (
auto ait = mapDoublets.begin(); ait != mapDoublets.end(); ++ait) {
1056 fMap2[ista].insert(pair<int, int>(ih,
fCandVec2[ista].size() - 1));
1066 if (fVerbose >= 1) {
1067 cout <<
" Doublet stat: " << ista <<
" " << ncand << endl;
1068 for (
int i2 = 0; i2 < ncand; ++i2)
1080 return (tx +
fTanXmax[ista]) / binw;
1089 return -
fTanXmax[ista] + binw * (ibin % 1000 + 0.5);
1102 TF1 ff(
"ff",
"pol3", -1, 1);
1108 vector<Float_t>& params =
fStatData[ista2][bintx];
1109 Float_t tMinMax[2] = {params[4], params[9]};
1111 for (
int ilr = 0; ilr < 2; ++ilr) {
1113 ff.SetParameters(params[ip], params[ip + 1], params[ip + 2], params[ip + 3]);
1114 Float_t cmax = ff.Eval(tMinMax[ilr]);
1116 if (cmax <= curvCut) {
1117 dtx[ilr] = tMinMax[ilr];
1120 xyz[1][0] = tMinMax[ilr] * curvCut / cmax;
1121 xyz[1][1] = ff.Eval(xyz[1][0]);
1122 Float_t dx = tMinMax[ilr] / 10;
1123 for (
int j = -1; j < 2; j += 2) {
1124 xyz[j + 1][0] = xyz[1][0] + j * dx;
1125 xyz[j + 1][1] = ff.Eval(xyz[j + 1][0]);
1133 Float_t d = cba[1] * cba[1] - 4 * cba[2] * (cba[0] - curvCut);
1139 if ((ilr == 0 && dthx > 0) || (ilr == 1 && dthx < 0))
1158 varx = (dx / dz - tx) / distxz;
1173 pair<unordered_multimap<Int_t, int>::iterator, unordered_multimap<Int_t, int>::iterator> ret;
1174 unordered_multimap<Int_t, int>::iterator mit, mit1;
1178 const Float_t pxzScale4[19] = {5.0, 3.8, 3.0, 2.0, 1.2, 1.0, 0.9, 1.1, 1.0};
1179 const Float_t pxzScale5[19] = {7.0, 7.0, 3.8, 3.0, 2.0, 1.2, 1.0, 0.9, 1.1, 1.0};
1182 const Float_t dtymax9[19] = {0.070, 0.095, 0.100, 0.080, 0.045, 0.035,
1183 0.035, 0.030, 0.030, 0.030, 0.03, 0.03};
1188 const Float_t beamWidth9[19] = {0.95, 0.60, 0.50, 0.45, 0.50, 0.50,
1189 0.55, 0.65, 0.75, 0.95, 1.0, 1.0};
1192 const Float_t *pxzScale = pxzScale5, *dtymax = dtymax9, *beamWidth = beamWidth9;
1194 pxzScale = pxzScale4;
1195 dtymax = &dtymax9[1];
1196 beamWidth = &beamWidth9[1];
1199 for (
Int_t ista = 0; ista <
fNsta - 2; ++ista) {
1207 for (mit =
fMap2[ista].begin(); mit !=
fMap2[ista].end(); ++mit) {
1217 ret =
fMap2[istanext].equal_range(aaa.
stahit.rbegin()->second);
1218 multimap<Double_t, candvec> mapDoublets;
1219 int nbr = 0, newtr = 0, newtr3 = 0;
1233 for (mit1 = ret.first; mit1 != ret.second; ++mit1) {
1273 int dsta = aaa2.
stahit.rbegin()->first - ista;
1275 dtym *= (2.0 / dsta);
1280 map<int, int>::iterator mitt = aaa.
stahit.begin();
1282 points[0] =
fmapHits[mitt->second].xyz;
1284 points[1] =
fmapHits[mitt->second].xyz;
1286 for (
int j3 = 0; j3 < 3; ++j3)
1287 points[j3] -=
fXyzv;
1292 Double_t beamW = beamWidth[ista] * 2;
1294 beamW *= (2.0 / dsta);
1309 map<Int_t, Int_t>& hitMap = aaa1.
stahit;
1318 for (map<Int_t, Int_t>::iterator mit2 = hitMap.begin(); mit2 != hitMap.end(); ++mit2) {
1319 hits[indx++] = mit2->second;
1344 float chi2 =
LinearFit(aaa, aaa2, &track, newtr, ty) / hit->GetDy() / hit->GetDy();
1373 string code = to_string(aaa.
stahit.begin()->second) +
"-" + to_string(aaa.
stahit.rbegin()->second)
1374 +
"-" + to_string(aaa2.
stahit.rbegin()->second);
1400 mapDoublets.insert(pair<Double_t, candvec>(qual, aaa1));
1402 nbr = mapDoublets.size();
1416 multimap<Double_t, candvec> mapTmp;
1417 for (multimap<Double_t, candvec>::iterator it = mapDoublets.begin(); it != mapDoublets.end(); ++it) {
1418 auto aaa1 = it->second;
1422 if (tmvaOut < -0.2) {
1426 mapTmp.insert(pair<Double_t, candvec>(-tmvaOut, aaa1));
1428 mapDoublets.clear();
1429 mapDoublets = mapTmp;
1435 for (multimap<Double_t, candvec>::iterator it = mapDoublets.begin(); it != mapDoublets.end(); ++it) {
1440 fMap3[ista].insert(pair<Int_t, int>(mit->first,
fCandVec3[ista].size() - 1));
1441 map<Int_t, Int_t>& hitMap = it->second.stahit;
1443 for (map<Int_t, Int_t>::iterator mitr = hitMap.begin(); mitr != hitMap.end(); ++mitr)
1444 code += (to_string(mitr->second) +
"-");
1452 cout <<
" Triplet stat: " << ista <<
" " << ncand <<
" " <<
discarded <<
" " <<
fPass << endl;
1469 for (
Int_t ista = 0; ista < istaEnd; ++ista) {
1473 std::unordered_multimap<Int_t, int>* candMap = &
fMap3[ista];
1474 vector<candvec>* candVec = &
fCandVec3[ista];
1475 Int_t nTra = candMap->size();
1482 for (unordered_multimap<Int_t, int>::iterator mit = candMap->begin(); mit != candMap->end(); ++mit) {
1483 candvec& cand = (*candVec)[mit->second];
1486 map<int, int>::iterator it = cand.
stahit.begin();
1487 int ista0 = it->first;
1489 int ista1 = it->first;
1490 if (ista1 - ista0 > 1)
1508 const Float_t pxzCuts9pos[19] = {0.215, 0.230, 0.245, 0.300, 0.265,
1509 0.235, 0.250, 0.275, 0.320};
1512 const Float_t pxzCuts9neg[19] = {0.235, 0.215, 0.185, 0.170, 0.160,
1513 0.135, 0.125, 0.120, 0.145};
1514 const Float_t* pxzCutsPos = (
fNSi == 5) ? pxzCuts9pos : &pxzCuts9pos[1];
1515 const Float_t* pxzCutsNeg = (
fNSi == 5) ? pxzCuts9neg : &pxzCuts9neg[1];
1517 Int_t nTra = 0, ista = cand.
stahit.rbegin()->first;
1521 if (ista == fNsta-2) {
1522 cand.stahit.erase(cand.stahit.rbegin()->first);
1523 ista = cand.stahit.rbegin()->first;
1532 std::unordered_multimap<Int_t, int>* pCandMap =
1536 unordered_multimap<Int_t, int>& candMap = *pCandMap;
1537 vector<candvec>& candVec = *pCandVec;
1539 if (ista <
fNsta - 1) {
1547 nTra = candMap.count(cand.
stahit.rbegin()->second);
1558 for (map<int, int>::iterator it = cand.
stahit.begin(); it != cand.
stahit.end(); ++it)
1559 code += (to_string(it->second) +
"-");
1578 unordered_multimap<Int_t, int>::iterator mit;
1579 pair<unordered_multimap<Int_t, int>::iterator, unordered_multimap<Int_t, int>::iterator> ret;
1580 ret = candMap.equal_range(cand.
stahit.rbegin()->second);
1591 for (mit = ret.first; mit != ret.second; ++mit) {
1593 candvec aaa = candVec[mit->second];
1603 map<Int_t, Int_t>::iterator mitr = aaa.
stahit.begin();
1605 if (code.size() == 1) {
1606 map<Int_t, Int_t>::reverse_iterator mit1 = cand.
stahit.rbegin();
1608 istaMid = mit1->first;
1609 code += (to_string(mit1->second) +
"-");
1611 code += (to_string(mit1->second) +
"-");
1612 code += (to_string(mitr->second) +
"-");
1615 int pos = code.rfind(
"-", code.size() - 2);
1616 code.erase(code.begin() + pos + 1, code.end());
1617 code += (to_string(mitr->second) +
"-");
1636 if (ok && cand.
stahit.size() > 2) {
1643 int istabeg = cand.
stahit.begin()->first;
1644 pxzCut = (cand.
momxz > 0) ? pxzCutsPos[istabeg] : pxzCutsNeg[istabeg];
1645 int dsta = bbb->
stahit.rbegin()->first - istabeg;
1647 pxzCut *= (3.0 / dsta);
1660 if (aaa.
stahit.size() == 3) {
1669 int istabeg = cand.
stahit.begin()->first;
1670 pxzCut = (cand.
momxz > 0) ? pxzCutsPos[istabeg] : pxzCutsNeg[istabeg];
1671 int dsta = aaa.
stahit.rbegin()->first - istabeg;
1673 pxzCut *= (3.0 / dsta);
1690 string codeVec(
"-");
1691 for (map<int, int>::iterator it = cand.
stahit.begin(); it != cand.
stahit.end(); ++it)
1692 codeVec += (to_string(it->second) +
"-");
1695 if (cand.
stahit.size() >= 4) {
1697 if (cand.
stahit.rbegin()->first == ista)
1701 if (chi2 > c2ndfMax)
1712 if (cand.
stahit.size() < 3)
1716 for (mitr = aaa.
stahit.begin(); mitr != aaa.
stahit.end(); ++mitr)
1717 candext.
stahit[mitr->first] = mitr->second;
1725 if (candext.
stahit.size() >= 4) {
1728 if (chi2ndf > c2ndfMax)
1748 const Int_t gkChi2Cut = 5.0;
1783 if (track.
GetChi2() / ndf > gkChi2Cut) {
1791 fTracks.insert(pair<Double_t, CbmStsTrack>(-qual, track));
1794 cout <<
" FitTrack: " << track.
GetChi2() <<
" ";
1826 fitter.SetKFHits(kftr, &track);
1843 h = kftr.
GetHit(nhits - 1);
1844 err = err || h->
Filter(kftr, downstream, qp0);
1849 track.
SetNDF(2 * nhits - 5);
1878 map<Int_t, Int_t>& hitMap = cand.stahit;
1881 hits.
Set(hitMap.size());
1886 for (map<Int_t, Int_t>::iterator mit2 = hitMap.begin(); mit2 != hitMap.end(); ++mit2) {
1887 hits[indx++] = mit2->second;
1909 hitcode += (to_string(mit2->second) +
"-");
1914 cand.code = hitcode;
1945 for (unordered_map<string, int>::iterator it =
fMap2Out.begin(); it !=
fMap2Out.end(); ++it)
1946 fStream2out << it->first <<
" " << it->second <<
"\n";
1950 for (unordered_map<string, int>::iterator it =
fMap3Out.begin(); it !=
fMap3Out.end(); ++it)
1951 fStream3out << it->first <<
" " << it->second <<
"\n";
1960 printf(
"Work time of BmnStsVectorFinderV9: %4.2f sec.\n",
workTime);
1977 Double_t x0[3] = {pos0[0], pos1[0], pos2[0]};
1978 Double_t y0[3] = {pos0[1], pos1[1], pos2[1]};
1985 Double_t denom = (x[0] - x[1]) * (x[0] - x[2]) * (x[1] - x[2]);
1990 Double_t a = x[2] * dy10 + x[1] * dy02 + x[0] * dy21;
1994 Double_t b = -x[0] * x[0] * dy21 - x[2] * x[2] * dy10 - x[1] * x[1] * dy02;
1996 Double_t c = x[1] * x[1] * (x[2] * y[0] - x[0] * y[2]) + x[1] * (x[0] * x[0] * y[2] - x[2] * x[2] * y[0])
1997 + x[0] * x[2] * (x[2] - x[0]) * y[1];
2019 cout <<
" FitTracks: " << ista <<
" " << ntra << endl;
2021 for (
Int_t itra = 0; itra < ntra; ++itra) {
2025 map<Int_t, Int_t>& hitMap = cand.
stahit;
2026 Int_t nhits = hitMap.size();
2033 Int_t indx = 0, iok = 1;
2036 string hitcode(
"-");
2037 for (map<Int_t, Int_t>::iterator mit = hitMap.begin(); mit != hitMap.end(); ++mit)
2038 hitcode += (to_string(mit->second) +
"-");
2053 for (map<Int_t, Int_t>::iterator mit = hitMap.begin(); mit != hitMap.end(); ++mit) {
2054 hits[indx++] = mit->second;
2105 cout <<
" aaaaaaa " << endl;
2107 cout << track.
GetChi2() <<
" " << nhits <<
" " << endl;
2166 int imax = nhits - 1;
2168 if (indok.size() > 3) {
2175 for (set<Int_t>::iterator sit = indok.begin(); sit != indok.end(); ++sit) {
2176 hits[indx++] = hits[*sit];
2178 hitcode += (to_string(hits[*sit]) +
"-");
2185 fCandSet[indok.size()].insert(hitcode);
2187 hits.
Set(indok.size());
2230 xextr = param.GetX() -
fXyzv[0];
2231 yextr = param.GetY() -
fXyzv[1];
2233 TMath::Sqrt(xextr * xextr / 0.035 / 0.035 + yextr * yextr / 0.2 / 0.2);
2238 fTracks.insert(pair<Double_t, CbmStsTrack>(-qual, track));
2240 pair<unordered_multimap<Int_t, Int_t>::iterator, unordered_multimap<Int_t, Int_t>::iterator>
2244 cout <<
" Good track: " << endl;
2248 for (
Int_t j = nhits - 1; j >= 0; --j) {
2249 ret =
fHit2id.equal_range(hits[j]);
2252 for (unordered_multimap<Int_t, Int_t>::iterator mit = ret.first; mit != ret.second; ++mit) {
2253 if (mit == ret.first)
2254 cout << mit->first <<
"*";
2257 cout << mit->second;
2275 multimap<Double_t, CbmStsTrack>::iterator mit =
fTracks.begin(), mit1;
2278 for (; mit !=
fTracks.end(); ++mit) {
2279 if (mit->second.GetFlag())
2284 for (; mit1 !=
fTracks.end(); ++mit1) {
2285 if (mit1->second.GetFlag())
2289 mit1->second.SetFlag(1);
2311 new ((*fVectorArray)[nOut++])
CbmStsTrack(mit->second);
2315 cout <<
" RemoveDoubles: " <<
fTracks.size() <<
" " << nOK << endl;
2327 limCommonPoint =
TMath::Min(limCommonPoint, 1);
2329 Int_t nh1 = hits1.
GetSize(), nh2 = hits2.GetSize(), nHitsCommon = 0, j = nh2 - 1;
2333 for (
Int_t i = nh1 - 1;
i >= 0;
i--) {
2337 for (; j >= 0; j--) {
2345 if (nHitsCommon > limCommonPoint)
2356 if (
i + nHitsCommon <= limCommonPoint)
2361 if (nHitsCommon <= limCommonPoint)
2395 multimap<Double_t, CbmStsTrack>::iterator mit =
fTracks.begin();
2398 for (; mit !=
fTracks.end(); ++mit) {
2399 if (mit->second.GetFlag())
2418 cout <<
" Remove fakes: " << nOK <<
" " << nOut << endl;
2429 map<Int_t, set<Int_t>> mClusTr;
2430 map<Int_t, Double_t> mWeight;
2432 for (
Int_t j = 0; j < ncand; ++j) {
2436 for (
Int_t jh = 0; jh < nhits; ++jh) {
2440 for (
Int_t side = 0; side < 2; ++side) {
2442 if (mClusTr.count(iclus) == 0) {
2444 mClusTr[iclus] = aaa;
2446 mClusTr[iclus].insert(j);
2458 TMath::Sqrt(xextr * xextr / 0.035 / 0.035 + yextr * yextr / 0.2 / 0.2);
2465 multimap<Double_t, pair<Int_t, Int_t>> mapQual;
2466 set<Int_t> set2kill, set2kill1;
2468 for (
Int_t j = 0; j < ncand; ++j) {
2475 for (
Int_t jh = 0; jh < nhits; ++jh) {
2480 for (
Int_t side = 0; side < 2; ++side) {
2482 if (mClusTr[iclus].size() > 1)
2490 mapQual.insert(pair<
Double_t, pair<Int_t, Int_t>>(quality + www, pair<Int_t, Int_t>(j, nover)));
2494 if (nhits <= 5 &&
Double_t(nover) / nhits / 2 > 0.6)
2496 else if (!
fExact && nhits <= 3 && www < 1.e-8)
2497 set2kill1.insert(j);
2500 if (set2kill.size())
2502 if (set2kill.size() || set2kill1.size()) {
2505 for (multimap<
Double_t, pair<Int_t, Int_t>>::iterator mit = mapQual.begin(); mit != mapQual.end(); ++mit) {
2506 Int_t itr = mit->second.first;
2509 if (set2kill.count(itr) == 0 && set2kill1.count(itr) == 0)
2512 for (
Int_t jh = 0; jh < nhits; ++jh) {
2515 if (mClusTr[hit->
GetDigi(0)].count(itr) == 0 || mClusTr[hit->
GetDigi(1)].count(itr) == 0)
2519 cout <<
" !!! No track found: " << itr << endl;
2521 mClusTr[hit->
GetDigi(0)].erase(itr);
2522 mClusTr[hit->
GetDigi(1)].erase(itr);
2566 for (
Int_t j = 0; j < ncand; ++j) {
2575 for (
int ih = 0; ih < nhits; ++ih) {
2582 fitter.SetKFHits(kftr, tr);
2583 FairTrackParam param;
2585 int firstSta = *setStat.begin(), nmisSi = 0, nmisGem = 0, nmiss = 0;
2589 for (
int ista = firstSta - 2; ista >= 0; --ista) {
2599 for (
int imod = 0; imod < stat->
GetNModules(); ++imod) {
2616 for (
int imod = 0; imod < stat->
GetNModules(); ++imod) {
2634 for (
int ista = firstSta; ista <=
fNsta; ++ista) {
2635 if (setStat.find(ista + 1) != setStat.end())
2646 for (
int imod = 0; imod < stat->
GetNModules(); ++imod) {
2663 for (
int imod = 0; imod < stat->
GetNModules(); ++imod) {
2683 tr->
SetFlag(nmisSi * 10 + nmisGem);
2690 cout <<
" Exclude fakes: " << ncand <<
" " <<
fVectorArray->GetEntriesFast() << endl;
2699 Double_t pars[19][4] = {{0, 0, 0, 0},
2701 {8.28698e-06, 13.3515, 0, 0},
2702 {0.031189, 4.56933, 0.031189, 4.56933},
2703 {0.395468, 3.77954, 0.190848, 3.41027},
2704 {0.128467, 4.26652, 0.128467, 4.26652},
2705 {0.160979, 4.95095, 0.160979, 4.95095}};
2708 Int_t endsta =
vec.stahit.rbegin()->first;
2711 if (endsta > ista + 2) {
2743 static Double_t y[3], l[3] = {0}, lens[3] = {0}, ys[3], lys[3], l2s[3];
2746 Int_t i0 = (newtr == 0) ? 0 : 2;
2761 l[
i] = lens[
i] = cand2.
lengxz + l[
i - 1];
2763 y[
i] = ys[
i] = hit->GetY();
2768 lys[
i] = l[
i] * y[
i];
2769 l2s[
i] = l[
i] * l[
i];
2771 lens[
i] += lens[
i - 1];
2773 lys[
i] += lys[
i - 1];
2774 l2s[
i] += l2s[
i - 1];
2777 Double_t b = 3 * lys[2] - lens[2] * ys[2];
2778 b /= (3 * l2s[2] - lens[2] * lens[2]);
2779 Double_t a = (ys[2] - b * lens[2]) / 3;
2783 for (
int i = 0;
i < 3; ++
i) {
2801 static TVector3 points3[3], midPoint;
2810 if (cand3.
stahit.size() <= 2) {
2815 map<int, int>::iterator mit = cand3.
stahit.begin();
2818 points3[0] =
fmapHits[mit->second].xyz;
2819 points3[0].
SetY(0.0);
2823 if (cand3.
stahit.size() > 2) {
2828 for (; mit != cand3.
stahit.end(); ++mit) {
2830 points3[indx] =
fmapHits[mit->second].xyz;
2832 midPoint = points3[indx];
2835 points3[indx] -= points3[0];
2836 points3[indx++].
SetY(0.0);
2839 TVector3 vec21 = points3[2] - points3[1];
2850 FairField* magField = FairRunAna::Instance()->GetField();
2851 by = magField->GetBy(midPoint[0], midPoint[1], midPoint[2]);
2871 FairTrackParam param;
2874 fitter.Extrapolate(&track, z, ¶m);
2878 cout <<
" Kalman: " << z <<
" " << hit->
GetStationNr() <<
" " << sigx <<
" " << sigy << endl;
2882 multimap<Double_t, Int_t>::iterator mityb =
fmapY[istanext].lower_bound(param.GetY() - sigy);
2883 multimap<Double_t, Int_t>::iterator mitye =
fmapY[istanext].upper_bound(param.GetY() + sigy);
2884 multimap<Double_t, Int_t>::iterator mitxb =
fmapX[istanext].lower_bound(param.GetX() - sigx);
2885 multimap<Double_t, Int_t>::iterator mitxe =
fmapX[istanext].upper_bound(param.GetX() + sigx);
2887 set<Int_t> setX, setY, intersect;
2888 for (multimap<Double_t, Int_t>::iterator mit = mitxb; mit != mitxe; ++mit)
2889 if (
fmapHits[mit->second].used == 0)
2890 setX.insert(mit->second);
2891 for (multimap<Double_t, Int_t>::iterator mit = mityb; mit != mitye; ++mit)
2892 if (
fmapHits[mit->second].used == 0)
2893 setY.insert(mit->second);
2894 set_intersection(setX.begin(), setX.end(), setY.begin(), setY.end(), std::inserter(intersect, intersect.begin()));
2905 for (map<int, int>::iterator it = cand.
stahit.begin(); it != cand.
stahit.end(); ++it)
2906 code += (to_string(it->second) +
"-");
2916 for (map<int, int>::iterator mit = cand.
stahit.begin(); mit != cand.
stahit.end(); ++mit) {
2917 int ista = mit->first, ih = mit->second;
2920 printf(
"%d(%5.2f,%5.2f,%5.2f):%d", ista, hit->GetZ(),
fmapHits[ih].tx,
fmapHits[ih].ty, ih);
2921 auto ret =
fHit2id.equal_range(ih);
2922 for (unordered_multimap<Int_t, Int_t>::iterator mit1 = ret.first; mit1 != ret.second; ++mit1) {
2923 if (mit1 == ret.first)
2927 cout << mit1->second;
2944 std::map<std::string, int> Use;
2950 fReadersTMVA3.insert(pair<int, TMVA::Reader*>(-13,
nullptr));
2951 fReadersTMVA3.insert(pair<int, TMVA::Reader*>(-11,
nullptr));
2952 fReadersTMVA3.insert(pair<int, TMVA::Reader*>(-10,
nullptr));
2953 fReadersTMVA3.insert(pair<int, TMVA::Reader*>(10,
nullptr));
2954 fReadersTMVA3.insert(pair<int, TMVA::Reader*>(11,
nullptr));
2955 fReadersTMVA3.insert(pair<int, TMVA::Reader*>(13,
nullptr));
2975 reader->
AddVariable(
"log(abs(pxz2))", &var[iii++]);
2985 TString dir =
"datasetTMVA3/weights";
2988 TString prefix =
"TMVAClassification";
2991 for (std::map<std::string, int>::iterator it = Use.begin(); it != Use.end(); it++) {
2995 reader->
BookMVA(methodName, weightfile);
3008 map<Int_t, Int_t>& hitMap = aaa1.
stahit;
3010 int iii = 0, indx = 0, inds[3];
3011 inds[0] = inds[1] = inds[2] = 0;
3014 for (map<Int_t, Int_t>::iterator mit = hitMap.begin(); mit != hitMap.end(); ++mit) {
3015 inds[indx] = mit->second;
3019 Double_t dx = hit[1]->GetX() - hit[0]->GetX();
3020 Double_t dz = hit[1]->GetZ() - hit[0]->GetZ();
3022 Double_t dx1 = hit[2]->GetX() - hit[1]->GetX();
3023 Double_t dz1 = hit[2]->GetZ() - hit[1]->GetZ();
3025 Double_t dty = (hit[2]->GetY() - hit[1]->GetY()) / lenxz2 - (hit[1]->GetY() - hit[0]->GetY()) / lenxz1;
3029 var[iii++] = hit[0]->GetX() / hit[0]->GetZ();
3030 var[iii++] = hit[0]->GetY() / hit[0]->GetZ();
3031 var[iii++] = hit[0]->GetZ();
3066 std::map<std::string, int> Use;
3091 reader->
AddVariable(
"corrq[1]-corrq[0]", &var[iii++]);
3092 reader->
AddVariable(
"corrn[1]-corrn[0]", &var[iii++]);
3097 TString dir =
"dataset4diff/weights2/";
3098 TString prefix =
"TMVAClassification";
3101 for (std::map<std::string, int>::iterator it = Use.begin(); it != Use.end(); it++) {
3105 reader->
BookMVA(methodName, weightfile);
3117 map<Int_t, Int_t>& hitMap = aaa1.
stahit;
3118 CbmStsHit *hit =
nullptr, *hit1 =
nullptr;
3119 int iii = 0, indx = 0;
3122 for (map<Int_t, Int_t>::iterator mit = hitMap.begin(); mit != hitMap.end(); ++mit) {
3125 var[iii++] = hit->GetX();
3126 var[iii++] = hit->GetY();
3127 var[iii++] = hit->GetZ();
3129 }
else if (indx == 1) {
3130 Double_t dx = hit->GetX() - var[0];
3131 Double_t dy = hit->GetY() - var[1];
3132 Double_t dz = hit->GetZ() - var[2];
3133 var[iii++] = dx / dz;
3134 var[iii++] = dy / dz;
3135 var[iii++] = aaa1.
ty;
3136 var[iii++] = aaa1.
lengxz;
3137 var[iii++] = aaa1.
momxz;
3138 var[iii++] = hit->
GetSignalDiv() - hit1->GetSignalDiv();
3139 var[iii++] = hit->GetTimeStamp() - hit1->GetTimeStamp();
3157 std::map<std::string, int> Use;
3161 fTmvaReaders.insert(pair<int, TMVA::Reader*>(-5,
nullptr));
3162 fTmvaReaders.insert(pair<int, TMVA::Reader*>(-4,
nullptr));
3163 fTmvaReaders.insert(pair<int, TMVA::Reader*>(4,
nullptr));
3164 fTmvaReaders.insert(pair<int, TMVA::Reader*>(5,
nullptr));
3170 int nhits = mit->first;
3183 reader->
AddVariable(
"log(abs(momr))", &var[iii++]);
3209 dir +=
"/parameters/reco/datasetTMVAV8/weights";
3211 dir += (nhits < 10) ?
TMath::Abs(nhits) : nhits / 10;
3217 TString prefix =
"TMVAClassification";
3220 for (std::map<std::string, int>::iterator it = Use.begin(); it != Use.end(); it++) {
3224 reader->
BookMVA(methodName, weightfile);
3237 map<Int_t, set<Int_t>> mClusTr;
3240 for (
int itr = 0; itr < nTracks; ++itr) {
3246 for (
int ih = 0; ih < nhit; ++ih) {
3250 for (
Int_t side = 0; side < 2; ++side) {
3252 if (mClusTr.count(iclus) == 0) {
3254 mClusTr[iclus] = aaa;
3256 mClusTr[iclus].insert(itr);
3263 for (
int itr = 0; itr < nTracks; ++itr) {
3267 if (nhit < 4 || nhit > 5) {
3272 Float_t momr = 1. / param->GetQp();
3273 int iq = (momr >= 0) ? 1 : -1;
3275 Float_t corrq[19], corrn[19] = {0}, corrn3 = 0, corrq3 = 0;
3276 int nmiss = 0, ista0 = -1, nsigem = 0, nseqmx = 1, nseq = 1;
3278 for (
int ih = 0; ih < nhit; ++ih) {
3282 hit->Position(posb);
3285 if (ista - ista0 > 1) {
3292 hit->Position(pose);
3298 for (
Int_t side = 0; side < 2; ++side) {
3300 int over = mClusTr[iclus].size();
3301 corrn[ih] += (over - 1);
3303 corrn3 += corrn[ih];
3328 var[iii++] = posb.
Phi();
3331 var[iii++] = param->GetTx();
3338 var[iii++] = corrq[0];
3339 var[iii++] = corrq[1];
3340 var[iii++] = corrq[2];
3341 var[iii++] = corrq[3];
3343 var[iii++] = corrq[4];
3344 var[iii++] = corrq3;
3346 var[iii++] = nseqmx;
3349 var[iii++] = corrn[0];
3350 var[iii++] = corrn[1];
3351 var[iii++] = corrn[2];
3352 var[iii++] = corrn[3];
3354 var[iii++] = corrn[4];
3355 var[iii++] = nsigem;
3369 Double_t xv = 0, yv = 0, wwwxtot = 0, wwwytot = 0;
3371 for (
int itr = 0; itr < ntracks; ++itr) {
3377 Double_t wwwx = 1 / param.GetCovariance(0, 0);
3378 Double_t wwwy = 1 / param.GetCovariance(1, 1);
3379 xv += (param.GetX() * wwwx);
3380 yv += (param.GetY() * wwwy);
3388 cout <<
" Vertex coords: " <<
fEvent <<
" " <<
fPass <<
" " << xv / wwwxtot <<
" " << yv / wwwytot << endl;
3406 FairTrackParam param;
3407 cout <<
" Initial ntracks: " << ntracks << endl;
3409 for (
int itr = 0; itr < ntracks; ++itr) {
3417 int iq = (pmom >= 0) ? 1 : -1;
3420 for (
int ih = 0; ih < nhits; ++ih) {
3428 hit->SetUniqueID(999);
3434 cout <<
" !!! Hits: " << nhits0 <<
" " <<
fHitArray->GetEntriesFast() <<
" " << nkilled << endl;
vector< Double_t > dist(vector< Double_t > qp, Double_t mu)
void Fatal(const char *location, const char *msgfmt,...)
TGLVector3 Cross(const TGLVector3 &v1, const TGLVector3 &v2)
R__EXTERN TSystem * gSystem
Bool_t IsPointInsideModule(Double_t x, Double_t y)
BmnGemStripModule * GetModule(Int_t module_num)
Bool_t IsPointInsideModule(Double_t x, Double_t y)
BmnSiliconModule * GetModule(Int_t module_num)
std::set< string > fCandCodes[19]
virtual InitStatus Init()
Virtual method Init.
std::ofstream fStream2out
std::unordered_multimap< int, int > fMap3[19]
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
TClonesArray * fDigiMatches
TClonesArray * fTracksToKill
vector< Double_t > fPTcut
TClonesArray * fVspPoints
vector< Double_t > fCurvSta
std::multimap< Double_t, Int_t > fmapTx[19]
TMVA::Reader * fReaderTMVA2
Float_t TMVAOutput3(candvec &aaa1, candvec &aaa2, int mult2)
std::set< Int_t > GetHitIdBmn(CbmStsHit *hit, Int_t &idmaxP)
virtual void Finish()
Virtual method Finish.
vector< Double_t > fPhiXZ
vector< Double_t > fdTanX
std::multimap< Double_t, Int_t > fmapX[19]
std::unordered_map< Int_t, hitinfo > fmapHits
void ExtendTracks(Int_t ista)
std::set< int > KalmanWindow(candvec &cand, int hitIndx)
std::set< Int_t > GetHitId(CbmStsHit *hit, Int_t &idmaxP)
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)
Double_t FitTrack(candvec &cand)
std::multimap< Double_t, Int_t > fmapY[19]
BmnStsKFTrackFitter fitter
std::unordered_multimap< Int_t, Int_t > fClusMaps[2]
TClonesArray * fSilPoints
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)
virtual void FinishEvent()
Virtual method FinishEvent.
BmnGemStripStationSet * fGemStationSet
TClonesArray * fStsPoints
TClonesArray * fVectorArray
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
std::ofstream fStream3out
std::unordered_map< std::string, int > fMapCode3[19]
Double_t DxVsMom(Int_t ista, candvec &aaa)
void PrintHits(candvec &cand)
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.
TString fMatBudgetFileName
virtual void Exec(Option_t *opt)
Virtual method Exec.
std::vector< candvec > fCandVec3[19]
TClonesArray * fTrackArray
Abstract base class for hit is being used by the CbmKF Kalman Filter.
virtual Int_t Filter(CbmKFTrackInterface &track, Bool_t downstream, Double_t &QP0)=0
Int_t Extrapolate(Double_t z, Double_t *QP0=0, Bool_t line=false)
Access to i-th hit.
void SetStsTrack(CbmStsTrack &track, bool first=1)
CbmKFHit * GetHit(Int_t i)
Number of hits.
void GetTrackParam(FairTrackParam &track)
Double_t & GetRefChi2()
array[15] of covariance matrix
static CbmKF * Instance()
int GetNStsStations() const
Int_t GetDigi(Int_t inum)
Int_t GetRefIndex(Int_t i=0) const
Accessor to StsPoint indizes.
static CbmStsDigiScheme * Instance(int version=1)
CbmStsStation * GetStationByNr(Int_t stationNr)
Station by index.
virtual Int_t GetStationNr() const
Double_t GetSignalDiv() const
Int_t GetSystemId() const
Accessors.
Int_t GetDigi(Int_t iSide) const
CbmStsSector * GetSector(Int_t iSector)
FairTrackParam * GetParamLast()
void SetParamLast(FairTrackParam &par)
void SetParamFirst(FairTrackParam &par)
void SetChi2(Double_t chi2)
Int_t GetNStsHits() const
Accessors.
Int_t GetStsHitIndex(Int_t iHit) const
FairTrackParam * GetParamFirst()
void Set(Int_t n) override
TObject * Remove(TObject *obj) override
IMethod * BookMVA(const TString &methodTag, const TString &weightfile)
void AddVariable(const TString &expression, Float_t *)
Int_t GetEntriesFast() const
void Delete(Option_t *option="") override
TObject * UncheckedAt(Int_t i) const
void Start(Bool_t reset=kTRUE)
TObjArray * Tokenize(const TString &delim) const
std::istream & ReadLine(std::istream &str, Bool_t skipWhite=kTRUE)
void SetXYZ(Double_t x, Double_t y, Double_t z)
Double_t Min(Double_t a, Double_t b)
Double_t Sign(Double_t a, Double_t b)
Double_t ATan2(Double_t y, Double_t x)
Double_t Power(Double_t x, Double_t y)
Double_t Sqrt(Double_t x)
Double_t Max(Double_t a, Double_t b)
Double_t Log10(Double_t x)
std::map< Int_t, Int_t > stahit