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