]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
- added new QA task for HLT and offline tree comparison based on THnSparse objects...
authorkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 14 Dec 2010 15:20:18 +0000 (15:20 +0000)
committerkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 14 Dec 2010 15:20:18 +0000 (15:20 +0000)
- added new option "cb" to enable it in the running macro

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

diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTCentralBarrel.cxx b/HLT/QA/tasks/AliAnalysisTaskHLTCentralBarrel.cxx
new file mode 100644 (file)
index 0000000..f10b6a1
--- /dev/null
@@ -0,0 +1,386 @@
+// $Id$
+//**************************************************************************
+//* This file is property of and copyright by the ALICE HLT Project        *
+//* ALICE Experiment at CERN, All rights reserved.                         *
+//*                                                                        *
+//* Primary Authors: Kalliopi Kanaki <Kalliopi.Kanaki@ift.uib.no>          *
+//*                  for The ALICE HLT Project.                            *
+//*                                                                        *
+//* Permission to use, copy, modify and distribute this software and its   *
+//* documentation strictly for non-commercial purposes is hereby granted   *
+//* without fee, provided that the above copyright notice appears in all   *
+//* copies and that both the copyright notice and this permission notice   *
+//* appear in the supporting documentation. The authors make no claims     *
+//* about the suitability of this software for any purpose. It is          *
+//* provided "as is" without express or implied warranty.                  *
+//**************************************************************************
+
+
+/** @file  AliAnalysisTaskHLTCentralBarrel.cxx  
+    @author Per Ivar Lønne, Hege Erdal, Kalliopi Kanaki
+    @date 
+    @brief An analysis task containing
+    loops over HLT and offline ESD trees for comparing
+    event and track properties
+*/
+
+#include <iostream>
+
+#include "AliAnalysisTaskHLTCentralBarrel.h"
+#include "AliESDEvent.h"
+#include "AliESDtrack.h"
+#include "AliESDInputHandler.h"
+#include "AliTracker.h"
+#include "AliESDVZERO.h"
+#include "AliHLTGlobalTriggerDecision.h"
+
+#include "TAxis.h"
+#include "TString.h"
+#include "TText.h"
+#include "TTimeStamp.h"
+
+ClassImp(AliAnalysisTaskHLTCentralBarrel)
+//_______________________________________________________________________________________________//
+
+AliAnalysisTaskHLTCentralBarrel::AliAnalysisTaskHLTCentralBarrel()
+:AliAnalysisTaskSE()
+  ,fUseHLTTrigger(kFALSE)   
+  ,fOutputList(0)
+  ,fEventOFF(0)
+  ,fEventHLT(0)
+  ,fTrackOFF(0) 
+  ,fTrackHLT(0)
+  ,fTextBox(0)
+{
+  // Constructor
+  // Define input and output slots here
+  // Input slot #0 works with a TChain
+  // DefineInput(0, TChain::Class());
+  // Output slot #0 writes into a TH1 container
+  
+  //DefineOutput(1, TList::Class());
+}
+
+AliAnalysisTaskHLTCentralBarrel::AliAnalysisTaskHLTCentralBarrel(const char *name)
+:AliAnalysisTaskSE(name)    
+  ,fUseHLTTrigger(kFALSE)   
+  ,fOutputList(0)
+  ,fEventOFF(0)
+  ,fEventHLT(0)
+  ,fTrackOFF(0) 
+  ,fTrackHLT(0) 
+  ,fTextBox(0)
+{
+  // Constructor
+  // Define input and output slots here
+  // Input slot #0 works with a TChain
+  //DefineInput(0, TChain::Class());
+  // Output slot #0 writes into a TH1 container
+  
+  DefineOutput(1, TList::Class());
+}
+
+AliAnalysisTaskHLTCentralBarrel::~AliAnalysisTaskHLTCentralBarrel(){
+  // destructor
+}
+
+void AliAnalysisTaskHLTCentralBarrel::UserCreateOutputObjects(){
+  // Create THnSpare objects
+  
+  OpenFile(1);  
+  fOutputList = new TList();
+  fOutputList->SetName(GetName());
+  
+  static const int sizeEvent = 6;
+  int    binsEvent[sizeEvent] = { 200, 200, 250,  2000,  2000, 2 };
+  double minEvent [sizeEvent] = {  -2,  -2, -30,     0,     0, 0 };
+  double maxEvent [sizeEvent] = {   2,   2,  30, 20000, 20000, 2 };
+  
+  fEventHLT = CreateEventTHnSparse("fEventHLT",sizeEvent,binsEvent,minEvent,maxEvent);
+  fEventOFF = CreateEventTHnSparse("fEventOFF",sizeEvent,binsEvent,minEvent,maxEvent);
+  
+  static const int sizeTrack = 13;
+  
+  Int_t    binsTrack[sizeTrack] = {1500, 200, 200, 200, 200,  400,  400,    3,  400,  400, 6,  2000, 2 };
+  Double_t minTrack [sizeTrack] = {   0,   0,  -1,  -3,  -1, -100, -100, -1.5, -100, -100, 0,     0, 0 };
+  Double_t maxTrack [sizeTrack] = { 150, 200,   4,   3,   7,  100,  100,  1.5,  100,  100, 6, 20000, 2 };
+   
+  fTrackHLT = CreateTrackTHnSparse("fTrackHLT",sizeTrack,binsTrack,minTrack,maxTrack);
+  fTrackOFF = CreateTrackTHnSparse("fTrackOFF",sizeTrack,binsTrack,minTrack,maxTrack);
+     
+  fTextBox = new TText();  
+  fOutputList->Add(fEventOFF);
+  fOutputList->Add(fEventHLT);
+  fOutputList->Add(fTrackOFF);
+  fOutputList->Add(fTrackHLT);
+  fOutputList->Add(fTextBox);
+}
+
+void AliAnalysisTaskHLTCentralBarrel::NotifyRun(){
+  AliESDEvent *esdOFF = dynamic_cast<AliESDEvent*>(InputEvent());
+  TTimeStamp* timestamp = new TTimeStamp(esdOFF->GetTimeStamp());
+  fTextBox->SetName("text");
+  
+  TString s = Form("Run %d, Date %d", esdOFF->GetRunNumber(), timestamp->GetDate());
+  fTextBox->SetTitle(s);
+}
+
+void AliAnalysisTaskHLTCentralBarrel::UserExec(Option_t *){
+// see header for documentation
+    
+  AliESDEvent *esdOFF = dynamic_cast<AliESDEvent*>(InputEvent());  
+  if(!esdOFF){
+     printf("ERROR: offline ESD is not available.\n");
+     return;
+  }
+      
+  AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(fInputHandler);
+  AliESDEvent *esdHLT = NULL;   
+
+  if(esdH) esdHLT = esdH->GetHLTEvent();  
+  if(!esdHLT){
+     printf("ERROR: HLT ESD is not available.\n");
+     return;
+  }
+    
+  if(fUseHLTTrigger && !((AliHLTGlobalTriggerDecision*)esdHLT->GetHLTTriggerDecision())->Result()) return;
+  
+  if(fUseCentrality){
+    Int_t centbin = CalculateCentrality(esdHLT);
+    Printf("Centrality bin = %d", centbin);
+  }
+
+  
+  //============================ OFFLINE =============================//
+
+  const AliESDVertex *vertOFF = esdOFF->GetPrimaryVertexTracks();
+  
+  Double_t bfield = esdOFF->GetMagneticField();
+  Int_t nr_tracksOFF = 0;
+  
+  if(esdOFF->GetEventSpecie()==16) return;
+   
+  for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){
+      AliESDtrack *esdTrackOFF = esdOFF->GetTrack(i);
+      if (!esdTrackOFF) continue;
+      if(!(esdTrackOFF->GetStatus()&AliESDtrack::kTPCin)) continue;
+      nr_tracksOFF++; 
+  }
+         
+  for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){
+      
+      AliESDtrack *esdTrackOFF = esdOFF->GetTrack(i);
+      if (!esdTrackOFF) continue;
+      if(!(esdTrackOFF->GetStatus()&AliESDtrack::kTPCin)) continue;
+
+      //DCA calculations(from offline)
+      Double_t x[3];
+      Double_t b[3]; 
+      esdTrackOFF->GetXYZ(x);
+     
+      AliTracker::GetBxByBz(x,b);
+      Bool_t isOK = esdTrackOFF->RelateToVertexTPCBxByBz(vertOFF, b, kVeryBig);
+      if(!isOK) continue;
+       
+      const AliExternalTrackParam *track = esdTrackOFF->GetTPCInnerParam();
+      if(!track) continue;
+       
+      Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
+      if(vertOFF->GetX()==0 && vertOFF->GetY()==0 && vertOFF->GetZ()==0 ){
+        dca[0]=-99;
+        dca[1]=-99;
+      }
+      else esdTrackOFF->GetImpactParametersTPC(dca,cov);
+
+      Float_t DCAr =-99, DCAz = -99.;   
+      Double_t trackOFF[] = {
+                               TMath::Abs(esdTrackOFF->Pt()) 
+                              ,esdTrackOFF->GetTPCNcls()      
+                              ,esdTrackOFF->Theta()           
+                              ,esdTrackOFF->Eta()             
+                              ,esdTrackOFF->Phi()             
+                              ,dca[0]                         
+                              ,dca[1]                         
+                              ,esdTrackOFF->Charge() 
+                              ,DCAr                           
+                              ,DCAz                           
+                              ,esdTrackOFF->GetNcls(0)
+                              ,nr_tracksOFF
+                              ,vertOFF->GetStatus()
+                           };
+      fTrackOFF->Fill(trackOFF);
+    }
+    
+    Double_t eventOFF[] = { vertOFF->GetX(), vertOFF->GetY(), vertOFF->GetZ(), vertOFF->GetNContributors(), nr_tracksOFF, vertOFF->GetStatus()};
+    fEventOFF->Fill(eventOFF);  
+    
+  
+  
+  //======================================== HLT ==========================================//
+
+  Int_t nr_tracksHLT = 0;  
+  if(esdHLT->GetEventSpecie()==16) return;
+  const AliESDVertex *vertHLT = esdHLT->GetPrimaryVertexTracks();
+  
+  for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){
+      AliESDtrack *esdTrackHLT = esdHLT->GetTrack(i);
+      if (!esdTrackHLT) continue;
+      if(!(esdTrackHLT->GetStatus()&AliESDtrack::kTPCin)) continue;
+      nr_tracksHLT++; 
+  }
+  
+  Double_t eventHLT[] = { vertHLT->GetX(), vertHLT->GetY(), vertHLT->GetZ(), vertHLT->GetNContributors(), nr_tracksHLT, vertHLT->GetStatus()};
+  fEventHLT->Fill(eventHLT);  
+
+  for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){
+      
+      AliESDtrack *esdTrackHLT = esdHLT->GetTrack(i);
+      if(!esdTrackHLT) continue;
+      if(!(esdTrackHLT->GetStatus()&AliESDtrack::kTPCin)) continue;
+      
+      //DCA calculations
+      Float_t DCAr=-99;
+      Float_t DCAz=-99;
+      Float_t dca[2];
+      if(vertHLT->GetX()==0 && vertHLT->GetY()==0 && vertHLT->GetZ() ==0 ){
+       dca[0]=-99;
+       dca[1]=-99;
+      }
+      else{
+       //Calculating DCA "old" fashion
+       esdTrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), esdHLT->GetPrimaryVertex()->GetZv(), bfield, dca);
+       // plotting the DCA calculated by Sergey 
+       esdTrackHLT->GetImpactParametersTPC(DCAr,DCAz);
+      }
+       
+      Double_t trackHLT[] = {
+                              TMath::Abs(esdTrackHLT->Pt())
+                             ,esdTrackHLT->GetTPCNcls()    
+                             ,esdTrackHLT->Theta()         
+                             ,esdTrackHLT->Eta()           
+                             ,esdTrackHLT->Phi()           
+                             ,DCAr                         
+                             ,DCAz                         
+                             ,esdTrackHLT->Charge()        
+                             ,dca[0]                       
+                             ,dca[1]                       
+                             ,esdTrackHLT->GetNcls(0)
+                             ,nr_tracksHLT
+                             ,vertHLT->GetStatus() 
+                           };
+      fTrackHLT->Fill(trackHLT);      
+  }               
+  // Post output data.
+  PostData(1, fOutputList);
+}
+
+void AliAnalysisTaskHLTCentralBarrel::Terminate(Option_t *){
+  // see header file of AliAnalysisTask for documentation 
+}
+
+Int_t AliAnalysisTaskHLTCentralBarrel::CalculateCentrality(AliESDEvent* esd){
+//see header for documentation
+
+  Int_t centrality =-1;
+
+  AliESDVZERO* esdV0 = esd->GetVZEROData();
+  //AliESDZDC* esdZDC = esd->GetZDCData();
+  //Int_t partZDC = esdZDC->GetZDCParticipants();
+
+  Float_t multV0 = esdV0->GetMTotV0A() + esdV0->GetMTotV0C();
+    
+  if (      multV0 >=    0.  && multV0 <=   124.5 ) centrality = 90;
+  else if ( multV0 >   124.5 && multV0 <=   274.5 ) centrality = 80;
+  else if ( multV0 >   274.5 && multV0 <=   574.5 ) centrality = 70;
+  else if ( multV0 >   574.5 && multV0 <=  1224.5 ) centrality = 60;
+  else if ( multV0 >  1224.5 && multV0 <=  2174.5 ) centrality = 50;
+  else if ( multV0 >  2174.5 && multV0 <=  3624.5 ) centrality = 40;
+  else if ( multV0 >  3624.5 && multV0 <=  5574.5 ) centrality = 30;
+  else if ( multV0 >  5574.5 && multV0 <=  8274.5 ) centrality = 20;
+  else if ( multV0 >  8274.5 && multV0 <= 12024.5 ) centrality = 10;
+  else if ( multV0 > 12024.5 && multV0 <= 14674.5 ) centrality = 5;
+  else if ( multV0 > 14674.5 && multV0 <= 19449.5 ) centrality = 0;
+
+  return centrality;
+}
+
+THnSparseF* AliAnalysisTaskHLTCentralBarrel::CreateEventTHnSparse(const char* name, Int_t size, const Int_t* bins, Double_t* min, Double_t* max){
+//see header for documentation                     
+  
+  THnSparseF *thn = new THnSparseF(name,"",size,bins,min,max);
+  thn->GetAxis(0)->SetTitle("x (cm)");
+  thn->GetAxis(1)->SetTitle("y (cm)");
+  thn->GetAxis(2)->SetTitle("z (cm)");
+  thn->GetAxis(3)->SetTitle("number of contributors");
+  thn->GetAxis(4)->SetTitle("track multiplicity");
+  thn->GetAxis(5)->SetTitle("vertex status"); 
+  return thn;
+}
+
+THnSparseF* AliAnalysisTaskHLTCentralBarrel::CreateTrackTHnSparse(const char* name, Int_t size, const Int_t* bins, Double_t* min, Double_t* max){
+//see header for documentation                     
+  
+  THnSparseF *thn = new THnSparseF(name,"",size,bins,min,max);
+  thn->GetAxis(0)->SetTitle("transverse momentum");
+  thn->GetAxis(1)->SetTitle("TPC clusters per track");
+  thn->GetAxis(2)->SetTitle("theta");
+  thn->GetAxis(3)->SetTitle("eta");
+  thn->GetAxis(4)->SetTitle("phi");
+  thn->GetAxis(5)->SetTitle("DCAr");
+  thn->GetAxis(6)->SetTitle("DCAz");
+  thn->GetAxis(7)->SetTitle("charge");
+  thn->GetAxis(8)->SetTitle("DCArSG");
+  thn->GetAxis(9)->SetTitle("DCAzSG");
+  thn->GetAxis(10)->SetTitle("ITS clusters per track");  
+  return thn;
+}
+
+// void AliAnalysisTaskHLTCentralBarrel::Fill(AliESDevent *esd, THnSparseF* thn){
+// //see header for documentation                     
+//  
+//   int nTracks = 0;  
+//   
+//   for(int i=0; i<esdHLT->GetNumberOfTracks(); i++){
+//       
+//       AliESDtrack *esdTrack = esd->GetTrack(i);
+//       if(!esdTrack) continue;
+//       if(!(esdTrack->GetStatus()&AliESDtrack::kTPCin)) continue;
+//       
+//       //DCA calculations
+//       Float_t DCAr=-99;
+//       Float_t DCAz=-99;
+//       Float_t dca[2];
+//       if(vertHLT->GetX()==0 && vertHLT->GetY()==0 && vertHLT->GetZ() ==0 ){
+//     dca[0]=-99;
+//     dca[1]=-99;
+//       }
+//       else{
+//     //Calculating DCA "old" fashion
+//     esdTrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), esdHLT->GetPrimaryVertex()->GetZv(), bfield, dca);
+//     // plotting the DCA calculated by Sergey 
+//     esdTrackHLT->GetImpactParametersTPC(DCAr,DCAz);
+//       }
+//     
+//       Double_t trackHLT[] = {
+//                             TMath::Abs(esdTrackHLT->Pt())
+//                            ,esdTrackHLT->GetTPCNcls()    
+//                            ,esdTrackHLT->Theta()         
+//                            ,esdTrackHLT->Eta()           
+//                            ,esdTrackHLT->Phi()           
+//                            ,DCAr                         
+//                            ,DCAz                         
+//                            ,esdTrackHLT->Charge()        
+//                            ,dca[0]                       
+//                            ,dca[1]                       
+//                            ,esdTrackHLT->GetStatus()
+//                            ,esdTrackHLT->GetNcls(0)   
+//                          };
+//       fTrackHLT->Fill(trackHLT);      
+//       nr_tracksHLT++;    
+//   }  
+//   Double_t eventHLT[] = { vertHLT->GetX(), vertHLT->GetY(), vertHLT->GetZ(), vertHLT->GetNContributors(), nr_tracksHLT, vertHLT->GetStatus()};
+//   fEventHLT->Fill(eventHLT);  
+// }
diff --git a/HLT/QA/tasks/AliAnalysisTaskHLTCentralBarrel.h b/HLT/QA/tasks/AliAnalysisTaskHLTCentralBarrel.h
new file mode 100644 (file)
index 0000000..0a7fc03
--- /dev/null
@@ -0,0 +1,73 @@
+// $Id$
+//-*- Mode: C++ -*-
+//* This file is property of and copyright by the ALICE HLT Project *
+//* ALICE Experiment at CERN, All rights reserved.                  *
+//* See cxx source for full Copyright notice                        *
+
+#ifndef ALIANALYSISTASKHLTCENTRALBARREL_H
+#define ALIANALYSISTASKHLTCENTRALBARREL_H
+
+/** @file AliAnalysisTaskHLTCentralBarrel.h
+    @author Per Ivar Lønne, Hege Erdal, Kalliopi Kanaki
+    @date   
+    @brief An analysis task to compare the offline and HLT esd trees
+*/
+
+// forward declarations
+class TList;
+class TText;
+class TString;
+class AliESDEvent;
+
+#include "THnSparse.h"
+#include "AliAnalysisTaskSE.h"
+
+class AliAnalysisTaskHLTCentralBarrel : public AliAnalysisTaskSE {
+  public: 
+
+    AliAnalysisTaskHLTCentralBarrel();
+    AliAnalysisTaskHLTCentralBarrel(const char *name);
+    virtual ~AliAnalysisTaskHLTCentralBarrel();
+    
+    virtual void  UserCreateOutputObjects();
+    virtual void  UserExec(Option_t *option);
+    virtual void  Terminate(Option_t *);
+    virtual void  NotifyRun();
+
+    // function to select only HLT triggered events
+    void SetUseHLTTriggerDecision(Bool_t useHLT = kFALSE) { fUseHLTTrigger = useHLT;        }
+    // function to select centrality
+    void SetUseCentrality(Bool_t useCentrality = kFALSE)  { fUseCentrality = useCentrality; }
+    // function to create the THnSparse and name the axis
+    THnSparseF* CreateEventTHnSparse(const char* name, Int_t size, const int* bins, double* min, double* max);
+    // function to create the THnSparse and name the axis
+    THnSparseF* CreateTrackTHnSparse(const char* name, Int_t size, const int* bins, double* min, double* max);
+    //function to fill the THnSparse
+    //void Fill(AliESDevent *esd, THnSparseF* thn);
+    
+ private:
+
+    /** copy constructor */
+    AliAnalysisTaskHLTCentralBarrel(const AliAnalysisTaskHLTCentralBarrel&); 
+    /** assignment operator */
+    AliAnalysisTaskHLTCentralBarrel& operator=(const AliAnalysisTaskHLTCentralBarrel&); 
+             
+    Int_t CalculateCentrality(AliESDEvent* esd);
+
+    Bool_t fUseHLTTrigger;  // Use HLT Trigger Decision
+    Bool_t fUseCentrality;  // Include centrality
+
+    TList *fOutputList;  // list of output THnSparse objects
+    
+    THnSparse *fEventOFF; //! offline event properties
+    THnSparse *fEventHLT; //! HLT event properties
+
+    THnSparse *fTrackOFF; //! offline track properties
+    THnSparse *fTrackHLT; //! HLT track properties
+
+    TText *fTextBox; //! TText box
+    
+    ClassDef(AliAnalysisTaskHLTCentralBarrel, 0);
+};
+#endif
index 04682c63b0f7752e3f291b32fb43d5f18aa76b5c..81071e43edb5b3c6f0b016d1fcbe82b8bcbac455 100644 (file)
@@ -10,9 +10,9 @@
  *
  * Usage:
  * <pre>
- *   aliroot -b -q -l compare-HLT-offline-local.C'("/home/blabla/AliESDs.root","global","./",kTRUE,10)' 2>&1 | tee task.log
- *   aliroot -b -q -l compare-HLT-offline-local.C'("/home/blabla/AliESDs.root","phos global pwg1",kTRUE,10)' 2>&1 | tee task.log
- *   aliroot -q compare-HLT-offline-local.C'("alien:///alice/data/2010/LHC10b/000115322/ESDs/pass1/10000115322040.20/AliESDs.root","global")' 2>&1 | tee log
+ *   aliroot -b -l -q compare-HLT-offline-local.C'("/home/blabla/AliESDs.root","global","./",kTRUE,10)' 2>&1 | tee task.log
+ *   aliroot -b -l -q compare-HLT-offline-local.C'("/home/blabla/AliESDs.root","phos global cb",kTRUE,100)' 2>&1 | tee task.log
+ *   aliroot -b -l -q compare-HLT-offline-local.C'("alien:///alice/data/2010/LHC10b/000115322/ESDs/pass1/10000115322040.20/AliESDs.root","global")' 2>&1 | tee log
  * </pre>
  * 
  * If alien:// is contained in the name of the file, then the macro connects to the grid to access the file.
@@ -62,7 +62,7 @@ void compare_HLT_offline_local(TString file,
   gROOT->ProcessLine(".include $ALICE_ROOT/include");
   //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
   
-  Bool_t bPHOS = kFALSE, bGLOBAL = kFALSE, bEMCAL = kFALSE, bPWG1 = kFALSE, bD0=kFALSE;
+  Bool_t bPHOS = kFALSE, bGLOBAL = kFALSE, bEMCAL = kFALSE, bPWG1 = kFALSE, bD0 = kFALSE, bCB = kFALSE;
  
   TString allArgs = detectorTask;
   TString argument;
@@ -93,11 +93,16 @@ void compare_HLT_offline_local(TString file,
        bD0 = kTRUE;
        continue;
       }
+      if(argument.CompareTo("cb", TString::kIgnoreCase)==0){
+       bCB = kTRUE;
+       continue;
+      } 
       if(argument.CompareTo("all",TString::kIgnoreCase)==0){
        bPHOS   = kTRUE;
        bEMCAL  = kTRUE;
        bGLOBAL = kTRUE; 
-       bD0     = kTRUE;   
+       bD0     = kTRUE;  
+       bCB     = kTRUE; 
        continue;
       }
       else break;
@@ -138,6 +143,12 @@ void compare_HLT_offline_local(TString file,
      gROOT->LoadMacro(taskFolder+strTask); 
      cout << "\n========= You are loading the following task --> "<< (taskFolder+strTask).Chop()  << endl;
   }
+  if(bCB){
+    TString strTask("AliAnalysisTaskHLTCentralBarrel.cxx+");
+    gROOT->LoadMacro(taskFolder+strTask);
+    cout << "\n========= You are loading the following task --> "<< (taskFolder+strTask).Chop()  << endl;
+  }
   
   if(bPWG1) gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/macros/AddTaskPerformance.C");
    
@@ -232,6 +243,13 @@ void compare_HLT_offline_local(TString file,
     AliAnalysisDataContainer *coutputD0 =  mgr->CreateContainer("D0_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-D0-comparison.root");  
     mgr->ConnectInput(taskD0,0,mgr->GetCommonInputContainer());
     mgr->ConnectOutput(taskD0,1,coutputD0);
+  }  
+  
+  if(bCB){
+     AliAnalysisTaskHLTCentralBarrel *taskCB = new AliAnalysisTaskHLTCentralBarrel("offhlt_comparison_CB");    
+     AliAnalysisDataContainer *coutputCB =  mgr->CreateContainer("esd_thnsparse", TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-CentralBarrel-comparison.root");  
+     mgr->ConnectInput(taskCB,0,mgr->GetCommonInputContainer());
+     mgr->ConnectOutput(taskCB,1,coutputCB);
   }
   
   if (!mgr->InitAnalysis()) return;
@@ -248,7 +266,7 @@ void compare_HLT_offline_local(){
   cout << "    compare-HLT-offline-local.C'(file, taskOption, taskFolder, fUseHLTTrigger, nEvents)' 2>&1 | tee log" << endl;
   cout << "    compare-HLT-offline-local.C'(\"AliESDs.root\",\"global\")' 2>&1 | tee log" << endl;
   cout << "    compare-HLT-offline-local.C'(\"AliESDs.root\",\"global\",\"./\",kFALSE,nEvents)' 2>&1 | tee log" << endl;
-  cout << "    compare-HLT-offline-local.C'(\"AliESDs.root\",\"global phos pwg1 D0\", \"./\", kTRUE, nEvents)' 2>&1 | tee log" << endl;
+  cout << "    compare-HLT-offline-local.C'(\"AliESDs.root\",\"global phos cb D0\", \"./\", kTRUE, nEvents)' 2>&1 | tee log" << endl;
   cout << "    compare-HLT-offline-local.C'(\"files.txt\",\"all\")' 2>&1 | tee log" << endl;
   cout << "    compare-HLT-offline-local.C'(\"alien:///alice/data/2010/LHC10b/000115322/ESDs/pass1/10000115322040.20/AliESDs.root\",\"global\")' 2>&1 | tee log" << endl;
   cout << " " << endl;