]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - STEER/AliTrackReference.cxx
Fix in composition of QAChecked output image file (Melinda S.)
[u/mrichter/AliRoot.git] / STEER / AliTrackReference.cxx
... / ...
CommitLineData
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
37ClassImp(AliTrackReference)
38
39//_______________________________________________________________________
40 AliTrackReference::AliTrackReference():
41 TObject(),
42 fTrack(0),
43 fX(0),
44 fY(0),
45 fZ(0),
46 fPx(0),
47 fPy(0),
48 fPz(0),
49 fLength(0),
50 fTime(0),
51 fUserId(0),
52 fDetectorId(-999)
53{
54 //
55 // Default constructor
56 // Creates empty object
57
58 for(Int_t i=0; i<16; i++) ResetBit(BIT(i));
59}
60
61AliTrackReference::AliTrackReference(const AliTrackReference &tr) :
62 TObject(tr),
63 fTrack(tr.fTrack),
64 fX(tr.fX),
65 fY(tr.fY),
66 fZ(tr.fZ),
67 fPx(tr.fPx),
68 fPy(tr.fPy),
69 fPz(tr.fPz),
70 fLength(tr.fLength),
71 fTime(tr.fTime),
72 fUserId(tr.fUserId),
73 fDetectorId(tr.fDetectorId)
74{
75 // Copy Constructor
76}
77
78//_______________________________________________________________________
79AliTrackReference::AliTrackReference(Int_t label, Int_t id) :
80 TObject(),
81 fTrack(label),
82 fX(0),
83 fY(0),
84 fZ(0),
85 fPx(0),
86 fPy(0),
87 fPz(0),
88 fLength(gMC->TrackLength()),
89 fTime(gMC->TrackTime()),
90 fUserId(0),
91 fDetectorId(id)
92{
93 //
94 // Create Reference object out of label and
95 // data in TVirtualMC object
96 //
97 // Creates an object and fill all parameters
98 // from data in VirtualMC
99 //
100 // Sylwester Radomski, (S.Radomski@gsi.de)
101 // GSI, Jan 31, 2003
102 //
103
104 Double_t vec[4];
105
106 gMC->TrackPosition(vec[0],vec[1],vec[2]);
107
108 fX = vec[0];
109 fY = vec[1];
110 fZ = vec[2];
111
112 gMC->TrackMomentum(vec[0],vec[1],vec[2],vec[3]);
113
114 fPx = vec[0];
115 fPy = vec[1];
116 fPz = vec[2];
117
118 // Set Up status code
119 // Copy Bits from virtual MC
120
121 for(Int_t i=0; i<16; i++) ResetBit(BIT(i));
122
123 SetBit(BIT(0), gMC->IsNewTrack());
124 SetBit(BIT(1), gMC->IsTrackAlive());
125 SetBit(BIT(2), gMC->IsTrackDisappeared());
126 SetBit(BIT(3), gMC->IsTrackEntering());
127 SetBit(BIT(4), gMC->IsTrackExiting());
128 SetBit(BIT(5), gMC->IsTrackInside());
129 SetBit(BIT(6), gMC->IsTrackOut());
130 SetBit(BIT(7), gMC->IsTrackStop());
131 //
132 // This particle has to be kept
133
134}
135/*
136AliExternalTrackParam * AliTrackReference::MakeTrack(const AliTrackReference *ref, Double_t mass)
137{
138 //
139 // Make dummy track from the track reference
140 // negative mass means opposite charge
141 //
142 Double_t xx[5];
143 Double_t cc[15];
144 for (Int_t i=0;i<15;i++) cc[i]=0;
145 Double_t x = ref->X(), y = ref->Y(), z = ref->Z();
146 Double_t alpha = TMath::ATan2(y,x);
147 Double_t xr = TMath::Sqrt(x*x+y*y);
148 xx[0] = ref->LocalY();
149 xx[1] = z;
150 xx[3] = ref->Pz()/ref->Pt();
151 xx[4] = 1./ref->Pt();
152 if (mass<0) xx[4]*=-1.; // negative mass - negative direction
153 Double_t alphap = TMath::ATan2(ref->Py(),ref->Px())-alpha;
154 if (alphap> TMath::Pi()) alphap-=TMath::Pi();
155 if (alphap<-TMath::Pi()) alphap+=TMath::Pi();
156 xx[2] = TMath::Sin(alphap);
157
158 AliExternalTrackParam * track = new AliExternalTrackParam(xr,alpha,xx,cc);
159 return track;
160}
161*/
162//_______________________________________________________________________
163void
164AliTrackReference::Print(Option_t* /*opt*/) const
165{
166 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)"
167 " Length=%7.2f Time=%7.2f UserId=%d",
168 Label(),P(),Px(),Py(),Pz(),X(),Y(),Z(),GetLength(),GetTime(),UserId()) << endl;
169}
170