]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MFT/AliMuonForwardTrackPair.cxx
monitor dQdl (PID) at TRD entrance
[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(),
41 fMuonForwardTracks(0)
42{
43
44 // default constructor
45
46 fMuonForwardTracks = new TClonesArray("AliMuonForwardTrack", 2);
47
48}
49
50//====================================================================================================================================================
51
52AliMuonForwardTrackPair::AliMuonForwardTrackPair(AliMuonForwardTrack *track0, AliMuonForwardTrack *track1):
53 TObject(),
54 fMuonForwardTracks(0)
55{
56
57 fMuonForwardTracks = new TClonesArray("AliMuonForwardTrack", 2);
58
59 new ((*fMuonForwardTracks)[0]) AliMuonForwardTrack(*track0);
60 new ((*fMuonForwardTracks)[1]) AliMuonForwardTrack(*track1);
61
62}
63
64//====================================================================================================================================================
65
66AliMuonForwardTrackPair::AliMuonForwardTrackPair(const AliMuonForwardTrackPair& trackPair):
67 TObject(trackPair),
68 fMuonForwardTracks(trackPair.fMuonForwardTracks)
69{
70
71 // copy constructor
72
73}
74
75//====================================================================================================================================================
76
77AliMuonForwardTrackPair& AliMuonForwardTrackPair::operator=(const AliMuonForwardTrackPair& trackPair) {
78
79 // Asignment operator
80
81 // check assignement to self
82 if (this == &trackPair) return *this;
83
84 // base class assignement
85 AliMuonForwardTrackPair::operator=(trackPair);
86
87 // clear memory
88 Clear();
89
90 fMuonForwardTracks = trackPair.fMuonForwardTracks;
91
92 return *this;
93
94}
95
96//====================================================================================================================================================
97
98void AliMuonForwardTrackPair::SetTrack(Int_t iTrack, AliMuonForwardTrack *track) {
99
100 if (iTrack==0 || iTrack==1) {
101 new ((*fMuonForwardTracks)[iTrack]) AliMuonForwardTrack(*track);
102 }
103
104}
105
106//====================================================================================================================================================
107
108Double_t AliMuonForwardTrackPair::GetWeightedOffset(Double_t x, Double_t y, Double_t z) {
109
110 Double_t weightedOffset[2]={0};
111
112 weightedOffset[0] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetWeightedOffset(x, y, z);
113 weightedOffset[1] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetWeightedOffset(x, y, z);
114
115 Double_t weightedOffsetDimuon = TMath::Sqrt(0.5 * (weightedOffset[0]*weightedOffset[0] + weightedOffset[1]*weightedOffset[1]));
116
117 return weightedOffsetDimuon;
118
119}
120
121//====================================================================================================================================================
122
123Double_t AliMuonForwardTrackPair::GetMass(Double_t z, Int_t nClusters) {
124
125 Int_t idCluster[2] = {0};
126 if (nClusters>0) {
127 idCluster[0] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetNMFTClusters() - nClusters;
128 idCluster[1] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetNMFTClusters() - nClusters;
129 }
130 if (idCluster[0]<0) idCluster[0] = 0;
131 if (idCluster[1]<0) idCluster[1] = 0;
132
133 Double_t momentum[2] = {0};
134
135 AliMUONTrackParam *param0 = ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetTrackParamAtMFTCluster(idCluster[0]);
136 AliMUONTrackParam *param1 = ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetTrackParamAtMFTCluster(idCluster[1]);
137
138 if (TMath::Abs(z)<1e6) {
139 AliMUONTrackExtrap::ExtrapToZCov(param0, z);
140 AliMUONTrackExtrap::ExtrapToZCov(param1, z);
141 }
142
143 momentum[0] = (param0->P());
144 momentum[1] = (param1->P());
145
146 Double_t mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
147
148 TLorentzVector dimu;
149
150 dimu.SetE(TMath::Sqrt(mMu*mMu + momentum[0]*momentum[0]) + TMath::Sqrt(mMu*mMu + momentum[1]*momentum[1]));
151
152 dimu.SetPx(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetTrackParamAtMFTCluster(idCluster[0])->Px()+
153 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetTrackParamAtMFTCluster(idCluster[1])->Px());
154
155 dimu.SetPy(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetTrackParamAtMFTCluster(idCluster[0])->Py()+
156 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetTrackParamAtMFTCluster(idCluster[1])->Py());
157
158 dimu.SetPz(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetTrackParamAtMFTCluster(idCluster[0])->Pz()+
159 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetTrackParamAtMFTCluster(idCluster[1])->Pz());
160
161 return dimu.M();
162
163}
164
165//====================================================================================================================================================
166
167Double_t AliMuonForwardTrackPair::GetMassWithoutMFT(Double_t x, Double_t y, Double_t z, Int_t nClusters) {
168
169 Int_t idCluster[2] = {0};
170 if (nClusters>0) {
171 idCluster[0] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetNMUONClusters() - nClusters;
172 idCluster[1] = ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetNMUONClusters() - nClusters;
173 }
174 if (idCluster[0]<0) idCluster[0] = 0;
175 if (idCluster[1]<0) idCluster[1] = 0;
176
177 AliMUONTrackParam *param0 = ((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetTrackParamAtMUONCluster(idCluster[0]);
178 AliMUONTrackParam *param1 = ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetTrackParamAtMUONCluster(idCluster[1]);
179
180 AliMUONTrackExtrap::ExtrapToVertex(param0, x, y, z, 0., 0.); // this should reproduce what is done in AliMUONESDInterface::MUONToESD(...)
181 AliMUONTrackExtrap::ExtrapToVertex(param1, x, y, z, 0., 0.); // this should reproduce what is done in AliMUONESDInterface::MUONToESD(...)
182
183 Double_t momentum[2] = {0};
184
185 momentum[0] = param0->P();
186 momentum[1] = param1->P();
187
188 Double_t mMu = TDatabasePDG::Instance()->GetParticle("mu-")->Mass();
189
190 TLorentzVector dimu;
191
192 dimu.SetE(TMath::Sqrt(mMu*mMu + momentum[0]*momentum[0]) + TMath::Sqrt(mMu*mMu + momentum[1]*momentum[1]));
193
194 dimu.SetPx(param0->Px() + param1->Px());
195 dimu.SetPy(param0->Py() + param1->Py());
196 dimu.SetPz(param0->Pz() + param1->Pz());
197
198 return dimu.M();
199
200}
201
202//====================================================================================================================================================
203
204Double_t AliMuonForwardTrackPair::GetMassMC() {
205
206 TLorentzVector dimu;
207
208 dimu.SetE(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Energy() +
209 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Energy());
210
211 dimu.SetPx(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Px() +
212 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Px());
213
214 dimu.SetPy(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Py() +
215 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Py());
216
217 dimu.SetPz(((AliMuonForwardTrack*) fMuonForwardTracks->At(0))->GetMCTrackRef()->Pz() +
218 ((AliMuonForwardTrack*) fMuonForwardTracks->At(1))->GetMCTrackRef()->Pz());
219
220 return dimu.M();
221
222}
223
224//====================================================================================================================================================
225
226
227
228
229
230
231
232