AliRoot Core  3dc7879 (3dc7879)
AliTrackReference.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
7  * Permission to use, copy, modify and distribute this software and its *
8  * documentation strictly for non-commercial purposes is hereby granted *
9  * without fee, provided that the above copyright notice appears in all *
10  * copies and that both the copyright notice and this permission notice *
11  * appear in the supporting documentation. The authors make no claims *
12  * about the suitability of this software for any purpose. It is *
13  * provided "as is" without express or implied warranty. *
14  **************************************************************************/
15 
16 /* $Id$ */
17 
18 #include "TVirtualMC.h"
19 #include "TParticle.h"
20 
21 #include "AliTrackReference.h"
22 #include <Riostream.h>
23 
24 //
25 // Track Reference object is created every time particle is
26 // crossing detector bounds. The object is created by Step Manager
27 //
28 // The class stores the following informations:
29 // track label,
30 // track position: X,Y,X
31 // track momentum px, py, pz
32 // track length and time of fligth: both in cm
33 // status bits from Monte Carlo
34 //
35 
36 
37 using std::endl;
38 using std::cout;
39 ClassImp(AliTrackReference)
40 
41 //_______________________________________________________________________
43  TObject(),
44  fTrack(0),
45  fX(0),
46  fY(0),
47  fZ(0),
48  fPx(0),
49  fPy(0),
50  fPz(0),
51  fLength(0),
52  fTime(0),
53  fUserId(0),
54  fDetectorId(-999)
55 {
56  //
57  // Default constructor
58  // Creates empty object
59 
60  for(Int_t i=0; i<16; i++) ResetBit(BIT(i));
61 }
62 
64  TObject(tr),
65  fTrack(tr.fTrack),
66  fX(tr.fX),
67  fY(tr.fY),
68  fZ(tr.fZ),
69  fPx(tr.fPx),
70  fPy(tr.fPy),
71  fPz(tr.fPz),
72  fLength(tr.fLength),
73  fTime(tr.fTime),
74  fUserId(tr.fUserId),
75  fDetectorId(tr.fDetectorId)
76 {
77  // Copy Constructor
78 }
79 
80 //_______________________________________________________________________
81 AliTrackReference::AliTrackReference(Int_t label, Int_t id) :
82  TObject(),
83  fTrack(label),
84  fX(0),
85  fY(0),
86  fZ(0),
87  fPx(0),
88  fPy(0),
89  fPz(0),
90  fLength(TVirtualMC::GetMC()->TrackLength()),
91  fTime(TVirtualMC::GetMC()->TrackTime()),
92  fUserId(0),
93  fDetectorId(id)
94 {
95  //
96  // Create Reference object out of label and
97  // data in TVirtualMC object
98  //
99  // Creates an object and fill all parameters
100  // from data in VirtualMC
101  //
102  // Sylwester Radomski, (S.Radomski@gsi.de)
103  // GSI, Jan 31, 2003
104  //
105 
106  Double_t vec[4];
107 
108  TVirtualMC::GetMC()->TrackPosition(vec[0],vec[1],vec[2]);
109 
110  fX = vec[0];
111  fY = vec[1];
112  fZ = vec[2];
113 
114  TVirtualMC::GetMC()->TrackMomentum(vec[0],vec[1],vec[2],vec[3]);
115 
116  fPx = vec[0];
117  fPy = vec[1];
118  fPz = vec[2];
119 
120  // Set Up status code
121  // Copy Bits from virtual MC
122 
123  for(Int_t i=14; i<22; i++) ResetBit(BIT(i));
124 
125  SetBit(BIT(14), TVirtualMC::GetMC()->IsNewTrack());
126  SetBit(BIT(15), TVirtualMC::GetMC()->IsTrackAlive());
127  SetBit(BIT(16), TVirtualMC::GetMC()->IsTrackDisappeared());
128  SetBit(BIT(17), TVirtualMC::GetMC()->IsTrackEntering());
129  SetBit(BIT(18), TVirtualMC::GetMC()->IsTrackExiting());
130  SetBit(BIT(19), TVirtualMC::GetMC()->IsTrackInside());
131  SetBit(BIT(20), TVirtualMC::GetMC()->IsTrackOut());
132  SetBit(BIT(21), TVirtualMC::GetMC()->IsTrackStop());
133  //
134  // This particle has to be kept
135 
136 }
137 /*
138 AliExternalTrackParam * AliTrackReference::MakeTrack(const AliTrackReference *ref, Double_t mass)
139 {
140  //
141  // Make dummy track from the track reference
142  // negative mass means opposite charge
143  //
144  Double_t xx[5];
145  Double_t cc[15];
146  for (Int_t i=0;i<15;i++) cc[i]=0;
147  Double_t x = ref->X(), y = ref->Y(), z = ref->Z();
148  Double_t alpha = TMath::ATan2(y,x);
149  Double_t xr = TMath::Sqrt(x*x+y*y);
150  xx[0] = ref->LocalY();
151  xx[1] = z;
152  xx[3] = ref->Pz()/ref->Pt();
153  xx[4] = 1./ref->Pt();
154  if (mass<0) xx[4]*=-1.; // negative mass - negative direction
155  Double_t alphap = TMath::ATan2(ref->Py(),ref->Px())-alpha;
156  if (alphap> TMath::Pi()) alphap-=TMath::Pi();
157  if (alphap<-TMath::Pi()) alphap+=TMath::Pi();
158  xx[2] = TMath::Sin(alphap);
159 
160  AliExternalTrackParam * track = new AliExternalTrackParam(xr,alpha,xx,cc);
161  return track;
162 }
163 */
164 //_______________________________________________________________________
165 void
166 AliTrackReference::Print(Option_t* /*opt*/) const
167 {
168  cout << Form("Label %d P=%7.2f (PX,PY,PZ)=(%7.2f,%7.2f,%7.2f) (X,Y,Z)=(%7.2f,%7.2f,%7.2f)"
169  " Length=%7.2f Time=%7.2f UserId=%d",
170  Label(),P(),Px(),Py(),Pz(),X(),Y(),Z(),GetLength(),GetTime(),UserId()) << endl;
171 }
172 
virtual Float_t GetLength() const
virtual void Print(Option_t *opt="") const
TVectorD vec
Definition: AnalyzeLaser.C:8
virtual Float_t P() const
virtual Float_t Px() const
virtual Float_t Pz() const
virtual Float_t Py() const
virtual Float_t Y() const
virtual Int_t Label() const
virtual Float_t Z() const
virtual Int_t UserId() const
virtual Float_t GetTime() const
virtual Float_t X() const