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

#include <PndRiemannTrackFinder.h>

Inheritance diagram for PndRiemannTrackFinder:
PndMvdSttGemRiemannTrackFinder

Public Member Functions

 PndRiemannTrackFinder ()
 
virtual ~PndRiemannTrackFinder ()
 
void FindTracks ()
 Main function to start the riemann track finding. More...
 
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 AddHits (TClonesArray *hits, Int_t branchId)
 Appends the new array of hits to the existing 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...
 
std::vector< PndTrackCandGetMergedTrackCands ()
 
PndTrackCand GetTrackCand (int i)
 
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

std::vector< std::set< Int_t > > GetStartTracks ()
 
bool CheckHitDistance (int hit1, int hit2)
 Tests if the distance is larger than fMinPointDistance. More...
 
bool CheckSZ (PndRiemannTrack aTrack)
 Tests the results of the sz fit. 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
 

Detailed Description

Definition at line 15 of file PndRiemannTrackFinder.h.

Constructor & Destructor Documentation

PndRiemannTrackFinder::PndRiemannTrackFinder ( )

Definition at line 8 of file PndRiemannTrackFinder.cxx.

References fHits, fMapHitToID, fMapIDtoHit, fUseZeroPos, and pos.

9 {
10  if (fUseZeroPos){
11  TVector3 pos(0.0,0.0,0.0);
12  TVector3 dpos(0.1,0.1,0.1);
13  FairHit* ZeroHit = new FairHit(-1, pos, dpos, -1);
14  fHits.push_back(ZeroHit);
15  FairLink myID;
16  fMapHitToID[fHits.size()-1]=myID;
17  fMapIDtoHit[myID] = fHits.size()-1;
18  }
19 }
TVector3 pos
double fMaxSZChi2
Maximum allowed Chi2 in an sz fit.
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 fMinNumberOfHits
Minimum number of hits in track necessary for a match.
double fMagField
size of the magnetic field in Tesla
double fDipDiff
TrackMerger parameter.
double fMaxPlaneDist
Distance cut between new point and riemann plane.
double fMinPointDist
Minimum distance between two points to use them as point for the base plane.
double fCurvDiff
TrackMerger parameter.
double fMaxSZDist
Distance cut between s-z coordinate of a new point and the sz-fit of the hits in the track...
PndRiemannTrackFinder::~PndRiemannTrackFinder ( )
virtual

Definition at line 21 of file PndRiemannTrackFinder.cxx.

References fHits, and fUseZeroPos.

22 {
23  if (fUseZeroPos)
24  delete(fHits[0]);
25 }
std::vector< FairHit * > fHits
Vector of all FairHits used for track finding (fitting)

Member Function Documentation

void PndRiemannTrackFinder::AddHit ( FairHit *  hit)
inline

Definition at line 26 of file PndRiemannTrackFinder.h.

References 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 PndRiemannTrackFinder::AddHits ( std::vector< FairHit * >  hits,
Int_t  branchId 
)

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 fHits, fMapHitToID, 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 PndRiemannTrackFinder::AddHits ( TClonesArray *  hits,
Int_t  branchId 
)

Appends the new array of hits to the existing one.

Definition at line 44 of file PndRiemannTrackFinder.cxx.

References fHits, fMapHitToID, fMapIDtoHit, and i.

45 {
46  Int_t startSize = 0;//= fHits.size();
47  for (int i = 0; i < hits->GetEntries(); i++){
48  FairHit* myHit = (FairHit*)(hits->At(i));
49  fHits.push_back(myHit);
50  FairLink myID;
51  if (myHit->GetEntryNr().GetIndex() < 0){
52  myID = FairLink(-1, -1, branchId, startSize + i, 1);
53  }
54  else
55  myID = myHit->GetEntryNr();
56  fMapHitToID[fHits.size()-1]=myID;
57  fMapIDtoHit[myID] = fHits.size()-1;
58  }
59 }
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
bool PndRiemannTrackFinder::CheckHitDistance ( int  hit1,
int  hit2 
)
protected

Tests if the distance is larger than fMinPointDistance.

Definition at line 238 of file PndRiemannTrackFinder.cxx.

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

Referenced by FindTracks(), PndMvdSttGemRiemannTrackFinder::FindTracks(), PndMvdSttGemRiemannTrackFinder::GetStartTracks(), GetStartTracks(), and PndMvdSttGemRiemannTrackFinder::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 
)
protected

Tests if hits in the same sensor are selected.

Definition at line 305 of file PndRiemannTrackFinder.cxx.

References fHits.

Referenced by PndMvdSttGemRiemannTrackFinder::GetStartTracks(), and 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 
)
protected

Check if this HitId is used in the track already.

Definition at line 320 of file PndRiemannTrackFinder.cxx.

References fVerbose.

Referenced by PndMvdSttGemRiemannTrackFinder::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 PndRiemannTrackFinder::CheckRiemannHit ( PndRiemannTrack track,
PndRiemannHit hit 
)
protected

Definition at line 331 of file PndRiemannTrackFinder.cxx.

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

Referenced by 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 PndRiemannTrackFinder::CheckSZ ( PndRiemannTrack  aTrack)
protected

Tests the results of the sz fit.

Definition at line 249 of file PndRiemannTrackFinder.cxx.

References fMaxSZChi2, fVerbose, PndRiemannTrack::szChi2(), and PndRiemannTrack::szFit().

Referenced by GetStartTracks().

250 {
251  aTrack.szFit();
252  if (aTrack.szChi2() > fMaxSZChi2 || aTrack.szChi2() < 0){
253  if (fVerbose > 1) std::cout << "sz-Fit does not match, Chi2: " << fMaxSZChi2 << std::endl;
254  return false;
255  }
256  return true;
257 }
double szChi2() const
double fMaxSZChi2
Maximum allowed Chi2 in an sz fit.
void szFit(bool withErrorCalc=true)
bool PndRiemannTrackFinder::CheckZeroPassing ( std::set< int >  hitIds,
int  hit 
)
protected

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 fHits, fMapHitToID, fVerbose, and hit.

Referenced by PndMvdSttGemRiemannTrackFinder::FindTracks(), and PndMvdSttGemRiemannTrackFinder::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 
)
protected

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 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)
protected

Creates a PndRiemannTrack from an array of indices of Hits.

Definition at line 292 of file PndRiemannTrackFinder.cxx.

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

Referenced by FindTracks(), and PndMvdSttGemRiemannTrackFinder::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 PndRiemannTrackFinder::FindTracks ( )

Main function to start the riemann track finding.

Definition at line 61 of file PndRiemannTrackFinder.cxx.

References PndTrackCand::AddHit(), PndRiemannTrack::addHit(), CheckHitDistance(), CheckRiemannHit(), CreateRiemannTrack(), PndRiemannTrack::dDip(), PndRiemannTrack::dip(), PndRiemannTrack::dR(), PndRiemannTrack::dX(), PndRiemannTrack::dY(), fCurvAndDipOfCand, fHits, fHitsInTracks, fHitsTooClose, fMapHitToID, fMinNumberOfHits, fTrackCand, fTracks, fVerbose, PndRiemannTrack::getNumHits(), GetStartTracks(), PndRiemannTrack::getSZm(), PndRiemannTrack::getSZt(), hits, n, PndRiemannTrack::orig(), p, r, PndRiemannTrack::r(), PndRiemannTrack::refit(), s, PndRiemannTrack::szFit(), TrackExists(), and TrackHits().

62 {
63  std::vector<std::set<Int_t> > Tracks = GetStartTracks(); //Get the possible track seeds
64  std::set<int> tooClose;
65  std::set<int>::iterator iter;
66  for (size_t trackId = 0; trackId < Tracks.size(); trackId++){ //Go through all track seeds and search for additional points
67 
68  if (Tracks[trackId].size() != 3)
69  std::cout << "-E- PndRiemannTrackFinder::FindTracks: Start points: " << Tracks[trackId].size()
70  << " in Track: " << trackId << std::endl;
71 
72  std::set<Int_t> StartTrack = Tracks[trackId]; //Take a start track
73 
74  if (fVerbose > 1){
75  iter = StartTrack.begin();
76  std::cout << "------------------------------------" << std::endl;
77  std::cout << "Start Plane from Points: " << *iter << " "
78  << *(++iter) << " " << *(++iter) << std::endl;
79  }
80  if (TrackExists(StartTrack) == true){
81  if (fVerbose > 1) std::cout << "Track exists already!" << std::endl;
82  continue;
83  }
84  PndRiemannTrack actTrack = CreateRiemannTrack(StartTrack);
85  iter = StartTrack.end();
86  int startHit = *(--iter); //StartTrack always has three points, the last is the one with the largest index
87  iter = StartTrack.begin();
88  for (size_t testHit = startHit+1; testHit < fHits.size(); testHit++){
89  if (CheckHitDistance(*iter, testHit)!= true){fHitsTooClose[trackId].insert(testHit); continue;}
90  if (CheckHitDistance(*(++iter), testHit)!= true){fHitsTooClose[trackId].insert(testHit); continue;}
91  if (CheckHitDistance(*(++iter), testHit)!= true){fHitsTooClose[trackId].insert(testHit); continue;}
92 
93  PndRiemannHit actHit(fHits[testHit], testHit); //Create a Riemann Hit from a FairHit
94 
95  if (fVerbose > 1) std::cout << "Point " << testHit ;
96  if (CheckRiemannHit(&actTrack, &actHit) != true) continue;
97 
98  StartTrack.insert(testHit);
99 
100  actTrack.addHit(actHit);
101  actTrack.refit();
102  actTrack.szFit();
103 
104  TVectorD orig = actTrack.orig();
105  if (fVerbose > 1) std::cout << "actHit added: " << testHit << " r: " << actTrack.r()
106  << " orig: " << orig[0] << " " << orig[1] << std::endl;
107  }
108 
109  if ((int)actTrack.getNumHits() > (fMinNumberOfHits-1)) //if you have a track match
110  {
111  std::set<int> hits = fHitsTooClose[trackId];
112  for (iter = hits.begin(); iter != hits.end(); iter++){
113  PndRiemannHit actHit(fHits[*iter]);
114  if (CheckRiemannHit(&actTrack, &actHit)!= true) continue;
115  StartTrack.insert(*iter);
116  actTrack.addHit(actHit);
117  actTrack.refit();
118  actTrack.szFit();
119  }
120 
121  fTracks.push_back(actTrack);
122  fHitsInTracks.push_back(StartTrack);
123  if (fVerbose > 1){
124  TVectorD orig = actTrack.orig();
125  iter = StartTrack.begin();
126  std::cout << "Track added! " << *iter << " " << *(++iter)
127  << " " << *(++iter) << " r: " << actTrack.r()
128  << " orig: " << orig[0] << " " << orig[1]
129  << " sz-m: " << actTrack.getSZm() << " sz-t: " << actTrack.getSZt()
130  << " dip: " << actTrack.dip()
131  << std::endl;
132  }
133 
134  if (fVerbose > 0){
135  std::cout << "Hits in Track: ";
136  for (iter = StartTrack.begin(); iter != StartTrack.end(); iter++)
137  {
138  std::cout << " " << fMapHitToID[*iter];
139  }
140  TVectorD myOrig = actTrack.orig();
141  std::cout << " numHits: " << actTrack.getNumHits() << std::endl;
142  std::cout << " curv: " << 1/actTrack.r() << "+/-" << actTrack.dR()/(actTrack.r() * actTrack.r())
143  << " dip: " << actTrack.dip() << "+/-" << actTrack.dDip()
144  << " orig: " << myOrig[0] << "+/-" << actTrack.dX()
145  << " " << myOrig[1] << "+/-" << actTrack.dY() << std::endl;
146  }
147  }
148  }
149 
150  for (unsigned int n = 0; n < fTracks.size(); n++){
151  PndTrackCand myTrackCand;
152  std::vector<PndRiemannHit> TrackHits = fTracks[n].getHits();
153 
154  for (unsigned int p = 0; p < TrackHits.size(); p++){
155  myTrackCand.AddHit(fMapHitToID[TrackHits[p].hitID()], TrackHits[p].s());
156  }
157  fTrackCand.push_back(myTrackCand);
158 
159  std::pair<double,double> CurvDip(1/fTracks[n].r(),fTracks[n].dip());
160  fCurvAndDipOfCand.push_back(CurvDip);
161  }
162 
163 
164 // MergeTracks();
165 // fTrackCand.clear();
166 // fTrackCand = fMergedTrackCand;
167 // if (fVerbose > 0) {
168 // std::cout << "Tracks after merging:" << std::endl;
169 // for (int p = 0; p < fTrackCand.size(); p++){
170 // fTrackCand[p].Print();
171 // }
172 // }
173 
174 }
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.
unsigned int getNumHits()
Double_t p
Definition: anasim.C:58
double r
Definition: RiemannTest.C:14
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)
std::vector< std::set< Int_t > > GetStartTracks()
void refit(bool withErrorCalc=true)
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.
TVectorD orig() const
int TrackHits()
Definition: TrackHits.C:8
void szFit(bool withErrorCalc=true)
void addHit(PndRiemannHit &hit)
CbmHit * hits[nHits]
Definition: RiemannTest.C:19
std::vector< std::set< Int_t > > fHitsInTracks
Vector of indizes which hits where used in which track.
bool CheckRiemannHit(PndRiemannTrack *track, PndRiemannHit *hit)
std::vector< int > PndRiemannTrackFinder::FindTracksWithSimilarHits ( std::vector< int > &  TracksToTest,
std::vector< PndTrackCand tempTrCnd,
std::vector< int > &  tempKillAfter 
)
protected

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

Definition at line 448 of file PndRiemannTrackFinder.cxx.

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

Referenced by 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 
)
protected

Definition at line 412 of file PndRiemannTrackFinder.cxx.

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

Referenced by 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
std::vector<PndTrackCand> PndRiemannTrackFinder::GetMergedTrackCands ( )
inline

Definition at line 33 of file PndRiemannTrackFinder.h.

References fMergedTrackCand.

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

Returns the track with the index i.

Definition at line 30 of file PndRiemannTrackFinder.h.

References 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 > > PndRiemannTrackFinder::GetStartTracks ( )
protected

Definition at line 176 of file PndRiemannTrackFinder.cxx.

References PndRiemannTrack::addHit(), CheckHitDistance(), CheckHitInSameSensor(), CheckSZ(), fHits, fHitsTooClose, fVerbose, i, PndRiemannTrack::orig(), PndRiemannTrack::r(), PndRiemannTrack::refit(), and TrackExists().

Referenced by FindTracks().

177 {
178  std::set<int> actCandidates;
179  std::vector<std::set<int> > Tracks;
180  std::set<int> tooCloseFirst;
181  std::set<int> tooCloseSecond;
182  std::set<int>::iterator iter;
183 
184  if (fHits.size() > 3){
185  for (size_t first = 0; first < fHits.size()-3; first++){ //take three points and create a riemann plane - get first hit
186  tooCloseFirst.clear();
187  for (size_t second = first+1; second < fHits.size()-2; second++){// get second hit
188  tooCloseSecond.clear();
189  if (CheckHitDistance(first, second) != true){ tooCloseFirst.insert(second); continue;}
190  if (CheckHitInSameSensor(first, second) == true) continue;
191  for (size_t third = second+1; third < fHits.size()-1; third++){
192  if (fVerbose > 1) std::cout << "Checking Points: " << first << " " << second << " " << third << std::endl;
193  if (CheckHitDistance(first, third)!= true){tooCloseFirst.insert(third); continue;}
194  if (CheckHitDistance(second, third)!= true){tooCloseSecond.insert(third); continue;}
195 
196  if (CheckHitInSameSensor(first, third)==true)continue;
197  if (CheckHitInSameSensor(second, third)==true)continue;
198 
199  actCandidates.clear();
200  actCandidates.insert(first);
201  actCandidates.insert(second);
202  actCandidates.insert(third);
203 
204  if (!TrackExists(actCandidates)){ //checks if the combination of three points was used before in a track
205  PndRiemannTrack actTrack;// = new PndRiemannTrack();
206  PndRiemannHit hit1(fHits[first]);
207  PndRiemannHit hit2(fHits[second]);
208  PndRiemannHit hit3(fHits[third]);
209  actTrack.addHit(hit1);
210  actTrack.addHit(hit2);
211  actTrack.addHit(hit3);
212  actTrack.refit();
213  if (CheckSZ(actTrack)!= true) continue;
214  TVectorT<double> orig = actTrack.orig();
215  if (fVerbose > 1) std::cout << "Base plane from Points: " << first << " " << second << " " << third << " r: " << actTrack.r() << " orig: " << orig[0] << " " << orig[1] << std::endl;
216  Tracks.push_back(actCandidates);
217  std::set<int> combHits = tooCloseFirst;
218  combHits.insert(tooCloseSecond.begin(), tooCloseSecond.end());
219  fHitsTooClose.push_back(combHits);
220  }
221  }
222  }
223  }
224  }
225  if (fVerbose > 1) {
226  std::cout << "Start Tracks are: " << std::endl;
227  for (size_t i = 0; i < Tracks.size(); i++){
228  std::set<int> aTrack = Tracks[i];
229  for (iter = aTrack.begin(); iter != aTrack.end();iter++){
230  std::cout << *iter << " ";
231  }
232  std::cout << std::endl;
233  }
234  }
235  return Tracks;
236 }
std::vector< std::set< int > > fHitsTooClose
matrix of TrackNr and hits which are too close to one of the three starting points ...
bool CheckSZ(PndRiemannTrack aTrack)
Tests the results of the sz fit.
Int_t i
Definition: run_full.C:25
bool TrackExists(std::set< Int_t > hitsInTrack)
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.
double r() const
TVectorD orig() const
void addHit(PndRiemannHit &hit)
PndRiemannTrack PndRiemannTrackFinder::GetTrack ( int  i)
inline

Returns the number of found tracks.

Definition at line 29 of file PndRiemannTrackFinder.h.

References 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 ( )
inline

Returns the hits belonging to track i.

Definition at line 32 of file PndRiemannTrackFinder.h.

References fTrackCand.

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

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

Definition at line 34 of file PndRiemannTrackFinder.h.

References 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)
inline

Definition at line 31 of file PndRiemannTrackFinder.h.

References 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 
)

Calculates the distance between two hits.

Definition at line 537 of file PndRiemannTrackFinder.cxx.

Referenced by CheckHitDistance(), and 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 
)

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

Definition at line 547 of file PndRiemannTrackFinder.cxx.

References fabs(), fHits, fVerbose, h1, 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 PndRiemannTrackFinder::MergeTracks ( )

Definition at line 354 of file PndRiemannTrackFinder.cxx.

References counter, CreateOneTrackCand(), fCurvDiff, fDipDiff, FindTracksWithSimilarHits(), FindTracksWithSimilarParameters(), fMergedTrackCand, fTrackCand, fVerbose, i, and 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 ( )
inline

Definition at line 28 of file PndRiemannTrackFinder.h.

References fTrackCand.

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

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

Definition at line 495 of file PndRiemannTrackFinder.cxx.

References i.

Referenced by FindTracksWithSimilarHits(), FindTracksWithSimilarParameters(), and 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)
inline

Definition at line 44 of file PndRiemannTrackFinder.h.

References fCurvDiff, and val.

44 {fCurvDiff = val;}
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
double fCurvDiff
TrackMerger parameter.
void PndRiemannTrackFinder::SetDipDiff ( double  val)
inline

Definition at line 45 of file PndRiemannTrackFinder.h.

References 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)
inline

Definition at line 23 of file PndRiemannTrackFinder.h.

References 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)
inline

Definition at line 38 of file PndRiemannTrackFinder.h.

References 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)
inline

Definition at line 40 of file PndRiemannTrackFinder.h.

References 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)
inline

Definition at line 39 of file PndRiemannTrackFinder.h.

References 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)
inline

Definition at line 43 of file PndRiemannTrackFinder.h.

References 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)
inline

Definition at line 41 of file PndRiemannTrackFinder.h.

References 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 PndRiemannTrackFinder::SetUseZeroPos ( bool  val)
inline

Definition at line 42 of file PndRiemannTrackFinder.h.

References fUseZeroPos, and val.

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

Adds one new hit to the array of hits.

Definition at line 27 of file PndRiemannTrackFinder.h.

References 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)
protected

Definition at line 506 of file PndRiemannTrackFinder.cxx.

References fHitsInTracks, fVerbose, and i.

Referenced by FindTracks(), PndMvdSttGemRiemannTrackFinder::FindTracks(), and 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
protected

Curvature and dip of fPndTrackCand.

Definition at line 52 of file PndRiemannTrackFinder.h.

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

double PndRiemannTrackFinder::fCurvDiff
protected

TrackMerger parameter.

Definition at line 62 of file PndRiemannTrackFinder.h.

Referenced by MergeTracks(), and SetCurvDiff().

double PndRiemannTrackFinder::fDipDiff
protected

TrackMerger parameter.

Definition at line 63 of file PndRiemannTrackFinder.h.

Referenced by MergeTracks(), and SetDipDiff().

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

Vector of indizes which hits where used in which track.

Definition at line 50 of file PndRiemannTrackFinder.h.

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

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

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 FindTracks(), PndMvdSttGemRiemannTrackFinder::FindTracks(), PndMvdSttGemRiemannTrackFinder::GetStartTracks(), and GetStartTracks().

double PndRiemannTrackFinder::fMagField
protected

size of the magnetic field in Tesla

Definition at line 64 of file PndRiemannTrackFinder.h.

std::map<int, FairLink > PndRiemannTrackFinder::fMapHitToID
protected
std::map<FairLink, int > PndRiemannTrackFinder::fMapIDtoHit
protected
double PndRiemannTrackFinder::fMaxPlaneDist
protected

Distance cut between new point and riemann plane.

Definition at line 57 of file PndRiemannTrackFinder.h.

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

double PndRiemannTrackFinder::fMaxSZChi2
protected

Maximum allowed Chi2 in an sz fit.

Definition at line 60 of file PndRiemannTrackFinder.h.

Referenced by CheckRiemannHit(), CheckSZ(), PndMvdSttGemRiemannTrackFinder::GetMaxSZChi2(), and SetMaxSZChi2().

double PndRiemannTrackFinder::fMaxSZDist
protected

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 CheckRiemannHit(), PndMvdSttGemRiemannTrackFinder::CheckRiemannHitMvd(), and SetMaxSZDist().

std::vector<PndTrackCand> PndRiemannTrackFinder::fMergedTrackCand
protected

Definition at line 53 of file PndRiemannTrackFinder.h.

Referenced by GetMergedTrackCands(), and MergeTracks().

int PndRiemannTrackFinder::fMinNumberOfHits
protected

Minimum number of hits in track necessary for a match.

Definition at line 61 of file PndRiemannTrackFinder.h.

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

double PndRiemannTrackFinder::fMinPointDist
protected

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

Definition at line 59 of file PndRiemannTrackFinder.h.

Referenced by CheckHitDistance(), and SetMinPointDist().

std::vector<PndTrackCand> PndRiemannTrackFinder::fTrackCand
protected
std::vector<PndRiemannTrack> PndRiemannTrackFinder::fTracks
protected

Resulting Riemann Tracks.

Definition at line 49 of file PndRiemannTrackFinder.h.

Referenced by FindTracks(), PndMvdSttGemRiemannTrackFinder::FindTracks(), GetPndTrack(), and GetTrack().

bool PndRiemannTrackFinder::fUseZeroPos
protected
int PndRiemannTrackFinder::fVerbose
protected

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