--- /dev/null
+// $Id: AliAnalysisTaskHLTCalo.cxx 40285 2010-04-09 14:04:51Z kkanaki $\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 AliAnalysisTaskHLTCalo.cxx\r
+ @author Zhongbao Yin, Kalliopi Kanaki, Svein Lindal\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
+#include "TList.h"\r
+#include "TRefArray.h"\r
+\r
+#include "AliESDEvent.h"\r
+#include "AliESDRun.h"\r
+#include "AliESDInputHandler.h"\r
+#include "AliESDCaloCluster.h"\r
+\r
+#include "AliAnalysisTask.h"\r
+#include "AliAnalysisManager.h"\r
+#include "AliAnalysisTaskHLTCalo.h"\r
+\r
+#include "AliHLTCaloHistoInvMass.h"\r
+#include "AliHLTCaloHistoClusterEnergy.h"\r
+#include "AliHLTCaloHistoMatchedTracks.h"\r
+#include "AliHLTCaloHistoProducer.h"\r
+\r
+ClassImp(AliAnalysisTaskHLTCalo)\r
+\r
+//===========================================================================================\r
+\r
+AliAnalysisTaskHLTCalo::AliAnalysisTaskHLTCalo(const char *name)\r
+: \r
+AliAnalysisTaskSE(name)\r
+ ,fESDRun(0)\r
+ ,fOutputList(0)\r
+ ,fHistOfflResiduals(NULL)\r
+ ,fHistOnlResiduals(NULL)\r
+ ,fHistOfflDz(NULL)\r
+ ,fHistOnlDz(NULL)\r
+ ,fHistOfflDxy(NULL)\r
+ ,fHistOnlDxy(NULL)\r
+ ,fNevt(0)\r
+ ,fTrgClsArray(0)\r
+ ,fGlobalHistoProdArrOff(NULL)\r
+ ,fGlobalHistoProdArrOn(NULL)\r
+ ,fClustersArray(NULL)\r
+ ,fName(name)\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
+\r
+void AliAnalysisTaskHLTCalo::UserCreateOutputObjects(){\r
+// Create histograms\r
+\r
+ OpenFile(1);\r
+\r
+ fOutputList = new TList();\r
+ fOutputList->SetName(GetName());\r
+\r
+ CreateSpecificStuff(fOutputList);\r
+ \r
+// --------------- define histograms ---------------------//\r
+\r
+ fHistOfflResiduals = new TH1F("fHistOfflResiduals", "Residuals between cluster and nearest track in cm (offline)", 50, 0, 50);\r
+ fHistOnlResiduals = new TH1F("fHistOnlResiduals", "Residuals between cluster and nearest track in cm (online)", 50, 0, 50);\r
+\r
+ fHistOfflDxy = new TH1F("fHistOfflDxy", "Dxy between cluster and nearest track in cm (offline)", 50, 0, 50);\r
+ fHistOnlDxy = new TH1F("fHistOnlDxy", "Dxy between cluster and nearest track in cm (online)", 50, 0, 50);\r
+\r
+ fHistOfflDz = new TH1F("fHistOfflDz", "Dz between cluster and nearest track in cm (offline)", 50, 0, 50);\r
+ fHistOnlDz = new TH1F("fHistOnlDz", "Dz between cluster and nearest track in cm (online)", 50, 0, 50);\r
+\r
+\r
+ // HLT histogram producers\r
+ fGlobalHistoProdArrOff = new TObjArray();\r
+ fGlobalHistoProdArrOn = new TObjArray();\r
+\r
+ // AliHLTCaloHistoClusterEnergy * histo = new AliHLTCaloHistoClusterEnergy("EMCAL");\r
+ \r
+ fGlobalHistoProdArrOff->AddLast(dynamic_cast<TObject*>(new AliHLTCaloHistoClusterEnergy(Form("%s OFF", fName.Data()))));\r
+ fGlobalHistoProdArrOff->AddLast(dynamic_cast<TObject*>(new AliHLTCaloHistoInvMass(Form("%s OFF", fName.Data() ))));\r
+ fGlobalHistoProdArrOff->AddLast(dynamic_cast<TObject*>(new AliHLTCaloHistoMatchedTracks(Form("%s OFF", fName.Data() ))));\r
+\r
+ fGlobalHistoProdArrOn->AddLast(dynamic_cast<TObject*>(new AliHLTCaloHistoClusterEnergy(Form("%s ON", fName.Data() ))));\r
+ fGlobalHistoProdArrOn->AddLast(dynamic_cast<TObject*>(new AliHLTCaloHistoInvMass(Form("%s ON", fName.Data() ))));\r
+ fGlobalHistoProdArrOn->AddLast(dynamic_cast<TObject*>(new AliHLTCaloHistoMatchedTracks(Form("%s ON", fName.Data() ))));\r
+\r
+ fClustersArray = new TRefArray();\r
+\r
+ // -------------- add histograms to the output TList -----------------//\r
+ \r
+ fOutputList->Add(fHistOfflResiduals);\r
+ fOutputList->Add(fHistOnlResiduals);\r
+\r
+ fOutputList->Add(fHistOfflDz);\r
+ fOutputList->Add(fHistOnlDz);\r
+\r
+ fOutputList->Add(fHistOfflDxy);\r
+ fOutputList->Add(fHistOnlDxy);\r
+\r
+ for(int ip = 0; ip < fGlobalHistoProdArrOff->GetEntriesFast(); ip++) {\r
+ AliHLTCaloHistoProducer *prod = dynamic_cast<AliHLTCaloHistoProducer*>(fGlobalHistoProdArrOff->At(ip));\r
+ fOutputList->AddAll(prod->GetHistograms());\r
+ }\r
+\r
+ for(int ip = 0; ip < fGlobalHistoProdArrOn->GetEntriesFast(); ip++) {\r
+ AliHLTCaloHistoProducer *prod = dynamic_cast<AliHLTCaloHistoProducer*>(fGlobalHistoProdArrOn->At(ip));\r
+ fOutputList->AddAll(prod->GetHistograms());\r
+ }\r
+ \r
+\r
+ \r
+\r
+}\r
+\r
+void AliAnalysisTaskHLTCalo::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
+// for(Int_t i = 0; i < fTrgClsArray->GetEntries(); i++){ \r
+// TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); \r
+// (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); \r
+// (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); \r
+// } \r
+ \r
+ evESD = NULL;\r
+}\r
+\r
+void AliAnalysisTaskHLTCalo::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
+ DoSpecificStuff(evESD, evHLTESD);\r
+\r
+ for(int icl = 0; icl < evESD->GetNumberOfCaloClusters(); icl++) {\r
+ AliESDCaloCluster * cluster = evESD->GetCaloCluster(icl);\r
+ if(cluster && IsThisDetector(cluster)) {\r
+ fHistOfflResiduals->Fill(evESD->GetCaloCluster(icl)->GetEmcCpvDistance());\r
+ fHistOfflDz->Fill(evESD->GetCaloCluster(icl)->GetTrackDz());\r
+ fHistOfflDxy->Fill(evESD->GetCaloCluster(icl)->GetTrackDx());\r
+ }\r
+ }\r
+\r
+ for(int icl = 0; icl < evHLTESD->GetNumberOfCaloClusters(); icl++) {\r
+ AliESDCaloCluster * cluster = evHLTESD->GetCaloCluster(icl);\r
+ if(cluster && IsThisDetector(cluster)) {\r
+ fHistOnlResiduals->Fill(evHLTESD->GetCaloCluster(icl)->GetEmcCpvDistance());\r
+ fHistOnlDxy->Fill(evHLTESD->GetCaloCluster(icl)->GetTrackDx());\r
+ fHistOnlDz->Fill(evHLTESD->GetCaloCluster(icl)->GetTrackDz());\r
+ }\r
+ }\r
+\r
+ Int_t nc = GetClusters(evESD, fClustersArray);\r
+ for(int ip = 0; ip < fGlobalHistoProdArrOff->GetEntriesFast(); ip++) {\r
+ AliHLTCaloHistoProducer *prod = dynamic_cast<AliHLTCaloHistoProducer*>(fGlobalHistoProdArrOff->At(ip));\r
+ prod->FillHistograms(nc, fClustersArray);\r
+ }\r
+ \r
+ nc = GetClusters(evHLTESD, fClustersArray);\r
+ for(int ip = 0; ip < fGlobalHistoProdArrOn->GetEntriesFast(); ip++) {\r
+ AliHLTCaloHistoProducer *prod = dynamic_cast<AliHLTCaloHistoProducer*>(fGlobalHistoProdArrOn->At(ip));\r
+ prod->FillHistograms(nc, fClustersArray);\r
+ }\r
+ \r
+\r
+ fNevt++;\r
+\r
+ // Post output data.\r
+ PostData(1, fOutputList);\r
+\r
+}\r
+\r
+void AliAnalysisTaskHLTCalo::Terminate(Option_t *){\r
+\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("AliAnalysisTaskHLTCalo","Trigger",10,10,510,510);\r
+ //fHistTrigger->DrawCopy("E");\r
+ \r
+}\r
+\r
--- /dev/null
+// $Id: AliAnalysisTaskHLTCalo.h 40285 2010-04-09 14:04:51Z kkanaki $\r
+\r
+#ifndef ALIANALYSISTASKHLTCALO_H\r
+#define ALIANALYSISTASKHLTCALO_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 AliAnalysisTaskHLTTPC.h\r
+ @author Zhongbao Yin, Kalliopi Kanaki\r
+ @date\r
+ @brief An analysis task to compare the offline and HLT esd trees\r
+*/\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
+class TRefArray;\r
+\r
+#include "AliAnalysisTaskSE.h"\r
+\r
+class AliAnalysisTaskHLTCalo : public AliAnalysisTaskSE {\r
+ \r
+public: \r
+\r
+ AliAnalysisTaskHLTCalo(const char *name);\r
+ virtual ~AliAnalysisTaskHLTCalo() {}\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
+ virtual void DoSpecificStuff(AliESDEvent * evESD, AliESDEvent * evHLTESD) = 0;\r
+ virtual void CreateSpecificStuff(TList * fOutputList) = 0;\r
+ virtual Bool_t IsThisDetector(AliESDCaloCluster * cluster) = 0;\r
+ virtual Int_t GetClusters(AliESDEvent * event, TRefArray * clusters) = 0;\r
+\r
+private:\r
+ \r
+ AliESDRun *fESDRun; //!\r
+ TList *fOutputList;\r
+ \r
+ TH1F *fHistOfflResiduals; //!\r
+ TH1F *fHistOnlResiduals; //!\r
+\r
+ TH1F *fHistOfflDz; //!\r
+ TH1F *fHistOnlDz; //!\r
+\r
+ TH1F *fHistOfflDxy; //!\r
+ TH1F *fHistOnlDxy; //!\r
+ \r
+ Int_t fNevt;\r
+ TObjArray *fTrgClsArray;\r
+ \r
+ TObjArray * fGlobalHistoProdArrOff; //!transient \r
+ TObjArray * fGlobalHistoProdArrOn; //!transient \r
+\r
+ TRefArray * fClustersArray; //!transient\r
+\r
+ TString fName; //!transient\r
+\r
+ /** copy constructor */\r
+ AliAnalysisTaskHLTCalo(const AliAnalysisTaskHLTCalo&); \r
+ /** assignment operator */\r
+ AliAnalysisTaskHLTCalo& operator=(const AliAnalysisTaskHLTCalo&); \r
+\r
+ ClassDef(AliAnalysisTaskHLTCalo, 0);\r
+};\r
+\r
+#endif\r
--- /dev/null
+// $Id: AliAnalysisTaskHLTEMCAL.cxx 40285 2010-04-09 14:04:51Z kkanaki $\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
+//* Svein Lindal <svein.lindal@gmail.com> *\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 AliAnalysisTaskHLTEMCAL.cxx\r
+ @author Zhongbao Yin, Kalliopi Kanaki, Svein Lindal\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
+#include "AliESDCaloCluster.h"\r
+\r
+#include "AliAnalysisTask.h"\r
+#include "AliAnalysisManager.h"\r
+#include "AliAnalysisTaskHLTEMCAL.h"\r
+\r
+\r
+ClassImp(AliAnalysisTaskHLTEMCAL)\r
+\r
+\r
+//===========================================================================================\r
+\r
+AliAnalysisTaskHLTEMCAL::AliAnalysisTaskHLTEMCAL(const char *name) : AliAnalysisTaskHLTCalo(name)\r
+{\r
+ // Constructor\r
+}\r
+\r
+void AliAnalysisTaskHLTEMCAL::CreateSpecificStuff(TList * fOutputList){\r
+ return;\r
+}\r
+\r
+\r
+void AliAnalysisTaskHLTEMCAL::DoSpecificStuff(AliESDEvent * evESD, AliESDEvent * evHLTESD) {\r
+ return;\r
+}\r
+\r
+Int_t AliAnalysisTaskHLTEMCAL::GetClusters(AliESDEvent * event, TRefArray * clusters) {\r
+ return event->GetEMCALClusters(clusters);\r
+}\r
+\r
+Bool_t AliAnalysisTaskHLTEMCAL::IsThisDetector(AliESDCaloCluster * cluster) {\r
+ return cluster->IsEMCAL();\r
+}\r
--- /dev/null
+// $Id: AliAnalysisTaskHLTEMCAL.h 40285 2010-04-09 14:04:51Z kkanaki $\r
+\r
+#ifndef ALIANALYSISTASKHLTEMCAL_H\r
+#define ALIANALYSISTASKHLTEMCAL_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 AliAnalysisTaskHLTTPC.h\r
+ @author Zhongbao Yin, Kalliopi Kanaki\r
+ @date\r
+ @brief An analysis task to compare the offline and HLT esd trees\r
+*/\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 "AliAnalysisTaskHLTCalo.h"\r
+\r
+class AliAnalysisTaskHLTEMCAL : public AliAnalysisTaskHLTCalo {\r
+ \r
+public: \r
+ AliAnalysisTaskHLTEMCAL(const char *name);\r
+ virtual ~AliAnalysisTaskHLTEMCAL() {}\r
+ \r
+private:\r
+ \r
+\r
+ /** copy constructor */\r
+ AliAnalysisTaskHLTEMCAL(const AliAnalysisTaskHLTEMCAL&); \r
+ /** assignment operator */\r
+ AliAnalysisTaskHLTEMCAL& operator=(const AliAnalysisTaskHLTEMCAL&); \r
+ \r
+ void CreateSpecificStuff(TList * fOutputList);\r
+ void DoSpecificStuff(AliESDEvent * evESD, AliESDEvent * evHLTESD);\r
+ \r
+ Int_t GetClusters(AliESDEvent * event, TRefArray * clusters);\r
+ Bool_t IsThisDetector(AliESDCaloCluster * cluster);\r
+\r
+\r
+ ClassDef(AliAnalysisTaskHLTEMCAL, 0);\r
+};\r
+\r
+#endif\r
//* *\r
//* Primary Authors: Zhongbao Yin <zbyin@mail.ccnu.edu.cn>, *\r
//* Kalliopi Kanaki <Kalliopi.Kanaki@ift.uib.no> *\r
+//* Svein Lindal <svein.lindal@gmail.com> *\r
//* for The ALICE HLT Project. *\r
//* *\r
//* Permission to use, copy, modify and distribute this software and its *\r
//**************************************************************************\r
\r
/** @file AliAnalysisTaskHLTPHOS.cxx\r
- @author Zhongbao Yin, Kalliopi Kanaki\r
+ @author Zhongbao Yin, Kalliopi Kanaki, Svein Lindal\r
@date\r
@brief\r
*/\r
#include "AliESDEvent.h"\r
#include "AliESDRun.h"\r
#include "AliESDInputHandler.h"\r
+#include "AliESDCaloCluster.h"\r
\r
#include "AliAnalysisTask.h"\r
#include "AliAnalysisManager.h"\r
\r
ClassImp(AliAnalysisTaskHLTPHOS)\r
\r
+\r
//===========================================================================================\r
\r
-AliAnalysisTaskHLTPHOS::AliAnalysisTaskHLTPHOS(const char *name)\r
- : \r
- AliAnalysisTaskSE(name)\r
- ,fESDRun(0)\r
- ,fOutputList(0)\r
- ,fHistOnlTrk2PHOS(0)\r
- ,fHistOfflTrk2PHOS(0)\r
- ,fHistOfflTrk2PHOSTrig(0)\r
- ,fHistOfflTrk2PHOSNoTrig(0)\r
- ,fNevt(0)\r
- ,fTrgClsArray(0)\r
+AliAnalysisTaskHLTPHOS::AliAnalysisTaskHLTPHOS(const char *name) : AliAnalysisTaskHLTCalo(name)\r
+ ,fHistOnlTrk2PHOS(0)\r
+ ,fHistOfflTrk2PHOS(0)\r
+ ,fHistOfflTrk2PHOSTrig(0)\r
+ ,fHistOfflTrk2PHOSNoTrig(0)\r
{\r
// Constructor\r
\r
// DefineInput(0, TChain::Class());\r
// Output slot #0 writes into a TH1 container\r
\r
- DefineOutput(1, TList::Class());\r
+ // DefineOutput(1, TList::Class());\r
}\r
\r
const Float_t AliAnalysisTaskHLTPHOS::fgkEtaMin = -0.12; \r
\r
//----------------------------------------------------------------------------------------------------\r
\r
-void AliAnalysisTaskHLTPHOS::UserCreateOutputObjects(){\r
-// Create histograms\r
-\r
- OpenFile(1);\r
+void AliAnalysisTaskHLTPHOS::CreateSpecificStuff(TList * fOutputList){\r
\r
- fOutputList = new TList();\r
- fOutputList->SetName(GetName());\r
\r
// --------------- define histograms ---------------------//\r
\r
\r
}\r
\r
-void AliAnalysisTaskHLTPHOS::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
-// for(Int_t i = 0; i < fTrgClsArray->GetEntries(); i++){ \r
-// TString str = ((TObjString *)fTrgClsArray->At(i))->GetString(); \r
-// (fHistTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); \r
-// (fHistHLTTrigger->GetXaxis())->SetBinLabel(i+1, str.Data()); \r
-// } \r
- \r
- evESD = NULL;\r
-}\r
\r
-void AliAnalysisTaskHLTPHOS::UserExec(Option_t *){\r
+void AliAnalysisTaskHLTPHOS::DoSpecificStuff(AliESDEvent * evESD, AliESDEvent * evHLTESD) {\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
Double_t b = evESD->GetMagneticField();\r
\r
- Double_t pos[] = { 0., 0., 0.};\r
- AliVertex *vtx = new AliVertex(pos, 0., 0);\r
+ //Double_t pos[] = { 0., 0., 0.};\r
+ //AliVertex *vtx = new AliVertex(pos, 0., 0);\r
\r
// for(Int_t i = 0; i<fTrgClsArray->GetEntries(); i++){\r
// if((evESD->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString())) fHistTrigger->Fill(i);\r
// } \r
// }\r
\r
+\r
+\r
if(evHLTESD->IsHLTTriggerFired()){\r
- for(Int_t i = 0; i < evHLTESD->GetNumberOfTracks(); i++){\r
+ for(Int_t i = 0; i < evHLTESD->GetNumberOfTracks(); i++){\r
AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i);\r
\r
TVector3 v; \r
|| IsInPHOS(3, HLTesdTrk, b)\r
|| IsInPHOS(4, HLTesdTrk, b) ) cout<<"Good Trigger"<<endl;\r
*/ \r
- \r
+ \r
+\r
+ \r
}\r
}else{\r
+\r
for(Int_t i = 0; i < evHLTESD->GetNumberOfTracks(); i++){ \r
AliESDtrack * HLTesdTrk = evHLTESD->GetTrack(i); \r
-\r
TVector3 v; \r
if(IsInPHOS(2, HLTesdTrk, b, v)){ \r
Float_t phi = v.Phi(); \r
if(phi<0) phi += 2.*TMath::Pi(); \r
fHistOnlTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg()); \r
} \r
- } \r
+ }\r
}\r
- \r
- if(evHLTESD->IsHLTTriggerFired()){\r
\r
+ if(evHLTESD->IsHLTTriggerFired()){\r
+ \r
for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ \r
AliESDtrack * esdTrk = evESD->GetTrack(i); \r
\r
if(phi<0) phi += 2.*TMath::Pi();\r
fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg());\r
fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());\r
- //cout<<"Event in PHOS 2: "<<fNevt<<endl;\r
}else if(IsInPHOS(3, esdTrk, b, v)){\r
Float_t phi = v.Phi(); \r
if(phi<0) phi += 2.*TMath::Pi(); \r
fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg()); \r
fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());\r
- //cout<<"Event in PHOS 3: "<<fNevt<<endl;\r
}else if( IsInPHOS(4, esdTrk, b, v) ){\r
Float_t phi = v.Phi(); \r
if(phi<0) phi += 2.*TMath::Pi(); \r
fHistOfflTrk2PHOSTrig->Fill(v.Eta(), phi*TMath::RadToDeg());\r
fHistOfflTrk2PHOS->Fill(v.Eta(), phi*TMath::RadToDeg());\r
- //cout<<"Event in PHOS 4: "<<fNevt<<endl;\r
}\r
}\r
} else {\r
-\r
+ \r
for(Int_t i = 0; i < evESD->GetNumberOfTracks(); i++){ \r
AliESDtrack * esdTrk = evESD->GetTrack(i); \r
\r
} \r
}\r
\r
- fNevt++;\r
- delete vtx;\r
\r
- // Post output data.\r
- PostData(1, fOutputList);\r
+ \r
+ //cout << "here" << endl;\r
+\r
+ //Int_t nc = evHLTESD->GetPHOSClusters(fClustersArray);\r
+ //Int_t nc = evHLTESD->GetEMCALClusters(fClustersArray);\r
+ \r
+ //for(int i = 0; i < \r
+ // cout << nc << " ";\r
+ \r
+ // for(int i = 0; i < evHLTESD->GetNumberOfCaloClusters(); i++) {\r
+ // AliESDCaloCluster * c = evHLTESD->GetCaloCluster(i); \r
+ // cout << c->IsPHOS() << "i ";\r
+ // }\r
+ \r
\r
- }\r
+ \r
\r
-void AliAnalysisTaskHLTPHOS::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
\r
- // Draw result to the screen\r
- // Called once at the end of the query\r
+Int_t AliAnalysisTaskHLTPHOS::GetClusters(AliESDEvent * event, TRefArray * clusters) {\r
+ return event->GetPHOSClusters(clusters);\r
+}\r
\r
- // TCanvas *c1 = new TCanvas("AliAnalysisTaskHLTPHOS","Trigger",10,10,510,510);\r
- //fHistTrigger->DrawCopy("E");\r
- \r
+Bool_t AliAnalysisTaskHLTPHOS::IsThisDetector(AliESDCaloCluster * cluster) {\r
+ return cluster->IsPHOS();\r
}\r
\r
+\r
Bool_t AliAnalysisTaskHLTPHOS::IsInPHOS(Int_t iMod, AliESDtrack * trk, Float_t b, TVector3& v){\r
\r
+\r
Double_t normVector[3] = {fgkNormX[iMod], fgkNormY[iMod], 0};\r
\r
Double_t point[3] = {fgkInitPosX[iMod], fgkInitPosY[iMod], 0};\r
class AliESDRun;\r
class TObjArray;\r
\r
-#include "AliAnalysisTaskSE.h"\r
+#include "AliAnalysisTaskHLTCalo.h"\r
\r
-class AliAnalysisTaskHLTPHOS : public AliAnalysisTaskSE {\r
+class AliAnalysisTaskHLTPHOS : public AliAnalysisTaskHLTCalo {\r
\r
- public: \r
- AliAnalysisTaskHLTPHOS(const char *name);\r
- virtual ~AliAnalysisTaskHLTPHOS() {}\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
- TH2F *fHistOnlTrk2PHOS; //! track to PHOS 2,3,4 modules in (eta, phi)\r
- TH2F *fHistOfflTrk2PHOS; //! \r
- TH2F *fHistOfflTrk2PHOSTrig; //!\r
- TH2F *fHistOfflTrk2PHOSNoTrig; //!\r
-\r
- Int_t fNevt;\r
- TObjArray *fTrgClsArray;\r
-\r
- static const Float_t fgkPhiMin[5];\r
- static const Float_t fgkPhiMax[5];\r
- static const Float_t fgkEtaMin;\r
- static const Float_t fgkEtaMax;\r
- static const Float_t fgkNormX[5];\r
- static const Float_t fgkNormY[5];\r
- static const Float_t fgkInitPosX[5];\r
- static const Float_t fgkInitPosY[5];\r
-\r
- /** copy constructor */\r
- AliAnalysisTaskHLTPHOS(const AliAnalysisTaskHLTPHOS&); \r
- /** assignment operator */\r
- AliAnalysisTaskHLTPHOS& operator=(const AliAnalysisTaskHLTPHOS&); \r
-\r
- Bool_t IsInPHOS(Int_t iMod, AliESDtrack * trk, Float_t b, TVector3& v);\r
-\r
- ClassDef(AliAnalysisTaskHLTPHOS, 0);\r
+public: \r
+ AliAnalysisTaskHLTPHOS(const char *name);\r
+ virtual ~AliAnalysisTaskHLTPHOS() {}\r
+ \r
+private:\r
+ \r
+\r
+ TH2F *fHistOnlTrk2PHOS; //! track to PHOS 2,3,4 modules in (eta, phi)\r
+ TH2F *fHistOfflTrk2PHOS; //! \r
+ TH2F *fHistOfflTrk2PHOSTrig; //!\r
+ TH2F *fHistOfflTrk2PHOSNoTrig; //!\r
+\r
+ static const Float_t fgkPhiMin[5];\r
+ static const Float_t fgkPhiMax[5];\r
+ static const Float_t fgkEtaMin;\r
+ static const Float_t fgkEtaMax;\r
+ static const Float_t fgkNormX[5];\r
+ static const Float_t fgkNormY[5];\r
+ static const Float_t fgkInitPosX[5];\r
+ static const Float_t fgkInitPosY[5];\r
+\r
+ /** copy constructor */\r
+ AliAnalysisTaskHLTPHOS(const AliAnalysisTaskHLTPHOS&); \r
+ /** assignment operator */\r
+ AliAnalysisTaskHLTPHOS& operator=(const AliAnalysisTaskHLTPHOS&); \r
+\r
+ Bool_t IsInPHOS(Int_t iMod, AliESDtrack * trk, Float_t b, TVector3& v);\r
+ void CreateSpecificStuff(TList * fOutputList);\r
+ void DoSpecificStuff(AliESDEvent * evESD, AliESDEvent * evHLTESD);\r
+\r
+ Bool_t IsThisDetector(AliESDCaloCluster * cluster);\r
+ Int_t GetClusters(AliESDEvent * event, TRefArray * clusters);\r
+\r
+ ClassDef(AliAnalysisTaskHLTPHOS, 0);\r
};\r
\r
#endif\r
*/
void compare_HLT_offline_local(TString file, const char* detectorTask="global"){
+
+ cout <<"balle"<<endl;
TStopwatch timer;
timer.Start();
gSystem->Load("libANALYSIS.so");
gSystem->Load("libANALYSISalice.so");
gSystem->Load("libHLTbase.so");
+
gROOT->ProcessLine(".include $ALICE_ROOT/include");
- Bool_t bTPC=kFALSE, bPHOS=kFALSE, bITS=kFALSE, bGLOBAL=kFALSE;
+ Bool_t bTPC=kFALSE, bPHOS=kFALSE, bITS=kFALSE, bGLOBAL=kFALSE, bEMCAL = kFALSE;
TString allArgs = detectorTask;
TString argument;
bPHOS = kTRUE;
continue;
}
- if(argument.CompareTo("its", TString::kIgnoreCase)==0){
+ else if(argument.CompareTo("emcal", TString::kIgnoreCase)==0){
+ bEMCAL = kTRUE;
+ continue;
+ }
+
+ if(argument.CompareTo("its", TString::kIgnoreCase)==0){
bITS = kTRUE;
continue;
}
- if(argument.CompareTo("global", TString::kIgnoreCase)==0){
+ if(argument.CompareTo("global", TString::kIgnoreCase)==0){
bGLOBAL = kTRUE;
continue;
}
if(argument.CompareTo("all",TString::kIgnoreCase)==0){
bTPC = kTRUE;
bPHOS = kTRUE;
+ bEMCAL = kTRUE;
bITS = kTRUE;
- bGLOBAL = kTRUE;
+ bGLOBAL = kTRUE;
continue;
}
else break;
//-------------- Compile the analysis tasks ---------- //
- if(bTPC) gROOT->LoadMacro("AliAnalysisTaskHLTTPC.cxx+");
- if(bPHOS) gROOT->LoadMacro("AliAnalysisTaskHLTPHOS.cxx+");
+ if(bTPC) gROOT->LoadMacro("AliAnalysisTaskHLTTPC.cxx+");
+
+ if(bPHOS) {
+ AliHLTSystem * pHLT = AliHLTPluginBase::GetInstance();
+ pHLT->LoadComponentLibraries("libHLTbase");
+ pHLT->LoadComponentLibraries("libAliHLTUtil");
+ pHLT->LoadComponentLibraries("libAliHLTGlobal");
+ gROOT->LoadMacro("AliAnalysisTaskHLTCalo.cxx+");
+ gROOT->LoadMacro("AliAnalysisTaskHLTPHOS.cxx+");
+ }
+
+ if(bEMCAL) {
+ AliHLTSystem * pHLT = AliHLTPluginBase::GetInstance();
+ pHLT->LoadComponentLibraries("libHLTbase");
+ pHLT->LoadComponentLibraries("libAliHLTUtil");
+ pHLT->LoadComponentLibraries("libAliHLTGlobal");
+ gROOT->LoadMacro("AliAnalysisTaskHLTCalo.cxx+");
+ gROOT->LoadMacro("AliAnalysisTaskHLTEMCAL.cxx+");
+ }
+
if(bITS) gROOT->LoadMacro("AliAnalysisTaskHLTITS.cxx+");
if(bGLOBAL) gROOT->LoadMacro("AliAnalysisTaskHLT.cxx+");
mgr->ConnectInput(taskPHOS,0,mgr->GetCommonInputContainer());
mgr->ConnectOutput(taskPHOS,1,coutput2);
}
+
+ if(bEMCAL){
+ AliAnalysisTaskHLTEMCAL *taskEMCAL = new AliAnalysisTaskHLTEMCAL("offhlt_comparison_EMCAL");
+ mgr->AddTask(taskEMCAL);
+ AliAnalysisDataContainer *coutput5 = mgr->CreateContainer("emcal_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-EMCAL-comparison.root");
+ mgr->ConnectInput(taskEMCAL,0,mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(taskEMCAL,1,coutput5);
+ }
if(bITS){
AliAnalysisTaskHLTITS *taskITS = new AliAnalysisTaskHLTITS("offhlt_comparison_ITS");