FairRoot/PandaRoot
PndTrkHit.cxx
Go to the documentation of this file.
1 //
2 // PndTrkHit.cxx
3 //
4 // Class for pattern recognition hit
5 //
6 // authors: Lia Lavezzi - INFN Pavia (2012)
7 //
8 
9 #include "PndTrkHit.h"
10 
11 #include "PndDetectorList.h"
12 
13 #include <iostream>
14 
15 // ROOT
16 #include "TArc.h"
17 #include "TMarker.h"
18 #include "TMath.h"
19 
20 using namespace std;
21 
22 // hit equality
23 // Bool_t operator==(const PndTrkHit &hit1, const PndTrkHit &hit2) {
24 // cout << "######################### operator <" << endl;
25 // return hit1.fDetectorID == hit2.fDetectorID && hit1.fHitID == hit2.fHitID;
26 // }
27 
29  return fDetectorID == hit1.fDetectorID && fHitID == hit1.fHitID;
30 }
31 
33  return fSortVariable < hit1.fSortVariable;
34 }
35 
36 // // hit sorting
37 // Bool_t operator<(const PndTrkHit *hit1, const PndTrkHit *hit2) {
38 // cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! operator <" << endl;
39 // return hit1->fSortVariable == hit2->fSortVariable;
40 // }
41 
42 
43 
44 
45 PndTrkHit::PndTrkHit() : fHitID(-1), fDetectorID(-1), fIRegion(-1), fSensorID(-1), fUsed(0), fUsedAsRefHit(0), fPosition(0., 0., 0.), fIsochrone(0), fSortVariable(-1), fPhi(-1), fSector(-1){}
46 
47 PndTrkHit::PndTrkHit(Int_t hitID, Int_t detID, Bool_t used, Int_t iregion, Int_t sensorID, TVector3& pos, Double_t isochrone, Double_t sortvar) : fHitID(hitID), fDetectorID(detID), fIRegion(iregion), fSensorID(sensorID), fUsed(used), fUsedAsRefHit(0), fPosition(pos.X(), pos.Y(), pos.Z()), fIsochrone(isochrone), fSortVariable(sortvar), fPhi(-1), fSector(-1) {}
48 
49 // PndTrkHit::PndTrkHit(Int_t hitID, Int_t detID, Bool_t used, Int_t iregion, Int_t sensorID, TVector3& pos) : fHitID(hitID), fDetID(detID), fUsed(used), fIRegion(iregion), fSensorID(sensorID), fPosition(pos.X(), pos.Y(), pos.Z()), fIsochrone(0) {}
50 
51 PndTrkHit::PndTrkHit(const PndTrkHit &hit) : FairTimeStamp(hit), fHitID(hit.fHitID), fDetectorID(hit.fDetectorID), fIRegion(hit.fIRegion), fSensorID(hit.fSensorID), fUsed(hit.fUsed), fUsedAsRefHit(hit.fUsedAsRefHit), fPosition(hit.fPosition), fIsochrone(hit.fIsochrone), fSortVariable(hit.fSortVariable), fPhi(hit.fPhi) {
52 
53  double phi = fPosition.Phi() * TMath::RadToDeg();
54  if(phi < 0 && phi < -30) phi += 360;
55  if(phi > -30 && phi <= 30) fSector = 4;
56  else if(phi > 30 && phi <= 90) fSector = 5;
57  else if(phi > 90 && phi <= 150) fSector = 0;
58  else if(phi > 150 && phi <= 210) fSector = 1;
59  else if(phi > 210 && phi <= 270) fSector = 2;
60  else if(phi > 270 && phi <= 330) fSector = 3;
61 
62 }
63 
65 
66 
67 
68 
69 Int_t PndTrkHit::Compare(const TObject *hit) const {
70  // Compare abstract method. Must be overridden if a class wants to be able
71  // to compare itself with other objects. Must return -1 if this is smaller
72  // than obj, 0 if objects are equal and 1 if this is larger than obj.
73  // cout << "comparison " << fSortVariable<< " " << ((PndTrkHit*) hit)->fSortVariable << " " << (fSortVariable < ((PndTrkHit*) hit)->fSortVariable) << " " << (fSortVariable == ((PndTrkHit*) hit)->fSortVariable) << endl;
74  if(fSortVariable < ((PndTrkHit*) hit)->fSortVariable) return -1;
75  else if(fSortVariable == ((PndTrkHit*) hit)->fSortVariable) return 0;
76  else return 1;
77 }
78 
79 
80 
81 
82 
84  TVector3 frompoint = fromhit->GetPosition();
85  TVector3 position = GetPosition();
86  return GetDistance(frompoint);
87 }
88 
89 Double_t PndTrkHit::GetDistance(TVector3 frompoint) {
90  TVector3 position = GetPosition();
91  return (position - frompoint).Mag();
92 }
93 
95  TVector3 frompoint = fromhit->GetPosition();
96  TVector3 position = GetPosition();
97  return GetXYDistance(frompoint);
98 }
99 
100 Double_t PndTrkHit::GetXYDistance(TVector3 frompoint) {
101  TVector3 position = GetPosition();
102  return (position - frompoint).Perp();
103 }
104 
106  return fabs(R - TMath::Sqrt((fPosition.X() - x0) * (fPosition.X() - x0) + (fPosition.Y() - y0) * (fPosition.Y() - y0)));
107 }
108 
109 void PndTrkHit::Draw(Color_t color) {
110  // cout << "draw "<< fIRegion << endl;
111  Int_t style = 1;
112  if(fUsed && color == kBlack) {
113  style = 0;
114  color = kGray;
115  }
116  TMarker *mrk = NULL;
117  TArc *arc = NULL;
118 
119  switch(fIRegion) {
120  case 0:
121  {
122  mrk = new TMarker(fPosition.X(), fPosition.Y(), 21);
123  break;
124  }
125  case 1:
126  {
127  mrk = new TMarker(fPosition.X(), fPosition.Y(), 25);
128  break;
129  }
130  case 2:
131  case 6:
132  case 3:
133  case 7:
134  {
135  arc = new TArc(fPosition.X(), fPosition.Y(), fIsochrone); // TUBERADIUS);
136  break;
137  }
138  case 4:
139  case 5:
140  {
141  // arc = new TArc(fPosition.X(), fPosition.Y(), TUBERADIUS); // CHECK skew
142  mrk = new TMarker(fPosition.X(), fPosition.Y(), 6);
143  break;
144  }
145  case 8:
146  {
147  mrk = new TMarker(fPosition.X(), fPosition.Y(), 29);
148  break;
149  }
150  case 9:
151  {
152  mrk = new TMarker(fPosition.X(), fPosition.Y(), 24);
153  break;
154  }
155  case 10:
156  {
157  mrk = new TMarker(fPosition.X(), fPosition.Y(), 25);
158  break;
159  }
160  }
161 
162  if(mrk) {
163  mrk->SetMarkerColor(color);
164  mrk->SetMarkerSize(0.5);
165  mrk->Draw("SAME");
166  }
167  if(arc) {
168  arc->SetFillColor(color);
169  arc->SetLineColor(color);
170  arc->SetFillStyle(style);
171  arc->Draw("SAME");
172  }
173 
174 
175 }
176 
177 
178 void PndTrkHit::DrawTube(Color_t color) {
179  // cout << "draw "<< fIRegion << endl;
180  //Int_t style = 1; // [R.K. 03/2017] Unused variables
181  if(fUsed && color == kBlack) {
182  //style = 0; // [R.K. 03/2017] Unused variables
183  color = kGray;
184  }
185  TMarker *mrk = NULL;
186  TArc *arc = NULL;
187 
188  switch(fIRegion) {
189  case 0:
190  {
191  mrk = new TMarker(fPosition.X(), fPosition.Y(), 21);
192  break;
193  }
194  case 1:
195  {
196  mrk = new TMarker(fPosition.X(), fPosition.Y(), 25);
197  break;
198  }
199  case 2:
200  case 6:
201  case 3:
202  case 7:
203  {
204  arc = new TArc(fPosition.X(), fPosition.Y(), TUBERADIUS);
205  break;
206  }
207  case 4:
208  case 5:
209  {
210  // arc = new TArc(fPosition.X(), fPosition.Y(), TUBERADIUS); // CHECK skew
211  mrk = new TMarker(fPosition.X(), fPosition.Y(), 3);
212  break;
213  }
214  }
215 
216  if(mrk) {
217  mrk->SetMarkerColor(color);
218  mrk->Draw("SAME");
219  }
220  if(arc) {
221  arc->SetFillColor(color);
222  arc->SetLineColor(color);
223 // arc->SetFillStyle(style);
224  arc->Draw("SAME");
225  }
226 
227 
228 }
229 
231 
232  cout << "###############################" << endl;
233  cout << "hitID " << fHitID << " used " << fUsed << " iregion " << fIRegion << endl;
234  cout << " detID " << fDetectorID << " isensor " << fSensorID << " isochrone " << fIsochrone << endl;
235  fPosition.Print();
236 
237 }
238 
239 
TVector3 pos
Double_t x0
Definition: checkhelixhit.C:70
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
Int_t Compare(const TObject *hit) const
Definition: PndTrkHit.cxx:69
Int_t fDetectorID
Definition: PndTrkHit.h:99
Double_t fIsochrone
Definition: PndTrkHit.h:103
Int_t fSensorID
Definition: PndTrkHit.h:99
double Y
Definition: anaLmdDigi.C:68
Int_t fHitID
Definition: PndTrkHit.h:99
void Print()
Definition: PndTrkHit.cxx:230
Double_t
Double_t GetDistance(PndTrkHit *fromhit)
Definition: PndTrkHit.cxx:83
Double_t y0
Definition: checkhelixhit.C:71
TVector3 GetPosition()
Definition: PndTrkHit.h:62
void style()
Double_t fSortVariable
Definition: PndTrkHit.h:104
Double_t const fPhi
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void DrawTube(Color_t color)
Definition: PndTrkHit.cxx:178
Int_t fIRegion
Definition: PndTrkHit.h:99
double X
Definition: anaLmdDigi.C:68
Double_t GetXYDistanceFromTrack(double x0, double y0, double R)
Definition: PndTrkHit.cxx:105
Bool_t operator<(const PndTrkHit &hit1)
Definition: PndTrkHit.cxx:32
TVector3 fPosition
Definition: PndTrkHit.h:102
void Draw(Color_t color)
Definition: PndTrkHit.cxx:109
Double_t fSector
Definition: PndTrkHit.h:106
Double_t GetXYDistance(PndTrkHit *fromhit)
Definition: PndTrkHit.cxx:94
ClassImp(PndAnaContFact)
double Z
Definition: anaLmdDigi.C:68
Bool_t fUsed
Definition: PndTrkHit.h:100
PndSdsMCPoint * hit
Definition: anasim.C:70
Double_t R
Definition: checkhelixhit.C:61
Bool_t operator==(const PndTrkHit &hit1)
Definition: PndTrkHit.cxx:28
#define TUBERADIUS