]>
Commit | Line | Data |
---|---|---|
8acd5e60 | 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 | for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) {\r | |
101 | \r | |
102 | AliESDMuonTrack *esdMuTrack = esd->GetMuonTrack(nMuTrack); \r | |
103 | \r | |
104 | p[0] = esdMuTrack->Px(); \r | |
105 | p[1] = esdMuTrack->Py(); \r | |
106 | p[2] = esdMuTrack->Pz();\r | |
107 | pos[0] = primary->GetX(); \r | |
108 | pos[1] = primary->GetY(); \r | |
109 | pos[2] = primary->GetZ();\r | |
110 | \r | |
111 | // has to be changed once the muon pid is provided by the ESD\r | |
112 | for (Int_t i = 0; i < 10; pid[i++] = 0.); pid[AliAODTrack::kMuon]=1.;\r | |
113 | primary->AddDaughter(aodTrack =\r | |
114 | new(tracks[jTracks++]) AliAODTrack(0, // no ID provided\r | |
115 | 0, // no label provided\r | |
116 | p,\r | |
117 | kTRUE,\r | |
118 | pos,\r | |
119 | kFALSE,\r | |
120 | NULL, // no covariance matrix provided\r | |
121 | (Short_t)-99, // no charge provided\r | |
122 | 0, // no ITSClusterMap\r | |
123 | pid,\r | |
124 | primary,\r | |
125 | kTRUE, // check if this is right\r | |
126 | kTRUE, // not used for vertex fit\r | |
127 | AliAODTrack::kPrimary)\r | |
128 | );\r | |
129 | \r | |
130 | aodTrack->ConvertAliPIDtoAODPID(); \r | |
131 | aodTrack->SetHitsPatternInTrigCh(esdMuTrack->GetHitsPatternInTrigCh());\r | |
132 | Int_t track2Trigger = esdMuTrack->GetMatchTrigger();\r | |
133 | aodTrack->SetMatchTrigger(track2Trigger);\r | |
134 | if (track2Trigger) \r | |
135 | aodTrack->SetChi2MatchTrigger(esdMuTrack->GetChi2MatchTrigger());\r | |
136 | else \r | |
137 | aodTrack->SetChi2MatchTrigger(0.);\r | |
138 | }\r | |
139 | \r | |
140 | return;\r | |
141 | }\r | |
142 | \r | |
143 | void AliAnalysisTaskESDMuonFilter::Terminate(Option_t */*option*/)\r | |
144 | {\r | |
145 | // Terminate analysis\r | |
146 | //\r | |
147 | if (fDebug > 1) printf("AnalysisESDfilter: Terminate() \n");\r | |
148 | }\r |