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
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
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
20 /** @file AliAnalysisTaskHLTITS.cxx
\r
21 @author Kalliopi Kanaki
\r
32 #include "TCanvas.h"
\r
33 #include "TVector3.h"
\r
34 #include "TString.h"
\r
35 #include "TObjArray.h"
\r
38 #include "AliESDEvent.h"
\r
39 #include "AliESDRun.h"
\r
40 #include "AliESDInputHandler.h"
\r
42 #include "AliAnalysisTask.h"
\r
43 #include "AliAnalysisManager.h"
\r
44 #include "AliAnalysisTaskHLTITS.h"
\r
47 ClassImp(AliAnalysisTaskHLTITS)
\r
49 //===========================================================================================================
\r
51 AliAnalysisTaskHLTITS::AliAnalysisTaskHLTITS(const char *name)
\r
53 AliAnalysisTaskSE(name)
\r
54 ,fHistOnlITSsignal(0)
\r
55 ,fHistOfflITSsignal(0)
\r
56 ,fHistOfflITSsignalTrig(0)
\r
57 ,fHistOfflITSsignalNoTrig(0)
\r
59 ,fHistOfflITSncls(0)
\r
60 ,fHistOfflITSnclsTrig(0)
\r
61 ,fHistOfflITSnclsNoTrig(0)
\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
70 DefineOutput(1, TList::Class());
\r
73 //----------------------------------------------------------------------------------------------------
\r
75 void AliAnalysisTaskHLTITS::UserCreateOutputObjects(){
\r
79 fOutputList = new TList();
\r
80 fOutputList->SetName(GetName());
\r
82 fHistOfflITSsignal = new TH1F("fHistOfflITSsignal","ITS signal (offline)",150, 0, 150);
\r
83 fHistOnlITSsignal = new TH1F("fHistOnlITSsignal", "ITS signal (HLT)", 150, 0, 150);
\r
85 fHistOfflITSsignalTrig = new TH1F("fHistOfflITSsignalTrig", "ITS signal (offline triggered)", 150, 0, 150);
\r
86 fHistOfflITSsignalNoTrig = new TH1F("fHistOfflITSsignalNoTrig","ITS signal (offline not triggered)",150, 0, 150);
\r
88 fHistOfflITSncls = new TH1F("fHistOfflITSncls","ITS clusters (offline)",10, 0, 10);
\r
89 fHistOnlITSncls = new TH1F("fHistOnlITSncls", "ITS clusters (HLT)", 10, 0, 10);
\r
90 fHistOfflITSnclsTrig = new TH1F("fHistOfflITSnclsTrig", "ITS clusters (offline triggered)", 10, 0, 10);
\r
91 fHistOfflITSnclsNoTrig = new TH1F("fHistOfflITSnclsNoTrig","ITS clusters (offline not triggered)",10, 0, 10);
\r
94 fOutputList->Add(fHistOfflITSsignal);
\r
95 fOutputList->Add(fHistOnlITSsignal);
\r
96 fOutputList->Add(fHistOfflITSsignalTrig);
\r
97 fOutputList->Add(fHistOfflITSsignalNoTrig);
\r
98 fOutputList->Add(fHistOfflITSncls);
\r
99 fOutputList->Add(fHistOnlITSncls);
\r
100 fOutputList->Add(fHistOfflITSnclsTrig);
\r
101 fOutputList->Add(fHistOfflITSnclsNoTrig);
\r
104 void AliAnalysisTaskHLTITS::NotifyRun(){
\r
105 // This will not work if the active trigger classes change from run to run.
\r
106 // Then one has to know all trigger classes before processing the data.
\r
108 AliESDEvent* evESD = dynamic_cast<AliESDEvent*>(InputEvent());
\r
109 TString trgClasses = evESD->GetESDRun()->GetActiveTriggerClasses();
\r
111 //fTrgClsArray = trgClasses.Tokenize(" ");
\r
112 //cout<<fTrgClsArray->GetEntries()<<endl;
\r
117 void AliAnalysisTaskHLTITS::UserExec(Option_t *){
\r
119 AliESDEvent *evESD = dynamic_cast<AliESDEvent*>(InputEvent());
\r
122 Printf("ERROR: fESD not available");
\r
126 AliESDEvent *evHLTESD = 0;
\r
127 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(fInputHandler);
\r
129 if(esdH) evHLTESD = esdH->GetHLTEvent();
\r
132 Printf("ERROR: HLTesd not available");
\r
136 if(evHLTESD->IsHLTTriggerFired()){
\r
138 for(Int_t i=0; i<evESD->GetNumberOfTracks(); i++){
\r
140 AliESDtrack *esdTrk = evESD->GetTrack(i);
\r
141 if(esdTrk->GetITSsignal()>0){
\r
142 fHistOfflITSsignal->Fill(esdTrk->GetITSsignal());
\r
143 fHistOfflITSsignalTrig->Fill(esdTrk->GetITSsignal());
\r
146 if(esdTrk->fITSncls>0){
\r
147 fHistOfflITSncls->Fill(esdTrk->fITSncls);
\r
148 fHistOfflITSnclsTrig->Fill(esdTrk->fITSncls);
\r
154 for(Int_t i=0; i<evESD->GetNumberOfTracks(); i++){
\r
156 AliESDtrack * esdTrk = evESD->GetTrack(i);
\r
157 if(esdTrk->GetITSsignal()>0){
\r
158 fHistOfflITSsignal->Fill(esdTrk->GetITSsignal());
\r
159 fHistOfflITSsignalNoTrig->Fill(esdTrk->GetITSsignal());
\r
162 if(esdTrk->fITSncls>0){
\r
163 fHistOfflITSncls->Fill(esdTrk->fITSncls);
\r
164 fHistOfflITSnclsNoTrig->Fill(esdTrk->fITSncls);
\r
169 // Post output data.
\r
170 PostData(1, fOutputList);
\r
174 void AliAnalysisTaskHLTITS::Terminate(Option_t *){
\r
176 Printf("Number of tracks thru CE: %d", fNtracksThruZ0);
\r
177 Printf("Number of tracks thru CE from triggered events: %d",
\r
178 fNtracksThruZ0Trig);
\r
181 // Draw result to the screen
\r
182 // Called once at the end of the query
\r
184 // TCanvas *c1 = new TCanvas("AliAnalysisTaskHLTITS","Trigger",10,10,510,510);
\r
185 //fHistTrigger->DrawCopy("E");
\r