]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/QA/tasks/AliAnalysisTaskHLTPHOS.cxx
Update master to aliroot
[u/mrichter/AliRoot.git] / HLT / QA / tasks / AliAnalysisTaskHLTPHOS.cxx
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
49 ClassImp(AliAnalysisTaskHLTPHOS)
50
51
52 //===========================================================================================
53
54 AliAnalysisTaskHLTPHOS::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
71 AliAnalysisTaskHLTPHOS::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
87 const Float_t AliAnalysisTaskHLTPHOS::fgkEtaMin = -0.12;  
88 const Float_t AliAnalysisTaskHLTPHOS::fgkEtaMax =  0.12;  
89 const Float_t AliAnalysisTaskHLTPHOS::fgkPhiMin[5]   = {3.83972, 4.18879, 4.53786, 4.88692, 5.23599};  
90 const Float_t AliAnalysisTaskHLTPHOS::fgkPhiMax[5]   = {4.18879, 4.53786, 4.88692, 5.23599, 5.58505};  
91 const Float_t AliAnalysisTaskHLTPHOS::fgkNormX[5]    = {-0.642788, -0.34202, 0, 0.34202, 0.642788};  
92 const Float_t AliAnalysisTaskHLTPHOS::fgkNormY[5]    = {-0.766044, -0.939693, -1, -0.939693, -0.766044};  
93 const Float_t AliAnalysisTaskHLTPHOS::fgkInitPosX[5] = {-295.682, -157.329, 0, 157.329, 295.682};  
94 const Float_t AliAnalysisTaskHLTPHOS::fgkInitPosY[5] = {-352.38, -432.259, -460, -432.259, -352.38};
95
96 //----------------------------------------------------------------------------------------------------
97
98 void 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
119 void 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
260 Int_t AliAnalysisTaskHLTPHOS::GetClusters(AliESDEvent * event, TRefArray * clusters) {
261   return event->GetPHOSClusters(clusters);
262 }
263
264 Bool_t AliAnalysisTaskHLTPHOS::IsThisDetector(AliESDCaloCluster * cluster) {
265   return cluster->IsPHOS();
266 }
267
268
269 Bool_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 }