]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/JetTasks/AliAnalyseUE.cxx
Transition PWG4/JetTaske -> PWGJE
[u/mrichter/AliRoot.git] / PWG4 / JetTasks / AliAnalyseUE.cxx
diff --git a/PWG4/JetTasks/AliAnalyseUE.cxx b/PWG4/JetTasks/AliAnalyseUE.cxx
deleted file mode 100644 (file)
index 95536b7..0000000
+++ /dev/null
@@ -1,1436 +0,0 @@
-/*************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: A.Abrahantes, E.Lopez, S.Vallero                               *
- * Version 1.0                                                            *
- *                                                                        *
- * 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.                  *
- **************************************************************************/
-#include <TROOT.h>
-#include <TBranch.h>
-#include <TCanvas.h>
-#include <TChain.h>
-#include <TFile.h>
-#include <TH1F.h>
-#include <TH1I.h>
-#include <TH2F.h>
-#include <TList.h>
-#include <TLorentzVector.h>
-#include <TMath.h>
-#include <TObjArray.h>
-#include <TProfile.h>
-#include <TRandom.h>
-#include <TSystem.h>
-#include <TTree.h>
-#include <TVector3.h>
-
-#include "AliAnalyseUE.h"
-#include "AliAnalysisTaskUE.h"
-#include "AliAnalysisTask.h"
-#include "AliHistogramsUE.h"
-
-#include "AliAnalysisManager.h"
-#include "AliAODEvent.h"
-#include "AliESDEvent.h"
-#include "AliAODHandler.h"
-#include "AliAODInputHandler.h"
-#include "AliAODJet.h"
-#include "AliAODMCParticle.h"
-#include "AliAODTrack.h"
-#include "AliESDtrack.h"
-#include "AliKFVertex.h"
-#include "AliMCEvent.h"
-#include "AliMCEventHandler.h"
-#include "AliStack.h"
-
-#include "AliAnalysisHelperJetTasks.h"
-#include "AliGenPythiaEventHeader.h"
-#include "AliInputEventHandler.h"
-#include "AliLog.h"
-#include "AliStack.h"
-
-////////////////////////////////////////////////
-//--------------------------------------------- 
-// Class for transverse regions analysis
-//---------------------------------------------
-////////////////////////////////////////////////
-
-
-using namespace std;
-
-ClassImp(AliAnalyseUE)
-
-//-------------------------------------------------------------------
-AliAnalyseUE::AliAnalyseUE() :
-  TObject(),
-  //fTaskUE(0),
-  fkAOD(0x0),            
-  fkMC(0x0), 
-  fkESD(0x0),
-  fDebug(0),
-  fSimulateChJetPt(kFALSE),
-  fStack(0x0), 
-  fAnaType(1),         
-  fAreaReg(1.5393), // Pi*0.7*0.7
-  fConeRadius(0.7),
-  fFilterBit(0xFF),
-  fRegionType(1),
-  fUseChargeHadrons(kFALSE),
-  fUseChPartJet(kFALSE),
-  fUsePositiveCharge(kTRUE),
-  fUseSingleCharge(kFALSE),
-  fOrdering(1),
-  fJet1EtaCut(0.2),
-  fJet2DeltaPhiCut(2.616),    // 150 degrees
-  fJet2RatioPtCut(0.8),
-  fJet3PtCut(15.),
-  fTrackEtaCut(0.9),
-  fTrackPtCut(0.),
-  fHistos(0x0),
-  fSumPtRegionPosit(0.),
-  fSumPtRegionNegat(0.),
-  fSumPtRegionForward(0.),
-  fSumPtRegionBackward(0.),
-  fMaxPartPtRegion(0.),
-  fNTrackRegionPosit(0),
-  fNTrackRegionNegat(0),
-  fNTrackRegionForward(0),
-  fNTrackRegionBackward(0),
-  fSettingsTree(0x0),
-  fLtLabel(-999),
-  fLtMCLabel(-999)
-{
-  // constructor
-}
-
-
-//-------------------------------------------------------------------
-AliAnalyseUE::AliAnalyseUE(const AliAnalyseUE & original) :
-  TObject(original),
-  //fTaskUE(original.fTaskUE),
-  fkAOD(original.fkAOD),            
-  fkMC(original.fkMC),            
-  fkESD(original.fkESD),            
-  fDebug(original.fDebug),
-  fSimulateChJetPt(original.fSimulateChJetPt),
-  fStack(original.fStack),
-  fAnaType(original.fAnaType),
-  fAreaReg(original.fAreaReg),
-  fConeRadius(original.fConeRadius),
-  fFilterBit(original.fFilterBit),
-  fRegionType(original.fRegionType),
-  fUseChargeHadrons(original.fUseChargeHadrons),
-  fUseChPartJet(original.fUseChPartJet),
-  fUsePositiveCharge(original.fUsePositiveCharge),
-  fUseSingleCharge(original.fUseSingleCharge),
-  fOrdering(original.fOrdering),
-  fJet1EtaCut(original.fJet1EtaCut),
-  fJet2DeltaPhiCut(original.fJet2DeltaPhiCut),
-  fJet2RatioPtCut(original.fJet2RatioPtCut),
-  fJet3PtCut(original.fJet3PtCut),
-  fTrackEtaCut(original.fTrackEtaCut),
-  fTrackPtCut(original.fTrackPtCut),
-  fHistos(original.fHistos),
-  fSumPtRegionPosit(original.fSumPtRegionPosit),
-  fSumPtRegionNegat(original.fSumPtRegionNegat),
-  fSumPtRegionForward(original.fSumPtRegionForward),
-  fSumPtRegionBackward(original.fSumPtRegionBackward),
-  fMaxPartPtRegion(original.fMaxPartPtRegion),
-  fNTrackRegionPosit(original.fNTrackRegionPosit),
-  fNTrackRegionNegat(original.fNTrackRegionNegat),
-  fNTrackRegionForward(original.fNTrackRegionForward),
-  fNTrackRegionBackward(original.fNTrackRegionBackward),
-  fSettingsTree(original.fSettingsTree),
-  fLtLabel(original.fLtLabel),
-  fLtMCLabel(original.fLtMCLabel)
-{
-  //copy constructor   
-}
-
-//-------------------------------------------------------------------
-AliAnalyseUE & AliAnalyseUE::operator = (const AliAnalyseUE & /*source*/)
-{
-  // assignment operator
-  return *this;
-}
-
-
-//-------------------------------------------------------------------
-AliAnalyseUE::~AliAnalyseUE(){
-
-  //clear memory
-
-  
-  
-}
-
-
-//-------------------------------------------------------------------
-void AliAnalyseUE::AnalyseMC(TVector3 *jetVect,AliMCEvent *mcEvent, AliGenPythiaEventHeader *pythiaGenHeader,Int_t conePosition, Bool_t useAliStack, Bool_t constrainDistance, Double_t minDistance){
-
-  // Execute the analysis in case of MC input
-  fSumPtRegionPosit = 0.;
-  fSumPtRegionNegat = 0.;
-  fSumPtRegionForward = 0.;
-  fSumPtRegionBackward = 0.;
-  fMaxPartPtRegion = 0.;
-  fNTrackRegionPosit = 0;
-  fNTrackRegionNegat = 0;
-  fNTrackRegionForward = 0;
-  fNTrackRegionBackward = 0;
-
-  static Double_t const  kPI     = TMath::Pi();
-  static Double_t const  k270rad = 270.*kPI/180.;
-
-  //Get Jets from MC header
-  Int_t nPythiaGenJets = pythiaGenHeader->NTriggerJets();
-  AliAODJet pythiaGenJets[4];
-  TVector3 jetVectnew[4];
-  Int_t iCount = 0;
-  for(int ip = 0;ip < nPythiaGenJets;++ip){
-       if (iCount>3) break;
-       Float_t p[4];
-       pythiaGenHeader->TriggerJet(ip,p);
-       TVector3 tempVect(p[0],p[1],p[2]);
-       if ( TMath::Abs(tempVect.Eta())>fJet1EtaCut ) continue;
-       pythiaGenJets[iCount].SetPxPyPzE(p[0],p[1],p[2],p[3]);
-       jetVectnew[iCount].SetXYZ(pythiaGenJets[iCount].Px(), pythiaGenJets[iCount].Py(), pythiaGenJets[iCount].Pz());
-       iCount++;
-       }
-
-  if (!iCount) return;// no jet in eta acceptance
-    
-  //Search the index of the nearest MC jet to the leading jet reconstructed from the input data
-  Int_t index = 0;
-  if (constrainDistance){
-       Float_t deltaR = 0.;
-       Float_t dRTemp = 0.;
-       for (Int_t i=0; i<iCount; i++){
-               if (!i) {
-                       dRTemp = jetVectnew[i].DeltaR(jetVect[0]);
-                       index = i;
-                       }
-
-               deltaR = jetVectnew[i].DeltaR(jetVect[0]);
-               if (deltaR < dRTemp){
-                       index = i;
-                       dRTemp = deltaR;
-                       }
-               }
-   
-       if (jetVectnew[index].DeltaR(jetVect[0]) > minDistance) return;
-       }
-
-  //Let's add some taste to jet and simulate pt of charged alone 
-  //eta and phi are kept as original
-  //Play a Normal Distribution
-  Float_t random = 1.;  
-  if (fSimulateChJetPt){
-       while(1){
-               random = gRandom->Gaus(0.6,0.25);
-               if (random > 0. && random < 1. && 
-               (random * jetVectnew[index].Pt()>6.)) break;
-               }
-       }
-    
-  //Set new Pt & Fill histogram accordingly
-  Double_t maxPtJet1 = random * jetVectnew[index].Pt();  
-    
-  fHistos->FillHistogram("hEleadingPt", maxPtJet1 );    
-    
-  if (useAliStack){//Try Stack Information to perform UE analysis
-    
-       AliStack* mcStack = mcEvent->Stack();//Load Stack
-       Int_t nTracksMC = mcStack->GetNtrack();
-       for (Int_t iTracks = 0; iTracks < nTracksMC; iTracks++) {
-               //Cuts
-               if(!(mcStack->IsPhysicalPrimary(iTracks))) continue;
-        
-               TParticle* mctrk = mcStack->Particle(iTracks);
-        
-               Double_t charge = mctrk->GetPDG()->Charge();
-               Double_t pT = mctrk->Pt();
-               Double_t eta = mctrk->Eta();
-               Int_t pdgCode = mctrk->GetPdgCode();
-
-               if (!TrackMCSelected(charge, pT, eta, pdgCode))continue;
-
-               TVector3 partVect(mctrk->Px(), mctrk->Py(), mctrk->Pz());
-               Double_t deltaPhi = jetVectnew[index].DeltaPhi(partVect)+k270rad;
-               if( deltaPhi > 2.*TMath::Pi() )  deltaPhi-= 2.*TMath::Pi();
-               fHistos->FillHistogram("hdNdEtaPhiDist",deltaPhi, maxPtJet1 ); 
-        
-               fHistos->FillHistogram("hFullRegPartPtDistVsEt", mctrk->Pt(), maxPtJet1 ); 
-        
-               //We are not interested on stack organization but don't loose track of info
-        
-               TVector3 tempVector =  jetVectnew[0];
-               jetVectnew[0] = jetVectnew[index];
-               jetVectnew[index] = tempVector;
-        
-               Int_t region = IsTrackInsideRegion( jetVectnew, &partVect, conePosition );  
-        
-               if (region == 1) {
-                       if( fMaxPartPtRegion < mctrk->Pt() ) fMaxPartPtRegion = mctrk->Pt();
-                       fSumPtRegionPosit += mctrk->Pt();
-                       fNTrackRegionPosit++;
-                       fHistos->FillHistogram("hTransRegPartPtDistVsEt", mctrk->Pt(), maxPtJet1 );
-                       }
-               if (region == -1) {
-                       if( fMaxPartPtRegion < mctrk->Pt() ) fMaxPartPtRegion = mctrk->Pt();
-                       fSumPtRegionNegat += mctrk->Pt();
-                       fNTrackRegionNegat++;
-                       fHistos->FillHistogram("hTransRegPartPtDistVsEt", mctrk->Pt(), maxPtJet1 );
-                       }
-               if (region == 2){ //forward
-                       fSumPtRegionForward += mctrk->Pt();
-                       fNTrackRegionForward++;
-                       fHistos->FillHistogram("hRegForwardPartPtDistVsEt", mctrk->Pt(), maxPtJet1 );
-                       }
-               if (region == -2){ //backward
-                       fSumPtRegionBackward += mctrk->Pt();
-                       fNTrackRegionBackward++;
-                       fHistos->FillHistogram("hRegBackwardPartPtDistVsEt", mctrk->Pt(), maxPtJet1 );
-                       }
-               } //end loop on stack particles     
-    }else{//Try mc Particle
-
-      TClonesArray* farray = (TClonesArray*)fkAOD->FindListObject("mcparticles");
-       
-      Int_t ntrks = farray->GetEntries();
-      if (fDebug>1) AliInfo(Form("In UE MC analysis tracks %d \n",ntrks));
-      for (Int_t i =0 ; i < ntrks; i++){   
-       AliAODMCParticle* mctrk = (AliAODMCParticle*)farray->At(i);
-        //Cuts
-        if (!(mctrk->IsPhysicalPrimary())) continue;
-        //if (!(mctrk->IsPrimary())) continue;
-        
-       Double_t charge = mctrk->Charge(); 
-       Double_t pT = mctrk->Pt();
-       Double_t eta = mctrk->Eta();
-       Int_t pdgCode = mctrk->GetPdgCode();
-
-       if (!TrackMCSelected(charge, pT, eta, pdgCode))continue;
-        
-        TVector3 partVect(mctrk->Px(), mctrk->Py(), mctrk->Pz());
-
-        Double_t deltaPhi = jetVectnew[index].DeltaPhi(partVect)+k270rad;
-        if( deltaPhi > 2.*TMath::Pi() )  deltaPhi-= 2.*TMath::Pi();
-        fHistos->FillHistogram("hdNdEtaPhiDist", deltaPhi, maxPtJet1 );
-
-       fHistos->FillHistogram("hFullRegPartPtDistVsEt", mctrk->Pt(), maxPtJet1 );
-        
-        //We are not interested on stack organization but don't loose track of info
-        TVector3 tempVector =  jetVectnew[0];
-        jetVectnew[0] = jetVectnew[index];
-        jetVectnew[index] = tempVector;
-        
-        Int_t region = IsTrackInsideRegion( jetVectnew, &partVect, conePosition );  
-        
-        if (region == 1) { //right
-          if( fMaxPartPtRegion < mctrk->Pt() ) fMaxPartPtRegion = mctrk->Pt();
-          fSumPtRegionPosit += mctrk->Pt();
-          fNTrackRegionPosit++;
-         fHistos->FillHistogram("hTransRegPartPtDistVsEt", mctrk->Pt(), maxPtJet1 );
-        }
-        if (region == -1) { //left
-          if( fMaxPartPtRegion < mctrk->Pt() ) fMaxPartPtRegion = mctrk->Pt();
-          fSumPtRegionNegat += mctrk->Pt();
-          fNTrackRegionNegat++;
-          fHistos->FillHistogram("hTransRegPartPtDistVsEt", mctrk->Pt(), maxPtJet1 );
-        }
-        if (region == 2){ //forward
-          fSumPtRegionForward += mctrk->Pt();
-          fNTrackRegionForward++;
-          fHistos->FillHistogram("hRegForwardPartPtDistVsEt", mctrk->Pt(), maxPtJet1 );
-        }
-        if (region == -2){ //backward
-          fSumPtRegionBackward += mctrk->Pt();
-          fNTrackRegionBackward++;
-         fHistos->FillHistogram("hRegBackwardPartPtDistVsEt", mctrk->Pt(), maxPtJet1 );
-        }
-        
-      }//end loop AliAODMCParticle tracks
-   }  
-}
-
-
-
-//-------------------------------------------------------------------
-Bool_t AliAnalyseUE::AnaTypeSelection(TVector3 *jetVect ){
-
-  // Cut events by jets topology
-  // anaType:
-  //     1 = inclusive,
-  //         - Jet1 |eta| < jet1EtaCut
-  //     2 = back to back inclusive
-  //         - fulfill case 1
-  //         - |Jet1.Phi - Jet2.Phi| > jet2DeltaPhiCut
-  //         - Jet2.Pt/Jet1Pt > jet2RatioPtCut
-  //     3 = back to back exclusive
-  //         - fulfill case 2
-  //         - Jet3.Pt < jet3PtCut
-
-  Double_t eta=jetVect[0].Eta();
-  if( TMath::Abs(eta) > fJet1EtaCut) {
-       if( fDebug > 1 ) AliInfo("\n   Skipping Event...Jet1 |eta| > fJet1EtaCut");
-       return kFALSE;
-       }
-  // back to back inclusive
-  if( fAnaType > 1 && fAnaType < 4 && jetVect[1].Pt() < 0. ) {
-       if( fDebug > 1 ) AliInfo("\n   Skipping Event... no second Jet found");
-       return kFALSE;
-       }
-  if( fAnaType > 1 && fAnaType < 4 && jetVect[1].Pt() > 0. ) {
-       if( TMath::Abs(jetVect[0].DeltaPhi(jetVect[1])) < fJet2DeltaPhiCut ||
-       jetVect[1].Pt()/jetVect[0].Pt() < fJet2RatioPtCut ) {
-               if( fDebug > 1 ) AliInfo("\n   Skipping Event... |Jet1.Phi - Jet2.Phi| < fJet2DeltaPhiCut");
-               return kFALSE;
-               }
-       }
-  // back to back exclusive
-  if( fAnaType > 2 && fAnaType < 4 && jetVect[2].Pt() > 0. ) {
-       if( jetVect[2].Pt() > fJet3PtCut ) {
-               if( fDebug > 1 ) AliInfo("\n   Skipping Event... Jet3.Pt > fJet3PtCut ");
-               return kFALSE;
-               }
-       }
-  return kTRUE;  
-}
-
-
-//-------------------------------------------------------------------
-void AliAnalyseUE::FillRegions(Bool_t isNorm2Area,  TVector3 *jetVect){
-  
-  // Fill the different topological regions
-  Double_t maxPtJet1 = jetVect[0].Pt();
-  static Double_t const  kPI     = TMath::Pi();
-  static Double_t const  k120rad = 120.*kPI/180.;
-  Double_t const kMyTolerance = 0.0000001;
-
-  //Area for Normalization 
-  // Forward and backward
-  Double_t normArea = 1.;
-  // Transverse
-  if (isNorm2Area) {
-       SetRegionArea(jetVect);
-       normArea =  2.*fTrackEtaCut*k120rad ;
-       } else fAreaReg = 1.;
-  
-  Double_t avePosRegion = (fNTrackRegionPosit) ? fSumPtRegionPosit/fNTrackRegionPosit : 0.;
-  Double_t aveNegRegion = (fNTrackRegionNegat) ? fSumPtRegionNegat/fNTrackRegionNegat : 0.;
-  if( avePosRegion > aveNegRegion ) {
-     FillAvePartPtRegion( maxPtJet1, avePosRegion/fAreaReg, aveNegRegion/fAreaReg );
-  } else {
-     FillAvePartPtRegion( maxPtJet1, aveNegRegion/fAreaReg, avePosRegion/fAreaReg );
-  }
-  
-  //How quantities will be sorted before Fill Min and Max Histogram
-  //  1=Plots will be CDF-like
-  //  2=Plots will be Marchesini-like
-  //  3=Minimum zone is selected as the one having lowest pt per track 
-  if( fOrdering == 1 ) {
-    if( fSumPtRegionPosit > fSumPtRegionNegat ) {
-      FillSumPtRegion( maxPtJet1, fSumPtRegionPosit/fAreaReg, fSumPtRegionNegat/fAreaReg );
-    } else {
-      FillSumPtRegion( maxPtJet1, fSumPtRegionNegat/fAreaReg, fSumPtRegionPosit/fAreaReg );
-    }
-    if (fNTrackRegionPosit > fNTrackRegionNegat ) {
-      FillMultRegion( maxPtJet1, fNTrackRegionPosit/fAreaReg, fNTrackRegionNegat/fAreaReg, fSumPtRegionNegat/fAreaReg );
-    } else {
-      FillMultRegion( maxPtJet1, fNTrackRegionNegat/fAreaReg, fNTrackRegionPosit/fAreaReg, fSumPtRegionPosit/fAreaReg );
-    }
-  } else if( fOrdering == 2 ) {
-    if (fSumPtRegionPosit > fSumPtRegionNegat) {
-      FillSumPtRegion( maxPtJet1, fSumPtRegionPosit/fAreaReg, fSumPtRegionNegat/fAreaReg );
-      FillMultRegion( maxPtJet1, fNTrackRegionPosit/fAreaReg, fNTrackRegionNegat/fAreaReg, fSumPtRegionNegat/fAreaReg );
-    } else {
-      FillSumPtRegion( maxPtJet1, fSumPtRegionNegat/fAreaReg, fSumPtRegionPosit/fAreaReg );
-      FillMultRegion( maxPtJet1, fNTrackRegionNegat/fAreaReg, fNTrackRegionPosit/fAreaReg, fSumPtRegionPosit/fAreaReg );
-    }
-  } else if( fOrdering == 3 ){
-     if (avePosRegion > aveNegRegion) {
-        FillSumPtRegion( maxPtJet1, fSumPtRegionPosit/fAreaReg, fSumPtRegionNegat/fAreaReg );
-        FillMultRegion( maxPtJet1, fNTrackRegionPosit/fAreaReg, fNTrackRegionNegat/fAreaReg, fSumPtRegionNegat/fAreaReg );
-     }else{
-        FillSumPtRegion( maxPtJet1, fSumPtRegionNegat/fAreaReg, fSumPtRegionPosit/fAreaReg );
-        FillMultRegion( maxPtJet1, fNTrackRegionNegat/fAreaReg, fNTrackRegionPosit/fAreaReg, fSumPtRegionPosit/fAreaReg );
-     }
-  }
-  fHistos->FillHistogram("hRegionMaxPartPtMaxVsEt",maxPtJet1, fMaxPartPtRegion);  
-  
-  // Compute pedestal like magnitudes
-  fHistos->FillHistogram("hRegionDiffSumPtVsEt",maxPtJet1, (TMath::Abs(fSumPtRegionPosit-fSumPtRegionNegat)/(2.0*fAreaReg))+kMyTolerance);
-  fHistos->FillHistogram("hRegionAveSumPtVsEt", maxPtJet1, (fSumPtRegionPosit+fSumPtRegionNegat)/(2.0*fAreaReg));
-
-  // Transverse as a whole
-  fHistos->FillHistogram("hRegTransMult", maxPtJet1, fNTrackRegionPosit + fNTrackRegionNegat, (fNTrackRegionPosit + fNTrackRegionNegat)/(2.0*fAreaReg));
- fHistos->FillHistogram("hRegTransSumPtVsMult",maxPtJet1, fNTrackRegionPosit + fNTrackRegionNegat , (fSumPtRegionNegat + fSumPtRegionPosit)/(2.0 *fAreaReg));
-
-  // Fill Histograms for Forward and away side w.r.t. leading jet direction
-  // Pt dependence
-  //fHistos->FillHistogram("hRegForwardSumPtVsEt",maxPtJet1, fSumPtRegionForward/normArea );
-  //fHistos->FillHistogram("hRegForwardMultVsEt",maxPtJet1, fNTrackRegionForward/normArea );
-  //fHistos->FillHistogram("hRegBackwardSumPtVsEt",maxPtJet1, fSumPtRegionBackward/normArea );
-  //fHistos->FillHistogram("hRegBackwardMultVsEt",maxPtJet1, fNTrackRegionBackward/normArea);
-  
-  // Multiplicity dependence
-  fHistos->FillHistogram("hRegForwardMult", maxPtJet1, fNTrackRegionForward, fNTrackRegionForward/normArea);
-  fHistos->FillHistogram("hRegForwardSumPtvsMult", maxPtJet1, fNTrackRegionForward,fSumPtRegionForward/normArea);
-  fHistos->FillHistogram("hRegBackwardMult", maxPtJet1, fNTrackRegionBackward, fNTrackRegionBackward/normArea );
-  fHistos->FillHistogram("hRegBackwardSumPtvsMult", maxPtJet1, fNTrackRegionBackward,fSumPtRegionBackward/normArea);
-}
-
-
-//-------------------------------------------------------------------
-void AliAnalyseUE::FindMaxMinRegions(TVector3 *jetVect, Int_t conePosition, Int_t mctrue=0, Int_t eff=0){
-  // If mctrue = 1 consider branch AliAODMCParticles  
-  // If    eff = 1 track cuts for efficiency studies 
-
-  // Identify the different topological zones
-  fSumPtRegionPosit = 0.;
-  fSumPtRegionNegat = 0.;
-  fSumPtRegionForward = 0.;
-  fSumPtRegionBackward = 0.;
-  fMaxPartPtRegion = 0.;
-  fNTrackRegionPosit = 0;
-  fNTrackRegionNegat = 0;
-  fNTrackRegionForward = 0;
-  fNTrackRegionBackward = 0;
-  static Double_t const  kPI     = TMath::Pi();
-  static Double_t const  kTWOPI  = 2.*kPI;
-  static Double_t const  k270rad = 270.*kPI/180.;
-  Double_t const kMyTolerance = 0.0000001;
-
-    Int_t nTracks=0;
-    TClonesArray *tca = 0;
-    if (!mctrue) {
-       nTracks = fkAOD->GetNTracks();
-       if (fDebug > 1) AliInfo(Form(" ==== AOD tracks = %d \n ",nTracks));
-    }else{
-       tca = dynamic_cast<TClonesArray*>(fkAOD->FindListObject(AliAODMCParticle::StdBranchName())); 
-       if(!tca){
-         Printf("%s:%d No AODMC Branch found !!!",(char*)__FILE__,__LINE__);
-         return;
-       }
-       nTracks = tca->GetEntriesFast();
-       if (fDebug > 1) AliInfo(Form(" ==== AOD MC particles = %d \n ",nTracks));
-       }
-    
-    //If UE task d0 distribution is not filled
-    Int_t flag_tmp=0;
-    if (fHistos->GetHistograms()->FindObject("hDCAxy")) flag_tmp = 1;
-
-    for (Int_t ipart=0; ipart<nTracks; ++ipart) {
-    AliVParticle *part; 
-    AliAODTrack *partRECO=0;
-    AliAODMCParticle *partMC=0;
-    Double_t charge=-999.;
-    Double_t pt=-999.;
-    Double_t eta=-999.;
-    Int_t pdgcode=-999; 
-    TString suffix("");
-
-    // get track reco or true
-    if (!mctrue){
-        partRECO = dynamic_cast<AliAODTrack*>(fkAOD->GetTrack(ipart));
-        part = partRECO;
-        }
-    else {
-       partMC = dynamic_cast<AliAODMCParticle*>(tca->At(ipart)); 
-        part = partMC;
-       if(!partMC)return;
-       charge = partMC->Charge();
-       pt = partMC->Pt();
-        eta = partMC->Eta();
-       pdgcode = partMC->GetPdgCode();
-        suffix.Append("MC"); 
-    } 
-
-    if(!part)return; 
-
-    if (fDebug > 1) AliInfo(Form(" ==== AOD track = %d pt = %f charge = %d \n ",ipart,part->Pt(),part->Charge()));
-    
-    // track selection
-    if (!mctrue && !eff ){
-       if( !TrackSelected(partRECO)) continue; //track selection for data and MC reconstructed
-        if (flag_tmp){
-               if (fkESD && fkESD->GetNumberOfTracks() ){
-                       AliInfo("READING ESD *************************************************");
-                       Int_t id = partRECO->GetID();
-                       AliESDtrack *trackESD;
-                       trackESD = (AliESDtrack*)fkESD->GetTrack(id);
-                       Float_t d0;
-                       Float_t z;
-                       trackESD->GetImpactParameters(d0,z);
-                       fHistos->FillHistogram("hDCAxy", d0, jetVect[0].Pt());
-               }else AliInfo("NO TRACKS ************************************************") ;
-       }
-       }
-    
-    if (!mctrue && eff){
-       if (!TrackSelectedEfficiency(partRECO )) continue; //track selection for MC reconstructed for efficiency studies
-               if(fkESD && fkESD->GetNumberOfTracks()){
-                       Int_t id = partRECO->GetID();
-                       AliESDtrack * trackESD = (AliESDtrack*) fkESD->GetTrack(id);
-                       Float_t d0;
-                       Float_t z;
-                       trackESD->GetImpactParameters(d0,z);
-                       fHistos->FillHistogram("hDCAxyPrimary", d0, jetVect[0].Pt()); 
-                       }
-       }
-
-    if (mctrue){
-        if ( !(TrackMCSelected(charge, pt, eta, pdgcode) && partMC->IsPhysicalPrimary())) continue; //track selection for MC true
-      }
-      
-    TVector3 partVect(part->Px(), part->Py(), part->Pz());
-    Bool_t isFlagPart = kTRUE;
-    Double_t deltaPhi = jetVect[0].DeltaPhi(partVect)+k270rad;
-    if( deltaPhi > kTWOPI )  deltaPhi-= kTWOPI;
-    if (fAnaType != 4 ) fHistos->FillHistogram(Form("hdNdEtaPhiDist%s",suffix.Data()),deltaPhi, jetVect[0].Pt());
-    else if (TMath::Abs(deltaPhi-k270rad) >= kMyTolerance && TMath::Abs(jetVect[0].Eta()-partVect.Eta()) >= kMyTolerance){
-       fHistos->FillHistogram(Form("hdNdEtaPhiDist%s",suffix.Data()),deltaPhi, jetVect[0].Pt());
-       isFlagPart = kFALSE;
-       }
-      
-    fHistos->FillHistogram(Form("hFullRegPartPtDistVsEt%s",suffix.Data()), part->Pt(), jetVect[0].Pt());  
-    
-    Int_t region = IsTrackInsideRegion( jetVect, &partVect, conePosition );  
-    if (region == 1) {
-       if( fMaxPartPtRegion < part->Pt() ) fMaxPartPtRegion = part->Pt();
-        fSumPtRegionPosit += part->Pt();
-        fNTrackRegionPosit++;
-       fHistos->FillHistogram(Form("hTransRegPartPtDistVsEt%s",suffix.Data()),part->Pt(), jetVect[0].Pt());
-       }
-    if (region == -1) {
-       if( fMaxPartPtRegion < part->Pt() ) fMaxPartPtRegion = part->Pt();
-        fSumPtRegionNegat += part->Pt();
-        fNTrackRegionNegat++;
-       fHistos->FillHistogram(Form("hTransRegPartPtDistVsEt%s",suffix.Data()),part->Pt(), jetVect[0].Pt());
-       }
-    if (region == 2){ //forward
-       fSumPtRegionForward += part->Pt();
-        fNTrackRegionForward++;
-       fHistos->FillHistogram(Form("hRegForwardPartPtDistVsEt%s",suffix.Data()),part->Pt(), jetVect[0].Pt());
-       }
-    if (region == -2){ //backward
-       fSumPtRegionBackward += part->Pt();
-        fNTrackRegionBackward++;
-       fHistos->FillHistogram(Form("hRegBackwardPartPtDistVsEt%s",suffix.Data()),part->Pt(), jetVect[0].Pt());
-       }
-    }//end loop AOD tracks
-
-}
-
-//-------------------------------------------------------------------
-/*TVector3 AliAnalyseUE::GetLeadingTracksMC(AliMCEvent *mcEvent){
-   
-  fkMC = mcEvent; 
-
-  Double_t maxPtJet1 = 0.; 
-  Int_t    index1 = -1;
-  
-  TVector3 jetVect[3];
-  
-  jetVect[0].SetPtEtaPhi(-1.,-1.,-1.);
-  jetVect[1].SetPtEtaPhi(-1.,-1.,-1.);
-  jetVect[2].SetPtEtaPhi(-1.,-1.,-1.);
-  
-  Int_t nJets = 0;
-  
-  TObjArray* tracks = SortChargedParticlesMC();
-    if( tracks ) {
-       nJets = tracks->GetEntriesFast();
-       if( nJets > 0 ) {
-               index1 = 0;
-               TParticle* jet = (TParticle*)tracks->At(0);
-               maxPtJet1 = jet->Pt();
-               jetVect[0].SetXYZ(jet->Px(), jet->Py(), jet->Pz());
-               }
-       tracks->Clear();
-       delete tracks; 
-  }
-  return *jetVect;
-
-}
-*/
-
-//-------------------------------------------------------------------
-TVector3 AliAnalyseUE::GetLeadingTracksMC(AliMCEvent *mcEvent){
-   
-  fkMC = mcEvent; 
-
-  Double_t maxPtJet1 = 0.; 
-  Int_t    index1 = -1;
-  
-  TVector3 jetVect[3];
-  
-  jetVect[0].SetPtEtaPhi(-1.,-1.,-1.);
-  jetVect[1].SetPtEtaPhi(-1.,-1.,-1.);
-  jetVect[2].SetPtEtaPhi(-1.,-1.,-1.);
-  
-  Int_t nJets = 0;
-  
-  TObjArray* tracks = SortChargedParticlesMC();
-    if( tracks ) {
-       nJets = tracks->GetEntriesFast();
-       if( nJets > 0 ) {
-               index1 = 0;
-               AliAODMCParticle* jet = (AliAODMCParticle*)tracks->At(0);
-               fLtMCLabel = jet->GetLabel();
-               maxPtJet1 = jet->Pt();
-               jetVect[0].SetXYZ(jet->Px(), jet->Py(), jet->Pz());
-               }
-       tracks->Clear();
-       delete tracks; 
-  }
-  return *jetVect;
-
-}
-
-//-------------------------------------------------------------------
-TVector3 AliAnalyseUE::GetOrderedClusters(TString aodBranch, Bool_t chargedJets, Double_t chJetPtMin){ 
-
-  // jets from AOD, on-the-fly or leading particle
-  Double_t maxPtJet1 = 0.; 
-  Int_t    index1 = -1;
-  Double_t maxPtJet2 = 0.;   // jet 2 need for back to back inclusive
-  Int_t    index2 = -1;
-  Double_t maxPtJet3 = 0.;   // jet 3 need for back to back exclusive
-  Int_t    index3 = -1;
-  TVector3 jetVect[3];
-  
-  jetVect[0].SetPtEtaPhi(-1.,-1.,-1.);
-  jetVect[1].SetPtEtaPhi(-1.,-1.,-1.);
-  jetVect[2].SetPtEtaPhi(-1.,-1.,-1.);
-  
-  Int_t nJets = 0;
-  //TClonesArray* fArrayJets;
-  TObjArray* arrayJets;
-  // 1) JETS FROM AOD BRANCH (standard, non-standard or delta)
-  if (!chargedJets && fAnaType != 4 ) { 
-       AliInfo(" ==== Read AODs  !");
-       AliInfo(Form(" ====  Reading Branch: %s  ", aodBranch.Data()));
-       arrayJets = (TObjArray*)fkAOD->GetList()->FindObject(aodBranch.Data());
-       if (!arrayJets){
-              AliFatal(" No jet-array! ");
-              return *jetVect;
-              }
-
-       // Find Leading Jets 1,2,3 
-       // (could be skipped if Jets are sort by Pt...)
-       nJets=arrayJets->GetEntries();
-       for( Int_t i=0; i<nJets; ++i ) {
-               AliAODJet* jet = (AliAODJet*)arrayJets->At(i);
-               Double_t jetPt = jet->Pt();//*1.666; // FIXME Jet Pt Correction ?????!!!
-               if( jetPt > maxPtJet1 ) {
-                       maxPtJet3 = maxPtJet2; index3 = index2;
-                       maxPtJet2 = maxPtJet1; index2 = index1;
-                       maxPtJet1 = jetPt; index1 = i;
-                       } else if( jetPt > maxPtJet2 ) {
-                       maxPtJet3 = maxPtJet2; index3 = index2;
-                       maxPtJet2 = jetPt; index2 = i;
-                       } else if( jetPt > maxPtJet3 ) {
-                       maxPtJet3 = jetPt; index3 = i;
-                       }
-               }
-
-       if( index1 != -1 ) {
-               AliAODJet *jet =(AliAODJet*) arrayJets->At(index1);
-               if(jet)jetVect[0].SetXYZ(jet->Px(), jet->Py(), jet->Pz());
-               }
-       if( index2 != -1 ) {
-               AliAODJet* jet= (AliAODJet*) arrayJets->At(index2);
-               if(jet)jetVect[1].SetXYZ(jet->Px(), jet->Py(), jet->Pz());
-               }
-       if( index3 != -1 ) {
-                       AliAODJet* jet = (AliAODJet*) arrayJets->At(index3);
-               if(jet)jetVect[2].SetXYZ(jet->Px(), jet->Py(), jet->Pz());
-               }
-    
-  }
-
-
-  // 2) ON-THE-FLY CDF ALGORITHM
-  if (chargedJets){ 
-       arrayJets = FindChargedParticleJets(chJetPtMin);
-        if( arrayJets ) {
-               nJets = arrayJets->GetEntriesFast();
-               if( nJets > 0 ) {
-                       index1 = 0;
-                       AliAODJet* jet = (AliAODJet*)arrayJets->At(0);
-                       maxPtJet1 = jet->Pt();
-                       jetVect[0].SetXYZ(jet->Px(), jet->Py(), jet->Pz());
-                       }
-               if( nJets > 1 ) {
-                       index2 = 1;
-                       AliAODJet* jet = (AliAODJet*)arrayJets->At(1);
-                       maxPtJet2 = jet->Pt();
-                       jetVect[1].SetXYZ(jet->Px(), jet->Py(), jet->Pz());
-                       }
-               if( nJets > 2 ) {
-                       index3 = 2;
-                       AliAODJet* jet = (AliAODJet*)arrayJets->At(2);
-                       maxPtJet3 = jet->Pt();
-                       jetVect[2].SetXYZ(jet->Px(), jet->Py(), jet->Pz());
-                       }
-      
-               arrayJets->Delete();
-               delete arrayJets;
-               }
-       }
-  
-
-  // 3) LEADING PARTICLE
-  if( fAnaType == 4 ){
-       TObjArray* tracks = SortChargedParticles();
-       if( tracks ) {
-               nJets = tracks->GetEntriesFast();
-               if( nJets > 0 ) {
-                       index1 = 0;
-                       AliAODTrack* jet = (AliAODTrack*)tracks->At(0);
-                       fLtLabel = jet->GetLabel();     
-                       maxPtJet1 = jet->Pt();
-                       jetVect[0].SetXYZ(jet->Px(), jet->Py(), jet->Pz());
-                       }
-               tracks->Clear();
-               delete tracks; 
-               }
-
-       }
-  fHistos->FillHistogram("hNJets",nJets);
-   
-  return *jetVect;
-
-}
-
-
-//-------------------------------------------------------------------
-void AliAnalyseUE::Initialize(AliAnalysisTaskUE& taskUE){
-/*void AliAnalyseUE::Initialize(AliAnalysisTask& task){// when correction task is in trunk
-   if (task->InheritsFrom("AliAnalysisTaskUE")){
-        AliAnalysisTaskUE *taskUE = dynamic_cast<AliAnalysisTaskUE*> task; 
-       }
-   else if (task->InheritsFrom("AliAnalysisTaskCorrectionsUE")){
-        AliAnalysisTaskCorrectionsUE *taskUE = dynamic_cast<AliAnalysisTaskCorrectionsUE*> task; 
-       }
-
-*/     
-  //Get principal settings from current instance of UE analysis-task
-  fAnaType = taskUE.GetAnaTopology();         
-  fkAOD = taskUE.GetAOD();           
-  fConeRadius = taskUE.GetConeRadius();
-  fDebug = taskUE.GetDebugLevel();
-  fFilterBit = taskUE.GetFilterBit();
-  fJet1EtaCut = taskUE.GetJet1EtaCut();
-  fJet2DeltaPhiCut = taskUE.GetJet2DeltaPhiCut();
-  fJet2RatioPtCut = taskUE.GetJet2RatioPtCut();
-  fJet3PtCut = taskUE.GetJet3PtCut();
-  fOrdering = taskUE.GetPtSumOrdering() ;
-  fRegionType = taskUE.GetRegionType();
-  fSimulateChJetPt = taskUE.GetSimulateChJetPt();
-  fTrackEtaCut = taskUE.GetTrackEtaCut(); 
-  fTrackPtCut = taskUE.GetTrackPtCut();
-  fHistos = taskUE.fHistosUE;
-  fUseChargeHadrons = taskUE.GetUseChargeHadrons();
-  fUseChPartJet = taskUE.GetUseChPartJet();
-  fUsePositiveCharge = taskUE.GetUseNegativeChargeType();
-  fUseSingleCharge = taskUE.GetUseSingleCharge();
-  
-}
-
-//-------------------------------------------------------------------
-void  AliAnalyseUE::Initialize(Int_t anaType, AliAODEvent* aod,Double_t coneRadius, Int_t debug, Int_t filterBit, Double_t jet1EtaCut, Double_t jet2DeltaPhiCut, Double_t jet2RatioPtCut, Double_t jet3PtCut, Int_t ordering, Int_t regionType,Bool_t simulateChJetPt, Double_t trackEtaCut, Double_t trackPtCut, Bool_t useChargeHadrons, Bool_t useChPartJet, Bool_t usePositiveCharge, Bool_t useSingleCharge, AliHistogramsUE* histos){
-   
-   fAnaType = anaType;
-   fkAOD = aod;
-   fConeRadius = coneRadius;
-   fDebug = debug;
-   fFilterBit = filterBit;
-   fJet1EtaCut = jet1EtaCut;
-   fJet2DeltaPhiCut = jet2DeltaPhiCut;
-   fJet2RatioPtCut = jet2RatioPtCut;
-   fJet3PtCut = jet3PtCut;
-   fOrdering = ordering;
-   fRegionType = regionType;
-   fSimulateChJetPt = simulateChJetPt;
-   fTrackEtaCut = trackEtaCut;
-   fTrackPtCut = trackPtCut;
-   fUseChargeHadrons = useChargeHadrons;
-   fUseChPartJet = useChPartJet;
-   fUsePositiveCharge = usePositiveCharge;
-   fUseSingleCharge = useSingleCharge; 
-   fHistos = histos; 
-}
-
-
-//-------------------------------------------------------------------
-Bool_t  AliAnalyseUE::TriggerSelection(AliInputEventHandler* inputHandler){
-
-  //Use AliPhysicsSelection to select good events
-  if( !inputHandler->InheritsFrom("AliAODInputHandler") ) { // input AOD
-       if (inputHandler->IsEventSelected()) {
-               if (fDebug > 1) AliInfo(" Trigger Selection: event ACCEPTED ... ");
-       } else {
-               if (fDebug > 1) AliInfo(" Trigger Selection: event REJECTED ... ");
-               return kFALSE;
-               }
-        }                                
-
-  return kTRUE;
-
-}
-
-
-//-------------------------------------------------------------------
-Bool_t  AliAnalyseUE::VertexSelection(AliAODEvent *aod, Int_t tracks, Double_t zed ){
-
-  //Require 1 vertex (no TPC stand-alone) with a minimum number of tracks and z-coordinate in a limited range
-  Int_t nVertex = aod->GetNumberOfVertices();
-  if( nVertex > 0 ) { // Only one vertex (reject pileup)
-       AliAODVertex* vertex = (AliAODVertex*)aod->GetPrimaryVertex();
-       Int_t nTracksPrim = vertex->GetNContributors();
-       Double_t zVertex = vertex->GetZ();
-       if (fDebug > 1) AliInfo(Form(" Vertex in = %f with %d particles by  %s data ...",zVertex,nTracksPrim,vertex->GetName()));
-       // Select a quality vertex by number of tracks?
-       if( nTracksPrim < tracks || TMath::Abs(zVertex) > zed ) {
-               if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ...");
-               return kFALSE;
-               }
-       if (fDebug > 1) AliInfo(" Primary-vertex Selection: event ACCEPTED...");
-       } else {
-               if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ...");
-               return kFALSE;
-               }
-
-  return kTRUE;
-}
-
-//-------------------------------------------------------------------
-Bool_t  AliAnalyseUE::VertexSelectionOld(AliAODEvent *aod ){
-
-  AliKFVertex primVtx(*(aod->GetPrimaryVertex()));
-  Int_t nTracksPrim=primVtx.GetNContributors();
-    if (fDebug > 1) AliInfo(Form(" Primary-vertex Selection: %d",nTracksPrim));
-    if(!nTracksPrim){
-       if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ...");
-       return kFALSE;
-       }
-    if (fDebug > 1) AliInfo(" Primary-vertex Selection: event ACCEPTED ...");
-
-  return kTRUE;
-}
-
-// PRIVATE METHODS **************************************************
-
-TObjArray*  AliAnalyseUE::FindChargedParticleJets( Double_t chJetPtMin )
-{
-  // Return a TObjArray of "charged particle jets"
-  
-  // Charged particle jet definition from reference:
-  // "Charged jet evolution and the underlying event
-  //  in proton-antiproton collisions at 1.8 TeV"
-  //  PHYSICAL REVIEW D 65 092002, CDF Collaboration
-  
-  // We defined "jets" as circular regions in eta-phi space with
-  // radius defined by R = sqrt( (eta-eta0)^2 +(phi-phi0)^2 ).
-  // Our jet algorithm is as follows:
-  //   1- Order all charged particles according to their pT .
-  //   2- Start with the highest pT particle and include in the jet all
-  //      particles within the radius R=0.7 considering each particle
-  //      in the order of decreasing pT and recalculating the centroid
-  //      of the jet after each new particle is added to the jet .
-  //   3- Go to the next highest pT particle not already included in
-  //      a jet and add to the jet all particles not already included in
-  //      a jet within R=0.7.
-  //   4- Continue until all particles are in a jet.
-  // We defined the transverse momentum of the jet to be
-  // the scalar pT sum of all the particles within the jet, where pT
-  // is measured with respect to the beam axis
-  
-  //  1 - Order all charged particles according to their pT .
-  Int_t nTracks = fkAOD->GetNTracks();
-  if( !nTracks ) return 0;
-  TObjArray tracks(nTracks);
-  
-  for (Int_t ipart=0; ipart<nTracks; ++ipart) {
-       AliAODTrack* part = fkAOD->GetTrack( ipart );
-       if( !part->TestFilterBit(fFilterBit) ) continue; // track cut selection
-       if( !part->Charge() ) continue;
-       if( part->Pt() < fTrackPtCut ) continue;
-       tracks.AddLast(part);
-       }
-  QSortTracks( tracks, 0, tracks.GetEntriesFast() );
-  
-  nTracks = tracks.GetEntriesFast();
-  if( !nTracks ) return 0;
-
-  TObjArray *jets = new TObjArray(nTracks);
-  TIter itrack(&tracks);
-  while( nTracks ) {
-       // 2- Start with the highest pT particle ...
-       Float_t px,py,pz,pt; 
-       AliAODTrack* track = (AliAODTrack*)itrack.Next();
-       if( !track ) continue;
-       px = track->Px();
-       py = track->Py();
-       pz = track->Pz();
-       pt = track->Pt(); // Use the energy member to store Pt
-       jets->AddLast( new TLorentzVector(px, py, pz, pt) );
-       tracks.Remove( track );
-       TLorentzVector* jet = (TLorentzVector*)jets->Last();
-       jet->SetPtEtaPhiE( 1., jet->Eta(), jet->Phi(), pt );
-       // 3- Go to the next highest pT particle not already included...
-       AliAODTrack* track1;
-       Double_t fPt = jet->E();
-       while ( (track1  = (AliAODTrack*)(itrack.Next())) ) {
-               Double_t tphi = track1->Phi(); // here Phi is from 0 <-> 2Pi
-               if (tphi > TMath::Pi()) tphi -= 2. * TMath::Pi(); // convert to  -Pi <-> Pi
-               Double_t dphi = TVector2::Phi_mpi_pi(jet->Phi()-tphi);
-               Double_t r = TMath::Sqrt( (jet->Eta()-track1->Eta())*(jet->Eta()-track1->Eta()) +dphi*dphi );
-               if( r < fConeRadius ) {
-                       fPt   = jet->E()+track1->Pt();  // Scalar sum of Pt
-                       // recalculating the centroid
-                       Double_t eta = jet->Eta()*jet->E()/fPt + track1->Eta()*track1->Pt()/fPt;
-                       Double_t phi = jet->Phi()*jet->E()/fPt + tphi*track1->Pt()/fPt;
-                       jet->SetPtEtaPhiE( 1., eta, phi, fPt );
-                       tracks.Remove( track1 );
-                       }
-               }
-    
-       tracks.Compress();
-       nTracks = tracks.GetEntries();
-       //   4- Continue until all particles are in a jet.
-       itrack.Reset();
-       } // end while nTracks
-  
-  // Convert to AODjets....
-  Int_t njets = jets->GetEntriesFast();
-  TObjArray* aodjets = new TObjArray(njets);
-  aodjets->SetOwner(kTRUE);
-  for(Int_t ijet=0; ijet<njets; ++ijet) {
-       TLorentzVector* jet = (TLorentzVector*)jets->At(ijet);
-       if (jet->E() < chJetPtMin) continue;
-       Float_t px, py,pz,en; // convert to 4-vector
-       px = jet->E() * TMath::Cos(jet->Phi());  // Pt * cos(phi)
-       py = jet->E() * TMath::Sin(jet->Phi());  // Pt * sin(phi)
-       pz = jet->E() / TMath::Tan(2.0 * TMath::ATan(TMath::Exp(-jet->Eta())));
-       en = TMath::Sqrt(px * px + py * py + pz * pz);
-
-       aodjets->AddLast( new AliAODJet(px, py, pz, en) );
-       }
-  jets->Delete();
-  delete jets;
-  
-  // Order jets according to their pT .
-  QSortTracks( *aodjets, 0, aodjets->GetEntriesFast() );
-  
-  // debug
-  if (fDebug>3) AliInfo(Form(" %d Charged jets found\n",njets));
-  
-  return aodjets;
-}
-
-
-//____________________________________________________________________
-void AliAnalyseUE::FillAvePartPtRegion( Double_t leadingE, Double_t ptMax, Double_t ptMin  )
-{
-
-  // Fill average particle Pt of control regions
-  
-  // Max cone
-  fHistos->FillHistogram("hRegionAvePartPtMaxVsEt", leadingE, ptMax);
-  // Min cone
-  fHistos->FillHistogram("hRegionAvePartPtMinVsEt", leadingE, ptMin);
-  // MAke distributions for UE comparison with MB data
-  fHistos->FillHistogram("hMinRegAvePt", ptMin);
-
-}
-
-//____________________________________________________________________
-void AliAnalyseUE::FillMultRegion( Double_t leadingE, Double_t nTrackPtmax, Double_t nTrackPtmin, Double_t ptMin  )
-{
-
-  // Fill Nch multiplicity of control regions
-  
-  // Max cone
-  fHistos->FillHistogram("hRegionMultMaxVsEt", leadingE, nTrackPtmax);
-  fHistos->FillHistogram("hRegionMultMax",  nTrackPtmax);
-  
-  // Min cone
-  fHistos->FillHistogram("hRegionMultMinVsEt", leadingE, nTrackPtmin );
-  fHistos->FillHistogram("hRegionMultMin", nTrackPtmin);
-  
-  // MAke distributions for UE comparison with MB data
-  fHistos->FillHistogram("hMinRegSumPtvsMult", nTrackPtmin,ptMin);
-
-}
-
-//____________________________________________________________________
-void AliAnalyseUE::FillSumPtRegion( Double_t leadingE, Double_t ptMax, Double_t ptMin  )
-{
-  // Fill sumPt of control regions
-  
-  // Max cone
-  fHistos->FillHistogram("hRegionSumPtMaxVsEt", leadingE, ptMax);
-  
-  // Min cone
-  fHistos->FillHistogram("hRegionSumPtMinVsEt", leadingE, ptMin);
-  
-  // MAke distributions for UE comparison with MB data
-  fHistos->FillHistogram("hMinRegSumPt", ptMin);
-  fHistos->FillHistogram("hMinRegSumPtJetPtBin", leadingE, ptMin);
-  fHistos->FillHistogram("hMaxRegSumPtJetPtBin", leadingE, ptMax);
-
-}
-
-//-------------------------------------------------------------------
-Int_t AliAnalyseUE::IsTrackInsideRegion(TVector3 *jetVect, TVector3 *partVect, Int_t conePosition) 
-{  
-  // return de region in delta phi
-  // -1 negative delta phi 
-  //  1 positive delta phi
-  //  0 outside region
-  static const Double_t k60rad  = 60.*TMath::Pi()/180.;
-  static const Double_t k120rad = 120.*TMath::Pi()/180.;
-  Int_t region = 0;
-  if( fRegionType == 1 ) {
-       if( TMath::Abs(partVect->Eta()) > fTrackEtaCut ) return 0;
-       // transverse regions
-       if (jetVect[0].DeltaPhi(*partVect) < -k60rad && jetVect[0].DeltaPhi(*partVect) > -k120rad ) region = -1; //left
-       if (jetVect[0].DeltaPhi(*partVect) > k60rad && jetVect[0].DeltaPhi(*partVect) < k120rad ) region = 1;    //right
-       if (TMath::Abs(jetVect[0].DeltaPhi(*partVect)) < k60rad ) region = 2;    //forward
-       if (TMath::Abs(jetVect[0].DeltaPhi(*partVect)) > k120rad ) region = -2; //backward
-    
-       } else if( fRegionType == 2 ) {
-       // Cone regions
-       Double_t deltaR = 0.;
-    
-       TVector3 positVect,negatVect;
-       if (conePosition==1){
-               positVect.SetMagThetaPhi(1, 2.*atan(exp(-jetVect[0].Eta())), jetVect[0].Phi()+TMath::PiOver2());
-               negatVect.SetMagThetaPhi(1, 2.*atan(exp(-jetVect[0].Eta())), jetVect[0].Phi()-TMath::PiOver2());
-       }else if (conePosition==2){
-               if(fAnaType<2) AliFatal("Prevent error in Analysis type there might be only 1 jet. To avoid overflow better Correct UE config");
-               positVect.SetMagThetaPhi(1, 2.*atan(exp(-(jetVect[0].Eta()+jetVect[1].Eta())/2.)), jetVect[0].Phi()+TMath::PiOver2());
-               negatVect.SetMagThetaPhi(1, 2.*atan(exp(-(jetVect[0].Eta()+jetVect[1].Eta())/2.)), jetVect[0].Phi()-TMath::PiOver2());
-       }else if (conePosition==3){
-               if(fAnaType<2) AliFatal("Prevent error in Analysis type there might be only 1 jet. To avoid overflow better Correct UE config");
-               Double_t weightEta = jetVect[0].Eta() * jetVect[0].Pt()/(jetVect[0].Pt() + jetVect[1].Pt()) + 
-               jetVect[1].Eta() * jetVect[1].Pt()/(jetVect[0].Pt() + jetVect[1].Pt());
-               //Double_t weightEta = jetVect[0].Eta() * jetVect[0].Mag()/(jetVect[0].Mag() + jetVect[1].Mag()) + 
-               // jetVect[1].Eta() * jetVect[1].Mag()/(jetVect[0].Mag() + jetVect[1].Mag());
-               positVect.SetMagThetaPhi(1, 2.*atan(exp(-weightEta)), jetVect[0].Phi()+TMath::PiOver2());
-               negatVect.SetMagThetaPhi(1, 2.*atan(exp(-weightEta)), jetVect[0].Phi()-TMath::PiOver2());
-               }
-  if (TMath::Abs(positVect.DeltaPhi(*partVect)) < fConeRadius ) { 
-       region = 1;  
-       deltaR = positVect.DrEtaPhi(*partVect);
-  } else if (TMath::Abs(negatVect.DeltaPhi(*partVect)) < fConeRadius) { 
-       region = -1;  
-       deltaR = negatVect.DrEtaPhi(*partVect);
-       }
-    
-  if (deltaR > fConeRadius) region = 0;
-    
-  } else
-       AliError("Unknow region type");
-        
-       return region;
-  }
-
-
-
-//-------------------------------------------------------------------
-void  AliAnalyseUE::QSortTracks(TObjArray &a, Int_t first, Int_t last)
-{
-  // Sort array of TObjArray of tracks by Pt using a quicksort algorithm.
-  
-  static TObject *tmp;
-  static int i;           // "static" to save stack space
-  int j;
-  
-  while (last - first > 1) {
-    i = first;
-    j = last;
-    for (;;) {
-      while (++i < last && ((AliVParticle*)a[i])->Pt() > ((AliVParticle*)a[first])->Pt() )
-        ;
-      while (--j > first && ((AliVParticle*)a[j])->Pt() < ((AliVParticle*)a[first])->Pt() )
-        ;
-      if (i >= j)
-        break;
-      
-      tmp  = a[i];
-      a[i] = a[j];
-      a[j] = tmp;
-    }
-    if (j == first) {
-      ++first;
-      continue;
-    }
-    tmp = a[first];
-    a[first] = a[j];
-    a[j] = tmp;
-    if (j - first < last - (j + 1)) {
-      QSortTracks(a, first, j);
-      first = j + 1;   // QSortTracks(j + 1, last);
-    } else {
-      QSortTracks(a, j + 1, last);
-      last = j;        // QSortTracks(first, j);
-    }
-  }
-}
-
-
-//-------------------------------------------------------------------
-void  AliAnalyseUE::QSortTracksMC(TObjArray &a, Int_t first, Int_t last)
-{
-  // Sort array of TObjArray of tracks by Pt using a quicksort algorithm.
-  
-  static TObject *tmp;
-  static int i;           // "static" to save stack space
-  int j;
-  
-  while (last - first > 1) {
-    i = first;
-    j = last;
-    for (;;) {
-      while (++i < last && ((AliAODMCParticle*)a[i])->Pt() > ((AliAODMCParticle*)a[first])->Pt() )
-        ;
-      while (--j > first && ((AliAODMCParticle*)a[j])->Pt() < ((AliAODMCParticle*)a[first])->Pt() )
-        ;
-      if (i >= j)
-        break;
-      
-      tmp  = a[i];
-      a[i] = a[j];
-      a[j] = tmp;
-    }
-    if (j == first) {
-      ++first;
-      continue;
-    }
-    tmp = a[first];
-    a[first] = a[j];
-    a[j] = tmp;
-    if (j - first < last - (j + 1)) {
-      QSortTracksMC(a, first, j);
-      first = j + 1;   // QSortTracks(j + 1, last);
-    } else {
-      QSortTracksMC(a, j + 1, last);
-      last = j;        // QSortTracks(first, j);
-    }
-  }
-}
-
-
-
-
-
-//-------------------------------------------------------------------
-void AliAnalyseUE::SetRegionArea(TVector3 *jetVect)
-{
-  // Set region area
-  Double_t areaCorrFactor=0.;
-  Double_t deltaEta = 0.;
-  if (fRegionType==1) fAreaReg = 2.*fTrackEtaCut*60.*TMath::Pi()/180.;
-  else if (fRegionType==2){ 
-       deltaEta = 0.9-TMath::Abs(jetVect[0].Eta());
-       if (deltaEta>fConeRadius) fAreaReg = TMath::Pi()*fConeRadius*fConeRadius;
-       else{
-               areaCorrFactor = fConeRadius*fConeRadius*TMath::ACos(deltaEta/fConeRadius) -
-               (deltaEta*fConeRadius)*TMath::Sqrt( 1. - deltaEta*deltaEta/(fConeRadius*fConeRadius));
-               fAreaReg=TMath::Pi()*fConeRadius*fConeRadius-areaCorrFactor;
-               }
-       }else AliWarning("Unknown Region Type");
-  if (fDebug>10) AliInfo(Form("\n dEta=%5.3f Angle =%5.3f Region Area = %5.3f Corr Factor=%5.4f \n",deltaEta,TMath::ACos(deltaEta/fConeRadius),fAreaReg,areaCorrFactor));
-}
-
-
-//____________________________________________________________________
-TObjArray*  AliAnalyseUE::SortChargedParticles()
-{
-  //  return an array with all charged particles ordered according to their pT .
-  Int_t nTracks = fkAOD->GetNTracks();
-  if( !nTracks ) return 0;
-  TObjArray* tracks = new TObjArray(nTracks);
-
-  for (Int_t ipart=0; ipart<nTracks; ++ipart) {
-       AliAODTrack* part = fkAOD->GetTrack( ipart );
-       if( !part->TestFilterBit( fFilterBit ) ) continue; // track cut selection
-       if( !part->Charge() ) continue;
-       if( part->Pt() < fTrackPtCut ) continue;
-       tracks->AddLast( part );
-       }
-  QSortTracks( *tracks, 0, tracks->GetEntriesFast() );
-
-  nTracks = tracks->GetEntriesFast();
-  if( !nTracks ) return 0;
-
-  return tracks;
-  }
-
-//____________________________________________________________________
-/*TObjArray*  AliAnalyseUE::SortChargedParticlesMC()
-{
-  //  return an array with all charged particles ordered according to their pT .
-  AliStack *mcStack = fkMC->Stack();
-  Int_t nTracks = mcStack->GetNtrack();
-  if( !nTracks ) return 0;
-  TObjArray* tracks = new TObjArray(nTracks);
-
-  for (Int_t ipart=0; ipart<nTracks; ++ipart) {
-       if (!(mcStack->IsPhysicalPrimary(ipart))) continue;
-       TParticle *part = mcStack->Particle(ipart);
-       
-       if( !part->GetPDG()->Charge() ) continue;
-       if( part->Pt() < fTrackPtCut ) continue;
-       tracks->AddLast( part );
-       }
-  QSortTracksMC( *tracks, 0, tracks->GetEntriesFast() );
-
-  nTracks = tracks->GetEntriesFast();
-  if( !nTracks ) return 0;
-
-  return tracks;
-  }
-*/
-
-//____________________________________________________________________
-TObjArray*  AliAnalyseUE::SortChargedParticlesMC()
-{
-  //  return an array with all charged particles ordered according to their pT .
-  TClonesArray *tca = dynamic_cast<TClonesArray*>(fkAOD->FindListObject(AliAODMCParticle::StdBranchName())); 
-  if(!tca){
-       Printf("No branch!!!");
-       return 0;
-  } 
-  Int_t nTracks = tca->GetEntriesFast();
-  if( !nTracks ) return 0;
-  TObjArray* tracks = new TObjArray(nTracks);
-
-  for (Int_t ipart=0; ipart<nTracks; ++ipart) {
-        AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(ipart));      
-       if(!part)continue;
-       if(!part->IsPhysicalPrimary())continue;
-        if( part->Pt() < fTrackPtCut ) continue;
-       if(!part->Charge()) continue;
-        tracks->AddLast( part );
-       }
-  QSortTracksMC( *tracks, 0, tracks->GetEntriesFast() );
-
-  nTracks = tracks->GetEntriesFast();
-  if( !nTracks ) return 0;
-
-  return tracks;
-  }
-
-
-//____________________________________________________________________
-Bool_t AliAnalyseUE::TrackMCSelected(Double_t charge, Double_t pT, Double_t eta, Int_t pdgCode)const{
-  
-  // MC track selection 
-  Double_t const kMyTolerance = 0.0000001;
-  //if (charge == 0. || charge == -99.) return kFALSE;
-  if (charge < kMyTolerance || charge + 99 < kMyTolerance) return kFALSE;
-        
-  if ( fUseSingleCharge ) { // Charge selection
-       if ( fUsePositiveCharge && charge < 0.) return kFALSE; // keep Positives
-       if ( !fUsePositiveCharge && charge > 0.) return kFALSE; // keep Negatives
-       }
-        
-  //Kinematics cuts on particle
-  if ((pT < fTrackPtCut) || (TMath::Abs(eta) > fTrackEtaCut )) return kFALSE;
-        
-  Bool_t isHadron = TMath::Abs(pdgCode)==211 ||
-       TMath::Abs(pdgCode)==2212 ||
-       TMath::Abs(pdgCode)==321;
-        
-  if ( fUseChargeHadrons && !isHadron ) return kFALSE;
-        
-  return kTRUE;
-
-}
-
-//____________________________________________________________________
-Bool_t AliAnalyseUE::TrackSelected(AliAODTrack* part)const{
-
-  // Real track selection
-  if ( !part->TestFilterBit(fFilterBit) ) return kFALSE; // track cut selection
-  if ( !part->IsPrimaryCandidate()) return kFALSE; // reject whatever is not linked to collision point
-  // PID Selection: Reject everything but hadrons
-  Bool_t isHadron = part->GetMostProbablePID()==AliAODTrack::kPion || 
-       part->GetMostProbablePID()==AliAODTrack::kKaon || 
-       part->GetMostProbablePID()==AliAODTrack::kProton;
-  if ( fUseChargeHadrons && !isHadron ) return kFALSE;
-      
-  if ( !part->Charge() ) return kFALSE; //Only charged
-  if ( fUseSingleCharge ) { // Charge selection
-       if ( fUsePositiveCharge && part->Charge() < 0.) return kFALSE; // keep Positives
-       if ( !fUsePositiveCharge && part->Charge() > 0.) return kFALSE; // keep Negatives
-       } 
-    
-  if ( part->Pt() < fTrackPtCut ) return kFALSE;
-  if( TMath::Abs(part->Eta()) > fTrackEtaCut ) return kFALSE;
-
-  return kTRUE;
-}
-
-//____________________________________________________________________
-Bool_t AliAnalyseUE::TrackSelectedEfficiency(AliAODTrack* part)const{
-  
-  if (!fStack) AliWarning("Attention: stack not set from mother task");  
-  // Real track selection
-  if ( !part->TestFilterBit(fFilterBit) ) return kFALSE; // track cut selection
-  if ( !part->IsPrimaryCandidate()) return kFALSE; // reject whatever is not linked to collision point
-  // PID Selection: Reject everything but hadrons
-  Bool_t isHadron = part->GetMostProbablePID()==AliAODTrack::kPion || 
-       part->GetMostProbablePID()==AliAODTrack::kKaon || 
-       part->GetMostProbablePID()==AliAODTrack::kProton;
-  if ( fUseChargeHadrons && !isHadron ) return kFALSE;
-      
-  if ( !part->Charge() ) return kFALSE; //Only charged
-  if ( fUseSingleCharge ) { // Charge selection
-       if ( fUsePositiveCharge && part->Charge() < 0.) return kFALSE; // keep Positives
-       if ( !fUsePositiveCharge && part->Charge() > 0.) return kFALSE; // keep Negatives
-       } 
-    
-  /*if ( part->Pt() < fTrackPtCut ) return kFALSE;
-  if( TMath::Abs(part->Eta()) > fTrackEtaCut ) return kFALSE;*/
-
-  //Check if there was a primary fulfilling the required cuts 
-  Double_t charge=-999.;
-  Double_t pt=-999.;
-  Double_t eta=-999.;
-  Int_t pdgcode=-999; 
-  
-  Int_t label = part->GetLabel();
-  TClonesArray *tca=0;
-  tca = dynamic_cast<TClonesArray*>(fkAOD->FindListObject(AliAODMCParticle::StdBranchName()));
-  if(!tca)return kFALSE;
-  //TParticle *partMC = fStack->ParticleFromTreeK(label);
-  AliAODMCParticle *partMC=dynamic_cast<AliAODMCParticle*>(tca->At(TMath::Abs(label)));
-  if(!partMC)return kFALSE;
-  if (!partMC->IsPhysicalPrimary())return kFALSE;
-  //charge = ((TParticlePDG*)partMC->GetPDG())->Charge();
-  charge = partMC->Charge();  
-  pt = partMC->Pt();
-  eta = partMC->Eta();
-  pdgcode = partMC->GetPdgCode();
-  
-  if (!TrackMCSelected(charge, pt, eta, pdgcode)) return kFALSE;
-  return kTRUE;
-}
-
-