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.                  *
 **************************************************************************/

//_________________________________________________________________________
// Class containing methods for the isolation cut. 
// An AOD candidate (AliAODPWG4ParticleCorrelation type)
// is passed. Look in a cone around the candidate and study
// the hadronic activity inside to decide if the candidate is isolated
//
//
//*-- Author: Gustavo Conesa (LNF-INFN) 

//-Yaxian Mao (add the possibility for different IC method with different pt range, 01/10/2010)
//-Yaxian Mao (check the candidate particle is the leading particle or not at the same hemishere)

//////////////////////////////////////////////////////////////////////////////
  
  
// --- ROOT system --- 
#include <TObjArray.h>

// --- AliRoot system --- 
#include "AliIsolationCut.h" 
#include "AliAODPWG4ParticleCorrelation.h"
#include "AliEMCALGeometry.h"
#include "AliEMCALGeoParams.h"
#include "AliCalorimeterUtils.h"
#include "AliAODTrack.h"
#include "AliVCluster.h"
#include "AliCaloTrackReader.h"
#include "AliMixedEvent.h"
#include "AliCaloPID.h"
#include "AliLog.h"

ClassImp(AliIsolationCut)
  
//____________________________________
AliIsolationCut::AliIsolationCut() : 
TObject(),
fConeSize(0.),
fPtThreshold(0.),
fPtThresholdMax(10000.), 
fSumPtThreshold(0.),
fSumPtThresholdMax(10000.),
fPtFraction(0.),
fICMethod(0),
fPartInCone(0),
fDebug(0),
fFracIsThresh(1),
fMomentum(),
fTrackVector()
{
  //default ctor
  
  //Initialize parameters
  InitParameters();
  
}

//_________________________________________________________________________________________________________________________________
void AliIsolationCut::CalculateUEBandClusterNormalization(AliCaloTrackReader * /*reader*/, Float_t   etaC, Float_t /*phiC*/,
                                                           Float_t   phiUEptsumCluster,     Float_t   etaUEptsumCluster,
                                                           Float_t & phiUEptsumClusterNorm, Float_t & etaUEptsumClusterNorm,
                                                           Float_t & excessFracEta,         Float_t & excessFracPhi         ) const
{
  // Normalize cluster background band
  
  Float_t coneA     = fConeSize*fConeSize*TMath::Pi(); // A = pi R^2, isolation cone area
  
  //Careful here if EMCal limits changed .. 2010 (4 SM) to 2011-12 (10 SM), for the moment consider 100 deg in phi
  Float_t emcEtaSize = 0.7*2; // TO FIX
  Float_t emcPhiSize = TMath::DegToRad()*100.; // TO FIX
  
  /* //Catherine code
   if(((((2*fConeSize*emcPhiSize)-coneA))*phiBandBadCellsCoeff)!=0)phiUEptsumClusterNorm = phiUEptsumCluster*(coneA*coneBadCellsCoeff / (((2*fConeSize*emcPhiSize)-coneA))*phiBandBadCellsCoeff); // pi * R^2 / (2 R * 2 100 deg) -  trigger cone
   if(((((2*(fConeSize-excess)*emcPhiSize)-(coneA-excessFracEta))*etaBandBadCellsCoeff))!=0)phiUEptsumClusterNorm = phiUEptsumCluster*(coneA *coneBadCellsCoeff/ (((2*(fConeSize-excess)*emcPhiSize)-(coneA/excessFracEta))*etaBandBadCellsCoeff));
   if(((2*(fConeSize-excess)*emcEtaSize)-(coneA-excessFracPhi))*phiBandBadCellsCoeff!=0) etaUEptsumClusterNorm = etaUEptsumCluster*(coneA*coneBadCellsCoeff / (((2*(fConeSize-excess)*emcEtaSize)-(coneA/excessFracPhi))*phiBandBadCellsCoeff));
   */
  
  if((2*fConeSize*emcPhiSize-coneA)!=0) phiUEptsumClusterNorm = phiUEptsumCluster*(coneA / (((2*fConeSize*emcPhiSize)-coneA))); // pi * R^2 / (2 R * 2 100 deg) -  trigger cone
  if((2*fConeSize*emcEtaSize-coneA)!=0) etaUEptsumClusterNorm = etaUEptsumCluster*(coneA / (((2*fConeSize*emcEtaSize)-coneA))); // pi * R^2 / (2 R * 2*0.7)  -  trigger cone
  
  //out of eta acceptance
  excessFracEta = 1;
  excessFracPhi = 1;

  if(TMath::Abs(etaC)+fConeSize > emcEtaSize/2.)
  {
    Float_t excess = TMath::Abs(etaC) + fConeSize - emcEtaSize/2.;
    excessFracEta  = CalculateExcessAreaFraction(excess);
    
    if ( excessFracEta != 0) coneA /=  excessFracEta;
    
    //UE band is also out of acceptance, need to estimate corrected area
    if(((2*fConeSize-excess)*emcPhiSize-coneA) != 0 ) phiUEptsumClusterNorm = phiUEptsumCluster*(coneA / ((((2*fConeSize-excess)*emcPhiSize)-coneA)));
    if(( 2*fConeSize        *emcEtaSize-coneA) != 0 ) etaUEptsumClusterNorm = etaUEptsumCluster*(coneA / ((( 2*fConeSize        *emcEtaSize)-coneA)));
  }
  
}

//________________________________________________________________________________________________________________________________
void AliIsolationCut::CalculateUEBandTrackNormalization  (AliCaloTrackReader * reader,    Float_t   etaC, Float_t /*phiC*/,
                                                          Float_t   phiUEptsumTrack,      Float_t   etaUEptsumTrack,
                                                          Float_t & phiUEptsumTrackNorm,  Float_t & etaUEptsumTrackNorm,
                                                          Float_t & excessFracEta,        Float_t & excessFracPhi          ) const
{
  // Normalize track background band
  
  Float_t coneA     = fConeSize*fConeSize*TMath::Pi(); // A = pi R^2, isolation cone area
  
  // Get the cut used for the TPC tracks in the reader, +-0.8, +-0.9 ...
  // Only valid in simple fidutial cut case and if the cut is applied, careful!
  Float_t tpcEtaSize = reader->GetFiducialCut()->GetCTSFidCutMaxEtaArray()->At(0) -
  reader->GetFiducialCut()->GetCTSFidCutMinEtaArray()->At(0) ;
  Float_t tpcPhiSize = TMath::TwoPi();
  
  /*//Catherine code
   //phiUEptsumTrackNorm = phiUEptsumTrack*(coneA*coneBadCellsCoeff / (((2*fConeSize*tpcPhiSize)-coneA))*phiBandBadCellsCoeff); // pi * R^2 / (2 R * 2 pi) -  trigger cone
   //etaUEptsumTrackNorm = etaUEptsumTrack*(coneA*coneBadCellsCoeff / (((2*fConeSize*tpcEtaSize)-coneA))*etaBandBadCellsCoeff); // pi * R^2 / (2 R * 1.6)  -  trigger cone
   if((2*fConeSize*tpcPhiSize-coneA)!=0)phiUEptsumTrackNorm = phiUEptsumTrack*(coneA / (((2*fConeSize*tpcPhiSize)-coneA))); // pi * R^2 / (2 R * 2 pi) -  trigger cone
   if((2*fConeSize*tpcEtaSize-coneA)!=0)etaUEptsumTrackNorm = etaUEptsumTrack*(coneA / (((2*fConeSize*tpcEtaSize)-coneA))); // pi * R^2 / (2 R * 1.6)  -  trigger cone
   if((2*(fConeSize-excess)*tpcPhiSize)-(coneA-excessFracEta)!=0)phiUEptsumTrackNorm = phiUEptsumTrack*(coneA / (((2*(fConeSize-excess)*tpcPhiSize)-(coneA/excessFracEta))));
   */ //end Catherine code
  
  //correct out of eta acceptance
  excessFracEta = 1;
  excessFracPhi = 1;

  if((2*fConeSize*tpcPhiSize-coneA)!=0) phiUEptsumTrackNorm = phiUEptsumTrack*(coneA / (((2*fConeSize*tpcPhiSize)-coneA))); // pi * R^2 / (2 R * 2 pi) -  trigger cone
  if((2*fConeSize*tpcEtaSize-coneA)!=0) etaUEptsumTrackNorm = etaUEptsumTrack*(coneA / (((2*fConeSize*tpcEtaSize)-coneA))); // pi * R^2 / (2 R * 1.6)  -  trigger cone
  
  if(TMath::Abs(etaC)+fConeSize > tpcEtaSize/2.)
  {
    Float_t excess = TMath::Abs(etaC) + fConeSize - tpcEtaSize/2.;
    excessFracEta  = CalculateExcessAreaFraction(excess);
    if (excessFracEta != 0) coneA /=  excessFracEta;
    
    //UE band is also out of acceptance, need to estimate corrected area
    if(((2*fConeSize-excess)*tpcPhiSize - coneA) !=0 ) phiUEptsumTrackNorm = phiUEptsumTrack*(coneA / ((((2*fConeSize-excess)*tpcPhiSize)-coneA)));
    if(( 2*fConeSize        *tpcEtaSize - coneA) !=0 ) etaUEptsumTrackNorm = etaUEptsumTrack*(coneA / ((( 2*fConeSize        *tpcEtaSize)-coneA)));
  }
  
}

//________________________________________________________________________
Float_t AliIsolationCut::CalculateExcessAreaFraction(Float_t excess) const
{
  // Area of a circunference segment segment 1/2 R^2 (angle-sin(angle)), angle = 2*ACos((R-excess)/R)
  
  
  Float_t angle   = 2*TMath::ACos( (fConeSize-excess) / fConeSize );
  
  Float_t coneA   = fConeSize*fConeSize*TMath::Pi(); // A = pi R^2, isolation cone area
  
  Float_t excessA = fConeSize*fConeSize / 2 * (angle-TMath::Sin(angle));
  
  if(coneA > excessA) return coneA / (coneA-excessA);
  else
  {
    AliWarning(Form("Please Check : Excess Track %2.3f, coneA %2.2f,  excessA %2.2f, angle %2.2f,factor %2.2f",
                    excess,coneA, excessA, angle*TMath::RadToDeg(), coneA / (coneA-excessA)));
    return  1;
  }
}

//_______________________________________________________________________________________
Float_t AliIsolationCut::GetCellDensity(AliAODPWG4ParticleCorrelation * pCandidate,
                                        AliCaloTrackReader * reader) const
{
  // Get good cell density (number of active cells over all cells in cone)
  
  Double_t coneCells    = 0.; //number of cells in cone with radius fConeSize
  Double_t coneCellsBad = 0.; //number of bad cells in cone with radius fConeSize
  Double_t cellDensity  = 1.;

  Float_t phiC  = pCandidate->Phi() ;
  if(phiC<0) phiC+=TMath::TwoPi();
  Float_t etaC  = pCandidate->Eta() ;
  
  if(pCandidate->GetDetectorTag() == AliCaloTrackReader::kEMCAL)
  {
    AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
    AliCalorimeterUtils *cu = reader->GetCaloUtils();
    
    Int_t absId = -999;
    if (eGeom->GetAbsCellIdFromEtaPhi(etaC,phiC,absId))
    {
      //Get absolute (col,row) of candidate
      Int_t iEta=-1, iPhi=-1, iRCU = -1;      
      Int_t nSupMod = cu->GetModuleNumberCellIndexes(absId, pCandidate->GetDetectorTag(), iEta, iPhi, iRCU);
      
      Int_t colC = iEta;
      if (nSupMod % 2) colC =  AliEMCALGeoParams::fgkEMCALCols + iEta ;
      Int_t rowC = iPhi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
      
      Int_t sqrSize = int(fConeSize/0.0143) ; // Size of cell in radians
      //loop on cells in a square of side fConeSize to check cells in cone    
      for(Int_t icol = colC-sqrSize; icol < colC+sqrSize;icol++)
      {
        for(Int_t irow = rowC-sqrSize; irow < rowC+sqrSize; irow++)
        {
          if (Radius(colC, rowC, icol, irow) < sqrSize)
          {
            coneCells += 1.;
            
            Int_t cellSM  = -999;
            Int_t cellEta = -999;
            Int_t cellPhi = -999;
            if(icol > AliEMCALGeoParams::fgkEMCALCols-1) 
            {
              cellSM = 0+int(irow/AliEMCALGeoParams::fgkEMCALRows)*2;
              cellEta = icol-AliEMCALGeoParams::fgkEMCALCols;
              cellPhi = irow-AliEMCALGeoParams::fgkEMCALRows*int(cellSM/2);
            }
            if(icol < AliEMCALGeoParams::fgkEMCALCols) 
            {
              cellSM = 1+int(irow/AliEMCALGeoParams::fgkEMCALRows)*2;
              cellEta = icol;
              cellPhi = irow-AliEMCALGeoParams::fgkEMCALRows*int(cellSM/2);
            }
            
            //Count as bad "cells" out of EMCAL acceptance
            if(icol < 0 || icol > AliEMCALGeoParams::fgkEMCALCols*2 || 
               irow < 0 || irow > AliEMCALGeoParams::fgkEMCALRows*16./3) //5*nRows+1/3*nRows
            {
              coneCellsBad += 1.;
            }
            //Count as bad "cells" marked as bad in the DataBase
            else if (cu->GetEMCALChannelStatus(cellSM,cellEta,cellPhi)==1) 
            {
              coneCellsBad += 1. ;
            }
          }
        }
      }//end of cells loop
    }
    else AliWarning("Cluster with bad (eta,phi) in EMCal for energy density calculation");
    
    if (coneCells > 0.) 
    {
      cellDensity = (coneCells-coneCellsBad)/coneCells;
      //printf("Energy density = %f\n", cellDensity);
    }
  }

  return cellDensity;
  
}

//__________________________________________________________________________________
void AliIsolationCut::GetCoeffNormBadCell(AliAODPWG4ParticleCorrelation * pCandidate,
                                          AliCaloTrackReader * reader,
                                          Float_t &  coneBadCellsCoeff,
                                          Float_t &  etaBandBadCellsCoeff,
                                          Float_t & phiBandBadCellsCoeff)
{
  // Get good cell density (number of active cells over all cells in cone)
  
  Double_t coneCells    = 0.; //number of cells in cone with radius fConeSize
  Double_t phiBandCells = 0.; //number of cells in band phi
  Double_t etaBandCells = 0.; //number of cells in band eta
  
  Float_t phiC  = pCandidate->Phi() ;
  if(phiC<0) phiC+=TMath::TwoPi();
  Float_t etaC  = pCandidate->Eta() ;
  
  if(pCandidate->GetDetectorTag() == AliCaloTrackReader::kEMCAL)
  {
    AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
    AliCalorimeterUtils *cu = reader->GetCaloUtils();
    
    Int_t absId = -999;
    if (eGeom->GetAbsCellIdFromEtaPhi(etaC,phiC,absId))
    {
      //Get absolute (col,row) of candidate
      Int_t iEta=-1, iPhi=-1, iRCU = -1;
      Int_t nSupMod = cu->GetModuleNumberCellIndexes(absId, pCandidate->GetDetectorTag(),
                                                     iEta, iPhi, iRCU);
      
      Int_t colC = iEta;
      if (nSupMod % 2) colC =  AliEMCALGeoParams::fgkEMCALCols + iEta ;
      Int_t rowC = iPhi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
      
      Int_t sqrSize = int(fConeSize/0.0143) ; // Size of cell in radians
      for(Int_t icol = 0; icol < 2*AliEMCALGeoParams::fgkEMCALCols-1;icol++)
      {
        for(Int_t irow = 0; irow < 5*AliEMCALGeoParams::fgkEMCALRows -1; irow++)
        {
          //loop on cells in a square of side fConeSize to check cells in cone
          if     ( Radius(colC, rowC, icol, irow) < sqrSize ) { coneCells    += 1.; }
          else if( icol>colC-sqrSize  &&  icol<colC+sqrSize ) { phiBandCells += 1 ; }
          else if( irow>rowC-sqrSize  &&  irow<rowC+sqrSize ) { etaBandCells += 1 ; }
          
          Int_t cellSM  = -999;
          Int_t cellEta = -999;
          Int_t cellPhi = -999;
          if(icol > AliEMCALGeoParams::fgkEMCALCols-1)
          {
            cellSM = 0+int(irow/AliEMCALGeoParams::fgkEMCALRows)*2;
            cellEta = icol-AliEMCALGeoParams::fgkEMCALCols;
            cellPhi = irow-AliEMCALGeoParams::fgkEMCALRows*int(cellSM/2);
          }
          if(icol < AliEMCALGeoParams::fgkEMCALCols)
          {
            cellSM = 1+int(irow/AliEMCALGeoParams::fgkEMCALRows)*2;
            cellEta = icol;
            cellPhi = irow-AliEMCALGeoParams::fgkEMCALRows*int(cellSM/2);
          }
          
          if( (icol < 0 || icol > AliEMCALGeoParams::fgkEMCALCols*2-1 ||
               irow < 0 || irow > AliEMCALGeoParams::fgkEMCALRows*5 - 1) //5*nRows+1/3*nRows //Count as bad "cells" out of EMCAL acceptance
             || (cu->GetEMCALChannelStatus(cellSM,cellEta,cellPhi)==1))  //Count as bad "cells" marked as bad in the DataBase
          {
            if     ( Radius(colC, rowC, icol, irow) < sqrSize ) coneBadCellsCoeff    += 1.;
            else if( icol>colC-sqrSize  &&  icol<colC+sqrSize ) phiBandBadCellsCoeff += 1 ;
	          else if( irow>rowC-sqrSize  &&  irow<rowC+sqrSize ) etaBandBadCellsCoeff += 1 ;
          }
        }
      }//end of cells loop
    }
    else AliWarning("Cluster with bad (eta,phi) in EMCal for energy density coeff calculation");
    
    if (coneCells > 0.)
    {
      //   printf("Energy density coneBadCellsCoeff= %.2f coneCells%.2f\n", coneBadCellsCoeff,coneCells);
      coneBadCellsCoeff = (coneCells-coneBadCellsCoeff)/coneCells;
      //  printf("coneBadCellsCoeff= %.2f\n", coneBadCellsCoeff);
    }
    if (phiBandCells > 0.)
    {
      // printf("Energy density phiBandBadCellsCoeff = %.2f phiBandCells%.2f\n", phiBandBadCellsCoeff,phiBandCells);
      phiBandBadCellsCoeff = (phiBandCells-phiBandBadCellsCoeff)/phiBandCells;
      // printf("phiBandBadCellsCoeff = %.2f\n", phiBandBadCellsCoeff);
    }
    if (etaBandCells > 0.)
    {
      //printf("Energy density etaBandBadCellsCoeff = %.2f etaBandCells%.2f\n", etaBandBadCellsCoeff,etaBandCells);
      etaBandBadCellsCoeff = (etaBandCells-etaBandBadCellsCoeff)/etaBandCells;
      // printf("etaBandBadCellsCoeff = %.2f\n",etaBandBadCellsCoeff);
    }
    
  }
  
}

//____________________________________________
TString AliIsolationCut::GetICParametersList()
{
  //Put data member values in string to keep in output container
  
  TString parList ; //this will be list of parameters used for this analysis.
  const Int_t buffersize = 255;
  char onePar[buffersize] ;
  
  snprintf(onePar,buffersize,"--- AliIsolationCut ---\n") ;
  parList+=onePar ;	
  snprintf(onePar,buffersize,"fConeSize: (isolation cone size) %1.2f\n",fConeSize) ;
  parList+=onePar ;
  snprintf(onePar,buffersize,"fPtThreshold >%2.2f;<%2.2f (isolation pt threshold) \n",fPtThreshold,fPtThresholdMax) ;
  parList+=onePar ;
  snprintf(onePar,buffersize,"fSumPtThreshold >%2.2f;<%2.2f (isolation sum pt threshold) \n",fSumPtThreshold,fSumPtThresholdMax) ;
  parList+=onePar ;
  snprintf(onePar,buffersize,"fPtFraction=%2.2f (isolation pt threshold fraction) \n",fPtFraction) ;
  parList+=onePar ;
  snprintf(onePar,buffersize,"fICMethod=%d (isolation cut case) \n",fICMethod) ;
  parList+=onePar ;
  snprintf(onePar,buffersize,"fPartInCone=%d \n",fPartInCone) ;
  parList+=onePar ;
  snprintf(onePar,buffersize,"fFracIsThresh=%i \n",fFracIsThresh) ;
  parList+=onePar ;
 
  return parList; 
}

//____________________________________
void AliIsolationCut::InitParameters()
{
  //Initialize the parameters of the analysis.
  
  fConeSize       = 0.4 ; 
  fPtThreshold    = 0.5  ;
  fPtThresholdMax = 10000.  ;
  fSumPtThreshold    = 1.0 ;
  fSumPtThresholdMax = 10000. ;
  fPtFraction     = 0.1 ;
  fPartInCone     = kNeutralAndCharged;
  fICMethod       = kSumPtIC; // 0 pt threshol method, 1 cone pt sum method
  fFracIsThresh   = 1; 
}

//________________________________________________________________________________
void  AliIsolationCut::MakeIsolationCut(TObjArray * plCTS, 
                                        TObjArray * plNe, 
                                        AliCaloTrackReader * reader, 
                                        AliCaloPID * pid,
                                        Bool_t bFillAOD,
                                        AliAODPWG4ParticleCorrelation  *pCandidate, 
                                        TString aodArrayRefName,
                                        Int_t   & n, 
                                        Int_t   & nfrac, 
                                        Float_t & coneptsum, Float_t & ptLead,
                                        Bool_t  & isolated) 
{
  //Search in cone around a candidate particle if it is isolated 
  Float_t ptC   = pCandidate->Pt() ;
  Float_t phiC  = pCandidate->Phi() ;
  if(phiC<0) phiC+=TMath::TwoPi();
  Float_t etaC  = pCandidate->Eta() ;
  
  Float_t pt     = -100. ;
  Float_t eta    = -100. ;
  Float_t phi    = -100. ;
  Float_t rad    = -100. ;
  
  Float_t coneptsumCluster = 0;
  Float_t coneptsumTrack   = 0;
  
  Float_t  etaBandPtSumTrack   = 0;
  Float_t  phiBandPtSumTrack   = 0;
  Float_t  etaBandPtSumCluster = 0;
  Float_t  phiBandPtSumCluster = 0;
  
  n         = 0 ;
  nfrac     = 0 ;
  isolated  = kFALSE;
  
  AliDebug(1,Form("Candidate pT %2.2f, eta %2.2f, phi %2.2f, cone %1.2f, thres %2.2f, Fill AOD? %d",
                  pCandidate->Pt(), pCandidate->Eta(), pCandidate->Phi()*TMath::RadToDeg(), fConeSize,fPtThreshold,bFillAOD));

  //Initialize the array with refrences
  TObjArray * refclusters  = 0x0;
  TObjArray * reftracks    = 0x0;
  Int_t       ntrackrefs   = 0;
  Int_t       nclusterrefs = 0;
  
  //Check charged particles in cone.
  if(plCTS && 
     (fPartInCone==kOnlyCharged || fPartInCone==kNeutralAndCharged))
  {
    for(Int_t ipr = 0;ipr < plCTS->GetEntries() ; ipr ++ )
    {
      AliVTrack* track = dynamic_cast<AliVTrack*>(plCTS->At(ipr)) ; 
      
      if(track)
      {
        //Do not count the candidate (pion, conversion photon) or the daughters of the candidate
        if(track->GetID() == pCandidate->GetTrackLabel(0) || track->GetID() == pCandidate->GetTrackLabel(1) || 
           track->GetID() == pCandidate->GetTrackLabel(2) || track->GetID() == pCandidate->GetTrackLabel(3)   ) continue ;
        
        fTrackVector.SetXYZ(track->Px(),track->Py(),track->Pz());
        pt  = fTrackVector.Pt();
        eta = fTrackVector.Eta();
        phi = fTrackVector.Phi() ;
      }
      else
      {// Mixed event stored in AliAODPWG4Particles
        AliAODPWG4Particle * trackmix = dynamic_cast<AliAODPWG4Particle*>(plCTS->At(ipr)) ; 
        if(!trackmix)
        {
          AliWarning("Wrong track data type, continue");
          continue;
        }
        
        pt  = trackmix->Pt();
        eta = trackmix->Eta();
        phi = trackmix->Phi() ;
      }

      if( phi < 0 ) phi+=TMath::TwoPi();
      
      rad = Radius(etaC, phiC, eta, phi);
      
      // ** For the background out of cone **
      
      if(rad > fConeSize)
      {
        if(eta > (etaC-fConeSize) && eta < (etaC+fConeSize)) phiBandPtSumTrack += pt;
        if(phi > (phiC-fConeSize) && phi < (phiC+fConeSize)) etaBandPtSumTrack += pt;
      }
      
      // ** For the isolated particle **
      
      // Only loop the particle at the same side of candidate
      if(TMath::Abs(phi-phiC) > TMath::PiOver2()) continue ;
      
//      // If at the same side has particle larger than candidate, 
//      // then candidate can not be the leading, skip such events
//      if(pt > ptC)
//      {
//        n         = -1;
//        nfrac     = -1;
//        coneptsumTrack = -1;
//        isolated  = kFALSE;
//        
//        pCandidate->SetLeadingParticle(kFALSE);
//        
//        if(bFillAOD && reftracks) 
//        {
//          reftracks->Clear(); 
//          delete reftracks;
//        }
//        
//        return ;
//      }
      
      // // Check if there is any particle inside cone with pt larger than  fPtThreshold
      // Check if the leading particule inside the cone has a ptLead larger than fPtThreshold
      
      AliDebug(2,Form("\t Track %d, pT %2.2f, eta %1.2f, phi %2.2f, R candidate %2.2f", ipr,pt,eta,phi,rad));
      
      if(rad < fConeSize)
      {
        AliDebug(2,"Inside candidate cone");
        
        if(bFillAOD)
        {
          ntrackrefs++;
          if(ntrackrefs == 1)
          {
            reftracks = new TObjArray(0);
            //reftracks->SetName(Form("Tracks%s",aodArrayRefName.Data()));
            TString tempo(aodArrayRefName)  ; 
            tempo += "Tracks" ; 
            reftracks->SetName(tempo);
            reftracks->SetOwner(kFALSE);
          }
          reftracks->Add(track);
        }
        
        coneptsumTrack+=pt;

        if( ptLead < pt ) ptLead = pt;

//        // *Before*, count particles in cone
//        if(pt > fPtThreshold && pt < fPtThresholdMax)  n++;
//        
//        //if fPtFraction*ptC<fPtThreshold then consider the fPtThreshold directly
//        if(fFracIsThresh)
//        {
//          if( fPtFraction*ptC < fPtThreshold )
//          {
//            if( pt > fPtThreshold )    nfrac++ ;
//          }
//          else
//          {
//            if( pt > fPtFraction*ptC ) nfrac++;
//          }
//        }
//        else
//        {
//          if( pt > fPtFraction*ptC ) nfrac++;
//        }

      } // Inside cone
      
    }// charged particle loop
    
  }//Tracks
  
  
  //Check neutral particles in cone.  
  if(plNe &&
     (fPartInCone==kOnlyNeutral || fPartInCone==kNeutralAndCharged))
  {
    
    for(Int_t ipr = 0;ipr < plNe->GetEntries() ; ipr ++ )
    {
      AliVCluster * calo = dynamic_cast<AliVCluster *>(plNe->At(ipr)) ;
      
      if(calo)
      {
        //Get the index where the cluster comes, to retrieve the corresponding vertex
        Int_t evtIndex = 0 ; 
        if (reader->GetMixedEvent()) 
          evtIndex=reader->GetMixedEvent()->EventIndexForCaloCluster(calo->GetID()) ; 
        
        
        //Do not count the candidate (photon or pi0) or the daughters of the candidate
        if(calo->GetID() == pCandidate->GetCaloLabel(0) || 
           calo->GetID() == pCandidate->GetCaloLabel(1)   ) continue ;      
        
        //Skip matched clusters with tracks in case of neutral+charged analysis
        if( fPartInCone == kNeutralAndCharged && 
           pid->IsTrackMatched(calo,reader->GetCaloUtils(),reader->GetInputEvent()) ) continue ;
        
        //Assume that come from vertex in straight line
        calo->GetMomentum(fMomentum,reader->GetVertex(evtIndex)) ;
        
        pt  = fMomentum.Pt()  ;
        eta = fMomentum.Eta() ;
        phi = fMomentum.Phi() ;
      }
      else 
      {// Mixed event stored in AliAODPWG4Particles
        AliAODPWG4Particle * calomix = dynamic_cast<AliAODPWG4Particle*>(plNe->At(ipr)) ; 
        if(!calomix)
        {
          AliWarning("Wrong calo data type, continue");
          continue;
        }
        
        pt  = calomix->Pt();
        eta = calomix->Eta();
        phi = calomix->Phi() ;
      }
      
      if( phi < 0 ) phi+=TMath::TwoPi();
      
      rad = Radius(etaC, phiC, eta, phi);
      
      // ** For the background out of cone **
      
      if(rad > fConeSize)
      {
        if(eta > (etaC-fConeSize) && eta < (etaC+fConeSize)) phiBandPtSumCluster += pt;
        if(phi > (phiC-fConeSize) && phi < (phiC+fConeSize)) etaBandPtSumCluster += pt;
      }
      
      // ** For the isolated particle **
      
      // Only loop the particle at the same side of candidate
      if(TMath::Abs(phi-phiC)>TMath::PiOver2()) continue ;
      
//      // If at the same side has particle larger than candidate,
//      // then candidate can not be the leading, skip such events
//      if(pt > ptC)
//      {
//        n         = -1;
//        nfrac     = -1;
//        coneptsumCluster = -1;
//        isolated  = kFALSE;
//        
//        pCandidate->SetLeadingParticle(kFALSE);
//        
//        if(bFillAOD)
//        {
//          if(reftracks)
//          {  
//            reftracks  ->Clear();
//            delete reftracks;
//          }
//          
//          if(refclusters)
//          {
//            refclusters->Clear(); 
//            delete refclusters;
//          }
//        }
//        return ;
//      }
      
      //Check if there is any particle inside cone with pt larger than  fPtThreshold
      
      AliDebug(2,Form("\t Cluster %d, pT %2.2f, eta %1.2f, phi %2.2f, R candidate %2.2f", ipr,pt,eta,phi,rad));
      
      if(rad < fConeSize)
      {
        AliDebug(2,"Inside candidate cone");
        
        if(bFillAOD) 
        {
          nclusterrefs++;
          if(nclusterrefs==1)
          {
            refclusters = new TObjArray(0);
            //refclusters->SetName(Form("Clusters%s",aodArrayRefName.Data()));
            TString tempo(aodArrayRefName)  ; 
            tempo += "Clusters" ; 
            refclusters->SetName(tempo);
            refclusters->SetOwner(kFALSE);
          }
          refclusters->Add(calo);
        }
        
        coneptsumCluster+=pt;
        
        if( ptLead < pt ) ptLead = pt;
        
//        // *Before*, count particles in cone
//        if(pt > fPtThreshold && pt < fPtThresholdMax)  n++;
//
//        //if fPtFraction*ptC<fPtThreshold then consider the fPtThreshold directly
//        if(fFracIsThresh)
//        {
//          if( fPtFraction*ptC < fPtThreshold )
//          {
//            if( pt > fPtThreshold )    nfrac++ ;
//          }
//          else 
//          {
//            if( pt > fPtFraction*ptC ) nfrac++;
//          }
//        }
//        else
//        {
//          if( pt > fPtFraction*ptC ) nfrac++;
//        }
        
      }//in cone
      
    }// neutral particle loop
    
  }//neutrals
  
  //Add reference arrays to AOD when filling AODs only
  if(bFillAOD)
  {
    if(refclusters)	pCandidate->AddObjArray(refclusters);
    if(reftracks)	  pCandidate->AddObjArray(reftracks);
  }
  
  coneptsum = coneptsumCluster + coneptsumTrack;

  // *Now*, just check the leading particle in the cone if the threshold is passed
  if(ptLead > fPtThreshold && ptLead < fPtThresholdMax)  n = 1;
  
  //if fPtFraction*ptC<fPtThreshold then consider the fPtThreshold directly
  if(fFracIsThresh)
  {
    if( fPtFraction*ptC < fPtThreshold )
    {
      if( ptLead > fPtThreshold )    nfrac = 1 ;
    }
    else
    {
      if( ptLead > fPtFraction*ptC ) nfrac = 1;
    }
  }
  else
  {
    if( ptLead > fPtFraction*ptC ) nfrac = 1;
  }
  
  //-------------------------------------------------------------------
  //Check isolation, depending on selected isolation criteria requested
  
  if( fICMethod == kPtThresIC)
  {
    if( n == 0 ) isolated = kTRUE ;
    
    AliDebug(1,Form("pT Cand %2.2f, pT Lead %2.2f, %2.2f<pT Lead< %2.2f, isolated %d",
                    ptC,ptLead,fPtThreshold,fPtThresholdMax,isolated));
  }
  else if( fICMethod == kSumPtIC )
  {
    if( coneptsum > fSumPtThreshold &&
        coneptsum < fSumPtThresholdMax )
      isolated  =  kFALSE ;
    else
      isolated  =  kTRUE  ;
    
     AliDebug(1,Form("pT Cand %2.2f, SumPt %2.2f, %2.2f<Sum pT< %2.2f, isolated %d",
                     ptC,ptLead,fSumPtThreshold,fSumPtThresholdMax,isolated));
  }
  else if( fICMethod == kPtFracIC )
  {
    if(nfrac == 0 ) isolated = kTRUE ;
  }
  else if( fICMethod == kSumPtFracIC )
  {
    //when the fPtFraction*ptC < fSumPtThreshold then consider the later case
    // printf("photon analysis IsDataMC() ?%i\n",IsDataMC());
    if( fFracIsThresh )
    {
      if( fPtFraction*ptC < fSumPtThreshold  && coneptsum < fSumPtThreshold ) isolated  =  kTRUE ;
      if( fPtFraction*ptC > fSumPtThreshold  && coneptsum < fPtFraction*ptC ) isolated  =  kTRUE ;
    }
    else 
    {
      if( coneptsum < fPtFraction*ptC ) isolated  =  kTRUE ;
    }
  }
  else if( fICMethod == kSumDensityIC )
  {    
    // Get good cell density (number of active cells over all cells in cone)
    // and correct energy in cone
    
    Float_t cellDensity = GetCellDensity(pCandidate,reader);
    
    if( coneptsum < fSumPtThreshold*cellDensity )
      isolated = kTRUE;
  }
  else if( fICMethod == kSumBkgSubIC )
  {
    Double_t coneptsumBkg = 0.;
    Float_t  etaBandPtSumTrackNorm   = 0;
    Float_t  phiBandPtSumTrackNorm   = 0;
    Float_t  etaBandPtSumClusterNorm = 0;
    Float_t  phiBandPtSumClusterNorm = 0;
    
    Float_t  excessFracEtaTrack   = 1;
    Float_t  excessFracPhiTrack   = 1;
    Float_t  excessFracEtaCluster = 1;
    Float_t  excessFracPhiCluster = 1;
    
    // Normalize background to cone area
    if     (fPartInCone != kOnlyCharged       )
      CalculateUEBandClusterNormalization(reader, etaC, phiC,
                                          phiBandPtSumCluster    , etaBandPtSumCluster,
                                          phiBandPtSumClusterNorm, etaBandPtSumClusterNorm,
                                          excessFracEtaCluster   , excessFracPhiCluster    );
    if     (fPartInCone != kOnlyNeutral       )
      CalculateUEBandTrackNormalization(reader, etaC, phiC,
                                          phiBandPtSumTrack    , etaBandPtSumTrack  ,
                                          phiBandPtSumTrackNorm, etaBandPtSumTrackNorm,
                                          excessFracEtaTrack   , excessFracPhiTrack    );
    
    if     (fPartInCone == kOnlyCharged       ) coneptsumBkg = etaBandPtSumTrackNorm;
    else if(fPartInCone == kOnlyNeutral       ) coneptsumBkg = etaBandPtSumClusterNorm;
    else if(fPartInCone == kNeutralAndCharged ) coneptsumBkg = etaBandPtSumClusterNorm + etaBandPtSumTrackNorm;
    
    //coneptsumCluster*=(coneBadCellsCoeff*excessFracEtaCluster*excessFracPhiCluster) ; // apply this correction earlier???
    // line commented out in last modif!!!
    
    coneptsum = coneptsumCluster+coneptsumTrack;
    
    coneptsum -= coneptsumBkg;
    
    if( coneptsum > fSumPtThreshold && coneptsum < fSumPtThresholdMax )
      isolated  =  kFALSE ;
    else
      isolated  =  kTRUE  ;

  }
  
}

//_____________________________________________________
void AliIsolationCut::Print(const Option_t * opt) const
{
  
  //Print some relevant parameters set for the analysis
  if(! opt)
    return;
  
  printf("**** Print %s %s **** \n", GetName(), GetTitle() ) ;
  
  printf("IC method          =     %d\n",    fICMethod   ) ; 
  printf("Cone Size          =     %1.2f\n", fConeSize   ) ; 
  printf("pT threshold       =     >%2.1f;<%2.1f\n", fPtThreshold   ,   fPtThresholdMax) ;
  printf("Sum pT threshold   =     >%2.1f;<%2.1f\n", fSumPtThreshold,fSumPtThresholdMax) ;
  printf("pT fraction        =     %3.1f\n", fPtFraction ) ;
  printf("particle type in cone =  %d\n",    fPartInCone ) ;
  printf("using fraction for high pt leading instead of frac ? %i\n",fFracIsThresh);
  printf("    \n") ;
  
} 

//___________________________________________________________________________
Float_t AliIsolationCut::Radius(Float_t etaC, Float_t phiC,
                                Float_t eta , Float_t phi) const
{
  // Calculate the distance to trigger from any particle

  Float_t dEta = etaC-eta;
  Float_t dPhi = phiC-phi;
  
  if(TMath::Abs(dPhi) >= TMath::Pi()) 
    dPhi = TMath::TwoPi()-TMath::Abs(dPhi);
  
  return TMath::Sqrt( dEta*dEta + dPhi*dPhi );
  
}



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