]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MFT/AliMuonForwardTrackPair.cxx
Coverity fixes
[u/mrichter/AliRoot.git] / MFT / AliMuonForwardTrackPair.cxx
CommitLineData
820b4d9e 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// Description of an ALICE muon forward track pair, i.e. a pair of AliMuonForwardTrack objects
19//
20// Contact author: antonio.uras@cern.ch
21//
22//====================================================================================================================================================
23
24#include "AliLog.h"
25#include "AliMUONTrackParam.h"
26#include "TParticle.h"
27#include "AliMuonForwardTrack.h"
28#include "AliMUONTrackExtrap.h"
29#include "TClonesArray.h"
30#include "TDatabasePDG.h"
31#include "TLorentzVector.h"
32#include "TRandom.h"
33#include "AliMuonForwardTrackPair.h"
34
35ClassImp(AliMuonForwardTrackPair)
36
37//====================================================================================================================================================
38
39AliMuonForwardTrackPair::AliMuonForwardTrackPair():
40 TObject(),
aeb9584d 41 fMuonForwardTracks(0),
42 fKinemMC(0,0,0,0)
820b4d9e 43{
44
45 // default constructor
46
47 fMuonForwardTracks = new TClonesArray("AliMuonForwardTrack", 2);
48
49}
50
51//====================================================================================================================================================
52
53AliMuonForwardTrackPair::AliMuonForwardTrackPair(AliMuonForwardTrack *track0, AliMuonForwardTrack *track1):
54 TObject(),
aeb9584d 55 fMuonForwardTracks(0),
56 fKinemMC(0,0,0,0)
820b4d9e 57{
58
59 fMuonForwardTracks = new TClonesArray("AliMuonForwardTrack", 2);
60
61 new ((*fMuonForwardTracks)[0]) AliMuonForwardTrack(*track0);
62 new ((*fMuonForwardTracks)[1]) AliMuonForwardTrack(*track1);
63
aeb9584d 64 SetKinemMC();
65
820b4d9e 66}
67
68//====================================================================================================================================================
69
70AliMuonForwardTrackPair::AliMuonForwardTrackPair(const AliMuonForwardTrackPair& trackPair):
71 TObject(trackPair),
aeb9584d 72 fMuonForwardTracks(trackPair.fMuonForwardTracks),
73 fKinemMC(trackPair.fKinemMC)
820b4d9e 74{
75
76 // copy constructor
77
78}
79
80//====================================================================================================================================================
81
82AliMuonForwardTrackPair& AliMuonForwardTrackPair::operator=(const AliMuonForwardTrackPair& trackPair) {
83
84 // Asignment operator
85
86 // check assignement to self
87 if (this == &trackPair) return *this;
88
89 // base class assignement
90 AliMuonForwardTrackPair::operator=(trackPair);
91
92 // clear memory
93 Clear();
94
95 fMuonForwardTracks = trackPair.fMuonForwardTracks;
96
97 return *this;
98
99}
100
101//====================================================================================================================================================
102
103void AliMuonForwardTrackPair::SetTrack(Int_t iTrack, AliMuonForwardTrack *track) {
104
105 if (iTrack==0 || iTrack==1) {
106 new ((*fMuonForwardTracks)[iTrack]) AliMuonForwardTrack(*track);
107 }
108
109}
110
111//====================================================================================================================================================
112
113Double_t AliMuonForwardTrackPair::GetWeightedOffset(Double_t x, Double_t y, Double_t z) {
114
115 Double_t weightedOffset[2]={0};
116
117 weightedOffset[0] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetWeightedOffset(x, y, z);
118 weightedOffset[1] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetWeightedOffset(x, y, z);
119
120 Double_t weightedOffsetDimuon = TMath::Sqrt(0.5 * (weightedOffset[0]*weightedOffset[0] + weightedOffset[1]*weightedOffset[1]));
121
122 return weightedOffsetDimuon;
123
124}
125
126//====================================================================================================================================================
127
128Double_t AliMuonForwardTrackPair::GetMass(Double_t z, Int_t nClusters) {
129
130 Int_t idCluster[2] = {0};
131 if (nClusters>0) {
132 idCluster[0] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetNMFTClusters() - nClusters;
133 idCluster[1] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetNMFTClusters() - nClusters;
134 }
135 if (idCluster[0]<0) idCluster[0] = 0;
136 if (idCluster[1]<0) idCluster[1] = 0;
137
138 Double_t momentum[2] = {0};
139
140 AliMUONTrackParam *param0 = ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetTrackParamAtMFTCluster(idCluster[0]);
141 AliMUONTrackParam *param1 = ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetTrackParamAtMFTCluster(idCluster[1]);
142
aeb9584d 143 AliDebug(2, Form("MFT before extrap: 1st muon = (%f, %f, %f) 2nd muon = (%f, %f, %f)",
144 param0->Px(), param0->Py(), param0->Pz(),
145 param1->Px(), param1->Py(), param1->Pz()));
146
820b4d9e 147 if (TMath::Abs(z)<1e6) {
aeb9584d 148 AliDebug(2, Form("Extrapolating 1st muon from z = %f to z = %f", param0->GetZ(), z));
820b4d9e 149 AliMUONTrackExtrap::ExtrapToZCov(param0, z);
aeb9584d 150 AliDebug(2, Form("Extrapolating 2nd muon from z = %f to z = %f", param1->GetZ(), z));
820b4d9e 151 AliMUONTrackExtrap::ExtrapToZCov(param1, z);
152 }
153
aeb9584d 154 AliDebug(2, Form("MFT after extrap: 1st muon = (%f, %f, %f) 2nd muon = (%f, %f, %f)",
155 param0->Px(), param0->Py(), param0->Pz(),
156 param1->Px(), param1->Py(), param1->Pz()));
157
820b4d9e 158 momentum[0] = (param0->P());
159 momentum[1] = (param1->P());
160
161 Double_t mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
162
163 TLorentzVector dimu;
164
165 dimu.SetE(TMath::Sqrt(mMu*mMu + momentum[0]*momentum[0]) + TMath::Sqrt(mMu*mMu + momentum[1]*momentum[1]));
166
aeb9584d 167 dimu.SetPx(param0->Px() + param1->Px());
168 dimu.SetPy(param0->Py() + param1->Py());
169 dimu.SetPz(param0->Pz() + param1->Pz());
820b4d9e 170
171 return dimu.M();
172
173}
174
175//====================================================================================================================================================
176
177Double_t AliMuonForwardTrackPair::GetMassWithoutMFT(Double_t x, Double_t y, Double_t z, Int_t nClusters) {
178
179 Int_t idCluster[2] = {0};
180 if (nClusters>0) {
181 idCluster[0] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetNMUONClusters() - nClusters;
182 idCluster[1] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetNMUONClusters() - nClusters;
183 }
184 if (idCluster[0]<0) idCluster[0] = 0;
185 if (idCluster[1]<0) idCluster[1] = 0;
186
187 AliMUONTrackParam *param0 = ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetTrackParamAtMUONCluster(idCluster[0]);
188 AliMUONTrackParam *param1 = ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetTrackParamAtMUONCluster(idCluster[1]);
189
aeb9584d 190 AliDebug(2, Form("MUON before extrap: 1st muon = (%f, %f, %f) 2nd muon = (%f, %f, %f)",
191 param0->Px(), param0->Py(), param0->Pz(),
192 param1->Px(), param1->Py(), param1->Pz()));
193
194 AliDebug(2, Form("Extrapolating 1st muon from z = %f to z = %f", param0->GetZ(), z));
820b4d9e 195 AliMUONTrackExtrap::ExtrapToVertex(param0, x, y, z, 0., 0.); // this should reproduce what is done in AliMUONESDInterface::MUONToESD(...)
aeb9584d 196 AliDebug(2, Form("Extrapolating 2nd muon from z = %f to z = %f", param1->GetZ(), z));
820b4d9e 197 AliMUONTrackExtrap::ExtrapToVertex(param1, x, y, z, 0., 0.); // this should reproduce what is done in AliMUONESDInterface::MUONToESD(...)
198
aeb9584d 199 AliDebug(2, Form("MUON after extrap: 1st muon = (%f, %f, %f) 2nd muon = (%f, %f, %f)",
200 param0->Px(), param0->Py(), param0->Pz(),
201 param1->Px(), param1->Py(), param1->Pz()));
202
820b4d9e 203 Double_t momentum[2] = {0};
204
205 momentum[0] = param0->P();
206 momentum[1] = param1->P();
207
208 Double_t mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
209
210 TLorentzVector dimu;
211
212 dimu.SetE(TMath::Sqrt(mMu*mMu + momentum[0]*momentum[0]) + TMath::Sqrt(mMu*mMu + momentum[1]*momentum[1]));
213
214 dimu.SetPx(param0->Px() + param1->Px());
215 dimu.SetPy(param0->Py() + param1->Py());
216 dimu.SetPz(param0->Pz() + param1->Pz());
217
218 return dimu.M();
219
220}
221
222//====================================================================================================================================================
223
aeb9584d 224void AliMuonForwardTrackPair::SetKinemMC() {
820b4d9e 225
aeb9584d 226 AliDebug(2, Form("MC: 1st muon = (%f, %f, %f) 2nd muon = (%f, %f, %f)",
227 ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Px(),
228 ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Py(),
229 ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Pz(),
230 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Px(),
231 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Py(),
232 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Pz()));
820b4d9e 233
aeb9584d 234 fKinemMC.SetE(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Energy() +
235 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Energy());
236
237 fKinemMC.SetPx(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Px() +
238 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Px());
239
240 fKinemMC.SetPy(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Py() +
241 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Py());
242
243 fKinemMC.SetPz(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Pz() +
244 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Pz());
820b4d9e 245
246}
247
248//====================================================================================================================================================
249
aeb9584d 250Bool_t AliMuonForwardTrackPair::IsResonance() {
251
252 Bool_t result = kFALSE;
820b4d9e 253
aeb9584d 254 Int_t labelMC[2] = {0};
255 Int_t codePDG[2] = {0};
256
257 for (Int_t iTrack=0; iTrack<2; iTrack++) {
258 labelMC[iTrack] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(iTrack))->GetParentMCLabel(0);
259 codePDG[iTrack] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(iTrack))->GetParentPDGCode(0);
260 }
820b4d9e 261
aeb9584d 262 AliDebug(1, Form("Muons' mothers: (%d, %d)", labelMC[0], labelMC[1]));
820b4d9e 263
aeb9584d 264 if (labelMC[0]==labelMC[1] && codePDG[0]==codePDG[1] && (codePDG[0]== 113 ||
265 codePDG[0]== 223 ||
266 codePDG[0]== 333 ||
267 codePDG[0]== 443 ||
268 codePDG[0]==100443 ||
269 codePDG[0]== 553 ||
270 codePDG[0]==100553 ) ) result = kTRUE;
820b4d9e 271
aeb9584d 272 if (result) AliDebug(1, Form("Pair is a resonance %d", codePDG[0]));
820b4d9e 273
aeb9584d 274 return result;
820b4d9e 275
aeb9584d 276}
820b4d9e 277
aeb9584d 278//====================================================================================================================================================