]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/muon/AliAnalysisTaskESDMuonFilter.cxx
enable making of image for QA
[u/mrichter/AliRoot.git] / PWG3 / muon / AliAnalysisTaskESDMuonFilter.cxx
CommitLineData
1d1ea3ce 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// Add the muon tracks to the generic AOD track branch during the
17// filtering of the ESD - R. Arnaldi 5/5/08
aba11173 18
1d1ea3ce 19#include <TChain.h>
20#include <TFile.h>
fc3a4c45 21#include <TParticle.h>
1d1ea3ce 22
23#include "AliAnalysisTaskESDMuonFilter.h"
24#include "AliAnalysisManager.h"
25#include "AliESDEvent.h"
26#include "AliAODEvent.h"
27#include "AliESDInputHandler.h"
28#include "AliAODHandler.h"
29#include "AliAnalysisFilter.h"
30#include "AliESDtrack.h"
31#include "AliESDMuonTrack.h"
32#include "AliESDVertex.h"
33#include "AliMultiplicity.h"
34#include "AliLog.h"
fc3a4c45 35#include "AliStack.h"
36#include "AliMCEvent.h"
37#include "AliMCEventHandler.h"
38#include "AliAODMCParticle.h"
1d1ea3ce 39
40ClassImp(AliAnalysisTaskESDMuonFilter)
41
42////////////////////////////////////////////////////////////////////////
43
44AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter():
aba11173 45 AliAnalysisTaskSE(),
46 fTrackFilter(0x0)
1d1ea3ce 47{
48 // Default constructor
49}
50
51AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter(const char* name):
aba11173 52 AliAnalysisTaskSE(name),
53 fTrackFilter(0x0)
1d1ea3ce 54{
55 // Constructor
56}
57
58void AliAnalysisTaskESDMuonFilter::UserCreateOutputObjects()
59{
60 // Create the output container
aba11173 61 if (fTrackFilter) OutputTree()->GetUserInfo()->Add(fTrackFilter);
1d1ea3ce 62}
63
64void AliAnalysisTaskESDMuonFilter::Init()
65{
66 // Initialization
aba11173 67 if (fDebug > 1) AliInfo("Init() \n");
1d1ea3ce 68}
69
70
71void AliAnalysisTaskESDMuonFilter::UserExec(Option_t */*option*/)
72{
73 // Execute analysis for current event
74 Long64_t ientry = Entry();
edee4062 75 if(fDebug)printf("Muon Filter: Analysing event # %5d\n", (Int_t) ientry);
aba11173 76
1d1ea3ce 77 ConvertESDtoAOD();
78}
79
80void AliAnalysisTaskESDMuonFilter::ConvertESDtoAOD()
81{
82 // ESD Muon Filter analysis task executed for each event
83 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
aba11173 84
fc3a4c45 85 // Fetch Stack for debuggging if available
86 AliStack *pStack = 0;
87 AliMCEventHandler *mcH = 0;
88 if(MCEvent()){
89 pStack = MCEvent()->Stack();
90 mcH = (AliMCEventHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
91 }
92
1d1ea3ce 93 // Define arrays for muons
94 Double_t pos[3];
95 Double_t p[3];
96 Double_t pid[10];
aba11173 97
98 // has to be changed once the muon pid is provided by the ESD
a6e0ebfe 99 for (Int_t i = 0; i < 10; pid[i++] = 0.) {}
aba11173 100 pid[AliAODTrack::kMuon]=1.;
101
1d1ea3ce 102 AliAODHeader* header = AODEvent()->GetHeader();
103 AliAODTrack *aodTrack = 0x0;
aba11173 104 AliESDMuonTrack *esdMuTrack = 0x0;
105
1d1ea3ce 106 // Access to the AOD container of tracks
107 TClonesArray &tracks = *(AODEvent()->GetTracks());
108 Int_t jTracks = header->GetRefMultiplicity();
109
110 // Read primary vertex from AOD event
aba11173 111 AliAODVertex *primary = AODEvent()->GetPrimaryVertex();
edee4062 112 if(fDebug)primary->Print();
aba11173 113
1d1ea3ce 114 // Loop on muon tracks to fill the AOD track branch
115 Int_t nMuTracks = esd->GetNumberOfMuonTracks();
aba11173 116
117 // Update number of positive and negative tracks from AOD event (M.G.)
1d1ea3ce 118 Int_t nPosTracks = header->GetRefMultiplicityPos();
119 Int_t nNegTracks = header->GetRefMultiplicityNeg();
aba11173 120
1d1ea3ce 121 for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) {
aba11173 122 esdMuTrack = esd->GetMuonTrack(nMuTrack);
123
124 if (!esdMuTrack->ContainTrackerData()) continue;
125
126 UInt_t selectInfo = 0;
127 // Track selection
128 if (fTrackFilter) {
129 selectInfo = fTrackFilter->IsSelected(esdMuTrack);
130 if (!selectInfo) {
131 continue;
132 }
133 }
134
135 p[0] = esdMuTrack->Px();
136 p[1] = esdMuTrack->Py();
137 p[2] = esdMuTrack->Pz();
138
139 pos[0] = esdMuTrack->GetNonBendingCoor();
140 pos[1] = esdMuTrack->GetBendingCoor();
141 pos[2] = esdMuTrack->GetZ();
142
fc3a4c45 143 if(mcH)mcH->SelectParticle(esdMuTrack->GetLabel());
144
aba11173 145 aodTrack = new(tracks[jTracks++]) AliAODTrack(esdMuTrack->GetUniqueID(), // ID
2e2d0c44 146 esdMuTrack->GetLabel(), // label
aba11173 147 p, // momentum
148 kTRUE, // cartesian coordinate system
149 pos, // position
150 kFALSE, // isDCA
151 0x0, // covariance matrix
152 esdMuTrack->Charge(), // charge
153 0, // ITSClusterMap
154 pid, // pid
155 primary, // primary vertex
156 kFALSE, // used for vertex fit?
157 kFALSE, // used for primary vertex fit?
158 AliAODTrack::kPrimary,// track type
159 selectInfo);
160
161 aodTrack->SetXYAtDCA(esdMuTrack->GetNonBendingCoorAtDCA(), esdMuTrack->GetBendingCoorAtDCA());
162 aodTrack->SetPxPyPzAtDCA(esdMuTrack->PxAtDCA(), esdMuTrack->PyAtDCA(), esdMuTrack->PzAtDCA());
163 aodTrack->ConvertAliPIDtoAODPID();
164 aodTrack->SetChi2perNDF(esdMuTrack->GetChi2() / (2.*esdMuTrack->GetNHit() - 5.));
165 aodTrack->SetChi2MatchTrigger(esdMuTrack->GetChi2MatchTrigger());
166 aodTrack->SetHitsPatternInTrigCh(esdMuTrack->GetHitsPatternInTrigCh());
167 aodTrack->SetMuonClusterMap(esdMuTrack->GetMuonClusterMap());
168 aodTrack->SetMatchTrigger(esdMuTrack->GetMatchTrigger());
169
170 primary->AddDaughter(aodTrack);
171
172 if (esdMuTrack->Charge() > 0) nPosTracks++;
173 else nNegTracks++;
174 }
175
1d1ea3ce 176 header->SetRefMultiplicity(jTracks);
177 header->SetRefMultiplicityPos(nPosTracks);
178 header->SetRefMultiplicityNeg(nNegTracks);
1d1ea3ce 179}
180
181void AliAnalysisTaskESDMuonFilter::Terminate(Option_t */*option*/)
182{
aba11173 183 // Terminate analysis
184 //
185 if (fDebug > 1) printf("AnalysisESDfilter: Terminate() \n");
1d1ea3ce 186}
aba11173 187
fc3a4c45 188void AliAnalysisTaskESDMuonFilter::PrintMCInfo(AliStack *pStack,Int_t label){
189 if(!pStack)return;
190 label = TMath::Abs(label);
191 TParticle *part = pStack->Particle(label);
192 Printf("########################");
193 Printf("%s:%d %d UniqueID %d PDG %d P %3.3f",(char*)__FILE__,__LINE__,label,part->GetUniqueID(),part->GetPdgCode(),part->P());
194 part->Print();
195 TParticle* mother = part;
196 Int_t imo = part->GetFirstMother();
197 Int_t nprim = pStack->GetNprimary();
198 // while((imo >= nprim) && (mother->GetUniqueID() == 4)) {
199 while((imo >= nprim)) {
200 mother = pStack->Particle(imo);
201 Printf("Mother %s:%d Label %d UniqueID %d PDG %d P %3.3f",(char*)__FILE__,__LINE__,imo,mother->GetUniqueID(),mother->GetPdgCode(),mother->P());
202 mother->Print();
203 imo = mother->GetFirstMother();
204 }
205 Printf("########################");
206}