]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
-Added base Calo QA class.
authorslindal <slindal@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 18 Jun 2010 07:18:18 +0000 (07:18 +0000)
committerslindal <slindal@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 18 Jun 2010 07:18:18 +0000 (07:18 +0000)
-Moved Phos functionality to Calo
-Added Emcal class
-Added the output of the HLT Calo physics histogram producers to QA

HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx [new file with mode: 0644]
HLT/QA/tasks/AliAnalysisTaskHLTCalo.h [new file with mode: 0644]
HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.cxx [new file with mode: 0644]
HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.h [new file with mode: 0644]
HLT/QA/tasks/AliAnalysisTaskHLTPHOS.cxx
HLT/QA/tasks/AliAnalysisTaskHLTPHOS.h
HLT/QA/tasks/macros/compare-HLT-offline-local.C

diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx b/HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx
new file mode 100644 (file)
index 0000000..9c06fd9
--- /dev/null
@@ -0,0 +1,246 @@
+// $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
diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTCalo.h b/HLT/QA/tasks/AliAnalysisTaskHLTCalo.h
new file mode 100644 (file)
index 0000000..753493d
--- /dev/null
@@ -0,0 +1,78 @@
+// $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
diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.cxx b/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.cxx
new file mode 100644 (file)
index 0000000..e18b476
--- /dev/null
@@ -0,0 +1,74 @@
+// $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
diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.h b/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.h
new file mode 100644 (file)
index 0000000..8fea846
--- /dev/null
@@ -0,0 +1,52 @@
+// $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
index 78d91a47bca4c9a9ef52c75e2f3cabc180b63dd3..811da7d3e510c3bc20c11f73ca4104f31d4c1653 100644 (file)
@@ -6,6 +6,7 @@
 //*                                                                        *\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
@@ -18,7 +19,7 @@
 //**************************************************************************\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
@@ -38,6 +39,7 @@
 #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
@@ -67,7 +64,7 @@ AliAnalysisTaskHLTPHOS::AliAnalysisTaskHLTPHOS(const char *name)
   // 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
@@ -81,13 +78,8 @@ const Float_t AliAnalysisTaskHLTPHOS::fgkInitPosY[5] = {-352.38, -432.259, -460,
 \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
@@ -106,48 +98,14 @@ void AliAnalysisTaskHLTPHOS::UserCreateOutputObjects(){
 \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
@@ -160,8 +118,10 @@ void AliAnalysisTaskHLTPHOS::UserExec(Option_t *){
 //      } \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
@@ -184,12 +144,14 @@ void AliAnalysisTaskHLTPHOS::UserExec(Option_t *){
         || 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
@@ -204,11 +166,11 @@ void AliAnalysisTaskHLTPHOS::UserExec(Option_t *){
           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
@@ -218,23 +180,20 @@ void AliAnalysisTaskHLTPHOS::UserExec(Option_t *){
        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
@@ -261,31 +220,38 @@ void AliAnalysisTaskHLTPHOS::UserExec(Option_t *){
     }    \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
index fd43ad44dc9284190dfaab01560936d29afd516f..8851086cd0f37ad05852119d910c217c7c1fda33 100644 (file)
@@ -23,49 +23,44 @@ class AliESDtrack;
 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
index 35d5325e701da9da45538865110b118627713462..c7dfd870b23879c3c836731a40b0ade91152d594 100644 (file)
@@ -20,6 +20,8 @@
  */
 
 void compare_HLT_offline_local(TString file, const char* detectorTask="global"){
+
+  cout <<"balle"<<endl;
  
   TStopwatch timer;
   timer.Start();
@@ -37,10 +39,11 @@ void compare_HLT_offline_local(TString file, const char* detectorTask="global"){
   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;
@@ -59,19 +62,25 @@ void compare_HLT_offline_local(TString file, const char* detectorTask="global"){
            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;
@@ -80,8 +89,26 @@ void compare_HLT_offline_local(TString file, const char* detectorTask="global"){
     
   
   //-------------- 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+");
   
@@ -121,6 +148,14 @@ void compare_HLT_offline_local(TString file, const char* detectorTask="global"){
      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");