FairRoot/PandaRoot
PndRichPhoton.cxx
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndRichPhoton source file -----
3 // ----- Created 01/11/14 by Beloborodov Konstantin -----
4 // ----- -----
5 // ----- -----
6 // -------------------------------------------------------------------------
7 #include <iostream>
8 
9 using std::cout;
10 using std::endl;
11 
12 #include "PndRichPhoton.h"
13 
14 // ----- Default constructor -------------------------------------------
16  fPDHit(NULL),
17  fDTime(0.),
18  fTime(0.),
19  fHitTime(0.),
20  fTheta(0.),
21  fPhi(0.),
22  fTMask(0),
23  fMirrors(),
24  fHitPosition(0,0,0),
25  fTrackPosition(0,0,0),
26  fTrackDirection(0,0,0),
27  fTrackPositionOld(0,0,0),
28  fTrackDirectionOld(0,0,0),
29  fMirrRefPosition(),
30  fLength(0.),
31  fTrack(NULL)
32 {
33 }
34 // -------------------------------------------------------------------------
35 
36 
37 // ----- Standard constructor ------------------------------------------
38 
40  Double_t phi,
41  UInt_t tmask):
42  fPDHit(NULL),
43  fDTime(0.),
44  fTime(0.),
45  fHitTime(0.),
46  fTheta(theta),
47  fPhi(phi),
48  fTMask(tmask),
49  fMirrors(),
50  fHitPosition(0,0,0),
51  fTrackPosition(0,0,0),
52  fTrackDirection(0,0,0),
53  fTrackPositionOld(0,0,0),
54  fTrackDirectionOld(0,0,0),
55  fMirrRefPosition(),
56  fLength(0.),
57  fTrack(NULL)
58 {
59 }
60 
61 // ----- Destructor ----------------------------------------------------
63 // -------------------------------------------------------------------------
64 
66 {
67  // coordinate system calculation
68  TVector3 axisTx = fTrack->GetAxisX();
69  TVector3 axisTy = fTrack->GetAxisY();
72  fDTime = fTrack->GetTime0();
75  // single reflection
76  if (fMirrors.size()==0) {
77  //fHitPosition = fPDHit->GetPosition();
78  fMirrRefPosition.clear();
79  fMirrRefPosition.push_back(fHitPosition);
81  TVector3 nf = (fHitPosition-fTrackPosition).Unit();
82  TVector3 nfT = (nf-fTrackDirection*(fTrackDirection*nf)).Unit();
84  fPhi = std::atan2(axisTy*nfT,axisTx*nfT);
85  fTime = fHitTime - fLength/30 - fDTime;
86  return true;
87  }
88  // single reflection
89  if (fMirrors.size()==1) {
90  //fHitPosition = fPDHit->GetPosition();
91  Double_t t1 = (fTrackPosition-fMirrors[0]->GetPoint())*fMirrors[0]->GetNormal();
92  Double_t t2 = (fHitPosition-fMirrors[0]->GetPoint())*fMirrors[0]->GetNormal();
93  TVector3 p1 = fTrackPosition-t1*fMirrors[0]->GetNormal();
94  TVector3 p2 = fHitPosition-t2*fMirrors[0]->GetNormal();
95  TVector3 p0 = (t2*p1+t1*p2)*(1.0/(t1+t2)); // point of reflection
96  if ( std::fabs(p0.X()-fMirrors[0]->GetPoint().X())<fMirrors[0]->GetDims().X() &&
97  std::fabs(p0.Y()-fMirrors[0]->GetPoint().Y())<fMirrors[0]->GetDims().Y() &&
98  std::fabs(p0.Z()-fMirrors[0]->GetPoint().Z())<fMirrors[0]->GetDims().Z() ) {
99  fMirrRefPosition.clear();
100  fMirrRefPosition.push_back(p0);
101  fLength = (fTrackPosition-p0).Mag()+(fHitPosition-p0).Mag();
102  TVector3 nf = (p0-fTrackPosition).Unit();
103  TVector3 nfT = (nf-fTrackDirection*(fTrackDirection*nf)).Unit();
105  fPhi = std::atan2(axisTy*nfT,axisTx*nfT);
106  fTime = fHitTime - fLength/30 - fDTime;
107  return true;
108  } else return false;
109  }
110  // double reflections
111  if (fMirrors.size()==2) {
112  //fHitPosition = fPDHit->GetPosition();
113  Double_t t1 = (fTrackPosition-fMirrors[0]->GetPoint())*fMirrors[0]->GetNormal();
114  TVector3 p1 = fTrackPosition-2*fMirrors[0]->GetNormal()*t1;
115  Double_t t2 = (fHitPosition-fMirrors[1]->GetPoint())*fMirrors[1]->GetNormal();
116  TVector3 p2 = fHitPosition-2*fMirrors[1]->GetNormal()*t2;
117  TVector3 dir = (p2-p1).Unit();
118  t1 /= dir*fMirrors[0]->GetNormal();
119  TVector3 q1 = p1+dir*t1;
120  t2 /= dir*fMirrors[1]->GetNormal();
121  TVector3 q2 = p2+dir*t2;
122  if ( std::fabs(q1.X()-fMirrors[0]->GetPoint().X())<fMirrors[0]->GetDims().X() &&
123  std::fabs(q1.Y()-fMirrors[0]->GetPoint().Y())<fMirrors[0]->GetDims().Y() &&
124  std::fabs(q1.Z()-fMirrors[0]->GetPoint().Z())<fMirrors[0]->GetDims().Z() &&
125  std::fabs(q2.X()-fMirrors[1]->GetPoint().X())<fMirrors[1]->GetDims().X() &&
126  std::fabs(q2.Y()-fMirrors[1]->GetPoint().Y())<fMirrors[1]->GetDims().Y() &&
127  std::fabs(q2.Z()-fMirrors[1]->GetPoint().Z())<fMirrors[1]->GetDims().Z() ) {
128  fMirrRefPosition.clear();
129  fMirrRefPosition.push_back(q1);
130  fMirrRefPosition.push_back(q2);
131  fLength = (fTrackPosition-q1).Mag()+(q2-q1).Mag()+(fHitPosition-q2).Mag();
132  TVector3 nf = (q1-fTrackPosition).Unit();
133  TVector3 nfT = (nf-fTrackDirection*(fTrackDirection*nf)).Unit();
135  fPhi = std::atan2(axisTy*nfT,axisTx*nfT);
136  fTime = fHitTime - fLength/30 - fDTime;
137  return true;
138  }
139  }
140  return false;
141 }
142 
144 {
148  TrackCalc();
149  return fLength;
150 }
151 
153 {
157  TrackCalc();
158  return fTime;
159 }
160 
162 {
166  TrackCalc();
167  return fTheta;
168 }
169 
171 {
175  TrackCalc();
176  return fPhi;
177 }
178 
179 // ----- Public method Print -------------------------------------------
180 void PndRichPhoton::Print(const Option_t* opt) const {
181  cout << "RICH Photon hit: Time = " << fTime << " opt="<<opt<<endl;
182 }
183 // -------------------------------------------------------------------------
184 
friend F32vec4 acos(const F32vec4 &a)
Definition: P4_F32vec4.h:113
virtual Double_t GetTime()
Int_t t2
Definition: hist-t7.C:106
virtual Double_t GetLength()
PndRichBarPoint * fTrack
std::vector< PndRichMirrorSegment * > fMirrors
virtual void Print(const Option_t *opt="") const
TVector3 fTrackDirection
Int_t t1
Definition: hist-t7.C:106
Double_t fTime
virtual Double_t GetPhi()
TVector3 GetAxisZ() const
Double_t
Double_t fTheta
Double_t fHitTime
Double_t fDTime
Double_t const fPhi
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
TVector3 fTrackPosition
virtual Double_t GetTheta()
std::vector< TVector3 > fMirrRefPosition
TPad * p2
Definition: hist-t7.C:117
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
Definition: P4_F32vec4.h:117
TVector3 fTrackDirectionOld
TVector3 GetAxisX() const
TVector3 GetPosition0() const
Double_t fLength
ClassImp(PndAnaContFact)
TPad * p1
Definition: hist-t7.C:116
Double_t GetTime0() const
virtual bool TrackCalc()
TVector3 fTrackPositionOld
TVector3 fHitPosition
virtual ~PndRichPhoton()
TVector3 GetAxisY() const