]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/muon/AliAnalysisTaskESDMuonFilter.cxx
Correct number of tracks in the header. (M. Gheata)
[u/mrichter/AliRoot.git] / PWG3 / muon / AliAnalysisTaskESDMuonFilter.cxx
1 /**************************************************************************\r
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
3  *                                                                        *\r
4  * Author: The ALICE Off-line Project.                                    *\r
5  * Contributors are mentioned in the code where appropriate.              *\r
6  *                                                                        *\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
15 \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
18  \r
19 #include <TChain.h>\r
20 #include <TFile.h>\r
21 \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
33 #include "AliLog.h"\r
34 \r
35 ClassImp(AliAnalysisTaskESDMuonFilter)\r
36 \r
37 ////////////////////////////////////////////////////////////////////////\r
38 \r
39 AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter():\r
40     AliAnalysisTaskSE(),\r
41     fTrackFilter(0x0)\r
42 {\r
43   // Default constructor\r
44 }\r
45 \r
46 AliAnalysisTaskESDMuonFilter::AliAnalysisTaskESDMuonFilter(const char* name):\r
47     AliAnalysisTaskSE(name),\r
48     fTrackFilter(0x0)\r
49 {\r
50   // Constructor\r
51 }\r
52 \r
53 void AliAnalysisTaskESDMuonFilter::UserCreateOutputObjects()\r
54 {\r
55   // Create the output container\r
56     OutputTree()->GetUserInfo()->Add(fTrackFilter);\r
57 }\r
58 \r
59 void AliAnalysisTaskESDMuonFilter::Init()\r
60 {\r
61   // Initialization\r
62     if (fDebug > 1) AliInfo("Init() \n");\r
63 }\r
64 \r
65 \r
66 void AliAnalysisTaskESDMuonFilter::UserExec(Option_t */*option*/)\r
67 {\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
71 \r
72   ConvertESDtoAOD();\r
73 }\r
74 \r
75 void AliAnalysisTaskESDMuonFilter::ConvertESDtoAOD() \r
76 {\r
77   // ESD Muon Filter analysis task executed for each event\r
78   AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());\r
79  \r
80   // Define arrays for muons\r
81   Double_t pos[3];\r
82   Double_t p[3];\r
83   Double_t pid[10];\r
84  \r
85   AliAODHeader* header = AODEvent()->GetHeader();\r
86   AliAODTrack *aodTrack = 0x0;\r
87  \r
88   // Access to the AOD container of tracks\r
89   TClonesArray &tracks = *(AODEvent()->GetTracks());\r
90   Int_t jTracks = header->GetRefMultiplicity();\r
91   \r
92   // Read primary vertex from AOD event \r
93   AliAODVertex * primary = AODEvent()->GetPrimaryVertex();\r
94   primary->Print();\r
95  \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
99    \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
103    \r
104   for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) {\r
105 \r
106        AliESDMuonTrack *esdMuTrack = esd->GetMuonTrack(nMuTrack); \r
107          \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
114 \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
120                                              p,\r
121                                              kTRUE,\r
122                                              pos,\r
123                                              kFALSE,\r
124                                              NULL, // no covariance matrix provided\r
125                                              (Short_t)-99, // no charge provided\r
126                                              0, // no ITSClusterMap\r
127                                              pid,\r
128                                              primary,\r
129                                              kTRUE,  // check if this is right\r
130                                              kTRUE,  // not used for vertex fit\r
131                                              AliAODTrack::kPrimary)\r
132          );\r
133      if (esdMuTrack->Charge() > 0) nPosTracks++;\r
134      else nNegTracks++;\r
135 \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
142      else \r
143        aodTrack->SetChi2MatchTrigger(0.);\r
144  }\r
145 \r
146   header->SetRefMultiplicity(jTracks); \r
147   header->SetRefMultiplicityPos(nPosTracks);\r
148   header->SetRefMultiplicityNeg(nNegTracks);\r
149   \r
150   return;\r
151 }\r
152 \r
153 void AliAnalysisTaskESDMuonFilter::Terminate(Option_t */*option*/)\r
154 {\r
155 // Terminate analysis\r
156 //\r
157     if (fDebug > 1) printf("AnalysisESDfilter: Terminate() \n");\r
158 }\r