--- /dev/null
+// $Id$\r
+\r
+//**************************************************************************\r
+//* This file is property of and copyright by the ALICE HLT Project *\r
+//* ALICE Experiment at CERN, All rights reserved. *\r
+//* *\r
+//* Primary Authors: Zhongbao Yin <zbyin@mail.ccnu.edu.cn>, *\r
+//* Kalliopi Kanaki <Kalliopi.Kanaki@ift.uib.no> *\r
+//* for The ALICE HLT Project. *\r
+//* *\r
+//* Permission to use, copy, modify and distribute this software and its *\r
+//* documentation strictly for non-commercial purposes is hereby granted *\r
+//* without fee, provided that the above copyright notice appears in all *\r
+//* copies and that both the copyright notice and this permission notice *\r
+//* appear in the supporting documentation. The authors make no claims *\r
+//* about the suitability of this software for any purpose. It is *\r
+//* provided "as is" without express or implied warranty. *\r
+//**************************************************************************\r
+\r
+/** @file AliAnalysisTaskHLTITS.cxx\r
+ @author Kalliopi Kanaki\r
+ @date\r
+ @brief\r
+*/\r
+\r
+#include <iostream>\r
+\r
+#include "TChain.h"\r
+#include "TTree.h"\r
+#include "TH1F.h"\r
+#include "TH2F.h"\r
+#include "TCanvas.h"\r
+#include "TVector3.h"\r
+#include "TString.h"\r
+#include "TObjArray.h"\r
+#include "TFile.h"\r
+\r
+#include "AliESDEvent.h"\r
+#include "AliESDRun.h"\r
+#include "AliESDInputHandler.h"\r
+\r
+#include "AliAnalysisTask.h"\r
+#include "AliAnalysisManager.h"\r
+#include "AliAnalysisTaskHLTITS.h"\r
+\r
+\r
+ClassImp(AliAnalysisTaskHLTITS)\r
+\r
+//===========================================================================================================\r
+\r
+AliAnalysisTaskHLTITS::AliAnalysisTaskHLTITS(const char *name)\r
+ : \r
+ AliAnalysisTaskSE(name)\r
+ ,fHistOnlITSsignal(0)\r
+ ,fHistOfflITSsignal(0)\r
+ ,fHistOfflITSsignalTrig(0)\r
+ ,fHistOfflITSsignalNoTrig(0)\r
+ ,fHistOnlITSncls(0)\r
+ ,fHistOfflITSncls(0)\r
+ ,fHistOfflITSnclsTrig(0)\r
+ ,fHistOfflITSnclsNoTrig(0)\r
+{\r
+ // Constructor\r
+\r
+ // Define input and output slots here\r
+ // Input slot #0 works with a TChain\r
+ // DefineInput(0, TChain::Class());\r
+ // Output slot #0 writes into a TH1 container\r
+\r
+ DefineOutput(1, TList::Class());\r
+}\r
+\r
+//----------------------------------------------------------------------------------------------------\r
+\r
+void AliAnalysisTaskHLTITS::UserCreateOutputObjects(){\r
+\r
+ OpenFile(1);\r
+\r
+ fOutputList = new TList();\r
+ fOutputList->SetName(GetName());\r
+ \r
+ fHistOfflITSsignal = new TH1F("fHistOfflITSsignal","ITS signal (offline)",150, 0, 150); \r
+ fHistOnlITSsignal = new TH1F("fHistOnlITSsignal", "ITS signal (HLT)", 150, 0, 150);\r
+\r
+ fHistOfflITSsignalTrig = new TH1F("fHistOfflITSsignalTrig", "ITS signal (offline triggered)", 150, 0, 150); \r
+ fHistOfflITSsignalNoTrig = new TH1F("fHistOfflITSsignalNoTrig","ITS signal (offline not triggered)",150, 0, 150); \r
+\r
+ fHistOfflITSncls = new TH1F("fHistOfflITSncls","ITS clusters (offline)",10, 0, 10); \r
+ fHistOnlITSncls = new TH1F("fHistOnlITSncls", "ITS clusters (HLT)", 10, 0, 10); \r
+ fHistOfflITSnclsTrig = new TH1F("fHistOfflITSnclsTrig", "ITS clusters (offline triggered)", 10, 0, 10); \r
+ fHistOfflITSnclsNoTrig = new TH1F("fHistOfflITSnclsNoTrig","ITS clusters (offline not triggered)",10, 0, 10); \r
+\r
+ \r
+ fOutputList->Add(fHistOfflITSsignal);\r
+ fOutputList->Add(fHistOnlITSsignal); \r
+ fOutputList->Add(fHistOfflITSsignalTrig); \r
+ fOutputList->Add(fHistOfflITSsignalNoTrig); \r
+ fOutputList->Add(fHistOfflITSncls); \r
+ fOutputList->Add(fHistOnlITSncls); \r
+ fOutputList->Add(fHistOfflITSnclsTrig); \r
+ fOutputList->Add(fHistOfflITSnclsNoTrig);\r
+}\r
+\r
+void AliAnalysisTaskHLTITS::NotifyRun(){\r
+// This will not work if the active trigger classes change from run to run.\r
+// Then one has to know all trigger classes before processing the data.\r
+\r
+ AliESDEvent* evESD = dynamic_cast<AliESDEvent*>(InputEvent());\r
+ TString trgClasses = evESD->GetESDRun()->GetActiveTriggerClasses(); \r
+\r
+ //fTrgClsArray = trgClasses.Tokenize(" ");\r
+ //cout<<fTrgClsArray->GetEntries()<<endl; \r
+ \r
+ evESD = NULL;\r
+}\r
+\r
+void AliAnalysisTaskHLTITS::UserExec(Option_t *){\r
+\r
+ AliESDEvent *evESD = dynamic_cast<AliESDEvent*>(InputEvent());\r
+ \r
+ if(!evESD){\r
+ Printf("ERROR: fESD not available");\r
+ return;\r
+ }\r
+ \r
+ AliESDEvent *evHLTESD = 0;\r
+ AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(fInputHandler);\r
+ \r
+ if(esdH) evHLTESD = esdH->GetHLTEvent();\r
+ \r
+ if(!evHLTESD){\r
+ Printf("ERROR: HLTesd not available");\r
+ return;\r
+ }\r
+\r
+ if(evHLTESD->IsHLTTriggerFired()){ \r
+\r
+ for(Int_t i=0; i<evESD->GetNumberOfTracks(); i++){ \r
+ \r
+ AliESDtrack *esdTrk = evESD->GetTrack(i); \r
+ if(esdTrk->GetITSsignal()>0){ \r
+ fHistOfflITSsignal->Fill(esdTrk->GetITSsignal());\r
+ fHistOfflITSsignalTrig->Fill(esdTrk->GetITSsignal()); \r
+ }\r
+ \r
+ if(esdTrk->fITSncls>0){ \r
+ fHistOfflITSncls->Fill(esdTrk->fITSncls);\r
+ fHistOfflITSnclsTrig->Fill(esdTrk->fITSncls);\r
+ }\r
+ }\r
+ \r
+ } else {\r
+\r
+ for(Int_t i=0; i<evESD->GetNumberOfTracks(); i++){ \r
+ \r
+ AliESDtrack * esdTrk = evESD->GetTrack(i); \r
+ if(esdTrk->GetITSsignal()>0){ \r
+ fHistOfflITSsignal->Fill(esdTrk->GetITSsignal());\r
+ fHistOfflITSsignalNoTrig->Fill(esdTrk->GetITSsignal());\r
+ }\r
+ \r
+ if(esdTrk->fITSncls>0){ \r
+ fHistOfflITSncls->Fill(esdTrk->fITSncls);\r
+ fHistOfflITSnclsNoTrig->Fill(esdTrk->fITSncls);\r
+ }\r
+ } \r
+ }\r
+\r
+ // Post output data.\r
+ PostData(1, fOutputList);\r
+\r
+ }\r
+\r
+void AliAnalysisTaskHLTITS::Terminate(Option_t *){\r
+ /*\r
+ Printf("Number of tracks thru CE: %d", fNtracksThruZ0);\r
+ Printf("Number of tracks thru CE from triggered events: %d", \r
+ fNtracksThruZ0Trig);\r
+ */\r
+\r
+ // Draw result to the screen\r
+ // Called once at the end of the query\r
+\r
+ // TCanvas *c1 = new TCanvas("AliAnalysisTaskHLTITS","Trigger",10,10,510,510);\r
+ //fHistTrigger->DrawCopy("E");\r
+ \r
+}\r
--- /dev/null
+// $Id$\r
+\r
+#ifndef ALIANALYSISTASKHLTITS_H\r
+#define ALIANALYSISTASKHLTITS_H\r
+\r
+//* This file is property of and copyright by the ALICE HLT Project *\r
+//* ALICE Experiment at CERN, All rights reserved. *\r
+//* See cxx source for full Copyright notice *\r
+\r
+/** @file AliAnalysisTaskHLTITS.h\r
+ @author Kalliopi Kanaki\r
+ @date \r
+ @brief An analysis task to compare the offline and HLT esd trees\r
+*/\r
+\r
+// forward declarations\r
+class TH1F;\r
+class TH2F;\r
+class TList;\r
+class AliESDEvent;\r
+class AliESDtrack;\r
+class AliESDRun;\r
+class TObjArray;\r
+\r
+#include "AliAnalysisTaskSE.h"\r
+\r
+class AliAnalysisTaskHLTITS : public AliAnalysisTaskSE {\r
+ \r
+ public: \r
+ AliAnalysisTaskHLTITS(const char *name);\r
+ virtual ~AliAnalysisTaskHLTITS() {}\r
+ virtual void UserCreateOutputObjects();\r
+ virtual void UserExec(Option_t *option);\r
+ virtual void Terminate(Option_t *);\r
+ //virtual Bool_t Notify();\r
+ virtual void NotifyRun();\r
+\r
+ private:\r
+\r
+ AliESDRun *fESDRun; //!\r
+ TList *fOutputList;\r
+\r
+ TH1F *fHistOnlITSsignal; //!\r
+ TH1F *fHistOfflITSsignal; //!\r
+ TH1F *fHistOfflITSsignalTrig; //!\r
+ TH1F *fHistOfflITSsignalNoTrig; //!\r
+\r
+ TH1F *fHistOnlITSncls; //!\r
+ TH1F *fHistOfflITSncls; //!\r
+ TH1F *fHistOfflITSnclsTrig; //!\r
+ TH1F *fHistOfflITSnclsNoTrig; //!\r
+\r
+ /** copy constructor */\r
+ AliAnalysisTaskHLTITS(const AliAnalysisTaskHLTITS&); \r
+ /** assignment operator */\r
+ AliAnalysisTaskHLTITS& operator=(const AliAnalysisTaskHLTITS&); \r
+\r
+ ClassDef(AliAnalysisTaskHLTITS, 0);\r
+};\r
+\r
+#endif\r
gROOT->ProcessLine(".include $ALICE_ROOT/include");
- Bool_t bAll=kFALSE, bTPC=kFALSE, bPHOS=kFALSE;
+ Bool_t bAll=kFALSE, bTPC=kFALSE, bPHOS=kFALSE, bITS=kFALSE;
TString allArgs = detectorTask;
TString argument;
bPHOS = kTRUE;
continue;
}
+
+ if(argument.CompareTo("its", TString::kIgnoreCase)==0){
+ bITS = kTRUE;
+ continue;
+ }
if(argument.CompareTo("all",TString::kIgnoreCase)==0){
bTPC = kTRUE;
bPHOS = kTRUE;
+ bITS = kTRUE;
bAll = kTRUE;
continue;
}
//-------------- Compile the analysis tasks ---------- //
if(bTPC) gROOT->LoadMacro("AliAnalysisTaskHLTTPC.cxx+");
if(bPHOS) gROOT->LoadMacro("AliAnalysisTaskHLTPHOS.cxx+");
+ if(bITS) gROOT->LoadMacro("AliAnalysisTaskHLTITS.cxx+");
AliTagAnalysis *TagAna = new AliTagAnalysis("ESD");
mgr->ConnectOutput(taskPHOS,1,coutput2);
}
+ if(bITS){
+ AliAnalysisTaskHLTITS *taskITS = new AliAnalysisTaskHLTITS("offhlt_comparison_ITS");
+ mgr->AddTask(taskITS);
+ AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("its_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-ITS-comparison.root");
+ mgr->ConnectInput(taskITS,0,mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(taskITS,1,coutput3);
+ }
+
if (!mgr->InitAnalysis()) return;
mgr->PrintStatus();
mgr->StartAnalysis("local",chain);