FairRoot/PandaRoot
PndRiemannHit.cxx
Go to the documentation of this file.
1 //-----------------------------------------------------------
2 // File and Version Information:
3 // $Id$
4 //
5 // Description:
6 // Implementation of class PndRiemannHit
7 // see PndRiemannHit.hh for details
8 //
9 // Environment:
10 // Software developed for the PANDA Detector at FAIR.
11 //
12 // Author List:
13 // Sebastian Neubert TUM (original author)
14 //
15 //
16 //-----------------------------------------------------------
17 
18 // Panda Headers ----------------------
19 
20 // This Class' Header ------------------
21 #include "PndRiemannHit.h"
22 #include "TMath.h"
23 // C/C++ Headers ----------------------
24 #include "FairHit.h"
25 #include <assert.h>
26 #include <iostream>
27 
28 // Collaborating Class Headers --------
29 #include "PndRiemannTrack.h"
30 
31 // Class Member definitions -----------
32 
33 
34 // scale factor! r=1 => z'=0.5 !!!
35 // to normalize cm-range
36 #define RIEMANNSCALE 1.
37 
39 
40 PndRiemannHit::PndRiemannHit(double mx, double my, double mz,double dx, double dy, double dz) :
41  fCovX(3,3),fHit(0), fS(-1),fZ(mz), fDeltaZ(-1.), fAlpha(-1.), fVerbose(0)
42 {
43  setXYZ(mx,my,mz);
44  setDXYZ(dx,dy,dz);
45 }
46 
47 
48 PndRiemannHit::PndRiemannHit(FairHit* cl, int myHitID) :
49  fCovX(3,3),fHit(cl), fHitID(myHitID), fS(-1), fZ(-1.), fDeltaZ(-1.), fAlpha(-1.), fVerbose(0)
50 {
51  setHit(cl);
52 }
53 
54 
56 
57 void PndRiemannHit::setXYZ(double mx, double my, double mz)
58 {
59  TVector2 a(mx, my);
60  double r=a.Mod()/RIEMANNSCALE;
61 // double phi=a.Phi();
62  double r2=r*r;
63 
64  fX.SetX(mx/RIEMANNSCALE);
65  fX.SetY(my/RIEMANNSCALE);
66  fX.SetZ(r2);
67  fZ = mz;
68 }
69 
70 void PndRiemannHit::setDXYZ(double dx, double dy, double dz)
71 {
72  fCovX[0][0] = TMath::Power(dx/RIEMANNSCALE,2);
73  fCovX[1][1] = TMath::Power(dy/RIEMANNSCALE,2);
74  fCovX[2][2] = 4*(TMath::Power(fX.X(),2)*fCovX[0][0] + 2*fX.X()*fX.Y()*dx*dy + TMath::Power(fX.Y(),2)*fCovX[1][1])/TMath::Power(RIEMANNSCALE,2);
75 
76  fDeltaZ = dz/RIEMANNSCALE;
77 }
78 
79 void PndRiemannHit::setHit(FairHit* cl)
80 {
81  setXYZ(cl->GetX(), cl->GetY(), cl->GetZ());
82  setDXYZ(cl->GetDx(), cl->GetDy(), cl->GetDz());
83 }
84 
85 
86 double
88  return fZ;
89 }
90 
91 void
93  assert(trk!=NULL);
94  TVectorD o=trk->orig();
95  o*=RIEMANNSCALE;// convert back to cm;
96  double r=trk->r();
97  r*=RIEMANNSCALE;
98  const PndRiemannHit* firstHit=trk->getHit(0);
99  assert(firstHit!=NULL);
100  TVector2 k(firstHit->x().X()-o[0],firstHit->x().Y()-o[1]);
101  TVector2 l(fX.X()-o[0],fX.Y()-o[1]);
102  fAlpha=l.DeltaPhi(k);
103 // if (fAlpha < 0)
104 // fAlpha += TMath::Pi()*2;
105  fS=fAlpha*r;
106  if (fVerbose > 1) std::cout << "Alpha/r " << fAlpha << "/" << r << "--> z/s "<< fHit->GetZ() << "/" << fS <<std::endl;
107 }
108 
110 {
111  double result = TMath::Sqrt(fCovX[0][0] + fCovX[1][1]);
112  if (result == 0.){
113  return 1.;
114  }
115  else return result;
116 }
FairHit * fHit
int fVerbose
Definition: poormantracks.C:24
double dy
Double_t const fAlpha
double r
Definition: RiemannTest.C:14
double sigmaXY() const
#define RIEMANNSCALE
double fS
pathlength along track
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
Double_t fZ
Definition: PndCaloDraw.cxx:34
void setDXYZ(double dx, double dy, double dz)
Int_t a
Definition: anaLmdDigi.C:126
void setXYZ(double x, double y, double z)
double fDeltaZ
error in z
double dx
GFTrack * trk
Definition: checkgenfit.C:13
double r() const
double z() const
void setHit(FairHit *cl)
double fAlpha
angle along track
TVectorD orig() const
const TVector3 & x() const
Definition: PndRiemannHit.h:71
ClassImp(PndAnaContFact)
double fZ
z-coordinate of hit
void calcPosOnTrk(PndRiemannTrack *trk)
TMatrixD fCovX
Covariance Matrix of the hit.
PndRiemannHit * getHit(unsigned int i)
double r2