1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //====================================================================================================================================================
18 // ESD description of an ALICE muon forward track, combining the information of the Muon Spectrometer and the Muon Forward Tracker
20 // Contact author: antonio.uras@cern.ch
22 //====================================================================================================================================================
24 #include "AliESDMuonGlobalTrack.h"
25 #include "AliESDEvent.h"
27 #include "TClonesArray.h"
28 #include "TLorentzVector.h"
30 #include "TDatabasePDG.h"
32 ClassImp(AliESDMuonGlobalTrack)
34 //====================================================================================================================================================
36 AliESDMuonGlobalTrack::AliESDMuonGlobalTrack():
41 fNWrongMFTClustersMC(-1),
42 fMFTClusterPattern(0),
50 fFirstTrackingPointX(0),
51 fFirstTrackingPointY(0),
52 fFirstTrackingPointZ(0),
61 fHitsPatternInTrigCh(0),
62 fHitsPatternInTrigChTrk(0),
68 // Default constructor
76 //====================================================================================================================================================
78 AliESDMuonGlobalTrack::AliESDMuonGlobalTrack(Double_t px, Double_t py, Double_t pz):
83 fNWrongMFTClustersMC(-1),
84 fMFTClusterPattern(0),
92 fFirstTrackingPointX(0),
93 fFirstTrackingPointY(0),
94 fFirstTrackingPointZ(0),
100 fChi2MatchTrigger(0),
103 fHitsPatternInTrigCh(0),
104 fHitsPatternInTrigChTrk(0),
106 fIsConnected(kFALSE),
110 // Constructor with kinematics
112 SetPxPyPz(px, py, pz);
120 //====================================================================================================================================================
122 AliESDMuonGlobalTrack::AliESDMuonGlobalTrack(const AliESDMuonGlobalTrack& muonTrack):
123 AliVParticle(muonTrack),
124 fCharge(muonTrack.fCharge),
125 fMatchTrigger(muonTrack.fMatchTrigger),
126 fNMFTClusters(muonTrack.fNMFTClusters),
127 fNWrongMFTClustersMC(muonTrack.fNWrongMFTClustersMC),
128 fMFTClusterPattern(muonTrack.fMFTClusterPattern),
134 fEta(muonTrack.fEta),
135 fRapidity(muonTrack.fRapidity),
136 fFirstTrackingPointX(muonTrack.fFirstTrackingPointX),
137 fFirstTrackingPointY(muonTrack.fFirstTrackingPointY),
138 fFirstTrackingPointZ(muonTrack.fFirstTrackingPointZ),
139 fXAtVertex(muonTrack.fXAtVertex),
140 fYAtVertex(muonTrack.fYAtVertex),
141 fRAtAbsorberEnd(muonTrack.fRAtAbsorberEnd),
143 fChi2OverNdf(muonTrack.fChi2OverNdf),
144 fChi2MatchTrigger(muonTrack.fChi2MatchTrigger),
145 fLabel(muonTrack.fLabel),
146 fMuonClusterMap(muonTrack.fMuonClusterMap),
147 fHitsPatternInTrigCh(muonTrack.fHitsPatternInTrigCh),
148 fHitsPatternInTrigChTrk(muonTrack.fHitsPatternInTrigChTrk),
149 fLoCircuit(muonTrack.fLoCircuit),
150 fIsConnected(muonTrack.fIsConnected),
151 fESDEvent(muonTrack.fESDEvent)
156 fProdVertexXYZ[0]=muonTrack.fProdVertexXYZ[0];
157 fProdVertexXYZ[1]=muonTrack.fProdVertexXYZ[1];
158 fProdVertexXYZ[2]=muonTrack.fProdVertexXYZ[2];
160 if (muonTrack.fCovariances) fCovariances = new TMatrixD(*(muonTrack.fCovariances));
164 //====================================================================================================================================================
166 AliESDMuonGlobalTrack& AliESDMuonGlobalTrack::operator=(const AliESDMuonGlobalTrack& muonTrack) {
168 // Assignment operator
170 if (this == &muonTrack) return *this;
172 // Base class assignement
173 AliVParticle::operator=(muonTrack);
175 fCharge = muonTrack.fCharge;
176 fMatchTrigger = muonTrack.fMatchTrigger;
177 fNMFTClusters = muonTrack.fNMFTClusters;
178 fNWrongMFTClustersMC = muonTrack.fNWrongMFTClustersMC;
179 fMFTClusterPattern = muonTrack.fMFTClusterPattern;
185 fEta = muonTrack.fEta;
186 fRapidity = muonTrack.fRapidity;
187 fFirstTrackingPointX = muonTrack.fFirstTrackingPointX;
188 fFirstTrackingPointY = muonTrack.fFirstTrackingPointY;
189 fFirstTrackingPointZ = muonTrack.fFirstTrackingPointZ;
190 fXAtVertex = muonTrack.fXAtVertex;
191 fYAtVertex = muonTrack.fYAtVertex;
192 fRAtAbsorberEnd = muonTrack.fRAtAbsorberEnd;
193 fChi2OverNdf = muonTrack.fChi2OverNdf;
194 fChi2MatchTrigger = muonTrack.fChi2MatchTrigger;
195 fLabel = muonTrack.fLabel;
196 fMuonClusterMap = muonTrack.fMuonClusterMap;
197 fHitsPatternInTrigCh = muonTrack.fHitsPatternInTrigCh;
198 fHitsPatternInTrigChTrk = muonTrack.fHitsPatternInTrigChTrk;
199 fLoCircuit = muonTrack.fLoCircuit;
200 fIsConnected = muonTrack.fIsConnected;
201 fESDEvent = muonTrack.fESDEvent;
203 fProdVertexXYZ[0]=muonTrack.fProdVertexXYZ[0];
204 fProdVertexXYZ[1]=muonTrack.fProdVertexXYZ[1];
205 fProdVertexXYZ[2]=muonTrack.fProdVertexXYZ[2];
207 if (muonTrack.fCovariances) {
208 if (fCovariances) *fCovariances = *(muonTrack.fCovariances);
209 else fCovariances = new TMatrixD(*(muonTrack.fCovariances));
220 //====================================================================================================================================================
222 void AliESDMuonGlobalTrack::Copy(TObject &obj) const {
224 // This overwrites the virtual TObject::Copy()
225 // to allow run time copying without casting
228 if (this==&obj) return;
229 AliESDMuonGlobalTrack *robj = dynamic_cast<AliESDMuonGlobalTrack*>(&obj);
230 if (!robj) return; // not an AliESDMuonGlobalTrack
235 //====================================================================================================================================================
237 void AliESDMuonGlobalTrack::SetPxPyPz(Double_t px, Double_t py, Double_t pz) {
239 Double_t mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
240 Double_t eMu = TMath::Sqrt(mMu*mMu + px*px + py*py + pz*pz);
242 TLorentzVector kinem(px, py, pz, eMu);
250 fRapidity = kinem.Rapidity();
254 //====================================================================================================================================================
256 const TMatrixD& AliESDMuonGlobalTrack::GetCovariances() const {
258 // Return the covariance matrix (create it before if needed)
261 fCovariances = new TMatrixD(5,5);
262 fCovariances->Zero();
264 return *fCovariances;
268 //====================================================================================================================================================
270 void AliESDMuonGlobalTrack::SetCovariances(const TMatrixD& covariances) {
272 // Set the covariance matrix
274 if (fCovariances) *fCovariances = covariances;
275 else fCovariances = new TMatrixD(covariances);
279 //====================================================================================================================================================