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

#include <PndTrkNeighboringMap.h>

Inheritance diagram for PndTrkNeighboringMap:

Public Member Functions

 PndTrkNeighboringMap (TClonesArray *tubearray)
 
 PndTrkNeighboringMap (const PndTrkNeighboringMap &thismap)
 
 ~PndTrkNeighboringMap ()
 
PndTrkNeighboringMapoperator= (const PndTrkNeighboringMap &thismap)
 
void Clear ()
 
void AddNeighboringsToHit (PndTrkHit *hit, TObjArray *hits)
 
TObjArray GetNeighboringsToHit (PndTrkHit *hit)
 
void SetOwnerValue (Bool_t enable=kTRUE)
 
TMapIter * GetIterator ()
 
TObjArray GetStandalone ()
 
TObjArray GetSeeds ()
 
TObjArray GetCandseeds ()
 
TObjArray GetIndivisibles ()
 
TObjArray GetIndivisiblesToHit (PndTrkHit *hit)
 
void PrintIndivisibleMap ()
 
TObjArray GetHitWithNNeighborings (int nofhits)
 

Protected Member Functions

 ClassDef (PndTrkNeighboringMap, 1)
 

Protected Attributes

TMap hit2neigh
 
TMap hit2indiv
 
TClonesArray * fTubeArray
 
TObjArray fStandalone
 
TObjArray fOneNeigh
 
TObjArray fTwoNeigh
 

Detailed Description

PndTrkNeighboringMap

Author
Lia Lavezzi

Definition at line 18 of file PndTrkNeighboringMap.h.

Constructor & Destructor Documentation

PndTrkNeighboringMap::PndTrkNeighboringMap ( TClonesArray *  tubearray)

Definition at line 19 of file PndTrkNeighboringMap.cxx.

19 : fTubeArray(tubearray), fStandalone(TObjArray()), fOneNeigh(TObjArray()), fTwoNeigh(TObjArray()) {}
PndTrkNeighboringMap::PndTrkNeighboringMap ( const PndTrkNeighboringMap thismap)

Definition at line 21 of file PndTrkNeighboringMap.cxx.

21  : TObject(thismap) {
22  *this = thismap;
23 }
PndTrkNeighboringMap::~PndTrkNeighboringMap ( )

Definition at line 25 of file PndTrkNeighboringMap.cxx.

References fTubeArray.

25  {
26  delete fTubeArray;
27 }

Member Function Documentation

void PndTrkNeighboringMap::AddNeighboringsToHit ( PndTrkHit hit,
TObjArray *  hits 
)

Definition at line 65 of file PndTrkNeighboringMap.cxx.

References counter, fOneNeigh, fStandalone, fTubeArray, fTwoNeigh, PndSttTube::GetLayerID(), PndTrkHit::GetTubeID(), hit2indiv, and hit2neigh.

Referenced by PndTrkLegendreNew::FillHitMap(), PndTrkTrackFinder::FillHitMap(), and PndTrkCombiLegendreTask::FillHitMap().

65  {
66 
67  // hit->DrawTube(kGreen); // CHECK
68  TObjArray *neighs = new TObjArray(*hits);
69  hit2neigh.Add(hit, neighs);
70  int tubeID = hit->GetTubeID();
71  PndSttTube *tube = (PndSttTube*) fTubeArray->At(tubeID);
72 
73  if(hits->GetEntriesFast() == 0) fStandalone.Add(hit);
74  else if(hits->GetEntriesFast() == 1) fOneNeigh.Add(hit);
75  else if(hits->GetEntriesFast() == 2) fTwoNeigh.Add(hit);
76  else if(tube->GetLayerID() == 0) fTwoNeigh.Add(hit);
77 
78  // fill indivisible map -------------------------------------------
79 
80  // up to 2 hits
81  if(hits->GetEntriesFast() <= 2) {
82  hit2indiv.Add(hit, hits);
83  // cout << "Bset up map " << hit->GetHitID() << " " << hits->GetEntriesFast() << endl;
84  return;
85  }
86 
87  // more hits
88  std::vector< int > removefromlist;
89  int counter = 0;
90  for(int k = 0; k < hits->GetEntriesFast(); k++) {
91  PndTrkHit *hit2 = (PndTrkHit*) hits->At(k);
92  PndSttTube *tube2 = (PndSttTube* ) fTubeArray->At(hit2->GetTubeID());
93  if(tube->GetLayerID() == tube2->GetLayerID()) {
94  removefromlist.push_back(k);
95  continue;
96  }
97  counter++;
98  }
99 
100 
101  for(int k = removefromlist.size() - 1; k >=0; k--) {
102  int delk = removefromlist[k];
103  PndTrkHit *hit2 = (PndTrkHit*) hits->At(delk);
104  hits->Remove(hit2);
105  hits->Compress();
106  }
107 
108  if(counter > 2) {
109  TObjArray *hits2 = new TObjArray();
110  for(int iobj = 0; iobj < hits->GetEntriesFast(); iobj++) hits2->Add(hits->At(iobj));
111  if(counter > 2) {
112  for(int k = hits2->GetEntriesFast() - 1; k >=0; k--) {
113  PndTrkHit *hit2 = (PndTrkHit*) hits2->At(k);
114  hits2->Remove(hit2);
115  }
116  }
117  hit2indiv.Add(hit, hits2);
118  }
119  else hit2indiv.Add(hit, hits);
120 
121  // cout << "Aset up map " << hit->GetHitID() << " " << hits->GetEntriesFast() << endl;
122 
123 }
int GetLayerID()
Definition: PndSttTube.cxx:128
int counter
Definition: ZeeAnalysis.C:59
CbmHit * hits[nHits]
Definition: RiemannTest.C:19
Int_t GetTubeID()
Definition: PndTrkHit.h:61
PndTrkNeighboringMap::ClassDef ( PndTrkNeighboringMap  ,
 
)
protected
void PndTrkNeighboringMap::Clear ( void  )

Definition at line 54 of file PndTrkNeighboringMap.cxx.

References fOneNeigh, fStandalone, fTwoNeigh, hit2indiv, and hit2neigh.

Referenced by PndTrkLegendreNew::Exec(), PndTrkCombiLegendreTask::Exec(), and PndTrkTrackFinder::Exec().

54  {
55 
56  hit2neigh.Clear();
57  hit2indiv.Clear();
58  fStandalone.Clear(); // CHECK
59  fOneNeigh.Clear(); // CHECK
60  fTwoNeigh.Clear(); // CHECK
61  // fTubeArray->Clear(); // CHECK
62 
63 }
TObjArray PndTrkNeighboringMap::GetCandseeds ( )

Definition at line 172 of file PndTrkNeighboringMap.cxx.

References fTubeArray, fTwoNeigh, GetEntriesFast(), PndSttTube::GetLayerID(), GetNeighboringsToHit(), PndTrkHit::GetTubeID(), and hit.

Referenced by PndTrkLegendreNew::CreateFullClusterization(), PndTrkTrackFinder::CreateFullClusterization(), PndTrkLegendreNew::DrawLists(), and PndTrkCombiLegendreTask::DrawLists().

172  {
173  TObjArray candidateseeds;
174 
175 
176  for(int ihit = 0; ihit < fTwoNeigh.GetEntriesFast(); ihit++) {
177  int samelayer = -1;
178  int standalone = -2;
179  PndTrkHit *hit = (PndTrkHit*) fTwoNeigh.At(ihit);
180  int tubeID = hit->GetTubeID();
181  PndSttTube *tube = (PndSttTube*) fTubeArray->At(tubeID);
182  TObjArray neighs = GetNeighboringsToHit(hit);
183 
184  // if it is a candidate seed because it comes from the 1st layer
185  if(tube->GetLayerID() == 0) {
186  bool difflayer = false;
187  for(int jhit = 0; jhit < neighs.GetEntriesFast(); jhit++) {
188  PndTrkHit *hit2 = (PndTrkHit*) neighs.At(jhit);
189  int tubeID2 = hit2->GetTubeID();
190  PndSttTube *tube2 = (PndSttTube*) fTubeArray->At(tubeID2);
191  if(tube2->GetLayerID() != tube->GetLayerID()) difflayer = true;
192  }
193  if(difflayer == false) continue;
194  candidateseeds.Add(hit);
195  }
196  else { // because it has 2 neigh, whose one on the same layer
197  for(int jhit = 0; jhit < neighs.GetEntriesFast(); jhit++) {
198  PndTrkHit *hit2 = (PndTrkHit*) neighs.At(jhit);
199  if(GetNeighboringsToHit(hit2).GetEntriesFast() == 1) standalone = jhit;
200  int tubeID2 = hit2->GetTubeID();
201  PndSttTube *tube2 = (PndSttTube*) fTubeArray->At(tubeID2);
202  if(tube->GetLayerID() == tube2->GetLayerID()) samelayer = jhit;
203  }
204  if(samelayer == standalone) candidateseeds.Add(hit);
205  }
206  }
207  return candidateseeds;
208 }
TObjArray GetNeighboringsToHit(PndTrkHit *hit)
cout<< "POINTs for new FwEndCap == "<< tsim-> GetEntriesFast()
int GetLayerID()
Definition: PndSttTube.cxx:128
PndSdsMCPoint * hit
Definition: anasim.C:70
Int_t GetTubeID()
Definition: PndTrkHit.h:61
TObjArray PndTrkNeighboringMap::GetHitWithNNeighborings ( int  nofhits)

Definition at line 262 of file PndTrkNeighboringMap.cxx.

References hit, hit2neigh, and hits.

262  {
263  TObjArray listofhits;
264 
265  TMapIter *it = (TMapIter*) hit2neigh.MakeIterator();
266  TObjArray *hits;
267  while(PndTrkHit *hit = (PndTrkHit*) it->Next()) {
268  hits = (TObjArray*) hit2neigh.GetValue(hit);
269  if(hits->GetEntriesFast() == nofhits) listofhits.Add(hit);
270  }
271  return listofhits;
272 }
PndSdsMCPoint * hit
Definition: anasim.C:70
CbmHit * hits[nHits]
Definition: RiemannTest.C:19
TObjArray PndTrkNeighboringMap::GetIndivisibles ( )
TObjArray PndTrkNeighboringMap::GetIndivisiblesToHit ( PndTrkHit hit)

Definition at line 214 of file PndTrkNeighboringMap.cxx.

References PndTrkHit::GetDetectorID(), GetEntriesFast(), PndTrkHit::GetHitID(), and hit2indiv.

Referenced by PndTrkTrackFinder::Exec(), PndTrkLegendreNew::FillHitMap(), PndTrkTrackFinder::FillHitMap(), and PndTrkCombiLegendreTask::FillHitMap().

214  {
215  TMapIter *it2 = (TMapIter*) hit2indiv.MakeIterator();
216  while(PndTrkHit *hit2 = (PndTrkHit*) it2->Next()) {
217  if(hit->GetHitID() == hit2->GetHitID() && hit->GetDetectorID() == hit2->GetDetectorID()) {
218  if(((TObjArray*) hit2indiv.GetValue(hit2))->GetEntriesFast() == 0) return TObjArray(0);
219  return *((TObjArray*) hit2indiv.GetValue(hit2));
220  }
221  }
222  return TObjArray(0);
223 }
cout<< "POINTs for new FwEndCap == "<< tsim-> GetEntriesFast()
Int_t GetHitID()
Definition: PndTrkHit.h:56
Int_t GetDetectorID()
Definition: PndTrkHit.h:57
TMapIter * PndTrkNeighboringMap::GetIterator ( )

Definition at line 258 of file PndTrkNeighboringMap.cxx.

References hit2neigh.

258  {
259  return (TMapIter*) hit2neigh.MakeIterator();
260 }
TObjArray PndTrkNeighboringMap::GetNeighboringsToHit ( PndTrkHit hit)

Definition at line 240 of file PndTrkNeighboringMap.cxx.

References PndTrkHit::GetDetectorID(), GetEntriesFast(), PndTrkHit::GetHitID(), and hit2neigh.

Referenced by PndTrkLegendreNew::CreateFullClusterization(), PndTrkCombiLegendreTask::CreateFullClusterization(), PndTrkTrackFinder::CreateFullClusterization(), PndTrkLegendreNew::DrawLists(), PndTrkCombiLegendreTask::DrawLists(), PndTrkTrackFinder::DrawLists(), PndTrkLegendreNew::DrawNeighboringsToHit(), PndTrkCombiLegendreTask::DrawNeighboringsToHit(), PndTrkTrackFinder::DrawNeighboringsToHit(), PndTrkCombiLegendreTask::FillPeakNeighCouplesHisto(), GetCandseeds(), and GetSeeds().

240  {
241 // TObjArray *neighs = (TObjArray*) hit2neigh.GetValue(hit);
242 // if(neighs == NULL) return 0;
243 // return *(neighs);
244 
245  TMapIter *it2 = (TMapIter*) hit2neigh.MakeIterator();
246  while(PndTrkHit *hit2 = (PndTrkHit*) it2->Next()) {
247  if(hit->GetHitID() == hit2->GetHitID() && hit->GetDetectorID() == hit2->GetDetectorID()) {
248  if(((TObjArray*) hit2neigh.GetValue(hit2))->GetEntriesFast() == 0) return TObjArray(0);
249  return *((TObjArray*) hit2neigh.GetValue(hit2));
250  }
251  }
252  return TObjArray(0);
253 
254 
255 
256 }
cout<< "POINTs for new FwEndCap == "<< tsim-> GetEntriesFast()
Int_t GetHitID()
Definition: PndTrkHit.h:56
Int_t GetDetectorID()
Definition: PndTrkHit.h:57
TObjArray PndTrkNeighboringMap::GetSeeds ( )

Definition at line 125 of file PndTrkNeighboringMap.cxx.

References fOneNeigh, fTubeArray, PndSttTube::GetLayerID(), GetNeighboringsToHit(), PndTrkHit::GetTubeID(), and hit.

Referenced by PndTrkLegendreNew::CreateFullClusterization(), PndTrkCombiLegendreTask::CreateFullClusterization(), PndTrkTrackFinder::CreateFullClusterization(), PndTrkLegendreNew::DrawLists(), and PndTrkCombiLegendreTask::DrawLists().

125  {
126  TObjArray seeds;
127  for(int ihit = 0; ihit < fOneNeigh.GetEntriesFast(); ihit++) {
128  PndTrkHit *hit = (PndTrkHit*) fOneNeigh.At(ihit);
129  int tubeID = hit->GetTubeID();
130  PndSttTube *tube = (PndSttTube*) fTubeArray->At(tubeID);
131  TObjArray neighs = GetNeighboringsToHit(hit);
132 
133  // if it has only one neighboring tube
134  if(neighs.GetEntriesFast() == 1) {
135  PndTrkHit *hit2 = (PndTrkHit*) neighs.At(0);
136  int tubeID2 = hit2->GetTubeID();
137  PndSttTube *tube2 = (PndSttTube*) fTubeArray->At(tubeID2);
138  bool difflayer = false;
139  // if the k-neigh is on the same layer...
140  if(tube->GetLayerID() == tube2->GetLayerID()) {
141  TObjArray neighs2 = GetNeighboringsToHit(hit2);
142  if(neighs2.GetEntriesFast() <= 1) continue;
143  // ...and has more than 1 neighboring, then loop over them:
144  // if there is at least one on a different layer, then hit is not a seed
145  for(int jhit = 0; jhit < neighs2.GetEntriesFast(); jhit++) {
146  PndTrkHit *hit2b = (PndTrkHit*) neighs2.At(jhit);
147  if(hit2b == hit) continue;
148  Int_t tubeID2b = hit2b->GetTubeID();
149  PndSttTube *tube2b = (PndSttTube*) fTubeArray->At(tubeID2b);
150  if(tube2->GetLayerID() != tube2b->GetLayerID()) difflayer = true;
151  }
152  if(difflayer == true) continue;
153  }
154  seeds.Add(hit);
155  }
156  // else { // else, it means it belongs to the first layer
157 // bool difflayer = false;
158 // for(int jhit = 0; jhit < neighs->GetEntriesFast(); jhit++) {
159 // PndTrkHit *hit2 = (PndTrkHit*) neighs->At(jhit);
160 // int tubeID2 = hit2->GetTubeID();
161 // PndSttTube *tube2 = (PndSttTube*) fTubeArray->At(tubeID2);
162 // if(tube2->GetLayerID() != tube->GetLayerID()) difflayer = true;
163 // }
164 // if(difflayer == false) continue;
165 // seeds.Add(hit);
166 // }
167  }
168  return seeds;
169 }
TObjArray GetNeighboringsToHit(PndTrkHit *hit)
int GetLayerID()
Definition: PndSttTube.cxx:128
PndSdsMCPoint * hit
Definition: anasim.C:70
Int_t GetTubeID()
Definition: PndTrkHit.h:61
TObjArray PndTrkNeighboringMap::GetStandalone ( )
inline

Definition at line 34 of file PndTrkNeighboringMap.h.

References fStandalone.

Referenced by PndTrkLegendreNew::DrawLists(), and PndTrkCombiLegendreTask::DrawLists().

34 { return fStandalone ; }
PndTrkNeighboringMap & PndTrkNeighboringMap::operator= ( const PndTrkNeighboringMap thismap)

Definition at line 30 of file PndTrkNeighboringMap.cxx.

References fOneNeigh, fStandalone, fTubeArray, fTwoNeigh, hit, hit2indiv, hit2neigh, and hits.

30  {
31 
32  TMapIter *it = (TMapIter*) hit2neigh.MakeIterator();
33  TObjArray *hits;
34  while(PndTrkHit *hit = (PndTrkHit*) it->Next()) {
35  hits = (TObjArray*) thismap.hit2neigh.GetValue(hit);
36  hit2neigh.Add(hit, hits);
37  }
38 
39  TMapIter *it2 = (TMapIter*) hit2indiv.MakeIterator();
40  TObjArray *hits2;
41  while(PndTrkHit *hit = (PndTrkHit*) it2->Next()) {
42  hits2 = (TObjArray*) thismap.hit2indiv.GetValue(hit);
43  hit2indiv.Add(hit, hits2); //FIXME [R.K. 03/2017] Should here be hits or hits2? I put hits2 now.
44  }
45 
46 
47  fTubeArray = thismap.fTubeArray;
48  fStandalone = thismap.fStandalone;
49  fOneNeigh = thismap.fOneNeigh;
50  fTwoNeigh = thismap.fTwoNeigh;
51  return *this;
52 }
PndSdsMCPoint * hit
Definition: anasim.C:70
CbmHit * hits[nHits]
Definition: RiemannTest.C:19
void PndTrkNeighboringMap::PrintIndivisibleMap ( )

Definition at line 225 of file PndTrkNeighboringMap.cxx.

References PndTrkHit::GetHitID(), PndTrkHit::GetTubeID(), hit, and hit2indiv.

Referenced by PndTrkLegendreNew::FillHitMap().

225  {
226  TMapIter *it2 = (TMapIter*) hit2indiv.MakeIterator();
227  TObjArray *hits2;
228  while(PndTrkHit *hit = (PndTrkHit*) it2->Next()) {
229  hits2 = (TObjArray*) hit2indiv.GetValue(hit);
230  cout << hit->GetHitID() << "(tube: " << hit->GetTubeID() << ") has " << hits2->GetEntriesFast() << " indivisibles: ";
231  for(int ihit = 0; ihit < hits2->GetEntriesFast(); ihit++) {
232  PndTrkHit *hit2 = (PndTrkHit*) hits2->At(ihit);
233  cout << " " << hit2->GetHitID() << "(tube: " << hit2->GetTubeID() << "), ";
234  }
235  cout << endl;
236  }
237 }
Int_t GetHitID()
Definition: PndTrkHit.h:56
PndSdsMCPoint * hit
Definition: anasim.C:70
Int_t GetTubeID()
Definition: PndTrkHit.h:61
void PndTrkNeighboringMap::SetOwnerValue ( Bool_t  enable = kTRUE)
inline

Member Data Documentation

TObjArray PndTrkNeighboringMap::fOneNeigh
protected

Definition at line 46 of file PndTrkNeighboringMap.h.

Referenced by AddNeighboringsToHit(), Clear(), GetSeeds(), and operator=().

TObjArray PndTrkNeighboringMap::fStandalone
protected

Definition at line 46 of file PndTrkNeighboringMap.h.

Referenced by AddNeighboringsToHit(), Clear(), GetStandalone(), and operator=().

TClonesArray* PndTrkNeighboringMap::fTubeArray
protected
TObjArray PndTrkNeighboringMap::fTwoNeigh
protected
TMap PndTrkNeighboringMap::hit2indiv
protected
TMap PndTrkNeighboringMap::hit2neigh
protected

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