FairRoot/PandaRoot
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
PndMvdSttGemRiemannTrackFinder Class Reference

#include <PndMvdSttGemRiemannTrackFinder.h>

Inheritance diagram for PndMvdSttGemRiemannTrackFinder:
PndRiemannTrackFinder

Public Member Functions

 PndMvdSttGemRiemannTrackFinder ()
 
virtual ~PndMvdSttGemRiemannTrackFinder ()
 
 PndMvdSttGemRiemannTrackFinder (const PndMvdSttGemRiemannTrackFinder &)=delete
 
PndMvdSttGemRiemannTrackFinderoperator= (const PndMvdSttGemRiemannTrackFinder &)=delete
 
void FindTracks ()
 Main function to start the riemann track finding. More...
 
void AddHits (TClonesArray *hits, Int_t branchId)
 
void SetCutDistH (TH2F *hist)
 
void SetCutChi2H (TH2F *hist)
 
void SetSttTubeArray (TClonesArray *SttTubeArray)
 
void MergeTracks ()
 
void SetHits (std::vector< FairHit * > hits)
 
void AddHits (std::vector< FairHit * > hits, Int_t branchId)
 Replaces the existing array of hits with a new one. More...
 
void AddHit (FairHit *hit)
 
void SetVerbose (int val)
 Adds one new hit to the array of hits. More...
 
int NTracks ()
 
PndRiemannTrack GetTrack (int i)
 Returns the number of found tracks. More...
 
PndTrack GetPndTrack (int i, double B)
 Returns the track with the index i. More...
 
std::set< Int_t > GetTrackCandidates (int i)
 
std::vector< PndTrackCandGetTrackCand ()
 Returns the hits belonging to track i. More...
 
PndTrackCand GetTrackCand (int i)
 
std::vector< PndTrackCandGetMergedTrackCands ()
 
double HitDistance (FairHit *h1, FairHit *h2)
 Calculates the distance between two hits. More...
 
int HitTooClose (std::set< Int_t > hitsInUse, FairHit *newHit, double threshold)
 returns if and which hit was too close to the hit which is tested More...
 
void SetMaxPlaneDistance (double val)
 
void SetMaxSZDist (double val)
 
void SetMaxSZChi2 (double val)
 
void SetMinPointDist (double val)
 
void SetUseZeroPos (bool val)
 
void SetMinNumberOfHits (int val)
 
void SetCurvDiff (double val)
 
void SetDipDiff (double val)
 

Protected Member Functions

bool CheckHitDistance (int hit1, int hit2)
 Tests if the distance is larger than fMinPointDistance. More...
 
bool CheckRiemannHit (PndRiemannTrack *track, PndRiemannHit *hit)
 
bool CheckHitInSameSensor (int hit1, int hit2)
 Tests if hits in the same sensor are selected. More...
 
bool CheckHitInTrack (std::set< int > hitIds, int hit)
 Check if this HitId is used in the track already. More...
 
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. More...
 
PndRiemannTrack CreateRiemannTrack (std::set< Int_t > aHits)
 Creates a PndRiemannTrack from an array of indices of Hits. More...
 
bool TrackExists (std::set< Int_t > hitsInTrack)
 
std::vector< int > FindTracksWithSimilarParameters (int TrackInd, std::vector< int > &TracksToTest, double curvDiff, double dipDiff)
 
std::vector< int > FindTracksWithSimilarHits (std::vector< int > &TracksToTest, std::vector< PndTrackCand > tempTrCnd, std::vector< int > &tempKillAfter)
 ---------—added by me More...
 
void RemoveTrack (int TrackInd, std::vector< int > &TrackList)
 
PndTrackCand CreateOneTrackCand (std::vector< int > tracks, std::vector< PndTrackCand > tempTrCnd)
 

Protected Attributes

std::vector< FairHit * > fHits
 Vector of all FairHits used for track finding (fitting) More...
 
std::vector< PndRiemannTrackfTracks
 Resulting Riemann Tracks. More...
 
std::vector< std::set< Int_t > > fHitsInTracks
 Vector of indizes which hits where used in which track. More...
 
std::vector< PndTrackCandfTrackCand
 List of track candidates. More...
 
std::vector< std::pair< double,
double > > 
fCurvAndDipOfCand
 Curvature and dip of fPndTrackCand. More...
 
std::vector< PndTrackCandfMergedTrackCand
 
std::vector< std::set< int > > fHitsTooClose
 matrix of TrackNr and hits which are too close to one of the three starting points More...
 
std::map< int, FairLink > fMapHitToID
 map to convert the list of hits back into a FairLink More...
 
std::map< FairLink, int > fMapIDtoHit
 map to convert the list of detID/hitID hits into the list of hits for track finding More...
 
double fMaxPlaneDist
 Distance cut between new point and riemann plane. More...
 
double fMaxSZDist
 Distance cut between s-z coordinate of a new point and the sz-fit of the hits in the track. More...
 
double fMinPointDist
 Minimum distance between two points to use them as point for the base plane. More...
 
double fMaxSZChi2
 Maximum allowed Chi2 in an sz fit. More...
 
int fMinNumberOfHits
 Minimum number of hits in track necessary for a match. More...
 
double fCurvDiff
 TrackMerger parameter. More...
 
double fDipDiff
 TrackMerger parameter. More...
 
double fMagField
 size of the magnetic field in Tesla More...
 
int fVerbose
 
bool fUseZeroPos
 

Private Member Functions

std::vector< std::set< Int_t > > GetStartTracks ()
 
bool CheckSZ (PndRiemannTrack aTrack)
 Tests the results of the sz fit. More...
 
bool CheckRiemannHit (PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
 
bool CheckRiemannHitMvd (PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
 
bool CheckRiemannHitGem (PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
 
bool CheckRiemannHitStt (PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
 
bool CheckRiemannHitSkewedStt (PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
 
void AssignSttHits (PndRiemannTrack &actTrack, std::set< Int_t > &startTrack)
 
void AssignSkewedSttHits (PndRiemannTrack &actTrack, std::set< Int_t > &startTrack)
 
void AssignGemHits (PndRiemannTrack &actTrack, std::set< Int_t > &startTrack)
 
bool CheckBoarderHitsStt (PndTrackCand *track)
 
int GetStrawSector (PndRiemannTrack &track)
 
int GetLayerGem (FairHit *hit)
 
int GetLayerMvd (FairHit *hit)
 
int GetLayer (TString identifier)
 
void InitLayerMap ()
 
void InitLayerMapMvd ()
 
void InitLayerMapGem ()
 
double GetMaxPlaneDist (double radius, double dip, bool sign)
 
double GetMaxSZChi2 (double radius, double dip, bool sign)
 
std::set< int > GetTooCloseHitsInLayer (int LayerNumber, int HitNumber)
 

Private Attributes

PndGeoHandlingfGeoH
 
TH2F * fCutDistH
 cutting histograms More...
 
TH2F * fCutChi2H
 
TClonesArray * fSttHits
 
TClonesArray * fSkewedSttHits
 
TClonesArray * fGemHits
 
PndSttStrawMap fStrawMap
 
std::vector< std::vector
< PndSttHit * > > 
fSttHitsInSectors
 
std::vector< std::vector
< FairHit * > > 
fSttSkewedHitsInSectors
 
double fZClosePar
 parameter to separate forward and backward tracks More...
 
std::vector< std::vector< int > > fLayers
 contains layer information of hits More...
 
std::map< TString, int > fLayerMap
 identifier string, assigned layer id More...
 
int fLastLayerId
 last layer Id assigned More...
 
int fNLayers
 number of Layers More...
 

Detailed Description

Definition at line 14 of file PndMvdSttGemRiemannTrackFinder.h.

Constructor & Destructor Documentation

PndMvdSttGemRiemannTrackFinder::PndMvdSttGemRiemannTrackFinder ( )

Definition at line 15 of file PndMvdSttGemRiemannTrackFinder.cxx.

References fGeoH, fLayers, fSttHitsInSectors, fSttSkewedHitsInSectors, PndRiemannTrackFinder::fUseZeroPos, InitLayerMap(), and PndGeoHandling::Instance().

16 {
17  fLayers.resize(22);
18  if (fUseZeroPos)
19  fLayers[0].push_back(0);
21  fSttHitsInSectors.resize(6);
22  fSttSkewedHitsInSectors.resize(6);
23  InitLayerMap();
24 }
std::vector< std::vector< PndSttHit * > > fSttHitsInSectors
double fZClosePar
parameter to separate forward and backward tracks
std::vector< std::vector< FairHit * > > fSttSkewedHitsInSectors
static PndGeoHandling * Instance()
std::vector< std::vector< int > > fLayers
contains layer information of hits
PndMvdSttGemRiemannTrackFinder::~PndMvdSttGemRiemannTrackFinder ( )
virtual

Definition at line 26 of file PndMvdSttGemRiemannTrackFinder.cxx.

26 {}
PndMvdSttGemRiemannTrackFinder::PndMvdSttGemRiemannTrackFinder ( const PndMvdSttGemRiemannTrackFinder )
delete

Member Function Documentation

void PndRiemannTrackFinder::AddHit ( FairHit *  hit)
inlineinherited

Definition at line 26 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fHits.

26 {fHits.push_back(hit);};
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
PndSdsMCPoint * hit
Definition: anasim.C:70
void PndMvdSttGemRiemannTrackFinder::AddHits ( TClonesArray *  hits,
Int_t  branchId 
)

Definition at line 95 of file PndMvdSttGemRiemannTrackFinder.cxx.

References fGemHits, PndRiemannTrackFinder::fHits, PndSttStrawMap::FindPhiSector(), fLayers, PndRiemannTrackFinder::fMapHitToID, PndRiemannTrackFinder::fMapIDtoHit, fNLayers, fSkewedSttHits, fStrawMap, fSttHits, fSttHitsInSectors, fSttSkewedHitsInSectors, PndRiemannTrackFinder::fVerbose, GetLayerGem(), GetLayerMvd(), PndSttStrawMap::GetSector(), PndSttHit::GetTubeID(), hits, i, phi, Pi, push_back(), and CAMath::Sqrt().

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

96 {
97 // SetVerbose(3);
98  FairRootManager* man = FairRootManager::Instance();
99  // PndRiemannTrackFinder::AddHits(hits, branchId);
100  if (branchId == man->GetBranchId("STTHit")){
101  fSttHits = hits;
102  for (int i = 0; i < fSttHits->GetEntries(); i++){
103  PndSttHit* myHit = (PndSttHit*)(fSttHits->At(i));
104  myHit->SetEntryNr(FairLink(man->GetBranchId("SttHit"), i));
105  fHits.push_back(myHit);
106  myHit->SetPositionError(TVector3(0.5/TMath::Sqrt(12), 0.5/TMath::Sqrt(12), 200));
107  TVector3 sttPos;
108  myHit->Position(sttPos);
109  FairLink myID;
110 
111  if (myHit->GetEntryNr().GetIndex() < 0 || myHit->GetEntryNr().GetType() < 0){
112  myID = FairLink(branchId, i);
113  myHit->SetEntryNr(myID);
114  }
115  else
116  myID = myHit->GetEntryNr();
117  double phi = 0;
118 // if (sttPos.Phi() < 0)
119 // phi = sttPos.Phi() + TMath::Pi() * 2;
120 // else
121 // phi = sttPos.Phi();
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;
124 
125  fMapHitToID[fHits.size()-1]=myID;
126  fMapIDtoHit[myID] = fHits.size()-1;
127  }
128  return;
129  }
130 
131  if(branchId == man->GetBranchId("STTCombinedSkewedHits")){
132  if (hits == 0){
133  std::cout << "PndMvdSttGemRiemannTrackFinder::AddHits: no SkewedHits Branch" << std::endl;
134  return;
135  }
136  std::cout << "PndMvdSttGemRiemannTrackFinder::AddHits: SkewedHits " << hits->GetEntriesFast() << std::endl;
138  for (int i = 0; i < fSkewedSttHits->GetEntries(); i++){
139  FairHit* myHit = (FairHit*)(fSkewedSttHits->At(i));
140  myHit->SetEntryNr(FairLink(man->GetBranchId("STTCombinedSkewedHits"), i));
141  fHits.push_back(myHit);
142  myHit->SetPositionError(TVector3(0.5/TMath::Sqrt(12), 0.5/TMath::Sqrt(12), 200));
143  TVector3 sttPos;
144  myHit->Position(sttPos);
145  FairLink myID;
146 
147  if (myHit->GetEntryNr().GetIndex() < 0 || myHit->GetEntryNr().GetType() < 0){
148  myID = FairLink(branchId, i);
149  myHit->SetEntryNr(myID);
150  }
151  else
152  myID = myHit->GetEntryNr();
153  double phi = 0;
154  if (sttPos.Phi() < 0)
155  phi = sttPos.Phi() + TMath::Pi() * 2;
156  else
157  phi = sttPos.Phi();
158 // if (fVerbose > 1)
159  std::cout << "PndMvdSttGemRiemannTrackFinder::AddHits StrawMap Sector: " << myHit->GetEntryNr() << ": Phi: " << sttPos.x() << "/" << sttPos.y() << " " << phi << " Sector: " << fStrawMap.FindPhiSector(phi)<< std::endl;
160  fSttSkewedHitsInSectors[fStrawMap.FindPhiSector(phi)].push_back(myHit);
161 
162  fMapHitToID[fHits.size()-1]=myID;
163  fMapIDtoHit[myID] = fHits.size()-1;
164  }
165  return;
166  }
167 
168  if (branchId == man->GetBranchId("GEMHit")){
169  fGemHits = hits;
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);
174  FairLink myID;
175  if (myHit->GetEntryNr().GetIndex() < 0){
176  myID = FairLink(branchId, i);
177  myHit->SetEntryNr(myID);
178  }
179  else
180  myID = myHit->GetEntryNr();
181  fMapHitToID[fHits.size()-1]=myID;
182  fMapIDtoHit[myID] = fHits.size()-1;
183  }
184  return;
185  }
186 
187  for (int i = 0; i < hits->GetEntries(); i++){
188  FairHit* myHit = (FairHit*)(hits->At(i));
189  fHits.push_back(myHit);
190  FairLink myID;
191  if (myHit->GetEntryNr().GetIndex() < 0){
192  myID = FairLink(branchId, i);
193  myHit->SetEntryNr(myID);
194  }
195  else
196  myID = myHit->GetEntryNr();
197  fMapHitToID[fHits.size()-1]=myID;
198  fMapIDtoHit[myID] = fHits.size()-1;
199 
200  int Layer = 0;
201  if (branchId == man->GetBranchId("MVDHitsStrip") || branchId == man->GetBranchId("MVDHitsPixel")){
202  Layer = GetLayerMvd(myHit);
203  } else if (branchId == man->GetBranchId("GEMHit")) {
204  Layer = GetLayerGem(myHit);
205  }
206 
207  fNLayers = fLayers.size();
208  while (fNLayers < Layer+1){
209  std::vector<int> dummy;
210  fLayers.push_back(dummy);
211  fNLayers = fLayers.size();
212  }
213 
214 
215  if (fVerbose > 1) std::cout << "fMapHitToId: " << fHits.size() -1 << " : " << myID << " "
216  << myHit->GetX() << "/" << myHit->GetY() << "/" << myHit->GetZ()
217  << " Layer: " << Layer << std::endl;
218 
219  if (Layer > 0)
220  fLayers[Layer].push_back(fHits.size()-1); //putting hit in layers array
221  }
222  fNLayers = fLayers.size();
223 }
Int_t i
Definition: run_full.C:25
std::vector< std::vector< PndSttHit * > > fSttHitsInSectors
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
std::map< int, FairLink > fMapHitToID
map to convert the list of hits back into a FairLink
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")
int GetSector(int strawindex) const
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
std::vector< std::vector< FairHit * > > fSttSkewedHitsInSectors
Int_t GetTubeID() const
Definition: PndSttHit.h:75
int FindPhiSector(double phi) const
CbmHit * hits[nHits]
Definition: RiemannTest.C:19
Double_t Pi
std::vector< std::vector< int > > fLayers
contains layer information of hits
void PndRiemannTrackFinder::AddHits ( std::vector< FairHit * >  hits,
Int_t  branchId 
)
inherited

Replaces the existing array of hits with a new one.

Appends the new array of hits to the existing one

Definition at line 27 of file PndRiemannTrackFinder.cxx.

References PndRiemannTrackFinder::fHits, PndRiemannTrackFinder::fMapHitToID, PndRiemannTrackFinder::fMapIDtoHit, and i.

28 {
29  Int_t startSize = 0; //= fHits.size();
30  for (size_t i = 0; i < hits.size(); i++){
31  fHits.push_back(hits[i]);
32  FairHit* myHit = fHits[i];
33  FairLink myID;
34  if (myHit->GetEntryNr().GetIndex() < 0){
35  myID = FairLink(branchId, startSize + i);
36  }
37  else
38  myID = myHit->GetEntryNr();
39  fMapHitToID[fHits.size()-1]=myID;
40  fMapIDtoHit[myID] = fHits.size()-1;
41  }
42 }
Int_t i
Definition: run_full.C:25
std::map< int, FairLink > fMapHitToID
map to convert the list of hits back into a FairLink
std::map< FairLink, int > fMapIDtoHit
map to convert the list of detID/hitID hits into the list of hits for track finding ...
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
CbmHit * hits[nHits]
Definition: RiemannTest.C:19
void PndMvdSttGemRiemannTrackFinder::AssignGemHits ( PndRiemannTrack actTrack,
std::set< Int_t > &  startTrack 
)
private

Definition at line 776 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrack::addHit(), CheckRiemannHitGem(), fGemHits, PndRiemannTrackFinder::fMapIDtoHit, PndRiemannTrackFinder::fVerbose, and i.

Referenced by FindTracks().

776  {
777 
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);
781  PndRiemannHit actHit(fairGemHit, fMapIDtoHit[fairGemHit->GetEntryNr()]);
782 
783  if (CheckRiemannHitGem(&actTrack, &actHit,fairGemHit) != true) continue;
784 
785  if (fVerbose > 1 )
786  std::cout << "-I- PndMvdSttGemRiemannTrackFinder SearchSector: GemHit add to Track!" << std::endl;
787 
788  actTrack.addHit(actHit);
789  startTrack.insert(fMapIDtoHit[actHit.hit()->GetEntryNr()]);
790  }
791 }
Int_t i
Definition: run_full.C:25
std::map< FairLink, int > fMapIDtoHit
map to convert the list of detID/hitID hits into the list of hits for track finding ...
void addHit(PndRiemannHit &hit)
bool CheckRiemannHitGem(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
void PndMvdSttGemRiemannTrackFinder::AssignSkewedSttHits ( PndRiemannTrack actTrack,
std::set< Int_t > &  startTrack 
)
private

Definition at line 726 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrack::addHit(), CheckRiemannHitSkewedStt(), PndRiemannTrackFinder::fMapIDtoHit, fStrawMap, fSttSkewedHitsInSectors, PndRiemannTrackFinder::fVerbose, PndSttStrawMap::GetLeftSector(), PndSttStrawMap::GetRightSector(), GetStrawSector(), i, and PndRiemannTrack::refit().

Referenced by FindTracks().

727 {
728  int startSector = GetStrawSector(actTrack);
729  int searchSector = startSector;
730  int nHitsStt = -1;
731 
732 // SetVerbose(3);
733 
734  if (fVerbose > 2)
735  std::cout << "StartSector: " << searchSector << std::endl;
736 
737  std::vector<FairHit*> sttHits = fSttSkewedHitsInSectors[searchSector];
738  int leftSector = fStrawMap.GetLeftSector(startSector);
739  int rightSector = fStrawMap.GetRightSector(startSector);
740  sttHits.insert(sttHits.end(), fSttSkewedHitsInSectors[leftSector].begin(), fSttSkewedHitsInSectors[leftSector].end());
741  sttHits.insert(sttHits.end(), fSttSkewedHitsInSectors[rightSector].begin(), fSttSkewedHitsInSectors[rightSector].end());
742 
743  if (fVerbose > 2)
744  std::cout << "-I- PndMvdSttGemRiemannTrackFinder SearchSector: Actual searchSector: " << searchSector << std::endl;
745 
746  for (size_t i = 0; i < sttHits.size(); i++){
747 
748  if (nHitsStt < 0) nHitsStt = 0;
749 
750  FairHit* fairSttHit = sttHits[i];
751 
752  PndRiemannHit actHit(fairSttHit, fMapIDtoHit[fairSttHit->GetEntryNr()]);
753 
754 
755 
756  if (fVerbose > 2) {
757  std::cout << std::endl;
758  std::cout << "-I- PndMvdSttGemRiemannTrackFinder SearchSector: Act Hit: " << fairSttHit->GetEntryNr() << std::endl;
759  }
760 
761  if (CheckRiemannHitSkewedStt(&actTrack, &actHit,fairSttHit) != true) continue;
762 
763  if (fVerbose > 2 )
764  std::cout << "-I- PndMvdSttGemRiemannTrackFinder SearchSector: STTHit add to Track!" << std::endl;
765 
766  actTrack.addHit(actHit);
767  startTrack.insert(fMapIDtoHit[actHit.hit()->GetEntryNr()]);
768  actTrack.refit(kFALSE);
769 // actTrack.szFit(kFALSE);
770  nHitsStt++;
771 
772  }
773 // SetVerbose(0);
774 }
Int_t i
Definition: run_full.C:25
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 ...
int GetRightSector(int sector) const
void refit(bool withErrorCalc=true)
std::vector< std::vector< FairHit * > > fSttSkewedHitsInSectors
int GetLeftSector(int sector) const
void addHit(PndRiemannHit &hit)
void PndMvdSttGemRiemannTrackFinder::AssignSttHits ( PndRiemannTrack actTrack,
std::set< Int_t > &  startTrack 
)
private

Definition at line 636 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrack::addHit(), CheckRiemannHitStt(), PndRiemannTrackFinder::fMapIDtoHit, fStrawMap, fSttHitsInSectors, PndRiemannTrackFinder::fVerbose, PndSttStrawMap::GetLeftSector(), PndSttStrawMap::GetRightSector(), PndSttStrawMap::GetSector(), GetStrawSector(), PndSttHit::GetTubeID(), i, PndSttStrawMap::IsSectorBorderStraw(), PndSttStrawMap::IsSkewedStraw(), and PndRiemannTrack::refit().

Referenced by FindTracks().

637 {
638  int startSector = GetStrawSector(actTrack);
639  int searchSector = startSector;
640  bool continueSearch = true;
641  int nextSectorDirection = 0;
642  int nHitsStt = -1;
643 
644  if (fVerbose > 2)
645  std::cout << "StartSector: " << searchSector << std::endl;
646 
647  while (continueSearch){
648  if (nHitsStt == 0){ //check if you have found any Stt hits in the selected startSector. If this is not the case take the left one. If there are still no Stt hits take the right one
649  if (startSector == searchSector){
650  searchSector = fStrawMap.GetRightSector(startSector);
651  }
652  else {
653  searchSector = fStrawMap.GetLeftSector(startSector);
654  }
655  }
656 
657  std::vector<PndSttHit*> sttHits = fSttHitsInSectors[searchSector];
658  continueSearch = false;
659  if (fVerbose > 2)
660  std::cout << "-I- PndMvdSttGemRiemannTrackFinder SearchSector: Actual searchSector: " << searchSector << std::endl;
661 
662  for (size_t i = 0; i < sttHits.size(); i++){
663 
664  if (nHitsStt < 0) nHitsStt = 0;
665 
666  PndSttHit* fairSttHit = sttHits[i];
667 
668  if (fStrawMap.IsSkewedStraw(fairSttHit->GetTubeID())){
669 // actTrack.correctSttSkewedHit(fairSttHit, fStrawMap.GetTube(fairSttHit->GetTubeID()));
670  continue;
671  }
672 
673 
674 // PndSttHit* correctedSttHit = new PndSttHit(CalculateCorrectedSTTHit(*fairSttHit, actTrack));
675 // correctedSttHit->SetDxyz(fairSttHit->GetDx(), fairSttHit->GetDy(), fairSttHit->GetDz());
676 // correctedSttHit->SetEntryNr(FairLink(FairRootManager::Instance()->GetBranchId("STTHit"), i));
677  PndRiemannHit actHit(fairSttHit, fMapIDtoHit[fairSttHit->GetEntryNr()]);
678 
679 
680 
681  if (fVerbose > 2) {
682  std::cout << std::endl;
683  std::cout << "-I- PndMvdSttGemRiemannTrackFinder SearchSector: Act Hit: " << fairSttHit->GetEntryNr() << std::endl;
684  }
685 
686 // if (CheckRiemannHitStt(&actTrack, &actHit,(FairHit*)fSttHits->At(i)) != true) continue;
687  if (CheckRiemannHitStt(&actTrack, &actHit,fairSttHit) != true) continue;
688 
689  if (fVerbose > 2 )
690  std::cout << "-I- PndMvdSttGemRiemannTrackFinder SearchSector: STTHit add to Track!" << std::endl;
691 
692  actTrack.addHit(actHit);
693  startTrack.insert(fMapIDtoHit[actHit.hit()->GetEntryNr()]);
694  actTrack.refit(kFALSE);
695 // actTrack.szFit(kFALSE);
696  nHitsStt++;
697  if (fStrawMap.IsSectorBorderStraw(fairSttHit->GetTubeID()) != 0){
698  if (fVerbose > 2)
699  std::cout << " TubeID: " << fairSttHit->GetTubeID() << " Sector: " << fStrawMap.GetSector(fairSttHit->GetTubeID()) << std::endl;
700  if (nextSectorDirection == 0){
701  nextSectorDirection = fStrawMap.IsSectorBorderStraw(fairSttHit->GetTubeID());
702  } else if(nextSectorDirection != fStrawMap.IsSectorBorderStraw(fairSttHit->GetTubeID())){
703  continue;
704  }
705  searchSector = fStrawMap.GetSector(fairSttHit->GetTubeID()) + fStrawMap.IsSectorBorderStraw(fairSttHit->GetTubeID());
706  searchSector %= 6;
707  if (searchSector < 0)
708  searchSector = 5;
709 
710  if (fVerbose > 2 )
711  std::cout << "-I- PndMvdSttGemRiemannTrackFinder SearchSector: Next Sector: " << searchSector << " " << fStrawMap.IsSectorBorderStraw(fairSttHit->GetTubeID())<< std::endl;
712 
713  continueSearch = true;
714  }
715 
716  }
717  if (nHitsStt == 0){ //if you have not found any sttHits and you have not looked yet into the left sector from the start sector continue otherwise stop.
718  if (searchSector != fStrawMap.GetLeftSector(startSector))
719  continueSearch = true;
720  else
721  continueSearch = false;
722  }
723  }
724 }
Int_t i
Definition: run_full.C:25
bool CheckRiemannHitStt(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
std::vector< std::vector< PndSttHit * > > fSttHitsInSectors
std::map< FairLink, int > fMapIDtoHit
map to convert the list of detID/hitID hits into the list of hits for track finding ...
int IsSectorBorderStraw(int strawindex) const
int GetSector(int strawindex) const
int GetRightSector(int sector) const
bool IsSkewedStraw(int strawindex) const
void refit(bool withErrorCalc=true)
Int_t GetTubeID() const
Definition: PndSttHit.h:75
int GetLeftSector(int sector) const
void addHit(PndRiemannHit &hit)
bool PndMvdSttGemRiemannTrackFinder::CheckBoarderHitsStt ( PndTrackCand track)
private

Definition at line 983 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrackFinder::fHits, PndRiemannTrackFinder::fMapIDtoHit, fStrawMap, PndRiemannTrackFinder::fVerbose, PndSttStrawMap::GetRow(), PndSttHit::GetTubeID(), and i.

Referenced by FindTracks().

984 {
985  FairMultiLinkedData sttHitsInTrack = track->GetLinksWithType(FairRootManager::Instance()->GetBranchId("STTHit"));
986 
987  for (int i = 0; i < sttHitsInTrack.GetNLinks(); i++){
988  PndSttHit* mySttHit = (PndSttHit*)fHits[fMapIDtoHit[sttHitsInTrack.GetLink(i)]];
989  if (fVerbose > 1) std::cout << "-I- PndMvdSttGemRiemannTrackFinder::CheckBoarderHitsStt Stt Index: " << mySttHit->GetTubeID() << std::endl;
990  if (fStrawMap.GetRow(mySttHit->GetTubeID()) == 0)
991  return true;
992  }
993  return false;
994 }
Int_t i
Definition: run_full.C:25
std::map< FairLink, int > fMapIDtoHit
map to convert the list of detID/hitID hits into the list of hits for track finding ...
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
Int_t GetTubeID() const
Definition: PndSttHit.h:75
int GetRow(int strawindex) const
bool PndRiemannTrackFinder::CheckHitDistance ( int  hit1,
int  hit2 
)
protectedinherited

Tests if the distance is larger than fMinPointDistance.

Definition at line 238 of file PndRiemannTrackFinder.cxx.

References PndRiemannTrackFinder::fHits, PndRiemannTrackFinder::fMinPointDist, PndRiemannTrackFinder::fVerbose, and PndRiemannTrackFinder::HitDistance().

Referenced by PndRiemannTrackFinder::FindTracks(), FindTracks(), GetStartTracks(), PndRiemannTrackFinder::GetStartTracks(), and GetTooCloseHitsInLayer().

239 {
240  double dist = HitDistance(fHits[hit1], fHits[hit2]);
241  if (dist < fMinPointDist)
242  {
243  if (fVerbose > 1) std::cout << "Hits: " << hit1 << " " << hit2 << " too close " << dist << std::endl;
244  return false;
245  }
246  return true;
247 }
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
double HitDistance(FairHit *h1, FairHit *h2)
Calculates the distance between two hits.
double fMinPointDist
Minimum distance between two points to use them as point for the base plane.
bool PndRiemannTrackFinder::CheckHitInSameSensor ( int  hit1,
int  hit2 
)
protectedinherited

Tests if hits in the same sensor are selected.

Definition at line 305 of file PndRiemannTrackFinder.cxx.

References PndRiemannTrackFinder::fHits.

Referenced by GetStartTracks(), and PndRiemannTrackFinder::GetStartTracks().

306 {
307  FairHit* first = fHits[hit1];
308  FairHit* second = fHits[hit2];
309 
310  if (first->GetDetectorID() != 1 || first->GetDetectorID() != 2)
311  return false;
312 
313  if(((PndSdsHit*)first)->GetSensorID() == ((PndSdsHit*)second)->GetSensorID()){
314  std::cout << hit1 << " " << hit2 <<" in Same Sensor: " << ((PndSdsHit*)first)->GetSensorID() << std::endl;
315  return true;
316  }
317  return false;
318 }
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
bool PndRiemannTrackFinder::CheckHitInTrack ( std::set< int >  hitIds,
int  hit 
)
protectedinherited

Check if this HitId is used in the track already.

Definition at line 320 of file PndRiemannTrackFinder.cxx.

References PndRiemannTrackFinder::fVerbose.

Referenced by FindTracks().

321 {
322  for (std::set<int>::iterator iter = hitIds.begin(); iter != hitIds.end(); iter++){
323  if (*iter == hit){
324  if (fVerbose > 1) std::cout << "-I- PndRiemannTrackFinder::CheckHitInTrack - Hit: " << hit << " already in track!" << std::endl;
325  return true;
326  }
327  }
328  return false;
329 }
PndSdsMCPoint * hit
Definition: anasim.C:70
bool PndMvdSttGemRiemannTrackFinder::CheckRiemannHit ( PndRiemannTrack track,
PndRiemannHit hit,
FairHit *  fairHit 
)
private

Definition at line 809 of file PndMvdSttGemRiemannTrackFinder.cxx.

References CheckRiemannHitGem(), CheckRiemannHitMvd(), and CheckRiemannHitStt().

Referenced by FindTracks().

810 {
811  if (fairHit->GetEntryNr().GetType() == FairRootManager::Instance()->GetBranchId("MVDHitsStrip") ||
812  fairHit->GetEntryNr().GetType() == FairRootManager::Instance()->GetBranchId("MVDHitsPixel") ){
813  return CheckRiemannHitMvd(track, hit, fairHit);
814  } else if (fairHit->GetEntryNr().GetType() == FairRootManager::Instance()->GetBranchId("GEMHit")) {
815  return CheckRiemannHitGem(track, hit, fairHit);
816  } else if (fairHit->GetEntryNr().GetType() == FairRootManager::Instance()->GetBranchId("STTHit")) {
817  return CheckRiemannHitStt(track, hit, fairHit);
818  } else {
819  std::cout << "-E- PndMvdRIemannTrackFinder::CheckRiemannHit: Detector " << FairRootManager::Instance()->GetBranchName(fairHit->GetEntryNr().GetType()) <<
820  " not supported!" << std::endl;
821  }
822  return false;
823 }
bool CheckRiemannHitMvd(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
bool CheckRiemannHitStt(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
bool CheckRiemannHitGem(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
bool PndRiemannTrackFinder::CheckRiemannHit ( PndRiemannTrack track,
PndRiemannHit hit 
)
protectedinherited

Definition at line 331 of file PndRiemannTrackFinder.cxx.

References PndRiemannTrack::calcSZChi2(), PndRiemannTrack::dist(), fabs(), PndRiemannTrackFinder::fMaxPlaneDist, PndRiemannTrackFinder::fMaxSZChi2, PndRiemannTrackFinder::fMaxSZDist, PndRiemannTrackFinder::fVerbose, and PndRiemannTrack::szDist().

Referenced by PndRiemannTrackFinder::FindTracks().

332 {
333  double dist = track->dist(hit);
334  double szDist = track->szDist(hit);
335  double szChi2 = track->calcSZChi2(hit);
336 
337  if (fVerbose > 1) std::cout << ": dist " << dist << " szDist " << szDist << " szChi2 " << szChi2 << std::endl;
338 
339  if (fabs(dist) > fMaxPlaneDist){
340  if (fVerbose > 1) std::cout << "dist larger than " << fMaxPlaneDist << std::endl;
341  return false;
342  }
343  if (szChi2 > fMaxSZChi2){
344  if (fVerbose > 1) std::cout << " SZ Chi2 too big! Cut at: " << fMaxSZChi2<< std::endl;
345  return false;
346  }
347  if (fabs(szDist) > fMaxSZDist){
348  if (fVerbose > 1) std::cout << " SZ Dist too big! Cut at: " << fMaxSZDist << std::endl;
349  return false;
350  }
351  return true;
352 }
double calcSZChi2(PndRiemannHit *hit)
double fMaxSZChi2
Maximum allowed Chi2 in an sz fit.
double szDist(PndRiemannHit *hit)
double dist(PndRiemannHit *hit)
double fMaxPlaneDist
Distance cut between new point and riemann plane.
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
double fMaxSZDist
Distance cut between s-z coordinate of a new point and the sz-fit of the hits in the track...
bool PndMvdSttGemRiemannTrackFinder::CheckRiemannHitGem ( PndRiemannTrack track,
PndRiemannHit hit,
FairHit *  fairHit 
)
private

Definition at line 913 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrack::calcSZChi2(), PndRiemannTrack::dist(), fabs(), PndRiemannTrackFinder::fVerbose, and PndRiemannTrack::szDist().

Referenced by AssignGemHits(), and CheckRiemannHit().

914 {
915  double dist = track->dist(hit);
916  double maxDist = 2;
917  double szDist = track->szDist(hit);
918  double maxSZDist = 10;
919  double szChi2 = track->calcSZChi2(hit);
920  double maxSZChi2 = 25;
921  //double r = track->r(); //[R.K. 01/2017] unused variable?
922  //double dip=track->dip(); //[R.K. 01/2017] unused variable?
923  //bool sign; //[R.K.02/2017] Unused variable?
924  //if ((track->getHit(1)->z())>0 ) //[R.K.02/2017] Unused variable?
925  //sign=true; //[R.K.02/2017] Unused variable?
926  //else sign=false; //[R.K.02/2017] Unused variable?
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;
929 
930  if (fabs(dist) > maxDist){
931  if (fVerbose > 1) std::cout << "dist larger than " << maxDist << std::endl;
932  return false;
933  }
934 
935  if (szChi2 > maxSZChi2){
936  if (fVerbose > 1) std::cout << " SZ Chi2 too big! Cut at: " << maxSZChi2 << std::endl;
937  return false;
938  }
939  if (fabs(szDist) > maxSZDist){
940  if (fVerbose > 1) std::cout << "SZ Dist too big! Cut at: " << maxSZDist << std::endl;
941  return false;
942  }
943  return true;
944 }
double calcSZChi2(PndRiemannHit *hit)
double szDist(PndRiemannHit *hit)
double dist(PndRiemannHit *hit)
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
bool PndMvdSttGemRiemannTrackFinder::CheckRiemannHitMvd ( PndRiemannTrack track,
PndRiemannHit hit,
FairHit *  fairHit 
)
private

Definition at line 946 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrack::calcSZChi2(), PndRiemannTrack::dip(), PndRiemannTrack::dist(), fabs(), PndRiemannTrackFinder::fMaxSZDist, PndRiemannTrackFinder::fVerbose, PndRiemannTrack::getHit(), GetMaxPlaneDist(), r, PndRiemannTrack::r(), sign(), PndRiemannTrack::szDist(), and PndRiemannHit::z().

Referenced by CheckRiemannHit().

947 {
948  //double oldSZChi2 = track->szChi2(); //[R.K. 01/2017] unused variable?
949  double dist = track->dist(hit);
950  double szDist = track->szDist(hit);
951  double szChi2 = track->calcSZChi2(hit);
952  double r = track->r();
953  double dip=track->dip();
954  bool sign;
955  if ((track->getHit(1)->z())>0 )
956  sign=true;
957  else sign=false;
958  if (fVerbose > 1) std::cout << ": dist " << dist << " szDist " << szDist << " szChi2 " << szChi2 << std::endl;
959 
960  if (fabs(dist) > GetMaxPlaneDist(r,dip,sign)){
961  if (fVerbose > 1) std::cout << "dist larger than " << GetMaxPlaneDist(r,dip,sign) << std::endl;
962  return false;
963  }
964 
965 // if (fVerbose > 1) std::cout << "CheckRiemannHitMvd oldSZChi2 " << oldSZChi2 << " new SZChi2 " << szChi2 << std::endl;
966 
967 // if (oldSZChi2 < szChi2){
968 // if (fVerbose > 1) std::cout << " SZ Chi2 " << szChi2 << " bigger than before! " << oldSZChi2 << std::endl;
969 // return false;
970 // }
971 
972 // if (szChi2 > GetMaxSZChi2(r,dip,sign)){
973 // if (fVerbose > 1) std::cout << " SZ Chi2 too big! Cut at: " << GetMaxSZChi2(r,dip,sign) << std::endl;
974 // return false;
975 // }
976  if (fabs(szDist) > fMaxSZDist){
977  if (fVerbose > 1) std::cout << "SZ Dist too big! Cut at: " << fMaxSZDist << std::endl;
978  return false;
979  }
980  return true;
981 }
double calcSZChi2(PndRiemannHit *hit)
double r
Definition: RiemannTest.C:14
double GetMaxPlaneDist(double radius, double dip, bool sign)
double szDist(PndRiemannHit *hit)
double dist(PndRiemannHit *hit)
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
double r() const
double z() const
int sign(T val)
Definition: PndCADef.h:48
double fMaxSZDist
Distance cut between s-z coordinate of a new point and the sz-fit of the hits in the track...
PndRiemannHit * getHit(unsigned int i)
bool PndMvdSttGemRiemannTrackFinder::CheckRiemannHitSkewedStt ( PndRiemannTrack track,
PndRiemannHit hit,
FairHit *  fairHit 
)
private

Definition at line 872 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrack::dist(), fabs(), and PndRiemannTrackFinder::fVerbose.

Referenced by AssignSkewedSttHits().

873 {
874 
875 
876 // std::cout << "CheckRiemannHit PndRiemannHit: " << hit->x().X() << "/" << hit->x().Y() << "/" << hit->x().Z() << " " << hit->z() << std::endl;
877 
878  double dist = track->dist(hit);
879 // std::cout << "CheckRiemannHit PndRiemannHit:Dist " << dist << std::endl;
880 
881  double maxDist = 1;
882 // double szDist = track->szDist(hit);
883 // double maxSZDist = 10;
884 // double szChi2 = track->calcSZChi2(hit);
885 // double maxSZChi2 = 25;
886  //double r = track->r(); //[R.K. 01/2017] unused variable?
887  //bool sign; //[R.K.02/2017] Unused variable?
888  //if ((track->getHit(1)->z())>0 ) //[R.K.02/2017] Unused variable?
889  //sign=true; //[R.K.02/2017] Unused variable?
890  //else sign=false; //[R.K.02/2017] Unused variable?
891  if (fVerbose > 1) std::cout << "STTHit: dist " << dist << std::endl;
892 
893  if (fabs(dist) > maxDist){
894  if (fVerbose > 1)
895  std::cout << "dist larger than " << maxDist << std::endl;
896  return false;
897  } else {
898 
899 // std::cout << "PndMvdSttGemRiemannTrackFinder::CheckRiemannHitStt Hit taken! Dist: " << dist << " < " << maxDist << std::endl << std::endl;
900  }
901 //
902 // if (szChi2 > maxSZChi2){
903 // if (fVerbose > 1) std::cout << " SZ Chi2 too big! Cut at: " << maxSZChi2 << std::endl;
904 // return false;
905 // }
906 // if (fabs(szDist) > maxSZDist){
907 // if (fVerbose > 1) std::cout << "SZ Dist too big! Cut at: " << maxSZDist << std::endl;
908 // return false;
909 // }
910  return true;
911 }
double dist(PndRiemannHit *hit)
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
bool PndMvdSttGemRiemannTrackFinder::CheckRiemannHitStt ( PndRiemannTrack track,
PndRiemannHit hit,
FairHit *  fairHit 
)
private

Definition at line 825 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrack::correctSttHit(), PndRiemannTrack::dist(), fabs(), PndRiemannTrackFinder::fVerbose, PndRiemannHit::setDXYZ(), PndRiemannHit::setXYZ(), PndRiemannHit::sigmaX(), PndRiemannHit::sigmaY(), and PndRiemannHit::x().

Referenced by AssignSttHits(), and CheckRiemannHit().

826 {
827  PndRiemannHit tempHit = track->correctSttHit((PndSttHit*)fairHit);
828 
829 // std::cout << "CheckRiemannHit PndRiemannHit: " << fairHit->GetEntryNr() << " : " << hit->x().X() << "/" << hit->x().Y() << "/" << hit->x().Z() << " " << hit->z() << std::endl;
830 // std::cout << "CheckRiemannHit PndRiemannHit: " << tempHit.x().X() << "/" << tempHit.x().Y() << "/" << tempHit.x().Z() << " " << tempHit.z() << std::endl;
831 
832  hit->setXYZ(tempHit.x().X(), tempHit.x().Y(), tempHit.x().Z());
833  hit->setDXYZ(tempHit.sigmaX(), tempHit.sigmaY(), 200);
834 
835 // std::cout << "CheckRiemannHit PndRiemannHit: " << hit->x().X() << "/" << hit->x().Y() << "/" << hit->x().Z() << " " << hit->z() << std::endl;
836 
837  double dist = track->dist(hit);
838 // std::cout << "CheckRiemannHit PndRiemannHit:Dist " << dist << std::endl;
839 
840  double maxDist = 1;
841 // double szDist = track->szDist(hit);
842 // double maxSZDist = 10;
843 // double szChi2 = track->calcSZChi2(hit);
844 // double maxSZChi2 = 25;
845  //double r = track->r(); //[R.K. 01/2017] unused variable?
846  //bool sign; //[R.K.02/2017] Unused variable?
847  //if ((track->getHit(1)->z())>0 ) //[R.K.02/2017] Unused variable?
848  //sign=true; //[R.K.02/2017] Unused variable?
849  //else sign=false; //[R.K.02/2017] Unused variable?
850  if (fVerbose > 1) std::cout << "STTHit: dist " << dist << std::endl;
851 
852  if (fabs(dist) > maxDist){
853  if (fVerbose > 1)
854  std::cout << "dist larger than " << maxDist << std::endl;
855  return false;
856  } else {
857 
858 // std::cout << "PndMvdSttGemRiemannTrackFinder::CheckRiemannHitStt Hit taken! Dist: " << dist << " < " << maxDist << std::endl << std::endl;
859  }
860 //
861 // if (szChi2 > maxSZChi2){
862 // if (fVerbose > 1) std::cout << " SZ Chi2 too big! Cut at: " << maxSZChi2 << std::endl;
863 // return false;
864 // }
865 // if (fabs(szDist) > maxSZDist){
866 // if (fVerbose > 1) std::cout << "SZ Dist too big! Cut at: " << maxSZDist << std::endl;
867 // return false;
868 // }
869  return true;
870 }
PndRiemannHit correctSttHit(PndSttHit *mySttHit)
double dist(PndRiemannHit *hit)
void setDXYZ(double dx, double dy, double dz)
void setXYZ(double x, double y, double z)
double sigmaX() const
Definition: PndRiemannHit.h:78
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
const TVector3 & x() const
Definition: PndRiemannHit.h:71
double sigmaY() const
Definition: PndRiemannHit.h:79
bool PndMvdSttGemRiemannTrackFinder::CheckSZ ( PndRiemannTrack  aTrack)
private

Tests the results of the sz fit.

Definition at line 793 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrack::dip(), PndRiemannTrackFinder::fVerbose, PndRiemannTrack::getHit(), GetMaxSZChi2(), r, PndRiemannTrack::r(), sign(), PndRiemannTrack::szChi2(), PndRiemannTrack::szFit(), and PndRiemannHit::z().

Referenced by GetStartTracks().

794 {
795  aTrack.szFit(false);
796  double r = aTrack.r();
797  double dip=aTrack.dip();
798  bool sign;
799  if ((aTrack.getHit(0)->z())>0 )
800  sign=true;
801  else sign=false;
802  if (aTrack.szChi2() > GetMaxSZChi2(r,dip,sign) || aTrack.szChi2() < 0){
803  if (fVerbose > 1) std::cout << "sz-Fit does not match, Chi2: " << aTrack.szChi2() << " max: " << GetMaxSZChi2(r,dip,sign) << std::endl;
804  return false;
805  }
806  return true;
807 }
double r
Definition: RiemannTest.C:14
double szChi2() const
double r() const
double z() const
void szFit(bool withErrorCalc=true)
double GetMaxSZChi2(double radius, double dip, bool sign)
int sign(T val)
Definition: PndCADef.h:48
PndRiemannHit * getHit(unsigned int i)
bool PndRiemannTrackFinder::CheckZeroPassing ( std::set< int >  hitIds,
int  hit 
)
protectedinherited

If the track contains (0,0) all points have to go forward or all have to go backward.

Definition at line 259 of file PndRiemannTrackFinder.cxx.

References PndRiemannTrackFinder::fHits, PndRiemannTrackFinder::fMapHitToID, PndRiemannTrackFinder::fVerbose, and hit.

Referenced by FindTracks(), and GetStartTracks().

260 {
261  FairHit* testHit = fHits[hit];
262  FairHit* myHit;
263  std::set<int>::iterator iter;
264 
265  std::set<int>::iterator zeroPos = hitIds.end();
266  for (iter = hitIds.begin(); iter != hitIds.end(); iter++){
267  if (fMapHitToID[*iter].GetIndex() < 0){
268  zeroPos = iter;
269  }
270  }
271  if (zeroPos != hitIds.end()) {
272  if (zeroPos != --hitIds.end()) {
273  myHit = fHits[*(++zeroPos)];
274  } else {
275  myHit = fHits[*(--zeroPos)];
276  }
277  } else {
278  myHit = fHits[*hitIds.begin()];
279  }
280  TVector3 point1, point2, result;
281  //std::cout << " TestHit: " << *testHit << " BaseHit: " << *myHit << std::endl;
282  myHit->Position(point1);
283  testHit->Position(point2);
284  if ((point1 * point2) < 0){
285  //std::cout << "product " << point1 * point2 << " negative: ZeroPassing" << std::endl;
286  if (fVerbose > 1) std::cout << "ZeroPassing!" << std::endl;
287  return true;
288  }
289  return false;
290 }
std::map< int, FairLink > fMapHitToID
map to convert the list of hits back into a FairLink
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
PndSdsMCPoint * hit
Definition: anasim.C:70
PndTrackCand PndRiemannTrackFinder::CreateOneTrackCand ( std::vector< int >  tracks,
std::vector< PndTrackCand tempTrCnd 
)
protectedinherited

Definition at line 560 of file PndRiemannTrackFinder.cxx.

References PndTrackCand::AddHit(), PndTrackCandHit::GetDetId(), PndTrackCandHit::GetHitId(), PndTrackCand::GetNHits(), PndTrackCand::GetSortedHit(), hits, i, and map.

Referenced by PndRiemannTrackFinder::MergeTracks().

562 {
563  PndTrackCand result;
564 
565  std::map<std::pair<unsigned int, unsigned int>, int > hits;
566  for (size_t i = 0; i < tracks.size(); i++){
567  PndTrackCand myTrackCand = tempTrCnd[tracks[i]];
568 
569  unsigned int detId, hitId;
570  for (size_t j = 0; j < myTrackCand.GetNHits(); j++){
571  detId=myTrackCand.GetSortedHit(j).GetDetId();
572  hitId=myTrackCand.GetSortedHit(j).GetHitId();
573  hits[std::pair<unsigned int, unsigned int>(detId, hitId)]++;
574  }
575  }
576  for (std::map<std::pair<unsigned int, unsigned int>, int >::const_iterator it = hits.begin(); it!= hits.end(); it++){
577  std::pair<unsigned int, unsigned int> dethit = it->first;
578  result.AddHit(dethit.first, dethit.second,0);
579  }
580  return result;
581 }
Int_t i
Definition: run_full.C:25
PndTransMap * map
Definition: sim_emc_apd.C:99
PndTrackCandHit GetSortedHit(UInt_t i)
Definition: PndTrackCand.h:54
void AddHit(UInt_t detId, UInt_t hitId, Double_t rho)
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
CbmHit * hits[nHits]
Definition: RiemannTest.C:19
Int_t GetHitId() const
Int_t GetDetId() const
PndRiemannTrack PndRiemannTrackFinder::CreateRiemannTrack ( std::set< Int_t >  aHits)
protectedinherited

Creates a PndRiemannTrack from an array of indices of Hits.

Definition at line 292 of file PndRiemannTrackFinder.cxx.

References PndRiemannTrack::addHit(), PndRiemannTrackFinder::fHits, hit, PndRiemannTrack::refit(), and PndRiemannTrack::szFit().

Referenced by PndRiemannTrackFinder::FindTracks(), and FindTracks().

293 {
294  PndRiemannTrack result;
295  for (std::set<int>::iterator iter = aHits.begin(); iter != aHits.end(); iter++)
296  {
297  PndRiemannHit hit(fHits[*iter], *iter);
298  result.addHit(hit);
299  }
300  result.refit(false);
301  result.szFit(false);
302  return result;
303 }
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
void refit(bool withErrorCalc=true)
void szFit(bool withErrorCalc=true)
void addHit(PndRiemannHit &hit)
PndSdsMCPoint * hit
Definition: anasim.C:70
void PndMvdSttGemRiemannTrackFinder::FindTracks ( )

Main function to start the riemann track finding.

< finding layer's number of start hit

Definition at line 259 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndTrackCand::AddHit(), PndRiemannTrack::addHit(), AssignGemHits(), AssignSkewedSttHits(), AssignSttHits(), CheckBoarderHitsStt(), PndRiemannTrackFinder::CheckHitDistance(), PndRiemannTrackFinder::CheckHitInTrack(), CheckRiemannHit(), PndRiemannTrackFinder::CheckZeroPassing(), PndRiemannTrack::correctSttHits(), PndRiemannTrackFinder::CreateRiemannTrack(), PndRiemannTrack::dip(), PndRiemannTrackFinder::fCurvAndDipOfCand, fGemHits, PndRiemannTrackFinder::fHits, PndRiemannTrackFinder::fHitsInTracks, PndRiemannTrackFinder::fHitsTooClose, fLayers, PndRiemannTrackFinder::fMapHitToID, PndRiemannTrackFinder::fMinNumberOfHits, fNLayers, fSkewedSttHits, fSttHits, PndRiemannTrackFinder::fTrackCand, PndRiemannTrackFinder::fTracks, PndRiemannTrackFinder::fVerbose, PndTrackCand::GetNHits(), PndRiemannTrack::getNumHits(), GetStartTracks(), PndRiemannTrack::getSZm(), PndRiemannTrack::getSZt(), GetTooCloseHitsInLayer(), hits, i, n, PndRiemannTrack::orig(), p, PndTrackCand::Print(), r, PndRiemannTrack::r(), PndRiemannTrack::refit(), s, PndRiemannTrack::szFit(), PndRiemannTrackFinder::TrackExists(), and TrackHits().

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

260 {
261 
262 // SetVerbose(3);
263 
264  std::vector<std::set<Int_t> > Tracks = GetStartTracks(); //Get the possible track seeds
265 
266  std::set<int> tooClose;
267  std::set<int>::iterator iter;
268 
269  fTracks.clear();
270  fTrackCand.clear();
271  for (unsigned int trackId = 0; trackId < Tracks.size(); trackId++){ //Go through all track seeds and search for additional points
272 
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;
276 
277  std::set<Int_t> StartTrack = Tracks[trackId];
278 
279  if (fVerbose > 1){
280  if (fVerbose > 1)
281  {
282  std::cout << "------------------------------------" << std::endl;
283 
284  iter = StartTrack.begin();
285  std::cout << "Start Plane from Points: " << fMapHitToID[*iter] << " "
286  << fMapHitToID[*(++iter)] << " " << fMapHitToID[*(++iter)] << std::endl;
287  iter = StartTrack.begin();
288  std::cout << "Start Plane from Points: " << *iter << " " << *(iter++) << " " << *(iter++) << std::endl;
289  }
290  }
291 
292  if (TrackExists(StartTrack) == true){
293  if (fVerbose > 1) std::cout << "Track exists already!" << std::endl;
294  continue;
295  }
296 
297  PndRiemannTrack actTrack = CreateRiemannTrack(StartTrack);
298  int startLayer=0;
299  int startHit=*(StartTrack.begin());
300 
301  bool flag=false;
302  for(int i=1;i<fNLayers;i++){
303  for(unsigned int j=0;j<fLayers[i].size();j++){
304  if(fLayers[i][j]==startHit){
305  startLayer=i;
306  flag=true;
307  break;
308  }
309  }
310  if (flag) break;
311  }
312 
313  int testHit;
314  for (int Layer=startLayer;Layer<fNLayers;Layer++){
315  //if ((fHits[startHit]->GetZ()<(-fZClosePar)) && (Layer==2 or Layer==3 or Layer==5 or Layer==6 or Layer==8 or Layer==10)) continue; /// < in case of backward tracks disk layers can't contain hits
316  for(unsigned int testHitInLayer=0; testHitInLayer<fLayers[Layer].size();testHitInLayer++){
317  testHit=fLayers[Layer][testHitInLayer];
318 
319  if (fVerbose > 2) if (fVerbose > 1) std::cout << "Layer: " << Layer << " hitInLayer: " << testHitInLayer << " hitID " << testHit << " ";
320  if (fVerbose > 1) std::cout << "Point " << fMapHitToID[testHit] << " ";
321 
322  if (CheckHitInTrack(StartTrack, testHit)) continue;
323  iter = StartTrack.begin();
324  if (CheckHitDistance(*(iter) , testHit)!=true) continue;
325  if (CheckHitDistance(*(++iter), testHit)!=true) continue;
326  if (CheckHitDistance(*(++iter), testHit)!=true) continue;
327  if (CheckZeroPassing(StartTrack, testHit)== true) continue;
328 
329 
330  //if ((fHits[startHit]->GetZ())*(fHits[testHit]->GetZ())<0 && fabs(fHits[startHit]->GetZ())>fZClosePar && fabs(fHits[testHit]->GetZ())>fZClosePar) continue; //check the same direction on z axis
331 
332  PndRiemannHit actHit(fHits[testHit], testHit);
333  if (CheckRiemannHit(&actTrack, &actHit, fHits[testHit]) != true) continue;
334 
335  StartTrack.insert(testHit);
336 
337  actTrack.addHit(actHit);
338  actTrack.refit(false);
339  actTrack.szFit(false);
340 
341  TVectorD orig = actTrack.orig();
342  if (fVerbose > 1) std::cout << "actHit added: " << testHit << " r: " << actTrack.r() << " orig: " << orig[0] << " " << orig[1] << std::endl;
343  tooClose=GetTooCloseHitsInLayer(Layer,testHit);
344  fHitsTooClose[trackId].insert(tooClose.begin(),tooClose.end());
345  //break;
346  }
347  }
348 
349  if (fVerbose > 1) {
350  std::cout << std::endl;
351  std::cout << "PndMvdSttGemRiemannTrackFinder::FindTracks ActTrack for Assignment: ";
352  for (iter = StartTrack.begin(); iter != StartTrack.end(); iter++){
353  int hitId = *iter;
354  std::cout << fMapHitToID[hitId] << " ";
355  }
356  std::cout << std::endl;
357  }
358 
359  if (fVerbose > 1) std::cout << "Track before STT: " << actTrack << std::endl;
360 
361  if (fSttHits != NULL){ //assign STTHits to Mvd track
362  if (fVerbose > 1 )
363  std::cout << "PndMvdSttGemRiemannTrackFinder::FindTracks AssignSttHits" << std::endl;
364  AssignSttHits(actTrack, StartTrack);
365  if (fVerbose > 1 )
366  std::cout << "ActTrack size with Stt: " << actTrack.getNumHits() << " " << StartTrack.size() << std::endl;
367  actTrack.refit(false);
368  actTrack.szFit(false);
369  actTrack.correctSttHits();
370  actTrack.refit(false);
371  actTrack.szFit(false);
372  actTrack.correctSttHits();
373  actTrack.refit(false);
374  actTrack.szFit(false);
375 
376 
377  }
378 
379  if (fSkewedSttHits != NULL){
380  if (fVerbose > 1 )
381  std::cout << "PndMvdSttGemRiemannTrackFinder::FindTracks AssignSkewedSttHits" << std::endl;
382  AssignSkewedSttHits(actTrack, StartTrack);
383  if (fVerbose > 1 )
384  std::cout << "ActTrack size with Stt: " << actTrack.getNumHits() << " " << StartTrack.size() << std::endl;
385  actTrack.refit(false);
386  actTrack.szFit(false);
387  }
388 
389  if (fVerbose > 1) std::cout << "Track after STT: " << actTrack << std::endl;
390 
391  if (fGemHits != NULL){
392  if (fVerbose > 1 )
393  if (fVerbose > 1) std::cout << "PndMvdSttGemRiemannTrackFinder::FindTracks AssignGemHits" << std::endl;
394  AssignGemHits(actTrack, StartTrack);
395  if (fVerbose > 1 )
396  if (fVerbose > 1) std::cout << "ActTrack size with Gem: " << actTrack.getNumHits() << " " << StartTrack.size() << std::endl;
397  actTrack.refit(false);
398  actTrack.szFit(false);
399 
400  }
401 
402  if (fVerbose > 1) std::cout << "Track after GEM: " << actTrack << std::endl;
403 
404 
405  if ((int)actTrack.getNumHits() > (fMinNumberOfHits-1)) //if you have a track match check hits which were to close
406  {
407  std::set<int> hits = fHitsTooClose[trackId];
408  if (fVerbose > 1) std::cout << "HitsTooClose Test for Track: " << actTrack << std::endl;
409  for (iter = hits.begin(); iter != hits.end(); iter++){
410  if (fVerbose > 1) std::cout << "Too Close Point " << *iter << ": " << fMapHitToID[*iter];
411  if (CheckHitInTrack(StartTrack, *iter)) continue;
412  PndRiemannHit actHit(fHits[*iter]);
413  if (CheckRiemannHit(&actTrack, &actHit, fHits[*iter])!= true) continue;
414  StartTrack.insert(*iter);
415  actTrack.addHit(actHit);
416 
417  }
418 
419 // actTrack.refit(false);
420 // actTrack.szFit(false);
421 
422  if (fVerbose > 1) std::cout << "Hits in Track: " << StartTrack.size() << std::endl;
423 
424  fTracks.push_back(actTrack);
425  fHitsInTracks.push_back(StartTrack);
426 
427  if (fVerbose > 1){
428  TVectorD orig = actTrack.orig();
429  if (fVerbose > 1)
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()
436  << std::endl;
437  }
438  if (fVerbose > 1) {
439  for (iter = StartTrack.begin(); iter != StartTrack.end(); iter++)
440  {
441  std::cout << " " << fMapHitToID[*iter];
442  }
443  }
444  }
445  }
446 
447  // if (fVerbose > 1) std::cout << "In PndMvdRiemannTrackFinder are: " << fTracks.size() << " tracks" << std::endl;
448  for (unsigned int n = 0; n < fTracks.size(); n++){
449  PndTrackCand myTrackCand;
450  bool trackFound = false;
451  std::vector<PndRiemannHit> TrackHits = fTracks[n].getHits();
452 
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){
456  myTrackCand.AddHit(fMapHitToID[TrackHits[p].hitID()], TrackHits[p].s());
457  }
458 
459  }
460  if (fVerbose > 1) std::cout << "NPoints TrackCand: " << myTrackCand.GetNHits() << std::endl;
461  if (fVerbose > 1) myTrackCand.Print();
462  FairMultiLinkedData gemHits = myTrackCand.GetLinksWithType(FairRootManager::Instance()->GetBranchId("GEMHit"));
463  FairMultiLinkedData sttHits = myTrackCand.GetLinksWithType(FairRootManager::Instance()->GetBranchId("STTHit"));
464  if (gemHits.GetNLinks() > 3){
465  fTrackCand.push_back(myTrackCand);
466  trackFound = true;
467  }
468  else if (sttHits.GetNLinks() > 3 && CheckBoarderHitsStt(&myTrackCand)) {
469  fTrackCand.push_back(myTrackCand);
470  trackFound = true;
471 // } else if (gemHits.GetNLinks() == 0 && sttHits.GetNLinks() == 0) {
472 // fTrackCand.push_back(myTrackCand);
473 // trackFound = true;
474  } else {
475  fTracks.erase(fTracks.begin()+n);
476  n--;
477  }
478  if (trackFound) {
479 // fTracks[n].refit(false);
480 // fTracks[n].szFit(false);
481  std::pair<double,double> CurvDip(1/fTracks[n].r(),fTracks[n].dip());
482  fCurvAndDipOfCand.push_back(CurvDip);
483 
484  if (fVerbose > 0){
485  std::cout << "PndMvdSttGemRiemannTrackFinder::FindTracks TrackFound: " << myTrackCand << std::endl;
486  }
487  if (fVerbose > 1) std::cout << " numHits: " << fTracks[n].getNumHits() << std::endl;
488 // if (fVerbose > 1)
489  {
490  TVectorD myOrig = fTracks[n].orig();
491  std::cout << "Track: " << fTracks[n] << std::endl;
492  std::cout << " curv: " << 1/fTracks[n].r() << "+/-" << fTracks[n].dR()/(fTracks[n].r() * fTracks[n].r())
493  << " dip: " << fTracks[n].dip() << "+/-" << fTracks[n].dDip()
494  << " orig: " << myOrig[0] << "+/-" << fTracks[n].dX()
495  << " " << myOrig[1] << "+/-" << fTracks[n].dY() << std::endl;
496  std::cout << "PlaneChiSquare: " << fTracks[n].calcChi2Plane() << std::endl;
497  }
498  }
499  }
500 
501  // if (fVerbose > 1) std::cout << "Hits before merging: " << fTrackCand.size() << std::endl;
502  // MergeTracks();
503  // fTrackCand.clear();
504  // fTrackCand = fMergedTrackCand;
505  // if (fVerbose > 0) {
506  // if (fVerbose > 1) std::cout << "Tracks after merging:" << fMergedTrackCand.size() << std::endl;
507  // for (unsigned int p = 0; p < fTrackCand.size(); p++){
508  // fTrackCand[p].Print();
509  // } ///todo Create RiemannTracks out of PndTrackCands
510  // }
511 
512 }
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()
Double_t p
Definition: anasim.C:58
double r
Definition: RiemannTest.C:14
void Print() const
Int_t i
Definition: run_full.C:25
bool CheckRiemannHit(PndRiemannTrack *track, PndRiemannHit *hit, FairHit *fairHit)
std::vector< PndRiemannTrack > fTracks
Resulting Riemann Tracks.
bool TrackExists(std::set< Int_t > hitsInTrack)
std::map< int, FairLink > fMapHitToID
map to convert the list of hits back into a FairLink
TLorentzVector s
Definition: Pnd2DStar.C:50
int n
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
int fMinNumberOfHits
Minimum number of hits in track necessary for a match.
std::vector< PndTrackCand > fTrackCand
List of track candidates.
double getSZt() const
void AddHit(UInt_t detId, UInt_t hitId, Double_t rho)
void AssignSttHits(PndRiemannTrack &actTrack, std::set< Int_t > &startTrack)
void refit(bool withErrorCalc=true)
void AssignSkewedSttHits(PndRiemannTrack &actTrack, std::set< Int_t > &startTrack)
bool CheckHitDistance(int hit1, int hit2)
Tests if the distance is larger than fMinPointDistance.
double getSZm() const
double r() const
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.
TVectorD orig() const
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
int TrackHits()
Definition: TrackHits.C:8
void szFit(bool withErrorCalc=true)
void addHit(PndRiemannHit &hit)
CbmHit * hits[nHits]
Definition: RiemannTest.C:19
void AssignGemHits(PndRiemannTrack &actTrack, std::set< Int_t > &startTrack)
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
std::vector< std::set< Int_t > > GetStartTracks()
bool CheckHitInTrack(std::set< int > hitIds, int hit)
Check if this HitId is used in the track already.
std::vector< int > PndRiemannTrackFinder::FindTracksWithSimilarHits ( std::vector< int > &  TracksToTest,
std::vector< PndTrackCand tempTrCnd,
std::vector< int > &  tempKillAfter 
)
protectedinherited

---------—added by me

Definition at line 448 of file PndRiemannTrackFinder.cxx.

References PndRiemannTrackFinder::fVerbose, PndTrackCandHit::GetDetId(), PndTrackCandHit::GetHitId(), PndTrackCand::GetNHits(), PndTrackCand::GetSortedHit(), i, m, and PndRiemannTrackFinder::RemoveTrack().

Referenced by PndRiemannTrackFinder::MergeTracks().

449 {
450  std::vector<int> result;
451  std::map<std::pair<unsigned int,unsigned int>, int > hitCount;
452  int TrackInd = TracksToTest[0];
453 
454  PndTrackCand testTrack = tempTrCnd[TrackInd];
455 
456  result.push_back(TrackInd);
457  RemoveTrack(TrackInd, TracksToTest);
458  unsigned int detId, hitId;
459  for (size_t i = 0; i < testTrack.GetNHits(); i++)
460  {
461  detId=testTrack.GetSortedHit(i).GetDetId();
462  hitId=testTrack.GetSortedHit(i).GetHitId();
463  std::pair<unsigned int, unsigned int> hitPair(detId, hitId);
464  hitCount[hitPair] = 1;
465  }
466  int tracksToTestSize = TracksToTest.size();
467  for (int j = 0; j < tracksToTestSize; j++){
468  PndTrackCand myTrack = tempTrCnd[TracksToTest[j]];
469 
470  int NHits = 0;
471  unsigned int myTrackDetId, myTrackHitId;
472  for (size_t k = 0; k < myTrack.GetNHits(); k++){
473  myTrackDetId=myTrack.GetSortedHit(k).GetDetId();
474  myTrackHitId=myTrack.GetSortedHit(k).GetHitId();
475  std::pair<unsigned int, unsigned int> testPair(myTrackDetId, myTrackHitId);
476  if (hitCount[testPair] > 0){
477  hitCount[testPair]++;
478  NHits++;
479  }
480  }
481  if (NHits > 2){
482  result.push_back(TracksToTest[j]);
483  tempKillAfter.push_back(TracksToTest[j]);
484  }
485  }
486  if (fVerbose > 1){
487  std::cout << "Tracks with similar hits: " << std::endl;
488  for (size_t m = 0; m < result.size(); m++){
489  tempTrCnd[result[m]].Print();
490  }
491  }
492  return result;
493 }
Int_t i
Definition: run_full.C:25
__m128 m
Definition: P4_F32vec4.h:28
PndTrackCandHit GetSortedHit(UInt_t i)
Definition: PndTrackCand.h:54
void RemoveTrack(int TrackInd, std::vector< int > &TrackList)
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
Int_t GetHitId() const
Int_t GetDetId() const
std::vector< int > PndRiemannTrackFinder::FindTracksWithSimilarParameters ( int  TrackInd,
std::vector< int > &  TracksToTest,
double  curvDiff,
double  dipDiff 
)
protectedinherited

Definition at line 412 of file PndRiemannTrackFinder.cxx.

References Double_t, fabs(), PndRiemannTrackFinder::fCurvAndDipOfCand, PndRiemannTrackFinder::fTrackCand, PndRiemannTrackFinder::fVerbose, i, and PndRiemannTrackFinder::RemoveTrack().

Referenced by PndRiemannTrackFinder::MergeTracks().

413 {
414  std::vector<int> result;
415  Double_t testCurv=fCurvAndDipOfCand[TrackInd].first;
416  Double_t testDip=fCurvAndDipOfCand[TrackInd].second;
417  result.push_back(TrackInd);
418  RemoveTrack(TrackInd, TracksToTest);
419  int tracksToTestSize = TracksToTest.size();
420  if(fVerbose > 1){
421  std::cout << std::endl;
422  std::cout << "TrackInd: " << TrackInd << " tracksToTest: " << tracksToTestSize << std::endl;
423  }
424 
425  for (int i = 0; i < tracksToTestSize; i++){
426  Double_t checkCurv=fCurvAndDipOfCand[TracksToTest[i]].first;
427  Double_t checkDip=fCurvAndDipOfCand[TracksToTest[i]].second;
428  if ((fabs(2*(testCurv - checkCurv)/(testCurv + checkCurv)) < curvDiff) &&
429  (fabs(2*(testDip - checkDip)/(testDip + checkDip )) < dipDiff))
430  {
431  result.push_back(TracksToTest[i]);
432  RemoveTrack(TracksToTest[i], TracksToTest);
433  tracksToTestSize = TracksToTest.size();
434  i--;
435  }
436  }
437  if (fVerbose > 1 && result.size() > 1){
438  std::cout << "Tracks with similar parameters: curv: " << testCurv <<
439  " dip: " << testDip << std::endl;
440  for(size_t j = 0; j < result.size(); j++){
441  fTrackCand[result[j]].Print();
442 
443  }
444  }
445  return result;
446 }
std::vector< std::pair< double, double > > fCurvAndDipOfCand
Curvature and dip of fPndTrackCand.
Int_t i
Definition: run_full.C:25
void RemoveTrack(int TrackInd, std::vector< int > &TrackList)
std::vector< PndTrackCand > fTrackCand
List of track candidates.
Double_t
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
int PndMvdSttGemRiemannTrackFinder::GetLayer ( TString  identifier)
private

Definition at line 226 of file PndMvdSttGemRiemannTrackFinder.cxx.

References fLayerMap.

Referenced by GetLayerGem(), and GetLayerMvd().

227 {
228  std::map<TString, int>::iterator layerIter;
229  for (layerIter = fLayerMap.begin(); layerIter != fLayerMap.end(); layerIter++){
230  if(identifier.Contains(layerIter->first)){
231  return layerIter->second;
232  }
233  }
234  return 0;
235 }
std::map< TString, int > fLayerMap
identifier string, assigned layer id
int PndMvdSttGemRiemannTrackFinder::GetLayerGem ( FairHit *  hit)
private

Definition at line 237 of file PndMvdSttGemRiemannTrackFinder.cxx.

References GetLayer(), PndGemHit::GetSensorNr(), PndGemHit::GetStationNr(), and TString.

Referenced by AddHits().

238 {
239  PndGemHit* gemHit = (PndGemHit*)hit;
240 
241  TString prefix("Gem_");
242  prefix+=(gemHit->GetStationNr());
243  prefix+=("_");
244  prefix+=(gemHit->GetSensorNr());
245 
246  return GetLayer(prefix);
247 
248 }
Int_t GetSensorNr() const
Definition: PndGemHit.h:83
Int_t GetStationNr() const
Definition: PndGemHit.h:81
PndSdsMCPoint * hit
Definition: anasim.C:70
int PndMvdSttGemRiemannTrackFinder::GetLayerMvd ( FairHit *  hit)
private

Definition at line 250 of file PndMvdSttGemRiemannTrackFinder.cxx.

References fGeoH, GetLayer(), PndGeoHandling::GetPath(), PndSdsHit::GetSensorID(), and TString.

Referenced by AddHits().

251 {
252  PndSdsHit* tempHit = (PndSdsHit*) (hit);
253  TString geoPath = fGeoH->GetPath(tempHit->GetSensorID());
254 
255  return GetLayer(geoPath);
256 
257 }
TString GetPath(Int_t shortID)
for a given shortID the path is returned
PndSdsMCPoint * hit
Definition: anasim.C:70
Int_t GetSensorID() const
Definition: PndSdsHit.h:90
double PndMvdSttGemRiemannTrackFinder::GetMaxPlaneDist ( double  radius,
double  dip,
bool  sign 
)
private

calc Theta from dip

Definition at line 1046 of file PndMvdSttGemRiemannTrackFinder.cxx.

References fabs(), fCutDistH, PndRiemannTrackFinder::fMaxPlaneDist, Pi, and CAMath::Tan().

Referenced by CheckRiemannHitMvd().

1047 {
1048  double Pt=((radius/100)*2*3*1E8)/1E9;
1049  double Theta;
1050  if (fabs(TMath::ACos(dip)) < 1E-100){
1051  Theta = 0;
1052  }
1053  else {
1054  if (sign) Theta=(TMath::ATan(TMath::Power(TMath::Tan(TMath::ACos(dip)),-1)))*180/TMath::Pi();
1055  else Theta=(TMath::Pi()-TMath::ATan(TMath::Power(TMath::Tan(TMath::ACos(dip)),-1)))*180/TMath::Pi();
1056  }
1057 
1058  if(fCutDistH!=NULL){
1059  double minPt=fCutDistH->GetXaxis()->GetXmin();
1060  double maxPt=fCutDistH->GetXaxis()->GetXmax();
1061  double minTh=fCutDistH->GetYaxis()->GetXmin();
1062  double maxTh=fCutDistH->GetYaxis()->GetXmax();
1063 
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;
1066 
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);
1072 
1073  }
1074  else
1075  return fMaxPlaneDist;
1076 }
float Tan(float x)
Definition: PndCAMath.h:165
double fMaxPlaneDist
Distance cut between new point and riemann plane.
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
int sign(T val)
Definition: PndCADef.h:48
Double_t Pi
double PndMvdSttGemRiemannTrackFinder::GetMaxSZChi2 ( double  radius,
double  dip,
bool  sign 
)
private

calc Theta from dip

Definition at line 1078 of file PndMvdSttGemRiemannTrackFinder.cxx.

References fabs(), fCutChi2H, PndRiemannTrackFinder::fMaxSZChi2, Pi, and CAMath::Tan().

Referenced by CheckSZ().

1079 {
1080  double Pt=((radius/100)*2*3*1E8)/1E9;
1081  double Theta;
1082  if (fabs(TMath::ACos(dip)) < 1E-100){
1083  Theta = 0;
1084  }
1085  else {
1086  if (sign) Theta=(TMath::ATan(TMath::Power(TMath::Tan(TMath::ACos(dip)),-1)))*180/TMath::Pi();
1087  else Theta=(TMath::Pi()-TMath::ATan(TMath::Power(TMath::Tan(TMath::ACos(dip)),-1)))*180/TMath::Pi();
1088  }
1089  if(fCutChi2H!=NULL){
1090  double minPt=fCutChi2H->GetXaxis()->GetXmin();
1091  double maxPt=fCutChi2H->GetXaxis()->GetXmax();
1092  double minTh=fCutChi2H->GetYaxis()->GetXmin();
1093  double maxTh=fCutChi2H->GetYaxis()->GetXmax();
1094 
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;
1097 
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);
1103 
1104  }
1105  else
1106  return fMaxSZChi2;
1107 }
double fMaxSZChi2
Maximum allowed Chi2 in an sz fit.
float Tan(float x)
Definition: PndCAMath.h:165
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
int sign(T val)
Definition: PndCADef.h:48
Double_t Pi
std::vector<PndTrackCand> PndRiemannTrackFinder::GetMergedTrackCands ( )
inlineinherited

Definition at line 33 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fMergedTrackCand.

33 {return fMergedTrackCand;}
std::vector< PndTrackCand > fMergedTrackCand
PndTrack PndRiemannTrackFinder::GetPndTrack ( int  i,
double  B 
)
inlineinherited

Returns the track with the index i.

Definition at line 30 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fTracks, and i.

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

30 {return fTracks[i].getPndTrack(B);};
Int_t i
Definition: run_full.C:25
std::vector< PndRiemannTrack > fTracks
Resulting Riemann Tracks.
std::vector< std::set< Int_t > > PndMvdSttGemRiemannTrackFinder::GetStartTracks ( )
private

going through layers : first, second and third

Definition at line 514 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrack::addHit(), PndRiemannTrackFinder::CheckHitDistance(), PndRiemannTrackFinder::CheckHitInSameSensor(), CheckSZ(), PndRiemannTrackFinder::CheckZeroPassing(), PndRiemannTrackFinder::fHits, PndRiemannTrackFinder::fHitsTooClose, fLayers, PndRiemannTrackFinder::fMapHitToID, fNLayers, PndRiemannTrackFinder::fUseZeroPos, PndRiemannTrackFinder::fVerbose, GetTooCloseHitsInLayer(), i, PndRiemannTrack::orig(), and PndRiemannTrack::refit().

Referenced by FindTracks().

515 {
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) {
522  int shift = 0;
523  if (fUseZeroPos)
524  shift = 1;
525  for (int FirstLayer = 1 - shift; FirstLayer < fNLayers - 2; FirstLayer++) {
526  for (int SecondLayer = FirstLayer + 1; SecondLayer < fNLayers - 1; SecondLayer++) {
527 // for (int ThirdLayer = SecondLayer + 1; ThirdLayer < fNLayers; ThirdLayer++) {
528  for (int ThirdLayer = fNLayers - 1; ThirdLayer > SecondLayer; ThirdLayer--) {
529 
530  for (unsigned int firstInLayer = 0; firstInLayer < fLayers[FirstLayer].size(); firstInLayer++) {
531  int first = fLayers[FirstLayer][firstInLayer];
532  // if ((fHits[first]->GetZ()<(-fZClosePar)) && (SecondLayer==2 or SecondLayer==3 or SecondLayer==5 or SecondLayer==6 or SecondLayer==8 or SecondLayer==10)) continue;
533  for (unsigned int secondInLayer = 0; secondInLayer < fLayers[SecondLayer].size(); secondInLayer++) {
534  int second = fLayers[SecondLayer][secondInLayer];
535  // if ((fHits[second]->GetZ()<(-fZClosePar)) && (ThirdLayer==2 or ThirdLayer==3 or ThirdLayer==5 or ThirdLayer==6 or ThirdLayer==8 or ThirdLayer==10)) continue;
536  // if ((fHits[first]->GetZ())*(fHits[second]->GetZ())<0 && fabs(fHits[first]->GetZ())>fZClosePar && fabs(fHits[second]->GetZ())>fZClosePar) {/*printf("Diff Sign of Points z1=%e z2=%e \n",fHits[first]->GetZ(),fHits[second]->GetZ()); */continue;} //my// check the same direction on z axis
537 
538  for (unsigned int thirdInLayer = 0; thirdInLayer < fLayers[ThirdLayer].size(); thirdInLayer++) {
539  int third = fLayers[ThirdLayer][thirdInLayer];
540  //if ((fHits[second]->GetZ())*(fHits[third]->GetZ())<0 && fabs(fHits[second]->GetZ())>fZClosePar && fabs(fHits[third]->GetZ())>fZClosePar) {/*printf("Diff Sign of Points z1=%e z2=%e \n",fHits[first]->GetZ(),fHits[second]->GetZ());*/ continue;} //my// check the same direction on z axis
541  if (fVerbose > 2)
542  std::cout
543  << "Checking Points for Start Triplet: "
544  << first << " " << second << " "
545  << third << std::endl;
546  if (fVerbose > 2)
547  std::cout
548  << "Checking Points for Start Triplet: "
549  << fMapHitToID[first] << " "
550  << fMapHitToID[second] << " "
551  << fMapHitToID[third] << std::endl;
552 
553  if (CheckHitDistance(first, third) != true) {
554  tooCloseFirst.insert(third);
555  continue;
556  }
557  if (CheckHitDistance(second, third) != true) {
558  tooCloseSecond.insert(third);
559  continue;
560  }
561  if (CheckHitInSameSensor(first, third) == true)
562  continue;
563  if (CheckHitInSameSensor(second, third) == true)
564  continue;
565 
566  actCandidates.clear();
567  actCandidates.insert(first);
568  actCandidates.insert(second);
569 
570  if (CheckZeroPassing(actCandidates, third)== true) continue;
571 
572  actCandidates.insert(third);
573 
574  PndRiemannTrack actTrack; // = new PndRiemannTrack();
575  PndRiemannHit hit1(fHits[first]);
576  PndRiemannHit hit2(fHits[second]);
577  PndRiemannHit hit3(fHits[third]);
578  actTrack.addHit(hit1);
579  actTrack.addHit(hit2);
580  actTrack.addHit(hit3);
581  actTrack.refit(false);
582  if (CheckSZ(actTrack) != true)
583  continue;
584  TVectorT<double> orig = actTrack.orig();
585 // if (fVerbose > 1)
586  {
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;
592  }
593  Tracks.push_back(actCandidates);
594  tooCloseFirst = GetTooCloseHitsInLayer(
595  FirstLayer, first);
596  tooCloseSecond = GetTooCloseHitsInLayer(
597  SecondLayer, second);
598  tooCloseThird = GetTooCloseHitsInLayer(
599  ThirdLayer, third);
600  std::set<int> combHits = tooCloseFirst;
601  combHits.insert(tooCloseSecond.begin(), tooCloseSecond.end());
602  combHits.insert(tooCloseThird.begin(), tooCloseThird.end());
603  fHitsTooClose.push_back(combHits);
604 
605  }
606 
607  }
608 
609  }
610 
611  }
612  }
613  }
614  }
615 
616  if (fVerbose > 1) {
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 << " ";
622  }
623  std::cout << std::endl;
624  for(std::set<int>::iterator iter = aTrack.begin(); iter != aTrack.end(); iter++) {
625  std::cout << fMapHitToID[*iter] << " ";
626  }
627  std::cout << std::endl;
628  }
629  std::cout << std::endl;
630  }
631  return Tracks;
632 }
std::vector< std::set< int > > fHitsTooClose
matrix of TrackNr and hits which are too close to one of the three starting points ...
std::set< int > GetTooCloseHitsInLayer(int LayerNumber, int HitNumber)
Int_t i
Definition: run_full.C:25
std::map< int, FairLink > fMapHitToID
map to convert the list of hits back into a FairLink
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
void refit(bool withErrorCalc=true)
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.
bool CheckSZ(PndRiemannTrack aTrack)
Tests the results of the sz fit.
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.
TVectorD orig() const
void addHit(PndRiemannHit &hit)
std::vector< std::vector< int > > fLayers
contains layer information of hits
int PndMvdSttGemRiemannTrackFinder::GetStrawSector ( PndRiemannTrack track)
private

Definition at line 996 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrackFinder::fHits, PndSttStrawMap::FindPhiSector(), PndRiemannTrackFinder::fMapHitToID, PndRiemannTrackFinder::fMapIDtoHit, fStrawMap, PndRiemannTrackFinder::fVerbose, PndRiemannTrack::getHits(), and i.

Referenced by AssignSkewedSttHits(), and AssignSttHits().

997 {
998  double radiusSq(.0), oldRadiusSq(.0);
999  int indexHitMaxRadius(-1);
1000 
1001 
1002  std::vector<PndRiemannHit> riemannHits = track.getHits();
1003 
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")){
1010  FairHit* FairHit = (PndSdsHit*)fHits[fMapIDtoHit[hitLink]];
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;
1013 
1014  if (radiusSq > oldRadiusSq){
1015  oldRadiusSq = radiusSq;
1016  indexHitMaxRadius = fMapIDtoHit[hitLink];
1017  }
1018  }
1019  }
1020  if (indexHitMaxRadius > -1){
1021  if (fVerbose > 1) std::cout << "-I- PndMvdSttGemRiemannTrackFinder::GetStrawSector IndexHitMaxRadius: " << indexHitMaxRadius << " Link: " << fMapHitToID[indexHitMaxRadius] << std::endl;
1022  FairHit* FairHit = (PndSdsHit*)fHits[indexHitMaxRadius];
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;
1025  return fStrawMap.FindPhiSector(hitPos.Phi());
1026  }
1027  return -1;
1028 }
Int_t i
Definition: run_full.C:25
std::map< int, FairLink > fMapHitToID
map to convert the list of hits back into a FairLink
std::map< FairLink, int > fMapIDtoHit
map to convert the list of detID/hitID hits into the list of hits for track finding ...
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
int FindPhiSector(double phi) const
std::vector< PndRiemannHit > getHits() const
std::set< int > PndMvdSttGemRiemannTrackFinder::GetTooCloseHitsInLayer ( int  LayerNumber,
int  HitNumber 
)
private

Definition at line 1030 of file PndMvdSttGemRiemannTrackFinder.cxx.

References PndRiemannTrackFinder::CheckHitDistance(), fLayers, and i.

Referenced by FindTracks(), and GetStartTracks().

1031 {
1032  std::set<int> result;
1033  int testN;
1034  for(unsigned int i=0;i<fLayers[LayerNumber].size();i++){
1035  testN=fLayers[LayerNumber][i];
1036  if (CheckHitDistance(HitNumber, testN)!= true){
1037  if (testN != HitNumber){
1038  result.insert(testN);
1039  }
1040  }
1041  }
1042  return result;
1043 
1044 }
Int_t i
Definition: run_full.C:25
bool CheckHitDistance(int hit1, int hit2)
Tests if the distance is larger than fMinPointDistance.
std::vector< std::vector< int > > fLayers
contains layer information of hits
PndRiemannTrack PndRiemannTrackFinder::GetTrack ( int  i)
inlineinherited

Returns the number of found tracks.

Definition at line 29 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fTracks, and i.

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec().

29 {return fTracks[i];};
Int_t i
Definition: run_full.C:25
std::vector< PndRiemannTrack > fTracks
Resulting Riemann Tracks.
std::vector<PndTrackCand> PndRiemannTrackFinder::GetTrackCand ( )
inlineinherited

Returns the hits belonging to track i.

Definition at line 32 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fTrackCand.

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

32 {return fTrackCand;}
std::vector< PndTrackCand > fTrackCand
List of track candidates.
PndTrackCand PndRiemannTrackFinder::GetTrackCand ( int  i)
inlineinherited

Definition at line 34 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fTrackCand, and i.

34 {return fTrackCand[i];}
Int_t i
Definition: run_full.C:25
std::vector< PndTrackCand > fTrackCand
List of track candidates.
std::set<Int_t> PndRiemannTrackFinder::GetTrackCandidates ( int  i)
inlineinherited

Definition at line 31 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fHitsInTracks, and i.

31 {return fHitsInTracks[i];};
Int_t i
Definition: run_full.C:25
std::vector< std::set< Int_t > > fHitsInTracks
Vector of indizes which hits where used in which track.
double PndRiemannTrackFinder::HitDistance ( FairHit *  h1,
FairHit *  h2 
)
inherited

Calculates the distance between two hits.

Definition at line 537 of file PndRiemannTrackFinder.cxx.

Referenced by PndRiemannTrackFinder::CheckHitDistance(), and PndRiemannTrackFinder::HitTooClose().

538 {
539  TVector3 vH1, vH2, result;
540  h1->Position(vH1);
541  h2->Position(vH2);
542 
543  result = vH1 -vH2;
544  return result.Mag();
545 }
int PndRiemannTrackFinder::HitTooClose ( std::set< Int_t >  hitsInUse,
FairHit *  newHit,
double  threshold 
)
inherited

returns if and which hit was too close to the hit which is tested

Definition at line 547 of file PndRiemannTrackFinder.cxx.

References fabs(), PndRiemannTrackFinder::fHits, PndRiemannTrackFinder::fVerbose, h1, PndRiemannTrackFinder::HitDistance(), and i.

548 {
549  int i = 0;
550  for (std::set<int>::iterator iter = hitsInUse.begin(); iter != hitsInUse.end(); iter++){
551  i++;
552  FairHit* h1 = fHits[*iter];
553  if (fVerbose > 2) std::cout << "Point Distance: " << HitDistance(h1, newHit) << std::endl;
554  if (fabs(HitDistance(h1, newHit)) < threshold)
555  return i;
556  }
557  return -1;
558 }
Int_t i
Definition: run_full.C:25
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
double HitDistance(FairHit *h1, FairHit *h2)
Calculates the distance between two hits.
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
double threshold
void PndMvdSttGemRiemannTrackFinder::InitLayerMap ( )
private
void PndMvdSttGemRiemannTrackFinder::InitLayerMapGem ( )
private

Definition at line 79 of file PndMvdSttGemRiemannTrackFinder.cxx.

References fLastLayerId, and fLayerMap.

Referenced by InitLayerMap().

80 {
81  fLayerMap["Gem_1_1"] = fLastLayerId + 1;
82  fLayerMap["Gem_1_2"] = fLastLayerId + 2;
83 
84  fLayerMap["Gem_2_1"] = fLastLayerId + 3;
85  fLayerMap["Gem_2_2"] = fLastLayerId + 4;
86 
87  fLayerMap["Gem_3_1"] = fLastLayerId + 5;
88  fLayerMap["Gem_3_2"] = fLastLayerId + 6;
89 
90  fLastLayerId += 6;
91 
92 }
std::map< TString, int > fLayerMap
identifier string, assigned layer id
void PndMvdSttGemRiemannTrackFinder::InitLayerMapMvd ( )
private

Definition at line 34 of file PndMvdSttGemRiemannTrackFinder.cxx.

References fLastLayerId, and fLayerMap.

Referenced by InitLayerMap().

35 {
36  fLayerMap["PixeloBlo1"] = fLastLayerId + 1;
37  fLayerMap["PixeloSdko(Silicon)_1"] = fLastLayerId + 2; //naming after MVD2.2
38  fLayerMap["PixeloSdkoco(Silicon)_1"] = fLastLayerId + 2;
39  fLayerMap["PixeloSdko(Silicon)_2"] = fLastLayerId + 3; //naming after MVD2.2
40  fLayerMap["PixeloSdkoco(Silicon)_2"] = fLastLayerId + 3;
41  fLayerMap["PixeloSdko(Silicon)_3"] = fLastLayerId + 4; //naming after MVD2.2
42  fLayerMap["PixeloSdkoco(Silicon)_3"] = fLastLayerId + 4;
43  fLayerMap["PixeloSdko(Silicon)_4"] = fLastLayerId + 5; //naming after MVD2.2
44  fLayerMap["PixeloSdkoco(Silicon)_4"] = fLastLayerId + 5;
45  fLayerMap["PixeloBlo2"] = fLastLayerId + 6;
46  fLayerMap["PixeloLdkoio(Silicon)_1"] = fLastLayerId + 7; //naming after MVD2.2
47  fLayerMap["PixeloLdkoco(Silicon)_1"] = fLastLayerId + 7;
48  fLayerMap["PixeloLdkoiio(Silicon)_1"] = fLastLayerId + 8; //naming after MVD2.2
49  fLayerMap["PixeloLdkoco(Silicon)_2"] = fLastLayerId + 8;
50  fLayerMap["PixeloLdkoiiio(Silicon)_1"] = fLastLayerId + 9; //naming after MVD2.2
51  fLayerMap["PixeloLdkoco(Silicon)_3"] = fLastLayerId + 9;
52  fLayerMap["PixeloLdkoiiio(Silicon)_2"] = fLastLayerId + 10; //naming after MVD2.2
53  fLayerMap["PixeloLdkoco(Silicon)_4"] = fLastLayerId + 10;
54  fLayerMap["PixeloLdkoiio(Silicon)_2"] = fLastLayerId + 11; //naming after MVD2.2
55  fLayerMap["PixeloLdkoco(Silicon)_5"] = fLastLayerId + 11;
56  fLayerMap["PixeloLdkoio(Silicon)_2"] = fLastLayerId + 12; //naming after MVD2.2
57  fLayerMap["PixeloLdkoco(Silicon)_6"] = fLastLayerId + 12;
58  fLayerMap["PixeloLdkoiiio(Silicon)_3"] = fLastLayerId + 13; //naming after MVD2.2
59  fLayerMap["PixeloLdkoco(Silicon)_7"] = fLastLayerId + 13;
60  fLayerMap["PixeloLdkoiiio(Silicon)_4"] = fLastLayerId + 14; //naming after MVD2.2
61  fLayerMap["PixeloLdkoco(Silicon)_8"] = fLastLayerId + 14;
62 
63  fLayerMap["StripoBl3o(Silicon)"] = fLastLayerId + 15;
64  fLayerMap["Fwdo(Silicon)_1"] = fLastLayerId + 16;
65  fLayerMap["StripoBl4o(Silicon)"] = fLastLayerId + 17;
66  //fLayerMap["Fwdo(Silicon)_2")){Layer=10;flag=false;}
67 
68  fLayerMap["StripoLdkoTrapSoRingAoSilicon_1"] = fLastLayerId + 18;
69  fLayerMap["StripoLdkoTrapSoRingAoSilicon_2"] = fLastLayerId + 19;
70  fLayerMap["StripoLdkoTrapSoRingBoSilicon_1"] = fLastLayerId + 18;
71  fLayerMap["StripoLdkoTrapSoRingBoSilicon_2"] = fLastLayerId + 19;
72  fLayerMap["StripoLdko5-6oTrapSo(Silicon)_1"] = fLastLayerId + 20;
73 
74  fLayerMap["LambdaDisk_1"] = fLastLayerId + 21;
75  fLayerMap["LambdaDisk_2"] = fLastLayerId + 22;
76  fLastLayerId += 22;
77 }
std::map< TString, int > fLayerMap
identifier string, assigned layer id
void PndRiemannTrackFinder::MergeTracks ( )
inherited

Definition at line 354 of file PndRiemannTrackFinder.cxx.

References counter, PndRiemannTrackFinder::CreateOneTrackCand(), PndRiemannTrackFinder::fCurvDiff, PndRiemannTrackFinder::fDipDiff, PndRiemannTrackFinder::FindTracksWithSimilarHits(), PndRiemannTrackFinder::FindTracksWithSimilarParameters(), PndRiemannTrackFinder::fMergedTrackCand, PndRiemannTrackFinder::fTrackCand, PndRiemannTrackFinder::fVerbose, i, and PndRiemannTrackFinder::RemoveTrack().

355 {
356  std::vector<int> RemainingTracks;
357  std::vector<int> SelectedTracks;
358  std::vector<int> TracksToMerge;
359  if (fVerbose > 1) std::cout << "fTrackCand size: " << fTrackCand.size() << std::endl;
360  for (size_t i = 0; i < fTrackCand.size(); i++){
361  RemainingTracks.push_back(i);
362  }
363  int remainingTracksSize = RemainingTracks.size();
364  if (fVerbose > 1) std::cout << "RemainingTracks: " << RemainingTracks.size() << std::endl;
365  while(remainingTracksSize != 0){
366  SelectedTracks = FindTracksWithSimilarParameters(RemainingTracks[0], RemainingTracks, fCurvDiff, fDipDiff);
367  remainingTracksSize=RemainingTracks.size();
368  if (fVerbose > 1) std::cout << "RemainingTracks: " << RemainingTracks.size() << std::endl;
369  if (SelectedTracks.size() > 1){
370  //int selectedTracksSize = SelectedTracks.size(); //[R.K. 01/2017] unused variable
371  std::vector<PndTrackCand> tempTrCnd;
372  std::vector<int> tempST;
373  std::vector<int> tempKillAfter;
374 
375  for(size_t k=0;k<SelectedTracks.size();k++){
376  tempTrCnd.push_back(fTrackCand[SelectedTracks[k]]);
377  tempST.push_back(k);
378  }
379  //int tempSize0=tempTrCnd.size(); //[R.K. 01/2017] unused variable?
380  int tempSize=tempTrCnd.size();
381  bool checkMerge=true;
382  while (checkMerge){
383  int counter=0;
384  for(int j=0;j<tempSize;j++){
385  TracksToMerge = FindTracksWithSimilarHits(tempST,tempTrCnd,tempKillAfter);
386  //selectedTracksSize = SelectedTracks.size(); //[R.K. 01/2017] unused variable
387  PndTrackCand newCand = CreateOneTrackCand(TracksToMerge,tempTrCnd);
388  tempTrCnd.push_back(newCand);
389  tempST.push_back(tempTrCnd.size()-1);
390  if (TracksToMerge.size()>1) counter++;
391  }
392  if (counter>0)
393  checkMerge=true;
394  else checkMerge=false;
395 
396  for(size_t k=0;k<tempKillAfter.size();k++){
397  for(size_t i=0;i<tempST.size();i++){
398  if (tempST[i]==tempKillAfter[k]){
399  RemoveTrack(tempKillAfter[k], tempST);
400  }
401  }
402  }
403  }
404  for(size_t k=0;k<tempST.size();k++){
405  fMergedTrackCand.push_back(tempTrCnd[tempST[k]]);
406  }
407  }
408  else fMergedTrackCand.push_back(fTrackCand[SelectedTracks[0]]);
409  }
410 }
Int_t i
Definition: run_full.C:25
std::vector< int > FindTracksWithSimilarParameters(int TrackInd, std::vector< int > &TracksToTest, double curvDiff, double dipDiff)
PndTrackCand CreateOneTrackCand(std::vector< int > tracks, std::vector< PndTrackCand > tempTrCnd)
void RemoveTrack(int TrackInd, std::vector< int > &TrackList)
std::vector< PndTrackCand > fTrackCand
List of track candidates.
std::vector< PndTrackCand > fMergedTrackCand
double fDipDiff
TrackMerger parameter.
int counter
Definition: ZeeAnalysis.C:59
double fCurvDiff
TrackMerger parameter.
std::vector< int > FindTracksWithSimilarHits(std::vector< int > &TracksToTest, std::vector< PndTrackCand > tempTrCnd, std::vector< int > &tempKillAfter)
---------—added by me
int PndRiemannTrackFinder::NTracks ( )
inlineinherited

Definition at line 28 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fTrackCand.

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

28 {return fTrackCand.size();};
std::vector< PndTrackCand > fTrackCand
List of track candidates.
PndMvdSttGemRiemannTrackFinder& PndMvdSttGemRiemannTrackFinder::operator= ( const PndMvdSttGemRiemannTrackFinder )
delete
void PndRiemannTrackFinder::RemoveTrack ( int  TrackInd,
std::vector< int > &  TrackList 
)
protectedinherited

Definition at line 495 of file PndRiemannTrackFinder.cxx.

References i.

Referenced by PndRiemannTrackFinder::FindTracksWithSimilarHits(), PndRiemannTrackFinder::FindTracksWithSimilarParameters(), and PndRiemannTrackFinder::MergeTracks().

496 {
497  int trackListSize = TrackList.size();
498  for(int i = 0; i < trackListSize; i++){
499  if (TrackList[i] == TrackInd){
500  TrackList.erase(TrackList.begin()+i);
501  trackListSize = TrackList.size();
502  }
503  }
504 }
Int_t i
Definition: run_full.C:25
void PndRiemannTrackFinder::SetCurvDiff ( double  val)
inlineinherited

Definition at line 44 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fCurvDiff, and val.

44 {fCurvDiff = val;}
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
double fCurvDiff
TrackMerger parameter.
void PndMvdSttGemRiemannTrackFinder::SetCutChi2H ( TH2F *  hist)
inline
void PndMvdSttGemRiemannTrackFinder::SetCutDistH ( TH2F *  hist)
inline
void PndRiemannTrackFinder::SetDipDiff ( double  val)
inlineinherited

Definition at line 45 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fDipDiff, and val.

45 {fDipDiff = val;}
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
double fDipDiff
TrackMerger parameter.
void PndRiemannTrackFinder::SetHits ( std::vector< FairHit * >  hits)
inlineinherited

Definition at line 23 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fHits, and hits.

23 {fHits = hits;};
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)
CbmHit * hits[nHits]
Definition: RiemannTest.C:19
void PndRiemannTrackFinder::SetMaxPlaneDistance ( double  val)
inlineinherited

Definition at line 38 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fMaxPlaneDist, and val.

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

38 {fMaxPlaneDist = val;}
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
double fMaxPlaneDist
Distance cut between new point and riemann plane.
void PndRiemannTrackFinder::SetMaxSZChi2 ( double  val)
inlineinherited

Definition at line 40 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fMaxSZChi2, and val.

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

40 {fMaxSZChi2 = val;}
double fMaxSZChi2
Maximum allowed Chi2 in an sz fit.
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
void PndRiemannTrackFinder::SetMaxSZDist ( double  val)
inlineinherited

Definition at line 39 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fMaxSZDist, and val.

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

39 {fMaxSZDist = val;}
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
double fMaxSZDist
Distance cut between s-z coordinate of a new point and the sz-fit of the hits in the track...
void PndRiemannTrackFinder::SetMinNumberOfHits ( int  val)
inlineinherited

Definition at line 43 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fMinNumberOfHits, and val.

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
int fMinNumberOfHits
Minimum number of hits in track necessary for a match.
void PndRiemannTrackFinder::SetMinPointDist ( double  val)
inlineinherited

Definition at line 41 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fMinPointDist, and val.

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

41 {fMinPointDist = val;}
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
double fMinPointDist
Minimum distance between two points to use them as point for the base plane.
void PndMvdSttGemRiemannTrackFinder::SetSttTubeArray ( TClonesArray *  SttTubeArray)
inline
void PndRiemannTrackFinder::SetUseZeroPos ( bool  val)
inlineinherited

Definition at line 42 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fUseZeroPos, and val.

42 {fUseZeroPos = val;}
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
void PndRiemannTrackFinder::SetVerbose ( int  val)
inlineinherited

Adds one new hit to the array of hits.

Definition at line 27 of file PndRiemannTrackFinder.h.

References PndRiemannTrackFinder::fVerbose, and val.

Referenced by PndMvdSttGemRiemannTrackFinderTask::Exec(), and PndMvdRiemannTrackFinderTask::Exec().

27 {fVerbose = val;}
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
bool PndRiemannTrackFinder::TrackExists ( std::set< Int_t >  hitsInTrack)
protectedinherited

Definition at line 506 of file PndRiemannTrackFinder.cxx.

References PndRiemannTrackFinder::fHitsInTracks, PndRiemannTrackFinder::fVerbose, and i.

Referenced by PndRiemannTrackFinder::FindTracks(), FindTracks(), and PndRiemannTrackFinder::GetStartTracks().

506  {
507  bool result = true;
508  bool oneNumberEqual = false;
509 
510  //if (fVerbose > 2) std::cout << "TrackExists: fHitsInTrack.size: " << fHitsInTracks.size() << std::endl;
511  unsigned int i = 0;
512  for (i = 0; (i < fHitsInTracks.size()); i++){ //run through tracks in trackList
513  for (std::set<int>::iterator k = hitsInTrack.begin(); (k != hitsInTrack.end()&&(result == true)); k++){ //run through all hits in test track
514  for (std::set<int>::iterator j = fHitsInTracks[i].begin(); (j != fHitsInTracks[i].end()) && (oneNumberEqual == false); j++){ //run through all hits in selected track
515  //if (fVerbose > 2) std::cout << hitsInTrack[k] << " ?= " << fHitsInTracks[i][j] << std::endl;
516  if (*k == *j)
517  oneNumberEqual = true;
518  else oneNumberEqual = false;
519  }
520  result &= oneNumberEqual;
521  oneNumberEqual = false;
522  }
523  if (result == true) {
524  if (fVerbose > 1){
525  std::cout << "Track exists already!" << std::endl;
526  for (std::set<int>::iterator l = fHitsInTracks[i].begin(); l != fHitsInTracks[i].end(); l++)
527  std::cout << " " << *l;
528  std::cout << std::endl;
529  }
530  return true;
531  }
532  result = true;
533  }
534  return false;
535 }
Int_t i
Definition: run_full.C:25
std::vector< std::set< Int_t > > fHitsInTracks
Vector of indizes which hits where used in which track.

Member Data Documentation

std::vector< std::pair<double,double> > PndRiemannTrackFinder::fCurvAndDipOfCand
protectedinherited

Curvature and dip of fPndTrackCand.

Definition at line 52 of file PndRiemannTrackFinder.h.

Referenced by PndRiemannTrackFinder::FindTracks(), FindTracks(), and PndRiemannTrackFinder::FindTracksWithSimilarParameters().

double PndRiemannTrackFinder::fCurvDiff
protectedinherited

TrackMerger parameter.

Definition at line 62 of file PndRiemannTrackFinder.h.

Referenced by PndRiemannTrackFinder::MergeTracks(), and PndRiemannTrackFinder::SetCurvDiff().

TH2F* PndMvdSttGemRiemannTrackFinder::fCutChi2H
private

Definition at line 59 of file PndMvdSttGemRiemannTrackFinder.h.

Referenced by GetMaxSZChi2(), and SetCutChi2H().

TH2F* PndMvdSttGemRiemannTrackFinder::fCutDistH
private

cutting histograms

Definition at line 58 of file PndMvdSttGemRiemannTrackFinder.h.

Referenced by GetMaxPlaneDist(), and SetCutDistH().

double PndRiemannTrackFinder::fDipDiff
protectedinherited

TrackMerger parameter.

Definition at line 63 of file PndRiemannTrackFinder.h.

Referenced by PndRiemannTrackFinder::MergeTracks(), and PndRiemannTrackFinder::SetDipDiff().

TClonesArray* PndMvdSttGemRiemannTrackFinder::fGemHits
private

Definition at line 63 of file PndMvdSttGemRiemannTrackFinder.h.

Referenced by AddHits(), AssignGemHits(), and FindTracks().

PndGeoHandling* PndMvdSttGemRiemannTrackFinder::fGeoH
private

Definition at line 32 of file PndMvdSttGemRiemannTrackFinder.h.

Referenced by GetLayerMvd(), and PndMvdSttGemRiemannTrackFinder().

std::vector<FairHit*> PndRiemannTrackFinder::fHits
protectedinherited
std::vector<std::set<Int_t> > PndRiemannTrackFinder::fHitsInTracks
protectedinherited

Vector of indizes which hits where used in which track.

Definition at line 50 of file PndRiemannTrackFinder.h.

Referenced by PndRiemannTrackFinder::FindTracks(), FindTracks(), PndRiemannTrackFinder::GetTrackCandidates(), and PndRiemannTrackFinder::TrackExists().

std::vector< std::set<int> > PndRiemannTrackFinder::fHitsTooClose
protectedinherited

matrix of TrackNr and hits which are too close to one of the three starting points

Definition at line 54 of file PndRiemannTrackFinder.h.

Referenced by PndRiemannTrackFinder::FindTracks(), FindTracks(), GetStartTracks(), and PndRiemannTrackFinder::GetStartTracks().

int PndMvdSttGemRiemannTrackFinder::fLastLayerId
private

last layer Id assigned

Definition at line 72 of file PndMvdSttGemRiemannTrackFinder.h.

Referenced by InitLayerMapGem(), and InitLayerMapMvd().

std::map<TString, int> PndMvdSttGemRiemannTrackFinder::fLayerMap
private

identifier string, assigned layer id

Definition at line 71 of file PndMvdSttGemRiemannTrackFinder.h.

Referenced by GetLayer(), InitLayerMapGem(), and InitLayerMapMvd().

std::vector< std::vector<int> > PndMvdSttGemRiemannTrackFinder::fLayers
private

contains layer information of hits

Definition at line 70 of file PndMvdSttGemRiemannTrackFinder.h.

Referenced by AddHits(), FindTracks(), GetStartTracks(), GetTooCloseHitsInLayer(), and PndMvdSttGemRiemannTrackFinder().

double PndRiemannTrackFinder::fMagField
protectedinherited

size of the magnetic field in Tesla

Definition at line 64 of file PndRiemannTrackFinder.h.

std::map<int, FairLink > PndRiemannTrackFinder::fMapHitToID
protectedinherited
std::map<FairLink, int > PndRiemannTrackFinder::fMapIDtoHit
protectedinherited

map to convert the list of detID/hitID hits into the list of hits for track finding

Definition at line 56 of file PndRiemannTrackFinder.h.

Referenced by AddHits(), PndRiemannTrackFinder::AddHits(), AssignGemHits(), AssignSkewedSttHits(), AssignSttHits(), CheckBoarderHitsStt(), GetStrawSector(), and PndRiemannTrackFinder::PndRiemannTrackFinder().

double PndRiemannTrackFinder::fMaxPlaneDist
protectedinherited

Distance cut between new point and riemann plane.

Definition at line 57 of file PndRiemannTrackFinder.h.

Referenced by PndRiemannTrackFinder::CheckRiemannHit(), GetMaxPlaneDist(), and PndRiemannTrackFinder::SetMaxPlaneDistance().

double PndRiemannTrackFinder::fMaxSZChi2
protectedinherited
double PndRiemannTrackFinder::fMaxSZDist
protectedinherited

Distance cut between s-z coordinate of a new point and the sz-fit of the hits in the track.

Definition at line 58 of file PndRiemannTrackFinder.h.

Referenced by PndRiemannTrackFinder::CheckRiemannHit(), CheckRiemannHitMvd(), and PndRiemannTrackFinder::SetMaxSZDist().

std::vector<PndTrackCand> PndRiemannTrackFinder::fMergedTrackCand
protectedinherited
int PndRiemannTrackFinder::fMinNumberOfHits
protectedinherited

Minimum number of hits in track necessary for a match.

Definition at line 61 of file PndRiemannTrackFinder.h.

Referenced by PndRiemannTrackFinder::FindTracks(), FindTracks(), and PndRiemannTrackFinder::SetMinNumberOfHits().

double PndRiemannTrackFinder::fMinPointDist
protectedinherited

Minimum distance between two points to use them as point for the base plane.

Definition at line 59 of file PndRiemannTrackFinder.h.

Referenced by PndRiemannTrackFinder::CheckHitDistance(), and PndRiemannTrackFinder::SetMinPointDist().

int PndMvdSttGemRiemannTrackFinder::fNLayers
private

number of Layers

Definition at line 86 of file PndMvdSttGemRiemannTrackFinder.h.

Referenced by AddHits(), FindTracks(), and GetStartTracks().

TClonesArray* PndMvdSttGemRiemannTrackFinder::fSkewedSttHits
private

Definition at line 62 of file PndMvdSttGemRiemannTrackFinder.h.

Referenced by AddHits(), and FindTracks().

PndSttStrawMap PndMvdSttGemRiemannTrackFinder::fStrawMap
private
TClonesArray* PndMvdSttGemRiemannTrackFinder::fSttHits
private

Definition at line 61 of file PndMvdSttGemRiemannTrackFinder.h.

Referenced by AddHits(), and FindTracks().

std::vector<std::vector<PndSttHit*> > PndMvdSttGemRiemannTrackFinder::fSttHitsInSectors
private
std::vector<std::vector<FairHit*> > PndMvdSttGemRiemannTrackFinder::fSttSkewedHitsInSectors
private
std::vector<PndTrackCand> PndRiemannTrackFinder::fTrackCand
protectedinherited
std::vector<PndRiemannTrack> PndRiemannTrackFinder::fTracks
protectedinherited
bool PndRiemannTrackFinder::fUseZeroPos
protectedinherited
int PndRiemannTrackFinder::fVerbose
protectedinherited
double PndMvdSttGemRiemannTrackFinder::fZClosePar
private

parameter to separate forward and backward tracks

Definition at line 68 of file PndMvdSttGemRiemannTrackFinder.h.


The documentation for this class was generated from the following files: