98 FairRootManager* man = FairRootManager::Instance();
100 if (branchId == man->GetBranchId(
"STTHit")){
104 myHit->SetEntryNr(FairLink(man->GetBranchId(
"SttHit"),
i));
105 fHits.push_back(myHit);
108 myHit->Position(sttPos);
111 if (myHit->GetEntryNr().GetIndex() < 0 || myHit->GetEntryNr().GetType() < 0){
112 myID = FairLink(branchId,
i);
113 myHit->SetEntryNr(myID);
116 myID = myHit->GetEntryNr();
122 if (
fVerbose > 1) std::cout <<
"PndMvdSttGemRiemannTrackFinder::AddHits StrawMap Sector: " << myHit->GetEntryNr() <<
" " << myHit->
GetTubeID() <<
": Phi: " << sttPos.x() <<
"/" << sttPos.y() <<
" " << phi <<
" Sector: " <<
fStrawMap.
GetSector(myHit->
GetTubeID())<< std::endl;
131 if(branchId == man->GetBranchId(
"STTCombinedSkewedHits")){
133 std::cout <<
"PndMvdSttGemRiemannTrackFinder::AddHits: no SkewedHits Branch" << std::endl;
136 std::cout <<
"PndMvdSttGemRiemannTrackFinder::AddHits: SkewedHits " << hits->GetEntriesFast() << std::endl;
140 myHit->SetEntryNr(FairLink(man->GetBranchId(
"STTCombinedSkewedHits"),
i));
141 fHits.push_back(myHit);
144 myHit->Position(sttPos);
147 if (myHit->GetEntryNr().GetIndex() < 0 || myHit->GetEntryNr().GetType() < 0){
148 myID = FairLink(branchId,
i);
149 myHit->SetEntryNr(myID);
152 myID = myHit->GetEntryNr();
154 if (sttPos.Phi() < 0)
159 std::cout <<
"PndMvdSttGemRiemannTrackFinder::AddHits StrawMap Sector: " << myHit->GetEntryNr() <<
": Phi: " << sttPos.x() <<
"/" << sttPos.y() <<
" " << phi <<
" Sector: " <<
fStrawMap.
FindPhiSector(phi)<< std::endl;
168 if (branchId == man->GetBranchId(
"GEMHit")){
170 if (
fVerbose > 1) std::cout <<
"PndMvdSttGemRiemannTrackFinder::AddHits GEMHitsAdded: " << hits->GetEntries() << std::endl;
171 for (
int i = 0;
i < hits->GetEntries();
i++){
172 FairHit* myHit = (FairHit*)(hits->At(
i));
173 fHits.push_back(myHit);
175 if (myHit->GetEntryNr().GetIndex() < 0){
176 myID = FairLink(branchId,
i);
177 myHit->SetEntryNr(myID);
180 myID = myHit->GetEntryNr();
187 for (
int i = 0;
i < hits->GetEntries();
i++){
188 FairHit* myHit = (FairHit*)(hits->At(
i));
189 fHits.push_back(myHit);
191 if (myHit->GetEntryNr().GetIndex() < 0){
192 myID = FairLink(branchId,
i);
193 myHit->SetEntryNr(myID);
196 myID = myHit->GetEntryNr();
201 if (branchId == man->GetBranchId(
"MVDHitsStrip") || branchId == man->GetBranchId(
"MVDHitsPixel")){
203 }
else if (branchId == man->GetBranchId(
"GEMHit")) {
209 std::vector<int> dummy;
215 if (
fVerbose > 1) std::cout <<
"fMapHitToId: " <<
fHits.size() -1 <<
" : " << myID <<
" "
216 << myHit->GetX() <<
"/" << myHit->GetY() <<
"/" << myHit->GetZ()
217 <<
" Layer: " << Layer << std::endl;
228 std::map<TString, int>::iterator layerIter;
230 if(identifier.Contains(layerIter->first)){
231 return layerIter->second;
266 std::set<int> tooClose;
267 std::set<int>::iterator iter;
271 for (
unsigned int trackId = 0; trackId < Tracks.size(); trackId++){
273 if (Tracks[trackId].size() != 3)
274 if (
fVerbose > 1) std::cout <<
"-E- PndMVDRiemannTrackFinder::FindTracks: Start points: " << Tracks[trackId].size()
275 <<
" in Track: " << trackId << std::endl;
277 std::set<Int_t> StartTrack = Tracks[trackId];
282 std::cout <<
"------------------------------------" << std::endl;
284 iter = StartTrack.begin();
285 std::cout <<
"Start Plane from Points: " <<
fMapHitToID[*iter] <<
" "
287 iter = StartTrack.begin();
288 std::cout <<
"Start Plane from Points: " << *iter <<
" " << *(iter++) <<
" " << *(iter++) << std::endl;
293 if (
fVerbose > 1) std::cout <<
"Track exists already!" << std::endl;
299 int startHit=*(StartTrack.begin());
303 for(
unsigned int j=0;j<
fLayers[
i].size();j++){
314 for (
int Layer=startLayer;Layer<
fNLayers;Layer++){
316 for(
unsigned int testHitInLayer=0; testHitInLayer<
fLayers[Layer].size();testHitInLayer++){
317 testHit=
fLayers[Layer][testHitInLayer];
319 if (
fVerbose > 2)
if (
fVerbose > 1) std::cout <<
"Layer: " << Layer <<
" hitInLayer: " << testHitInLayer <<
" hitID " << testHit <<
" ";
323 iter = StartTrack.begin();
335 StartTrack.insert(testHit);
338 actTrack.
refit(
false);
339 actTrack.
szFit(
false);
341 TVectorD orig = actTrack.
orig();
342 if (
fVerbose > 1) std::cout <<
"actHit added: " << testHit <<
" r: " << actTrack.
r() <<
" orig: " << orig[0] <<
" " << orig[1] << std::endl;
344 fHitsTooClose[trackId].insert(tooClose.begin(),tooClose.end());
350 std::cout << std::endl;
351 std::cout <<
"PndMvdSttGemRiemannTrackFinder::FindTracks ActTrack for Assignment: ";
352 for (iter = StartTrack.begin(); iter != StartTrack.end(); iter++){
356 std::cout << std::endl;
359 if (
fVerbose > 1) std::cout <<
"Track before STT: " << actTrack << std::endl;
363 std::cout <<
"PndMvdSttGemRiemannTrackFinder::FindTracks AssignSttHits" << std::endl;
366 std::cout <<
"ActTrack size with Stt: " << actTrack.
getNumHits() <<
" " << StartTrack.size() << std::endl;
367 actTrack.
refit(
false);
368 actTrack.
szFit(
false);
370 actTrack.
refit(
false);
371 actTrack.
szFit(
false);
373 actTrack.
refit(
false);
374 actTrack.
szFit(
false);
381 std::cout <<
"PndMvdSttGemRiemannTrackFinder::FindTracks AssignSkewedSttHits" << std::endl;
384 std::cout <<
"ActTrack size with Stt: " << actTrack.
getNumHits() <<
" " << StartTrack.size() << std::endl;
385 actTrack.
refit(
false);
386 actTrack.
szFit(
false);
389 if (
fVerbose > 1) std::cout <<
"Track after STT: " << actTrack << std::endl;
393 if (
fVerbose > 1) std::cout <<
"PndMvdSttGemRiemannTrackFinder::FindTracks AssignGemHits" << std::endl;
396 if (
fVerbose > 1) std::cout <<
"ActTrack size with Gem: " << actTrack.
getNumHits() <<
" " << StartTrack.size() << std::endl;
397 actTrack.
refit(
false);
398 actTrack.
szFit(
false);
402 if (
fVerbose > 1) std::cout <<
"Track after GEM: " << actTrack << std::endl;
408 if (
fVerbose > 1) std::cout <<
"HitsTooClose Test for Track: " << actTrack << std::endl;
409 for (iter = hits.begin(); iter != hits.end(); iter++){
414 StartTrack.insert(*iter);
422 if (
fVerbose > 1) std::cout <<
"Hits in Track: " << StartTrack.size() << std::endl;
428 TVectorD orig = actTrack.
orig();
430 iter = StartTrack.begin();
431 std::cout <<
"Track added! " << *iter <<
" " << *(++iter)
432 <<
" " << *(++iter) <<
" r: " << actTrack.
r()
433 <<
" orig: " << orig[0] <<
" " << orig[1]
434 <<
" sz-m: " << actTrack.
getSZm() <<
" sz-t: " << actTrack.
getSZt()
435 <<
" dip: " << actTrack.
dip()
439 for (iter = StartTrack.begin(); iter != StartTrack.end(); iter++)
448 for (
unsigned int n = 0;
n <
fTracks.size();
n++){
450 bool trackFound =
false;
453 for (
unsigned int p = 0;
p < TrackHits.size();
p++){
454 if (
fVerbose > 1) std::cout <<
"HitID: " << TrackHits[
p].hitID() << std::endl;
455 if (TrackHits[
p].hitID() > -1){
460 if (
fVerbose > 1) std::cout <<
"NPoints TrackCand: " << myTrackCand.
GetNHits() << std::endl;
462 FairMultiLinkedData gemHits = myTrackCand.GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"GEMHit"));
463 FairMultiLinkedData sttHits = myTrackCand.GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"STTHit"));
464 if (gemHits.GetNLinks() > 3){
485 std::cout <<
"PndMvdSttGemRiemannTrackFinder::FindTracks TrackFound: " << myTrackCand << std::endl;
487 if (
fVerbose > 1) std::cout <<
" numHits: " <<
fTracks[
n].getNumHits() << std::endl;
490 TVectorD myOrig =
fTracks[
n].orig();
491 std::cout <<
"Track: " <<
fTracks[
n] << std::endl;
494 <<
" orig: " << myOrig[0] <<
"+/-" <<
fTracks[
n].dX()
495 <<
" " << myOrig[1] <<
"+/-" <<
fTracks[
n].dY() << std::endl;
496 std::cout <<
"PlaneChiSquare: " <<
fTracks[
n].calcChi2Plane() << std::endl;
516 std::set<Int_t> actCandidates;
517 std::vector<std::set<Int_t> > Tracks;
518 std::set<int> tooCloseFirst;
519 std::set<int> tooCloseSecond;
520 std::set<int> tooCloseThird;
521 if (
fHits.size() > 3) {
525 for (
int FirstLayer = 1 - shift; FirstLayer <
fNLayers - 2; FirstLayer++) {
526 for (
int SecondLayer = FirstLayer + 1; SecondLayer < fNLayers - 1; SecondLayer++) {
528 for (
int ThirdLayer = fNLayers - 1; ThirdLayer > SecondLayer; ThirdLayer--) {
530 for (
unsigned int firstInLayer = 0; firstInLayer <
fLayers[FirstLayer].size(); firstInLayer++) {
531 int first =
fLayers[FirstLayer][firstInLayer];
533 for (
unsigned int secondInLayer = 0; secondInLayer <
fLayers[SecondLayer].size(); secondInLayer++) {
534 int second =
fLayers[SecondLayer][secondInLayer];
538 for (
unsigned int thirdInLayer = 0; thirdInLayer <
fLayers[ThirdLayer].size(); thirdInLayer++) {
539 int third =
fLayers[ThirdLayer][thirdInLayer];
543 <<
"Checking Points for Start Triplet: "
544 << first <<
" " << second <<
" "
545 << third << std::endl;
548 <<
"Checking Points for Start Triplet: "
554 tooCloseFirst.insert(third);
558 tooCloseSecond.insert(third);
566 actCandidates.clear();
567 actCandidates.insert(first);
568 actCandidates.insert(second);
572 actCandidates.insert(third);
581 actTrack.
refit(
false);
584 TVectorT<double> orig = actTrack.
orig();
587 std::set<Int_t>::iterator iter = actCandidates.begin();
588 std::cout <<
"Base plane from Points: "
589 << *(iter) <<
" " << *(iter++) <<
" "
590 << *(iter++) << std::endl;
591 std::cout <<
"TrackParameter: " << actTrack << std::endl;
593 Tracks.push_back(actCandidates);
597 SecondLayer, second);
600 std::set<int> combHits = tooCloseFirst;
601 combHits.insert(tooCloseSecond.begin(), tooCloseSecond.end());
602 combHits.insert(tooCloseThird.begin(), tooCloseThird.end());
617 std::cout <<
"Start Tracks are: " << std::endl;
618 for (
unsigned int i = 0;
i < Tracks.size();
i++) {
619 std::set<int> aTrack = Tracks[
i];
620 for (std::set<int>::iterator iter = aTrack.begin(); iter != aTrack.end(); iter++) {
621 std::cout << *iter <<
" ";
623 std::cout << std::endl;
624 for(std::set<int>::iterator iter = aTrack.begin(); iter != aTrack.end(); iter++) {
627 std::cout << std::endl;
629 std::cout << std::endl;
639 int searchSector = startSector;
640 bool continueSearch =
true;
641 int nextSectorDirection = 0;
645 std::cout <<
"StartSector: " << searchSector << std::endl;
647 while (continueSearch){
649 if (startSector == searchSector){
658 continueSearch =
false;
660 std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder SearchSector: Actual searchSector: " << searchSector << std::endl;
662 for (
size_t i = 0;
i < sttHits.size();
i++){
664 if (nHitsStt < 0) nHitsStt = 0;
682 std::cout << std::endl;
683 std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder SearchSector: Act Hit: " << fairSttHit->GetEntryNr() << std::endl;
690 std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder SearchSector: STTHit add to Track!" << std::endl;
693 startTrack.insert(
fMapIDtoHit[actHit.hit()->GetEntryNr()]);
694 actTrack.
refit(kFALSE);
700 if (nextSectorDirection == 0){
707 if (searchSector < 0)
713 continueSearch =
true;
719 continueSearch =
true;
721 continueSearch =
false;
729 int searchSector = startSector;
735 std::cout <<
"StartSector: " << searchSector << std::endl;
744 std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder SearchSector: Actual searchSector: " << searchSector << std::endl;
746 for (
size_t i = 0;
i < sttHits.size();
i++){
748 if (nHitsStt < 0) nHitsStt = 0;
750 FairHit* fairSttHit = sttHits[
i];
757 std::cout << std::endl;
758 std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder SearchSector: Act Hit: " << fairSttHit->GetEntryNr() << std::endl;
764 std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder SearchSector: STTHit add to Track!" << std::endl;
767 startTrack.insert(
fMapIDtoHit[actHit.hit()->GetEntryNr()]);
768 actTrack.
refit(kFALSE);
778 if (
fVerbose > 1) std::cout <<
"NGemHits: " <<
fGemHits->GetEntriesFast() << std::endl;
779 for (
int i = 0;
i <
fGemHits->GetEntriesFast();
i++){
780 FairHit* fairGemHit = (FairHit*)
fGemHits->At(
i);
786 std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder SearchSector: GemHit add to Track!" << std::endl;
789 startTrack.insert(
fMapIDtoHit[actHit.hit()->GetEntryNr()]);
796 double r = aTrack.
r();
797 double dip=aTrack.
dip();
799 if ((aTrack.
getHit(0)->
z())>0 )
803 if (
fVerbose > 1) std::cout <<
"sz-Fit does not match, Chi2: " << aTrack.
szChi2() <<
" max: " <<
GetMaxSZChi2(r,dip,sign) << std::endl;
811 if (fairHit->GetEntryNr().GetType() == FairRootManager::Instance()->GetBranchId(
"MVDHitsStrip") ||
812 fairHit->GetEntryNr().GetType() == FairRootManager::Instance()->GetBranchId(
"MVDHitsPixel") ){
814 }
else if (fairHit->GetEntryNr().GetType() == FairRootManager::Instance()->GetBranchId(
"GEMHit")) {
816 }
else if (fairHit->GetEntryNr().GetType() == FairRootManager::Instance()->GetBranchId(
"STTHit")) {
819 std::cout <<
"-E- PndMvdRIemannTrackFinder::CheckRiemannHit: Detector " << FairRootManager::Instance()->GetBranchName(fairHit->GetEntryNr().GetType()) <<
820 " not supported!" << std::endl;
832 hit->
setXYZ(tempHit.
x().X(), tempHit.
x().Y(), tempHit.
x().Z());
837 double dist = track->
dist(hit);
850 if (
fVerbose > 1) std::cout <<
"STTHit: dist " << dist << std::endl;
852 if (
fabs(dist) > maxDist){
854 std::cout <<
"dist larger than " << maxDist << std::endl;
878 double dist = track->
dist(hit);
891 if (
fVerbose > 1) std::cout <<
"STTHit: dist " << dist << std::endl;
893 if (
fabs(dist) > maxDist){
895 std::cout <<
"dist larger than " << maxDist << std::endl;
915 double dist = track->
dist(hit);
917 double szDist = track->
szDist(hit);
918 double maxSZDist = 10;
920 double maxSZChi2 = 25;
927 if (
fVerbose > 1) std::cout <<
"Checking GemHit: " << fairHit->GetEntryNr() << std::endl;
928 if (
fVerbose > 1) std::cout <<
": dist " << dist <<
" szDist " << szDist <<
" szChi2 " << szChi2 << std::endl;
930 if (
fabs(dist) > maxDist){
931 if (
fVerbose > 1) std::cout <<
"dist larger than " << maxDist << std::endl;
935 if (szChi2 > maxSZChi2){
936 if (
fVerbose > 1) std::cout <<
" SZ Chi2 too big! Cut at: " << maxSZChi2 << std::endl;
939 if (
fabs(szDist) > maxSZDist){
940 if (
fVerbose > 1) std::cout <<
"SZ Dist too big! Cut at: " << maxSZDist << std::endl;
949 double dist = track->
dist(hit);
950 double szDist = track->
szDist(hit);
952 double r = track->
r();
953 double dip=track->
dip();
955 if ((track->
getHit(1)->
z())>0 )
958 if (
fVerbose > 1) std::cout <<
": dist " << dist <<
" szDist " << szDist <<
" szChi2 " << szChi2 << std::endl;
977 if (
fVerbose > 1) std::cout <<
"SZ Dist too big! Cut at: " <<
fMaxSZDist << std::endl;
985 FairMultiLinkedData sttHitsInTrack = track->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"STTHit"));
987 for (
int i = 0;
i < sttHitsInTrack.GetNLinks();
i++){
989 if (
fVerbose > 1) std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder::CheckBoarderHitsStt Stt Index: " << mySttHit->
GetTubeID() << std::endl;
998 double radiusSq(.0), oldRadiusSq(.0);
999 int indexHitMaxRadius(-1);
1002 std::vector<PndRiemannHit> riemannHits = track.
getHits();
1004 for (
size_t i = 0;
i < riemannHits.size();
i++){
1005 FairLink hitLink =
fMapHitToID[riemannHits[
i].hitID()];
1006 if (
fVerbose > 1) std::cout <<
"HitID Track : " <<
i <<
" : " << riemannHits[
i].hitID() <<
" " << hitLink << std::endl;
1007 int branchId = hitLink.GetType();
1008 FairRootManager* man = FairRootManager::Instance();
1009 if (branchId == man->GetBranchId(
"MVDHitsStrip") || branchId == man->GetBranchId(
"MVDHitsPixel")){
1011 radiusSq = FairHit->GetX()*FairHit->GetX() + FairHit->GetY()*FairHit->GetY();
1012 if (
fVerbose > 1) std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder::GetStrawSector FairHit: " <<
i <<
" : " << radiusSq <<
" " << *FairHit << std::endl;
1014 if (radiusSq > oldRadiusSq){
1015 oldRadiusSq = radiusSq;
1020 if (indexHitMaxRadius > -1){
1021 if (
fVerbose > 1) std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder::GetStrawSector IndexHitMaxRadius: " << indexHitMaxRadius <<
" Link: " <<
fMapHitToID[indexHitMaxRadius] << std::endl;
1023 TVector3 hitPos(FairHit->GetX(), FairHit->GetY(), FairHit->GetZ());
1024 if (
fVerbose > 1) std::cout <<
"-I- PndMvdSttGemRiemannTrackFinder::GetStrawSector Phi: " << hitPos.Phi() <<
" PhiSector: " <<
fStrawMap.
FindPhiSector(hitPos.Phi()) << std::endl;
1032 std::set<int> result;
1034 for(
unsigned int i=0;
i<
fLayers[LayerNumber].size();
i++){
1037 if (testN != HitNumber){
1038 result.insert(testN);
1048 double Pt=((radius/100)*2*3*1E8)/1E9;
1050 if (
fabs(TMath::ACos(dip)) < 1E-100){
1054 if (sign) Theta=(TMath::ATan(TMath::Power(
TMath::Tan(TMath::ACos(dip)),-1)))*180/
TMath::Pi();
1059 double minPt=
fCutDistH->GetXaxis()->GetXmin();
1060 double maxPt=
fCutDistH->GetXaxis()->GetXmax();
1061 double minTh=
fCutDistH->GetYaxis()->GetXmin();
1062 double maxTh=
fCutDistH->GetYaxis()->GetXmax();
1064 int binPt=int(floor((Pt-minPt)*
fCutDistH->GetXaxis()->GetNbins()/(maxPt-minPt)))+1;
1065 int binTh=int(floor((Theta-minTh)*
fCutDistH->GetYaxis()->GetNbins()/(maxTh-minTh)))+1;
1067 if (binPt<1) binPt=1;
1068 if (binPt>
fCutDistH->GetXaxis()->GetNbins()) binPt=
fCutDistH->GetXaxis()->GetNbins();
1069 if (binTh<1) binTh=1;
1070 if (binTh>
fCutDistH->GetYaxis()->GetNbins()) binTh=
fCutDistH->GetYaxis()->GetNbins();
1071 return fCutDistH->GetBinContent(binPt,binTh);
1080 double Pt=((radius/100)*2*3*1E8)/1E9;
1082 if (
fabs(TMath::ACos(dip)) < 1E-100){
1086 if (sign) Theta=(TMath::ATan(TMath::Power(
TMath::Tan(TMath::ACos(dip)),-1)))*180/
TMath::Pi();
1090 double minPt=
fCutChi2H->GetXaxis()->GetXmin();
1091 double maxPt=
fCutChi2H->GetXaxis()->GetXmax();
1092 double minTh=
fCutChi2H->GetYaxis()->GetXmin();
1093 double maxTh=
fCutChi2H->GetYaxis()->GetXmax();
1095 int binPt=int(floor((Pt-minPt)*
fCutChi2H->GetXaxis()->GetNbins()/(maxPt-minPt)))+1;
1096 int binTh=int(floor((Theta-minTh)*
fCutChi2H->GetYaxis()->GetNbins()/(maxTh-minTh)))+1;
1098 if (binPt<1) binPt=1;
1099 if (binPt>
fCutChi2H->GetXaxis()->GetNbins()) binPt=
fCutChi2H->GetXaxis()->GetNbins();
1100 if (binTh<1) binTh=1;
1101 if (binTh>
fCutChi2H->GetYaxis()->GetNbins()) binTh=
fCutChi2H->GetYaxis()->GetNbins();
1102 return fCutChi2H->GetBinContent(binPt,binTh);
std::vector< std::set< int > > fHitsTooClose
matrix of TrackNr and hits which are too close to one of the three starting points ...
std::vector< std::pair< double, double > > fCurvAndDipOfCand
Curvature and dip of fPndTrackCand.
std::set< int > GetTooCloseHitsInLayer(int LayerNumber, int HitNumber)
unsigned int getNumHits()
TClonesArray * fSkewedSttHits
TH2F * fCutDistH
cutting histograms
double calcSZChi2(PndRiemannHit *hit)
bool CheckRiemannHitMvd(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
double GetMaxPlaneDist(double radius, double dip, bool sign)
bool CheckRiemannHit(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
bool CheckRiemannHitStt(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
PndRiemannHit correctSttHit(PndSttHit *mySttHit)
double fMaxSZChi2
Maximum allowed Chi2 in an sz fit.
std::vector< std::vector< PndSttHit * > > fSttHitsInSectors
std::vector< PndRiemannTrack > fTracks
Resulting Riemann Tracks.
bool TrackExists(std::set< Int_t > hitsInTrack)
std::map< TString, int > fLayerMap
identifier string, assigned layer id
static T Sqrt(const T &x)
int GetStrawSector(PndRiemannTrack &track)
std::map< int, FairLink > fMapHitToID
map to convert the list of hits back into a FairLink
bool CheckRiemannHitSkewedStt(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
std::map< FairLink, int > fMapIDtoHit
map to convert the list of detID/hitID hits into the list of hits for track finding ...
labels push_back("electron")
double szDist(PndRiemannHit *hit)
int IsSectorBorderStraw(int strawindex) const
int GetSector(int strawindex) const
int GetLayerGem(FairHit *hit)
double dist(PndRiemannHit *hit)
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
TString GetPath(Int_t shortID)
for a given shortID the path is returned
void AddHits(TClonesArray *hits, Int_t branchId)
void setDXYZ(double dx, double dy, double dz)
int fMinNumberOfHits
Minimum number of hits in track necessary for a match.
std::vector< PndTrackCand > fTrackCand
List of track candidates.
bool CheckBoarderHitsStt(PndTrackCand *track)
Int_t GetSensorNr() const
void AddHit(UInt_t detId, UInt_t hitId, Double_t rho)
int GetRightSector(int sector) const
int fNLayers
number of Layers
void AssignSttHits(PndRiemannTrack &actTrack, std::set< Int_t > &startTrack)
bool IsSkewedStraw(int strawindex) const
void setXYZ(double x, double y, double z)
void refit(bool withErrorCalc=true)
std::vector< std::vector< FairHit * > > fSttSkewedHitsInSectors
double fMaxPlaneDist
Distance cut between new point and riemann plane.
void AssignSkewedSttHits(PndRiemannTrack &actTrack, std::set< Int_t > &startTrack)
int GetLeftSector(int sector) const
bool CheckHitInSameSensor(int hit1, int hit2)
Tests if hits in the same sensor are selected.
bool CheckHitDistance(int hit1, int hit2)
Tests if the distance is larger than fMinPointDistance.
friend F32vec4 fabs(const F32vec4 &a)
int GetLayer(TString identifier)
static PndGeoHandling * Instance()
Int_t GetStationNr() const
int FindPhiSector(double phi) const
bool CheckSZ(PndRiemannTrack aTrack)
Tests the results of the sz fit.
int hit(Int_t nEvents=0, TString inFile="sim.root", TString parFile="par.root", TString inDigi="digi.root", TString outFile="hit.root", Int_t timeBased=0)
PndRiemannTrack CreateRiemannTrack(std::set< Int_t > aHits)
Creates a PndRiemannTrack from an array of indices of Hits.
bool CheckZeroPassing(std::set< int > hitIds, int hit)
If the track contains (0,0) all points have to go forward or all have to go backward.
const TVector3 & x() const
ClassImp(PndMvdSttGemRiemannTrackFinder)
void szFit(bool withErrorCalc=true)
void addHit(PndRiemannHit &hit)
double GetMaxSZChi2(double radius, double dip, bool sign)
bool CheckRiemannHitGem(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
int GetRow(int strawindex) const
Int_t GetSensorID() const
void AssignGemHits(PndRiemannTrack &actTrack, std::set< Int_t > &startTrack)
void FindTracks()
Main function to start the riemann track finding.
std::vector< PndRiemannHit > getHits() const
std::vector< std::set< Int_t > > fHitsInTracks
Vector of indizes which hits where used in which track.
std::vector< std::vector< int > > fLayers
contains layer information of hits
virtual ~PndMvdSttGemRiemannTrackFinder()
double fMaxSZDist
Distance cut between s-z coordinate of a new point and the sz-fit of the hits in the track...
PndMvdSttGemRiemannTrackFinder()
std::vector< std::set< Int_t > > GetStartTracks()
PndRiemannHit * getHit(unsigned int i)
bool CheckHitInTrack(std::set< int > hitIds, int hit)
Check if this HitId is used in the track already.
int fLastLayerId
last layer Id assigned
int GetLayerMvd(FairHit *hit)