1 /**************************************************************************
\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\r
7 * Permission to use, copy, modify and distribute this software and its *
\r
8 * documentation strictly for non-commercial purposes is hereby granted *
\r
9 * without fee, provided that the above copyright notice appears in all *
\r
10 * copies and that both the copyright notice and this permission notice *
\r
11 * appear in the supporting documentation. The authors make no claims *
\r
12 * about the suitability of this software for any purpose. It is *
\r
13 * provided "as is" without express or implied warranty. *
\r
14 **************************************************************************/
\r
16 // Add the muon tracks to the generic AOD track branch during the
\r
17 // filtering of the ESD - R. Arnaldi 5/5/08
\r
22 #include "AliAnalysisTaskESDMuonFilter.h"
\r
23 #include "AliAnalysisManager.h"
\r
24 #include "AliESDEvent.h"
\r
25 #include "AliAODEvent.h"
\r
26 #include "AliESDInputHandler.h"
\r
27 #include "AliAODHandler.h"
\r
28 #include "AliAnalysisFilter.h"
\r
29 #include "AliESDtrack.h"
\r
30 #include "AliESDMuonTrack.h"
\r
31 #include "AliESDVertex.h"
\r
32 #include "AliMultiplicity.h"
\r
35 ClassImp(AliAnalysisTaskESDMuonFilter)
\r
37 ////////////////////////////////////////////////////////////////////////
\r
39 AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter():
\r
40 AliAnalysisTaskSE(),
\r
43 // Default constructor
\r
46 AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter(const char* name):
\r
47 AliAnalysisTaskSE(name),
\r
53 void AliAnalysisTaskESDMuonFilter::UserCreateOutputObjects()
\r
55 // Create the output container
\r
56 OutputTree()->GetUserInfo()->Add(fTrackFilter);
\r
59 void AliAnalysisTaskESDMuonFilter::Init()
\r
62 if (fDebug > 1) AliInfo("Init() \n");
\r
66 void AliAnalysisTaskESDMuonFilter::UserExec(Option_t */*option*/)
\r
68 // Execute analysis for current event
\r
69 Long64_t ientry = Entry();
\r
70 printf("Muon Filter: Analysing event # %5d\n", (Int_t) ientry);
\r
75 void AliAnalysisTaskESDMuonFilter::ConvertESDtoAOD()
\r
77 // ESD Muon Filter analysis task executed for each event
\r
78 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
\r
80 // Define arrays for muons
\r
85 AliAODHeader* header = AODEvent()->GetHeader();
\r
86 AliAODTrack *aodTrack = 0x0;
\r
88 // Access to the AOD container of tracks
\r
89 TClonesArray &tracks = *(AODEvent()->GetTracks());
\r
90 Int_t jTracks = header->GetRefMultiplicity();
\r
92 // Read primary vertex from AOD event
\r
93 AliAODVertex * primary = AODEvent()->GetPrimaryVertex();
\r
96 // Loop on muon tracks to fill the AOD track branch
\r
97 Int_t nMuTracks = esd->GetNumberOfMuonTracks();
\r
98 printf("Number of Muon Tracks=%d\n",nMuTracks);
\r
100 // Update number of positive and negative tracks from AOD event (M.G.)
\r
101 Int_t nPosTracks = header->GetRefMultiplicityPos();
\r
102 Int_t nNegTracks = header->GetRefMultiplicityNeg();
\r
104 for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) {
\r
106 AliESDMuonTrack *esdMuTrack = esd->GetMuonTrack(nMuTrack);
\r
108 p[0] = esdMuTrack->Px();
\r
109 p[1] = esdMuTrack->Py();
\r
110 p[2] = esdMuTrack->Pz();
\r
111 pos[0] = primary->GetX();
\r
112 pos[1] = primary->GetY();
\r
113 pos[2] = primary->GetZ();
\r
115 // has to be changed once the muon pid is provided by the ESD
\r
116 for (Int_t i = 0; i < 10; pid[i++] = 0.); pid[AliAODTrack::kMuon]=1.;
\r
117 primary->AddDaughter(aodTrack =
\r
118 new(tracks[jTracks++]) AliAODTrack(0, // no ID provided
\r
119 0, // no label provided
\r
124 NULL, // no covariance matrix provided
\r
125 (Short_t)-99, // no charge provided
\r
126 0, // no ITSClusterMap
\r
129 kTRUE, // check if this is right
\r
130 kTRUE, // not used for vertex fit
\r
131 AliAODTrack::kPrimary)
\r
133 if (esdMuTrack->Charge() > 0) nPosTracks++;
\r
136 aodTrack->ConvertAliPIDtoAODPID();
\r
137 aodTrack->SetHitsPatternInTrigCh(esdMuTrack->GetHitsPatternInTrigCh());
\r
138 Int_t track2Trigger = esdMuTrack->GetMatchTrigger();
\r
139 aodTrack->SetMatchTrigger(track2Trigger);
\r
140 if (track2Trigger)
\r
141 aodTrack->SetChi2MatchTrigger(esdMuTrack->GetChi2MatchTrigger());
\r
143 aodTrack->SetChi2MatchTrigger(0.);
\r
146 header->SetRefMultiplicity(jTracks);
\r
147 header->SetRefMultiplicityPos(nPosTracks);
\r
148 header->SetRefMultiplicityNeg(nNegTracks);
\r
153 void AliAnalysisTaskESDMuonFilter::Terminate(Option_t */*option*/)
\r
155 // Terminate analysis
\r
157 if (fDebug > 1) printf("AnalysisESDfilter: Terminate() \n");
\r