]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
- fix for the streaming of the output
authorkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Jun 2010 09:35:27 +0000 (09:35 +0000)
committerkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Jun 2010 09:35:27 +0000 (09:35 +0000)
- updates of the software packages in the alien macro, ESD pass1 is selected

HLT/QA/tasks/AliAnalysisTaskHLT.cxx
HLT/QA/tasks/AliAnalysisTaskHLT.h
HLT/QA/tasks/macros/CreateAlienHandler.C

index 707e7af1178546020f8ebd9abfdc57b445e14583..3069d0b92d145384425d19144ef7dc89e21ebc8c 100644 (file)
@@ -32,6 +32,7 @@ class AliAnalysisManager;
 
 #include "TH1F.h"
 #include "TH2F.h"
+#include "TF1.h"
 #include "TCanvas.h"
 #include "TLegend.h"
 #include "TStyle.h"
@@ -55,7 +56,9 @@ AliAnalysisTaskSE()
   ,fHistTrigger(0)
   ,fHistHLTTrigger(0)  
   ,fChargeOff(0)  
-  ,fMomentumOff(0)     
+  ,fMomentumOff(0)
+  ,fMomentumOffTpc(0)
+  ,fMomentumOffTpcIts(0)       
   ,fDCAOff(0)          
   ,fNclusterOff(0)
   ,fNclusterOffwCut(0)         
@@ -64,15 +67,16 @@ AliAnalysisTaskSE()
   ,fPhiOff(0)          
   ,fThetaOff(0)        
   ,fMultOff(0)         
-  ,fVertexVSNtracksOff(0)
+  ,fXVertexVSNtracksOff(0)
+  ,fYVertexVSNtracksOff(0)
+  ,fZVertexVSNtracksOff(0)
+  ,fZVertexOffTemp(0)
   ,fXYvertexOff(0)     
   ,fXvertexOff(0)          
   ,fYvertexOff(0)          
   ,fZvertexOff(0)
   ,fEtaOff(0)
-  ,fEtaDCAcutOff(0)
-  ,fEtaOffTpc(0)
-  ,fEtaOffTpcIts(0)
+  ,fEtaMomentumcutOff(0)
   ,fNclusVSphiOff(0)
   ,fNclusVSthetaOff(0)
   ,fStatusOff(0)
@@ -81,6 +85,8 @@ AliAnalysisTaskSE()
   
   ,fChargeHLT(0)
   ,fMomentumHLT(0)
+  ,fMomentumHLTTpc(0)
+  ,fMomentumHLTTpcIts(0)
   ,fDCAHLT(0)  
   ,fNclusterHLT(0)
   ,fNclusterHLTwCut(0)
@@ -89,20 +95,22 @@ AliAnalysisTaskSE()
   ,fPhiHLT(0)     
   ,fThetaHLT(0)  
   ,fMultHLT(0)  
-  ,fVertexVSNtracksHLT(0) 
+  ,fXVertexVSNtracksHLT(0) 
+  ,fYVertexVSNtracksHLT(0) 
+  ,fZVertexVSNtracksHLT(0) 
+  ,fZVertexHLTTemp(0)
   ,fXYvertexHLT(0)
   ,fXvertexHLT(0)
   ,fYvertexHLT(0)
   ,fZvertexHLT(0)
   ,fEtaHLT(0)
-  ,fEtaDCAcutHLT(0)
-  ,fEtaHLTTpc(0)
-  ,fEtaHLTTpcIts(0)
+  ,fEtaMomentumcutHLT(0)
   ,fNclusVSphiHLT(0)       
   ,fNclusVSthetaHLT(0)
   ,fStatusHLT(0)
   ,fStatusHLT_Ocl(0)
   ,fEventSpecieHLT(0)
+  ,fTrgClsArray(0)
   
   //     ,fDCAOff_trig(0)
   //     ,fNclusterOff_trig(0)
@@ -111,23 +119,43 @@ AliAnalysisTaskSE()
   //     ,fNclusterHLT_trig(0)
 
 {
+  for(int jj=0;jj<7;jj++){
+    fXvertexVSNcontriOff[jj]=0;
+    fXvertexVSNcontriHLT[jj]=0;
+  }
+  for(int jj=0;jj<7;jj++){
+    fYvertexVSNcontriOff[jj]=0;
+    fYvertexVSNcontriHLT[jj]=0;
+  }
+  for(int jj=0;jj<7;jj++){
+    fZvertexVSNcontriOff[jj]=0;
+    fZvertexVSNcontriHLT[jj]=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());
+  // DefineOutput(1, TList::Class());
 }
  
 AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   :
   AliAnalysisTaskSE(name)    
+  ,fESDOfftrackCuts(0)
+  ,fESDHLTtrackCuts(0)
   ,fOutputList(0)
   ,fHistTrigger(0)
   ,fHistHLTTrigger(0)  
   ,fChargeOff(0)  
-  ,fMomentumOff(0)     
+  ,fMomentumOff(0)
+  ,fMomentumOffTpc(0)
+  ,fMomentumOffTpcIts(0)       
   ,fDCAOff(0)          
   ,fNclusterOff(0)
   ,fNclusterOffwCut(0) 
@@ -136,15 +164,16 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   ,fPhiOff(0)          
   ,fThetaOff(0)        
   ,fMultOff(0)         
-  ,fVertexVSNtracksOff(0)
+  ,fXVertexVSNtracksOff(0)
+  ,fYVertexVSNtracksOff(0)
+  ,fZVertexVSNtracksOff(0)
+  ,fZVertexOffTemp(0)
   ,fXYvertexOff(0)     
   ,fXvertexOff(0)          
   ,fYvertexOff(0)          
   ,fZvertexOff(0)
   ,fEtaOff(0)
-  ,fEtaDCAcutOff(0)
-  ,fEtaOffTpc(0)
-  ,fEtaOffTpcIts(0)
+  ,fEtaMomentumcutOff(0)
   ,fNclusVSphiOff(0)
   ,fNclusVSthetaOff(0)
   ,fStatusOff(0)
@@ -153,6 +182,8 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
 
   ,fChargeHLT(0)      
   ,fMomentumHLT(0)
+  ,fMomentumHLTTpc(0)
+  ,fMomentumHLTTpcIts(0)
   ,fDCAHLT(0)  
   ,fNclusterHLT(0)
   ,fNclusterHLTwCut(0)
@@ -161,20 +192,22 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   ,fPhiHLT(0)     
   ,fThetaHLT(0)  
   ,fMultHLT(0)  
-  ,fVertexVSNtracksHLT(0) 
+  ,fXVertexVSNtracksHLT(0)
+  ,fYVertexVSNtracksHLT(0)
+  ,fZVertexVSNtracksHLT(0)
+  ,fZVertexHLTTemp(0) 
   ,fXYvertexHLT(0)
   ,fXvertexHLT(0)
   ,fYvertexHLT(0)
   ,fZvertexHLT(0)
   ,fEtaHLT(0)
-  ,fEtaDCAcutHLT(0)
-  ,fEtaHLTTpc(0)
-  ,fEtaHLTTpcIts(0)
+  ,fEtaMomentumcutHLT(0)
   ,fNclusVSphiHLT(0)       
   ,fNclusVSthetaHLT(0)
   ,fStatusHLT(0)
   ,fStatusHLT_Ocl(0)    
   ,fEventSpecieHLT(0)
+  ,fTrgClsArray(0)
   //     ,fDCAOff_trig(0)
   //     ,fNclusterOff_trig(0)
   //     
@@ -182,13 +215,24 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   //     ,fNclusterHLT_trig(0)
 
 {
-  // Constructor
+  for(int jj=0;jj<7;jj++){
+    fXvertexVSNcontriOff[jj]=0;
+    fXvertexVSNcontriHLT[jj]=0;
+ }
+  for(int jj=0;jj<7;jj++){
+    fYvertexVSNcontriOff[jj]=0;
+     fYvertexVSNcontriHLT[jj]=0;
+  }
+  for(int jj=0;jj<7;jj++){
+    fZvertexVSNcontriOff[jj]=0;
+    fZvertexVSNcontriHLT[jj]=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());
 }
 
@@ -201,6 +245,8 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
 // 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};
 
+const Int_t  AliAnalysisTaskHLT::fNcontrArray[] ={3,6,9,12,15,18,21};
+const Int_t  AliAnalysisTaskHLT::fNcontr = 7;
 //----------------------------------------------------------------------------------------------------
 
 void AliAnalysisTaskHLT::UserCreateOutputObjects(){
@@ -234,11 +280,11 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   (fHistTrigger->GetXaxis())->SetBinLabel(8,"onlTrkThruCE"); 
   */
 
-  fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter", 64, 0, 64);
+  fHistTrigger = new TH1F("fHistTrigger", "CTP trigger counter",12 , 0, 12);
   fHistTrigger->GetXaxis()->SetTitle("");  
   fHistTrigger->GetYaxis()->SetTitle("#Events"); 
 
-  fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 64, 0, 64); 
+  fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 12, 0, 12); 
   fHistHLTTrigger->GetXaxis()->SetTitle("");
   fHistHLTTrigger->GetYaxis()->SetTitle("#Events");
 
@@ -248,9 +294,15 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   
   fMomentumOff = new TH1F("fMomentum_off", "momentum (offline)",1000, 0., 100);
   fMomentumHLT = new TH1F("fMomentum_hlt", "momentum (HLT)",    1000, 0., 100);
+
+  fMomentumOffTpc = new TH1F("fMomentumTpc_off","Momentum for kTPCin (offline)",100,-3,3);
+  fMomentumHLTTpc = new TH1F("fMomentumTpc_hlt","Momentum for kTPCin (HLT)",    100,-3,3);
+
+  fMomentumOffTpcIts = new TH1F("fMomentumTpcIts_off","Momentum for kTPCin && kITSin (offline)",100,-3,3);
+  fMomentumHLTTpcIts = new TH1F("fMomentumTpcIts_hlt","Momentum for kTPCin && kITSin (HLT)",    100,-3,3);
  
-  fDCAOff = new TH1F("fDCA_off","DCA to beam line (offline)",200, -100, 100);
-  fDCAHLT = new TH1F("fDCA_hlt","DCA to beam line (HLT)",    200, -100, 100);
+  fDCAOff = new TH1F("fDCA_off","DCA to beam line (offline)",200, -20, 20);
+  fDCAHLT = new TH1F("fDCA_hlt","DCA to beam line (HLT)",    200, -20, 20);
  
   fNclusterOff = new TH1F("fNcluster_off","clusters per track (offline)", 200, 0, 200);
   fNclusterHLT = new TH1F("fNcluster_hlt","clusters per track (HLT)",     200, 0, 200);
@@ -273,8 +325,17 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fMultOff = new TH1F("fMult_off","track multiplicity (offline)",100,0,100);
   fMultHLT = new TH1F("fMult_hlt","track multiplicity (HLT)",    100,0,100);
 
-  fVertexVSNtracksOff = new TH2F("fVertexNtracs_off", "Vertex resolution vs nr contributing tracks (Offline)",20, 0, 20, 40, -2, 2); 
-  fVertexVSNtracksHLT =  new TH2F("fVertexNtracs_hlt", "Vertex resolution vs nr contributing tracks (HLT)",20, 0, 20, 40, -2, 2); 
+  fXVertexVSNtracksOff = new TH2F("fXVertexNtracs_off", "X Vertex resolution vs nr contributing tracks (Offline)",21, 0, 20, 40, 0, 4); 
+  fXVertexVSNtracksHLT = new TH2F("fXVertexNtracs_hlt", "X Vertex resolution vs nr contributing tracks (HLT)",21, 0, 20, 40, 0, 4); 
+
+  fYVertexVSNtracksOff = new TH2F("fYVertexNtracs_off", "Y Vertex resolution vs nr contributing tracks (Offline)",21, 0, 20, 40, 0, 4); 
+  fYVertexVSNtracksHLT = new TH2F("fYVertexNtracs_hlt", "Y Vertex resolution vs nr contributing tracks (HLT)",21, 0, 20, 40, 0, 4); 
+
+  fZVertexVSNtracksOff = new TH2F("fZVertexNtracs_off", "Z Vertex resolution vs nr contributing tracks (Offline)",21, 0, 20, 40, 0, 10); 
+  fZVertexVSNtracksHLT = new TH2F("fZVertexNtracs_hlt", "Z Vertex resolution vs nr contributing tracks (HLT)",21, 0, 20, 40, 0, 10); 
+
+  fZVertexOffTemp = new TH1F("fZVertexTemo_off", "Temporary storage (Offline)", 250, -30, 30);
+  fZVertexHLTTemp = new TH1F("fZVertexTemo_hlt", "Temporary storage (HLT)", 250, -30, 30);
   
   fXYvertexOff = new TH2F("fXYvertex_off","XY primary vertex (offline)",100,-5,5,100,-5,5);
   fXYvertexHLT = new TH2F("fXYvertex_hlt","XY primary vertex (HLT)",    100,-5,5,100,-5,5);
@@ -288,17 +349,11 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fZvertexOff = new TH1F("fZvertex_off","Z primary vertex (offline)",250,-30,30);
   fZvertexHLT = new TH1F("fZvertex_hlt","Z primary vertex (HLT)",    250,-30,30);
   
-  fEtaOff = new TH1F("fEta_off","pseudorapidity (offline)",100,-3,3);
-  fEtaHLT = new TH1F("fEta_hlt","pseudorapidity (HLT)",    100,-3,3);
-  fEtaDCAcutOff = new TH1F("fEtaDCAcut_off","pseudorapidity DCAcut (offline)",100,-3,3);
-  fEtaDCAcutHLT = new TH1F("fEtaDCAcut_hlt","pseudorapidity DCAcut (HLT)",    100,-3,3);
+  fEtaOff = new TH1F("fEta_off","pseudorapidity (offline)",100,-2,2);
+  fEtaHLT = new TH1F("fEta_hlt","pseudorapidity (HLT)",    100,-2,2);
  
-  fEtaOffTpc = new TH1F("fEtaTpc_off","pseudorapidity for kTPCin (offline)",100,-3,3);
-  fEtaHLTTpc = new TH1F("fEtaTpc_hlt","pseudorapidity for kTPCin (HLT)",    100,-3,3);
-
-  fEtaOffTpcIts = new TH1F("fEtaTpcIts_off","pseudorapidity for kTPCin && kITSin (offline)",100,-3,3);
-  fEtaHLTTpcIts = new TH1F("fEtaTpcIts_hlt","pseudorapidity for kTPCin && kITSin (HLT)",    100,-3,3);
+  fEtaMomentumcutOff = new TH1F("fEtaMomentumcut_off","pseudorapidity DCAcut (offline)",100,-2,2);
+  fEtaMomentumcutHLT = new TH1F("fEtaMomentumcut_hlt","pseudorapidity DCAcut (HLT)",    100,-2,2);
 
   fNclusVSphiOff = new TH2F("fNclus_vs_phi_off","clusters per track vs. #phi (offline)",360,0,360,160,0,160);
   fNclusVSphiHLT = new TH2F("fNclus_vs_phi_hlt","clusters per track vs. #phi (HLT)",    360,0,360,160,0,160);
@@ -315,6 +370,14 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fEventSpecieOff = new TH1F("fEventSpecie_off","Eventspecie for Offline",18, 0, 18);
   fEventSpecieHLT = new TH1F("fEventSpecie_hlt","Eventspecie for HLT",18, 0, 18);
 
+  for(int jj=0;jj<fNcontr;jj++){
+  fXvertexVSNcontriOff[jj] = new TH1F(Form("fXVertex_vs_Ncontributors%d_off",fNcontrArray[jj]),Form("X position for vertex for %d contributors to vertex (Offline)"),250,-1,1);
+  fYvertexVSNcontriOff[jj] = new TH1F(Form("fYVertex_vs_Ncontributors%d_off",fNcontrArray[jj]),Form("Y position for vertex for %d contributors to vertex (Offline)"),250,-1,1 );
+  fZvertexVSNcontriOff[jj] = new TH1F(Form("fZVertex_vs_Ncontributors%d_off",fNcontrArray[jj]),Form("Z position for vertex for %d contributors to vertex (Offline)"),250,-30,30);
+  fXvertexVSNcontriHLT[jj] = new TH1F(Form("fXVertex_vs_Ncontributors%d_hlt",fNcontrArray[jj]),Form("X position for vertex for %d contributors to vertex (HLT)"), 250, -1,1);
+  fYvertexVSNcontriHLT[jj] = new TH1F(Form("fYVertex_vs_Ncontributors%d_hlt",fNcontrArray[jj]),Form("Y position for vertex for %d contributors to vertex (HLT)"), 250, -1,1);
+  fZvertexVSNcontriHLT[jj] = new TH1F(Form("fZVertex_vs_Ncontributors%d_hlt",fNcontrArray[jj]),Form("Z position for vertex for %d contributors to vertex (HLT)"), 250,-30,30);
+  }
   //---------------------- add histograms to the output TList ------------------//
 
   fOutputList->Add(fHistTrigger);
@@ -322,6 +385,8 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
 
   fOutputList->Add(fChargeOff);
   fOutputList->Add(fMomentumOff);
+  fOutputList->Add(fMomentumOffTpc);
+  fOutputList->Add(fMomentumOffTpcIts);
   fOutputList->Add(fDCAOff);     
   fOutputList->Add(fNclusterOff);
   fOutputList->Add(fNclusterOffwCut);
@@ -330,15 +395,16 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fOutputList->Add(fPhiOff);     
   fOutputList->Add(fThetaOff);    
   fOutputList->Add(fMultOff);
-  fOutputList->Add(fVertexVSNtracksOff);
+  fOutputList->Add(fXVertexVSNtracksOff);
+  fOutputList->Add(fYVertexVSNtracksOff);
+  fOutputList->Add(fZVertexVSNtracksOff);
+  fOutputList->Add(fZVertexOffTemp);
   fOutputList->Add(fXYvertexOff); 
   fOutputList->Add(fXvertexOff);  
   fOutputList->Add(fYvertexOff);  
   fOutputList->Add(fZvertexOff);  
   fOutputList->Add(fEtaOff);  
-  fOutputList->Add(fEtaDCAcutOff);
-  fOutputList->Add(fEtaOffTpc);
-  fOutputList->Add(fEtaOffTpcIts);
+  fOutputList->Add(fEtaMomentumcutOff);
   fOutputList->Add(fNclusVSphiOff);  
   fOutputList->Add(fNclusVSthetaOff);
   fOutputList->Add(fStatusOff);
@@ -347,6 +413,8 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
 
   fOutputList->Add(fChargeHLT);  
   fOutputList->Add(fMomentumHLT); 
+  fOutputList->Add(fMomentumHLTTpc);  
+  fOutputList->Add(fMomentumHLTTpcIts);
   fOutputList->Add(fDCAHLT);     
   fOutputList->Add(fNclusterHLT); 
   fOutputList->Add(fNclusterHLTwCut); 
@@ -355,21 +423,36 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fOutputList->Add(fPhiHLT);     
   fOutputList->Add(fThetaHLT);    
   fOutputList->Add(fMultHLT);   
-  fOutputList->Add(fVertexVSNtracksHLT); 
+  fOutputList->Add(fXVertexVSNtracksHLT); 
+  fOutputList->Add(fYVertexVSNtracksHLT); 
+  fOutputList->Add(fZVertexVSNtracksHLT); 
+  fOutputList->Add(fZVertexHLTTemp);
   fOutputList->Add(fXYvertexHLT); 
   fOutputList->Add(fXvertexHLT);  
   fOutputList->Add(fYvertexHLT);  
   fOutputList->Add(fZvertexHLT);    
   fOutputList->Add(fEtaHLT);  
-  fOutputList->Add(fEtaDCAcutHLT);
-  fOutputList->Add(fEtaHLTTpc);  
-  fOutputList->Add(fEtaHLTTpcIts);    
+  fOutputList->Add(fEtaMomentumcutHLT);    
   fOutputList->Add(fNclusVSphiHLT);  
   fOutputList->Add(fNclusVSthetaHLT);
   fOutputList->Add(fStatusHLT);
   fOutputList->Add(fStatusHLT_Ocl);
   fOutputList->Add(fEventSpecieHLT);
 
+  for(int jj=0;jj<fNcontr;jj++){
+    fOutputList->Add(fXvertexVSNcontriOff[jj]);
+    fOutputList->Add(fXvertexVSNcontriHLT[jj]);
+  }
+  for(int jj=0;jj<fNcontr;jj++){
+    fOutputList->Add(fYvertexVSNcontriOff[jj]);
+    fOutputList->Add(fYvertexVSNcontriHLT[jj]);
+  }
+
+  for(int jj=0;jj<fNcontr;jj++){
+    fOutputList->Add(fZvertexVSNcontriOff[jj]);
+    fOutputList->Add(fZvertexVSNcontriHLT[jj]);
+  }
+
   SetupESDtrackCuts();
 }
 
@@ -433,7 +516,8 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
   
   //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);
@@ -441,14 +525,18 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
       fHistHLTTrigger->Fill(i);
   }
 
+  //Select only beam-interaction
+  if(!(esdHLT->GetFiredTriggerClasses()).Contains("CINT1B-ABCE-NOPF-ALL"))
+   return;
+
   Double_t DCAcut = 7.0;
   Double_t Momcut= 0.3;
 
-  char test[50];
-  sprintf(test,"pseudorapidity (HLT), DCA cut = %f,\n Momentum cut = %f, TPC clusters > 70" , DCAcut, Momcut);
-  fEtaDCAcutHLT->SetTitle(test);
-  sprintf(test,"pseudorapidity (offline), DCA cut = %f, Momentum cut = %f, TPC clusters > 70", DCAcut, Momcut);
-  fEtaDCAcutOff->SetTitle(test);
+  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();
  
@@ -482,25 +570,40 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
   AliVertex *primVertexHLT = new AliVertex(vertexHLT, 0., 0);
 
   Bool_t testVertexHLT=kTRUE;
-  if(vertHLT->GetNContributors()<1) {
+  Int_t nr_contributorsHLT= vertHLT->GetNContributors();
+
+  if(nr_contributorsHLT<1) {
     // SPD vertex
     vertHLT = esdHLT->GetPrimaryVertexSPD();
-    if(vertHLT->GetNContributors()<1) {
+    if(nr_contributorsHLT<1) {
       // NO GOOD VERTEX, SKIP EVENT 
       testVertexHLT=kFALSE;
     }
   }
-  fVertexVSNtracksHLT->Fill(vertHLT->GetNContributors(),vertHLT->GetZv());
-  if(vertHLT->GetZ()!=0){
+  if(testVertexHLT){
     fXYvertexHLT->Fill(vertHLT->GetX(), vertHLT->GetY() );
     fXvertexHLT->Fill( vertHLT->GetX() );
     fYvertexHLT->Fill( vertHLT->GetY() );
     fZvertexHLT->Fill( vertHLT->GetZ() );
-  }
-
+    fZVertexHLTTemp->Fill(vertHLT->GetZ());
+    for(int kkk=0; kkk<fNcontr-1;kkk++){
+      if(nr_contributorsHLT>=fNcontrArray[kkk] && nr_contributorsHLT<=fNcontrArray[kkk+1]){
+       fXvertexVSNcontriHLT[kkk]->Fill(vertHLT->GetX());
+       fYvertexVSNcontriHLT[kkk]->Fill(vertHLT->GetY());
+       fZvertexVSNcontriHLT[kkk]->Fill(vertHLT->GetZ());
+      }
+    }
+    if(nr_contributorsHLT>=fNcontrArray[fNcontr-1]){
+      fXvertexVSNcontriHLT[fNcontr-1]->Fill(vertHLT->GetX());
+      fYvertexVSNcontriHLT[fNcontr-1]->Fill(vertHLT->GetY());
+      fZvertexVSNcontriHLT[fNcontr-1]->Fill(vertHLT->GetZ());
+    }
 
-  if(testVertexHLT){
-    //if( vertHLT && vertHLT->GetNContributors() >= 5 && (TMath::Abs(vertHLT->GetZ())<5.5) ){
+  }
+  //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());
 
@@ -519,39 +622,53 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
        }
       } 
 
-      if(esdtrackHLT->GetTPCNcls()>0) fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
+      //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;
+
+      fDCAHLT->Fill(esdtrackHLT->GetD(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), bfield) );  
       fChargeHLT->Fill(esdtrackHLT->Charge());
-      if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) fEtaHLTTpc->Fill(esdtrackHLT->Eta());
-      if (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin)         fEtaHLTTpcIts->Fill(esdtrackHLT->Eta());   
-      //ESD-cut
-      if(!fESDHLTtrackCuts->AcceptTrack(esdtrackHLT) )continue;                
+
+      if((esdtrackHLT->GetStatus()&AliESDtrack::kTPCin) || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kTPCout))
+       fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
+
+      //ESD-cut 
+      //At the moment not included!
+      //if(!fESDHLTtrackCuts->AcceptTrack(esdtrackHLT)) continue;                    
       
-      if((esdHLT->GetEventSpecie()==16)) {
-       Printf("Reject laser event %d",esdOFF->GetEventSpecie());
-       continue; //reject laser events
+      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->GetTPCNcls()>0) fNclusVSphiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
-      if(esdtrackHLT->GetTPCNcls()>0) fNclusVSthetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
-      fEtaHLT->Fill(esdtrackHLT->Eta());
-      fDCAHLT->Fill(esdtrackHLT->GetD(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), bfield) ); 
-      
-      fdEdxHLT->Fill( esdtrackHLT->GetTPCsignal() );
-      fdEdxVSPHLT->Fill( TMath::Abs(esdtrackHLT->P()), esdtrackHLT->GetTPCsignal() );         
 
+      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; //cut away tracks with mom<0.3GeV
-      fEtaDCAcutHLT->Fill(esdtrackHLT->Eta());
+      fEtaHLT->Fill(esdtrackHLT->Eta()); 
+      fdEdxHLT->Fill( esdtrackHLT->GetTPCsignal() );
+      fdEdxVSPHLT->Fill( TMath::Abs(esdtrackHLT->Pt()), esdtrackHLT->GetTPCsignal() );         
+
+      //cut away tracks with mom<0.3GeV
+      //if(TMath::Abs(esdtrackHLT->Pt()) <Momcut) continue; 
       fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
       fThetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg());
-      if(esdtrackHLT->GetTPCNcls()>0) fNclusterHLTwCut->Fill(esdtrackHLT->GetTPCNcls());
-      fMomentumHLT->Fill( TMath::Abs(esdtrackHLT->P()) ); 
-
-         
+      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
   }  
@@ -572,39 +689,48 @@ 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
     vertOff = esdOFF->GetPrimaryVertexSPD();
     if(vertOff->GetNContributors()<1) {
       // NO GOOD VERTEX, SKIP EVENT 
       testVertex=kFALSE;
-      //      Printf("This vertex is away");
     }
   }
-  fVertexVSNtracksOff->Fill(vertOff->GetNContributors(),vertOff->GetZv());
   
-  if(vertOff->GetZ()!=0){
+  if(testVertex){
     fXYvertexOff->Fill(vertOff->GetX(), vertOff->GetY() );
     fXvertexOff->Fill( vertOff->GetX() );
     fYvertexOff->Fill( vertOff->GetY() );
     fZvertexOff->Fill( vertOff->GetZ() );
-  }
 
-  if(testVertex){ 
+    for(int kkk=0; kkk<fNcontr-1;kkk++){
+      if(nr_contributorsOff>=fNcontrArray[kkk] && nr_contributorsOff<=fNcontrArray[kkk+1] ){
+       fXvertexVSNcontriOff[kkk]->Fill(vertOff->GetX() );
+       fYvertexVSNcontriOff[kkk]->Fill(vertOff->GetY() );
+       fZvertexVSNcontriOff[kkk]->Fill(vertOff->GetZ() );
+      }
+    }
+    if(nr_contributorsOff>=fNcontrArray[fNcontr-1]){
+      fXvertexVSNcontriOff[fNcontr-1]->Fill(vertOff->GetX());
+      fYvertexVSNcontriOff[fNcontr-1]->Fill(vertOff->GetY());
+      fZvertexVSNcontriOff[fNcontr-1]->Fill(vertOff->GetZ());
+    }
+  }
 
+  //At the moment no constrains on vertex before filling histograms
+  //Should be changed. 
+  if(1){
     fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
 
     for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){ 
      
       AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i); 
-
       if (!esdtrackOFF) continue;
 
-      fChargeOff->Fill(esdtrackOFF->Charge());
 
-      if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) fEtaOffTpc->Fill(esdtrackOFF->Eta());
-      if (esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin)         fEtaOffTpcIts->Fill(esdtrackOFF->Eta());   
-      
       //Fill histograms with which flags are set
       for(int jjj=0;jjj<12;jjj++){
        if(esdtrackOFF->GetStatus()&Statusnames[jjj]) {
@@ -612,26 +738,50 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
          if(esdtrackOFF->GetTPCNcls()==0) fStatusOff_Ocl->Fill(jjj);
        }
       } 
-      if(esdtrackOFF->GetTPCNcls()>0) fNclusterOff->Fill(esdtrackOFF->GetTPCNcls()); 
 
+      // 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; 
+
+      fDCAOff->Fill(esdtrackOFF->GetD(esdOFF->GetPrimaryVertex()->GetXv(), esdOFF->GetPrimaryVertex()->GetYv(), bfield) ); 
+      fChargeOff->Fill(esdtrackOFF->Charge());
+
+      if((esdtrackOFF->GetStatus()&AliESDtrack::kTPCin) || (esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kTPCout))
+       fNclusterOff->Fill(esdtrackOFF->GetTPCNcls()); 
+
+      // -- ESD cuts
+      //Not included at the moment
+      //if(!fESDOfftrackCuts->AcceptTrack(esdtrackOFF) ) continue;
 
-      if(!fESDOfftrackCuts->AcceptTrack(esdtrackOFF) ) continue;// -- ESD cuts
-      if((esdOFF->GetEventSpecie()==16)) continue;        // reject laser events
       if(esdtrackOFF->GetTPCNcls()>0) fNclusVSphiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
       if(esdtrackOFF->GetTPCNcls()>0) fNclusVSthetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
 
-      fDCAOff->Fill(esdtrackOFF->GetD(esdOFF->GetPrimaryVertex()->GetXv(), esdOFF->GetPrimaryVertex()->GetYv(), bfield) ); 
+      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->P()), esdtrackOFF->GetTPCsignal() );         
-         
-      if(TMath::Abs(esdtrackOFF->Pt()) < Momcut) continue;//cut away tracks with mom<0.3GeV
-      fEtaDCAcutOff->Fill(esdtrackOFF->Eta()); 
+      fdEdxVSPOff->Fill( TMath::Abs(esdtrackOFF->Pt()), esdtrackOFF->GetTPCsignal() );         
+      
+      //cut away tracks with mom<0.3GeV
+      //if(TMath::Abs(esdtrackOFF->Pt()) < Momcut) continue;
       fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg());
       fThetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg());
-      if(esdtrackOFF->GetTPCNcls()>0) fNclusterOffwCut->Fill(esdtrackOFF->GetTPCNcls()); 
-      fMomentumOff->Fill( TMath::Abs(esdtrackOFF->P()) ); 
-      
+      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()){
            
@@ -696,9 +846,57 @@ void AliAnalysisTaskHLT::Terminate(Option_t *){
 
   Bool_t print_png=kFALSE;
   if(print_png){
+  
+    TF1 *signalX= new TF1("signalX","gaus",-1,1); 
+    TF1 *signalY= new TF1("signalY","gaus",-1,1);
+    TF1 *signalZ= new TF1("signalZ","gaus",-30,30);
 
-    Int_t maxbin =0;
+    signalZ->SetLineColor(8);
+    signalZ->SetLineWidth(2);
+    
+    fXVertexVSNtracksHLT->SetMarkerStyle(7);
+    fXVertexVSNtracksHLT->SetMarkerSize(7);
+    fXVertexVSNtracksOff->SetMarkerStyle(7);
+    fXVertexVSNtracksOff->SetMarkerSize(7);
+
+    fYVertexVSNtracksHLT->SetMarkerStyle(7);
+    fYVertexVSNtracksHLT->SetMarkerSize(7);
+    fYVertexVSNtracksOff->SetMarkerStyle(7);
+    fYVertexVSNtracksOff->SetMarkerSize(7);
+
+    fZVertexVSNtracksHLT->Sumw2();
+    fZVertexVSNtracksHLT->SetMarkerStyle(21);
+    fZVertexVSNtracksHLT->SetMarkerSize(0.7);
+    fZVertexVSNtracksOff->Sumw2();
+    fZVertexVSNtracksOff->SetMarkerStyle(21);
+    fZVertexVSNtracksOff->SetMarkerSize(0.7);
+
+    for(int jj=0;jj<fNcontr;jj++){
+
+      fXvertexVSNcontriOff[jj]->Fit(signalX,"RQ");
+      fXVertexVSNtracksOff->Fill(fNcontrArray[jj],signalX->GetParameter(2)); 
+
+      fYvertexVSNcontriOff[jj]->Fit(signalY,"RQ");
+      fYVertexVSNtracksOff->Fill(fNcontrArray[jj],signalY->GetParameter(2));
+
+      fZvertexVSNcontriOff[jj]->Fit(signalZ,"RQ");
+      fZVertexVSNtracksOff->Fill(fNcontrArray[jj],signalZ->GetParameter(2));
+      fZVertexVSNtracksOff->Fill(fNcontrArray[jj],signalZ->GetParameter(2), signalZ->GetParError(2));
+    
+      fXvertexVSNcontriHLT[jj]->Fit(signalX,"RQ");
+      fXVertexVSNtracksHLT->Fill(fNcontrArray[jj],signalX->GetParameter(2));
+
+      fYvertexVSNcontriHLT[jj]->Fit(signalY,"RQ");
+      fYVertexVSNtracksHLT->Fill(fNcontrArray[jj],signalY->GetParameter(2));
+    
+      fZvertexVSNcontriHLT[jj]->Fit(signalZ,"RQ");
+      fZVertexVSNtracksHLT->Fill(fNcontrArray[jj],signalZ->GetParameter(2));
+      fZVertexVSNtracksHLT->Fill(fNcontrArray[jj],signalZ->GetParameter(2), signalZ->GetParError(2));
 
+    }
+
+    //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);
@@ -721,14 +919,14 @@ void AliAnalysisTaskHLT::Terminate(Option_t *){
     legend->Draw("");
 
     c1->cd(2);
-    maxbin =fEtaDCAcutOff->GetBinContent(fEtaDCAcutOff->GetMaximumBin());
-    if(maxbin < fEtaDCAcutHLT->GetBinContent(fEtaDCAcutHLT->GetMaximumBin()))
-      maxbin=fEtaDCAcutHLT->GetBinContent(fEtaDCAcutHLT->GetMaximumBin());
-    fEtaDCAcutOff->SetMaximum(maxbin+20);
-    fEtaDCAcutOff->SetTitle("Pseudorapidity");
-    fEtaDCAcutOff->SetLineColor(2);
-    fEtaDCAcutOff->DrawCopy("");
-    fEtaDCAcutHLT->DrawCopy("sames");
+    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());
@@ -819,11 +1017,18 @@ void AliAnalysisTaskHLT::Terminate(Option_t *){
 
 void AliAnalysisTaskHLT::SetupESDtrackCuts() {
   // Setup ESD cuts
+  // NB! Work in progress!
 
   Bool_t selPrimaries = kTRUE;
-
+  
   fESDOfftrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selPrimaries);
+  //To make Offline cuts = HLT cuts
+  fESDOfftrackCuts->SetRequireITSRefit(kFALSE); 
+  fESDOfftrackCuts->SetEtaRange(-0.9,+0.9);
+  
 
+  //HLT
+  //NB! Need to understand this a bit more! Which cuts should we keep?
   fESDHLTtrackCuts = new AliESDtrackCuts;
 
   // TPC  
@@ -832,12 +1037,9 @@ void AliAnalysisTaskHLT::SetupESDtrackCuts() {
   fESDHLTtrackCuts->SetMaxChi2PerClusterTPC(4);
   fESDHLTtrackCuts->SetAcceptKinkDaughters(kFALSE);
 
-  // -- fESDHLTtrackCuts->SetRequireTPCRefit(kTRUE); -- JMT not present in HLT ESD
-  // ITS
-  // -- fESDHLTtrackCuts->SetRequireITSRefit(kTRUE); -- JMT not present in HLT ESD
-
   fESDHLTtrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
-                                            AliESDtrackCuts::kAny);
+                                    AliESDtrackCuts::kAny);
+
   if(selPrimaries) { // 7*(0.0050+0.0060/pt^0.9)
     fESDHLTtrackCuts->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/pt^0.9");
   }
index 4340fd7d7211573271400cf09fa142e6c5ba3802..73dd265ef561992d29c6f1f09f15221f09eec86b 100644 (file)
@@ -67,68 +67,100 @@ class AliAnalysisTaskHLT : public AliAnalysisTaskSE {
     
     void SetupESDtrackCuts();  
 
+
+  
+    /*
+     * ---------------------------------------------------------------------------------
+     *                             Members - private
+     * ---------------------------------------------------------------------------------
+     */
+
+
+    static const Int_t fNcontrArray[];   //! Array to hold the different number of contributors
+    static const Int_t fNcontr;          //! Array size
+
     //----------------------------------------------------------------------------------
-    
-    AliESDtrackCuts *fESDOfftrackCuts;   // ESD cuts  
-    AliESDtrackCuts *fESDHLTtrackCuts;   // ESD cuts - on HLT object 
-    
 
+
+
+    AliESDtrackCuts *fESDOfftrackCuts;   //! ESD cuts  
+    AliESDtrackCuts *fESDHLTtrackCuts;   //! ESD cuts - on HLT object 
+    
     TList *fOutputList; // list of output histograms
 
-    TH1F *fHistTrigger, *fHistHLTTrigger; // trigger counters 
-
-    TH1F  *fChargeOff;         // Charge distribution      
-    TH1F  *fMomentumOff;       // momentum     
-    TH1F  *fDCAOff;            // track DCA to beam line        
-    TH1F  *fNclusterOff;       // #clusters per track
-    TH1F  *fNclusterOffwCut;   // #clusters per track w cuts
-    TH1F  *fdEdxOff;           // TPC signal (offline)
-    TH2F  *fdEdxVSPOff;        // dE/dx vs. momentum 
-    TH1F  *fPhiOff;            // azimuthal angle distribution
-    TH1F  *fThetaOff;          // polar angle distribution
-    TH1F  *fMultOff;           // track multiplicity of the event
-    TH2F  *fVertexVSNtracksOff;// Vertex resolution vs nr contrib tracks    
-    TH2F  *fXYvertexOff;       // XY primary vertex distribution
-    TH1F  *fXvertexOff;        // X primary vertex distribution
-    TH1F  *fYvertexOff;        // Y primary vertex distribution
-    TH1F  *fZvertexOff;        // Z primary vertex distribution
-    TH1F  *fEtaOff;            // pseudorapidity
-    TH1F  *fEtaDCAcutOff;      // pseudorapidity with DCA cut
-    TH1F  *fEtaOffTpc;         // pseudorapidity for kTPCin
-    TH1F  *fEtaOffTpcIts;      // pseudorapidity for kTPCin && kITSin
-    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 *fHistTrigger, *fHistHLTTrigger; //! trigger counters 
+
+    TH1F  *fChargeOff;         //! Charge distribution      
+    TH1F  *fMomentumOff;       //! momentum    
+    TH1F  *fMomentumOffTpc;         //! pseudorapidity for kTPCin
+    TH1F  *fMomentumOffTpcIts;      //! pseudorapidity for kTPCin && kITSin
+    TH1F  *fDCAOff;            //! track DCA to beam line       
+    TH1F  *fNclusterOff;       //! #clusters per track
+    TH1F  *fNclusterOffwCut;   //! #clusters per track w cuts
+    TH1F  *fdEdxOff;           //! TPC signal (offline)
+    TH2F  *fdEdxVSPOff;        //! dE/dx vs. momentum 
+    TH1F  *fPhiOff;            //! azimuthal angle distribution
+    TH1F  *fThetaOff;          //! polar angle distribution
+    TH1F  *fMultOff;           //! track multiplicity of the event
+    TH2F  *fXVertexVSNtracksOff;//! X Vertex resolution vs nr contrib tracks  
+    TH2F  *fYVertexVSNtracksOff;//! Y Vertex resolution vs nr contrib tracks  
+    TH2F  *fZVertexVSNtracksOff;//! Z Vertex resolution vs nr contrib tracks  
+    TH1F  *fZVertexOffTemp;    //! Temporary histogram to calculate vertex distribution  
+    TH2F  *fXYvertexOff;       //! XY primary vertex distribution
+    TH1F  *fXvertexOff;        //! X primary vertex distribution
+    TH1F  *fYvertexOff;        //! Y primary vertex distribution
+    TH1F  *fZvertexOff;        //! Z primary vertex distribution
+    TH1F  *fEtaOff;            //! pseudorapidity
+    TH1F  *fEtaMomentumcutOff;      //! pseudorapidity with DCA cut
+    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 
-    TH1F  *fMomentumHLT;       // momentum     
-    TH1F  *fDCAHLT;           // track DCA to beam line         
-    TH1F  *fNclusterHLT;       // #clusters per track
-    TH1F  *fNclusterHLTwCut;   // #clusters per track with cuts
-    TH1F  *fdEdxHLT;          // TPC signal (offline)
-    TH2F  *fdEdxVSPHLT;        // dE/dx vs. momentum 
-    TH1F  *fPhiHLT;           // azimuthal angle distribution
-    TH1F  *fThetaHLT;          // polar angle distribution
-    TH1F  *fMultHLT;          // track multiplicity of the event   
-    TH2F  *fVertexVSNtracksHLT;// Vertex resolution vs nr contrib tracks 
-    TH2F  *fXYvertexHLT;       // XY primary vertex distribution
-    TH1F  *fXvertexHLT;        // X primary vertex distribution
-    TH1F  *fYvertexHLT;        // Y primary vertex distribution
-    TH1F  *fZvertexHLT;        // Z primary vertex distribution
-    TH1F  *fEtaHLT;           // pseudorapidity
-    TH1F  *fEtaDCAcutHLT;      // pseudorapidity with DCA cut
-    TH1F  *fEtaHLTTpc;         // pseudorapidity for kTPCin
-    TH1F  *fEtaHLTTpcIts;      // pseudorapidity for kTPCin && kITSin
-    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
+    TH1F  *fChargeHLT;         //! Charge distribution 
+    TH1F  *fMomentumHLT;       //! momentum    
+    TH1F  *fMomentumHLTTpc;    //! pseudorapidity for kTPCin
+    TH1F  *fMomentumHLTTpcIts; //! pseudorapidity for kTPCin && kITSin
+    TH1F  *fDCAHLT;           //! track DCA to beam line        
+    TH1F  *fNclusterHLT;       //! #clusters per track
+    TH1F  *fNclusterHLTwCut;   //! #clusters per track with cuts
+    TH1F  *fdEdxHLT;          //! TPC signal (offline)
+    TH2F  *fdEdxVSPHLT;        //! dE/dx vs. momentum 
+    TH1F  *fPhiHLT;           //! azimuthal angle distribution
+    TH1F  *fThetaHLT;          //! polar angle distribution
+    TH1F  *fMultHLT;          //! track multiplicity of the event   
+    TH2F  *fXVertexVSNtracksHLT;//! X Vertex resolution vs nr contrib tracks
+    TH2F  *fYVertexVSNtracksHLT;//! Y Vertex resolution vs nr contrib tracks
+    TH2F  *fZVertexVSNtracksHLT;//! Z Vertex resolution vs nr contrib tracks
+    TH1F  *fZVertexHLTTemp;    //! Temporary histogram to calculate vertex distribution   
+    TH2F  *fXYvertexHLT;       //! XY primary vertex distribution
+    TH1F  *fXvertexHLT;        //! X primary vertex distribution
+    TH1F  *fYvertexHLT;        //! Y primary vertex distribution
+    TH1F  *fZvertexHLT;        //! Z primary vertex distribution
+    TH1F  *fEtaHLT;           //! pseudorapidity
+    TH1F  *fEtaMomentumcutHLT;      //! pseudorapidity with DCA cut
+    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
-   
+    TObjArray *fTrgClsArray; //! array of trigger classes
+
+
+    TH1F  *fXvertexVSNcontriOff[7];  //! X vertex distribution for various number of contributors
+    TH1F  *fYvertexVSNcontriOff[7];  //! Y vertex distribution for various number of contributors
+    TH1F  *fZvertexVSNcontriOff[7];  //! Z vertex distribution for various number of contributors
+    TH1F  *fXvertexVSNcontriHLT[7];  //! X vertex distribution for various number of contributors
+    TH1F  *fYvertexVSNcontriHLT[7];  //! Y vertex distribution for various number of contributors
+    TH1F  *fZvertexVSNcontriHLT[7];  //! Z vertex distribution for various number of contributors
+
+
+  
 //     TH1F *fDCAOff_trig;      //! track DCA to beam line for triggered events
 //     TH1F *fNclusterOff_trig; //! #clusters per track for triggered events
 //     
index 41a3e9e174f91a1b9499b924c9c62804b09827dc..76f3bb3b84540fa6d4988e83f9770fe5f69090ab 100755 (executable)
@@ -9,7 +9,7 @@
  * @author Kalliopi.Kanaki@ift.uib.no
  */
 
-AliAnalysisGrid *CreateAlienHandler(TString runNumber, TString dataDir, TString gridWorkingDir, TString gridOutputDir, const char* mode = "full", const char* detectorTask="global"){
+AliAnalysisGridCreateAlienHandler(TString runNumber, TString dataDir, TString gridWorkingDir, TString gridOutputDir, const char* mode = "full", const char* detectorTask="global"){
   
   // Check if user has a valid token, otherwise make one. This has limitations.
   // One can always follow the standard procedure of calling alien-token-init then
@@ -23,24 +23,19 @@ AliAnalysisGrid *CreateAlienHandler(TString runNumber, TString dataDir, TString
   
   // check the versions available on alien with the command 'packages'
   plugin->SetAPIVersion("V1.1x");
-  plugin->SetROOTVersion("v5-26-00b-4");
-  plugin->SetAliROOTVersion("v4-19-11-AN");
+  plugin->SetROOTVersion("v5-26-00b-6");
+  plugin->SetAliROOTVersion("v4-19-15-AN");
 
   // data alien directory
-  //plugin->SetGridDataDir("/alice/data/2010/LHC10b");
   plugin->SetGridDataDir(dataDir.Data());
   
   // Set data search pattern
-  plugin->SetDataPattern("*ESDs.root");
-  //plugin->SetDataPattern("pass1/*tags.root");
-  
-  //plugin->AddRunNumber(115322); 
+  plugin->SetDataPattern("*pass1/*ESDs.root");
+    
   plugin->AddRunNumber(runNumber); 
   //plugin->SetRunRange(xxx,yyy);
  
   // define working and output directories
-  //plugin->SetGridWorkingDir("ESDcomparison"); // relative to $HOME
-  //plugin->SetGridOutputDir("output");         // relative to working dir
   plugin->SetGridWorkingDir(gridWorkingDir); // relative to $HOME
   plugin->SetGridOutputDir(gridOutputDir);   // relative to working dir
   
@@ -87,23 +82,27 @@ AliAnalysisGrid *CreateAlienHandler(TString runNumber, TString dataDir, TString
   if(bTPC){  
     plugin->SetAnalysisSource("AliAnalysisTaskHLTTPC.cxx");  
     plugin->SetAdditionalLibs("AliAnalysisTaskHLTTPC.h AliAnalysisTaskHLTTPC.cxx");
-    plugin->SetOutputFiles("HLT-OFFLINE-TPC-comparison.root");    
+    //plugin->SetOutputFiles("HLT-OFFLINE-TPC-comparison.root");    
   }
   if(bITS){  
     plugin->SetAnalysisSource("AliAnalysisTaskHLTITS.cxx");  
     plugin->SetAdditionalLibs("AliAnalysisTaskHLTITS.h AliAnalysisTaskHLTITS.cxx");
-    plugin->SetOutputFiles("HLT-OFFLINE-ITS-comparison.root");    
+    //plugin->SetOutputFiles("HLT-OFFLINE-ITS-comparison.root");    
   }
   if(bPHOS){  
     plugin->SetAnalysisSource("AliAnalysisTaskHLTPHOS.cxx");  
-    plugin->SetOutputFiles("HLT-OFFLINE-GLOBAL-comparison.root");
-    plugin->SetOutputFiles("HLT-OFFLINE-PHOS-comparison.root");    
+    plugin->SetAnalysisSource("AliAnalysisTaskHLTCalo.cxx"); 
+    plugin->SetAdditionalLibs("AliAnalysisTaskHLTPHOS.h AliAnalysisTaskHLTPHOS.cxx"); 
+    plugin->SetAdditionalLibs("AliAnalysisTaskHLTCalo.h AliAnalysisTaskHLTCalo.cxx"); 
+    //plugin->SetOutputFiles("HLT-OFFLINE-PHOS-comparison.root");    
   }
   if(bGLOBAL){  
     plugin->SetAnalysisSource("AliAnalysisTaskHLT.cxx");  
     plugin->SetAdditionalLibs("AliAnalysisTaskHLT.h AliAnalysisTaskHLT.cxx"); 
-    plugin->SetOutputFiles("HLT-OFFLINE-GLOBAL-comparison.root");
+    //plugin->SetOutputFiles("HLT-OFFLINE-GLOBAL-comparison.root");
   }
+  
+  plugin->SetDefaultOutputs(kTRUE);
 
   // Optionally define the files to be archived.
   plugin->SetOutputArchive("log_archive.zip:stdout,stderr");