]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
calculate the BC of the vertex when not available, move it to reader, add histograms...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 15 Jan 2013 16:22:00 +0000 (16:22 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 15 Jan 2013 16:22:00 +0000 (16:22 +0000)
PWG/CaloTrackCorrBase/AliAnaCaloTrackCorrMaker.cxx
PWG/CaloTrackCorrBase/AliAnaCaloTrackCorrMaker.h
PWG/CaloTrackCorrBase/AliCaloTrackReader.cxx
PWG/CaloTrackCorrBase/AliCaloTrackReader.h
PWGGA/CaloTrackCorrelations/AliAnaChargedParticles.cxx
PWGGA/CaloTrackCorrelations/AliAnaChargedParticles.h
PWGGA/CaloTrackCorrelations/AliAnaParticleHadronCorrelation.cxx
PWGGA/CaloTrackCorrelations/AliAnaParticleHadronCorrelation.h
PWGGA/CaloTrackCorrelations/AliAnaParticleIsolation.cxx
PWGGA/CaloTrackCorrelations/AliAnaParticleIsolation.h

index ec19d972ef8be57864778e8c4cdc278ada086c57..7dba943400f4629be9b2c585850760280aab95fd 100755 (executable)
@@ -57,7 +57,8 @@ fhCentrality(0),              fhEventPlaneAngle(0),
 fhNMergedFiles(0),            fhScaleFactor(0),
 fhEMCalBCEvent(0),            fhEMCalBCEventCut(0),
 fhTrackBCEvent(0),            fhTrackBCEventCut(0),
-fhPrimaryVertexBC(0),         fhTimeStampFraction(0)
+fhPrimaryVertexBC(0),         fhTimeStampFraction(0),
+fhNPileUpVertSPD(0),          fhNPileUpVertTracks(0)
 {
   //Default Ctor
   if(fAnaDebug > 1 ) printf("*** Analysis Maker Constructor *** \n");
@@ -90,7 +91,9 @@ fhEMCalBCEventCut(maker.fhEMCalBCEventCut),
 fhTrackBCEvent(maker.fhTrackBCEvent),
 fhTrackBCEventCut(maker.fhTrackBCEventCut),
 fhPrimaryVertexBC(maker.fhPrimaryVertexBC),
-fhTimeStampFraction(maker.fhTimeStampFraction)
+fhTimeStampFraction(maker.fhTimeStampFraction),
+fhNPileUpVertSPD(maker.fhNPileUpVertSPD),
+fhNPileUpVertTracks(maker.fhNPileUpVertTracks)
 {
   // cpy ctor
 }
@@ -164,11 +167,15 @@ void AliAnaCaloTrackCorrMaker::FillControlHistograms()
 {
   // Event control histograms
   
+  AliVEvent* event =  fReader->GetInputEvent();
+  AliESDEvent* esdevent = dynamic_cast<AliESDEvent*> (event);
+  AliAODEvent* aodevent = dynamic_cast<AliAODEvent*> (event);
+  
   fhNEvents        ->Fill(0); // Number of events analyzed
   
   if( fReader->IsPileUpFromSPD())
     fhNPileUpEvents->Fill(0.5);
-  if( fReader->GetInputEvent()->IsPileupFromSPDInMultBins())
+  if( event->IsPileupFromSPDInMultBins())
     fhNPileUpEvents->Fill(1.5);
   if( fReader->IsPileUpFromEMCal())
     fhNPileUpEvents->Fill(2.5);
@@ -185,13 +192,12 @@ void AliAnaCaloTrackCorrMaker::FillControlHistograms()
   
   if(fReader->IsPileUpFromSPD())
     fhPileUpClusterMultAndSPDPileUp ->Fill(fReader->GetNPileUpClusters());
-  
+    
   fhPileUpClusterMult ->Fill(fReader->GetNPileUpClusters  ());
   fhTrackMult         ->Fill(fReader->GetTrackMultiplicity());
   fhCentrality        ->Fill(fReader->GetEventCentrality  ());
   fhEventPlaneAngle   ->Fill(fReader->GetEventPlaneAngle  ());
   
-  
   for(Int_t i = 0; i < 19; i++)
   {
     if(fReader->GetTrackEventBC(i))   fhTrackBCEvent   ->Fill(i);
@@ -201,20 +207,32 @@ void AliAnaCaloTrackCorrMaker::FillControlHistograms()
   }
   
   Double_t v[3];
-  fReader->GetInputEvent()->GetPrimaryVertex()->GetXYZ(v) ;
+  event->GetPrimaryVertex()->GetXYZ(v) ;
   fhZVertex->Fill(v[2]);
   
-  Int_t primaryBC = -1000;
-  AliESDEvent* esdevent = dynamic_cast<AliESDEvent*> (fReader->GetInputEvent());
-  AliAODEvent* aodevent = dynamic_cast<AliAODEvent*> (fReader->GetInputEvent());
+  Int_t bc = fReader->GetVertexBC();
+  if(bc!=AliVTrack::kTOFBCNA)fhPrimaryVertexBC->Fill(bc);
   
-  if     (esdevent)
-    primaryBC = esdevent->GetPrimaryVertex()->GetBC();
-  else if(aodevent)
-    primaryBC = aodevent->GetPrimaryVertex()->GetBC();
   
-  fhPrimaryVertexBC->Fill(primaryBC);
+  // N pile up vertices
+  Int_t nVerticesSPD    = -1;
+  Int_t nVerticesTracks = -1;
   
+  if      (esdevent)
+  {
+    nVerticesSPD    = esdevent->GetNumberOfPileupVerticesSPD();
+    nVerticesTracks = esdevent->GetNumberOfPileupVerticesTracks();
+    
+  }//ESD
+  else if (aodevent)
+  {
+    nVerticesSPD    = aodevent->GetNumberOfPileupVerticesSPD();
+    nVerticesTracks = aodevent->GetNumberOfPileupVerticesTracks();
+  }//AOD
+  
+  fhNPileUpVertSPD   ->Fill(nVerticesSPD);
+  fhNPileUpVertTracks->Fill(nVerticesTracks);
+
   // Time stamp
   if(fReader->IsSelectEventTimeStampOn() && esdevent)
   {
@@ -290,7 +308,7 @@ TList *AliAnaCaloTrackCorrMaker::GetOutputContainer()
     fhTrackBCEventCut->GetXaxis()->SetBinLabel(i ,Form("%d",i-10));
   fOutputContainer->Add(fhTrackBCEventCut);
 
-  fhPrimaryVertexBC      = new TH1F("hPrimaryVertexBC", "Number of primary vertex per bunch crossing ", 18 , -9 , 9 ) ;
+  fhPrimaryVertexBC      = new TH1F("hPrimaryVertexBC", "Number of primary vertex per bunch crossing ", 41 , -20 , 20  ) ;
   fhPrimaryVertexBC->SetYTitle("# events");
   fhPrimaryVertexBC->SetXTitle("Bunch crossing");
   fOutputContainer->Add(fhPrimaryVertexBC);
@@ -325,6 +343,14 @@ TList *AliAnaCaloTrackCorrMaker::GetOutputContainer()
   fhPileUpClusterMultAndSPDPileUp->SetXTitle("# clusters");
   fOutputContainer->Add(fhPileUpClusterMultAndSPDPileUp);
   
+  fhNPileUpVertSPD  = new TH1F ("hNPileUpVertSPD","N pile-up SPD vertex", 50,0,50);
+  fhNPileUpVertSPD->SetYTitle("# vertex ");
+  fOutputContainer->Add(fhNPileUpVertSPD);
+  
+  fhNPileUpVertTracks  = new TH1F ("hNPileUpVertTracks","N pile-up Tracks vertex", 50,0,50);
+  fhNPileUpVertTracks->SetYTitle("# vertex ");
+  fOutputContainer->Add(fhNPileUpVertTracks);
+  
   fhCentrality   = new TH1F("hCentrality","Number of events in centrality bin",100,0.,100) ;
   fhCentrality->SetXTitle("Centrality bin");
   fOutputContainer->Add(fhCentrality) ;  
index 2febc65fc7bd7116c838cd8e86c201c4481eda6a..1f272f063adc9e3ec12c3dcb50410c14a4eabeac 100755 (executable)
@@ -110,10 +110,12 @@ class AliAnaCaloTrackCorrMaker : public TObject {
   TH1F *   fhTrackBCEventCut;   //! N events depending on the existance of a track above acceptance and pt cut in a given bunch crossing
   TH1F *   fhPrimaryVertexBC;   //! Primary vertex BC
   TH1F *   fhTimeStampFraction; //! event fraction depending on Time Stamp, only if activated on reader
+  TH1F *   fhNPileUpVertSPD;    //! number of pile-up vertices from SPD
+  TH1F *   fhNPileUpVertTracks; //! number of pile-up vertices from tracks
   
   AliAnaCaloTrackCorrMaker & operator = (const AliAnaCaloTrackCorrMaker & ) ; // cpy assignment
   
-  ClassDef(AliAnaCaloTrackCorrMaker,15)
+  ClassDef(AliAnaCaloTrackCorrMaker,16)
 } ;
  
 
index a55a5769b05f7e278f1660b615c6765cbf7c3da6..222ae710fe49c00189037e5bc54983bf5c2008be 100755 (executable)
@@ -93,12 +93,14 @@ fLastMixedTracksEvent(-1),   fLastMixedCaloEvent(-1),
 fWriteOutputDeltaAOD(kFALSE),fOldAOD(kFALSE),                 fCaloFilterPatch(kFALSE),
 fEMCALClustersListName(""),  fZvtxCut(0.),                    
 fAcceptFastCluster(kFALSE),  fRemoveLEDEvents(kTRUE), 
-fDoEventSelection(kFALSE),   fDoV0ANDEventSelection(kFALSE),  fUseEventsWithPrimaryVertex(kFALSE),
+fDoEventSelection(kFALSE),   fDoV0ANDEventSelection(kFALSE),  fDoVertexBCEventSelection(kFALSE),
+fUseEventsWithPrimaryVertex(kFALSE),
 fTriggerAnalysis (0x0),      fTimeStampEventSelect(0),
 fTimeStampEventFracMin(0),   fTimeStampEventFracMax(0),
 fTimeStampRunMin(0),         fTimeStampRunMax(0),
 fNPileUpClusters(-1),        fNNonPileUpClusters(-1),         fNPileUpClustersCut(3),
-fCentralityClass(""),        fCentralityOpt(0),
+fVertexBC(-200),             fRecalculateVertexBC(0),
+fCentralityClass(""),            fCentralityOpt(0),
 fEventPlaneMethod(""),       fImportGeometryFromFile(kFALSE), fImportGeometryFilePath("")
 {
   //Ctor
@@ -164,6 +166,20 @@ AliCaloTrackReader::~AliCaloTrackReader()
   
 }
 
+//________________________________________________________________________
+Bool_t  AliCaloTrackReader::AcceptDCA(const Float_t pt, const Float_t dca)
+{
+  // Accept track if DCA is smaller than function
+  
+  Float_t cut = fTrackDCACut[0]+fTrackDCACut[1]/TMath::Power(pt,fTrackDCACut[2]);
+  
+  if(TMath::Abs(dca) < cut)
+    return kTRUE;
+  else
+    return kFALSE;
+  
+}
+
 //________________________________________________
 Bool_t AliCaloTrackReader::ComparePtHardAndJetPt()
 {
@@ -350,6 +366,54 @@ AliAODMCHeader* AliCaloTrackReader::GetAODMCHeader() const
   return mch;
 }
 
+//___________________________________________________________
+Int_t AliCaloTrackReader::GetVertexBC(const AliVVertex * vtx)
+{
+  // Get the vertex BC
+    
+  Int_t vertexBC=vtx->GetBC();
+  if(!fRecalculateVertexBC) return vertexBC;
+  
+  // In old AODs BC not stored, recalculate it
+  // loop over the global track and select those which have small DCA to primary vertex (e.g. primary).
+  // If at least one of these primaries has valid BC != 0, then this vertex is a pile-up candidate.
+  // Execute after CTS
+  Double_t bz  = fInputEvent->GetMagneticField();
+  Bool_t   bc0 = kFALSE;
+  Int_t    ntr = GetCTSTracks()->GetEntriesFast();
+  //printf("N Tracks %d\n",ntr);
+  
+  for(Int_t i = 0 ; i < ntr ; i++)
+  {
+    AliVTrack * track =  (AliVTrack*) (GetCTSTracks()->At(i));
+    
+    //Check if has TOF info, if not skip
+    ULong_t status  = track->GetStatus();
+    Bool_t  okTOF   = (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ;
+    vertexBC        = track->GetTOFBunchCrossing(bz);
+    Float_t pt      = track->Pt();
+    
+    if(!okTOF) continue;
+    
+    // Get DCA x, y
+    Double_t dca[2]   = {1e6,1e6};
+    Double_t covar[3] = {1e6,1e6,1e6};
+    track->PropagateToDCA(vtx,bz,100.,dca,covar);
+    
+    if(AcceptDCA(pt,dca[0]))
+    {
+      if     (vertexBC !=0 && fVertexBC != AliVTrack::kTOFBCNA) return vertexBC;
+      else if(vertexBC == 0)                                    bc0 = kTRUE;
+    }
+  }
+  
+  if( bc0 ) vertexBC = 0 ;
+  else      vertexBC = AliVTrack::kTOFBCNA ;
+  
+  return vertexBC;
+  
+}
+
 //_____________________________
 void AliCaloTrackReader::Init()
 {
@@ -392,10 +456,11 @@ void AliCaloTrackReader::InitParameters()
   fPHOSPtMax  = 1000. ;
   
   //Track DCA cuts
-  fTrackDCACut[0] = 3; //xy, quite large
-  fTrackDCACut[1] = 3; //z, quite large
-  fTrackDCACut[2] = 3; //TPC constrained, quite large
-
+  // dca_xy cut = 0.0105+0.0350/TMath::Power(pt,1.1);
+  fTrackDCACut[0] = 0.0105; 
+  fTrackDCACut[1] = 0.0350; 
+  fTrackDCACut[2] = 1.1;
+  
   //Do not filter the detectors input by default.
   fFillEMCAL      = kFALSE;
   fFillPHOS       = kFALSE;
@@ -607,7 +672,7 @@ Bool_t AliCaloTrackReader::FillInputEvent(const Int_t iEntry,
                                           const char * /*currentFileName*/) 
 {
   //Fill the event counter and input lists that are needed, called by the analysis maker.
-    
+  
   fEventNumber = iEntry;
   //fCurrentFileName = TString(currentFileName);
   if(!fInputEvent)
@@ -810,7 +875,7 @@ Bool_t AliCaloTrackReader::FillInputEvent(const Int_t iEntry,
     Int_t cen = GetEventCentrality();
     if(cen > fCentralityBin[1] || cen < fCentralityBin[0]) return kFALSE; //reject events out of bin.
   }
-  
+    
   //Fill the arrays with cluster/tracks/cells data
   
   if(!fEventTriggerAtSE)
@@ -832,6 +897,11 @@ Bool_t AliCaloTrackReader::FillInputEvent(const Int_t iEntry,
     //printf("Selected triggered event : %s\n",GetFiredTriggerClasses().Data());
   }
   
+  // Get the main vertex BC, in case not available
+  // it is calculated in FillCTS checking the BC of tracks
+  // with DCA small (if cut applied, if open)
+  fVertexBC=fInputEvent->GetPrimaryVertex()->GetBC();
+  
   if(fFillCTS)
   {
     FillInputCTS();
@@ -839,6 +909,11 @@ Bool_t AliCaloTrackReader::FillInputEvent(const Int_t iEntry,
     if(fTrackMult == 0 && fDoEventSelection) return kFALSE;
   }
   
+  if(fDoVertexBCEventSelection)
+  {
+    if(fVertexBC!=0 && fVertexBC!=AliVTrack::kTOFBCNA) return kFALSE ;
+  }
+    
   if(fFillEMCALCells)
     FillInputEMCALCells();
   
@@ -1069,6 +1144,9 @@ void AliCaloTrackReader::FillInputCTS()
     fTrackBCEventCut[i] = 0;
   }
   
+  Bool_t   bc0  = kFALSE;
+  if(fRecalculateVertexBC) fVertexBC=AliVTrack::kTOFBCNA;
+  
   for (Int_t itrack =  0; itrack <  nTracks; itrack++)
   {////////////// track loop
     AliVTrack * track = (AliVTrack*)fInputEvent->GetTrack(itrack) ; // retrieve track from esd
@@ -1166,9 +1244,8 @@ void AliCaloTrackReader::FillInputCTS()
     
     TLorentzVector momentum(pTrack[0],pTrack[1],pTrack[2],0);
     
-    Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
-    Double_t tof = -1000;
-    //Int_t    bc  = -1000;
+    Bool_t okTOF  = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
+    Double_t tof  = -1000;
     Int_t trackBC = -1000 ;
     
     if(okTOF)
@@ -1177,59 +1254,64 @@ void AliCaloTrackReader::FillInputCTS()
       SetTrackEventBC(trackBC+9);
 
       tof = track->GetTOFsignal()*1e-3;
-      //printf("track TOF %e\n",tof);
-      //bc = TMath::Nint((tof-25)/50) + 9;
-      //printf("track pt %f, tof %2.2f, bc=%d\n",track->Pt(),tof,bc);
-      //SetTrackEventBC(bc);
-
     }
     
     if(fCTSPtMin > momentum.Pt() || fCTSPtMax < momentum.Pt()) continue ;
         
     if(fCheckFidCut && !fFiducialCut->IsInFiducialCut(momentum,"CTS")) continue;
-      
-    if(okTOF)
-    {
-       //SetTrackEventBCcut(bc);
-      SetTrackEventBCcut(trackBC+9);
-
-      //In any case, the time should to be larger than the fixed window ...
-      if( fUseTrackTimeCut && (trackBC!=0 || tof < fTrackTimeCutMin  || tof > fTrackTimeCutMax) )
-      {
-        //printf("Remove track time %f and bc = %d\n",tof,trackBC);
-        continue ;
-      }
-      //else printf("Accept track time %f and bc = %d\n",tof,trackBC);
-
-    }
-          
+                
     if(fUseTrackDCACut)
     {
-      //In case of hybrid tracks on AODs, constrained TPC tracks cannot be propagated back to primary vertex
+      //In case of AODs, TPC tracks cannot be propagated back to primary vertex,
+      // info stored
       AliAODTrack * aodTrack = dynamic_cast<AliAODTrack*>(track);
-      Float_t dcaCons = -999;
+      
+      Float_t dcaTPC =-999;
+      Bool_t  okDCA    = kFALSE;
       if(aodTrack)
       {
-        dcaCons = aodTrack->DCA();
+        dcaTPC = aodTrack->DCA();
         //vtxBC   = aodTrack->GetProdVertex()->GetBC();
-        if(dcaCons > -999)
+        if(dcaTPC!=-999)
         {
-          if(TMath::Abs(dcaCons) > fTrackDCACut[2] ) continue ;
+          okDCA = AcceptDCA(momentum.Pt(),dcaTPC);
+          if(!okDCA) continue ;
         }
       }
-
-      //non contrained TPC tracks (tracks with ITS points) on AODs
-      if(dcaCons==-999)
+      
+      //normal way to get the dca, cut on dca_xy
+      if(dcaTPC==-999)
       {
         Double_t dca[2]   = {1e6,1e6};
         Double_t covar[3] = {1e6,1e6,1e6};
-        Bool_t okDCA = track->PropagateToDCA(fInputEvent->GetPrimaryVertex(),bz,100.,dca,covar);
-        if( !okDCA                               ||
-            TMath::Abs(dca[0]) > fTrackDCACut[0] ||
-            TMath::Abs(dca[1]) > fTrackDCACut[1]    ) continue ;
+        okDCA = track->PropagateToDCA(fInputEvent->GetPrimaryVertex(),bz,100.,dca,covar);
+       if( okDCA) okDCA = AcceptDCA(momentum.Pt(),dca[0]);
+       if(!okDCA) continue ;
       }
     }// DCA cuts
     
+    if(okTOF)
+    {
+      //SetTrackEventBCcut(bc);
+      SetTrackEventBCcut(trackBC+9);
+      
+      //After selecting tracks with small DCA, pointing to vertex, set vertex BC depeding on tracks BC
+      if(fRecalculateVertexBC)
+      {
+        if     (trackBC !=0 && trackBC != AliVTrack::kTOFBCNA) fVertexBC = trackBC;
+        else if(trackBC == 0)                                  bc0 = kTRUE;
+      }
+
+      //In any case, the time should to be larger than the fixed window ...
+      if( fUseTrackTimeCut && (trackBC!=0 || tof < fTrackTimeCutMin  || tof > fTrackTimeCutMax) )
+      {
+        //printf("Remove track time %f and bc = %d\n",tof,trackBC);
+        continue ;
+      }
+      //else printf("Accept track time %f and bc = %d\n",tof,trackBC);
+      
+    }
+    
     if(fDebug > 2 && momentum.Pt() > 0.1)
       printf("AliCaloTrackReader::FillInputCTS() - Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
              momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
@@ -1240,6 +1322,12 @@ void AliCaloTrackReader::FillInputCTS()
     
   }// track loop
        
+  if(fVertexBC ==0 || fVertexBC == AliVTrack::kTOFBCNA)
+  {
+    if( bc0 ) fVertexBC = 0 ;
+    else      fVertexBC = AliVTrack::kTOFBCNA ;
+  }
+  
   if(fDebug > 1)
     printf("AliCaloTrackReader::FillInputCTS()   - aod entries %d, input tracks %d, pass status %d, multipliticy %d\n", fCTSTracks->GetEntriesFast(), nTracks, nstatus, fTrackMult);//fCTSTracksNormalInputEntries);
   
index 313e4af8ef296c6ffc013d02657865b81307e3a2..602dbb0997129f348edf748508d3762e59aa4872 100755 (executable)
@@ -118,7 +118,8 @@ public:
   void             SetEMCALEMax (Float_t  e)               { SetEMCALPtMax(e)              ; }
   void             SetPHOSEMax  (Float_t  e)               { SetPHOSPtMax (e)              ; }
   
-  
+  // Track DCA cut
+  Bool_t           AcceptDCA(const Float_t pt, const Float_t dca);
   Double_t         GetTrackDCACut(Int_t i)           const { if(i >= 0 && i < 3 ) return fTrackDCACut[i] ;
                                                              else return -999              ; }
   
@@ -127,6 +128,7 @@ public:
   
   void             SwitchOnUseTrackDCACut()                { fUseTrackDCACut = kTRUE       ; }
   void             SwitchOffUseTrackDCACut()               { fUseTrackDCACut = kFALSE      ; }
+  Bool_t           IsDCACutOn()                      const { return fUseTrackDCACut        ; }
   
   //Time cut
   
@@ -256,17 +258,20 @@ public:
   
   void             SwitchOnEventSelection()                { fDoEventSelection      = kTRUE  ; }
   void             SwitchOffEventSelection()               { fDoEventSelection      = kFALSE ; }
-  Bool_t           IsEventSelectionDone()            const { return fDoEventSelection        ; } 
+  Bool_t           IsEventSelectionDone()            const { return fDoEventSelection        ; }
   
   void             SwitchOnV0ANDSelection()                { fDoV0ANDEventSelection = kTRUE  ; }
   void             SwitchOffV0ANDSelection()               { fDoV0ANDEventSelection = kFALSE ; }
   Bool_t           IsV0ANDEventSelectionDone()       const { return fDoV0ANDEventSelection   ; } 
 
+  void             SwitchOnVertexBCEventSelection()        { fDoVertexBCEventSelection = kTRUE  ; }
+  void             SwitchOffVertexBCEventSelection()       { fDoVertexBCEventSelection = kFALSE ; }
+  Bool_t           IsVertexBCEventSelectionDone()    const { return fDoVertexBCEventSelection   ; }
+  
   void             SwitchOnPrimaryVertexSelection()        { fUseEventsWithPrimaryVertex = kTRUE  ; }
   void             SwitchOffPrimaryVertexSelection()       { fUseEventsWithPrimaryVertex = kFALSE ; }
   Bool_t           IsPrimaryVertexSelectionDone()    const { return fUseEventsWithPrimaryVertex   ; } 
   
-  
   //Time Stamp
   
   Double_t         GetRunTimeStampMin()              const { return fTimeStampRunMin         ; }
@@ -311,6 +316,10 @@ public:
   void             SetEMCalEventBCcut(Int_t bc)            { if(bc >=0 && bc < 19) fEMCalBCEventCut[bc] = 1 ; }
   void             SetTrackEventBCcut(Int_t bc)            { if(bc >=0 && bc < 19) fTrackBCEventCut[bc] = 1 ; }
 
+  Int_t           GetVertexBC(const AliVVertex * vtx);
+  Int_t           GetVertexBC()                  const     { return fVertexBC              ; }
+  void            SwitchOnRecalculateVertexBC()            { fRecalculateVertexBC = kTRUE  ; }
+  void            SwitchOffRecalculateVertexBC()           { fRecalculateVertexBC = kFALSE ; }
   
   // Track selection
   ULong_t          GetTrackStatus()                  const { return fTrackStatus          ; }
@@ -512,7 +521,7 @@ public:
   Double_t         fTrackTimeCutMin;        // Remove tracks with time smaller than this value, in ns
   Double_t         fTrackTimeCutMax;        // Remove tracks with time larger than this value, in ns
   Bool_t           fUseTrackDCACut;         // Do DCA selection
-  Double_t         fTrackDCACut[3];         // Remove tracks with DCA larger than cut
+  Double_t         fTrackDCACut[3];         // Remove tracks with DCA larger than cut, parameters of function stored here
 
   TList          * fAODBranchList ;         //-> List with AOD branches created and needed in analysis
   TObjArray      * fCTSTracks ;             //-> temporal array with tracks
@@ -582,6 +591,7 @@ public:
   Bool_t           fRemoveLEDEvents;             // Remove events where LED was wrongly firing - EMCAL LHC11a
   Bool_t           fDoEventSelection;            // Select events depending on V0, pileup, vertex well reconstructed, at least 1 track ...
   Bool_t           fDoV0ANDEventSelection;       // Select events depending on V0, fDoEventSelection should be on
+  Bool_t           fDoVertexBCEventSelection;    // Select events with vertex on BC=0 or -100
   Bool_t           fUseEventsWithPrimaryVertex ; // Select events with primary vertex
   AliTriggerAnalysis* fTriggerAnalysis;          // Access to trigger selection algorithm for V0AND calculation
   
@@ -605,7 +615,9 @@ public:
   Int_t            fEMCalBCEventCut[19];         // Fill one entry per event if there is a cluster in a given BC, depend on cluster E, acceptance cut
   Int_t            fTrackBCEvent[19];            // Fill one entry per event if there is a track in a given BC
   Int_t            fTrackBCEventCut[19];         // Fill one entry per event if there is a track in a given BC, depend on track pT, acceptance cut
-
+  Int_t            fVertexBC;                    // Vertex BC
+  Bool_t           fRecalculateVertexBC;         // Recalculate vertex BC from tracks pointing to vertex
+  
   //Centrality/Event plane
   TString          fCentralityClass;        // Name of selected centrality class     
   Int_t            fCentralityOpt;          // Option for the returned value of the centrality, possible options 5, 10, 100
@@ -619,7 +631,7 @@ public:
   AliCaloTrackReader(              const AliCaloTrackReader & r) ; // cpy ctor
   AliCaloTrackReader & operator = (const AliCaloTrackReader & r) ; // cpy assignment
   
-  ClassDef(AliCaloTrackReader,49)
+  ClassDef(AliCaloTrackReader,50)
   
 } ;
 
index f606eb3ab39f02443836a434ff54f9eee99f4c3c..dfccdb25fdff69d825085ee52da68b2852db9989 100755 (executable)
@@ -46,7 +46,6 @@ ClassImp(AliAnaChargedParticles)
     AliAnaCaloTrackCorrBaseClass(),
     fFillPileUpHistograms(0),
     fFillVertexBC0Histograms(0),
-    fRecalculateVertexBC(0),
     //Histograms
     fhNtracks(0),      fhPt(0),            fhPtNoCut(0),
     fhPtCutDCA(0),     fhPtCutDCABCOK(0),
@@ -66,7 +65,8 @@ ClassImp(AliAnaChargedParticles)
     fhPtUnknown(0),    fhPhiUnknown(0),      fhEtaUnknown(0),
     //TOF
     fhTOFSignal(0),    fhTOFSignalPtCut(0),  fhTOFSignalBCOK(0),
-    fhPtTOFSignal(0),  fhPtTOFSignalVtxOutBC0(0), fhPtTOFSignalVtxInBC0(0),
+    fhPtTOFSignal(0),  fhPtTOFSignalDCACut(0),
+    fhPtTOFSignalVtxOutBC0(0), fhPtTOFSignalVtxInBC0(0),
     fhPtTOFStatus0(0), fhEtaPhiTOFStatus0(0),
     fhEtaPhiTOFBC0(0), fhEtaPhiTOFBCPlus(0), fhEtaPhiTOFBCMinus(0),
     fhEtaPhiTOFBC0PileUpSPD(0),
@@ -87,7 +87,6 @@ ClassImp(AliAnaChargedParticles)
   
   for(Int_t i = 0; i < 3; i++)
   {
-    fDCACutParam          [i] = 0 ;
     fhPtDCA               [i] = 0 ;
     
     fhPtDCASPDRefit       [i] = 0 ;
@@ -116,20 +115,6 @@ ClassImp(AliAnaChargedParticles)
 
 }
 
-//_____________________________________________________________________________
-Bool_t  AliAnaChargedParticles::AcceptDCA(const Float_t pt, const Float_t dca)
-{
- // Accept track if DCA is smaller than function
-  
-  Float_t cut = fDCACutParam[0]+fDCACutParam[1]/TMath::Power(pt,fDCACutParam[2]);
-  
-  if(TMath::Abs(dca) < cut)
-    return kTRUE;
-  else
-    return kFALSE;
-
-}
-
 //_______________________________________________________
 TList *  AliAnaChargedParticles::GetCreateOutputObjects()
 {  
@@ -289,6 +274,11 @@ TList *  AliAnaChargedParticles::GetCreateOutputObjects()
   fhPtTOFSignal->SetYTitle("TOF signal (ns)");
   fhPtTOFSignal->SetXTitle("p_{T} (GeV/c)");
   outputContainer->Add(fhPtTOFSignal);
+  
+  fhPtTOFSignalDCACut  = new TH2F ("hPtTOFSignalDCACut","TOF signal after DCA cut", nptbins,ptmin,ptmax,ntofbins,mintof,maxtof);
+  fhPtTOFSignalDCACut->SetYTitle("TOF signal (ns)");
+  fhPtTOFSignalDCACut->SetXTitle("p_{T} (GeV/c)");
+  outputContainer->Add(fhPtTOFSignalDCACut);
 
   if(fFillVertexBC0Histograms)
   {
@@ -605,52 +595,6 @@ TList *  AliAnaChargedParticles::GetCreateOutputObjects()
 
 }
 
-//___________________________________________
-Int_t AliAnaChargedParticles::GetVertexBC(const AliVVertex * vtx)
-{
-  // Get the vertex BC
-  
-  AliVEvent * event = GetReader()->GetInputEvent();
-  
-  if(!fRecalculateVertexBC) return vtx->GetBC();
-  
-  // In old AODs BC not stored, recalculate it
-  // loop over the global track and select those which have small DCA to primary vertex (e.g. primary).
-  // If at least one of these primaries has valid BC != 0, then this vertex is a pile-up candidate.
-  
-  Double_t bz  = event->GetMagneticField();
-  Bool_t   bc0 = kFALSE;
-  Int_t    ntr = GetCTSTracks()->GetEntriesFast();
-  //printf("N Tracks %d\n",ntr);
-  
-  for(Int_t i = 0 ; i < ntr ; i++)
-  {
-    AliVTrack * track =  (AliVTrack*) (GetCTSTracks()->At(i));
-    
-    //Check if has TOF info, if not skip
-    ULong_t status  = track->GetStatus();
-    Bool_t  okTOF   = (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ;
-    Int_t   trackBC = track->GetTOFBunchCrossing(bz);
-    Float_t pt      = track->Pt();
-    
-    if(!okTOF) continue;
-    
-    // Get DCA x, y
-    Double_t dca[2]   = {1e6,1e6};
-    Double_t covar[3] = {1e6,1e6,1e6};
-    track->PropagateToDCA(GetReader()->GetInputEvent()->GetPrimaryVertex(),bz,100.,dca,covar);
-            
-    if(AcceptDCA(pt,dca[0]))
-    {
-      if     (trackBC !=0 && trackBC != AliVTrack::kTOFBCNA) return trackBC;
-      else if(trackBC == 0)                                  bc0 = kTRUE;
-    }
-  }
-  
-  if( bc0 ) return 0 ;
-  else      return AliVTrack::kTOFBCNA ;
-  
-}
 
 //___________________________________________
 void AliAnaChargedParticles::InitParameters()
@@ -661,10 +605,6 @@ void AliAnaChargedParticles::InitParameters()
 
   AddToHistogramsName("AnaCharged_");
   
-  // dca_xy cut = 0.0105+0.0350/TMath::Power(pt,1.1);
-  fDCACutParam[0]= 0.0105;
-  fDCACutParam[1]= 0.0350;
-  fDCACutParam[2]= 1.1;
   
 }
 
@@ -708,15 +648,11 @@ void  AliAnaChargedParticles::MakeAnalysisFillAOD()
   if(GetDebug() > 0)
     printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - In CTS aod entries %d\n", ntracks);
   
-  
   AliVEvent * event = GetReader()->GetInputEvent();
 
-  //AliESDEvent* esdevent = dynamic_cast<AliESDEvent*> (event);
-  //AliAODEvent* aodevent = dynamic_cast<AliAODEvent*> (event);
+  Int_t vtxBC = GetReader()->GetVertexBC();
+  if(!GetReader()->IsDCACutOn()) vtxBC = GetReader()->GetVertexBC(event->GetPrimaryVertex());
 
-  const AliVVertex * vtx = event->GetPrimaryVertex();
-  Int_t vtxBC = GetVertexBC(vtx);
-  
   if(fFillVertexBC0Histograms)
   {
     fhProductionVertexBC->Fill(vtxBC);
@@ -784,7 +720,7 @@ void  AliAnaChargedParticles::MakeAnalysisFillAOD()
       fhPtDCA[2]->Fill(pt, dcaCons);
     }
     
-    if(AcceptDCA(pt,trackDCA)) fhPtCutDCA->Fill(pt);
+    if(GetReader()->AcceptDCA(pt,trackDCA)) fhPtCutDCA->Fill(pt);
     
     if(fFillVertexBC0Histograms)
     {
@@ -805,7 +741,7 @@ void  AliAnaChargedParticles::MakeAnalysisFillAOD()
       {
         fhPtVtxInBC0->Fill(pt);
         fhEtaPhiVtxInBC0->Fill(eta,phi);
-        if(AcceptDCA(pt,trackDCA)) fhPtCutDCABCOK->Fill(pt);
+        if(GetReader()->AcceptDCA(pt,trackDCA)) fhPtCutDCABCOK->Fill(pt);
         
         if(dcaCons == -999)
         {
@@ -936,7 +872,8 @@ void  AliAnaChargedParticles::MakeAnalysisFillAOD()
     {
       fhTOFSignal  ->Fill(tof);
       fhPtTOFSignal->Fill(pt, tof);
-      
+      if(GetReader()->AcceptDCA(pt,trackDCA)) fhPtTOFSignalDCACut->Fill(pt, tof);
+        
       if(TMath::Abs(vtxBC) > 0 && vtxBC!=AliVTrack::kTOFBCNA)
         fhPtTOFSignalVtxOutBC0->Fill(pt, tof);
       else
index 3536b63dd20c1b815288fa92a26e242cc1076d5c..5f710eccc28c83fb0a755dc632f40394631b2d6a 100755 (executable)
@@ -22,13 +22,9 @@ class AliAnaChargedParticles : public AliAnaCaloTrackCorrBaseClass {
  public: 
   AliAnaChargedParticles() ; // default ctor
   virtual ~AliAnaChargedParticles() { ; } //virtual dtor
-
-  Bool_t  AcceptDCA(const Float_t pt, const Float_t dca) ;
   
   TList * GetCreateOutputObjects();
-  
-  Int_t   GetVertexBC(const AliVVertex * vtx);
-  
+    
   void    Init();
   
   void    InitParameters();
@@ -45,17 +41,10 @@ class AliAnaChargedParticles : public AliAnaCaloTrackCorrBaseClass {
   void    SwitchOnFillVertexBC0Histograms()  { fFillVertexBC0Histograms = kTRUE  ; }
   void    SwitchOffFillVertexBC0Histograms() { fFillVertexBC0Histograms = kFALSE ; }
 
-  void    SwitchOnRecalculateVertexBC()      { fRecalculateVertexBC     = kTRUE  ; }
-  void    SwitchOffRecalculateVertexBC()     { fRecalculateVertexBC     = kFALSE ; }
-
-  void    SetDCACutParameters(Int_t i, Float_t par) { if(i >= 0 && i < 3) fDCACutParam[i] = par ; }
-  
  private:
   
   Bool_t  fFillPileUpHistograms;    // Fill pile-up related histograms
   Bool_t  fFillVertexBC0Histograms; // Fill histograms for tracks with vertex BC=0 or not related histograms
-  Bool_t  fRecalculateVertexBC;     // Recalculate vertex BC for older AODs
-  Float_t fDCACutParam[3];          // DCA cut function parameters
   
   //Histograms
   TH1F * fhNtracks;     //! track multiplicity distribution
@@ -115,6 +104,7 @@ class AliAnaChargedParticles : public AliAnaCaloTrackCorrBaseClass {
   TH1F * fhTOFSignalPtCut;               //! TOF signal pt and acceptance cut
   TH1F * fhTOFSignalBCOK;                //! TOF signal pt and acceptance cut
   TH2F * fhPtTOFSignal;                  //! TOF signal vs track pT, good status
+  TH2F * fhPtTOFSignalDCACut;            //! TOF signal vs track pT, good status
   TH2F * fhPtTOFSignalPileUp[7];         //! TOF signal vs track pT, good status, pile-up
   TH2F * fhPtTOFSignalVtxOutBC0;         //! TOF signal vs track pT, good status
   TH2F * fhPtTOFSignalVtxOutBC0PileUp[7];//! TOF signal vs track pT, good status, pile-up
index 6d8a10d9765364aab1b1075cb064da68cc7cb6e2..0654e367e5058285acbf5c20ab5702272eed451d 100755 (executable)
@@ -77,7 +77,7 @@ ClassImp(AliAnaParticleHadronCorrelation)
     fFillPileUpHistograms(0),       
     //Histograms
     fhPtInput(0),                   fhPtFidCut(0),
-    fhPtLeading(0),                 fhPtLeadingPileUp(),              
+    fhPtLeading(0),                 fhPtLeadingVtxBC0(0),
     fhPtLeadingVzBin(0),            fhPtLeadingBin(0),                 
     fhPhiLeading(0),                fhEtaLeading(0),   
     fhPtLeadingMC(),
@@ -113,6 +113,10 @@ ClassImp(AliAnaParticleHadronCorrelation)
     fhXEChargedBC0(),               fhXEUeChargedBC0(),
     fhZTChargedBC0(),               fhZTUeChargedBC0(),
     fhPtTrigChargedBC0(),
+    fhDeltaPhiChargedVtxBC0(),      fhDeltaPhiChargedPtA3GeVVtxBC0(),
+    fhXEChargedVtxBC0(),            fhXEUeChargedVtxBC0(),
+    fhZTChargedVtxBC0(),            fhZTUeChargedVtxBC0(),
+    fhPtTrigChargedVtxBC0(),
     fhDeltaPhiUeLeftCharged(0),     fhDeltaPhiUeRightCharged(0),
     fhDeltaPhiUeLeftUpCharged(0),   fhDeltaPhiUeRightUpCharged(0),
     fhDeltaPhiUeLeftDownCharged(0), fhDeltaPhiUeRightDownCharged(0),
@@ -285,6 +289,13 @@ void AliAnaParticleHadronCorrelation::FillChargedAngularCorrelationHistograms(Fl
         if(ptAssoc > 3 ) fhDeltaPhiChargedPtA3GeVBC0->Fill(ptTrig ,deltaPhi) ;
     }
     
+    Int_t vtxBC = GetReader()->GetVertexBC();
+    if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA)
+    {
+      fhDeltaPhiChargedVtxBC0->Fill(ptTrig ,deltaPhi) ;
+      if(ptAssoc > 3 ) fhDeltaPhiChargedPtA3GeVVtxBC0->Fill(ptTrig ,deltaPhi) ;
+    }
+    
     if(GetReader()->IsPileUpFromSPD())               { fhDeltaEtaChargedPileUp[0]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[0]->Fill(ptTrig ,deltaPhi) ; }
     if(GetReader()->IsPileUpFromEMCal())             { fhDeltaEtaChargedPileUp[1]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[1]->Fill(ptTrig ,deltaPhi) ; }
     if(GetReader()->IsPileUpFromSPDOrEMCal())        { fhDeltaEtaChargedPileUp[2]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[2]->Fill(ptTrig ,deltaPhi) ; }
@@ -293,8 +304,6 @@ void AliAnaParticleHadronCorrelation::FillChargedAngularCorrelationHistograms(Fl
     if(GetReader()->IsPileUpFromEMCalAndNotSPD())    { fhDeltaEtaChargedPileUp[5]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[5]->Fill(ptTrig ,deltaPhi) ; }
     if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhDeltaEtaChargedPileUp[6]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[6]->Fill(ptTrig ,deltaPhi) ; }
     
-
-    
     if(ptAssoc > 3 )
     {
       if(GetReader()->IsPileUpFromSPD())               { fhDeltaEtaChargedPtA3GeVPileUp[0]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[0]->Fill(ptTrig ,deltaPhi) ; }
@@ -494,6 +503,14 @@ void AliAnaParticleHadronCorrelation::FillChargedMomentumImbalanceHistograms(Flo
       fhPtTrigChargedBC0->Fill(ptTrig,ptAssoc);
     }
 
+    Int_t vtxBC = GetReader()->GetVertexBC();
+    if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA)
+    {
+      fhXEChargedVtxBC0    ->Fill(ptTrig,xE);
+      fhZTChargedVtxBC0    ->Fill(ptTrig,zT);
+      fhPtTrigChargedVtxBC0->Fill(ptTrig,ptAssoc);
+    }
+       
     if(GetReader()->IsPileUpFromSPD())                { fhXEChargedPileUp[0]->Fill(ptTrig,xE); fhZTChargedPileUp[0]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[0]->Fill(ptTrig,ptAssoc); }
     if(GetReader()->IsPileUpFromEMCal())              { fhXEChargedPileUp[1]->Fill(ptTrig,xE); fhZTChargedPileUp[1]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[1]->Fill(ptTrig,ptAssoc); }
     if(GetReader()->IsPileUpFromSPDOrEMCal())         { fhXEChargedPileUp[2]->Fill(ptTrig,xE); fhZTChargedPileUp[2]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[2]->Fill(ptTrig,ptAssoc); }
@@ -587,6 +604,13 @@ void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventHistograms(Float
       fhZTUeChargedBC0->Fill(ptTrig,uezT);
     }
     
+    Int_t vtxBC = GetReader()->GetVertexBC();
+    if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA)
+    {
+      fhXEUeChargedVtxBC0->Fill(ptTrig,uexE);
+      fhZTUeChargedVtxBC0->Fill(ptTrig,uezT);
+    }
+
     if(GetReader()->IsPileUpFromSPD())               { fhXEUeChargedPileUp[0]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[0]->Fill(ptTrig,uezT);}
     if(GetReader()->IsPileUpFromEMCal())             { fhXEUeChargedPileUp[1]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[1]->Fill(ptTrig,uezT);}
     if(GetReader()->IsPileUpFromSPDOrEMCal())        { fhXEUeChargedPileUp[2]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[2]->Fill(ptTrig,uezT);}
@@ -1428,6 +1452,59 @@ TList *  AliAnaParticleHadronCorrelation::GetCreateOutputObjects()
       outputContainer->Add(fhZTUeChargedBC0) ;
       outputContainer->Add(fhPtTrigChargedBC0) ;
 
+      fhPtLeadingVtxBC0  = new TH1F("hPtLeadingVtxBC0","p_{T} distribution of leading particles", nptbins,ptmin,ptmax);
+      fhPtLeadingVtxBC0->SetXTitle("p_{T}^{trig} (GeV/c)");
+      
+      fhDeltaPhiChargedVtxBC0  = new TH2F
+      ("hDeltaPhiChargedVtxBC0","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}, track BC==0",
+       nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+      fhDeltaPhiChargedVtxBC0->SetYTitle("#Delta #phi (rad)");
+      fhDeltaPhiChargedVtxBC0->SetXTitle("p_{T trigger} (GeV/c)");
+      
+      fhDeltaPhiChargedPtA3GeVVtxBC0  = new TH2F
+      ("hDeltaPhiChargedPtA3GeVVtxBC0","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}, p_{TA}>3 GeV/c, track BC==0",
+       nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+      fhDeltaPhiChargedPtA3GeVVtxBC0->SetYTitle("#Delta #phi (rad)");
+      fhDeltaPhiChargedPtA3GeVVtxBC0->SetXTitle("p_{T trigger} (GeV/c)");
+      
+      fhPtTrigChargedVtxBC0  =
+      new TH2F("hPtTrigChargedVtxBC0","trigger and charged tracks pt distribution, track BC==0",
+               nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
+      fhPtTrigChargedVtxBC0->SetYTitle("p_{T h^{#pm}} (GeV/c)");
+      fhPtTrigChargedVtxBC0->SetXTitle("p_{T trigger} (GeV/c)");
+      
+      fhXEChargedVtxBC0  =
+      new TH2F("hXEChargedVtxBC0","x_{E} for charged tracks, track BC==0",
+               nptbins,ptmin,ptmax,200,0.,2.);
+      fhXEChargedVtxBC0->SetYTitle("x_{E}");
+      fhXEChargedVtxBC0->SetXTitle("p_{T trigger} (GeV/c)");
+      
+      fhXEUeChargedVtxBC0  =
+      new TH2F("hXEUeChargedVtxBC0","x_{E} for Underlying Event, track BC==0",
+               nptbins,ptmin,ptmax,200,0.,2.);
+      fhXEUeChargedVtxBC0->SetYTitle("x_{E}");
+      fhXEUeChargedVtxBC0->SetXTitle("p_{T trigger} (GeV/c)");
+      
+      fhZTChargedVtxBC0  =
+      new TH2F("hZTChargedVtxBC0","z_{T} for charged tracks, track BC==0",
+               nptbins,ptmin,ptmax,200,0.,2.);
+      fhZTChargedVtxBC0->SetYTitle("z_{T}");
+      fhZTChargedVtxBC0->SetXTitle("p_{T trigger}");
+      
+      fhZTUeChargedVtxBC0  =
+      new TH2F("hZTUeChargedVtxBC0","z_{T} for Underlying Event, track BC==0",
+               nptbins,ptmin,ptmax,200,0.,2.);
+      fhZTUeChargedVtxBC0->SetYTitle("z_{T}");
+      fhZTUeChargedVtxBC0->SetXTitle("p_{T trigger} (GeV/c)");
+      
+      outputContainer->Add(fhPtLeadingVtxBC0);
+      outputContainer->Add(fhDeltaPhiChargedVtxBC0) ;
+      outputContainer->Add(fhDeltaPhiChargedPtA3GeVVtxBC0) ;
+      outputContainer->Add(fhXEChargedVtxBC0) ;
+      outputContainer->Add(fhXEUeChargedVtxBC0) ;
+      outputContainer->Add(fhZTChargedVtxBC0) ;
+      outputContainer->Add(fhZTUeChargedVtxBC0) ;
+      outputContainer->Add(fhPtTrigChargedVtxBC0) ;
       
       for(Int_t i = 0 ; i < 7 ; i++)
       {
@@ -2738,6 +2815,9 @@ void  AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms()
  
       if(fFillPileUpHistograms)
       {
+        Int_t vtxBC = GetReader()->GetVertexBC();
+        if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA)     fhPtLeadingVtxBC0->Fill(pt);
+
         if(GetReader()->IsPileUpFromSPD())               fhPtLeadingPileUp[0]->Fill(pt);
         if(GetReader()->IsPileUpFromEMCal())             fhPtLeadingPileUp[1]->Fill(pt);
         if(GetReader()->IsPileUpFromSPDOrEMCal())        fhPtLeadingPileUp[2]->Fill(pt);
index abd354f130f1c9c1db543fea8cfe5e2aaf827553..5b6db12b355d40049e57255f8e4a0e5a0223f7c2 100755 (executable)
@@ -226,6 +226,7 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   TH1F *       fhPtInput;                      //! pT distribution of trigger particles before selection
   TH1F *       fhPtFidCut;                     //! pT distribution of trigger particles before leading selection, after fiducial selection
   TH1F *       fhPtLeading;                    //! pT distribution of leading particles
+  TH1F *       fhPtLeadingVtxBC0;              //! pT distribution of leading particles
   TH1F *       fhPtLeadingPileUp[7];           //! pT distribution of leading particles
   TH2F *       fhPtLeadingVzBin;               //! pT distribution of leading particles vs vz bin
   TH2F *       fhPtLeadingBin;                 //! pT distribution of leading particles, vs mixing bin
@@ -300,6 +301,14 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   TH2F *       fhZTUeChargedBC0  ;               //! Trigger particle -charged hadron momentum imbalance histogram
   TH2F *       fhPtTrigChargedBC0 ;              //! trigger and correlated particl pt, to be used for mean value for kt
 
+  TH2F *       fhDeltaPhiChargedVtxBC0  ;        //! Difference of charged particle phi and trigger particle  phi as function of  trigger particle pT
+  TH2F *       fhDeltaPhiChargedPtA3GeVVtxBC0 ;  //! Difference of charged particle phi and trigger particle  phi as function of  trigger particle pT, pTa > 3 GeV
+  TH2F *       fhXEChargedVtxBC0  ;              //! Trigger particle -charged hadron momentum imbalance histogram
+  TH2F *       fhXEUeChargedVtxBC0  ;            //! Trigger particle -charged hadron momentum imbalance histogram
+  TH2F *       fhZTChargedVtxBC0  ;              //! Trigger particle -charged hadron momentum imbalance histogram
+  TH2F *       fhZTUeChargedVtxBC0  ;            //! Trigger particle -charged hadron momentum imbalance histogram
+  TH2F *       fhPtTrigChargedVtxBC0 ;           //! trigger and correlated particl pt, to be used for mean value for kt
+  
   //if several UE calculation is on, most useful for jet-jet events contribution
   TH2F *       fhDeltaPhiUeLeftCharged  ;      //! Difference of charged particle from underlying events phi and trigger particle  phi as function of charged particle pT
   TH2F *       fhDeltaPhiUeRightCharged  ;     //! Difference of charged particle from underlying events phi and trigger particle  phi 
@@ -428,7 +437,7 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   AliAnaParticleHadronCorrelation(              const AliAnaParticleHadronCorrelation & ph) ; // cpy ctor
   AliAnaParticleHadronCorrelation & operator = (const AliAnaParticleHadronCorrelation & ph) ; // cpy assignment
        
-  ClassDef(AliAnaParticleHadronCorrelation,28)
+  ClassDef(AliAnaParticleHadronCorrelation,29)
 } ;
  
 
index 5dd84cca84a9c2d9eb105590c37184ae18035f2a..3e31abf86ca3c8bcc4aeff60f7dbdb6d9a209727 100755 (executable)
@@ -67,7 +67,8 @@ fhEtaPhiDecayIso(0),              fhEtaPhiDecayNoIso(0),
 fhConeSumPt(0),                   fhPtInCone(0),
 fhPtTrackInCone(0),
 fhPtTrackInConeOtherBC(0),        fhPtTrackInConeOtherBCPileUpSPD(0),
-fhPtTrackInConeBC0(0),            fhPtTrackInConeBC0PileUpSPD(0),
+fhPtTrackInConeBC0(0),            fhPtTrackInConeVtxBC0(0),
+fhPtTrackInConeBC0PileUpSPD(0),
 fhPtInConePileUp(),               fhPtInConeCent(0),
 fhFRConeSumPt(0),                 fhPtInFRCone(0),                 fhPhiUEConeSumPt(0),
 fhEtaUEConeSumPt(0),              fhEtaBand(0),                    fhPhiBand(0),
@@ -840,6 +841,14 @@ TList *  AliAnaParticleIsolation::GetCreateOutputObjects()
       fhPtTrackInConeBC0->SetXTitle("p_{T} (GeV/c)");
       outputContainer->Add(fhPtTrackInConeBC0) ;
       
+      fhPtTrackInConeVtxBC0  = new TH2F("hPtTrackInConeVtxBC0",
+                                     Form("p_{T} of tracks in isolation cone for R = %2.2f, TOF from BC==0",r),
+                                     nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
+      fhPtTrackInConeVtxBC0->SetYTitle("p_{T in cone} (GeV/c)");
+      fhPtTrackInConeVtxBC0->SetXTitle("p_{T} (GeV/c)");
+      outputContainer->Add(fhPtTrackInConeVtxBC0) ;
+
+      
       fhPtTrackInConeBC0PileUpSPD  = new TH2F("hPtTrackInConeBC0PileUpSPD",
                                                   Form("p_{T} of tracks in isolation cone for R = %2.2f, TOF from BC==0, pile-up from SPD",r),
                                                   nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
@@ -1946,6 +1955,9 @@ void  AliAnaParticleIsolation::MakeAnalysisFillHistograms()
           if     ( okTOF && trackBC!=0 )fhPtTrackInConeOtherBC->Fill(pt,pTtrack);
           else if( okTOF && trackBC==0 )fhPtTrackInConeBC0    ->Fill(pt,pTtrack);
           
+          Int_t vtxBC = GetReader()->GetVertexBC();
+          if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA) fhPtTrackInConeVtxBC0->Fill(pt,pTtrack);
+          
           if(GetReader()->IsPileUpFromSPD())             { fhPtInConePileUp[0]->Fill(pt,pTtrack);
             if(okTOF && trackBC!=0 )           fhPtTrackInConeOtherBCPileUpSPD->Fill(pt,pTtrack);
             if(okTOF && trackBC==0 )           fhPtTrackInConeBC0PileUpSPD    ->Fill(pt,pTtrack); }
index 6e0949f9e4f7cca9b9c045191e09b1dc28628be4..c16c7cf690ce065b7e1343eccabfa7e576f9aefa 100755 (executable)
@@ -157,6 +157,7 @@ class AliAnaParticleIsolation : public AliAnaCaloTrackCorrBaseClass {
   TH2F *   fhPtTrackInConeOtherBC ;               //! Track Pt in the cone, tracks out of main BC Time window
   TH2F *   fhPtTrackInConeOtherBCPileUpSPD ;      //! Track Pt in the cone, tracks out of main BC Time window
   TH2F *   fhPtTrackInConeBC0 ;                   //! Track Pt in the cone, tracks in BC=0
+  TH2F *   fhPtTrackInConeVtxBC0 ;                //! Track Pt in the cone, tracks in BC=0
   TH2F *   fhPtTrackInConeBC0PileUpSPD ;          //! Track Pt in the cone, tracks in BC=0
   TH2F *   fhPtInConePileUp[7] ;                  //! Particle Pt in the cone, if event is from pile-up (SPD method)
   TH2F *   fhPtInConeCent ;                       //! Particle Pt in the cone versus centrality
@@ -317,7 +318,7 @@ class AliAnaParticleIsolation : public AliAnaCaloTrackCorrBaseClass {
   AliAnaParticleIsolation(              const AliAnaParticleIsolation & iso) ; // cpy ctor
   AliAnaParticleIsolation & operator = (const AliAnaParticleIsolation & iso) ; // cpy assignment
   
-  ClassDef(AliAnaParticleIsolation,20)
+  ClassDef(AliAnaParticleIsolation,21)
 } ;