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 */
 
//---------------------------------------------------------------------
// UA1 Cone Algorithm Jet finder for jet studies
// manages the search for jets using charged particle momentum and 
// neutral cell energy information
// Authors: Rafael.Diaz.Valdes@cern.ch 
//          magali.estienne@subatech.in2p3.fr
//          alexandre.shabetai@cern.ch
// ** 2011
// Modified accordingly to reader/finder splitting and new handling of neutral information
// Versions V1 and V2 merged
//---------------------------------------------------------------------

#include <TH2F.h>
#include <TMath.h>

#include "AliUA1JetFinder.h"
#include "AliUA1JetHeaderV1.h"
#include "AliJetCalTrk.h"
#include "AliJetBkg.h"
#include "AliAODJetEventBackground.h"
#include "AliAODJet.h"

ClassImp(AliUA1JetFinder)

////////////////////////////////////////////////////////////////////////

AliUA1JetFinder::AliUA1JetFinder():
  AliJetFinder(),
  fLego(0),  
  fJetBkg(new AliJetBkg())
{
  // Default constructor
}

//-----------------------------------------------------------------------
AliUA1JetFinder::~AliUA1JetFinder()
{
  // Destructor
  delete fLego;
  delete fJetBkg;

}

//-----------------------------------------------------------------------
void AliUA1JetFinder::FindJets()
{
  //  Used to find jets using charged particle momentum information 
  //  & neutral energy from calo cells
  //
  //  1) Fill cell map array
  //  2) calculate total energy and fluctuation level
  //  3) Run algorithm
  //     3.1) look centroides in cell map
  //     3.2) calculate total energy in cones
  //     3.3) flag as a possible jet
  //     3.4) reorder cones by energy
  //  4) subtract backg in accepted jets
  //  5) fill AliJet list
  
  // transform input to pt,eta,phi plus lego
  
  AliUA1JetHeader* header  = (AliUA1JetHeader*) fHeader;
  Int_t              nIn = fCalTrkEvent->GetNCalTrkTracks();
  fDebug   = fHeader->GetDebug();
  
  if (nIn <= 0) return;
  fJetBkg->SetHeader(fHeader);
  fJetBkg->SetCalTrkEvent(GetCalTrkEvent());
  fJetBkg->SetDebug(fDebug);
  // local arrays for input
  // ToDo: check memory fragmentation, maybe better to
  // define them globally and resize as needed
  // Fragmentation should be worse for low mult...
  Float_t* ptT      = new Float_t[nIn];
  Float_t* etaT     = new Float_t[nIn];
  Float_t* phiT     = new Float_t[nIn];
  Int_t*   injet    = new Int_t[nIn];
  Int_t*   injetOk  = new Int_t[nIn];

  memset(ptT,0,sizeof(Float_t)*nIn);
  memset(etaT,0,sizeof(Float_t)*nIn);
  memset(phiT,0,sizeof(Float_t)*nIn);
  memset(injet,0,sizeof(Int_t)*nIn);
  memset(injetOk,-1,sizeof(Int_t)*nIn);

  // load input vectors and calculate total energy in array

  // total energy in array
  Float_t etbgTotal = 0.;
  Float_t npart = 0.;
  Float_t etbg2 = 0.;

  for (Int_t i = 0; i < fCalTrkEvent->GetNCalTrkTracks(); i++){
    ptT[i]  = fCalTrkEvent->GetCalTrkTrack(i)->GetPt();
    etaT[i] = fCalTrkEvent->GetCalTrkTrack(i)->GetEta();
    phiT[i] = ((fCalTrkEvent->GetCalTrkTrack(i)->GetPhi() < 0) ? (fCalTrkEvent->GetCalTrkTrack(i)->GetPhi()) + 2 * TMath::Pi() : fCalTrkEvent->GetCalTrkTrack(i)->GetPhi());
    //fCalTrkEvent->GetCalTrkTrack(i)->Print(Form("%d",i));
    if (fCalTrkEvent->GetCalTrkTrack(i)->GetCutFlag() != 1) continue;
    fLego->Fill(etaT[i], phiT[i], ptT[i]);
    npart += 1;
    etbgTotal+= ptT[i];
    etbg2 += ptT[i]*ptT[i];
  }
  
  // calculate total energy and fluctuation in map
  Double_t meanpt = 0.;
  Double_t ptRMS = 0.;
  if(npart>0){
    meanpt = etbgTotal/npart;
    etbg2 = etbg2/npart;
    if(etbg2>(meanpt*meanpt)){// prenent NAN, should only happen due to numerical instabilities
      ptRMS = TMath::Sqrt(etbg2-meanpt*meanpt);
    }
  }
  Double_t dEtTotal = (TMath::Sqrt(npart))*TMath::Sqrt(meanpt * meanpt + ptRMS*ptRMS);
  
  // arrays to hold jets
  Float_t etaJet[kMaxJets];
  Float_t phiJet[kMaxJets];
  Float_t etJet[kMaxJets];
  Float_t etsigJet[kMaxJets]; //signal et in jet
  Float_t etallJet[kMaxJets];  // total et in jet (tmp variable)
  Int_t   ncellsJet[kMaxJets];
  Int_t   multJetT[kMaxJets];
  Int_t   multJetC[kMaxJets];
  Int_t   multJet[kMaxJets];
  Float_t *areaJet = new Float_t[kMaxJets];
  // Used for jet reordering at the end of the jet finding procedure
  Float_t etaJetOk[kMaxJets];
  Float_t phiJetOk[kMaxJets];
  Float_t etJetOk[kMaxJets];
  Float_t etsigJetOk[kMaxJets]; //signal et in jet
  Float_t etallJetOk[kMaxJets];  // total et in jet (tmp variable)
  Int_t   ncellsJetOk[kMaxJets];
  Int_t   multJetOk[kMaxJets];
  Float_t *areaJetOk = new Float_t[kMaxJets];
  Int_t   nJets; // to hold number of jets found by algorithm
  Int_t   nj;    // number of jets accepted
  Float_t prec  = header->GetPrecBg();
  Float_t bgprec = 1;

  while(bgprec > prec){
    //reset jet arrays in memory
    memset(etaJet,0,sizeof(Float_t)*kMaxJets);
    memset(phiJet,0,sizeof(Float_t)*kMaxJets);
    memset(etJet,0,sizeof(Float_t)*kMaxJets);
    memset(etallJet,0,sizeof(Float_t)*kMaxJets);
    memset(etsigJet,0,sizeof(Float_t)*kMaxJets);
    memset(ncellsJet,0,sizeof(Int_t)*kMaxJets);
    memset(multJetT,0,sizeof(Int_t)*kMaxJets);
    memset(multJetC,0,sizeof(Int_t)*kMaxJets);
    memset(multJet,0,sizeof(Int_t)*kMaxJets);
    memset(areaJet,0,sizeof(Float_t)*kMaxJets);
    memset(etaJetOk,0,sizeof(Float_t)*kMaxJets);
    memset(phiJetOk,0,sizeof(Float_t)*kMaxJets);
    memset(etJetOk,0,sizeof(Float_t)*kMaxJets);
    memset(etallJetOk,0,sizeof(Float_t)*kMaxJets);
    memset(etsigJetOk,0,sizeof(Float_t)*kMaxJets);
    memset(ncellsJetOk,0,sizeof(Int_t)*kMaxJets);
    memset(multJetOk,0,sizeof(Int_t)*kMaxJets);
    memset(areaJetOk,0,sizeof(Float_t)*kMaxJets);
    nJets = 0;
    nj = 0;
    // reset particles-jet array in memory
    memset(injet,-1,sizeof(Int_t)*nIn);
    //run cone algorithm finder
    RunAlgoritm(etbgTotal,dEtTotal,nJets,etJet,etaJet,phiJet,etallJet,ncellsJet);
    //run background subtraction
    if(nJets > header->GetNAcceptJets()) // limited number of accepted jets per event
      nj = header->GetNAcceptJets();
    else
      nj = nJets;

    //subtract background
    Float_t etbgTotalN = 0.0; //new background
    Float_t sigmaN = 0.0; //new background
    if(header->GetBackgMode() == 1) {// standard
      fJetBkg->SubtractBackg(nIn,nj,etbgTotalN,sigmaN,ptT,etaT,phiT,etJet,etaJet,phiJet,etsigJet,multJetT,multJetC,multJet,injet,areaJet);}
    if(header->GetBackgMode() == 2) //cone
      fJetBkg->SubtractBackgCone(nIn,nj,etbgTotalN,sigmaN,ptT,etaT,phiT,etJet,etaJet,phiJet,etsigJet,multJetT,multJetC,multJet,injet,areaJet);
    if(header->GetBackgMode() == 3) //ratio
      fJetBkg->SubtractBackgRatio(nIn,nj,etbgTotalN,sigmaN,ptT,etaT,phiT,etJet,etaJet,phiJet,etsigJet,multJetT,multJetC,multJet,injet,areaJet);
    if(header->GetBackgMode() == 4) //statistic
      fJetBkg->SubtractBackgStat(nIn,nj,etbgTotalN,sigmaN,ptT,etaT,phiT,etJet,etaJet,phiJet,etsigJet,multJetT,multJetC,multJet,injet,areaJet);

    //calc precision
    if(etbgTotalN != 0.0)
      bgprec = (etbgTotal - etbgTotalN)/etbgTotalN;
    else
      bgprec = 0;
    etbgTotal = etbgTotalN; // update with new background estimation

  } //end while

  // add tracks to the jet if it wasn't yet done
  if (header->GetBackgMode() == 0){
    Float_t rc= header->GetRadius();
    for(Int_t jpart = 0; jpart < nIn; jpart++){ // loop for all particles in array
      for(Int_t ijet=0; ijet<nJets; ijet++){
        Float_t deta = etaT[jpart] - etaJet[ijet];
        Float_t dphi = phiT[jpart] - phiJet[ijet];
        if (dphi < -TMath::Pi()) dphi= -dphi - 2.0 * TMath::Pi();
        if (dphi >  TMath::Pi()) dphi = 2.0 * TMath::Pi() - dphi;
        Float_t dr = TMath::Sqrt(deta * deta + dphi * dphi);
        if(dr <= rc){ // particles inside this cone
	  injet[jpart] = ijet;
          break;
        }
      }// end jets loop
    } //end particle loop
  }

  // add jets to list
  if (fDebug>1) printf("Found %d jets \n", nj);
  
  // Reorder jets by et in cone
  // Sort jets by energy
  Int_t idx[kMaxJets];
  TMath::Sort(nJets, etJet, idx);
  for(Int_t p = 0; p < nJets; p++)
    {
      etaJetOk[p]    = etaJet[idx[p]];
      phiJetOk[p]    = phiJet[idx[p]];
      etJetOk[p]     = etJet[idx[p]];
      etallJetOk[p]  = etJet[idx[p]];
      etsigJetOk[p]  = etsigJet[idx[p]];
      ncellsJetOk[p] = ncellsJet[idx[p]];
      multJetOk[p]   = multJet[idx[p]];
      areaJetOk[p]   = areaJet[idx[p]];
    }

  //////////////////////////

  Int_t nTracks = fCalTrkEvent->GetNCalTrkTracks();
  
  for(Int_t kj=0; kj<nj; kj++)
    {
      if ((etaJetOk[kj] > (header->GetJetEtaMax())) ||
 	  (etaJetOk[kj] < (header->GetJetEtaMin())) ||
 	  (phiJetOk[kj] > (header->GetJetPhiMax())) ||
 	  (phiJetOk[kj] < (header->GetJetPhiMin())) ||
 	  (etJetOk[kj] < header->GetMinJetEt())) continue; // acceptance eta range and etmin
      Float_t px=-999, py=-999 ,pz=-999 ,en=-999; // convert to 4-vector
      px = etJetOk[kj] * TMath::Cos(phiJetOk[kj]);
      py = etJetOk[kj] * TMath::Sin(phiJetOk[kj]);
      pz = etJetOk[kj] / TMath::Tan(2.0 * TMath::ATan(TMath::Exp(-etaJetOk[kj])));
      en = TMath::Sqrt(px * px + py * py + pz * pz);
      AliAODJet jet(px, py, pz, en);

      // Calc jet area if it wasn't yet done
      if (header->GetBackgMode() == 0){
        // calculate the area of the jet
        Float_t rc= header->GetRadius();
        areaJetOk[kj] = fJetBkg->CalcJetAreaEtaCut(rc,etaJetOk[kj]);
      }

      jet.SetEffArea(areaJetOk[kj],0.,0.,0.);
      jet.SetBgEnergy(etbgTotal,0.);
      if (fDebug>1) jet.Print(Form("%d",kj));
      
      for(Int_t jpart = 0; jpart < nTracks; jpart++) { // loop for all particles in array
        // Track to jet reordering
        if(injet[jpart] == idx[kj]){
          injetOk[jpart] = kj;
        }
        // Check if the particle belongs to the jet and add the ref
        if(injetOk[jpart] == kj && fCalTrkEvent->GetCalTrkTrack(jpart)->GetCutFlag() == 1) {
          jet.AddTrack(fCalTrkEvent->GetCalTrkTrack(jpart)->GetTrackObject());
	}
      }

      AddJet(jet);
      
    }

  //delete
  delete[] ptT;
  delete[] etaT;
  delete[] phiT;
  delete[] injet;
  delete[] injetOk;
  delete[] areaJet;
  delete[] areaJetOk;

}

//-----------------------------------------------------------------------
void AliUA1JetFinder::RunAlgoritm(Float_t etbgTotal, Double_t dEtTotal, Int_t& nJets,
				  Float_t* const etJet,Float_t* const etaJet, Float_t* const phiJet,
				  Float_t* const etallJet, Int_t* const ncellsJet)
{
  // Dump lego
  AliUA1JetHeader* header = (AliUA1JetHeader*) fHeader;
  const Int_t nBinsMax = 120000; // we use a fixed array not to fragment memory 
 
  const Int_t nBinEta = header->GetLegoNbinEta();
  const Int_t nBinPhi = header->GetLegoNbinPhi();
  if((nBinPhi*nBinEta)>nBinsMax){
    AliError("Too many bins of the ETA-PHI histogram");
  }

  Float_t etCell[nBinsMax] = {0.};   //! Cell Energy
  Float_t etaCell[nBinsMax] = {0.};  //! Cell eta
  Float_t phiCell[nBinsMax] = {0.};  //! Cell phi
  Short_t flagCell[nBinsMax] = {0}; //! Cell flag
  
  Int_t nCell = 0;
  TAxis* xaxis = fLego->GetXaxis();
  TAxis* yaxis = fLego->GetYaxis();
  Float_t e = 0.0;
  for (Int_t i = 1; i <= nBinEta; i++) {
    for (Int_t j = 1; j <= nBinPhi; j++) {
      e = fLego->GetBinContent(i,j);
      if (e < 0.0) continue; // don't include this cells
      Float_t eta  = xaxis->GetBinCenter(i);
      Float_t phi  = yaxis->GetBinCenter(j);
      etCell[nCell]  = e;
      etaCell[nCell] = eta;
      phiCell[nCell] = phi;
      flagCell[nCell] = 0; //default
      nCell++;
    }
  }
  // Parameters from header
  Float_t minmove = header->GetMinMove();
  Float_t maxmove = header->GetMaxMove();
  Float_t rc      = header->GetRadius();
  Float_t etseed  = header->GetEtSeed();
  // Tmp array of jets form algoritm
  Float_t etaAlgoJet[kMaxJets] = {0.0};
  Float_t phiAlgoJet[kMaxJets] = {0.0};
  Float_t etAlgoJet[kMaxJets] = {0.0};
  Int_t   ncellsAlgoJet[kMaxJets] = {0};

  // Run algorithm//
  
  // Sort cells by et
  Int_t index[nBinsMax];
  TMath::Sort(nCell, etCell, index);
  // variable used in centroide loop
  Float_t eta   = 0.0;
  Float_t phi   = 0.0;
  Float_t eta0  = 0.0;
  Float_t phi0  = 0.0;
  Float_t etab  = 0.0;
  Float_t phib  = 0.0;
  Float_t etas  = 0.0;
  Float_t phis  = 0.0;
  Float_t ets   = 0.0;
  Float_t deta  = 0.0;
  Float_t dphi  = 0.0;
  Float_t dr    = 0.0;
  Float_t etsb  = 0.0;
  Float_t etasb = 0.0;
  Float_t phisb = 0.0;
  Float_t dphib = 0.0;

  for(Int_t icell = 0; icell < nCell; icell++)
    {
      Int_t jcell = index[icell];
      if(etCell[jcell] <= etseed) continue; // if cell energy is low et seed
      if(flagCell[jcell] != 0) continue; // if cell was used before
      
      eta  = etaCell[jcell];
      phi  = phiCell[jcell];
      eta0 = eta;
      phi0 = phi;
      etab = eta;
      phib = phi;
      ets  = etCell[jcell];
      etas = 0.0;
      phis = 0.0;
      etsb = ets;
      etasb = 0.0;
      phisb = 0.0;
      for(Int_t kcell =0; kcell < nCell; kcell++)
	{
	  Int_t lcell = index[kcell];
	  if(lcell == jcell) continue; // cell itself
	  if(flagCell[lcell] != 0) continue; // cell used before
	  if(etCell[lcell] > etCell[jcell]) continue; // can this happen
	  //calculate dr
	  deta = etaCell[lcell] - eta;
	  dphi = TMath::Abs(phiCell[lcell] - phi);
	  if (dphi > TMath::Pi()) dphi = 2.0 * TMath::Pi() - dphi;
	  dr = TMath::Sqrt(deta * deta + dphi * dphi);
	  if(dr <= rc)
	    {
	      // calculate offset from initiate cell
	      deta = etaCell[lcell] - eta0;
	      dphi = phiCell[lcell] - phi0;
	      if (dphi < -TMath::Pi()) dphi= dphi + 2.0 * TMath::Pi();
	      if (dphi > TMath::Pi()) dphi = dphi - 2.0 * TMath::Pi();
	      etas = etas + etCell[lcell]*deta;
	      phis = phis + etCell[lcell]*dphi;
	      ets = ets + etCell[lcell];
	      //new weighted eta and phi including this cell
	      eta = eta0 + etas/ets;
	      phi = phi0 + phis/ets;
	      // if cone does not move much, just go to next step
	      dphib = TMath::Abs(phi - phib);
	      if (dphib > TMath::Pi()) dphib = 2. * TMath::Pi() - dphib;
	      dr = TMath::Sqrt((eta-etab)*(eta-etab) + dphib * dphib);
	      if(dr <= minmove) break;
	      // cone should not move more than max_mov
	      dr = TMath::Sqrt((etas/ets)*(etas/ets) + (phis/ets)*(phis/ets));
	      if(dr > maxmove){
		eta = etab;
		phi = phib;
		ets = etsb;
		etas = etasb;
		phis = phisb;
	      } else { // store this loop information
		etab=eta;
		phib=phi;
		etsb = ets;
		etasb = etas;
		phisb = phis;
	      }
	    } // inside cone
	}//end of cells loop looking centroide
      
      // Avoid cones overloap (to be implemented in the future)
      
      // Flag cells in Rc, estimate total energy in cone
      Float_t etCone   = 0.0;
      Int_t   nCellIn  = 0;
      rc = header->GetRadius();

      for(Int_t ncell =0; ncell < nCell; ncell++)
	{
	  if(flagCell[ncell] != 0) continue; // cell used before
	  //calculate dr
	  deta = etaCell[ncell] - eta;
	  dphi = phiCell[ncell] - phi;
	  if (dphi < -TMath::Pi()) dphi= -dphi - 2.0 * TMath::Pi();
	  if (dphi > TMath::Pi()) dphi = 2.0 * TMath::Pi() - dphi;
	  dr = TMath::Sqrt(deta * deta + dphi * dphi);
	  if(dr <= rc){  // cell in cone
	    flagCell[ncell] = -1;
	    etCone+=etCell[ncell];
	    nCellIn++;
	  }
	}
      
      // Select jets with et > background
      // estimate max fluctuation of background in cone
      Double_t ncellin = (Double_t)nCellIn;
      Double_t ntcell  = (Double_t)nCell;
      Double_t etbmax = (etbgTotal + dEtTotal )*(ncellin/ntcell);
      // min cone et
      Double_t etcmin = etCone ;  // could be used etCone - etmin !!
      //decisions !! etbmax < etcmin
      
      for(Int_t mcell =0; mcell < nCell; mcell++){
	if(flagCell[mcell] == -1){
	  if(etbmax < etcmin)
	    flagCell[mcell] = 1; //flag cell as used
	  else
	    flagCell[mcell] = 0; // leave it free
	}
      }
      //store tmp jet info !!!
      if(etbmax < etcmin) {
        if(nJets<kMaxJets){
	  etaAlgoJet[nJets]    = eta;
	  phiAlgoJet[nJets]    = phi;
	  etAlgoJet[nJets]     = etCone;
	  ncellsAlgoJet[nJets] = nCellIn;
	  nJets++;
        }
	else{
	  AliError(Form("Too many jets (> %d) found by UA1JetFinder, adapt your cuts",kMaxJets));
	  break;
	}
      }      
    } // end of cells loop

  //reorder jets by et in cone
  //sort jets by energy
  for(Int_t p = 0; p < nJets; p++)
    {
      etaJet[p]    = etaAlgoJet[p];
      phiJet[p]    = phiAlgoJet[p];
      etJet[p]     = etAlgoJet[p];
      etallJet[p]  = etAlgoJet[p];
      ncellsJet[p] = ncellsAlgoJet[p];
    }

}

//-----------------------------------------------------------------------
void AliUA1JetFinder::Reset()
{
  fLego->Reset();
  AliJetFinder::Reset();

}

//-----------------------------------------------------------------------
void AliUA1JetFinder::WriteJHeaderToFile() const
{
  AliUA1JetHeader* header = (AliUA1JetHeader*) fHeader;
  header->Write();

}

//-----------------------------------------------------------------------
void AliUA1JetFinder::Init()
{

  // initializes some variables
  AliUA1JetHeader* header = (AliUA1JetHeader*) fHeader;
  // book lego
  fLego = new TH2F("legoH","eta-phi",
		   header->GetLegoNbinEta(), header->GetLegoEtaMin(),
		   header->GetLegoEtaMax(),  header->GetLegoNbinPhi(),
		   header->GetLegoPhiMin(),  header->GetLegoPhiMax());
  
}

 AliUA1JetFinder.cxx:1
 AliUA1JetFinder.cxx:2
 AliUA1JetFinder.cxx:3
 AliUA1JetFinder.cxx:4
 AliUA1JetFinder.cxx:5
 AliUA1JetFinder.cxx:6
 AliUA1JetFinder.cxx:7
 AliUA1JetFinder.cxx:8
 AliUA1JetFinder.cxx:9
 AliUA1JetFinder.cxx:10
 AliUA1JetFinder.cxx:11
 AliUA1JetFinder.cxx:12
 AliUA1JetFinder.cxx:13
 AliUA1JetFinder.cxx:14
 AliUA1JetFinder.cxx:15
 AliUA1JetFinder.cxx:16
 AliUA1JetFinder.cxx:17
 AliUA1JetFinder.cxx:18
 AliUA1JetFinder.cxx:19
 AliUA1JetFinder.cxx:20
 AliUA1JetFinder.cxx:21
 AliUA1JetFinder.cxx:22
 AliUA1JetFinder.cxx:23
 AliUA1JetFinder.cxx:24
 AliUA1JetFinder.cxx:25
 AliUA1JetFinder.cxx:26
 AliUA1JetFinder.cxx:27
 AliUA1JetFinder.cxx:28
 AliUA1JetFinder.cxx:29
 AliUA1JetFinder.cxx:30
 AliUA1JetFinder.cxx:31
 AliUA1JetFinder.cxx:32
 AliUA1JetFinder.cxx:33
 AliUA1JetFinder.cxx:34
 AliUA1JetFinder.cxx:35
 AliUA1JetFinder.cxx:36
 AliUA1JetFinder.cxx:37
 AliUA1JetFinder.cxx:38
 AliUA1JetFinder.cxx:39
 AliUA1JetFinder.cxx:40
 AliUA1JetFinder.cxx:41
 AliUA1JetFinder.cxx:42
 AliUA1JetFinder.cxx:43
 AliUA1JetFinder.cxx:44
 AliUA1JetFinder.cxx:45
 AliUA1JetFinder.cxx:46
 AliUA1JetFinder.cxx:47
 AliUA1JetFinder.cxx:48
 AliUA1JetFinder.cxx:49
 AliUA1JetFinder.cxx:50
 AliUA1JetFinder.cxx:51
 AliUA1JetFinder.cxx:52
 AliUA1JetFinder.cxx:53
 AliUA1JetFinder.cxx:54
 AliUA1JetFinder.cxx:55
 AliUA1JetFinder.cxx:56
 AliUA1JetFinder.cxx:57
 AliUA1JetFinder.cxx:58
 AliUA1JetFinder.cxx:59
 AliUA1JetFinder.cxx:60
 AliUA1JetFinder.cxx:61
 AliUA1JetFinder.cxx:62
 AliUA1JetFinder.cxx:63
 AliUA1JetFinder.cxx:64
 AliUA1JetFinder.cxx:65
 AliUA1JetFinder.cxx:66
 AliUA1JetFinder.cxx:67
 AliUA1JetFinder.cxx:68
 AliUA1JetFinder.cxx:69
 AliUA1JetFinder.cxx:70
 AliUA1JetFinder.cxx:71
 AliUA1JetFinder.cxx:72
 AliUA1JetFinder.cxx:73
 AliUA1JetFinder.cxx:74
 AliUA1JetFinder.cxx:75
 AliUA1JetFinder.cxx:76
 AliUA1JetFinder.cxx:77
 AliUA1JetFinder.cxx:78
 AliUA1JetFinder.cxx:79
 AliUA1JetFinder.cxx:80
 AliUA1JetFinder.cxx:81
 AliUA1JetFinder.cxx:82
 AliUA1JetFinder.cxx:83
 AliUA1JetFinder.cxx:84
 AliUA1JetFinder.cxx:85
 AliUA1JetFinder.cxx:86
 AliUA1JetFinder.cxx:87
 AliUA1JetFinder.cxx:88
 AliUA1JetFinder.cxx:89
 AliUA1JetFinder.cxx:90
 AliUA1JetFinder.cxx:91
 AliUA1JetFinder.cxx:92
 AliUA1JetFinder.cxx:93
 AliUA1JetFinder.cxx:94
 AliUA1JetFinder.cxx:95
 AliUA1JetFinder.cxx:96
 AliUA1JetFinder.cxx:97
 AliUA1JetFinder.cxx:98
 AliUA1JetFinder.cxx:99
 AliUA1JetFinder.cxx:100
 AliUA1JetFinder.cxx:101
 AliUA1JetFinder.cxx:102
 AliUA1JetFinder.cxx:103
 AliUA1JetFinder.cxx:104
 AliUA1JetFinder.cxx:105
 AliUA1JetFinder.cxx:106
 AliUA1JetFinder.cxx:107
 AliUA1JetFinder.cxx:108
 AliUA1JetFinder.cxx:109
 AliUA1JetFinder.cxx:110
 AliUA1JetFinder.cxx:111
 AliUA1JetFinder.cxx:112
 AliUA1JetFinder.cxx:113
 AliUA1JetFinder.cxx:114
 AliUA1JetFinder.cxx:115
 AliUA1JetFinder.cxx:116
 AliUA1JetFinder.cxx:117
 AliUA1JetFinder.cxx:118
 AliUA1JetFinder.cxx:119
 AliUA1JetFinder.cxx:120
 AliUA1JetFinder.cxx:121
 AliUA1JetFinder.cxx:122
 AliUA1JetFinder.cxx:123
 AliUA1JetFinder.cxx:124
 AliUA1JetFinder.cxx:125
 AliUA1JetFinder.cxx:126
 AliUA1JetFinder.cxx:127
 AliUA1JetFinder.cxx:128
 AliUA1JetFinder.cxx:129
 AliUA1JetFinder.cxx:130
 AliUA1JetFinder.cxx:131
 AliUA1JetFinder.cxx:132
 AliUA1JetFinder.cxx:133
 AliUA1JetFinder.cxx:134
 AliUA1JetFinder.cxx:135
 AliUA1JetFinder.cxx:136
 AliUA1JetFinder.cxx:137
 AliUA1JetFinder.cxx:138
 AliUA1JetFinder.cxx:139
 AliUA1JetFinder.cxx:140
 AliUA1JetFinder.cxx:141
 AliUA1JetFinder.cxx:142
 AliUA1JetFinder.cxx:143
 AliUA1JetFinder.cxx:144
 AliUA1JetFinder.cxx:145
 AliUA1JetFinder.cxx:146
 AliUA1JetFinder.cxx:147
 AliUA1JetFinder.cxx:148
 AliUA1JetFinder.cxx:149
 AliUA1JetFinder.cxx:150
 AliUA1JetFinder.cxx:151
 AliUA1JetFinder.cxx:152
 AliUA1JetFinder.cxx:153
 AliUA1JetFinder.cxx:154
 AliUA1JetFinder.cxx:155
 AliUA1JetFinder.cxx:156
 AliUA1JetFinder.cxx:157
 AliUA1JetFinder.cxx:158
 AliUA1JetFinder.cxx:159
 AliUA1JetFinder.cxx:160
 AliUA1JetFinder.cxx:161
 AliUA1JetFinder.cxx:162
 AliUA1JetFinder.cxx:163
 AliUA1JetFinder.cxx:164
 AliUA1JetFinder.cxx:165
 AliUA1JetFinder.cxx:166
 AliUA1JetFinder.cxx:167
 AliUA1JetFinder.cxx:168
 AliUA1JetFinder.cxx:169
 AliUA1JetFinder.cxx:170
 AliUA1JetFinder.cxx:171
 AliUA1JetFinder.cxx:172
 AliUA1JetFinder.cxx:173
 AliUA1JetFinder.cxx:174
 AliUA1JetFinder.cxx:175
 AliUA1JetFinder.cxx:176
 AliUA1JetFinder.cxx:177
 AliUA1JetFinder.cxx:178
 AliUA1JetFinder.cxx:179
 AliUA1JetFinder.cxx:180
 AliUA1JetFinder.cxx:181
 AliUA1JetFinder.cxx:182
 AliUA1JetFinder.cxx:183
 AliUA1JetFinder.cxx:184
 AliUA1JetFinder.cxx:185
 AliUA1JetFinder.cxx:186
 AliUA1JetFinder.cxx:187
 AliUA1JetFinder.cxx:188
 AliUA1JetFinder.cxx:189
 AliUA1JetFinder.cxx:190
 AliUA1JetFinder.cxx:191
 AliUA1JetFinder.cxx:192
 AliUA1JetFinder.cxx:193
 AliUA1JetFinder.cxx:194
 AliUA1JetFinder.cxx:195
 AliUA1JetFinder.cxx:196
 AliUA1JetFinder.cxx:197
 AliUA1JetFinder.cxx:198
 AliUA1JetFinder.cxx:199
 AliUA1JetFinder.cxx:200
 AliUA1JetFinder.cxx:201
 AliUA1JetFinder.cxx:202
 AliUA1JetFinder.cxx:203
 AliUA1JetFinder.cxx:204
 AliUA1JetFinder.cxx:205
 AliUA1JetFinder.cxx:206
 AliUA1JetFinder.cxx:207
 AliUA1JetFinder.cxx:208
 AliUA1JetFinder.cxx:209
 AliUA1JetFinder.cxx:210
 AliUA1JetFinder.cxx:211
 AliUA1JetFinder.cxx:212
 AliUA1JetFinder.cxx:213
 AliUA1JetFinder.cxx:214
 AliUA1JetFinder.cxx:215
 AliUA1JetFinder.cxx:216
 AliUA1JetFinder.cxx:217
 AliUA1JetFinder.cxx:218
 AliUA1JetFinder.cxx:219
 AliUA1JetFinder.cxx:220
 AliUA1JetFinder.cxx:221
 AliUA1JetFinder.cxx:222
 AliUA1JetFinder.cxx:223
 AliUA1JetFinder.cxx:224
 AliUA1JetFinder.cxx:225
 AliUA1JetFinder.cxx:226
 AliUA1JetFinder.cxx:227
 AliUA1JetFinder.cxx:228
 AliUA1JetFinder.cxx:229
 AliUA1JetFinder.cxx:230
 AliUA1JetFinder.cxx:231
 AliUA1JetFinder.cxx:232
 AliUA1JetFinder.cxx:233
 AliUA1JetFinder.cxx:234
 AliUA1JetFinder.cxx:235
 AliUA1JetFinder.cxx:236
 AliUA1JetFinder.cxx:237
 AliUA1JetFinder.cxx:238
 AliUA1JetFinder.cxx:239
 AliUA1JetFinder.cxx:240
 AliUA1JetFinder.cxx:241
 AliUA1JetFinder.cxx:242
 AliUA1JetFinder.cxx:243
 AliUA1JetFinder.cxx:244
 AliUA1JetFinder.cxx:245
 AliUA1JetFinder.cxx:246
 AliUA1JetFinder.cxx:247
 AliUA1JetFinder.cxx:248
 AliUA1JetFinder.cxx:249
 AliUA1JetFinder.cxx:250
 AliUA1JetFinder.cxx:251
 AliUA1JetFinder.cxx:252
 AliUA1JetFinder.cxx:253
 AliUA1JetFinder.cxx:254
 AliUA1JetFinder.cxx:255
 AliUA1JetFinder.cxx:256
 AliUA1JetFinder.cxx:257
 AliUA1JetFinder.cxx:258
 AliUA1JetFinder.cxx:259
 AliUA1JetFinder.cxx:260
 AliUA1JetFinder.cxx:261
 AliUA1JetFinder.cxx:262
 AliUA1JetFinder.cxx:263
 AliUA1JetFinder.cxx:264
 AliUA1JetFinder.cxx:265
 AliUA1JetFinder.cxx:266
 AliUA1JetFinder.cxx:267
 AliUA1JetFinder.cxx:268
 AliUA1JetFinder.cxx:269
 AliUA1JetFinder.cxx:270
 AliUA1JetFinder.cxx:271
 AliUA1JetFinder.cxx:272
 AliUA1JetFinder.cxx:273
 AliUA1JetFinder.cxx:274
 AliUA1JetFinder.cxx:275
 AliUA1JetFinder.cxx:276
 AliUA1JetFinder.cxx:277
 AliUA1JetFinder.cxx:278
 AliUA1JetFinder.cxx:279
 AliUA1JetFinder.cxx:280
 AliUA1JetFinder.cxx:281
 AliUA1JetFinder.cxx:282
 AliUA1JetFinder.cxx:283
 AliUA1JetFinder.cxx:284
 AliUA1JetFinder.cxx:285
 AliUA1JetFinder.cxx:286
 AliUA1JetFinder.cxx:287
 AliUA1JetFinder.cxx:288
 AliUA1JetFinder.cxx:289
 AliUA1JetFinder.cxx:290
 AliUA1JetFinder.cxx:291
 AliUA1JetFinder.cxx:292
 AliUA1JetFinder.cxx:293
 AliUA1JetFinder.cxx:294
 AliUA1JetFinder.cxx:295
 AliUA1JetFinder.cxx:296
 AliUA1JetFinder.cxx:297
 AliUA1JetFinder.cxx:298
 AliUA1JetFinder.cxx:299
 AliUA1JetFinder.cxx:300
 AliUA1JetFinder.cxx:301
 AliUA1JetFinder.cxx:302
 AliUA1JetFinder.cxx:303
 AliUA1JetFinder.cxx:304
 AliUA1JetFinder.cxx:305
 AliUA1JetFinder.cxx:306
 AliUA1JetFinder.cxx:307
 AliUA1JetFinder.cxx:308
 AliUA1JetFinder.cxx:309
 AliUA1JetFinder.cxx:310
 AliUA1JetFinder.cxx:311
 AliUA1JetFinder.cxx:312
 AliUA1JetFinder.cxx:313
 AliUA1JetFinder.cxx:314
 AliUA1JetFinder.cxx:315
 AliUA1JetFinder.cxx:316
 AliUA1JetFinder.cxx:317
 AliUA1JetFinder.cxx:318
 AliUA1JetFinder.cxx:319
 AliUA1JetFinder.cxx:320
 AliUA1JetFinder.cxx:321
 AliUA1JetFinder.cxx:322
 AliUA1JetFinder.cxx:323
 AliUA1JetFinder.cxx:324
 AliUA1JetFinder.cxx:325
 AliUA1JetFinder.cxx:326
 AliUA1JetFinder.cxx:327
 AliUA1JetFinder.cxx:328
 AliUA1JetFinder.cxx:329
 AliUA1JetFinder.cxx:330
 AliUA1JetFinder.cxx:331
 AliUA1JetFinder.cxx:332
 AliUA1JetFinder.cxx:333
 AliUA1JetFinder.cxx:334
 AliUA1JetFinder.cxx:335
 AliUA1JetFinder.cxx:336
 AliUA1JetFinder.cxx:337
 AliUA1JetFinder.cxx:338
 AliUA1JetFinder.cxx:339
 AliUA1JetFinder.cxx:340
 AliUA1JetFinder.cxx:341
 AliUA1JetFinder.cxx:342
 AliUA1JetFinder.cxx:343
 AliUA1JetFinder.cxx:344
 AliUA1JetFinder.cxx:345
 AliUA1JetFinder.cxx:346
 AliUA1JetFinder.cxx:347
 AliUA1JetFinder.cxx:348
 AliUA1JetFinder.cxx:349
 AliUA1JetFinder.cxx:350
 AliUA1JetFinder.cxx:351
 AliUA1JetFinder.cxx:352
 AliUA1JetFinder.cxx:353
 AliUA1JetFinder.cxx:354
 AliUA1JetFinder.cxx:355
 AliUA1JetFinder.cxx:356
 AliUA1JetFinder.cxx:357
 AliUA1JetFinder.cxx:358
 AliUA1JetFinder.cxx:359
 AliUA1JetFinder.cxx:360
 AliUA1JetFinder.cxx:361
 AliUA1JetFinder.cxx:362
 AliUA1JetFinder.cxx:363
 AliUA1JetFinder.cxx:364
 AliUA1JetFinder.cxx:365
 AliUA1JetFinder.cxx:366
 AliUA1JetFinder.cxx:367
 AliUA1JetFinder.cxx:368
 AliUA1JetFinder.cxx:369
 AliUA1JetFinder.cxx:370
 AliUA1JetFinder.cxx:371
 AliUA1JetFinder.cxx:372
 AliUA1JetFinder.cxx:373
 AliUA1JetFinder.cxx:374
 AliUA1JetFinder.cxx:375
 AliUA1JetFinder.cxx:376
 AliUA1JetFinder.cxx:377
 AliUA1JetFinder.cxx:378
 AliUA1JetFinder.cxx:379
 AliUA1JetFinder.cxx:380
 AliUA1JetFinder.cxx:381
 AliUA1JetFinder.cxx:382
 AliUA1JetFinder.cxx:383
 AliUA1JetFinder.cxx:384
 AliUA1JetFinder.cxx:385
 AliUA1JetFinder.cxx:386
 AliUA1JetFinder.cxx:387
 AliUA1JetFinder.cxx:388
 AliUA1JetFinder.cxx:389
 AliUA1JetFinder.cxx:390
 AliUA1JetFinder.cxx:391
 AliUA1JetFinder.cxx:392
 AliUA1JetFinder.cxx:393
 AliUA1JetFinder.cxx:394
 AliUA1JetFinder.cxx:395
 AliUA1JetFinder.cxx:396
 AliUA1JetFinder.cxx:397
 AliUA1JetFinder.cxx:398
 AliUA1JetFinder.cxx:399
 AliUA1JetFinder.cxx:400
 AliUA1JetFinder.cxx:401
 AliUA1JetFinder.cxx:402
 AliUA1JetFinder.cxx:403
 AliUA1JetFinder.cxx:404
 AliUA1JetFinder.cxx:405
 AliUA1JetFinder.cxx:406
 AliUA1JetFinder.cxx:407
 AliUA1JetFinder.cxx:408
 AliUA1JetFinder.cxx:409
 AliUA1JetFinder.cxx:410
 AliUA1JetFinder.cxx:411
 AliUA1JetFinder.cxx:412
 AliUA1JetFinder.cxx:413
 AliUA1JetFinder.cxx:414
 AliUA1JetFinder.cxx:415
 AliUA1JetFinder.cxx:416
 AliUA1JetFinder.cxx:417
 AliUA1JetFinder.cxx:418
 AliUA1JetFinder.cxx:419
 AliUA1JetFinder.cxx:420
 AliUA1JetFinder.cxx:421
 AliUA1JetFinder.cxx:422
 AliUA1JetFinder.cxx:423
 AliUA1JetFinder.cxx:424
 AliUA1JetFinder.cxx:425
 AliUA1JetFinder.cxx:426
 AliUA1JetFinder.cxx:427
 AliUA1JetFinder.cxx:428
 AliUA1JetFinder.cxx:429
 AliUA1JetFinder.cxx:430
 AliUA1JetFinder.cxx:431
 AliUA1JetFinder.cxx:432
 AliUA1JetFinder.cxx:433
 AliUA1JetFinder.cxx:434
 AliUA1JetFinder.cxx:435
 AliUA1JetFinder.cxx:436
 AliUA1JetFinder.cxx:437
 AliUA1JetFinder.cxx:438
 AliUA1JetFinder.cxx:439
 AliUA1JetFinder.cxx:440
 AliUA1JetFinder.cxx:441
 AliUA1JetFinder.cxx:442
 AliUA1JetFinder.cxx:443
 AliUA1JetFinder.cxx:444
 AliUA1JetFinder.cxx:445
 AliUA1JetFinder.cxx:446
 AliUA1JetFinder.cxx:447
 AliUA1JetFinder.cxx:448
 AliUA1JetFinder.cxx:449
 AliUA1JetFinder.cxx:450
 AliUA1JetFinder.cxx:451
 AliUA1JetFinder.cxx:452
 AliUA1JetFinder.cxx:453
 AliUA1JetFinder.cxx:454
 AliUA1JetFinder.cxx:455
 AliUA1JetFinder.cxx:456
 AliUA1JetFinder.cxx:457
 AliUA1JetFinder.cxx:458
 AliUA1JetFinder.cxx:459
 AliUA1JetFinder.cxx:460
 AliUA1JetFinder.cxx:461
 AliUA1JetFinder.cxx:462
 AliUA1JetFinder.cxx:463
 AliUA1JetFinder.cxx:464
 AliUA1JetFinder.cxx:465
 AliUA1JetFinder.cxx:466
 AliUA1JetFinder.cxx:467
 AliUA1JetFinder.cxx:468
 AliUA1JetFinder.cxx:469
 AliUA1JetFinder.cxx:470
 AliUA1JetFinder.cxx:471
 AliUA1JetFinder.cxx:472
 AliUA1JetFinder.cxx:473
 AliUA1JetFinder.cxx:474
 AliUA1JetFinder.cxx:475
 AliUA1JetFinder.cxx:476
 AliUA1JetFinder.cxx:477
 AliUA1JetFinder.cxx:478
 AliUA1JetFinder.cxx:479
 AliUA1JetFinder.cxx:480
 AliUA1JetFinder.cxx:481
 AliUA1JetFinder.cxx:482
 AliUA1JetFinder.cxx:483
 AliUA1JetFinder.cxx:484
 AliUA1JetFinder.cxx:485
 AliUA1JetFinder.cxx:486
 AliUA1JetFinder.cxx:487
 AliUA1JetFinder.cxx:488
 AliUA1JetFinder.cxx:489
 AliUA1JetFinder.cxx:490
 AliUA1JetFinder.cxx:491
 AliUA1JetFinder.cxx:492
 AliUA1JetFinder.cxx:493
 AliUA1JetFinder.cxx:494
 AliUA1JetFinder.cxx:495
 AliUA1JetFinder.cxx:496
 AliUA1JetFinder.cxx:497
 AliUA1JetFinder.cxx:498
 AliUA1JetFinder.cxx:499
 AliUA1JetFinder.cxx:500
 AliUA1JetFinder.cxx:501
 AliUA1JetFinder.cxx:502
 AliUA1JetFinder.cxx:503
 AliUA1JetFinder.cxx:504
 AliUA1JetFinder.cxx:505
 AliUA1JetFinder.cxx:506
 AliUA1JetFinder.cxx:507
 AliUA1JetFinder.cxx:508
 AliUA1JetFinder.cxx:509
 AliUA1JetFinder.cxx:510
 AliUA1JetFinder.cxx:511
 AliUA1JetFinder.cxx:512
 AliUA1JetFinder.cxx:513
 AliUA1JetFinder.cxx:514
 AliUA1JetFinder.cxx:515
 AliUA1JetFinder.cxx:516
 AliUA1JetFinder.cxx:517
 AliUA1JetFinder.cxx:518
 AliUA1JetFinder.cxx:519
 AliUA1JetFinder.cxx:520
 AliUA1JetFinder.cxx:521
 AliUA1JetFinder.cxx:522
 AliUA1JetFinder.cxx:523
 AliUA1JetFinder.cxx:524
 AliUA1JetFinder.cxx:525
 AliUA1JetFinder.cxx:526
 AliUA1JetFinder.cxx:527
 AliUA1JetFinder.cxx:528
 AliUA1JetFinder.cxx:529
 AliUA1JetFinder.cxx:530
 AliUA1JetFinder.cxx:531
 AliUA1JetFinder.cxx:532
 AliUA1JetFinder.cxx:533
 AliUA1JetFinder.cxx:534
 AliUA1JetFinder.cxx:535
 AliUA1JetFinder.cxx:536
 AliUA1JetFinder.cxx:537
 AliUA1JetFinder.cxx:538