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 // Add the muon tracks to the generic AOD track branch during the
17 // filtering of the ESD - R. Arnaldi 5/5/08
22 #include "AliAnalysisTaskESDMuonFilter.h"
23 #include "AliAnalysisManager.h"
24 #include "AliESDEvent.h"
25 #include "AliAODEvent.h"
26 #include "AliESDInputHandler.h"
27 #include "AliAODHandler.h"
28 #include "AliAnalysisFilter.h"
29 #include "AliESDtrack.h"
30 #include "AliESDMuonTrack.h"
31 #include "AliESDVertex.h"
32 #include "AliMultiplicity.h"
35 ClassImp(AliAnalysisTaskESDMuonFilter)
37 ////////////////////////////////////////////////////////////////////////
39 AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter():
43 // Default constructor
46 AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter(const char* name):
47 AliAnalysisTaskSE(name),
53 void AliAnalysisTaskESDMuonFilter::UserCreateOutputObjects()
55 // Create the output container
56 if (fTrackFilter) OutputTree()->GetUserInfo()->Add(fTrackFilter);
59 void AliAnalysisTaskESDMuonFilter::Init()
62 if (fDebug > 1) AliInfo("Init() \n");
66 void AliAnalysisTaskESDMuonFilter::UserExec(Option_t */*option*/)
68 // Execute analysis for current event
69 Long64_t ientry = Entry();
70 printf("Muon Filter: Analysing event # %5d\n", (Int_t) ientry);
75 void AliAnalysisTaskESDMuonFilter::ConvertESDtoAOD()
77 // ESD Muon Filter analysis task executed for each event
78 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
80 // Define arrays for muons
85 // has to be changed once the muon pid is provided by the ESD
86 for (Int_t i = 0; i < 10; pid[i++] = 0.) {}
87 pid[AliAODTrack::kMuon]=1.;
89 AliAODHeader* header = AODEvent()->GetHeader();
90 AliAODTrack *aodTrack = 0x0;
91 AliESDMuonTrack *esdMuTrack = 0x0;
93 // Access to the AOD container of tracks
94 TClonesArray &tracks = *(AODEvent()->GetTracks());
95 Int_t jTracks = header->GetRefMultiplicity();
97 // Read primary vertex from AOD event
98 AliAODVertex *primary = AODEvent()->GetPrimaryVertex();
101 // Loop on muon tracks to fill the AOD track branch
102 Int_t nMuTracks = esd->GetNumberOfMuonTracks();
103 printf("Number of Muon Tracks=%d\n",nMuTracks);
105 // Update number of positive and negative tracks from AOD event (M.G.)
106 Int_t nPosTracks = header->GetRefMultiplicityPos();
107 Int_t nNegTracks = header->GetRefMultiplicityNeg();
109 for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) {
110 esdMuTrack = esd->GetMuonTrack(nMuTrack);
112 if (!esdMuTrack->ContainTrackerData()) continue;
114 UInt_t selectInfo = 0;
117 selectInfo = fTrackFilter->IsSelected(esdMuTrack);
123 p[0] = esdMuTrack->Px();
124 p[1] = esdMuTrack->Py();
125 p[2] = esdMuTrack->Pz();
127 pos[0] = esdMuTrack->GetNonBendingCoor();
128 pos[1] = esdMuTrack->GetBendingCoor();
129 pos[2] = esdMuTrack->GetZ();
131 aodTrack = new(tracks[jTracks++]) AliAODTrack(esdMuTrack->GetUniqueID(), // ID
132 esdMuTrack->GetLabel(), // label
134 kTRUE, // cartesian coordinate system
137 0x0, // covariance matrix
138 esdMuTrack->Charge(), // charge
141 primary, // primary vertex
142 kFALSE, // used for vertex fit?
143 kFALSE, // used for primary vertex fit?
144 AliAODTrack::kPrimary,// track type
147 aodTrack->SetXYAtDCA(esdMuTrack->GetNonBendingCoorAtDCA(), esdMuTrack->GetBendingCoorAtDCA());
148 aodTrack->SetPxPyPzAtDCA(esdMuTrack->PxAtDCA(), esdMuTrack->PyAtDCA(), esdMuTrack->PzAtDCA());
149 aodTrack->ConvertAliPIDtoAODPID();
150 aodTrack->SetChi2perNDF(esdMuTrack->GetChi2() / (2.*esdMuTrack->GetNHit() - 5.));
151 aodTrack->SetChi2MatchTrigger(esdMuTrack->GetChi2MatchTrigger());
152 aodTrack->SetHitsPatternInTrigCh(esdMuTrack->GetHitsPatternInTrigCh());
153 aodTrack->SetMuonClusterMap(esdMuTrack->GetMuonClusterMap());
154 aodTrack->SetMatchTrigger(esdMuTrack->GetMatchTrigger());
156 primary->AddDaughter(aodTrack);
158 if (esdMuTrack->Charge() > 0) nPosTracks++;
162 header->SetRefMultiplicity(jTracks);
163 header->SetRefMultiplicityPos(nPosTracks);
164 header->SetRefMultiplicityNeg(nNegTracks);
167 void AliAnalysisTaskESDMuonFilter::Terminate(Option_t */*option*/)
169 // Terminate analysis
171 if (fDebug > 1) printf("AnalysisESDfilter: Terminate() \n");