- implemented function that allows selection of HLT triggered events (Hege)
authorkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Nov 2010 21:51:11 +0000 (21:51 +0000)
committerkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Nov 2010 21:51:11 +0000 (21:51 +0000)
- modified running macros accordingly with extra arguments
- updated documentation, calling the macros without arguments prints usage examples
- changed AliRoot and ROOT version for running on the GRID

HLT/QA/tasks/AliAnalysisTaskHLT.cxx
HLT/QA/tasks/AliAnalysisTaskHLT.h
HLT/QA/tasks/macros/CreateAlienHandler.C
HLT/QA/tasks/macros/compare-HLT-offline-grid.C
HLT/QA/tasks/macros/compare-HLT-offline-local.C

index 271425b..8eb70fe 100644 (file)
@@ -30,6 +30,8 @@
 class AliAnalysisTask;
 class AliAnalysisManager;
 
+
+#include "AliHLTGlobalTriggerDecision.h"
 #include "TH1F.h"
 #include "TH2F.h"
 #include "TF1.h"
@@ -51,6 +53,7 @@ ClassImp(AliAnalysisTaskHLT)
 AliAnalysisTaskHLT::AliAnalysisTaskHLT()
 :
 AliAnalysisTaskSE()
+  ,fUseHLTTrigger(kFALSE)
   ,fESDOfftrackCuts(0)
   ,fESDHLTtrackCuts(0)
   ,fOutputList(0)
@@ -78,7 +81,6 @@ AliAnalysisTaskSE()
   ,fNclusVSphiOff(0)
   ,fNclusVSthetaOff(0)
   ,fStatusOff(0)
-  ,fStatusOff_Ocl(0)
   ,fEventSpecieOff(0)
   
   ,fChargeHLT(0)
@@ -105,7 +107,6 @@ AliAnalysisTaskSE()
   ,fNclusVSphiHLT(0)       
   ,fNclusVSthetaHLT(0)
   ,fStatusHLT(0)
-  ,fStatusHLT_Ocl(0)
   ,fEventSpecieHLT(0)
   ,fTrgClsArray(0)
   
@@ -128,7 +129,8 @@ AliAnalysisTaskSE()
  
 AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   :
-  AliAnalysisTaskSE(name)    
+  AliAnalysisTaskSE(name) 
+  ,fUseHLTTrigger(kFALSE)   
   ,fESDOfftrackCuts(0)
   ,fESDHLTtrackCuts(0)
   ,fOutputList(0)
@@ -156,7 +158,6 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   ,fNclusVSphiOff(0)
   ,fNclusVSthetaOff(0)
   ,fStatusOff(0)
-  ,fStatusOff_Ocl(0)
   ,fEventSpecieOff(0)
 
   ,fChargeHLT(0)      
@@ -181,7 +182,6 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   ,fNclusVSphiHLT(0)       
   ,fNclusVSthetaHLT(0)
   ,fStatusHLT(0)
-  ,fStatusHLT_Ocl(0)    
   ,fEventSpecieHLT(0)
   ,fTrgClsArray(0)
   //     ,fDCArOff_trig(0)
@@ -200,14 +200,6 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   DefineOutput(1, TList::Class());
 }
 
-// const Float_t AliAnalysisTaskHLT::fgkEtaMin = -0.12;  
-// const Float_t AliAnalysisTaskHLT::fgkEtaMax =  0.12;  
-// const Float_t AliAnalysisTaskHLT::fgkPhiMin[5]   = {3.83972, 4.18879, 4.53786, 4.88692, 5.23599};  
-// const Float_t AliAnalysisTaskHLT::fgkPhiMax[5]   = {4.18879, 4.53786, 4.88692, 5.23599, 5.58505};  
-// const Float_t AliAnalysisTaskHLT::fgkNormX[5]    = {-0.642788, -0.34202, 0, 0.34202, 0.642788};  
-// const Float_t AliAnalysisTaskHLT::fgkNormY[5]    = {-0.766044, -0.939693, -1, -0.939693, -0.766044};  
-// const Float_t AliAnalysisTaskHLT::fgkInitPosX[5] = {-295.682, -157.329, 0, 157.329, 295.682};  
-// const Float_t AliAnalysisTaskHLT::fgkInitPosY[5] = {-352.38, -432.259, -460, -432.259, -352.38};
 
 //----------------------------------------------------------------------------------------------------
 
@@ -242,11 +234,11 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   (fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE"); 
   */
 
-  fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter",21 , 0, 21);
+  fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter",24 , 0, 24);
   fHistTrigger->GetXaxis()->SetTitle("");  
   fHistTrigger->GetYaxis()->SetTitle("#Events"); 
 
-  fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 21, 0, 21); 
+  fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 24, 0, 24); 
   fHistHLTTrigger->GetXaxis()->SetTitle("");
   fHistHLTTrigger->GetYaxis()->SetTitle("#Events");
 
@@ -318,9 +310,6 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fStatusOff = new TH1F("fStatus_off", "Status for different detectors (offline)",12, 0, 12);
   fStatusHLT = new TH1F("fStatus_hlt", "Status for different detectors (HLT)",    12, 0, 12);
   
-  fStatusOff_Ocl = new TH1F("fStatus_Ocl_off", "Status for different detectors when #TPCcl=0 (offline)",12, 0, 12);
-  fStatusHLT_Ocl = new TH1F("fStatus_Ocl_hlt", "Status for different detectors when #TPCcl=0 (HLT)",    12, 0, 12);
-
   fEventSpecieOff = new TH1F("fEventSpecie_off","Eventspecie for Offline",18, 0, 18);
   fEventSpecieHLT = new TH1F("fEventSpecie_hlt","Eventspecie for HLT",18, 0, 18);
 
@@ -352,7 +341,6 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fOutputList->Add(fNclusVSphiOff);  
   fOutputList->Add(fNclusVSthetaOff);
   fOutputList->Add(fStatusOff);
-  fOutputList->Add(fStatusOff_Ocl);
   fOutputList->Add(fEventSpecieOff);
 
   fOutputList->Add(fChargeHLT);  
@@ -379,7 +367,6 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fOutputList->Add(fNclusVSphiHLT);  
   fOutputList->Add(fNclusVSthetaHLT);
   fOutputList->Add(fStatusHLT);
-  fOutputList->Add(fStatusHLT_Ocl);
   fOutputList->Add(fEventSpecieHLT);
 
   SetupESDtrackCuts();
@@ -417,10 +404,7 @@ void AliAnalysisTaskHLT::NotifyRun(){
   for(int iii=0;iii<12;iii++){
     (fStatusHLT->GetXaxis())->SetBinLabel(iii+1,Statusnames[iii]);
     (fStatusOff->GetXaxis())->SetBinLabel(iii+1,Statusnames[iii]);
-    (fStatusHLT_Ocl->GetXaxis())->SetBinLabel(iii+1,Statusnames[iii]);
-    (fStatusOff_Ocl->GetXaxis())->SetBinLabel(iii+1,Statusnames[iii]);
   }
-
 }
 
 void AliAnalysisTaskHLT::UserExec(Option_t *){
@@ -442,27 +426,27 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
     return;
   }
 
-  
   //Fill CTP Trigger stuff
   //fHistTrigger->Fill(esdOFF->GetTriggerMask());
  
-
   for(Int_t i=0; i<fTrgClsArray->GetEntries(); i++){
     if((esdOFF->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString()))// && esdOFF->GetEventSpecie()==16)  
       fHistTrigger->Fill(i);
     if((esdHLT->GetFiredTriggerClasses()).Contains(((TObjString *)fTrgClsArray->At(i))->GetString()))// && esdOFF->GetEventSpecie()==16)  
       fHistHLTTrigger->Fill(i);
-  }
-
+  }  
 
-  Double_t DCAcut = 7.0;
-  Double_t Momcut= 0.3;
+  //reject laser events -> Use offline info (HLT do not set this flag)
+  if((esdOFF->GetEventSpecie()==16)) return;
+  
+  // To check if anything was triggered in HLT.
+  if(fUseHLTTrigger){  
+    if (!((AliHLTGlobalTriggerDecision*)esdHLT->GetHLTTriggerDecision())->Result()){
+      return;
+      // Process all and any events that were triggered by HLT.
+    } 
+  }
 
-  char Titlename[100];
-  sprintf(Titlename,"pseudorapidity (HLT), DCA cut = %f,\n Momentum cut = %f, TPC clusters > 70" , DCAcut, Momcut);
-  fEtaMomentumcutHLT->SetTitle(Titlename);
-  sprintf(Titlename,"pseudorapidity (offline), DCA cut = %f, Momentum cut = %f, TPC clusters > 70", DCAcut, Momcut);
-  fEtaMomentumcutOff->SetTitle(Titlename);
 
   Double_t bfield = esdOFF->GetMagneticField();
  
@@ -512,91 +496,81 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
   }
   //At the moment no constrains on vertex before filling histograms
   //Should be changed. 
-  if(1){
-   //if( vertHLT && vertHLT->GetNContributors() >= 5 && (TMath::Abs(vertHLT->GetZ())<5.5) ){
 
-    fEventSpecieHLT->Fill(esdHLT->GetEventSpecie());
+  //if( vertHLT && vertHLT->GetNContributors() >= 5 && (TMath::Abs(vertHLT->GetZ())<5.5) ){
 
-    for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){ 
+  fEventSpecieHLT->Fill(esdHLT->GetEventSpecie());
+
+  for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){ 
   
-      AliESDtrack *esdtrackHLT = esdHLT->GetTrack(i); 
-      if(!esdtrackHLT){
-       continue;
-      }
-
-      //Fill which status flags that are set for an event
-      for(int jjj=0;jjj<12;jjj++){
-       if(esdtrackHLT->GetStatus()&Statusnames[jjj]) {
-         fStatusHLT->Fill(jjj);
-         if(esdtrackHLT->GetTPCNcls()==0) fStatusHLT_Ocl->Fill(jjj);
-       }
-      } 
-
-      //reject laser events -> Use offline info (HLT do not set this flag)
-      if((esdOFF->GetEventSpecie()==16)) continue;
-
-      //This condition is mostly affecting Offline->will cut away tracks that are counted twice 
-      //With both kITSin and kTPCin flags set.
-      if(!(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin)) continue;
-
-      //ESD-cut 
-      //At the moment not included!
-      //if(!fESDHLTtrackCuts->AcceptTrack(esdtrackHLT)) continue;                    
-
-      //Calculating DCA "old" fashion
-      Float_t dca[2];
-      esdtrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), esdHLT->GetPrimaryVertex()->GetZv(), bfield, dca);
-
-      // plotting the DCA calculated by Sergey 
-      Float_t DCAr, DCAz = -99;
-      esdtrackHLT->GetImpactParametersTPC(DCAr, DCAz);
-      fDCArHLTSG->Fill(DCAr);
-      fDCAzHLTSG->Fill(DCAz);
-
-      fDCArHLT->Fill(dca[0]);  
-      fDCAzHLT->Fill(dca[1]);
-      
-      fChargeHLT->Fill(esdtrackHLT->Charge());
-
-      if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout))
-       fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
-
-      nr_tracksHLT++;
-      
-      if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout)){
-       fNclusVSphiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
-       fNclusVSthetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
-      }
-
-      if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) fMomentumHLTTpc->Fill(esdtrackHLT->Pt());
-      if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin)  fMomentumHLTTpcIts->Fill(esdtrackHLT->Pt());   
-
-      fEtaHLT->Fill(esdtrackHLT->Eta()); 
-      fdEdxHLT->Fill( esdtrackHLT->GetTPCsignal() );
-      fdEdxVSPHLT->Fill( TMath::Abs(esdtrackHLT->Pt()), esdtrackHLT->GetTPCsignal() );         
-
-      fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
-      fThetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg());
-      fMomentumHLT->Fill( TMath::Abs(esdtrackHLT->Pt()) );  
-     
-      if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) 
-       fMomentumHLTTpc->Fill(esdtrackHLT->Pt());
-      if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin)  
-       fMomentumHLTTpcIts->Fill(esdtrackHLT->Pt());  
-
-      if(TMath::Abs(esdtrackHLT->Pt()) <Momcut) continue; 
-      fEtaMomentumcutHLT->Fill(esdtrackHLT->Eta());
-      if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout))
-       fNclusterHLTwCut->Fill(esdtrackHLT->GetTPCNcls());
-      
-      if(esdHLT->IsHLTTriggerFired()){
-                  
-      }// end if for triggered hlt events       
-    } // end of loop over hlt tracks
-  }  
+    AliESDtrack *esdtrackHLT = esdHLT->GetTrack(i); 
+    if(!esdtrackHLT) continue;
+
+    //Fill which status flags that are set for an event
+    for(int jjj=0;jjj<12;jjj++){
+      if(esdtrackHLT->GetStatus()&Statusnames[jjj]) fStatusHLT->Fill(jjj);
+    } 
+
+    //This condition is mostly affecting Offline->will cut away tracks that are counted twice 
+    //With both kITSin and kTPCin flags set.
+    if(!(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin)) continue;
+
+    //ESD-cut 
+    //At the moment not included!
+    //if(!fESDHLTtrackCuts->AcceptTrack(esdtrackHLT)) continue;                    
+
+    //Calculating DCA "old" fashion
+    Float_t dca[2];
+    esdtrackHLT->GetDZ(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), esdHLT->GetPrimaryVertex()->GetZv(), bfield, dca);
+
+    // plotting the DCA calculated by Sergey 
+    Float_t DCAr, DCAz = -99;
+    esdtrackHLT->GetImpactParametersTPC(DCAr, DCAz);
+    fDCArHLTSG->Fill(DCAr);
+    fDCAzHLTSG->Fill(DCAz);
+
+    fDCArHLT->Fill(dca[0]);  
+    fDCAzHLT->Fill(dca[1]);
+    
+    fChargeHLT->Fill(esdtrackHLT->Charge());
+
+    if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout))
+      fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
 
-  if(nr_tracksHLT>0)
-    fMultHLT->Fill(nr_tracksHLT);
+    nr_tracksHLT++;
+    
+    if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout)){
+      fNclusVSphiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
+      fNclusVSthetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
+    }
+
+    if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) fMomentumHLTTpc->Fill(esdtrackHLT->Pt());
+    if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin)   fMomentumHLTTpcIts->Fill(esdtrackHLT->Pt());   
+
+    fEtaHLT->Fill(esdtrackHLT->Eta()); 
+    fdEdxHLT->Fill( esdtrackHLT->GetTPCsignal() );
+    fdEdxVSPHLT->Fill( TMath::Abs(esdtrackHLT->Pt()), esdtrackHLT->GetTPCsignal() );        
+
+    fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
+    fThetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg());
+    fMomentumHLT->Fill( TMath::Abs(esdtrackHLT->Pt()) );  
+   
+    if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) 
+      fMomentumHLTTpc->Fill(esdtrackHLT->Pt());
+    if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin)   
+      fMomentumHLTTpcIts->Fill(esdtrackHLT->Pt());  
+
+    if(TMath::Abs(esdtrackHLT->Pt()) <0.3) continue; 
+    fEtaMomentumcutHLT->Fill(esdtrackHLT->Eta());
+    if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout))
+      fNclusterHLTwCut->Fill(esdtrackHLT->GetTPCNcls());
+    
+    if(esdHLT->IsHLTTriggerFired()){
+                
+    }// end if for triggered hlt events        
+  } // end of loop over hlt tracks
+
+  if(nr_tracksHLT>0) fMultHLT->Fill(nr_tracksHLT);
 
   //----------------- OFFLINE ESD tree ----------------//
   
@@ -611,7 +585,6 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
   AliVertex *primVertexOFF = new AliVertex(vertexOFF, 0., 0);
   Bool_t testVertex=kTRUE;
 
-  //Int_t nr_contributorsOff= vertHLT->GetNContributors();
 
   if(vertOff->GetNContributors()<1) {
     // SPD vertex
@@ -631,130 +604,79 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
 
   //At the moment no constrains on vertex before filling histograms
   //Should be changed. 
-  if(1){
-    fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
+  fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
+
+  for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){ 
+   
+    AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i); 
+    if (!esdtrackOFF) continue;
+
+    //Fill histograms with which flags are set
+    for(int jjj=0;jjj<12;jjj++){
+      if(esdtrackOFF->GetStatus()&Statusnames[jjj]) fStatusOff->Fill(jjj);
+    } 
+
+    //This condition is mostly affecting Offline->will cut away tracks that are counted twice 
+    //With both kITSin and kTPCin flags set.
+    if(!(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin))continue; 
+
+    // -- ESD cuts
+    //Not included at the moment
+    //if(!fESDOfftrackCuts->AcceptTrack(esdtrackOFF) ) continue;
+    nr_tracksOff++;
+
+    //Filling of DCA for Offline
+
+    Double_t x[3]; 
+    esdtrackOFF->GetXYZ(x);
+    Double_t b[3]; 
+    AliTracker::GetBxByBz(x,b);
+    Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOff, b, kVeryBig);
+    if(!isOK) return;
+    
+    const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam();
+    if(!track) return;
+    
+    Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
+    esdtrackOFF->GetImpactParametersTPC(dca,cov);
 
-    for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){ 
-     
-      AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i); 
-      if (!esdtrackOFF) continue;
-
-
-      //Fill histograms with which flags are set
-      for(int jjj=0;jjj<12;jjj++){
-       if(esdtrackOFF->GetStatus()&Statusnames[jjj]) {
-         fStatusOff->Fill(jjj);
-         if(esdtrackOFF->GetTPCNcls()==0) fStatusOff_Ocl->Fill(jjj);
-       }
-      } 
-
-      // reject laser events
-      if((esdOFF->GetEventSpecie()==16)) continue;  
-
-      //This condition is mostly affecting Offline->will cut away tracks that are counted twice 
-      //With both kITSin and kTPCin flags set.
-      if(!(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin))continue; 
-
-      // -- ESD cuts
-      //Not included at the moment
-      //if(!fESDOfftrackCuts->AcceptTrack(esdtrackOFF) ) continue;
-      nr_tracksOff++;
-
-      //Filling of DCA for Offline
-
-      Double_t x[3]; 
-      esdtrackOFF->GetXYZ(x);
-      Double_t b[3]; 
-      AliTracker::GetBxByBz(x,b);
-      Bool_t isOK = esdtrackOFF->RelateToVertexTPCBxByBz(vertOff, b, kVeryBig);
-      if(!isOK) return;
-      
-      const AliExternalTrackParam *track = esdtrackOFF->GetTPCInnerParam();
-      if(!track) return;
-      
-      Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
-      esdtrackOFF->GetImpactParametersTPC(dca,cov);
-
-      fDCArOff->Fill(dca[0]);
-      fDCAzOff->Fill(dca[1]);
-      fChargeOff->Fill(esdtrackOFF->Charge());
-
-      if((esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) || (esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kTPCout))
-       fNclusterOff->Fill(esdtrackOFF->GetTPCNcls()); 
-
-      if(esdtrackOFF->GetTPCNcls()>0) fNclusVSphiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
-      if(esdtrackOFF->GetTPCNcls()>0) fNclusVSthetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
-
-      if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) fMomentumOffTpc->Fill(esdtrackOFF->Pt());
-      if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin)  fMomentumOffTpcIts->Fill(esdtrackOFF->Pt());   
-
-      fEtaOff->Fill(esdtrackOFF->Eta());         
-      fdEdxOff->Fill( esdtrackOFF->GetTPCsignal() );
-      fdEdxVSPOff->Fill( TMath::Abs(esdtrackOFF->Pt()), esdtrackOFF->GetTPCsignal() );         
-      
-      fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg());
-      fThetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg());
-      fMomentumOff->Fill( TMath::Abs(esdtrackOFF->Pt()) ); 
-
-      if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) 
-       fMomentumOffTpc->Fill(esdtrackOFF->Pt());
-      if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin)
-       fMomentumOffTpcIts->Fill(esdtrackOFF->Pt());  
-
-      if(TMath::Abs(esdtrackOFF->Pt()) < Momcut) continue;
-      fEtaMomentumcutOff->Fill(esdtrackOFF->Eta()); 
-      if(esdtrackOFF->GetTPCNcls()>0) 
-       fNclusterOffwCut->Fill(esdtrackOFF->GetTPCNcls()); 
-           
-         
-      if(esdHLT->IsHLTTriggerFired()){
-           
-      } // end if for triggered offl events
-
-    } // end of loop over offl tracks
+    fDCArOff->Fill(dca[0]);
+    fDCAzOff->Fill(dca[1]);
+    fChargeOff->Fill(esdtrackOFF->Charge());
+
+    if((esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) || (esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kTPCout))
+      fNclusterOff->Fill(esdtrackOFF->GetTPCNcls()); 
+
+    if(esdtrackOFF->GetTPCNcls()>0) fNclusVSphiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
+    if(esdtrackOFF->GetTPCNcls()>0) fNclusVSthetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
+
+    if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) fMomentumOffTpc->Fill(esdtrackOFF->Pt());
+    if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin)   fMomentumOffTpcIts->Fill(esdtrackOFF->Pt());   
+
+    fEtaOff->Fill(esdtrackOFF->Eta());         
+    fdEdxOff->Fill( esdtrackOFF->GetTPCsignal() );
+    fdEdxVSPOff->Fill( TMath::Abs(esdtrackOFF->Pt()), esdtrackOFF->GetTPCsignal() );        
+    
+    fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg());
+    fThetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg());
+    fMomentumOff->Fill( TMath::Abs(esdtrackOFF->Pt()) ); 
+
+    if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) 
+      fMomentumOffTpc->Fill(esdtrackOFF->Pt());
+    if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin)
+      fMomentumOffTpcIts->Fill(esdtrackOFF->Pt());  
+
+    if(TMath::Abs(esdtrackOFF->Pt()) < 0.3) continue;
+    fEtaMomentumcutOff->Fill(esdtrackOFF->Eta()); 
+    if(esdtrackOFF->GetTPCNcls()>0) fNclusterOffwCut->Fill(esdtrackOFF->GetTPCNcls()); 
+                  
+//     if(esdHLT->IsHLTTriggerFired()){
+//           
+//     } // end if for triggered offl events
+
+  } // end of loop over offline tracks
   
-  }
-  if(nr_tracksOff>0)
-    fMultOff->Fill(nr_tracksOff);
-
-  //   if(esdHLT->IsHLTTriggerFired()){
-  // 
-  //      for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){ 
-  //         
-  //    AliESDtrack *esdTrk = esdOFF->GetTrack(i);      
-  //          Double_t dz[2] = {-999., -999.};  
-  //          Double_t covar[3] = {0};
-  //          esdTrk->PropagateToDCA(vtx, bfield, 250., dz, covar);
-  //          fHistOfflDZTrig->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1]));
-  //       
-  //          fHistOfflDZ->Fill(TMath::Abs(dz[0]), TMath::Abs(dz[1]));
-  //       
-  //          /*
-  //          Double_t pnt[3] = {0., 0., 0.};
-  //          Double_t norm[3] = {0., 0., 1.};
-  //          if(esdTrk->Intersect(pnt, norm, bfield)){
-  //              if(TMath::Sqrt(pnt[0]*pnt[0]+pnt[1]*pnt[1]) < 250) {
-  //                fNtracksThruZ0++;
-  //                fNtracksThruZ0Trig++;
-  //                fHistTrigger->Fill(6., 1);
-  //                fHistTrigger->Fill(7., 1);
-  //              }
-  //          }
-  //          */
-  // 
-  //          fHistOfflTrkDCATrig->Fill(TMath::Abs(esdTrk->GetD(0., 0., bfield)));
-  //          fDCAOff->Fill(TMath::Abs(esdTrk->GetD(0., 0., bfield))); 
-  // 
-  //          if(esdTrk->GetTPCNcls()>0){
-  //       fHistOfflTrkNclsTrig->Fill(esdTrk->GetTPCNcls()); 
-  //       fHistOfflTrkNcls->Fill(esdTrk->GetTPCNcls());
-  //          }
-  // 
-  //          fHistOfflTrkPTrig->Fill(TMath::Abs(esdTrk->P()));
-  //          fHistOfflTrkP->Fill(TMath::Abs(esdTrk->P()));
-  //          fHistOffldEdx->Fill( esdTrk->GetTPCsignal());
-  //          fHistOffldEdxVsP->Fill(TMath::Abs(esdTrk->P()), esdTrk->GetTPCsignal());
-  //      }
+  if(nr_tracksOff>0) fMultOff->Fill(nr_tracksOff);
   
   delete primVertexOFF;
   delete primVertexHLT;
@@ -765,131 +687,6 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
 
 void AliAnalysisTaskHLT::Terminate(Option_t *){
   // see header file of AliAnalysisTask for documentation
-// 
-//   // Draw result to the screen
-//   // Called once at the end of the query
-// 
-//   Bool_t print_png=kFALSE;
-//   if(print_png){
-//   
-//     //Drawing histograms
-//     Int_t maxbin =0;
-//     TCanvas *c1 = new TCanvas("c1","Info pr track, Offline vs Online",10,10,1210,810);
-//      
-//     c1->Divide(3,2);
-//      
-//     c1->cd(1);
-//     maxbin =fEtaOff->GetBinContent(fEtaOff->GetMaximumBin());
-//     if(maxbin < fEtaHLT->GetBinContent(fEtaHLT->GetMaximumBin()))
-//       maxbin=fEtaHLT->GetBinContent(fEtaHLT->GetMaximumBin());
-//     fEtaOff->SetMaximum(maxbin+20);
-//     fEtaOff->SetTitle("Pseudorapidity (without momentum cut)");
-//     fEtaOff->SetLineColor(2);
-//     fEtaOff->DrawCopy("");
-//     fEtaHLT->DrawCopy("sameS");
-//  
-//     TLegend *legend = new TLegend(0.70,0.60,0.90,0.75);
-//     legend->AddEntry(fEtaOff, "Offline", "LP");
-//     legend->AddEntry(fEtaHLT,"HLT","LP");
-//     legend->SetFillColor(10);
-//     legend->SetBorderSize(0);
-//     legend->Draw("");
-// 
-//     c1->cd(2);
-//     maxbin =fEtaMomentumcutOff->GetBinContent(fEtaMomentumcutOff->GetMaximumBin());
-//     if(maxbin < fEtaMomentumcutHLT->GetBinContent(fEtaMomentumcutHLT->GetMaximumBin()))
-//       maxbin=fEtaMomentumcutHLT->GetBinContent(fEtaMomentumcutHLT->GetMaximumBin());
-//     fEtaMomentumcutOff->SetMaximum(maxbin+20);
-//     fEtaMomentumcutOff->SetTitle("Pseudorapidity");
-//     fEtaMomentumcutOff->SetLineColor(2);
-//     fEtaMomentumcutOff->DrawCopy("");
-//     fEtaMomentumcutHLT->DrawCopy("sames");
-// 
-//     c1->cd(3);
-//     maxbin =fNclusterOff->GetBinContent(fNclusterOff->GetMaximumBin());
-//     if(maxbin < fNclusterHLT->GetBinContent(fNclusterHLT->GetMaximumBin()))
-//       maxbin=fNclusterHLT->GetBinContent(fNclusterHLT->GetMaximumBin());
-//     fNclusterOff->SetMaximum(maxbin+20);
-//     fNclusterOff->SetLineColor(2);
-//     fNclusterOff->SetTitle("Nr clusters per track");
-//     fNclusterOff->DrawCopy("");
-//     fNclusterHLT->DrawCopy("sames");
-// 
-//     c1->cd(4);
-//     maxbin =fPhiOff->GetBinContent(fPhiOff->GetMaximumBin());
-//     if(maxbin < fPhiHLT->GetBinContent(fPhiHLT->GetMaximumBin()))
-//       maxbin=fPhiHLT->GetBinContent(fPhiHLT->GetMaximumBin());
-//     fPhiOff->SetMinimum(0);
-//     fPhiOff->SetMaximum(maxbin+20);
-//     fPhiOff->SetLineColor(2);
-//     fPhiOff->SetTitle("Azimuthal angle distribution");
-//     fPhiOff->DrawCopy("");
-//     fPhiHLT->DrawCopy("sames");
-// 
-//     c1->cd(5);
-//     maxbin =fThetaOff->GetBinContent(fThetaOff->GetMaximumBin());
-//     if(maxbin < fThetaHLT->GetBinContent(fThetaHLT->GetMaximumBin()))
-//       maxbin=fThetaHLT->GetBinContent(fThetaHLT->GetMaximumBin());
-//     fThetaOff->SetMaximum(maxbin+20);
-//     fThetaOff->SetLineColor(2);
-//     fThetaOff->SetTitle("Polar angle distribution");
-//     fThetaOff->DrawCopy("");
-//     fThetaHLT->DrawCopy("sames");
-// 
-//     c1->cd(6);
-//     maxbin =fMomentumOff->GetBinContent(fMomentumOff->GetMaximumBin());
-//     if(maxbin < fMomentumHLT->GetBinContent(fMomentumHLT->GetMaximumBin()))
-//       maxbin=fMomentumHLT->GetBinContent(fMomentumHLT->GetMaximumBin());
-//     fMomentumOff->SetMaximum(maxbin+200);
-//     fMomentumOff->GetXaxis()->SetRangeUser(0,5);
-//     fMomentumOff->SetLineColor(2);
-//     fMomentumOff->SetTitle("Momentum");
-//     fMomentumOff->DrawCopy("");
-//     fMomentumHLT->DrawCopy("sames");
-// 
-//     TCanvas *c2= new TCanvas("c2", "Info pr event, Offline vs Online", 10 , 10,1210, 810);
-//     TLegend *legend2 = new TLegend(0.70,0.60,0.90,0.75);
-//     c2->Divide(3,2);
-//     c2->cd(1);
-//     fXvertexOff->SetTitle("Primary Vertex Distribution in X");
-//     fXvertexOff->SetLineColor(2);
-//     fXvertexOff->GetXaxis()->SetRangeUser(-0.5,0.5);
-//     legend2->AddEntry(fXvertexOff,"Offline","LP");
-//     fXvertexOff->DrawCopy("");
-//     fXvertexHLT->DrawCopy("sames");
-//     legend2->AddEntry(fXvertexHLT,"HLT","LP");
-//     legend2->SetFillColor(10);
-//     legend2->SetBorderSize(0);
-//     legend2->Draw();
-//     c2->cd(2);
-//     fYvertexOff->SetTitle("Primary Vertex Distribution in Y");
-//     fYvertexOff->SetLineColor(2);
-//     fYvertexOff->GetXaxis()->SetRangeUser(-0.5,0.5);
-//     fYvertexOff->DrawCopy("");
-//     fYvertexHLT->DrawCopy("sames");
-//     c2->cd(3);
-//     fZvertexOff->SetTitle("Primary Vertex Distribution in Z");
-//     fZvertexOff->SetLineColor(2);
-//     fZvertexOff->DrawCopy("");
-//     fZvertexHLT->DrawCopy("sames");
-//   
-//     c2->cd(4);
-//     fMultHLT->SetTitle("Track Multiplicity, NumberTracks>0");
-//     fMultHLT->DrawCopy("");
-//     fMultOff->SetLineColor(2);
-//     fMultOff->DrawCopy("sames");
-// 
-//     string filename="Info_pr_track";
-//     char plotname[100];
-//     sprintf(plotname,"%s.png",filename.c_str());
-//     //  c1->Print("Info_pr_track.png","png");
-//     c1->Print(plotname,"png");
-//  
-//     filename="Info_pr_Event";
-//     sprintf(plotname,"%s.png",filename.c_str());
-//     c2->Print(plotname,"png");
-//   }
-
 }
 
 void AliAnalysisTaskHLT::SetupESDtrackCuts() {
index eaf797e..e7dfbba 100644 (file)
@@ -51,7 +51,11 @@ class AliAnalysisTaskHLT : public AliAnalysisTaskSE {
     virtual void  Terminate(Option_t *);
     virtual void  NotifyRun();
 
- private:
+    //Use only triggered events
+    void SetUseHLTTriggerDecision(Bool_t useHLT = kFALSE) {fUseHLTTrigger = useHLT;}
+
+private:
 
     /** copy constructor */
     AliAnalysisTaskHLT(const AliAnalysisTaskHLT&); 
@@ -77,8 +81,7 @@ class AliAnalysisTaskHLT : public AliAnalysisTaskSE {
      */
 
 
-    static const Int_t fNcontrArray[];   //! Array to hold the different number of contributors
-    static const Int_t fNcontr;          //! Array size
+    Bool_t fUseHLTTrigger;             // use HLT Trigger Decision
 
  
     //----------------------------------------------------------------------------------
@@ -114,7 +117,6 @@ class AliAnalysisTaskHLT : public AliAnalysisTaskSE {
     TH2F  *fNclusVSphiOff;     //! clusters per track vs. azimuthal angle 
     TH2F  *fNclusVSthetaOff;   //! clusters per track vs. polar angle 
     TH1F  *fStatusOff;         //! Status counters 
-    TH1F  *fStatusOff_Ocl;     //! Status counters for TPCNcl=0
     TH1F  *fEventSpecieOff;    //! Event Specie Offline
     
     TH1F  *fChargeHLT;         //! Charge distribution 
@@ -141,55 +143,11 @@ class AliAnalysisTaskHLT : public AliAnalysisTaskSE {
     TH2F  *fNclusVSphiHLT;     //! clusters per track vs. azimuthal angle 
     TH2F  *fNclusVSthetaHLT;   //! clusters per track vs. polar angle 
     TH1F  *fStatusHLT;         //! Status counters 
-    TH1F  *fStatusHLT_Ocl;     //! Status counters for TPCNcl=0
     TH1F  *fEventSpecieHLT;    //! Event Specie HLT
-
     
     TObjArray *fTrgClsArray; //! array of trigger classes
-
-  
-//     TH1F *fDCAOff_trig;      //! track DCA to beam line for triggered events
-//     TH1F *fNclusterOff_trig; //! #clusters per track for triggered events
-//     
-//     TH1F *fDCAHLT_trig;     
-//     TH1F *fNclusterHLT_trig;
-   
-   
-//     TH1F *fHistOfflTrkDCANoTrigNclsCut1; //! with cut on #clusters>=60
-//     TH1F *fHistOfflTrkDCANoTrigNclsCut2; //! with cut on #clusters<60
-//     
-//     TH1F *fHistOfflResPtInv; //! resolution on 1/pt for offline tracks
-//     TH1F *fHistOnlResPtInv; //! resoltion on 1/pt for online tracks
-// 
-//     TH1F *fHistOffldZ;  //! resolution on z 
-//     TH1F *fHistOnldZ;   //! resolution on z 
-// 
-//     TH1F *fHistOffldX; //! resolution on r 
-//     TH1F *fHistOnldX;  //! resolution on r 
-//     
-//     TH1F *fHistOfflPhi;  //! resolution on azimuthal angle 
-//     TH1F *fHistOnlPhi;  //! resolution on azimuthal angle 
-// 
-//     TH1F *fHistOfflTheta; //! resolution on polar angle 
-//     TH1F *fHistOnlTheta; //! resolution on polar angle 
-// 
-//     TH2F *fHistOnlDZ;  //! online trigger tracks distance to beam and Z to IP
-//     TH2F *fHistOfflDZ; //! offline tracks distance to beam and Z to IP
-//     TH2F *fHistOfflDZTrig; //!
-//     TH2F *fHistOfflDZNoTrig; //!
-
-
-//     static const Float_t fgkPhiMin[5];
-//     static const Float_t fgkPhiMax[5];
-//     static const Float_t fgkEtaMin;
-//     static const Float_t fgkEtaMax;
-//     static const Float_t fgkNormX[5];
-//     static const Float_t fgkNormY[5];
-//     static const Float_t fgkInitPosX[5];
-//     static const Float_t fgkInitPosY[5];
-
-    ClassDef(AliAnalysisTaskHLT, 2);
+    
+    ClassDef(AliAnalysisTaskHLT, 0);
 };
 
 #endif
index 642d003..daeeeb8 100755 (executable)
@@ -23,8 +23,14 @@ AliAnalysisGrid* CreateAlienHandler(TString runNumber, TString dataDir, TString
   
   // check the versions available on alien with the command 'packages'
   plugin->SetAPIVersion("V1.1x");
-  plugin->SetROOTVersion("v5-27-06");
-  plugin->SetAliROOTVersion("v4-20-12-AN");
+  plugin->SetROOTVersion("v5-27-06b");
+  plugin->SetAliROOTVersion("v4-21-04-AN");
+  
+  cout << "===========================================================================================" << endl;
+  cout << "  " << endl;
+  cout << " The user is responsible for updating the AliRoot and ROOT versions for running on the GRID."<< endl;  
+  cout << "  " << endl; 
+  cout << "===========================================================================================" << endl;
 
   //Allow non-default outputs
   plugin->SetDefaultOutputs(kFALSE);
@@ -120,8 +126,9 @@ AliAnalysisGrid* CreateAlienHandler(TString runNumber, TString dataDir, TString
     plugin->SetOutputFiles("HLT-OFFLINE-EMCAL-comparison.root");    
   }
   if(bGLOBAL){  
+    plugin->AddIncludePath("-I$ALICE_ROOT/HLT/BASE");
     plugin->SetAnalysisSource("AliAnalysisTaskHLT.cxx");  
-    plugin->SetAdditionalLibs("AliAnalysisTaskHLT.h AliAnalysisTaskHLT.cxx"); 
+    plugin->SetAdditionalLibs("libHLTbase.so AliAnalysisTaskHLT.h AliAnalysisTaskHLT.cxx"); 
     plugin->SetOutputFiles("HLT-OFFLINE-GLOBAL-comparison.root");
   }
   if(bD0) {
index 9ac6787..e05c457 100644 (file)
  * - GRID output directory with respect to the working one, where the output files of the task are located (you have to create it yourself in advance)
  * - run in full mode, i.e. completely on the GRID with all the chunks of the run processed
  * - specify the analysis task you want to run
+ * - specify whether you are interested only in HLT triggered events
  *
  * @ingroup alihlt_qa
- * @author zbyin@mail.ccnu.edu.cn, Kalliopi.Kanaki@ift.uib.no
+ * @author Hege.Erdal@student.uib.no, Kalliopi.Kanaki@ift.uib.no
  */
 
-void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWorkingDir, TString gridOutputDir, const char* mode = "full", const char* detectorTask="global"){
+void compare_HLT_offline_grid(TString runNumber, 
+                              TString dataDir, 
+                             TString gridWorkingDir, 
+                             TString gridOutputDir, 
+                             const char* mode = "full", 
+                             const char* detectorTask="global",
+                             bool fUseHLTTrigger=kFALSE
+                            )
+{
  
   TStopwatch timer;
   timer.Start();
@@ -41,7 +50,7 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo
   gSystem->Load("libANALYSISalice");
   gSystem->Load("libHLTbase");
   gROOT->ProcessLine(".include $ALICE_ROOT/include");
-  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
+  //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
 
   
   Bool_t bAll=kFALSE, bTPC=kFALSE, bPHOS=kFALSE, bEMCAL=kFALSE, bITS=kFALSE, bGLOBAL=kFALSE, bD0=kFALSE;
@@ -55,10 +64,6 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo
          argument=((TObjString*)pTokens->At(i))->GetString();
          if(argument.IsNull()) continue;
 
-         if(argument.CompareTo("tpc", TString::kIgnoreCase)==0){
-           bTPC = kTRUE;
-           continue;
-         }
          if(argument.CompareTo("phos", TString::kIgnoreCase)==0){
            bPHOS = kTRUE;
            continue;
@@ -67,10 +72,6 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo
            bEMCAL = kTRUE;
            continue;
          }         
-        if(argument.CompareTo("its", TString::kIgnoreCase)==0){
-           bITS = kTRUE;
-           continue;
-         }     
         if(argument.CompareTo("global", TString::kIgnoreCase)==0){
            bGLOBAL = kTRUE;
            continue;
@@ -80,10 +81,8 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo
           continue;
         }  
         if(argument.CompareTo("all",TString::kIgnoreCase)==0){
-           bTPC    = kTRUE;
            bPHOS   = kTRUE;
-           bEMCAL   = kTRUE;
-           bITS    = kTRUE;
+           bEMCAL  = kTRUE;
            bGLOBAL = kTRUE;
            bAll    = kTRUE;
            continue;
@@ -102,8 +101,8 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo
   mgr->SetNSysInfo(1000);
 
   //To use Physics Selection
-  AliPhysicsSelectionTask* physSelTask =AddTaskPhysicsSelection(kFALSE,kTRUE);
-  
+  //AliPhysicsSelectionTask *physSelTask = AddTaskPhysicsSelection(kFALSE,kTRUE);
+
   // Create and configure the alien handler plugin
   gROOT->LoadMacro("CreateAlienHandler.C");
   AliAnalysisGrid *alienHandler = CreateAlienHandler(runNumber, dataDir, gridWorkingDir, gridOutputDir, mode, detectorTask);
@@ -113,7 +112,6 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo
   mgr->SetGridHandler(alienHandler);
  
   //-------------- Compile the analysis tasks ---------- //
-  if(bTPC)    gROOT->LoadMacro("AliAnalysisTaskHLTTPC.cxx+"); 
   if(bPHOS && bEMCAL) {
     AliHLTSystem * pHLT = AliHLTPluginBase::GetInstance();
     pHLT->LoadComponentLibraries("libHLTbase");
@@ -133,65 +131,53 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo
     gROOT->LoadMacro("AliAnalysisTaskHLTPHOS.cxx+");  
   }
   else if(bEMCAL) {
-     AliHLTSystem * pHLT = AliHLTPluginBase::GetInstance();
+    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+");
   if(bD0)     gROOT->LoadMacro("AliAnalysisTaskD0Trigger.cxx+"); 
    
   //-------------- define the tasks ------------//
   
-  if(bTPC){ 
-     AliAnalysisTaskHLTTPC *taskTPC = new AliAnalysisTaskHLTTPC("offhlt_comparison_TPC");
-     mgr->AddTask(taskTPC);
-     AliAnalysisDataContainer *coutput1 =  mgr->CreateContainer("tpc_histograms", TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-TPC-comparison.root");  
-     mgr->ConnectInput(taskTPC,0,mgr->GetCommonInputContainer());
-     mgr->ConnectOutput(taskTPC,1,coutput1);
-  }
-
   if(bPHOS){
      AliAnalysisTaskHLTPHOS *taskPHOS = new AliAnalysisTaskHLTPHOS("offhlt_comparison_PHOS");
      mgr->AddTask(taskPHOS);
-     AliAnalysisDataContainer *coutput2 =  mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison.root");  
+     AliAnalysisDataContainer *coutputPHOS =  mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison.root");  
      mgr->ConnectInput(taskPHOS,0,mgr->GetCommonInputContainer());
-     mgr->ConnectOutput(taskPHOS,1,coutput2);
+     mgr->ConnectOutput(taskPHOS,1,coutputPHOS);
   }
   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");  
+     AliAnalysisDataContainer *coutputEMCAL =  mgr->CreateContainer("emcal_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-EMCAL-comparison.root");  
      mgr->ConnectInput(taskEMCAL,0,mgr->GetCommonInputContainer());
-     mgr->ConnectOutput(taskEMCAL,1,coutput5);
+     mgr->ConnectOutput(taskEMCAL,1,coutputEMCAL);
   }
   
-  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(bGLOBAL){
      AliAnalysisTaskHLT *taskGLOBAL = new AliAnalysisTaskHLT("offhlt_comparison_GLOBAL");
-     taskGLOBAL->SelectCollisionCandidates();
+     taskGLOBAL->SetUseHLTTriggerDecision(fUseHLTTrigger);
+     if(fUseHLTTrigger==kTRUE) printf("\n\nOnly HLT triggered events will be used to fill the distributions for task %s.\n\n", taskGLOBAL->GetName());
+     //taskGLOBAL->SelectCollisionCandidates();
      mgr->AddTask(taskGLOBAL);
-     AliAnalysisDataContainer *coutput4 =  mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison.root");  
+     if(fUseHLTTrigger==kTRUE)
+       AliAnalysisDataContainer *coutputGLOBAL =  mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison.root");  
+     else
+       AliAnalysisDataContainer *coutputGLOBAL =  mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison_triggered.root");  
      mgr->ConnectInput(taskGLOBAL,0,mgr->GetCommonInputContainer());
-     mgr->ConnectOutput(taskGLOBAL,1,coutput4);
+     mgr->ConnectOutput(taskGLOBAL,1,coutputGLOBAL);
   }
   if(bD0){
     float cuts[7]={0.5,0.04,0.7,0.8,0.05,-0.00025,0.7};
     AliAnalysisTaskD0Trigger *taskD0 = new AliAnalysisTaskD0Trigger("offhlt_comparison_D0_Trigger",cuts);
     mgr->AddTask(taskD0);
-    AliAnalysisDataContainer *coutput6 =  mgr->CreateContainer("D0_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-D0-comparison.root");  
+    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,coutput6);
+    mgr->ConnectOutput(taskD0,1,coutputD0);
   }
   // Enable debug printouts
   mgr->SetDebugLevel(2);
@@ -203,3 +189,11 @@ void compare_HLT_offline_grid(TString runNumber, TString dataDir, TString gridWo
   timer.Stop();
   timer.Print();
 }
+
+void compare_HLT_offline_grid(){
+  cout << " " << endl;
+  cout << " Usage examples:" << endl;
+  cout << "    compare-HLT-offline-grid.C'(runNumber, dataDir, gridWorkingDir, gridOutputDir, mode, taskOption, fUseHLTTrigger)' 2>&1 | tee log" << endl;
+  cout << "    compare-HLT-offline-grid.C'(\"000115322\",\"/alice/data/2010/LHC10b\",\"ESDcomparison\",\"output\",\"full\",\"global\",kTRUE)' 2>&1 | tee log" << endl;
+  cout << " " << endl;
+}
index d43835f..f222248 100644 (file)
@@ -6,10 +6,12 @@
  * The output is a root file containing the histograms defined in the
  * analysis task. There is one output file per detector.
  *
+ * Run without arguments to get a few examples how to use the macro.
+ *
  * Usage:
  * <pre>
- *   aliroot -b -q -l compare_HLT_offline_local.C'("/home/blabla/AliESDs.root","phos")' 2>&1 | tee task.log
- *   aliroot -b -q -l compare_HLT_offline_local.C'("/home/blabla/AliESDs.root","phos tpc global")' 2>&1 | tee task.log
+ *   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
  * </pre>
  * 
  * The .txt file takes the place of the first argument in that case.
  *
  * @ingroup alihlt_qa
- * @author zbyin@mail.ccnu.edu.cn, Kalliopi.Kanaki@ift.uib.no, Hege.Erdal@student.uib.no
+ * @author Kalliopi.Kanaki@ift.uib.no, Hege.Erdal@student.uib.no
  */
 
-void compare_HLT_offline_local(TString file="files.txt", const char* detectorTask="global", Long64_t nEvents=1234567890){
+void compare_HLT_offline_local(TString file, 
+                               const char* detectorTask="global",
+                              TString taskFolder="$ALICE_ROOT/HLT/QA/tasks/", 
+                              bool fUseHLTTrigger=kFALSE, 
+                              Long64_t nEvents=1234567890
+                             )
+{
 
   TStopwatch timer;
   timer.Start();
@@ -52,7 +60,7 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas
   gSystem->Load("libPWG1.so");
  
   gROOT->ProcessLine(".include $ALICE_ROOT/include");
-  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
+  //gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
   
   Bool_t bPHOS=kFALSE, bGLOBAL=kFALSE, bEMCAL = kFALSE, bPWG1 = kFALSE, bD0=kFALSE;
  
@@ -102,21 +110,36 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas
     gSystem->Load("libHLTbase");
     gSystem->Load("libAliHLTUtil");
     gSystem->Load("libAliHLTGlobal");
-    gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx+"); 
-    gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskHLTPHOS.cxx+"); 
+    TString strTask1("AliAnalysisTaskCalo.cxx+");
+    TString strTask2("AliAnalysisTaskPHOS.cxx+");    
+    gROOT->LoadMacro(taskFolder+strTask1); 
+    gROOT->LoadMacro(taskFolder+strTask2); 
+    cout << "\n========= You are loading the following tasks --> "<< taskFolder+strTask1  << " and " <<  taskFolder+strTask2 << endl;
   }
   
   if(bEMCAL){
     gSystem->Load("libHLTbase");
     gSystem->Load("libAliHLTUtil");
     gSystem->Load("libAliHLTGlobal");
-    gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskHLTCalo.cxx+"); 
-    gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskHLTEMCAL.cxx+"); 
+    TString strTask1("AliAnalysisTaskCalo.cxx+");
+    TString strTask2("AliAnalysisTaskEMCAL.cxx+");
+    gROOT->LoadMacro(taskFolder+strTask1); 
+    gROOT->LoadMacro(taskFolder+strTask2); 
+    cout << "\n========= You are loading the following tasks --> "<< taskFolder+strTask1  << " and " <<  taskFolder+strTask2 << endl;
   }  
   
-  if(bGLOBAL) gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskHLT.cxx+");
-  if(bPWG1)   gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/macros/AddTaskPerformance.C");
-  if(bD0)     gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/AliAnalysisTaskD0Trigger.cxx+"); 
+  if(bGLOBAL){
+     TString strTask("AliAnalysisTaskHLT.cxx+");
+     gROOT->LoadMacro(taskFolder+strTask);
+     cout << "\n========= You are loading the following task --> "<< taskFolder+strTask  << endl;
+  }
+  if(bD0){
+     TString strTask("AliAnalysisTaskD0Trigger.cxx+");
+     gROOT->LoadMacro(taskFolder+strTask); 
+     cout << "\n========= You are loading the following task --> "<< taskFolder+strTask  << endl;
+  }
+  
+  if(bPWG1) gROOT->LoadMacro("$ALICE_ROOT/HLT/QA/tasks/macros/AddTaskPerformance.C");
    
   if(file.Contains("alien")) TGrid::Connect("alien://");
     
@@ -137,7 +160,8 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas
     return;
   }
 
-
+  //To only select HLT triggered events
+  //Bool_t fUseHLTTrigger=kFALSE;
    
   //-------- Make the analysis manager ---------------//
  
@@ -157,26 +181,31 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas
   if(bPHOS){
     AliAnalysisTaskHLTPHOS *taskPHOS = new AliAnalysisTaskHLTPHOS("offhlt_comparison_PHOS");
     mgr->AddTask(taskPHOS);
-    AliAnalysisDataContainer *coutput2 =  mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison.root");  
+    AliAnalysisDataContainer *coutputPHOS =  mgr->CreateContainer("phos_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-PHOS-comparison.root");  
     mgr->ConnectInput(taskPHOS,0,mgr->GetCommonInputContainer());
-    mgr->ConnectOutput(taskPHOS,1,coutput2);
+    mgr->ConnectOutput(taskPHOS,1,coutputPHOS);
   }
 
   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");  
+    AliAnalysisDataContainer *coutputEMCAL =  mgr->CreateContainer("emcal_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-EMCAL-comparison.root");  
     mgr->ConnectInput(taskEMCAL,0,mgr->GetCommonInputContainer());
-    mgr->ConnectOutput(taskEMCAL,1,coutput5);
+    mgr->ConnectOutput(taskEMCAL,1,coutputEMCAL);
   }
   
   if(bGLOBAL){
     AliAnalysisTaskHLT *taskGLOBAL = new AliAnalysisTaskHLT("offhlt_comparison_GLOBAL");
+    taskGLOBAL->SetUseHLTTriggerDecision(fUseHLTTrigger);
+    if(fUseHLTTrigger==kTRUE) printf("\n\nOnly HLT triggered events will be used to fill the distributions for task %s.\n\n", taskGLOBAL->GetName());
     //taskGLOBAL->SelectCollisionCandidates();
     mgr->AddTask(taskGLOBAL);
-    AliAnalysisDataContainer *coutput4 =  mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison.root");  
+    if(fUseHLTTrigger==kFALSE)
+      AliAnalysisDataContainer *coutputGLOBAL =  mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-GLOBAL-comparison.root");  
+    else 
+      AliAnalysisDataContainer *coutputGLOBAL =  mgr->CreateContainer("global_histograms",TList::Class(), AliAnalysisManager::kOutputContainer,"HLT-OFFLINE-GLOBAL-comparison_triggered.root");  
     mgr->ConnectInput(taskGLOBAL,0,mgr->GetCommonInputContainer());
-    mgr->ConnectOutput(taskGLOBAL,1,coutput4);
+    mgr->ConnectOutput(taskGLOBAL,1,coutputGLOBAL);
   }
 
   if(bPWG1){
@@ -193,9 +222,9 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas
     float cuts[7]={0.5,0.04,0.7,0.8,0.05,-0.00025,0.7};
     AliAnalysisTaskD0Trigger *taskD0 = new AliAnalysisTaskD0Trigger("offhlt_comparison_D0",cuts);
     mgr->AddTask(taskD0);
-    AliAnalysisDataContainer *coutput6 =  mgr->CreateContainer("D0_histograms",TList::Class(), AliAnalysisManager::kOutputContainer, "HLT-OFFLINE-D0-comparison.root");  
+    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,coutput6);
+    mgr->ConnectOutput(taskD0,1,coutputD0);
   }
   
   if (!mgr->InitAnalysis()) return;
@@ -205,3 +234,15 @@ void compare_HLT_offline_local(TString file="files.txt", const char* detectorTas
   timer.Stop();
   timer.Print();
 }
+
+void compare_HLT_offline_local(){
+  cout << " " << endl;
+  cout << " Usage examples:" << endl;
+  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'(\"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;
+}