Line data Source code
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 : //====================================================================================================================================================
17 : //
18 : // ESD description of an ALICE muon forward track, combining the information of the Muon Spectrometer and the Muon Forward Tracker
19 : //
20 : // Contact author: antonio.uras@cern.ch
21 : //
22 : //====================================================================================================================================================
23 :
24 : #include "AliESDMuonGlobalTrack.h"
25 : #include "AliESDEvent.h"
26 :
27 : #include "TClonesArray.h"
28 : #include "TLorentzVector.h"
29 : #include "TMath.h"
30 : #include "TDatabasePDG.h"
31 :
32 172 : ClassImp(AliESDMuonGlobalTrack)
33 :
34 : //====================================================================================================================================================
35 :
36 : AliESDMuonGlobalTrack::AliESDMuonGlobalTrack():
37 4 : AliVParticle(),
38 4 : fCharge(0),
39 4 : fMatchTrigger(0),
40 4 : fNMFTClusters(0),
41 4 : fNWrongMFTClustersMC(-1),
42 4 : fMFTClusterPattern(0),
43 4 : fPx(0),
44 4 : fPy(0),
45 4 : fPz(0),
46 4 : fPt(0),
47 4 : fP(0),
48 4 : fEta(0),
49 4 : fRapidity(0),
50 4 : fFirstTrackingPointX(0),
51 4 : fFirstTrackingPointY(0),
52 4 : fFirstTrackingPointZ(0),
53 4 : fXAtVertex(0),
54 4 : fYAtVertex(0),
55 4 : fRAtAbsorberEnd(0),
56 4 : fCovariances(0),
57 4 : fChi2OverNdf(0),
58 4 : fChi2MatchTrigger(0),
59 4 : fLabel(-1),
60 4 : fMuonClusterMap(0),
61 4 : fHitsPatternInTrigCh(0),
62 4 : fHitsPatternInTrigChTrk(0),
63 4 : fLoCircuit(0),
64 4 : fIsConnected(kFALSE),
65 4 : fESDEvent(0)
66 20 : {
67 :
68 : // Default constructor
69 :
70 4 : fProdVertexXYZ[0]=0;
71 4 : fProdVertexXYZ[1]=0;
72 4 : fProdVertexXYZ[2]=0;
73 :
74 8 : }
75 :
76 : //====================================================================================================================================================
77 :
78 : AliESDMuonGlobalTrack::AliESDMuonGlobalTrack(Double_t px, Double_t py, Double_t pz):
79 0 : AliVParticle(),
80 0 : fCharge(0),
81 0 : fMatchTrigger(0),
82 0 : fNMFTClusters(0),
83 0 : fNWrongMFTClustersMC(-1),
84 0 : fMFTClusterPattern(0),
85 0 : fPx(0),
86 0 : fPy(0),
87 0 : fPz(0),
88 0 : fPt(0),
89 0 : fP(0),
90 0 : fEta(0),
91 0 : fRapidity(0),
92 0 : fFirstTrackingPointX(0),
93 0 : fFirstTrackingPointY(0),
94 0 : fFirstTrackingPointZ(0),
95 0 : fXAtVertex(0),
96 0 : fYAtVertex(0),
97 0 : fRAtAbsorberEnd(0),
98 0 : fCovariances(0),
99 0 : fChi2OverNdf(0),
100 0 : fChi2MatchTrigger(0),
101 0 : fLabel(-1),
102 0 : fMuonClusterMap(0),
103 0 : fHitsPatternInTrigCh(0),
104 0 : fHitsPatternInTrigChTrk(0),
105 0 : fLoCircuit(0),
106 0 : fIsConnected(kFALSE),
107 0 : fESDEvent(0)
108 0 : {
109 :
110 : // Constructor with kinematics
111 :
112 0 : SetPxPyPz(px, py, pz);
113 :
114 0 : fProdVertexXYZ[0]=0;
115 0 : fProdVertexXYZ[1]=0;
116 0 : fProdVertexXYZ[2]=0;
117 :
118 0 : }
119 :
120 : //====================================================================================================================================================
121 :
122 : AliESDMuonGlobalTrack::AliESDMuonGlobalTrack(const AliESDMuonGlobalTrack& muonTrack):
123 0 : AliVParticle(muonTrack),
124 0 : fCharge(muonTrack.fCharge),
125 0 : fMatchTrigger(muonTrack.fMatchTrigger),
126 0 : fNMFTClusters(muonTrack.fNMFTClusters),
127 0 : fNWrongMFTClustersMC(muonTrack.fNWrongMFTClustersMC),
128 0 : fMFTClusterPattern(muonTrack.fMFTClusterPattern),
129 0 : fPx(muonTrack.fPx),
130 0 : fPy(muonTrack.fPy),
131 0 : fPz(muonTrack.fPz),
132 0 : fPt(muonTrack.fPt),
133 0 : fP(muonTrack.fP),
134 0 : fEta(muonTrack.fEta),
135 0 : fRapidity(muonTrack.fRapidity),
136 0 : fFirstTrackingPointX(muonTrack.fFirstTrackingPointX),
137 0 : fFirstTrackingPointY(muonTrack.fFirstTrackingPointY),
138 0 : fFirstTrackingPointZ(muonTrack.fFirstTrackingPointZ),
139 0 : fXAtVertex(muonTrack.fXAtVertex),
140 0 : fYAtVertex(muonTrack.fYAtVertex),
141 0 : fRAtAbsorberEnd(muonTrack.fRAtAbsorberEnd),
142 0 : fCovariances(0),
143 0 : fChi2OverNdf(muonTrack.fChi2OverNdf),
144 0 : fChi2MatchTrigger(muonTrack.fChi2MatchTrigger),
145 0 : fLabel(muonTrack.fLabel),
146 0 : fMuonClusterMap(muonTrack.fMuonClusterMap),
147 0 : fHitsPatternInTrigCh(muonTrack.fHitsPatternInTrigCh),
148 0 : fHitsPatternInTrigChTrk(muonTrack.fHitsPatternInTrigChTrk),
149 0 : fLoCircuit(muonTrack.fLoCircuit),
150 0 : fIsConnected(muonTrack.fIsConnected),
151 0 : fESDEvent(muonTrack.fESDEvent)
152 0 : {
153 :
154 : // Copy constructor
155 :
156 0 : fProdVertexXYZ[0]=muonTrack.fProdVertexXYZ[0];
157 0 : fProdVertexXYZ[1]=muonTrack.fProdVertexXYZ[1];
158 0 : fProdVertexXYZ[2]=muonTrack.fProdVertexXYZ[2];
159 :
160 0 : if (muonTrack.fCovariances) fCovariances = new TMatrixD(*(muonTrack.fCovariances));
161 :
162 0 : }
163 :
164 : //====================================================================================================================================================
165 :
166 : AliESDMuonGlobalTrack& AliESDMuonGlobalTrack::operator=(const AliESDMuonGlobalTrack& muonTrack) {
167 :
168 : // Assignment operator
169 :
170 0 : if (this == &muonTrack) return *this;
171 :
172 : // Base class assignement
173 0 : AliVParticle::operator=(muonTrack);
174 :
175 0 : fCharge = muonTrack.fCharge;
176 0 : fMatchTrigger = muonTrack.fMatchTrigger;
177 0 : fNMFTClusters = muonTrack.fNMFTClusters;
178 0 : fNWrongMFTClustersMC = muonTrack.fNWrongMFTClustersMC;
179 0 : fMFTClusterPattern = muonTrack.fMFTClusterPattern;
180 0 : fPx = muonTrack.fPx;
181 0 : fPy = muonTrack.fPy;
182 0 : fPz = muonTrack.fPz;
183 0 : fPt = muonTrack.fPt;
184 0 : fP = muonTrack.fP;
185 0 : fEta = muonTrack.fEta;
186 0 : fRapidity = muonTrack.fRapidity;
187 0 : fFirstTrackingPointX = muonTrack.fFirstTrackingPointX;
188 0 : fFirstTrackingPointY = muonTrack.fFirstTrackingPointY;
189 0 : fFirstTrackingPointZ = muonTrack.fFirstTrackingPointZ;
190 0 : fXAtVertex = muonTrack.fXAtVertex;
191 0 : fYAtVertex = muonTrack.fYAtVertex;
192 0 : fRAtAbsorberEnd = muonTrack.fRAtAbsorberEnd;
193 0 : fChi2OverNdf = muonTrack.fChi2OverNdf;
194 0 : fChi2MatchTrigger = muonTrack.fChi2MatchTrigger;
195 0 : fLabel = muonTrack.fLabel;
196 0 : fMuonClusterMap = muonTrack.fMuonClusterMap;
197 0 : fHitsPatternInTrigCh = muonTrack.fHitsPatternInTrigCh;
198 0 : fHitsPatternInTrigChTrk = muonTrack.fHitsPatternInTrigChTrk;
199 0 : fLoCircuit = muonTrack.fLoCircuit;
200 0 : fIsConnected = muonTrack.fIsConnected;
201 0 : fESDEvent = muonTrack.fESDEvent;
202 :
203 0 : fProdVertexXYZ[0]=muonTrack.fProdVertexXYZ[0];
204 0 : fProdVertexXYZ[1]=muonTrack.fProdVertexXYZ[1];
205 0 : fProdVertexXYZ[2]=muonTrack.fProdVertexXYZ[2];
206 :
207 0 : if (muonTrack.fCovariances) {
208 0 : if (fCovariances) *fCovariances = *(muonTrack.fCovariances);
209 0 : else fCovariances = new TMatrixD(*(muonTrack.fCovariances));
210 : }
211 : else {
212 0 : delete fCovariances;
213 0 : fCovariances = 0x0;
214 : }
215 :
216 0 : return *this;
217 :
218 0 : }
219 :
220 : //====================================================================================================================================================
221 :
222 : void AliESDMuonGlobalTrack::Copy(TObject &obj) const {
223 :
224 : // This overwrites the virtual TObject::Copy()
225 : // to allow run time copying without casting
226 : // in AliESDEvent
227 :
228 0 : if (this==&obj) return;
229 0 : AliESDMuonGlobalTrack *robj = dynamic_cast<AliESDMuonGlobalTrack*>(&obj);
230 0 : if (!robj) return; // not an AliESDMuonGlobalTrack
231 0 : *robj = *this;
232 :
233 0 : }
234 :
235 : //====================================================================================================================================================
236 :
237 : void AliESDMuonGlobalTrack::SetPxPyPz(Double_t px, Double_t py, Double_t pz) {
238 :
239 0 : Double_t mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
240 0 : Double_t eMu = TMath::Sqrt(mMu*mMu + px*px + py*py + pz*pz);
241 :
242 0 : TLorentzVector kinem(px, py, pz, eMu);
243 :
244 0 : fPx = kinem.Px();
245 0 : fPy = kinem.Py();
246 0 : fPz = kinem.Pz();
247 0 : fP = kinem.P();
248 0 : fPt = kinem.Pt();
249 0 : fEta = kinem.Eta();
250 0 : fRapidity = kinem.Rapidity();
251 :
252 0 : }
253 :
254 : //====================================================================================================================================================
255 :
256 : const TMatrixD& AliESDMuonGlobalTrack::GetCovariances() const {
257 :
258 : // Return the covariance matrix (create it before if needed)
259 :
260 0 : if (!fCovariances) {
261 0 : fCovariances = new TMatrixD(5,5);
262 0 : fCovariances->Zero();
263 0 : }
264 0 : return *fCovariances;
265 :
266 0 : }
267 :
268 : //====================================================================================================================================================
269 :
270 : void AliESDMuonGlobalTrack::SetCovariances(const TMatrixD& covariances) {
271 :
272 : // Set the covariance matrix
273 :
274 0 : if (fCovariances) *fCovariances = covariances;
275 0 : else fCovariances = new TMatrixD(covariances);
276 :
277 0 : }
278 :
279 : //====================================================================================================================================================
|