FairRoot/PandaRoot
PndFtsRecoHit2.cxx
Go to the documentation of this file.
1 // The FTS point is not defined by the (x, y, z) coordinates, but we ONLY know the
2 // (x, y) coordinates of the wire center (not the z!); moreover we know the drift
3 // radius. In order to find the MEASURED POINT to be used in the GFKalman fit a
4 // preliminary propagation must be performed to the point of closest approach to
5 // the firing wire.
6 // The plane is a virtual detector plane defined via:
7 // dj = wvi - vpf (U coordinate in GFDetPlane)
8 // dk = wiredirection (V coordinate in GFDetPlane)
9 // (see GFWireHitPolicy.cxx)
10 //
11 // input: 8 entries
12 // 0-1-2 ==> x,y,z of the 1st extremity of the firing wire;
13 // 3-4-5 ==> x,y,z of the 2nd extremity of the firing wire;
14 // 6 ==> drift radius;
15 
16 //modified by Elisabetta Prencipe 19/5/2014
17 // This Class' Header ------------------
18 #include "PndFtsRecoHit2.h"
19 
20 // C/C++ Headers ----------------------
21 
22 // Collaborating Class Headers --------
23 #include "PndFtsHit.h"
24 #include "PndFtsTube.h"
25 #include "PndFtsMapCreator.h"
26 #include "PndGeoFtsPar.h"
27 #include "FairRuntimeDb.h"
28 #include "FairRunAna.h"
29 
30 #include "TMath.h"
31 
32 // Class Member definitions -----------
33 using namespace std;
34 
36 
37 
39 {}
40 
42  : genfit::WireMeasurement(NparHitRep)
43 {
44 
45 }
46 
47 // TO BE CHANGED TO USE TUBE ARRAY
48 PndFtsRecoHit2::PndFtsRecoHit2(PndFtsHit *currenthit) : genfit::WireMeasurement(NparHitRep){
49 
50  FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
51  PndGeoFtsPar *ftsParameters = (PndGeoFtsPar*) rtdb->getContainer("PndGeoFtsPar");
52  Int_t tubeID = currenthit->GetTubeID();
53  PndFtsMapCreator *mapper = new PndFtsMapCreator(ftsParameters);
54  PndFtsTube *tube = (PndFtsTube*) mapper->GetTubeFromTubeID(tubeID);
55 
56  // wire1(3), wire2(3), rdrift
57  TVector3 wiredirection = tube->GetWireDirection();
58  TVector3 wiredirection2 = tube->GetHalfLength() * wiredirection;
59  TVector3 cenposition = tube->GetPosition();
60  TVector3 wire1, wire2;
61  wire1 = cenposition - wiredirection2;
62  wire2 = cenposition + wiredirection2;
63  // cout << "Wiredirection, wire1, wire2 " << endl;
64  // wiredirection.Print();
65  // wire1.Print();
66  // wire2.Print();
67  rawHitCoords_[0] = wire1.X();
68  rawHitCoords_[1] = wire1.Y();
69  rawHitCoords_[2] = wire1.Z();
70  rawHitCoords_[3] = wire2.X();
71  rawHitCoords_[4] = wire2.Y();
72  rawHitCoords_[5] = wire2.Z();
73  rawHitCoords_[6] = currenthit->GetIsochrone();
74 
75  // errors on drift radius
76  for(int i = 0; i < NparHitRep; i++) for(int j = 0; j < NparHitRep; j++) rawHitCov_[i][j] = 0.;
77  // rawHitCov_[6][6] = 0.0100 * 0.0100;
78  rawHitCov_[6][6] = pow(currenthit->GetIsochroneError(), 2);
79 
80  // cut on distance
81  setMaxDistance(0.5);
82 }
83 
84 // TO BE CHANGED TO USE TUBE ARRAY
85 PndFtsRecoHit2::PndFtsRecoHit2(PndFtsHit *currenthit, const genfit::TrackCandHit* hit, TClonesArray *tubeArray) : genfit::WireMeasurement(NparHitRep){
86 
87  setDetId(hit->getDetId());
88  setHitId(hit->getHitId());
89 
90  Int_t tubeID = currenthit->GetTubeID();
91  PndFtsTube *tube = (PndFtsTube *) tubeArray->At(tubeID);
92 
93  // wire1(3), wire2(3), rdrift
94  TVector3 wiredirection = tube->GetWireDirection();
95  TVector3 wiredirection2 = tube->GetHalfLength() * wiredirection;
96  TVector3 cenposition = tube->GetPosition();
97  TVector3 wire1, wire2;
98  wire1 = cenposition - wiredirection2;
99  wire2 = cenposition + wiredirection2;
100  // cout << "Wiredirection, wire1, wire2 " << endl;
101  // wiredirection.Print();
102  // wire1.Print();
103  // wire2.Print();
104  rawHitCoords_[0] = wire1.X();
105  rawHitCoords_[1] = wire1.Y();
106  rawHitCoords_[2] = wire1.Z();
107  rawHitCoords_[3] = wire2.X();
108  rawHitCoords_[4] = wire2.Y();
109  rawHitCoords_[5] = wire2.Z();
110  rawHitCoords_[6] = currenthit->GetIsochrone();
111 
112  // errors on drift radius
113  for(int i = 0; i < NparHitRep; i++) for(int j = 0; j < NparHitRep; j++) rawHitCov_[i][j] = 0.;
114  // rawHitCov_[6][6] = 0.0100 * 0.0100;
115  rawHitCov_[6][6] = pow(currenthit->GetIsochroneError(), 2);
116 
117  // cut on distance
118  setMaxDistance(0.5);
119 }
120 
121 
int getDetId() const
Definition: TrackCandHit.h:48
Int_t i
Definition: run_full.C:25
int getHitId() const
Definition: TrackCandHit.h:49
TVector3 GetWireDirection() const
Definition: PndFtsTube.cxx:83
Int_t GetTubeID() const
Definition: PndFtsHit.h:70
void setDetId(int detId)
PndFtsTube * GetTubeFromTubeID(Int_t tubeid)
Hit object for use in TrackCand. Provides IDs and sorting parameters.
Definition: TrackCandHit.h:34
static const int NparHitRep
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
TVector3 GetPosition() const
Definition: PndFtsTube.cxx:68
void setMaxDistance(double d)
Double_t GetHalfLength() const
Definition: PndFtsTube.cxx:80
void setHitId(int hitId)
Double_t GetIsochrone() const
Definition: PndFtsHit.h:57
Double_t GetIsochroneError() const
Definition: PndFtsHit.h:58
ClassImp(PndAnaContFact)
PndSdsMCPoint * hit
Definition: anasim.C:70