]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/QA/tasks/AliAnalysisTaskHLTPHOS.cxx
- fixing compilation warning
[u/mrichter/AliRoot.git] / HLT / QA / tasks / AliAnalysisTaskHLTPHOS.cxx
1 // $Id$\r
2 \r
3 //**************************************************************************\r
4 //* This file is property of and copyright by the ALICE HLT Project        *\r
5 //* ALICE Experiment at CERN, All rights reserved.                         *\r
6 //*                                                                        *\r
7 //* Primary Authors: Zhongbao Yin <zbyin@mail.ccnu.edu.cn>,                *\r
8 //*                  Kalliopi Kanaki <Kalliopi.Kanaki@ift.uib.no>          *\r
9 //*                  for The ALICE HLT Project.                            *\r
10 //*                                                                        *\r
11 //* Permission to use, copy, modify and distribute this software and its   *\r
12 //* documentation strictly for non-commercial purposes is hereby granted   *\r
13 //* without fee, provided that the above copyright notice appears in all   *\r
14 //* copies and that both the copyright notice and this permission notice   *\r
15 //* appear in the supporting documentation. The authors make no claims     *\r
16 //* about the suitability of this software for any purpose. It is          *\r
17 //* provided "as is" without express or implied warranty.                  *\r
18 //**************************************************************************\r
19 \r
20 /** @file   AliAnalysisTaskHLTPHOS.cxx\r
21     @author Zhongbao Yin, Kalliopi Kanaki\r
22     @date\r
23     @brief\r
24 */\r
25 \r
26 #include <iostream>\r
27 \r
28 #include "TChain.h"\r
29 #include "TTree.h"\r
30 #include "TH1F.h"\r
31 #include "TH2F.h"\r
32 #include "TCanvas.h"\r
33 #include "TVector3.h"\r
34 #include "TString.h"\r
35 #include "TObjArray.h"\r
36 #include "TFile.h"\r
37 \r
38 #include "AliESDEvent.h"\r
39 #include "AliESDRun.h"\r
40 #include "AliESDInputHandler.h"\r
41 \r
42 #include "AliAnalysisTask.h"\r
43 #include "AliAnalysisManager.h"\r
44 #include "AliAnalysisTaskHLTPHOS.h"\r
45 \r
46 \r
47 ClassImp(AliAnalysisTaskHLTPHOS)\r
48 \r
49 //===========================================================================================\r
50 \r
51 AliAnalysisTaskHLTPHOS::AliAnalysisTaskHLTPHOS(const char *name)\r
52     : \r
53      AliAnalysisTaskSE(name)\r
54     ,fESDRun(0)\r
55     ,fOutputList(0)\r
56     ,fHistOnlTrk2PHOS(0)\r
57     ,fHistOfflTrk2PHOS(0)\r
58     ,fHistOfflTrk2PHOSTrig(0)\r
59     ,fHistOfflTrk2PHOSNoTrig(0)\r
60     ,fNevt(0)\r
61     ,fTrgClsArray(0)\r
62 {\r
63   // Constructor\r
64 \r
65   // Define input and output slots here\r
66   // Input slot #0 works with a TChain\r
67   // DefineInput(0, TChain::Class());\r
68   // Output slot #0 writes into a TH1 container\r
69 \r
70   DefineOutput(1, TList::Class());\r
71 }\r
72 \r
73 const Float_t AliAnalysisTaskHLTPHOS::fgkEtaMin = -0.12;  \r
74 const Float_t AliAnalysisTaskHLTPHOS::fgkEtaMax =  0.12;  \r
75 const Float_t AliAnalysisTaskHLTPHOS::fgkPhiMin[5]   = {3.83972, 4.18879, 4.53786, 4.88692, 5.23599};  \r
76 const Float_t AliAnalysisTaskHLTPHOS::fgkPhiMax[5]   = {4.18879, 4.53786, 4.88692, 5.23599, 5.58505};  \r
77 const Float_t AliAnalysisTaskHLTPHOS::fgkNormX[5]    = {-0.642788, -0.34202, 0, 0.34202, 0.642788};  \r
78 const Float_t AliAnalysisTaskHLTPHOS::fgkNormY[5]    = {-0.766044, -0.939693, -1, -0.939693, -0.766044};  \r
79 const Float_t AliAnalysisTaskHLTPHOS::fgkInitPosX[5] = {-295.682, -157.329, 0, 157.329, 295.682};  \r
80 const Float_t AliAnalysisTaskHLTPHOS::fgkInitPosY[5] = {-352.38, -432.259, -460, -432.259, -352.38};\r
81 \r
82 //----------------------------------------------------------------------------------------------------\r
83 \r
84 void AliAnalysisTaskHLTPHOS::UserCreateOutputObjects(){\r
85 // Create histograms\r
86 \r
87   OpenFile(1);\r
88 \r
89   fOutputList = new TList();\r
90   fOutputList->SetName(GetName());\r
91 \r
92 // --------------- define histograms ---------------------//\r
93 \r
94   fHistOfflTrk2PHOS = new TH2F("fHistOfflTrk2PHOS","track intersection point in #eta and #phi (offline)",100, -0.5, 0.5, 100, 240, 340); \r
95   fHistOnlTrk2PHOS  = new TH2F("fHistOnlTrk2PHOS", "track intersection point in #eta and #phi (HLT)",    100, -0.5, 0.5, 100, 240, 340);\r
96   \r
97   fHistOfflTrk2PHOSTrig   = new TH2F("fHistOfflTrk2PHOSTrig",  "track intersection point in #eta and #phi (offline triggered)",    100, -0.5, 0.5, 100, 240, 340);  \r
98   fHistOfflTrk2PHOSNoTrig = new TH2F("fHistOfflTrk2PHOSNoTrig","track intersection point in #eta and #phi (offline not triggered)",100, -0.5, 0.5, 100, 240, 340);   \r
99 \r
100   // -------------- add histograms to the output TList -----------------//\r
101   \r
102   fOutputList->Add(fHistOnlTrk2PHOS);\r
103   fOutputList->Add(fHistOfflTrk2PHOS);  \r
104   fOutputList->Add(fHistOfflTrk2PHOSTrig);\r
105   fOutputList->Add(fHistOfflTrk2PHOSNoTrig);\r
106 \r
107 }\r
108 \r
109 void AliAnalysisTaskHLTPHOS::NotifyRun(){\r
110 // This will not work if the active trigger classes change from run to run.\r
111 // Then one has to know all trigger classes before processing the data.\r
112 \r
113   AliESDEvent* evESD = dynamic_cast<AliESDEvent*>(InputEvent());\r
114   TString trgClasses = evESD->GetESDRun()->GetActiveTriggerClasses(); \r
115  \r
116   fTrgClsArray = trgClasses.Tokenize(" ");\r
117   //cout<<fTrgClsArray->GetEntries()<<endl; \r
118     \r
119 //   for(Int_t i = 0; i < fTrgClsArray->GetEntries(); i++){ \r
120 //     TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); \r
121 //     (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); \r
122 //     (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); \r
123 //   } \r
124   \r
125   evESD = NULL;\r
126 }\r
127 \r
128 void AliAnalysisTaskHLTPHOS::UserExec(Option_t *){\r
129 \r
130   AliESDEvent* evESD = dynamic_cast<AliESDEvent*>(InputEvent());\r
131   \r
132   if (!evESD) {\r
133     Printf("ERROR: fESD not available");\r
134     return;\r
135   }\r
136   \r
137   AliESDEvent* evHLTESD = 0;\r
138   AliESDInputHandler* esdH = dynamic_cast<AliESDInputHandler*>(fInputHandler);\r
139    \r
140   if(esdH) evHLTESD = esdH->GetHLTEvent();\r
141     \r
142   if(!evHLTESD){\r
143       Printf("ERROR: HLTesd not available");\r
144       return;\r
145   }\r
146 \r
147   Double_t b = evESD->GetMagneticField();\r
148   \r
149   Double_t pos[] = { 0., 0., 0.};\r
150   AliVertex *vtx = new AliVertex(pos, 0., 0);\r
151     \r
152 //   for(Int_t i = 0; i<fTrgClsArray->GetEntries(); i++){\r
153 //       if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString()))  fHistTrigger->Fill(i);\r
154 //   }\r
155 // \r
156 //   if(evHLTESD->IsHLTTriggerFired()){\r
157 //      //fHistHLTTrigger->Fill(evESD->GetTriggerMask());\r
158 //      for(Int_t i = 0; i<fTrgClsArray->GetEntries(); i++){ \r
159 //          if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistHLTTrigger->Fill(i);\r
160 //      } \r
161 //   }\r
162 \r
163   if(evHLTESD->IsHLTTriggerFired()){\r
164      for(Int_t i = 0; i < evHLTESD->GetNumberOfTracks(); i++){\r
165          AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i);\r
166       \r
167         TVector3 v; \r
168         if(IsInPHOS(2, HLTesdTrk, b, v)){ \r
169           Float_t phi = v.Phi(); \r
170           if(phi<0) phi += 2.*TMath::Pi(); \r
171           fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); \r
172         }else if(IsInPHOS(3, HLTesdTrk, b, v)){ \r
173           Float_t phi = v.Phi();  \r
174           if(phi<0) phi += 2.*TMath::Pi();  \r
175           fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());  \r
176         }else if( IsInPHOS(4, HLTesdTrk, b, v) ){ \r
177           Float_t phi = v.Phi();   \r
178           if(phi<0) phi += 2.*TMath::Pi();   \r
179           fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); \r
180         } \r
181 \r
182 /*\r
183       if(IsInPHOS(2, HLTesdTrk, b) \r
184          || IsInPHOS(3, HLTesdTrk, b)\r
185          || IsInPHOS(4, HLTesdTrk, b) ) cout<<"Good Trigger"<<endl;\r
186 */      \r
187        \r
188      }\r
189   }else{\r
190     for(Int_t i = 0; i < evHLTESD->GetNumberOfTracks(); i++){ \r
191         AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); \r
192 \r
193         TVector3 v;  \r
194         if(IsInPHOS(2, HLTesdTrk, b, v)){  \r
195           Float_t phi = v.Phi();  \r
196           if(phi<0) phi += 2.*TMath::Pi();  \r
197           fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());  \r
198         }else if(IsInPHOS(3, HLTesdTrk, b, v)){  \r
199           Float_t phi = v.Phi();   \r
200           if(phi<0) phi += 2.*TMath::Pi();   \r
201           fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());   \r
202         }else if( IsInPHOS(4, HLTesdTrk, b, v) ){  \r
203           Float_t phi = v.Phi();    \r
204           if(phi<0) phi += 2.*TMath::Pi();    \r
205           fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());  \r
206         }  \r
207     } \r
208   }\r
209   \r
210   if(evHLTESD->IsHLTTriggerFired()){\r
211 \r
212     for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ \r
213       AliESDtrack * esdTrk = evESD->GetTrack(i); \r
214 \r
215       TVector3 v;\r
216       if(IsInPHOS(2, esdTrk, b, v)){\r
217         Float_t phi = v.Phi();\r
218         if(phi<0) phi += 2.*TMath::Pi();\r
219         fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg());\r
220         fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());\r
221         //cout<<"Event in PHOS 2: "<<fNevt<<endl;\r
222       }else if(IsInPHOS(3, esdTrk, b, v)){\r
223         Float_t phi = v.Phi(); \r
224         if(phi<0) phi += 2.*TMath::Pi(); \r
225         fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); \r
226         fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());\r
227         //cout<<"Event in PHOS 3: "<<fNevt<<endl;\r
228       }else if( IsInPHOS(4, esdTrk, b, v) ){\r
229         Float_t phi = v.Phi();  \r
230         if(phi<0) phi += 2.*TMath::Pi();  \r
231         fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg());\r
232         fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());\r
233         //cout<<"Event in PHOS 4: "<<fNevt<<endl;\r
234       }\r
235     }\r
236   } else {\r
237 \r
238     for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ \r
239       AliESDtrack * esdTrk = evESD->GetTrack(i); \r
240 \r
241       TVector3 v; \r
242       if(IsInPHOS(2, esdTrk, b, v)){ \r
243         Float_t phi = v.Phi(); \r
244         if(phi<0) phi += 2.*TMath::Pi(); \r
245         fHistOfflTrk2PHOSNoTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); \r
246         fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());\r
247         //cout<<"Event in PHOS 2: "<<fNevt<<endl;\r
248       }else if(IsInPHOS(3, esdTrk, b, v)){ \r
249         Float_t phi = v.Phi();  \r
250         if(phi<0) phi += 2.*TMath::Pi();  \r
251         fHistOfflTrk2PHOSNoTrig->Fill(v.Eta(), phi*TMath::RadToDeg());  \r
252         fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());\r
253         //cout<<"Event in PHOS 3: "<<fNevt<<endl;\r
254       }else if( IsInPHOS(4, esdTrk, b, v) ){ \r
255         Float_t phi = v.Phi();   \r
256         if(phi<0) phi += 2.*TMath::Pi();   \r
257         fHistOfflTrk2PHOSNoTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); \r
258         fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());\r
259         //cout<<"Event in PHOS 4: "<<fNevt<<endl;\r
260       } \r
261     }    \r
262   }\r
263 \r
264   fNevt++;\r
265   delete vtx;\r
266 \r
267   // Post output data.\r
268   PostData(1, fOutputList);\r
269 \r
270  }\r
271 \r
272 void AliAnalysisTaskHLTPHOS::Terminate(Option_t *){\r
273   /*\r
274   Printf("Number of tracks thru CE: %d", fNtracksThruZ0);\r
275   Printf("Number of tracks thru CE from triggered events: %d", \r
276          fNtracksThruZ0Trig);\r
277   */\r
278 \r
279   // Draw result to the screen\r
280   // Called once at the end of the query\r
281 \r
282   //  TCanvas *c1 = new TCanvas("AliAnalysisTaskHLTPHOS","Trigger",10,10,510,510);\r
283   //fHistTrigger->DrawCopy("E");\r
284   \r
285 }\r
286 \r
287 Bool_t AliAnalysisTaskHLTPHOS::IsInPHOS(Int_t iMod, AliESDtrack * trk, Float_t b, TVector3& v){\r
288 \r
289   Double_t normVector[3] = {fgkNormX[iMod], fgkNormY[iMod], 0};\r
290 \r
291   Double_t point[3] = {fgkInitPosX[iMod], fgkInitPosY[iMod], 0};\r
292   \r
293   if(!trk->Intersect(point, normVector, b)) return kFALSE;\r
294 \r
295   TVector3 trackPos(point);\r
296   \r
297   v=trackPos;\r
298 \r
299   Double_t phi = 0;\r
300   if(trackPos.Phi() < 0) phi = trackPos.Phi() + 2*TMath::Pi();\r
301   else phi = trackPos.Phi();\r
302 \r
303   if(trackPos.Eta() >= fgkEtaMin && \r
304      trackPos.Eta() <= fgkEtaMax &&\r
305      phi >= fgkPhiMin[iMod] &&\r
306      phi <= fgkPhiMax[iMod])\r
307     {\r
308       return kTRUE;\r
309     }\r
310   \r
311   return kFALSE;\r
312 }\r