FairRoot/PandaRoot
PndSttRecoHit2.cxx
Go to the documentation of this file.
1 // The STT 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 Kalman 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 DetPlane)
8 // dk = wiredirection (V coordinate in DetPlane)
9 // (see WireMeasurement.cpp)
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 
18 // This Class' Header ------------------
19 #include "PndSttRecoHit2.h"
20 
21 // C/C++ Headers ----------------------
22 
23 // Collaborating Class Headers --------
24 #include "PndSttHit.h"
25 #include "PndSttTube.h"
26 #include "PndSttMapCreator.h"
27 #include "PndSttTubeMap.h"
28 #include "PndGeoSttPar.h"
29 #include "FairRuntimeDb.h"
30 #include "FairRunAna.h"
31 
32 #include "TMath.h"
33 
34 // Class Member definitions -----------
35 using namespace std;
36 
38 
39 
41 {}
42 
44  : genfit::WireMeasurement(NparHitRep)
45 {
46 
47 }
48 
49 // TO BE CHANGED TO USE TUBE ARRAY
50 PndSttRecoHit2::PndSttRecoHit2(PndSttHit *currenthit) : genfit::WireMeasurement(NparHitRep){
51 
52  FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
53  PndGeoSttPar *sttParameters = (PndGeoSttPar*) rtdb->getContainer("PndGeoSttPar");
54  Int_t tubeID = currenthit->GetTubeID();
55  PndSttMapCreator *mapper = new PndSttMapCreator(sttParameters);
56  PndSttTube *tube = (PndSttTube*) mapper->GetTubeFromTubeID(tubeID);
57 
58  // wire1(3), wire2(3), rdrift
59  TVector3 wiredirection = tube->GetWireDirection();
60  TVector3 wiredirection2 = tube->GetHalfLength() * wiredirection;
61  TVector3 cenposition = tube->GetPosition();
62  TVector3 wire1, wire2;
63  wire1 = cenposition - wiredirection2;
64  wire2 = cenposition + wiredirection2;
65  // cout << "Wiredirection, wire1, wire2 " << endl;
66  // wiredirection.Print();
67  // wire1.Print();
68  // wire2.Print();
69  rawHitCoords_[0] = wire1.X();
70  rawHitCoords_[1] = wire1.Y();
71  rawHitCoords_[2] = wire1.Z();
72  rawHitCoords_[3] = wire2.X();
73  rawHitCoords_[4] = wire2.Y();
74  rawHitCoords_[5] = wire2.Z();
75  rawHitCoords_[6] = currenthit->GetIsochrone();
76 
77  // errors on drift radius
78  for(int i = 0; i < NparHitRep; i++) for(int j = 0; j < NparHitRep; j++) rawHitCov_[i][j] = 0.;
79  // rawHitCov_[6][6] = 0.0100 * 0.0100;
80  rawHitCov_[6][6] = pow(currenthit->GetIsochroneError(), 2);
81 
82  // cut on distance
83  setMaxDistance(0.5);
84 }
85 
86 // TO BE CHANGED TO USE TUBE ARRAY
87 PndSttRecoHit2::PndSttRecoHit2(PndSttHit *currenthit, const genfit::TrackCandHit* hit, TClonesArray *tubeArray) : genfit::WireMeasurement(NparHitRep){
88 
89  setDetId(hit->getDetId());
90  setHitId(hit->getHitId());
91 
92  Int_t tubeID = currenthit->GetTubeID();
93  PndSttTube* tube = nullptr;
94  if (tubeArray != nullptr){
95  tube = (PndSttTube *) tubeArray->At(tubeID);
96  } else {
97  tube = PndSttTubeMap::Instance()->GetTube(tubeID);
98  }
99 
100  // wire1(3), wire2(3), rdrift
101  TVector3 wiredirection = tube->GetWireDirection();
102  TVector3 wiredirection2 = tube->GetHalfLength() * wiredirection;
103  TVector3 cenposition = tube->GetPosition();
104  TVector3 wire1, wire2;
105  wire1 = cenposition - wiredirection2;
106  wire2 = cenposition + wiredirection2;
107  // cout << "Wiredirection, wire1, wire2 " << endl;
108  // wiredirection.Print();
109  // wire1.Print();
110  // wire2.Print();
111  rawHitCoords_[0] = wire1.X();
112  rawHitCoords_[1] = wire1.Y();
113  rawHitCoords_[2] = wire1.Z();
114  rawHitCoords_[3] = wire2.X();
115  rawHitCoords_[4] = wire2.Y();
116  rawHitCoords_[5] = wire2.Z();
117  rawHitCoords_[6] = currenthit->GetIsochrone();
118 
119  // errors on drift radius
120  for(int i = 0; i < NparHitRep; i++) for(int j = 0; j < NparHitRep; j++) rawHitCov_[i][j] = 0.;
121  // rawHitCov_[6][6] = 0.0100 * 0.0100;
122  rawHitCov_[6][6] = pow(currenthit->GetIsochroneError(), 2);
123 
124  // cut on distance
125  setMaxDistance(0.5);
126 }
int getDetId() const
Definition: TrackCandHit.h:48
Int_t i
Definition: run_full.C:25
Double_t GetHalfLength()
Definition: PndSttTube.cxx:99
int getHitId() const
Definition: TrackCandHit.h:49
PndSttTube * GetTube(int tubeId)
Definition: PndSttTubeMap.h:22
ClassImp(PndSttRecoHit2) PndSttRecoHit2
void setDetId(int detId)
static PndSttTubeMap * Instance()
PndSttTube * GetTubeFromTubeID(Int_t tubeid)
Hit object for use in TrackCand. Provides IDs and sorting parameters.
Definition: TrackCandHit.h:34
Double_t GetIsochrone() const
Definition: PndSttHit.h:62
TVector3 GetPosition()
Definition: PndSttTube.cxx:87
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
Int_t GetTubeID() const
Definition: PndSttHit.h:75
Double_t GetIsochroneError() const
Definition: PndSttHit.h:63
void setMaxDistance(double d)
void setHitId(int hitId)
int hit(Int_t nEvents=0, TString inFile="sim.root", TString parFile="par.root", TString inDigi="digi.root", TString outFile="hit.root", Int_t timeBased=0)
Definition: hit.C:1
static const int NparHitRep
TVector3 GetWireDirection()
Definition: PndSttTube.cxx:107
Matrix inversion tools.
Definition: AbsBField.h:29