]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
- added the ITS analysis task and updated the running macro
authorkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 9 Apr 2010 15:49:25 +0000 (15:49 +0000)
committerkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 9 Apr 2010 15:49:25 +0000 (15:49 +0000)
HLT/QA/tasks/AliAnalysisTaskHLTITS.cxx [new file with mode: 0644]
HLT/QA/tasks/AliAnalysisTaskHLTITS.h [new file with mode: 0644]
HLT/QA/tasks/macros/compare-HLT-offline-local.C

diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTITS.cxx b/HLT/QA/tasks/AliAnalysisTaskHLTITS.cxx
new file mode 100644 (file)
index 0000000..9ae073d
--- /dev/null
@@ -0,0 +1,187 @@
+// $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
diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTITS.h b/HLT/QA/tasks/AliAnalysisTaskHLTITS.h
new file mode 100644 (file)
index 0000000..d00a3e2
--- /dev/null
@@ -0,0 +1,61 @@
+// $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
index 191d6dbfe1dbb564c1aa39c789dd0e73d864816f..e6c6649ab3ec8982af2a458ab601bedf443bd01d 100644 (file)
@@ -40,7 +40,7 @@ void compare_HLT_offline_local(const char* detectorTask="all"){
   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;
@@ -60,10 +60,16 @@ void compare_HLT_offline_local(const char* detectorTask="all"){
            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;
          }
@@ -75,6 +81,7 @@ void compare_HLT_offline_local(const char* detectorTask="all"){
   //-------------- 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"); 
@@ -137,6 +144,14 @@ void compare_HLT_offline_local(const char* detectorTask="all"){
      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);