FairRoot/PandaRoot
PndFTSCAMCTrack.cxx
Go to the documentation of this file.
1 // $Id: PndFTSCAMCTrack.cxx,v 1.3 2011/01/31 17:18:28 fisyak Exp $
2 // **************************************************************************
3 // This file is property of and copyright by the ALICE HLT Project *
4 // ALICE Experiment at CERN, All rights reserved. *
5 // *
6 // Primary Authors: Sergey Gorbunov <sergey.gorbunov@kip.uni-heidelberg.de> *
7 // Ivan Kisel <kisel@kip.uni-heidelberg.de> *
8 // for The ALICE HLT Project. *
9 // *
10 // Developed by: Igor Kulakov <I.Kulakov@gsi.de> *
11 // Maksym Zyzak <M.Zyzak@gsi.de> *
12 // *
13 // Permission to use, copy, modify and distribute this software and its *
14 // documentation strictly for non-commercial purposes is hereby granted *
15 // without fee, provided that the above copyright notice appears in all *
16 // copies and that both the copyright notice and this permission notice *
17 // appear in the supporting documentation. The authors make no claims *
18 // about the suitability of this software for any purpose. It is *
19 // provided "as is" without express or implied warranty. *
20 // *
21 //***************************************************************************
22 
23 
24 #include "PndFTSCAMCTrack.h"
25 #include "PndFTSCAMath.h"
26 #include "TParticle.h"
27 #include "TDatabasePDG.h"
28 #include "PndMCTrack.h"
29 
31  : fPDG( 0 ), fP( 0 ), fPt( 0 ), fNHits( 0 ), fNMCPoints( 0 ), fFirstMCPointID( 0 ), fNReconstructed( 0 ), fSet( 0 ), fNTurns( 0 ), fIsForwardTrack(true)
32 {
33  //* Default constructor
34 }
35 
36 
37 PndFTSCAMCTrack::PndFTSCAMCTrack( const TParticle *part )
38  : fPDG( 0 ), fP( 0 ), fPt( 0 ), fNHits( 0 ), fNMCPoints( 0 ), fFirstMCPointID( 0 ), fNReconstructed( 0 ), fSet( 0 ), fNTurns( 0 ), fIsForwardTrack(true)
39 {
40  //* Constructor from TParticle
41 
42  for ( int i = 0; i < 7; i++ ) fPar[i] = 0;
43  for ( int i = 0; i < 7; i++ ) fTPCPar[i] = 0;
44  fP = 0;
45  fPt = 0;
46 
47  if ( !part ) return;
48  TLorentzVector mom, vtx;
49  part->ProductionVertex( vtx );
50  part->Momentum( mom );
51  fPar[0] = part->Vx();
52  fPar[1] = part->Vy();
53  fPar[2] = part->Vz();
54  fP = part->P();
55  fPt = part->Pt();
56  float pi = ( fP > 1.e-4 ) ? 1. / fP : 0;
57  fPar[3] = part->Px() * pi;
58  fPar[4] = part->Py() * pi;
59  fPar[5] = part->Pz() * pi;
60  fPar[6] = 0;
61  fPDG = part->GetPdgCode();
62  if ( CAMath::Abs( fPDG ) < 100000 ) {
63  TParticlePDG *pPDG = TDatabasePDG::Instance()->GetParticle( fPDG );
64  if ( pPDG ) fPar[6] = pPDG->Charge() / 3.0 * pi;
65  }
66 }
67 
68 // void PndFTSCAMCTrack::SetTPCPar( float X, float Y, float Z,
69 // float Px, float Py, float Pz )
70 // {
71 // //* Set parameters at TPC entrance
72 
73 // for ( int i = 0; i < 7; i++ ) fTPCPar[i] = 0;
74 
75 // fTPCPar[0] = X;
76 // fTPCPar[1] = Y;
77 // fTPCPar[2] = Z;
78 // float p = CAMath::Sqrt( Px * Px + Py * Py + Pz * Pz );
79 // float pi = ( p > 1.e-4 ) ? 1. / p : 0;
80 // fTPCPar[3] = Px * pi;
81 // fTPCPar[4] = Py * pi;
82 // fTPCPar[5] = Pz * pi;
83 // fTPCPar[6] = 0;
84 // if ( CAMath::Abs( fPDG ) < 100000 ) {
85 // TParticlePDG *pPDG = TDatabasePDG::Instance()->GetParticle( fPDG );
86 // if ( pPDG ) fTPCPar[6] = pPDG->Charge() / 3.0 * pi;
87 // }
88 // }
89 
90 void PndFTSCAMCTrack::SetMCTrack(const PndMCTrack* ttt, Double_t q, unsigned int Nmcpoints, unsigned int FirstmcpointId)
91 {
92  if (Nmcpoints!=0){
93  Double_t px = ttt->GetMomentum().X();
94  Double_t py = ttt->GetMomentum().Y();
95  Double_t pz = ttt->GetMomentum().Z();
96  Double_t p = sqrt( px*px + py*py + pz*pz );
97 
98  fMotherId = ttt->GetMotherID();
99  fPDG = ttt->GetPdgCode();
100 
101  fPar[0] = ttt->GetStartVertex().X();
102  fPar[1] = ttt->GetStartVertex().Y();
103  fPar[2] = ttt->GetStartVertex().Z();
104  fPar[3] = px/fabs(p);
105  fPar[4] = py/fabs(p);
106  fPar[5] = pz/fabs(p);
107  fPar[6] = q/p;
108  fTPCPar[0] = 0;
109  fTPCPar[1] = 0;
110  fTPCPar[2] = 0;
111  fTPCPar[3] = 0;
112  fTPCPar[4] = 0;
113  fTPCPar[5] = 0;
114  fTPCPar[6] = 0;
115  fP = p;
116  fPt = sqrt( px*px + py*py );
117  fNHits = Nmcpoints;
118  fNMCPoints = Nmcpoints;
119  fFirstMCPointID = FirstmcpointId;
120  fNReconstructed = 0;
121  fSet = 0;
122  fNTurns = 1;
123  fIsForwardTrack = true;
124  }
125  else{
126  fMotherId = -1;
127  fPDG = -1;
128  fPar[0] = 0;
129  fPar[1] = 0;
130  fPar[2] = 0;
131  fPar[3] = 0;
132  fPar[4] = 0;
133  fPar[5] = 0;
134  fPar[6] = 0;
135  fTPCPar[0] = 0;
136  fTPCPar[1] = 0;
137  fTPCPar[2] = 0;
138  fTPCPar[3] = 0;
139  fTPCPar[4] = 0;
140  fTPCPar[5] = 0;
141  fTPCPar[6] = 0;
142  fP = 0;
143  fPt = 0;
144  fNHits = 0;
145  fNMCPoints = 0;
146  fFirstMCPointID = 0;
147  fNReconstructed = 0;
148  fSet = 0;
149  fNTurns = 1;
150  fIsForwardTrack = true;
151  }
152 }
153 
155 {
156  if (rhs.NMCPoints()!=0){
157  Double_t px = rhs.Px();
158  Double_t py = rhs.Py();
159  Double_t pz = rhs.Pz();
160  Double_t p = sqrt( px*px + py*py + pz*pz );
161 
162  fMotherId = rhs.MotherId();
163  fPDG = rhs.PDG();
164 
165  fPar[0] = rhs.Par(0);
166  fPar[1] = rhs.Par(1);
167  fPar[2] = rhs.Par(2);
168  fPar[3] = rhs.Par(3);
169  fPar[4] = rhs.Par(4);
170  fPar[5] = rhs.Par(5);
171  fPar[6] = rhs.Par(6);
172  fTPCPar[0] = 0;
173  fTPCPar[1] = 0;
174  fTPCPar[2] = 0;
175  fTPCPar[3] = 0;
176  fTPCPar[4] = 0;
177  fTPCPar[5] = 0;
178  fTPCPar[6] = 0;
179  fP = p;
180  fPt = sqrt( px*px + py*py );
181  fNHits = rhs.NMCPoints();
182  fNMCPoints = rhs.NMCPoints();
184  fNReconstructed = 0;
185  fSet = 0;
186  fNTurns = 1;
188  }
189  else{
190  fMotherId = -1;
191  fPDG = -1;
192  fPar[0] = 0;
193  fPar[1] = 0;
194  fPar[2] = 0;
195  fPar[3] = 0;
196  fPar[4] = 0;
197  fPar[5] = 0;
198  fPar[6] = 0;
199  fTPCPar[0] = 0;
200  fTPCPar[1] = 0;
201  fTPCPar[2] = 0;
202  fTPCPar[3] = 0;
203  fTPCPar[4] = 0;
204  fTPCPar[5] = 0;
205  fTPCPar[6] = 0;
206  fP = 0;
207  fPt = 0;
208  fNHits = 0;
209  fNMCPoints = 0;
210  fFirstMCPointID = 0;
211  fNReconstructed = 0;
212  fSet = 0;
213  fNTurns = 1;
214  }
215  return *this;
216 }
217 
218 
220 {
221  out << a.fMotherId << " " << a.fPDG << std::endl;
222  for (int i = 0; i < 7; i++) out << a.fPar[i] << " ";
223  out << std::endl;
224  for (int i = 0; i < 7; i++) out << a.fTPCPar[i] << " ";
225  out << std::endl;
226  out << a.fP << " " << a.fPt << std::endl;
227  out << a.fNHits << " " << a.fNMCPoints << " " << a.fFirstMCPointID << std::endl;
228  return out << a.fNReconstructed << " " << a.fSet << " " << a.fNTurns << std::endl;
229 }
230 
231 
233 {
234  in >> a.fMotherId;
235  in >> a.fPDG;
236  for (int i = 0; i < 7; i++) in >> a.fPar[i];
237  for (int i = 0; i < 7; i++) in >> a.fTPCPar[i];
238  in >> a.fP >> a.fPt;
239  in >> a.fNHits >> a.fNMCPoints >> a.fFirstMCPointID;
240  return in >> a.fNReconstructed >> a.fSet >> a.fNTurns;
241 }
242 
Int_t i
Definition: run_full.C:25
float Pz() const
int NMCPoints() const
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
int PDG() const
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
#define pi
Definition: createSTT.C:60
bool IsForwardTrack() const
Double_t mom
Definition: plot_dirc.C:14
Double_t p
Definition: anasim.C:58
for(int j=0;j< ncounts;j++)
static T Abs(const T &x)
Definition: PndCAMath.h:39
Int_t a
Definition: anaLmdDigi.C:126
int MotherId() const
float Par(int i) const
basic_ostream< char, char_traits< char > > ostream
Double_t
PndFTSCAMCTrack & operator=(const PndFTSCAMCTrack &rhs)
void SetMCTrack(const PndMCTrack *ttt, Double_t q, unsigned int Nmcpoints, unsigned int FirstmcpointId)
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
basic_istream< char, char_traits< char > > istream
TFile * out
Definition: reco_muo.C:20
float Py() const
istream & operator>>(istream &in, PndFTSCAMCTrack &a)
TParticlePDG * fPDG
Definition: poormantracks.C:18
float Px() const
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
ostream & operator<<(ostream &out, const PndFTSCAMCTrack &a)
double pz[39]
Definition: pipisigmas.h:14
int FirstMCPointID() const