ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id: AliESDv0Cuts.cxx 24534 2008-03-16 22:22:11Z fca $ */

#include "AliESDv0Cuts.h"

#include <AliESDVertex.h>
#include <AliESDtrack.h>
#include <AliESDv0.h>
#include <AliESD.h>
#include <AliESDEvent.h>
#include <AliLog.h>

#include <TTree.h>
#include <TCanvas.h>
#include <TDirectory.h>

//____________________________________________________________________
ClassImp(AliESDv0Cuts)

// Cut names
const Char_t* AliESDv0Cuts::fgkCutNames[kNCuts] = {
 "dca positive to pvtx",
 "dca negative to pvtx",
 "#Chi^{2}",
 "dca v0 daughters",
 "min decay radius",
 "max decay radius",
 "cosine pointing angle",
 "on-the-fly status",
 "dca v0 to pvtx",
 "p",
 "p_{T}",
 "p_{x}",
 "p_{y}",
 "p_{z}"
};

//____________________________________________________________________
AliESDv0Cuts::AliESDv0Cuts(const Char_t* name, const Char_t* title) : AliAnalysisCuts(name,title),
  fCutMinDcaPosToVertex(0),
  fCutMinDcaNegToVertex(0),
  fCutMaxChi2(40),
  fCutMaxDcaV0Daughters(0),
  fCutMinRadius(0),
  fCutMaxRadius(0),
  fCutMinCosinePointingAngle(0),
  fCutRequireOnFlyStatus(0),
  fCutMaxDcaV0ToVertex(0),
  fPMin(0),
  fPMax(0),
  fPtMin(0),
  fPtMax(0),
  fPxMin(0),
  fPxMax(0),
  fPyMin(0),
  fPyMax(0),
  fPzMin(0),
  fPzMax(0),
  fHistogramsOn(0),
  fhCutStatistics(0),         
  fhCutCorrelation(0)
{
  //
  // constructor
  //

  Init();

  //##############################################################################
  // setting default cuts
  SetMinDcaPosToVertex();
  SetMinDcaNegToVertex();
  SetMaxChi2();
  SetMaxDcaV0Daughters();
  SetMinRadius();
  SetMaxRadius();
  SetMinCosinePointingAngle();
  SetRequireOnFlyStatus();
  SetMaxDcaV0ToVertex();
  SetPRange();
  SetPtRange();
  SetPxRange();
  SetPyRange();
  SetPzRange();

  SetHistogramsOn();
}

//_____________________________________________________________________________
AliESDv0Cuts::AliESDv0Cuts(const AliESDv0Cuts &c) : AliAnalysisCuts(c),
  fCutMinDcaPosToVertex(0),
  fCutMinDcaNegToVertex(0),
  fCutMaxChi2(0),
  fCutMaxDcaV0Daughters(0),
  fCutMinRadius(0),
  fCutMaxRadius(0),
  fCutMinCosinePointingAngle(0),
  fCutRequireOnFlyStatus(0),
  fCutMaxDcaV0ToVertex(0),
  fPMin(0),
  fPMax(0),
  fPtMin(0),
  fPtMax(0),
  fPxMin(0),
  fPxMax(0),
  fPyMin(0),
  fPyMax(0),
  fPzMin(0),
  fPzMax(0),
  fHistogramsOn(0),
  fhCutStatistics(0),         
  fhCutCorrelation(0)
{
  //
  // copy constructor
  //

  ((AliESDv0Cuts &) c).Copy(*this);
}

AliESDv0Cuts::~AliESDv0Cuts()
{
  //
  // destructor
  //

  for (Int_t i=0; i<2; i++) {
    
    if (fhDcaPosToVertex[i])
      delete fhDcaPosToVertex[i];
    if (fhDcaNegToVertex[i])
      delete fhDcaNegToVertex[i];
    if (fhChi2[i])
      delete fhChi2[i];
    if (fhDcaV0Daughters[i])
      delete fhDcaV0Daughters[i];
    if (fhRadius[i])
      delete fhRadius[i];             
    if (fhCosinePointingAngle[i])
      delete fhCosinePointingAngle[i];
    if (fhOnFlyStatus[i])
    delete fhOnFlyStatus[i];
    if (fhDcaV0ToVertex[i])
      delete fhDcaV0ToVertex[i];
    if (fhPt[i])
      delete fhPt[i];
  }

  if (fhCutStatistics)
    delete fhCutStatistics;             
  if (fhCutCorrelation)
    delete fhCutCorrelation;            
}

void AliESDv0Cuts::Init()
{
  //
  // sets everything to zero
  //
  fCutMinDcaPosToVertex      = 0;
  fCutMinDcaNegToVertex      = 0;
  fCutMaxChi2                = 0;
  fCutMaxDcaV0Daughters      = 0;
  fCutMinRadius              = 0;
  fCutMaxRadius              = 0;
  fCutMinCosinePointingAngle = 0;
  fCutRequireOnFlyStatus     = 0;
  fCutMaxDcaV0ToVertex       = 0;

  fPMin  = 0;
  fPMax  = 0;
  fPtMin = 0;
  fPtMax = 0;
  fPxMin = 0;
  fPxMax = 0;
  fPyMin = 0;
  fPyMax = 0;
  fPzMin = 0;
  fPzMax = 0;

  fHistogramsOn = kFALSE;

  for (Int_t i=0; i<2; ++i)
  {
    fhDcaPosToVertex[i]      = 0;
    fhDcaNegToVertex[i]      = 0;
    fhChi2[i]                = 0;
    fhDcaV0Daughters[i]      = 0;
    fhRadius[i]              = 0;
    fhCosinePointingAngle[i] = 0;
    fhOnFlyStatus[i]         = 0;
    fhDcaV0ToVertex[i]       = 0;
    
    fhPt[i]                  = 0;
  }
  fhCutStatistics = 0;
  fhCutCorrelation = 0;
}

//_____________________________________________________________________________
AliESDv0Cuts &AliESDv0Cuts::operator=(const AliESDv0Cuts &c)
{
  //
  // Assignment operator
  //

  if (this != &c) ((AliESDv0Cuts &) c).Copy(*this);
  return *this;
}

//_____________________________________________________________________________
void AliESDv0Cuts::Copy(TObject &c) const
{
  //
  // Copy function
  //

  AliESDv0Cuts& target = (AliESDv0Cuts &) c;

  target.Init();

  target.fCutMinDcaPosToVertex      = fCutMinDcaPosToVertex;
  target.fCutMinDcaNegToVertex      = fCutMinDcaNegToVertex;
  target.fCutMaxChi2                = fCutMaxChi2;
  target.fCutMaxDcaV0Daughters      = fCutMaxDcaV0Daughters;
  target.fCutMinRadius              = fCutMinRadius;
  target.fCutMaxRadius              = fCutMaxRadius;
  target.fCutMinCosinePointingAngle = fCutMinCosinePointingAngle;
  target.fCutRequireOnFlyStatus     = fCutRequireOnFlyStatus;
  target.fCutMaxDcaV0ToVertex       = fCutMaxDcaV0ToVertex;

  target.fPMin  = fPMin;
  target.fPMax  = fPMax;
  target.fPtMin = fPtMin;
  target.fPtMax = fPtMax;
  target.fPxMin = fPxMin;
  target.fPxMax = fPxMax;
  target.fPyMin = fPyMin;
  target.fPyMax = fPyMax;
  target.fPzMin = fPzMin;
  target.fPzMax = fPzMax;

  target.fHistogramsOn = fHistogramsOn;

  for (Int_t i=0; i<2; ++i)
  {
    if (fhDcaPosToVertex[i]) target.fhDcaPosToVertex[i] = (TH1F*) fhDcaPosToVertex[i]->Clone();
    if (fhDcaNegToVertex[i]) target.fhDcaNegToVertex[i] = (TH1F*) fhDcaNegToVertex[i]->Clone();
    if (fhChi2[i]) target.fhChi2[i] = (TH1F*) fhChi2[i]->Clone();
    if (fhDcaV0Daughters[i]) target.fhDcaV0Daughters[i] = (TH1F*) fhDcaV0Daughters[i]->Clone();
    if (fhRadius[i]) target.fhRadius[i] = (TH1F*) fhRadius[i]->Clone();
    if (fhCosinePointingAngle[i]) target.fhCosinePointingAngle[i] = (TH1F*) fhCosinePointingAngle[i]->Clone();
    if (fhOnFlyStatus[i]) target.fhOnFlyStatus[i] = (TH1F*) fhOnFlyStatus[i]->Clone();
    if (fhDcaV0ToVertex[i]) target.fhDcaV0ToVertex[i] = (TH1F*) fhDcaV0ToVertex[i]->Clone();
    
    if (fhPt[i]) target.fhPt[i] = (TH1F*) fhPt[i]->Clone();
  }
  if (fhCutStatistics) target.fhCutStatistics = (TH1F*) fhCutStatistics->Clone();
  if (fhCutCorrelation) target.fhCutCorrelation = (TH2F*) fhCutCorrelation->Clone();

  TNamed::Copy(c);
}

//_____________________________________________________________________________
Long64_t AliESDv0Cuts::Merge(TCollection* list) {
  // Merge a list of AliESDv0Cuts objects with this (needed for PROOF)
  // Returns the number of merged objects (including this)

  if (!list)
    return 0;
  
  if (list->IsEmpty())
    return 1;

  if (!fHistogramsOn)
    return 0;

  TIterator* iter = list->MakeIterator();
  TObject* obj;


  // collection of measured and generated histograms
  Int_t count = 0;
  while ((obj = iter->Next())) {

    AliESDv0Cuts* entry = dynamic_cast<AliESDv0Cuts*>(obj);
    if (entry == 0)
      continue;

    if (!entry->fHistogramsOn)
      continue;
    
    for (Int_t i=0; i<2; i++) {
      
      fhDcaPosToVertex[i]     ->Add(entry->fhDcaPosToVertex[i]     );
      fhDcaNegToVertex[i]     ->Add(entry->fhDcaNegToVertex[i]     );
      fhChi2[i]               ->Add(entry->fhChi2[i]               );
      fhDcaV0Daughters[i]     ->Add(entry->fhDcaV0Daughters[i]     );
      fhRadius[i]             ->Add(entry->fhRadius[i]             );
      fhCosinePointingAngle[i]->Add(entry->fhCosinePointingAngle[i]);
      fhOnFlyStatus[i]        ->Add(entry->fhOnFlyStatus[i]        );
      fhDcaV0ToVertex[i]      ->Add(entry->fhDcaV0ToVertex[i]      );

      fhPt[i]                ->Add(entry->fhPt[i]);
    }      
    fhCutStatistics  ->Add(entry->fhCutStatistics);        
    fhCutCorrelation ->Add(entry->fhCutCorrelation);      

    count++;
  }

  return count+1;
}

void AliESDv0Cuts::EnableNeededBranches(TTree* tree)
{
  // enables the branches needed by AcceptV0, for a list see comment of AcceptV0

  tree->SetBranchStatus("fV0s.fDcaV0Daughters", 1);
  tree->SetBranchStatus("fV0s.fChi2V0", 1);
  tree->SetBranchStatus("fV0s.fPos*", 1);
  tree->SetBranchStatus("fV0s.fNmom*", 1);
  tree->SetBranchStatus("fV0s.fPmom*", 1);
  tree->SetBranchStatus("fV0s.fRr", 1);
  tree->SetBranchStatus("fV0s.fPointAngle*", 1);
  tree->SetBranchStatus("fV0s.fOnFlyStatus", 1);
}

//____________________________________________________________________
Bool_t
AliESDv0Cuts::IsSelected(TList* listObj) {
// Selection cuts
  if(listObj->GetSize()!=4) return kFALSE;
  AliESDv0           *esdV0     = (AliESDv0*)listObj->At(0);
  AliESDtrack        *trackPos  = (AliESDtrack*)listObj->At(1);
  AliESDtrack        *trackNeg  = (AliESDtrack*)listObj->At(2);
  const AliESDVertex *esdVertex = (AliESDVertex*)listObj->At(3);
  return AcceptV0(esdV0,trackPos,trackNeg,esdVertex);
}

//____________________________________________________________________
Bool_t
AliESDv0Cuts::AcceptV0(AliESDv0* const esdV0, AliESDtrack* const trackPos, AliESDtrack* const trackNeg, const AliESDVertex* esdVertex) {
  // 
  // figure out if the v0s survives all the v0 cuts defined
  //
  // the different quality parameter and kinematic values are first
  // retrieved from the v0. then it is found out what cuts the
  // v0 did not survive and finally the cuts are imposed.

  // this function needs the following branches... but this is not enough
  // fV0s.fDcaV0Daughters
  // fV0s.fChi2V0
  // fV0s.fPos*
  // fV0s.fNmom*
  // fV0s.fPmom*
  // fV0s.fRr
  // fV0s.fPointAngle
  // fV0s.fOnFlyStatus

  Float_t  dcaPosToVertex = 0, dcaNegToVertex = 0;
  Float_t  tdcaPosToVertex[2]={999,999};
  Float_t  tdcaNegToVertex[2]={999,999};

  if (trackPos) trackPos->GetImpactParameters(tdcaPosToVertex[0],tdcaPosToVertex[1]);
  if (trackNeg) trackNeg->GetImpactParameters(tdcaNegToVertex[0],tdcaNegToVertex[1]);

  dcaPosToVertex = TMath::Sqrt(tdcaPosToVertex[0]*tdcaPosToVertex[0]+tdcaPosToVertex[1]*tdcaPosToVertex[1]);
  dcaNegToVertex = TMath::Sqrt(tdcaNegToVertex[0]*tdcaNegToVertex[0]+tdcaNegToVertex[1]*tdcaNegToVertex[1]);

  UInt_t  status = esdV0->GetOnFlyStatus();
  Float_t chi2  = esdV0->GetChi2V0();

  Double_t dcaV0Daughters = esdV0->GetDcaV0Daughters();

  Double_t vtxPosition[3]; esdVertex->GetXYZ(vtxPosition);
  Double_t dcaV0ToVertex  = esdV0->GetD(vtxPosition[0],vtxPosition[1],vtxPosition[2]);

  Double_t v0Position[3];
  esdV0->GetXYZ(v0Position[0],v0Position[1],v0Position[2]);
  Double_t radius = TMath::Sqrt(TMath::Power(v0Position[0],2) + TMath::Power(v0Position[1],2));
  Double_t v0CosinePointingAngle = esdV0->GetV0CosineOfPointingAngle();

  // getting the kinematic variables of the v0
  Double_t p[3];
  esdV0->GetPxPyPz(p[0],p[1],p[2]);
  Float_t momentum = TMath::Sqrt(TMath::Power(p[0],2) + TMath::Power(p[1],2) + TMath::Power(p[2],2));
  Float_t pt       = TMath::Sqrt(TMath::Power(p[0],2) + TMath::Power(p[1],2));

  //########################################################################
  // cut the v0?
  
  Bool_t cuts[kNCuts];
  for (Int_t i=0; i<kNCuts; i++) cuts[i]=kFALSE;
  
  // v0 quality cuts
  if (dcaPosToVertex < fCutMinDcaPosToVertex)
    cuts[0]=kTRUE;
  if (dcaNegToVertex < fCutMinDcaNegToVertex) 
    cuts[1]=kTRUE;
  if (chi2 > fCutMaxChi2) 
    cuts[2]=kTRUE; 
  if (dcaV0Daughters > fCutMaxDcaV0Daughters) 
    cuts[3]=kTRUE;  
  if (radius  < fCutMinRadius) 
    cuts[4]=kTRUE;  
  if (radius  > fCutMaxRadius) 
    cuts[5]=kTRUE;  
  if (v0CosinePointingAngle < fCutMinCosinePointingAngle)
    cuts[6]=kTRUE;  
  if (fCutRequireOnFlyStatus && !status)
    cuts[7]=kTRUE;  
  if (dcaV0ToVertex > fCutMaxDcaV0ToVertex)
    cuts[8] = kTRUE;

  // v0 kinematics cut
  if((momentum < fPMin) || (momentum > fPMax)) 
    cuts[9]=kTRUE;
  if((pt < fPtMin) || (pt > fPtMax)) 
    cuts[10] = kTRUE;
  if((p[0] < fPxMin) || (p[0] > fPxMax)) 
    cuts[11] = kTRUE;
  if((p[1] < fPyMin) || (p[1] > fPyMax)) 
    cuts[12] = kTRUE;
  if((p[2] < fPzMin) || (p[2] > fPzMax))
    cuts[13] = kTRUE;

  Bool_t cut=kFALSE;
  for (Int_t i=0; i<kNCuts; i++) 
    if (cuts[i]) cut = kTRUE;
  
  //########################################################################
  // filling histograms
  if (fHistogramsOn) {
    fhCutStatistics->Fill(fhCutStatistics->GetBinCenter(fhCutStatistics->GetXaxis()->FindBin("n v0s")));
    
    if (cut)
      fhCutStatistics->Fill(fhCutStatistics->GetBinCenter(fhCutStatistics->GetXaxis()->FindBin("n cut v0s")));
    
    for (Int_t i=0; i<kNCuts; i++) {
      if (cuts[i])
 	fhCutStatistics->Fill(fhCutStatistics->GetBinCenter(fhCutStatistics->GetXaxis()->FindBin(fgkCutNames[i])));
      
      for (Int_t j=i; j<kNCuts; j++) {
 	if (cuts[i] && cuts[j]) {
 	  Float_t x = fhCutCorrelation->GetXaxis()->GetBinCenter(fhCutCorrelation->GetXaxis()->FindBin(fgkCutNames[i]));
 	  Float_t y = fhCutCorrelation->GetYaxis()->GetBinCenter(fhCutCorrelation->GetYaxis()->FindBin(fgkCutNames[j]));
 	  fhCutCorrelation->Fill(x,y);
 	}
      }
    }
    
    fhDcaPosToVertex[0]->Fill(dcaPosToVertex);
    fhDcaNegToVertex[0]->Fill(dcaNegToVertex);
    fhChi2[0]->Fill(chi2);
    fhDcaV0Daughters[0]->Fill(dcaV0Daughters);
    fhRadius[0]->Fill(radius);
    fhCosinePointingAngle[0]->Fill(v0CosinePointingAngle);
    fhOnFlyStatus[0]->Fill(status);
    fhDcaV0ToVertex[0]->Fill(dcaV0ToVertex);
    
    fhPt[0]->Fill(pt);
  }

  //########################################################################
  // cut the v0!
  if (cut) return kFALSE;

  //########################################################################
  // filling histograms after cut
  if (fHistogramsOn) {
    fhDcaPosToVertex[1]->Fill(dcaPosToVertex);
    fhDcaNegToVertex[1]->Fill(dcaNegToVertex);
    fhChi2[1]->Fill(chi2);
    fhDcaV0Daughters[1]->Fill(dcaV0Daughters);
    fhRadius[1]->Fill(radius);
    fhCosinePointingAngle[1]->Fill(v0CosinePointingAngle);
    fhOnFlyStatus[1]->Fill(status);
    fhDcaV0ToVertex[1]->Fill(dcaV0ToVertex);
    
    fhPt[1]->Fill(pt);
  }

  return kTRUE;
}

//____________________________________________________________________
TObjArray* AliESDv0Cuts::GetAcceptedV0s(const AliESD* esd)
{
  //
  // returns an array of all v0s that pass the cuts
  //

  TObjArray* acceptedV0s = new TObjArray();
  //  const AliESDVertex *spdVertex = esd->GetVertex();
  const AliESDVertex *primaryVertex = esd->GetPrimaryVertex();
  Int_t    lIndexTrackPos       = 0, lIndexTrackNeg       = 0;

  // loop over esd v0s
  for (Int_t iV0 = 0; iV0 < esd->GetNumberOfV0s(); iV0++) {
    AliESDv0* v0 = esd->GetV0(iV0);

    lIndexTrackPos = TMath::Abs(v0->GetPindex());
    lIndexTrackNeg = TMath::Abs(v0->GetNindex());
    AliESDtrack *trackPos = esd->GetTrack(lIndexTrackPos);
    AliESDtrack *trackNeg = esd->GetTrack(lIndexTrackNeg);

    if (AcceptV0(v0,trackPos,trackNeg,primaryVertex))
      acceptedV0s->Add(v0);
  }

  return acceptedV0s;
}

//____________________________________________________________________
Int_t AliESDv0Cuts::CountAcceptedV0s(const AliESD* esd)
{
  //
  // returns an the number of v0s that pass the cuts
  //

  Int_t count = 0;
  //  const AliESDVertex *spdVertex = esd->GetVertex();
  const AliESDVertex *primaryVertex = esd->GetPrimaryVertex();
  Int_t    lIndexTrackPos       = 0, lIndexTrackNeg       = 0;

  // loop over esd v0s
  for (Int_t iV0 = 0; iV0 < esd->GetNumberOfV0s(); iV0++) {
    AliESDv0* v0 = esd->GetV0(iV0);

    lIndexTrackPos = TMath::Abs(v0->GetPindex());
    lIndexTrackNeg = TMath::Abs(v0->GetNindex());
    AliESDtrack *trackPos = esd->GetTrack(lIndexTrackPos);
    AliESDtrack *trackNeg = esd->GetTrack(lIndexTrackNeg);

    if (AcceptV0(v0,trackPos,trackNeg,primaryVertex))
      count++;
  }

  return count;
}

//____________________________________________________________________
TObjArray* AliESDv0Cuts::GetAcceptedV0s(const AliESDEvent* esd)
{
  //
  // returns an array of all v0s that pass the cuts
  //

  TObjArray* acceptedV0s = new TObjArray();
  //  const AliESDVertex *spdVertex = esd->GetVertex();
  const AliESDVertex *primaryVertex = esd->GetPrimaryVertex();
  Int_t    lIndexTrackPos       = 0, lIndexTrackNeg       = 0;

  // loop over esd v0s
  for (Int_t iV0 = 0; iV0 < esd->GetNumberOfV0s(); iV0++) {
    AliESDv0* v0 = esd->GetV0(iV0);

    lIndexTrackPos = TMath::Abs(v0->GetPindex());
    lIndexTrackNeg = TMath::Abs(v0->GetNindex());
    AliESDtrack *trackPos = esd->GetTrack(lIndexTrackPos);
    AliESDtrack *trackNeg = esd->GetTrack(lIndexTrackNeg);

    if (AcceptV0(v0,trackPos,trackNeg,primaryVertex))
      acceptedV0s->Add(v0);
  }

  return acceptedV0s;
}

//____________________________________________________________________
Int_t AliESDv0Cuts::CountAcceptedV0s(const AliESDEvent* esd)
{
  //
  // returns an the number of v0s that pass the cuts
  //

  Int_t count = 0;
  //  const AliESDVertex *spdVertex = esd->GetVertex();
  const AliESDVertex *primaryVertex = esd->GetPrimaryVertex();
  Int_t    lIndexTrackPos       = 0, lIndexTrackNeg       = 0;

  // loop over esd v0s
  for (Int_t iV0 = 0; iV0 < esd->GetNumberOfV0s(); iV0++) {
    AliESDv0* v0 = esd->GetV0(iV0);

    lIndexTrackPos = TMath::Abs(v0->GetPindex());
    lIndexTrackNeg = TMath::Abs(v0->GetNindex());
    AliESDtrack *trackPos = esd->GetTrack(lIndexTrackPos);
    AliESDtrack *trackNeg = esd->GetTrack(lIndexTrackNeg);

    if (AcceptV0(v0,trackPos,trackNeg,primaryVertex))
      count++;
  }

  return count;
}

//____________________________________________________________________
 void AliESDv0Cuts::DefineHistograms(Int_t color) {
   // 
   // diagnostics histograms are defined
   // 

   fHistogramsOn=kTRUE;
   
   Bool_t oldStatus = TH1::AddDirectoryStatus();
   TH1::AddDirectory(kFALSE);
   
   //###################################################################################
   // defining histograms

   fhCutStatistics = new TH1F("cut_statistics","cut statistics",kNCuts+4,-0.5,kNCuts+3.5);

   fhCutStatistics->GetXaxis()->SetBinLabel(1,"n v0s");
   fhCutStatistics->GetXaxis()->SetBinLabel(2,"n cut v0s");

   fhCutCorrelation = new TH2F("cut_correlation","cut correlation",kNCuts,-0.5,kNCuts-0.5,kNCuts,-0.5,kNCuts-0.5);;
  
   for (Int_t i=0; i<kNCuts; i++) {
     fhCutStatistics->GetXaxis()->SetBinLabel(i+4,fgkCutNames[i]);
     fhCutCorrelation->GetXaxis()->SetBinLabel(i+1,fgkCutNames[i]);
     fhCutCorrelation->GetYaxis()->SetBinLabel(i+1,fgkCutNames[i]);
   } 

  fhCutStatistics  ->SetLineColor(color);
  fhCutCorrelation ->SetLineColor(color);
  fhCutStatistics  ->SetLineWidth(2);
  fhCutCorrelation ->SetLineWidth(2);

  Char_t str[256];
  for (Int_t i=0; i<2; i++) {
    if (i==0) snprintf(str,256, " ");
    else snprintf(str,256, "_cut");

    fhDcaPosToVertex[i]      = new TH1F(Form("dcaPosToVertex%s",str),"",120,0,3);
    fhDcaNegToVertex[i]      = new TH1F(Form("dcaNegToVertex%s",str),"",120,0,3);
    fhChi2[i]                = new TH1F(Form("chi2%s",str),"",50,0,50);
    fhDcaV0Daughters[i]      = new  TH1F(Form("dcaV0Daughters%s",str),"",200,0,5);
    fhRadius[i]              = new  TH1F(Form("decayRadius%s",str),"",300,0,150);
    fhCosinePointingAngle[i] = new  TH1F(Form("cosinePointingAngle%s",str),"",100,-1,1);
    fhOnFlyStatus[i]         = new  TH1F(Form("onflystatus%s",str),"",5,0,5);
    fhDcaV0ToVertex[i]       = new  TH1F(Form("dcaV0ToVertex%s",str),"",100,0,5);

    fhPt[i]                  = new TH1F(Form("pt%s",str)     ,"p_{T} distribution;p_{T} (GeV/c)",500,0.0,100.0);
    
    fhDcaPosToVertex[i]->SetTitle("Dca of positive daughter to parent vertex");
    fhDcaNegToVertex[i]->SetTitle("Dca of negative daughter to parent vertex");
    fhChi2[i]->SetTitle("#Chi^{2} for v0");
    fhDcaV0Daughters[i]->SetTitle("Dca between daughter tracks");
    fhRadius[i]->SetTitle("Decay radius of the v0");
    fhCosinePointingAngle[i]->SetTitle("Cosine of the Pointing Angle");
    fhOnFlyStatus[i]->SetTitle("On-the-Fly Status");
    fhDcaV0ToVertex[i]->SetTitle("Dca of v0 to parent vertex");

    fhDcaPosToVertex[i]->SetLineColor(color);      fhDcaPosToVertex[i]->SetLineWidth(2);
    fhDcaNegToVertex[i]->SetLineColor(color);      fhDcaNegToVertex[i]->SetLineWidth(2);
    fhChi2[i]->SetLineColor(color);                fhChi2[i]->SetLineWidth(2);
    fhDcaV0Daughters[i]->SetLineColor(color);      fhDcaV0Daughters[i]->SetLineWidth(2);
    fhRadius[i]->SetLineColor(color);              fhRadius[i]->SetLineWidth(2);
    fhCosinePointingAngle[i]->SetLineColor(color); fhCosinePointingAngle[i]->SetLineWidth(2);
    fhOnFlyStatus[i]->SetLineColor(color);         fhOnFlyStatus[i]->SetLineWidth(2);
    fhDcaV0ToVertex[i]->SetLineColor(color);       fhDcaV0ToVertex[i]->SetLineWidth(2); 
  }

  TH1::AddDirectory(oldStatus);
}

//____________________________________________________________________
Bool_t AliESDv0Cuts::LoadHistograms(const Char_t* dir)
{
  //
  // loads the histograms from a file
  // if dir is empty a directory with the name of this object is taken (like in SaveHistogram)
  //

  if (!dir)
    dir = GetName();

  if (!gDirectory->cd(dir))
    return kFALSE;

  fhCutStatistics = dynamic_cast<TH1F*> (gDirectory->Get("cut_statistics"));
  fhCutCorrelation = dynamic_cast<TH2F*> (gDirectory->Get("cut_correlation"));

  Char_t str[5];
  for (Int_t i=0; i<2; i++) {
    if (i==0)
    {
      gDirectory->cd("before_cuts");
      str[0] = 0;
    }
    else
    {
      gDirectory->cd("after_cuts");
      snprintf(str,5, "_cut");
    }

    fhDcaPosToVertex[i]      = dynamic_cast<TH1F*> (gDirectory->Get(Form("dcaPosToVertex%s",str)     ));
    fhDcaNegToVertex[i]      = dynamic_cast<TH1F*> (gDirectory->Get(Form("dcaNegToVertex%s",str)     ));
    fhChi2[i] = dynamic_cast<TH1F*> (gDirectory->Get(Form("chi2%s",str)));
    fhDcaV0Daughters[i] = dynamic_cast<TH1F*> (gDirectory->Get(Form("dcaV0Daughters%s",str)));
    fhRadius[i] = dynamic_cast<TH1F*> (gDirectory->Get(Form("decayRadius%s",str)));
    fhCosinePointingAngle[i] = dynamic_cast<TH1F*> (gDirectory->Get(Form("cosinepointingangle%s",str)));
    fhOnFlyStatus[i] = dynamic_cast<TH1F*> (gDirectory->Get(Form("onflystatus%s",str)));
    fhDcaV0ToVertex[i] = dynamic_cast<TH1F*> (gDirectory->Get(Form("dcaV0ToVertex%s",str)));

    fhPt[i] = dynamic_cast<TH1F*> (gDirectory->Get(Form("pt%s",str)));

    gDirectory->cd("../");
  }

  gDirectory->cd("..");

  return kTRUE;
}

//____________________________________________________________________
void AliESDv0Cuts::SaveHistograms(const Char_t* dir) {
  //
  // saves the histograms in a directory (dir)
  //

  if (!fHistogramsOn) {
    AliDebug(0, "Histograms not on - cannot save histograms!!!");
    return;
  }

  if (!dir)
    dir = GetName();

  gDirectory->mkdir(dir);
  gDirectory->cd(dir);

  gDirectory->mkdir("before_cuts");
  gDirectory->mkdir("after_cuts");
 
  fhCutStatistics->Write();
  fhCutCorrelation->Write();

  for (Int_t i=0; i<2; i++) {
    if (i==0)
      gDirectory->cd("before_cuts");
    else
      gDirectory->cd("after_cuts");

    fhDcaPosToVertex[i]      ->Write();
    fhDcaNegToVertex[i]      ->Write();
    fhChi2[i]                ->Write();
    fhDcaV0Daughters[i]      ->Write();
    fhRadius[i]              ->Write();
    fhCosinePointingAngle[i] ->Write();
    fhOnFlyStatus[i]         ->Write();
    fhDcaV0ToVertex[i]       ->Write();

    fhPt[i]                  ->Write();
    
    gDirectory->cd("../");
  }

  gDirectory->cd("../");
}

//____________________________________________________________________
void AliESDv0Cuts::DrawHistograms()
{
  // draws some histograms

  TCanvas* canvas1 = new TCanvas(Form("%s_1", GetName()), "V0 Quality Results1", 800, 800);
  canvas1->Divide(2, 2);

  canvas1->cd(1);
  fhDcaPosToVertex[0]->SetStats(kFALSE);
  fhDcaPosToVertex[0]->Draw();

  canvas1->cd(2);
  fhChi2[0]->SetStats(kFALSE);
  fhChi2[0]->Draw();

  canvas1->cd(3);
  fhDcaV0ToVertex[0]->SetStats(kFALSE);
  fhDcaV0ToVertex[0]->Draw();

  canvas1->SaveAs(Form("%s_%s.gif", GetName(), canvas1->GetName()));

  TCanvas* canvas2 = new TCanvas(Form("%s_2", GetName()), "V0 Quality Results2", 1200, 800);
  canvas2->Divide(3, 2);

  canvas2->cd(1);
  fhDcaV0Daughters[0]->SetStats(kFALSE);
  gPad->SetLogy();
  fhDcaV0Daughters[0]->Draw();

  canvas2->cd(2);
  fhRadius[0]->SetStats(kFALSE);
  gPad->SetLogy();
  fhRadius[0]->Draw();


  canvas2->cd(4);
  fhCosinePointingAngle[0]->SetStats(kFALSE);
  gPad->SetLogy();
  fhCosinePointingAngle[0]->Draw();

  canvas2->cd(5);
  fhOnFlyStatus[0]->SetStats(kFALSE);
  gPad->SetLogy();
  fhOnFlyStatus[0]->Draw();

  canvas2->SaveAs(Form("%s_%s.gif", GetName(), canvas2->GetName()));

  TCanvas* canvas3 = new TCanvas(Form("%s_4", GetName()), "V0 Quality Results3", 800, 500);
  canvas3->Divide(2, 1);

  canvas3->cd(1);
  fhCutStatistics->SetStats(kFALSE);
  fhCutStatistics->LabelsOption("v");
  gPad->SetBottomMargin(0.3);
  fhCutStatistics->Draw();

  canvas3->cd(2);
  fhCutCorrelation->SetStats(kFALSE);
  fhCutCorrelation->LabelsOption("v");
  gPad->SetBottomMargin(0.3);
  gPad->SetLeftMargin(0.3);
  fhCutCorrelation->Draw("COLZ");

  canvas3->SaveAs(Form("%s_%s.gif", GetName(), canvas3->GetName()));
}

 AliESDv0Cuts.cxx:1
 AliESDv0Cuts.cxx:2
 AliESDv0Cuts.cxx:3
 AliESDv0Cuts.cxx:4
 AliESDv0Cuts.cxx:5
 AliESDv0Cuts.cxx:6
 AliESDv0Cuts.cxx:7
 AliESDv0Cuts.cxx:8
 AliESDv0Cuts.cxx:9
 AliESDv0Cuts.cxx:10
 AliESDv0Cuts.cxx:11
 AliESDv0Cuts.cxx:12
 AliESDv0Cuts.cxx:13
 AliESDv0Cuts.cxx:14
 AliESDv0Cuts.cxx:15
 AliESDv0Cuts.cxx:16
 AliESDv0Cuts.cxx:17
 AliESDv0Cuts.cxx:18
 AliESDv0Cuts.cxx:19
 AliESDv0Cuts.cxx:20
 AliESDv0Cuts.cxx:21
 AliESDv0Cuts.cxx:22
 AliESDv0Cuts.cxx:23
 AliESDv0Cuts.cxx:24
 AliESDv0Cuts.cxx:25
 AliESDv0Cuts.cxx:26
 AliESDv0Cuts.cxx:27
 AliESDv0Cuts.cxx:28
 AliESDv0Cuts.cxx:29
 AliESDv0Cuts.cxx:30
 AliESDv0Cuts.cxx:31
 AliESDv0Cuts.cxx:32
 AliESDv0Cuts.cxx:33
 AliESDv0Cuts.cxx:34
 AliESDv0Cuts.cxx:35
 AliESDv0Cuts.cxx:36
 AliESDv0Cuts.cxx:37
 AliESDv0Cuts.cxx:38
 AliESDv0Cuts.cxx:39
 AliESDv0Cuts.cxx:40
 AliESDv0Cuts.cxx:41
 AliESDv0Cuts.cxx:42
 AliESDv0Cuts.cxx:43
 AliESDv0Cuts.cxx:44
 AliESDv0Cuts.cxx:45
 AliESDv0Cuts.cxx:46
 AliESDv0Cuts.cxx:47
 AliESDv0Cuts.cxx:48
 AliESDv0Cuts.cxx:49
 AliESDv0Cuts.cxx:50
 AliESDv0Cuts.cxx:51
 AliESDv0Cuts.cxx:52
 AliESDv0Cuts.cxx:53
 AliESDv0Cuts.cxx:54
 AliESDv0Cuts.cxx:55
 AliESDv0Cuts.cxx:56
 AliESDv0Cuts.cxx:57
 AliESDv0Cuts.cxx:58
 AliESDv0Cuts.cxx:59
 AliESDv0Cuts.cxx:60
 AliESDv0Cuts.cxx:61
 AliESDv0Cuts.cxx:62
 AliESDv0Cuts.cxx:63
 AliESDv0Cuts.cxx:64
 AliESDv0Cuts.cxx:65
 AliESDv0Cuts.cxx:66
 AliESDv0Cuts.cxx:67
 AliESDv0Cuts.cxx:68
 AliESDv0Cuts.cxx:69
 AliESDv0Cuts.cxx:70
 AliESDv0Cuts.cxx:71
 AliESDv0Cuts.cxx:72
 AliESDv0Cuts.cxx:73
 AliESDv0Cuts.cxx:74
 AliESDv0Cuts.cxx:75
 AliESDv0Cuts.cxx:76
 AliESDv0Cuts.cxx:77
 AliESDv0Cuts.cxx:78
 AliESDv0Cuts.cxx:79
 AliESDv0Cuts.cxx:80
 AliESDv0Cuts.cxx:81
 AliESDv0Cuts.cxx:82
 AliESDv0Cuts.cxx:83
 AliESDv0Cuts.cxx:84
 AliESDv0Cuts.cxx:85
 AliESDv0Cuts.cxx:86
 AliESDv0Cuts.cxx:87
 AliESDv0Cuts.cxx:88
 AliESDv0Cuts.cxx:89
 AliESDv0Cuts.cxx:90
 AliESDv0Cuts.cxx:91
 AliESDv0Cuts.cxx:92
 AliESDv0Cuts.cxx:93
 AliESDv0Cuts.cxx:94
 AliESDv0Cuts.cxx:95
 AliESDv0Cuts.cxx:96
 AliESDv0Cuts.cxx:97
 AliESDv0Cuts.cxx:98
 AliESDv0Cuts.cxx:99
 AliESDv0Cuts.cxx:100
 AliESDv0Cuts.cxx:101
 AliESDv0Cuts.cxx:102
 AliESDv0Cuts.cxx:103
 AliESDv0Cuts.cxx:104
 AliESDv0Cuts.cxx:105
 AliESDv0Cuts.cxx:106
 AliESDv0Cuts.cxx:107
 AliESDv0Cuts.cxx:108
 AliESDv0Cuts.cxx:109
 AliESDv0Cuts.cxx:110
 AliESDv0Cuts.cxx:111
 AliESDv0Cuts.cxx:112
 AliESDv0Cuts.cxx:113
 AliESDv0Cuts.cxx:114
 AliESDv0Cuts.cxx:115
 AliESDv0Cuts.cxx:116
 AliESDv0Cuts.cxx:117
 AliESDv0Cuts.cxx:118
 AliESDv0Cuts.cxx:119
 AliESDv0Cuts.cxx:120
 AliESDv0Cuts.cxx:121
 AliESDv0Cuts.cxx:122
 AliESDv0Cuts.cxx:123
 AliESDv0Cuts.cxx:124
 AliESDv0Cuts.cxx:125
 AliESDv0Cuts.cxx:126
 AliESDv0Cuts.cxx:127
 AliESDv0Cuts.cxx:128
 AliESDv0Cuts.cxx:129
 AliESDv0Cuts.cxx:130
 AliESDv0Cuts.cxx:131
 AliESDv0Cuts.cxx:132
 AliESDv0Cuts.cxx:133
 AliESDv0Cuts.cxx:134
 AliESDv0Cuts.cxx:135
 AliESDv0Cuts.cxx:136
 AliESDv0Cuts.cxx:137
 AliESDv0Cuts.cxx:138
 AliESDv0Cuts.cxx:139
 AliESDv0Cuts.cxx:140
 AliESDv0Cuts.cxx:141
 AliESDv0Cuts.cxx:142
 AliESDv0Cuts.cxx:143
 AliESDv0Cuts.cxx:144
 AliESDv0Cuts.cxx:145
 AliESDv0Cuts.cxx:146
 AliESDv0Cuts.cxx:147
 AliESDv0Cuts.cxx:148
 AliESDv0Cuts.cxx:149
 AliESDv0Cuts.cxx:150
 AliESDv0Cuts.cxx:151
 AliESDv0Cuts.cxx:152
 AliESDv0Cuts.cxx:153
 AliESDv0Cuts.cxx:154
 AliESDv0Cuts.cxx:155
 AliESDv0Cuts.cxx:156
 AliESDv0Cuts.cxx:157
 AliESDv0Cuts.cxx:158
 AliESDv0Cuts.cxx:159
 AliESDv0Cuts.cxx:160
 AliESDv0Cuts.cxx:161
 AliESDv0Cuts.cxx:162
 AliESDv0Cuts.cxx:163
 AliESDv0Cuts.cxx:164
 AliESDv0Cuts.cxx:165
 AliESDv0Cuts.cxx:166
 AliESDv0Cuts.cxx:167
 AliESDv0Cuts.cxx:168
 AliESDv0Cuts.cxx:169
 AliESDv0Cuts.cxx:170
 AliESDv0Cuts.cxx:171
 AliESDv0Cuts.cxx:172
 AliESDv0Cuts.cxx:173
 AliESDv0Cuts.cxx:174
 AliESDv0Cuts.cxx:175
 AliESDv0Cuts.cxx:176
 AliESDv0Cuts.cxx:177
 AliESDv0Cuts.cxx:178
 AliESDv0Cuts.cxx:179
 AliESDv0Cuts.cxx:180
 AliESDv0Cuts.cxx:181
 AliESDv0Cuts.cxx:182
 AliESDv0Cuts.cxx:183
 AliESDv0Cuts.cxx:184
 AliESDv0Cuts.cxx:185
 AliESDv0Cuts.cxx:186
 AliESDv0Cuts.cxx:187
 AliESDv0Cuts.cxx:188
 AliESDv0Cuts.cxx:189
 AliESDv0Cuts.cxx:190
 AliESDv0Cuts.cxx:191
 AliESDv0Cuts.cxx:192
 AliESDv0Cuts.cxx:193
 AliESDv0Cuts.cxx:194
 AliESDv0Cuts.cxx:195
 AliESDv0Cuts.cxx:196
 AliESDv0Cuts.cxx:197
 AliESDv0Cuts.cxx:198
 AliESDv0Cuts.cxx:199
 AliESDv0Cuts.cxx:200
 AliESDv0Cuts.cxx:201
 AliESDv0Cuts.cxx:202
 AliESDv0Cuts.cxx:203
 AliESDv0Cuts.cxx:204
 AliESDv0Cuts.cxx:205
 AliESDv0Cuts.cxx:206
 AliESDv0Cuts.cxx:207
 AliESDv0Cuts.cxx:208
 AliESDv0Cuts.cxx:209
 AliESDv0Cuts.cxx:210
 AliESDv0Cuts.cxx:211
 AliESDv0Cuts.cxx:212
 AliESDv0Cuts.cxx:213
 AliESDv0Cuts.cxx:214
 AliESDv0Cuts.cxx:215
 AliESDv0Cuts.cxx:216
 AliESDv0Cuts.cxx:217
 AliESDv0Cuts.cxx:218
 AliESDv0Cuts.cxx:219
 AliESDv0Cuts.cxx:220
 AliESDv0Cuts.cxx:221
 AliESDv0Cuts.cxx:222
 AliESDv0Cuts.cxx:223
 AliESDv0Cuts.cxx:224
 AliESDv0Cuts.cxx:225
 AliESDv0Cuts.cxx:226
 AliESDv0Cuts.cxx:227
 AliESDv0Cuts.cxx:228
 AliESDv0Cuts.cxx:229
 AliESDv0Cuts.cxx:230
 AliESDv0Cuts.cxx:231
 AliESDv0Cuts.cxx:232
 AliESDv0Cuts.cxx:233
 AliESDv0Cuts.cxx:234
 AliESDv0Cuts.cxx:235
 AliESDv0Cuts.cxx:236
 AliESDv0Cuts.cxx:237
 AliESDv0Cuts.cxx:238
 AliESDv0Cuts.cxx:239
 AliESDv0Cuts.cxx:240
 AliESDv0Cuts.cxx:241
 AliESDv0Cuts.cxx:242
 AliESDv0Cuts.cxx:243
 AliESDv0Cuts.cxx:244
 AliESDv0Cuts.cxx:245
 AliESDv0Cuts.cxx:246
 AliESDv0Cuts.cxx:247
 AliESDv0Cuts.cxx:248
 AliESDv0Cuts.cxx:249
 AliESDv0Cuts.cxx:250
 AliESDv0Cuts.cxx:251
 AliESDv0Cuts.cxx:252
 AliESDv0Cuts.cxx:253
 AliESDv0Cuts.cxx:254
 AliESDv0Cuts.cxx:255
 AliESDv0Cuts.cxx:256
 AliESDv0Cuts.cxx:257
 AliESDv0Cuts.cxx:258
 AliESDv0Cuts.cxx:259
 AliESDv0Cuts.cxx:260
 AliESDv0Cuts.cxx:261
 AliESDv0Cuts.cxx:262
 AliESDv0Cuts.cxx:263
 AliESDv0Cuts.cxx:264
 AliESDv0Cuts.cxx:265
 AliESDv0Cuts.cxx:266
 AliESDv0Cuts.cxx:267
 AliESDv0Cuts.cxx:268
 AliESDv0Cuts.cxx:269
 AliESDv0Cuts.cxx:270
 AliESDv0Cuts.cxx:271
 AliESDv0Cuts.cxx:272
 AliESDv0Cuts.cxx:273
 AliESDv0Cuts.cxx:274
 AliESDv0Cuts.cxx:275
 AliESDv0Cuts.cxx:276
 AliESDv0Cuts.cxx:277
 AliESDv0Cuts.cxx:278
 AliESDv0Cuts.cxx:279
 AliESDv0Cuts.cxx:280
 AliESDv0Cuts.cxx:281
 AliESDv0Cuts.cxx:282
 AliESDv0Cuts.cxx:283
 AliESDv0Cuts.cxx:284
 AliESDv0Cuts.cxx:285
 AliESDv0Cuts.cxx:286
 AliESDv0Cuts.cxx:287
 AliESDv0Cuts.cxx:288
 AliESDv0Cuts.cxx:289
 AliESDv0Cuts.cxx:290
 AliESDv0Cuts.cxx:291
 AliESDv0Cuts.cxx:292
 AliESDv0Cuts.cxx:293
 AliESDv0Cuts.cxx:294
 AliESDv0Cuts.cxx:295
 AliESDv0Cuts.cxx:296
 AliESDv0Cuts.cxx:297
 AliESDv0Cuts.cxx:298
 AliESDv0Cuts.cxx:299
 AliESDv0Cuts.cxx:300
 AliESDv0Cuts.cxx:301
 AliESDv0Cuts.cxx:302
 AliESDv0Cuts.cxx:303
 AliESDv0Cuts.cxx:304
 AliESDv0Cuts.cxx:305
 AliESDv0Cuts.cxx:306
 AliESDv0Cuts.cxx:307
 AliESDv0Cuts.cxx:308
 AliESDv0Cuts.cxx:309
 AliESDv0Cuts.cxx:310
 AliESDv0Cuts.cxx:311
 AliESDv0Cuts.cxx:312
 AliESDv0Cuts.cxx:313
 AliESDv0Cuts.cxx:314
 AliESDv0Cuts.cxx:315
 AliESDv0Cuts.cxx:316
 AliESDv0Cuts.cxx:317
 AliESDv0Cuts.cxx:318
 AliESDv0Cuts.cxx:319
 AliESDv0Cuts.cxx:320
 AliESDv0Cuts.cxx:321
 AliESDv0Cuts.cxx:322
 AliESDv0Cuts.cxx:323
 AliESDv0Cuts.cxx:324
 AliESDv0Cuts.cxx:325
 AliESDv0Cuts.cxx:326
 AliESDv0Cuts.cxx:327
 AliESDv0Cuts.cxx:328
 AliESDv0Cuts.cxx:329
 AliESDv0Cuts.cxx:330
 AliESDv0Cuts.cxx:331
 AliESDv0Cuts.cxx:332
 AliESDv0Cuts.cxx:333
 AliESDv0Cuts.cxx:334
 AliESDv0Cuts.cxx:335
 AliESDv0Cuts.cxx:336
 AliESDv0Cuts.cxx:337
 AliESDv0Cuts.cxx:338
 AliESDv0Cuts.cxx:339
 AliESDv0Cuts.cxx:340
 AliESDv0Cuts.cxx:341
 AliESDv0Cuts.cxx:342
 AliESDv0Cuts.cxx:343
 AliESDv0Cuts.cxx:344
 AliESDv0Cuts.cxx:345
 AliESDv0Cuts.cxx:346
 AliESDv0Cuts.cxx:347
 AliESDv0Cuts.cxx:348
 AliESDv0Cuts.cxx:349
 AliESDv0Cuts.cxx:350
 AliESDv0Cuts.cxx:351
 AliESDv0Cuts.cxx:352
 AliESDv0Cuts.cxx:353
 AliESDv0Cuts.cxx:354
 AliESDv0Cuts.cxx:355
 AliESDv0Cuts.cxx:356
 AliESDv0Cuts.cxx:357
 AliESDv0Cuts.cxx:358
 AliESDv0Cuts.cxx:359
 AliESDv0Cuts.cxx:360
 AliESDv0Cuts.cxx:361
 AliESDv0Cuts.cxx:362
 AliESDv0Cuts.cxx:363
 AliESDv0Cuts.cxx:364
 AliESDv0Cuts.cxx:365
 AliESDv0Cuts.cxx:366
 AliESDv0Cuts.cxx:367
 AliESDv0Cuts.cxx:368
 AliESDv0Cuts.cxx:369
 AliESDv0Cuts.cxx:370
 AliESDv0Cuts.cxx:371
 AliESDv0Cuts.cxx:372
 AliESDv0Cuts.cxx:373
 AliESDv0Cuts.cxx:374
 AliESDv0Cuts.cxx:375
 AliESDv0Cuts.cxx:376
 AliESDv0Cuts.cxx:377
 AliESDv0Cuts.cxx:378
 AliESDv0Cuts.cxx:379
 AliESDv0Cuts.cxx:380
 AliESDv0Cuts.cxx:381
 AliESDv0Cuts.cxx:382
 AliESDv0Cuts.cxx:383
 AliESDv0Cuts.cxx:384
 AliESDv0Cuts.cxx:385
 AliESDv0Cuts.cxx:386
 AliESDv0Cuts.cxx:387
 AliESDv0Cuts.cxx:388
 AliESDv0Cuts.cxx:389
 AliESDv0Cuts.cxx:390
 AliESDv0Cuts.cxx:391
 AliESDv0Cuts.cxx:392
 AliESDv0Cuts.cxx:393
 AliESDv0Cuts.cxx:394
 AliESDv0Cuts.cxx:395
 AliESDv0Cuts.cxx:396
 AliESDv0Cuts.cxx:397
 AliESDv0Cuts.cxx:398
 AliESDv0Cuts.cxx:399
 AliESDv0Cuts.cxx:400
 AliESDv0Cuts.cxx:401
 AliESDv0Cuts.cxx:402
 AliESDv0Cuts.cxx:403
 AliESDv0Cuts.cxx:404
 AliESDv0Cuts.cxx:405
 AliESDv0Cuts.cxx:406
 AliESDv0Cuts.cxx:407
 AliESDv0Cuts.cxx:408
 AliESDv0Cuts.cxx:409
 AliESDv0Cuts.cxx:410
 AliESDv0Cuts.cxx:411
 AliESDv0Cuts.cxx:412
 AliESDv0Cuts.cxx:413
 AliESDv0Cuts.cxx:414
 AliESDv0Cuts.cxx:415
 AliESDv0Cuts.cxx:416
 AliESDv0Cuts.cxx:417
 AliESDv0Cuts.cxx:418
 AliESDv0Cuts.cxx:419
 AliESDv0Cuts.cxx:420
 AliESDv0Cuts.cxx:421
 AliESDv0Cuts.cxx:422
 AliESDv0Cuts.cxx:423
 AliESDv0Cuts.cxx:424
 AliESDv0Cuts.cxx:425
 AliESDv0Cuts.cxx:426
 AliESDv0Cuts.cxx:427
 AliESDv0Cuts.cxx:428
 AliESDv0Cuts.cxx:429
 AliESDv0Cuts.cxx:430
 AliESDv0Cuts.cxx:431
 AliESDv0Cuts.cxx:432
 AliESDv0Cuts.cxx:433
 AliESDv0Cuts.cxx:434
 AliESDv0Cuts.cxx:435
 AliESDv0Cuts.cxx:436
 AliESDv0Cuts.cxx:437
 AliESDv0Cuts.cxx:438
 AliESDv0Cuts.cxx:439
 AliESDv0Cuts.cxx:440
 AliESDv0Cuts.cxx:441
 AliESDv0Cuts.cxx:442
 AliESDv0Cuts.cxx:443
 AliESDv0Cuts.cxx:444
 AliESDv0Cuts.cxx:445
 AliESDv0Cuts.cxx:446
 AliESDv0Cuts.cxx:447
 AliESDv0Cuts.cxx:448
 AliESDv0Cuts.cxx:449
 AliESDv0Cuts.cxx:450
 AliESDv0Cuts.cxx:451
 AliESDv0Cuts.cxx:452
 AliESDv0Cuts.cxx:453
 AliESDv0Cuts.cxx:454
 AliESDv0Cuts.cxx:455
 AliESDv0Cuts.cxx:456
 AliESDv0Cuts.cxx:457
 AliESDv0Cuts.cxx:458
 AliESDv0Cuts.cxx:459
 AliESDv0Cuts.cxx:460
 AliESDv0Cuts.cxx:461
 AliESDv0Cuts.cxx:462
 AliESDv0Cuts.cxx:463
 AliESDv0Cuts.cxx:464
 AliESDv0Cuts.cxx:465
 AliESDv0Cuts.cxx:466
 AliESDv0Cuts.cxx:467
 AliESDv0Cuts.cxx:468
 AliESDv0Cuts.cxx:469
 AliESDv0Cuts.cxx:470
 AliESDv0Cuts.cxx:471
 AliESDv0Cuts.cxx:472
 AliESDv0Cuts.cxx:473
 AliESDv0Cuts.cxx:474
 AliESDv0Cuts.cxx:475
 AliESDv0Cuts.cxx:476
 AliESDv0Cuts.cxx:477
 AliESDv0Cuts.cxx:478
 AliESDv0Cuts.cxx:479
 AliESDv0Cuts.cxx:480
 AliESDv0Cuts.cxx:481
 AliESDv0Cuts.cxx:482
 AliESDv0Cuts.cxx:483
 AliESDv0Cuts.cxx:484
 AliESDv0Cuts.cxx:485
 AliESDv0Cuts.cxx:486
 AliESDv0Cuts.cxx:487
 AliESDv0Cuts.cxx:488
 AliESDv0Cuts.cxx:489
 AliESDv0Cuts.cxx:490
 AliESDv0Cuts.cxx:491
 AliESDv0Cuts.cxx:492
 AliESDv0Cuts.cxx:493
 AliESDv0Cuts.cxx:494
 AliESDv0Cuts.cxx:495
 AliESDv0Cuts.cxx:496
 AliESDv0Cuts.cxx:497
 AliESDv0Cuts.cxx:498
 AliESDv0Cuts.cxx:499
 AliESDv0Cuts.cxx:500
 AliESDv0Cuts.cxx:501
 AliESDv0Cuts.cxx:502
 AliESDv0Cuts.cxx:503
 AliESDv0Cuts.cxx:504
 AliESDv0Cuts.cxx:505
 AliESDv0Cuts.cxx:506
 AliESDv0Cuts.cxx:507
 AliESDv0Cuts.cxx:508
 AliESDv0Cuts.cxx:509
 AliESDv0Cuts.cxx:510
 AliESDv0Cuts.cxx:511
 AliESDv0Cuts.cxx:512
 AliESDv0Cuts.cxx:513
 AliESDv0Cuts.cxx:514
 AliESDv0Cuts.cxx:515
 AliESDv0Cuts.cxx:516
 AliESDv0Cuts.cxx:517
 AliESDv0Cuts.cxx:518
 AliESDv0Cuts.cxx:519
 AliESDv0Cuts.cxx:520
 AliESDv0Cuts.cxx:521
 AliESDv0Cuts.cxx:522
 AliESDv0Cuts.cxx:523
 AliESDv0Cuts.cxx:524
 AliESDv0Cuts.cxx:525
 AliESDv0Cuts.cxx:526
 AliESDv0Cuts.cxx:527
 AliESDv0Cuts.cxx:528
 AliESDv0Cuts.cxx:529
 AliESDv0Cuts.cxx:530
 AliESDv0Cuts.cxx:531
 AliESDv0Cuts.cxx:532
 AliESDv0Cuts.cxx:533
 AliESDv0Cuts.cxx:534
 AliESDv0Cuts.cxx:535
 AliESDv0Cuts.cxx:536
 AliESDv0Cuts.cxx:537
 AliESDv0Cuts.cxx:538
 AliESDv0Cuts.cxx:539
 AliESDv0Cuts.cxx:540
 AliESDv0Cuts.cxx:541
 AliESDv0Cuts.cxx:542
 AliESDv0Cuts.cxx:543
 AliESDv0Cuts.cxx:544
 AliESDv0Cuts.cxx:545
 AliESDv0Cuts.cxx:546
 AliESDv0Cuts.cxx:547
 AliESDv0Cuts.cxx:548
 AliESDv0Cuts.cxx:549
 AliESDv0Cuts.cxx:550
 AliESDv0Cuts.cxx:551
 AliESDv0Cuts.cxx:552
 AliESDv0Cuts.cxx:553
 AliESDv0Cuts.cxx:554
 AliESDv0Cuts.cxx:555
 AliESDv0Cuts.cxx:556
 AliESDv0Cuts.cxx:557
 AliESDv0Cuts.cxx:558
 AliESDv0Cuts.cxx:559
 AliESDv0Cuts.cxx:560
 AliESDv0Cuts.cxx:561
 AliESDv0Cuts.cxx:562
 AliESDv0Cuts.cxx:563
 AliESDv0Cuts.cxx:564
 AliESDv0Cuts.cxx:565
 AliESDv0Cuts.cxx:566
 AliESDv0Cuts.cxx:567
 AliESDv0Cuts.cxx:568
 AliESDv0Cuts.cxx:569
 AliESDv0Cuts.cxx:570
 AliESDv0Cuts.cxx:571
 AliESDv0Cuts.cxx:572
 AliESDv0Cuts.cxx:573
 AliESDv0Cuts.cxx:574
 AliESDv0Cuts.cxx:575
 AliESDv0Cuts.cxx:576
 AliESDv0Cuts.cxx:577
 AliESDv0Cuts.cxx:578
 AliESDv0Cuts.cxx:579
 AliESDv0Cuts.cxx:580
 AliESDv0Cuts.cxx:581
 AliESDv0Cuts.cxx:582
 AliESDv0Cuts.cxx:583
 AliESDv0Cuts.cxx:584
 AliESDv0Cuts.cxx:585
 AliESDv0Cuts.cxx:586
 AliESDv0Cuts.cxx:587
 AliESDv0Cuts.cxx:588
 AliESDv0Cuts.cxx:589
 AliESDv0Cuts.cxx:590
 AliESDv0Cuts.cxx:591
 AliESDv0Cuts.cxx:592
 AliESDv0Cuts.cxx:593
 AliESDv0Cuts.cxx:594
 AliESDv0Cuts.cxx:595
 AliESDv0Cuts.cxx:596
 AliESDv0Cuts.cxx:597
 AliESDv0Cuts.cxx:598
 AliESDv0Cuts.cxx:599
 AliESDv0Cuts.cxx:600
 AliESDv0Cuts.cxx:601
 AliESDv0Cuts.cxx:602
 AliESDv0Cuts.cxx:603
 AliESDv0Cuts.cxx:604
 AliESDv0Cuts.cxx:605
 AliESDv0Cuts.cxx:606
 AliESDv0Cuts.cxx:607
 AliESDv0Cuts.cxx:608
 AliESDv0Cuts.cxx:609
 AliESDv0Cuts.cxx:610
 AliESDv0Cuts.cxx:611
 AliESDv0Cuts.cxx:612
 AliESDv0Cuts.cxx:613
 AliESDv0Cuts.cxx:614
 AliESDv0Cuts.cxx:615
 AliESDv0Cuts.cxx:616
 AliESDv0Cuts.cxx:617
 AliESDv0Cuts.cxx:618
 AliESDv0Cuts.cxx:619
 AliESDv0Cuts.cxx:620
 AliESDv0Cuts.cxx:621
 AliESDv0Cuts.cxx:622
 AliESDv0Cuts.cxx:623
 AliESDv0Cuts.cxx:624
 AliESDv0Cuts.cxx:625
 AliESDv0Cuts.cxx:626
 AliESDv0Cuts.cxx:627
 AliESDv0Cuts.cxx:628
 AliESDv0Cuts.cxx:629
 AliESDv0Cuts.cxx:630
 AliESDv0Cuts.cxx:631
 AliESDv0Cuts.cxx:632
 AliESDv0Cuts.cxx:633
 AliESDv0Cuts.cxx:634
 AliESDv0Cuts.cxx:635
 AliESDv0Cuts.cxx:636
 AliESDv0Cuts.cxx:637
 AliESDv0Cuts.cxx:638
 AliESDv0Cuts.cxx:639
 AliESDv0Cuts.cxx:640
 AliESDv0Cuts.cxx:641
 AliESDv0Cuts.cxx:642
 AliESDv0Cuts.cxx:643
 AliESDv0Cuts.cxx:644
 AliESDv0Cuts.cxx:645
 AliESDv0Cuts.cxx:646
 AliESDv0Cuts.cxx:647
 AliESDv0Cuts.cxx:648
 AliESDv0Cuts.cxx:649
 AliESDv0Cuts.cxx:650
 AliESDv0Cuts.cxx:651
 AliESDv0Cuts.cxx:652
 AliESDv0Cuts.cxx:653
 AliESDv0Cuts.cxx:654
 AliESDv0Cuts.cxx:655
 AliESDv0Cuts.cxx:656
 AliESDv0Cuts.cxx:657
 AliESDv0Cuts.cxx:658
 AliESDv0Cuts.cxx:659
 AliESDv0Cuts.cxx:660
 AliESDv0Cuts.cxx:661
 AliESDv0Cuts.cxx:662
 AliESDv0Cuts.cxx:663
 AliESDv0Cuts.cxx:664
 AliESDv0Cuts.cxx:665
 AliESDv0Cuts.cxx:666
 AliESDv0Cuts.cxx:667
 AliESDv0Cuts.cxx:668
 AliESDv0Cuts.cxx:669
 AliESDv0Cuts.cxx:670
 AliESDv0Cuts.cxx:671
 AliESDv0Cuts.cxx:672
 AliESDv0Cuts.cxx:673
 AliESDv0Cuts.cxx:674
 AliESDv0Cuts.cxx:675
 AliESDv0Cuts.cxx:676
 AliESDv0Cuts.cxx:677
 AliESDv0Cuts.cxx:678
 AliESDv0Cuts.cxx:679
 AliESDv0Cuts.cxx:680
 AliESDv0Cuts.cxx:681
 AliESDv0Cuts.cxx:682
 AliESDv0Cuts.cxx:683
 AliESDv0Cuts.cxx:684
 AliESDv0Cuts.cxx:685
 AliESDv0Cuts.cxx:686
 AliESDv0Cuts.cxx:687
 AliESDv0Cuts.cxx:688
 AliESDv0Cuts.cxx:689
 AliESDv0Cuts.cxx:690
 AliESDv0Cuts.cxx:691
 AliESDv0Cuts.cxx:692
 AliESDv0Cuts.cxx:693
 AliESDv0Cuts.cxx:694
 AliESDv0Cuts.cxx:695
 AliESDv0Cuts.cxx:696
 AliESDv0Cuts.cxx:697
 AliESDv0Cuts.cxx:698
 AliESDv0Cuts.cxx:699
 AliESDv0Cuts.cxx:700
 AliESDv0Cuts.cxx:701
 AliESDv0Cuts.cxx:702
 AliESDv0Cuts.cxx:703
 AliESDv0Cuts.cxx:704
 AliESDv0Cuts.cxx:705
 AliESDv0Cuts.cxx:706
 AliESDv0Cuts.cxx:707
 AliESDv0Cuts.cxx:708
 AliESDv0Cuts.cxx:709
 AliESDv0Cuts.cxx:710
 AliESDv0Cuts.cxx:711
 AliESDv0Cuts.cxx:712
 AliESDv0Cuts.cxx:713
 AliESDv0Cuts.cxx:714
 AliESDv0Cuts.cxx:715
 AliESDv0Cuts.cxx:716
 AliESDv0Cuts.cxx:717
 AliESDv0Cuts.cxx:718
 AliESDv0Cuts.cxx:719
 AliESDv0Cuts.cxx:720
 AliESDv0Cuts.cxx:721
 AliESDv0Cuts.cxx:722
 AliESDv0Cuts.cxx:723
 AliESDv0Cuts.cxx:724
 AliESDv0Cuts.cxx:725
 AliESDv0Cuts.cxx:726
 AliESDv0Cuts.cxx:727
 AliESDv0Cuts.cxx:728
 AliESDv0Cuts.cxx:729
 AliESDv0Cuts.cxx:730
 AliESDv0Cuts.cxx:731
 AliESDv0Cuts.cxx:732
 AliESDv0Cuts.cxx:733
 AliESDv0Cuts.cxx:734
 AliESDv0Cuts.cxx:735
 AliESDv0Cuts.cxx:736
 AliESDv0Cuts.cxx:737
 AliESDv0Cuts.cxx:738
 AliESDv0Cuts.cxx:739
 AliESDv0Cuts.cxx:740
 AliESDv0Cuts.cxx:741
 AliESDv0Cuts.cxx:742
 AliESDv0Cuts.cxx:743
 AliESDv0Cuts.cxx:744
 AliESDv0Cuts.cxx:745
 AliESDv0Cuts.cxx:746
 AliESDv0Cuts.cxx:747
 AliESDv0Cuts.cxx:748
 AliESDv0Cuts.cxx:749
 AliESDv0Cuts.cxx:750
 AliESDv0Cuts.cxx:751
 AliESDv0Cuts.cxx:752
 AliESDv0Cuts.cxx:753
 AliESDv0Cuts.cxx:754
 AliESDv0Cuts.cxx:755
 AliESDv0Cuts.cxx:756
 AliESDv0Cuts.cxx:757
 AliESDv0Cuts.cxx:758
 AliESDv0Cuts.cxx:759
 AliESDv0Cuts.cxx:760
 AliESDv0Cuts.cxx:761
 AliESDv0Cuts.cxx:762
 AliESDv0Cuts.cxx:763
 AliESDv0Cuts.cxx:764
 AliESDv0Cuts.cxx:765
 AliESDv0Cuts.cxx:766
 AliESDv0Cuts.cxx:767
 AliESDv0Cuts.cxx:768
 AliESDv0Cuts.cxx:769
 AliESDv0Cuts.cxx:770
 AliESDv0Cuts.cxx:771
 AliESDv0Cuts.cxx:772
 AliESDv0Cuts.cxx:773
 AliESDv0Cuts.cxx:774
 AliESDv0Cuts.cxx:775
 AliESDv0Cuts.cxx:776
 AliESDv0Cuts.cxx:777
 AliESDv0Cuts.cxx:778
 AliESDv0Cuts.cxx:779
 AliESDv0Cuts.cxx:780
 AliESDv0Cuts.cxx:781
 AliESDv0Cuts.cxx:782
 AliESDv0Cuts.cxx:783
 AliESDv0Cuts.cxx:784
 AliESDv0Cuts.cxx:785
 AliESDv0Cuts.cxx:786
 AliESDv0Cuts.cxx:787
 AliESDv0Cuts.cxx:788
 AliESDv0Cuts.cxx:789
 AliESDv0Cuts.cxx:790
 AliESDv0Cuts.cxx:791
 AliESDv0Cuts.cxx:792
 AliESDv0Cuts.cxx:793
 AliESDv0Cuts.cxx:794
 AliESDv0Cuts.cxx:795
 AliESDv0Cuts.cxx:796
 AliESDv0Cuts.cxx:797
 AliESDv0Cuts.cxx:798
 AliESDv0Cuts.cxx:799
 AliESDv0Cuts.cxx:800
 AliESDv0Cuts.cxx:801
 AliESDv0Cuts.cxx:802
 AliESDv0Cuts.cxx:803
 AliESDv0Cuts.cxx:804
 AliESDv0Cuts.cxx:805
 AliESDv0Cuts.cxx:806
 AliESDv0Cuts.cxx:807
 AliESDv0Cuts.cxx:808
 AliESDv0Cuts.cxx:809
 AliESDv0Cuts.cxx:810
 AliESDv0Cuts.cxx:811
 AliESDv0Cuts.cxx:812
 AliESDv0Cuts.cxx:813
 AliESDv0Cuts.cxx:814
 AliESDv0Cuts.cxx:815
 AliESDv0Cuts.cxx:816
 AliESDv0Cuts.cxx:817
 AliESDv0Cuts.cxx:818
 AliESDv0Cuts.cxx:819
 AliESDv0Cuts.cxx:820
 AliESDv0Cuts.cxx:821
 AliESDv0Cuts.cxx:822
 AliESDv0Cuts.cxx:823
 AliESDv0Cuts.cxx:824
 AliESDv0Cuts.cxx:825
 AliESDv0Cuts.cxx:826
 AliESDv0Cuts.cxx:827
 AliESDv0Cuts.cxx:828
 AliESDv0Cuts.cxx:829
 AliESDv0Cuts.cxx:830
 AliESDv0Cuts.cxx:831
 AliESDv0Cuts.cxx:832
 AliESDv0Cuts.cxx:833
 AliESDv0Cuts.cxx:834
 AliESDv0Cuts.cxx:835
 AliESDv0Cuts.cxx:836
 AliESDv0Cuts.cxx:837
 AliESDv0Cuts.cxx:838
 AliESDv0Cuts.cxx:839
 AliESDv0Cuts.cxx:840
 AliESDv0Cuts.cxx:841
 AliESDv0Cuts.cxx:842
 AliESDv0Cuts.cxx:843
 AliESDv0Cuts.cxx:844