]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - MUON/AliMUONTrackParam.cxx
Updated files (Christian)
[u/mrichter/AliRoot.git] / MUON / AliMUONTrackParam.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///////////////////////////////////////////////////
19//
20// Track parameters
21// in
22// ALICE
23// dimuon
24// spectrometer
25//
26///////////////////////////////////////////////////
27
28#include <Riostream.h>
29
30#include "AliMUONTrackParam.h"
31#include "AliESDMuonTrack.h"
32#include "AliLog.h"
33#include "AliMUONHitForRec.h"
34
35/// \cond CLASSIMP
36ClassImp(AliMUONTrackParam) // Class implementation in ROOT context
37/// \endcond
38
39 //_________________________________________________________________________
40AliMUONTrackParam::AliMUONTrackParam()
41 : TObject(),
42 fInverseBendingMomentum(0.),
43 fBendingSlope(0.),
44 fNonBendingSlope(0.),
45 fZ(0.),
46 fBendingCoor(0.),
47 fNonBendingCoor(0.),
48 fHitForRecPtr(0x0)
49{
50 /// Constructor
51}
52
53 //_________________________________________________________________________
54AliMUONTrackParam::AliMUONTrackParam(const AliMUONTrackParam& theMUONTrackParam)
55 : TObject(theMUONTrackParam),
56 fInverseBendingMomentum(theMUONTrackParam.fInverseBendingMomentum),
57 fBendingSlope(theMUONTrackParam.fBendingSlope),
58 fNonBendingSlope(theMUONTrackParam.fNonBendingSlope),
59 fZ(theMUONTrackParam.fZ),
60 fBendingCoor(theMUONTrackParam.fBendingCoor),
61 fNonBendingCoor(theMUONTrackParam.fNonBendingCoor),
62 fHitForRecPtr(theMUONTrackParam.fHitForRecPtr)
63{
64 /// Copy constructor
65}
66
67 //_________________________________________________________________________
68AliMUONTrackParam& AliMUONTrackParam::operator=(const AliMUONTrackParam& theMUONTrackParam)
69{
70 /// Asignment operator
71 if (this == &theMUONTrackParam)
72 return *this;
73
74 // base class assignement
75 TObject::operator=(theMUONTrackParam);
76
77 fInverseBendingMomentum = theMUONTrackParam.fInverseBendingMomentum;
78 fBendingSlope = theMUONTrackParam.fBendingSlope;
79 fNonBendingSlope = theMUONTrackParam.fNonBendingSlope;
80 fZ = theMUONTrackParam.fZ;
81 fBendingCoor = theMUONTrackParam.fBendingCoor;
82 fNonBendingCoor = theMUONTrackParam.fNonBendingCoor;
83 fHitForRecPtr = theMUONTrackParam.fHitForRecPtr;
84
85 return *this;
86}
87
88 //__________________________________________________________________________
89AliMUONTrackParam::~AliMUONTrackParam()
90{
91/// Destructor
92/// Update the number of TrackHit's connected to the attached HitForRec if any
93 if (fHitForRecPtr) fHitForRecPtr->SetNTrackHits(fHitForRecPtr->GetNTrackHits() - 1); // decrement NTrackHits of hit
94}
95
96 //__________________________________________________________________________
97void AliMUONTrackParam::SetTrackParam(AliMUONTrackParam& theMUONTrackParam)
98{
99 /// Set track parameters from "TrackParam" leaving pointer to fHitForRecPtr unchanged
100 fInverseBendingMomentum = theMUONTrackParam.fInverseBendingMomentum;
101 fBendingSlope = theMUONTrackParam.fBendingSlope;
102 fNonBendingSlope = theMUONTrackParam.fNonBendingSlope;
103 fZ = theMUONTrackParam.fZ;
104 fBendingCoor = theMUONTrackParam.fBendingCoor;
105 fNonBendingCoor = theMUONTrackParam.fNonBendingCoor;
106
107}
108
109 //__________________________________________________________________________
110AliMUONHitForRec* AliMUONTrackParam::GetHitForRecPtr(void) const
111{
112/// return pointer to HitForRec attached to the current TrackParam
113/// this method should not be called when fHitForRecPtr == NULL
114 if (!fHitForRecPtr) AliWarning("AliMUONTrackParam::GetHitForRecPtr: fHitForRecPtr == NULL");
115 return fHitForRecPtr;
116}
117
118 //__________________________________________________________________________
119Int_t AliMUONTrackParam::Compare(const TObject* TrackParam) const
120{
121/// "Compare" function to sort with decreasing Z (spectro. muon Z <0).
122/// Returns 1 (0, -1) if Z of current TrackHit
123/// is smaller than (equal to, larger than) Z of TrackHit
124 if (fHitForRecPtr->GetZ() < ((AliMUONTrackParam*)TrackParam)->fHitForRecPtr->GetZ()) return(1);
125 else if (fHitForRecPtr->GetZ() == ((AliMUONTrackParam*)TrackParam)->fHitForRecPtr->GetZ()) return(0);
126 else return(-1);
127}
128
129 //_________________________________________________________________________
130void AliMUONTrackParam::GetParamFrom(const AliESDMuonTrack& esdMuonTrack)
131{
132 /// assigned value form ESD track.
133 fInverseBendingMomentum = esdMuonTrack.GetInverseBendingMomentum();
134 fBendingSlope = TMath::Tan(esdMuonTrack.GetThetaY());
135 fNonBendingSlope = TMath::Tan(esdMuonTrack.GetThetaX());
136 fZ = esdMuonTrack.GetZ();
137 fBendingCoor = esdMuonTrack.GetBendingCoor();
138 fNonBendingCoor = esdMuonTrack.GetNonBendingCoor();
139}
140
141 //_________________________________________________________________________
142void AliMUONTrackParam::SetParamFor(AliESDMuonTrack& esdMuonTrack)
143{
144 /// assigned value form ESD track.
145 esdMuonTrack.SetInverseBendingMomentum(fInverseBendingMomentum);
146 esdMuonTrack.SetThetaX(TMath::ATan(fNonBendingSlope));
147 esdMuonTrack.SetThetaY(TMath::ATan(fBendingSlope));
148 esdMuonTrack.SetZ(fZ);
149 esdMuonTrack.SetBendingCoor(fBendingCoor);
150 esdMuonTrack.SetNonBendingCoor(fNonBendingCoor);
151}
152
153 //__________________________________________________________________________
154Double_t AliMUONTrackParam::Px() const
155{
156 /// return px from track paramaters
157 Double_t pYZ, pZ, pX;
158 pYZ = 0;
159 if ( TMath::Abs(fInverseBendingMomentum) > 0 )
160 pYZ = TMath::Abs(1.0 / fInverseBendingMomentum);
161 pZ = -pYZ / (TMath::Sqrt(1.0 + fBendingSlope * fBendingSlope)); // spectro. (z<0)
162 pX = pZ * fNonBendingSlope;
163 return pX;
164}
165
166 //__________________________________________________________________________
167Double_t AliMUONTrackParam::Py() const
168{
169 /// return px from track paramaters
170 Double_t pYZ, pZ, pY;
171 pYZ = 0;
172 if ( TMath::Abs(fInverseBendingMomentum) > 0 )
173 pYZ = TMath::Abs(1.0 / fInverseBendingMomentum);
174 pZ = -pYZ / (TMath::Sqrt(1.0 + fBendingSlope * fBendingSlope)); // spectro. (z<0)
175 pY = pZ * fBendingSlope;
176 return pY;
177}
178
179 //__________________________________________________________________________
180Double_t AliMUONTrackParam::Pz() const
181{
182 /// return px from track paramaters
183 Double_t pYZ, pZ;
184 pYZ = 0;
185 if ( TMath::Abs(fInverseBendingMomentum) > 0 )
186 pYZ = TMath::Abs(1.0 / fInverseBendingMomentum);
187 pZ = -pYZ / (TMath::Sqrt(1.0 + fBendingSlope * fBendingSlope)); // spectro. (z<0)
188 return pZ;
189}
190
191 //__________________________________________________________________________
192Double_t AliMUONTrackParam::P() const
193{
194 /// return p from track paramaters
195 Double_t pYZ, pZ, p;
196 pYZ = 0;
197 if ( TMath::Abs(fInverseBendingMomentum) > 0 )
198 pYZ = TMath::Abs(1.0 / fInverseBendingMomentum);
199 pZ = -pYZ / (TMath::Sqrt(1.0 + fBendingSlope * fBendingSlope)); // spectro. (z<0)
200 p = TMath::Abs(pZ) *
201 TMath::Sqrt(1.0 + fBendingSlope * fBendingSlope + fNonBendingSlope * fNonBendingSlope);
202 return p;
203
204}
205
206//_____________________________________________-
207void AliMUONTrackParam::Print(Option_t* opt) const
208{
209 /// Printing TrackParam information
210 /// "full" option for printing all the information about the TrackParam
211 TString sopt(opt);
212 sopt.ToUpper();
213
214 if ( sopt.Contains("FULL") ) {
215 cout << "<AliMUONTrackParam> Bending P=" << setw(5) << setprecision(3) << 1./GetInverseBendingMomentum() <<
216 ", NonBendSlope=" << setw(5) << setprecision(3) << GetNonBendingSlope()*180./TMath::Pi() <<
217 ", BendSlope=" << setw(5) << setprecision(3) << GetBendingSlope()*180./TMath::Pi() <<
218 ", (x,y,z)_IP=(" << setw(5) << setprecision(3) << GetNonBendingCoor() <<
219 "," << setw(5) << setprecision(3) << GetBendingCoor() <<
220 "," << setw(5) << setprecision(3) << GetZ() <<
221 ") cm, (px,py,pz)=(" << setw(5) << setprecision(3) << Px() <<
222 "," << setw(5) << setprecision(3) << Py() <<
223 "," << setw(5) << setprecision(3) << Pz() << ") GeV/c" << endl;
224 }
225 else {
226 cout << "<AliMUONTrackParam>" << endl;
227 }
228
229}