]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/muon/AliAnalysisTaskESDMuonFilter.cxx
Propagation of MC lables from hits up to AOD.(Philippe P.)
[u/mrichter/AliRoot.git] / PWG3 / muon / AliAnalysisTaskESDMuonFilter.cxx
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
18
19 #include <TChain.h>
20 #include <TFile.h>
21
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"
33 #include "AliLog.h"
34
35 ClassImp(AliAnalysisTaskESDMuonFilter)
36
37 ////////////////////////////////////////////////////////////////////////
38
39 AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter():
40   AliAnalysisTaskSE(),
41   fTrackFilter(0x0)
42 {
43   // Default constructor
44 }
45
46 AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter(const char* name):
47   AliAnalysisTaskSE(name),
48   fTrackFilter(0x0)
49 {
50   // Constructor
51 }
52
53 void AliAnalysisTaskESDMuonFilter::UserCreateOutputObjects()
54 {
55   // Create the output container
56   if (fTrackFilter) OutputTree()->GetUserInfo()->Add(fTrackFilter);
57 }
58
59 void AliAnalysisTaskESDMuonFilter::Init()
60 {
61   // Initialization
62   if (fDebug > 1) AliInfo("Init() \n");
63 }
64
65
66 void AliAnalysisTaskESDMuonFilter::UserExec(Option_t */*option*/)
67 {
68   // Execute analysis for current event                                     
69   Long64_t ientry = Entry();
70   printf("Muon Filter: Analysing event # %5d\n", (Int_t) ientry);
71   
72   ConvertESDtoAOD();
73 }
74
75 void AliAnalysisTaskESDMuonFilter::ConvertESDtoAOD() 
76 {
77   // ESD Muon Filter analysis task executed for each event
78   AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
79   
80   // Define arrays for muons
81   Double_t pos[3];
82   Double_t p[3];
83   Double_t pid[10];
84   
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.;
88   
89   AliAODHeader* header = AODEvent()->GetHeader();
90   AliAODTrack *aodTrack = 0x0;
91   AliESDMuonTrack *esdMuTrack = 0x0;
92   
93   // Access to the AOD container of tracks
94   TClonesArray &tracks = *(AODEvent()->GetTracks());
95   Int_t jTracks = header->GetRefMultiplicity();
96   
97   // Read primary vertex from AOD event 
98   AliAODVertex *primary = AODEvent()->GetPrimaryVertex();
99   primary->Print();
100   
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);
104   
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();
108   
109   for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) {
110     esdMuTrack = esd->GetMuonTrack(nMuTrack);
111     
112     if (!esdMuTrack->ContainTrackerData()) continue;
113            
114     UInt_t selectInfo = 0;
115     // Track selection
116     if (fTrackFilter) {
117         selectInfo = fTrackFilter->IsSelected(esdMuTrack);
118         if (!selectInfo) {
119           continue;
120         }  
121      }
122
123     p[0] = esdMuTrack->Px(); 
124     p[1] = esdMuTrack->Py(); 
125     p[2] = esdMuTrack->Pz();
126     
127     pos[0] = esdMuTrack->GetNonBendingCoor(); 
128     pos[1] = esdMuTrack->GetBendingCoor(); 
129     pos[2] = esdMuTrack->GetZ();
130     
131     aodTrack = new(tracks[jTracks++]) AliAODTrack(esdMuTrack->GetUniqueID(), // ID
132                                                   esdMuTrack->GetLabel(), // label
133                                                   p, // momentum
134                                                   kTRUE, // cartesian coordinate system
135                                                   pos, // position
136                                                   kFALSE, // isDCA
137                                                   0x0, // covariance matrix
138                                                   esdMuTrack->Charge(), // charge
139                                                   0, // ITSClusterMap
140                                                   pid, // pid
141                                                   primary, // primary vertex
142                                                   kFALSE, // used for vertex fit?
143                                                   kFALSE, // used for primary vertex fit?
144                                                   AliAODTrack::kPrimary,// track type
145                                                   selectInfo); 
146     
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());
155     
156     primary->AddDaughter(aodTrack);
157     
158     if (esdMuTrack->Charge() > 0) nPosTracks++;
159     else nNegTracks++;
160   }
161   
162   header->SetRefMultiplicity(jTracks); 
163   header->SetRefMultiplicityPos(nPosTracks);
164   header->SetRefMultiplicityNeg(nNegTracks);
165 }
166
167 void AliAnalysisTaskESDMuonFilter::Terminate(Option_t */*option*/)
168 {
169   // Terminate analysis
170   //
171   if (fDebug > 1) printf("AnalysisESDfilter: Terminate() \n");
172 }
173