]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
- finalized the HLT cuts in agreement to the offline ones (Hege)
authorkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 23 May 2010 14:30:10 +0000 (14:30 +0000)
committerkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 23 May 2010 14:30:10 +0000 (14:30 +0000)
- small fix in the macro

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

index 3b4d2872a3585d4ce2e84a281af55cf52e76fb9e..707e7af1178546020f8ebd9abfdc57b445e14583 100644 (file)
@@ -49,46 +49,60 @@ ClassImp(AliAnalysisTaskHLT)
 AliAnalysisTaskHLT::AliAnalysisTaskHLT()
 :
 AliAnalysisTaskSE()
+  ,fESDOfftrackCuts(0)
+  ,fESDHLTtrackCuts(0)
   ,fOutputList(0)
   ,fHistTrigger(0)
-  ,fHistHLTTrigger(0)    
+  ,fHistHLTTrigger(0)  
+  ,fChargeOff(0)  
   ,fMomentumOff(0)     
   ,fDCAOff(0)          
-  ,fNclusterOff(0)     
+  ,fNclusterOff(0)
+  ,fNclusterOffwCut(0)         
   ,fdEdxOff(0)         
   ,fdEdxVSPOff(0)      
   ,fPhiOff(0)          
   ,fThetaOff(0)        
   ,fMultOff(0)         
+  ,fVertexVSNtracksOff(0)
   ,fXYvertexOff(0)     
   ,fXvertexOff(0)          
   ,fYvertexOff(0)          
   ,fZvertexOff(0)
   ,fEtaOff(0)
   ,fEtaDCAcutOff(0)
+  ,fEtaOffTpc(0)
+  ,fEtaOffTpcIts(0)
   ,fNclusVSphiOff(0)
   ,fNclusVSthetaOff(0)
   ,fStatusOff(0)
   ,fStatusOff_Ocl(0)
+  ,fEventSpecieOff(0)
   
+  ,fChargeHLT(0)
   ,fMomentumHLT(0)
   ,fDCAHLT(0)  
   ,fNclusterHLT(0)
+  ,fNclusterHLTwCut(0)
   ,fdEdxHLT(0)    
   ,fdEdxVSPHLT(0)
   ,fPhiHLT(0)     
   ,fThetaHLT(0)  
-  ,fMultHLT(0)   
+  ,fMultHLT(0)  
+  ,fVertexVSNtracksHLT(0) 
   ,fXYvertexHLT(0)
   ,fXvertexHLT(0)
   ,fYvertexHLT(0)
   ,fZvertexHLT(0)
   ,fEtaHLT(0)
   ,fEtaDCAcutHLT(0)
+  ,fEtaHLTTpc(0)
+  ,fEtaHLTTpcIts(0)
   ,fNclusVSphiHLT(0)       
   ,fNclusVSthetaHLT(0)
   ,fStatusHLT(0)
   ,fStatusHLT_Ocl(0)
+  ,fEventSpecieHLT(0)
   
   //     ,fDCAOff_trig(0)
   //     ,fNclusterOff_trig(0)
@@ -111,44 +125,56 @@ AliAnalysisTaskHLT::AliAnalysisTaskHLT(const char *name)
   AliAnalysisTaskSE(name)    
   ,fOutputList(0)
   ,fHistTrigger(0)
-  ,fHistHLTTrigger(0)    
+  ,fHistHLTTrigger(0)  
+  ,fChargeOff(0)  
   ,fMomentumOff(0)     
   ,fDCAOff(0)          
-  ,fNclusterOff(0)     
+  ,fNclusterOff(0)
+  ,fNclusterOffwCut(0) 
   ,fdEdxOff(0)         
   ,fdEdxVSPOff(0)      
   ,fPhiOff(0)          
   ,fThetaOff(0)        
   ,fMultOff(0)         
+  ,fVertexVSNtracksOff(0)
   ,fXYvertexOff(0)     
   ,fXvertexOff(0)          
   ,fYvertexOff(0)          
   ,fZvertexOff(0)
   ,fEtaOff(0)
   ,fEtaDCAcutOff(0)
+  ,fEtaOffTpc(0)
+  ,fEtaOffTpcIts(0)
   ,fNclusVSphiOff(0)
   ,fNclusVSthetaOff(0)
   ,fStatusOff(0)
   ,fStatusOff_Ocl(0)
-      
+  ,fEventSpecieOff(0)
+
+  ,fChargeHLT(0)      
   ,fMomentumHLT(0)
   ,fDCAHLT(0)  
   ,fNclusterHLT(0)
+  ,fNclusterHLTwCut(0)
   ,fdEdxHLT(0)    
   ,fdEdxVSPHLT(0)
   ,fPhiHLT(0)     
   ,fThetaHLT(0)  
-  ,fMultHLT(0)   
+  ,fMultHLT(0)  
+  ,fVertexVSNtracksHLT(0) 
   ,fXYvertexHLT(0)
   ,fXvertexHLT(0)
   ,fYvertexHLT(0)
   ,fZvertexHLT(0)
   ,fEtaHLT(0)
   ,fEtaDCAcutHLT(0)
+  ,fEtaHLTTpc(0)
+  ,fEtaHLTTpcIts(0)
   ,fNclusVSphiHLT(0)       
   ,fNclusVSthetaHLT(0)
   ,fStatusHLT(0)
   ,fStatusHLT_Ocl(0)    
+  ,fEventSpecieHLT(0)
   //     ,fDCAOff_trig(0)
   //     ,fNclusterOff_trig(0)
   //     
@@ -214,7 +240,10 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
 
   fHistHLTTrigger = new TH1F("fHistHLTTrigger", "HLT CTP trigger counter", 64, 0, 64); 
   fHistHLTTrigger->GetXaxis()->SetTitle("");
-  fHistHLTTrigger->GetYaxis()->SetTitle("#Events");  
+  fHistHLTTrigger->GetYaxis()->SetTitle("#Events");
+
+  fChargeOff = new TH1F("fCharge_off", "Charge distribution (Offline)", 12, -3, 3);  
+  fChargeHLT = new TH1F("fCharge_hlt", "Charge distribution (HLT)", 12, -3, 3);  
 
   
   fMomentumOff = new TH1F("fMomentum_off", "momentum (offline)",1000, 0., 100);
@@ -226,6 +255,9 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fNclusterOff = new TH1F("fNcluster_off","clusters per track (offline)", 200, 0, 200);
   fNclusterHLT = new TH1F("fNcluster_hlt","clusters per track (HLT)",     200, 0, 200);
  
+  fNclusterOffwCut = new TH1F("fNcluster_wcut_off","clusters per track with cuts (offline)", 200, 0, 200);
+  fNclusterHLTwCut = new TH1F("fNcluster_wcut_hlt","clusters per track with cuts (HLT)",     200, 0, 200);
   fdEdxOff = new TH1F("fdEdx_off","energy loss (offline)",             500, 0, 500);
   fdEdxHLT = new TH1F("fdEdx_hlt","energy loss (HLT) - not filled yet",500, 0, 500);
  
@@ -240,6 +272,9 @@ 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); 
   
   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);
@@ -259,6 +294,12 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   fEtaDCAcutOff = new TH1F("fEtaDCAcut_off","pseudorapidity DCAcut (offline)",100,-3,3);
   fEtaDCAcutHLT = new TH1F("fEtaDCAcut_hlt","pseudorapidity DCAcut (HLT)",    100,-3,3);
  
+  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);
+
   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);
   
@@ -271,49 +312,65 @@ void AliAnalysisTaskHLT::UserCreateOutputObjects(){
   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);
+
   //---------------------- add histograms to the output TList ------------------//
 
   fOutputList->Add(fHistTrigger);
   fOutputList->Add(fHistHLTTrigger);
 
-
+  fOutputList->Add(fChargeOff);
   fOutputList->Add(fMomentumOff);
   fOutputList->Add(fDCAOff);     
-  fOutputList->Add(fNclusterOff); 
+  fOutputList->Add(fNclusterOff);
+  fOutputList->Add(fNclusterOffwCut);
   fOutputList->Add(fdEdxOff);    
   fOutputList->Add(fdEdxVSPOff);
   fOutputList->Add(fPhiOff);     
   fOutputList->Add(fThetaOff);    
-  fOutputList->Add(fMultOff);    
+  fOutputList->Add(fMultOff);
+  fOutputList->Add(fVertexVSNtracksOff);
   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(fNclusVSphiOff);  
   fOutputList->Add(fNclusVSthetaOff);
   fOutputList->Add(fStatusOff);
   fOutputList->Add(fStatusOff_Ocl);
-  
+  fOutputList->Add(fEventSpecieOff);
+
+  fOutputList->Add(fChargeHLT);  
   fOutputList->Add(fMomentumHLT); 
   fOutputList->Add(fDCAHLT);     
   fOutputList->Add(fNclusterHLT); 
+  fOutputList->Add(fNclusterHLTwCut); 
   fOutputList->Add(fdEdxHLT);    
   fOutputList->Add(fdEdxVSPHLT);
   fOutputList->Add(fPhiHLT);     
   fOutputList->Add(fThetaHLT);    
-  fOutputList->Add(fMultHLT);    
+  fOutputList->Add(fMultHLT);   
+  fOutputList->Add(fVertexVSNtracksHLT); 
   fOutputList->Add(fXYvertexHLT); 
   fOutputList->Add(fXvertexHLT);  
   fOutputList->Add(fYvertexHLT);  
   fOutputList->Add(fZvertexHLT);    
   fOutputList->Add(fEtaHLT);  
-  fOutputList->Add(fEtaDCAcutHLT);  
+  fOutputList->Add(fEtaDCAcutHLT);
+  fOutputList->Add(fEtaHLTTpc);  
+  fOutputList->Add(fEtaHLTTpcIts);    
   fOutputList->Add(fNclusVSphiHLT);  
   fOutputList->Add(fNclusVSthetaHLT);
   fOutputList->Add(fStatusHLT);
   fOutputList->Add(fStatusHLT_Ocl);
+  fOutputList->Add(fEventSpecieHLT);
+
+  SetupESDtrackCuts();
 }
 
 void AliAnalysisTaskHLT::NotifyRun(){
@@ -360,33 +417,28 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
   AliESDEvent *esdOFF = dynamic_cast<AliESDEvent*>(InputEvent());
   
   if(!esdOFF){
-    Printf("ERROR: fESD not available");
+        Printf("ERROR: fESD not available");
     return;
   }
   
   AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(fInputHandler);
   AliESDEvent *esdHLT = NULL;   
-  
-  if(esdH){
-     esdHLT = esdH->GetHLTEvent();
-  }
+  if(esdH) esdHLT = esdH->GetHLTEvent();
     
   if(!esdHLT){
-     Printf("ERROR: HLTesd not available");
-     return;
+    Printf("ERROR: HLTesd not available");
+    return;
   }
 
-  if(esdHLT->GetNumberOfTracks()==0){
-     Printf("No tracks in the HLTesdTree for event %d", esdHLT->GetEventNumberInFile());
-     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)  
+    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;
@@ -416,13 +468,12 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
 
 
   //---------------- HLT ESD tree -----------------------//
-      
 
   if(esdHLT->GetNumberOfTracks()!=0)
     fMultHLT->Fill( esdHLT->GetNumberOfTracks() );
         
   Double_t vertexHLT[3];
-  
+
   const AliESDVertex *vertHLT=esdHLT->GetPrimaryVertexTracks();
 
   vertexHLT[0] = vertHLT->GetX();
@@ -430,6 +481,16 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
   vertexHLT[2] = vertHLT->GetZ();
   AliVertex *primVertexHLT = new AliVertex(vertexHLT, 0., 0);
 
+  Bool_t testVertexHLT=kTRUE;
+  if(vertHLT->GetNContributors()<1) {
+    // SPD vertex
+    vertHLT = esdHLT->GetPrimaryVertexSPD();
+    if(vertHLT->GetNContributors()<1) {
+      // NO GOOD VERTEX, SKIP EVENT 
+      testVertexHLT=kFALSE;
+    }
+  }
+  fVertexVSNtracksHLT->Fill(vertHLT->GetNContributors(),vertHLT->GetZv());
   if(vertHLT->GetZ()!=0){
     fXYvertexHLT->Fill(vertHLT->GetX(), vertHLT->GetY() );
     fXvertexHLT->Fill( vertHLT->GetX() );
@@ -437,76 +498,72 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
     fZvertexHLT->Fill( vertHLT->GetZ() );
   }
 
-  //The primary vertex constraint is stricter for HLT than for Offline
-  if( vertHLT && vertHLT->GetNContributors() >= 5 && (TMath::Abs(vertHLT->GetZ())<5.5) ){
+
+  if(testVertexHLT){
+    //if( vertHLT && vertHLT->GetNContributors() >= 5 && (TMath::Abs(vertHLT->GetZ())<5.5) ){
+
+    fEventSpecieHLT->Fill(esdHLT->GetEventSpecie());
 
     for(Int_t i=0; i<esdHLT->GetNumberOfTracks(); i++){ 
   
       AliESDtrack *esdtrackHLT = esdHLT->GetTrack(i); 
-    
-      if(esdtrackHLT){ 
-       if(!(esdOFF->GetEventSpecie()==16)){ // reject laser events
-         
-         if(esdtrackHLT->GetTPCNcls()>0) fNclusVSphiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
-         if(esdtrackHLT->GetTPCNcls()>0) fNclusVSthetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg(), esdtrackHLT->GetTPCNcls());
-         
-         for(int jjj=0;jjj<12;jjj++){
-           if(esdtrackHLT->GetStatus()&Statusnames[jjj]) {
-             fStatusHLT->Fill(jjj);
-             if(esdtrackHLT->GetTPCNcls()==0) fStatusHLT_Ocl->Fill(jjj);
-           }
-         } 
-
-         fEtaHLT->Fill(esdtrackHLT->Eta());
-
-         Double_t dz[2]    = {-999., -999.};   
-         Double_t covar[3] = {0.,0.,0.};        
-         esdtrackHLT->PropagateToDCA(primVertexHLT, bfield, 250., dz, covar);  
+      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);
+       }
+      } 
+
+      if(esdtrackHLT->GetTPCNcls()>0) fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
+      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((esdHLT->GetEventSpecie()==16)) {
+       Printf("Reject laser event %d",esdOFF->GetEventSpecie());
+       continue; //reject laser events
+      }
+      
+      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(TMath::Abs(esdtrackHLT->Pt()) <Momcut) continue; //cut away tracks with mom<0.3GeV
+      fEtaDCAcutHLT->Fill(esdtrackHLT->Eta());
+      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()) ); 
+
          
-         fDCAHLT->Fill(esdtrackHLT->GetD(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), bfield) ); 
-         if(TMath::Abs(esdtrackHLT->GetD(esdHLT->GetPrimaryVertex()->GetXv(), esdHLT->GetPrimaryVertex()->GetYv(), bfield))< DCAcut){
-
-
-           fdEdxHLT->Fill( esdtrackHLT->GetTPCsignal() );
-           fdEdxVSPHLT->Fill( TMath::Abs(esdtrackHLT->P()), esdtrackHLT->GetTPCsignal() );         
-           if(TMath::Abs(esdtrackHLT->Pt()) > Momcut && esdtrackHLT->GetTPCNcls()>70){
-             fEtaDCAcutHLT->Fill(esdtrackHLT->Eta());
-             fPhiHLT->Fill(esdtrackHLT->Phi()*TMath::RadToDeg());
-             fThetaHLT->Fill(esdtrackHLT->Theta()*TMath::RadToDeg());
-             if(esdtrackHLT->GetStatus()&AliESDtrack::kTPCin || (esdtrackHLT->GetStatus()&AliESDtrack::kTPCin && esdtrackHLT->GetStatus()&AliESDtrack::kITSin))//{         
-               fNclusterHLT->Fill(esdtrackHLT->GetTPCNcls());
-             fMomentumHLT->Fill( TMath::Abs(esdtrackHLT->P()) ); 
-           }
-
-           if(esdHLT->IsHLTTriggerFired()){
+      if(esdHLT->IsHLTTriggerFired()){
                    
-           }// end if for triggered hlt events  
-         } // end if track < DCAcut
-       } // end if not calibration event       
-      } // end if esdtrack is kTRUE
+      }// end if for triggered hlt events       
     } // end of loop over hlt tracks
-  } // end of condition to select primary tracks (vertex cuts)
+  }  
 
 
   //----------------- OFFLINE ESD tree ----------------//
   
-  if(esdOFF->GetNumberOfTracks()!=0) fMultOff->Fill( esdOFF->GetNumberOfTracks() );
-
-  // Track cuts (except d0 cut)
-  //------- TPC track selection --------
-  Int_t    minclsTPCOff=70;
-  Double_t maxchi2perTPCcl=4.;
-  
-  AliESDtrackCuts* esdtrackCutsITSTPCOff = new AliESDtrackCuts("esdtrackCutsITSTPC");
-  esdtrackCutsITSTPCOff->SetRequireITSRefit(kTRUE);
-  esdtrackCutsITSTPCOff->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
-                                              AliESDtrackCuts::kAny);
-  esdtrackCutsITSTPCOff->SetAcceptKinkDaughters(kFALSE);
-  esdtrackCutsITSTPCOff->SetMinNClustersTPC(minclsTPCOff);
-  esdtrackCutsITSTPCOff->SetMaxChi2PerClusterTPC(maxchi2perTPCcl); 
-
+  if(esdOFF->GetNumberOfTracks()!=0)
+    fMultOff->Fill( esdOFF->GetNumberOfTracks() );
 
   Double_t vertexOFF[3];
+
   const AliESDVertex *vertOff=esdOFF->GetPrimaryVertexTracks();
 
   vertexOFF[0] = vertOff->GetX();
@@ -521,9 +578,11 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
     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){
     fXYvertexOff->Fill(vertOff->GetX(), vertOff->GetY() );
     fXvertexOff->Fill( vertOff->GetX() );
@@ -533,62 +592,54 @@ void AliAnalysisTaskHLT::UserExec(Option_t *){
 
   if(testVertex){ 
 
+    fEventSpecieOff->Fill(esdOFF->GetEventSpecie());
+
     for(Int_t i=0; i<esdOFF->GetNumberOfTracks(); i++){ 
      
       AliESDtrack *esdtrackOFF = esdOFF->GetTrack(i); 
 
-      if(esdtrackOFF){ 
-       if(!(esdOFF->GetEventSpecie()==16)){ // reject laser events
+      if (!esdtrackOFF) continue;
 
-         if(esdtrackOFF->GetTPCNcls()>0) fNclusVSphiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
-         if(esdtrackOFF->GetTPCNcls()>0) fNclusVSthetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg(), esdtrackOFF->GetTPCNcls());
-         
-         for(int jjj=0;jjj<12;jjj++){
-           if(esdtrackOFF->GetStatus()&Statusnames[jjj]) {
-             fStatusOff->Fill(jjj);
-             if(esdtrackOFF->GetTPCNcls()==0) fStatusOff_Ocl->Fill(jjj);
-           }
-         } 
-         Double_t dz[2]    = {-999., -999.};   
-         Double_t covar[3] = {0.,0.,0.};        
-         esdtrackOFF->PropagateToDCA(primVertexOFF, bfield, 250., dz, covar);  
+      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]) {
+         fStatusOff->Fill(jjj);
+         if(esdtrackOFF->GetTPCNcls()==0) fStatusOff_Ocl->Fill(jjj);
+       }
+      } 
+      if(esdtrackOFF->GetTPCNcls()>0) fNclusterOff->Fill(esdtrackOFF->GetTPCNcls()); 
+
+
+      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) ); 
+      fEtaOff->Fill(esdtrackOFF->Eta());         
+      fdEdxOff->Fill( esdtrackOFF->GetTPCsignal() );
+      fdEdxVSPOff->Fill( TMath::Abs(esdtrackOFF->P()), esdtrackOFF->GetTPCsignal() );         
          
-         fDCAOff->Fill( esdtrackOFF->GetD(esdOFF->GetPrimaryVertex()->GetXv(), esdOFF->GetPrimaryVertex()->GetYv(), bfield) ); 
-         fEtaOff->Fill(esdtrackOFF->Eta());
+      if(TMath::Abs(esdtrackOFF->Pt()) < Momcut) continue;//cut away tracks with mom<0.3GeV
+      fEtaDCAcutOff->Fill(esdtrackOFF->Eta()); 
+      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()) ); 
+      
          
-
-         //Selection of primary tracks 
-         //chosen after recommendations from: https://twiki.cern.ch/twiki/bin/view/ALICE/SelectionOfPrimaryTracksForPp2009DataAnalysis)
-         // for each track
-         // track quality cuts
-         if(!esdtrackCutsITSTPCOff->AcceptTrack(esdtrackOFF)) continue;
-         // bring it to the primary vertex and compute impact parameters
-         if(!esdtrackOFF->RelateToVertex(vertOff,esdOFF->GetMagneticField(),kVeryBig)) continue; // this is already done in AliReconstruction...
-       
-
-         if(TMath::Abs(esdtrackOFF->GetD(esdOFF->GetPrimaryVertex()->GetXv(), esdOFF->GetPrimaryVertex()->GetYv(), bfield))< DCAcut ){
-
-                   fdEdxOff->Fill( esdtrackOFF->GetTPCsignal() );
-           fdEdxVSPOff->Fill( TMath::Abs(esdtrackOFF->P()), esdtrackOFF->GetTPCsignal() );         
-
-           if(TMath::Abs(esdtrackOFF->Pt()) > Momcut){
-             fEtaDCAcutOff->Fill(esdtrackOFF->Eta()); 
-             fPhiOff->Fill(esdtrackOFF->Phi()*TMath::RadToDeg());
-             fThetaOff->Fill(esdtrackOFF->Theta()*TMath::RadToDeg());
-             if(esdtrackOFF->GetStatus()&AliESDtrack::kTPCin || (esdtrackOFF->GetStatus()&AliESDtrack::kTPCin && esdtrackOFF->GetStatus()&AliESDtrack::kITSin) )//{
-               fNclusterOff->Fill(esdtrackOFF->GetTPCNcls()); 
-             fMomentumOff->Fill( TMath::Abs(esdtrackOFF->P()) ); 
+      if(esdHLT->IsHLTTriggerFired()){
            
-           }
+      } // end if for triggered offl events
 
-           if(esdHLT->IsHLTTriggerFired()){
-           
-           } // end if for triggered hlt events
-         }//end if over DCA cut
-       }//end if not calibration event
-      } // end if esdtrack is kTRUE    
-    } // end of loop over hlt tracks  
-  } // end of offline primary vertex conditions 
+    } // end of loop over offl tracks
+  
+  }
 
 
   //   if(esdHLT->IsHLTTriggerFired()){
@@ -639,124 +690,162 @@ 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
 
-  //Will create 2 canvases at the end, and store them as .png
-  TCanvas *c1 = new TCanvas("c1","Info pr track, Offline vs Online",10,10,1210,810);
-  Int_t maxbin=0;
-
-  TLegend *legend = new TLegend(0.70,0.60,0.90,0.75);
-  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 (only primary vertex cut)");
-  fEtaOff->SetLineColor(2);
-  fEtaOff->DrawCopy("");
-  legend->AddEntry(fEtaOff, "Offline", "LP");
-  fEtaHLT->DrawCopy("sameS");
-  legend->AddEntry(fEtaHLT,"HLT","LP");
-  legend->SetFillColor(10);
-  legend->SetBorderSize(0);
-  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);
-  char etaname[50];
-  sprintf(etaname,"Pseudorapidity");  
-  fEtaDCAcutOff->SetTitle(etaname);
-  fEtaDCAcutOff->SetLineColor(2);
-  fEtaDCAcutOff->DrawCopy("");
-  fEtaDCAcutHLT->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");
+  Bool_t print_png=kFALSE;
+  if(print_png){
+
+    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 =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");
+
+    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");
+    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");
+  }
 
-  string filename="Info_pr_track";
-  char plotname[100];
-  sprintf(plotname,"%s.png",filename.c_str());
-  c1->Print(plotname,"png");
+}
 
-  filename="Info_pr_Event";
-  sprintf(plotname,"%s.png",filename.c_str());
-  c2->Print(plotname,"png");
+void AliAnalysisTaskHLT::SetupESDtrackCuts() {
+  // Setup ESD cuts
+
+  Bool_t selPrimaries = kTRUE;
+
+  fESDOfftrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selPrimaries);
+
+  fESDHLTtrackCuts = new AliESDtrackCuts;
+
+  // TPC  
+  fESDHLTtrackCuts->SetRequireTPCStandAlone(kTRUE); // to get chi2 and ncls of kTPCin
+  fESDHLTtrackCuts->SetMinNClustersTPC(70);
+  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);
+  if(selPrimaries) { // 7*(0.0050+0.0060/pt^0.9)
+    fESDHLTtrackCuts->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/pt^0.9");
+  }
+  
+  fESDHLTtrackCuts->SetMaxDCAToVertexZ(1.e6);
+  fESDHLTtrackCuts->SetDCAToVertex2D(kFALSE);
+  fESDHLTtrackCuts->SetRequireSigmaToVertex(kFALSE);
+  fESDHLTtrackCuts->SetEtaRange(-0.9,+0.9);
 
+  return;
 }
index 44b9995108093c09f5f3005eb6f2694ca8bb0ca2..4340fd7d7211573271400cf09fa142e6c5ba3802 100644 (file)
@@ -1,4 +1,5 @@
 // $Id$
+//-*- Mode: C++ -*-
 //* This file is property of and copyright by the ALICE HLT Project *
 //* ALICE Experiment at CERN, All rights reserved.                  *
 //* See cxx source for full Copyright notice                        *
@@ -27,9 +28,24 @@ class TObjArray;
 class AliAnalysisTaskHLT : public AliAnalysisTaskSE {
  
   public: 
+
+
+  /*
+   * ---------------------------------------------------------------------------------
+   *                            Constructor / Destructor
+   * ---------------------------------------------------------------------------------
+   */
+
     AliAnalysisTaskHLT();
     AliAnalysisTaskHLT(const char *name);
     virtual ~AliAnalysisTaskHLT() {}
+
+  /*
+   * ---------------------------------------------------------------------------------
+   *                                    Methods
+   * ---------------------------------------------------------------------------------
+   */
+
     virtual void  UserCreateOutputObjects();
     virtual void  UserExec(Option_t *option);
     virtual void  Terminate(Option_t *);
@@ -42,47 +58,74 @@ class AliAnalysisTaskHLT : public AliAnalysisTaskSE {
     /** assignment operator */
     AliAnalysisTaskHLT& operator=(const AliAnalysisTaskHLT&); 
 
+
+    /*
+     * ---------------------------------------------------------------------------------
+     *                            Setup Methods - private
+     * ---------------------------------------------------------------------------------
+     */
+    
+    void SetupESDtrackCuts();  
+
+    //----------------------------------------------------------------------------------
+    
+    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    
+    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  *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    
+    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  *fStatusHLT;         // Status counters 
+    TH1F  *fStatusHLT_Ocl;     // Status counters for TPCNcl=0
+    TH1F  *fEventSpecieHLT;    // Event Specie HLT
     
     TObjArray *fTrgClsArray; // array of trigger classes
    
index d3463dfeb9fcb6d0201fc8692547aa6b5c303b6f..35d5325e701da9da45538865110b118627713462 100644 (file)
@@ -85,7 +85,7 @@ void compare_HLT_offline_local(TString file, const char* detectorTask="global"){
   if(bITS)    gROOT->LoadMacro("AliAnalysisTaskHLTITS.cxx+");
   if(bGLOBAL) gROOT->LoadMacro("AliAnalysisTaskHLT.cxx+");
   
-  if(!AliAnalysisGrid::CreateToken()) return NULL;
+  //if(!AliAnalysisGrid::CreateToken()) return NULL;
   
   if(file.Contains("alien")) TGrid::Connect("alien://");