1-New correlation analysis for particle and jet-JETAN correlation; 2-Change GetEntrie...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Sep 2008 15:04:07 +0000 (15:04 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Sep 2008 15:04:07 +0000 (15:04 +0000)
15 files changed:
PWG4/AliAODParticleCorrelation.h
PWG4/AliAnaExample.cxx
PWG4/AliAnaGammaDirect.cxx
PWG4/AliAnaPartCorrBaseClass.cxx
PWG4/AliAnaParticleHadronCorrelation.cxx
PWG4/AliAnaParticleJetFinderCorrelation.cxx
PWG4/AliAnaParticleJetFinderCorrelation.h
PWG4/AliAnaParticleJetLeadingConeCorrelation.cxx
PWG4/AliAnaParticlePartonCorrelation.cxx
PWG4/AliCaloTrackAODReader.cxx
PWG4/AliCaloTrackESDReader.cxx
PWG4/PWG4PartCorrLinkDef.h
PWG4/libPWG4PartCorr.pkg
PWG4/macros/ConfigAnalysisGammaJetFinderCorrelation.C [new file with mode: 0644]
PWG4/macros/anaPartCorrJetAn.C [new file with mode: 0644]

index d2ebe67..7104419 100644 (file)
@@ -104,7 +104,7 @@ class AliAODParticleCorrelation : public AliVParticle {
     virtual void  SetCorrelatedBackground(TLorentzVector bkg) {fCorrBkg = bkg;}
 
     void SetRefJet(AliAODJet* jet)  { fRefJet = jet;}
-    //AliAODJet* GetJet() {return ((AliAODJet*) fRefJet);}
+    AliAODJet* GetJet() {return ((AliAODJet*) fRefJet.GetObject());}
     TRef GetRefJet() {return fRefJet;}
 
  private:
index 4c052e1..d379201 100644 (file)
@@ -179,9 +179,9 @@ void  AliAnaExample::MakeAnalysisFillAOD()
   
   //Some prints
   if(GetDebug() > 0){
-    if(fDetector == "EMCAL" && GetAODEMCAL())printf("Example : in emcal aod entries %d\n", GetAODEMCAL()->GetEntries());
-    if(fDetector == "CTS" && GetAODCTS())printf("Example : in CTS aod entries %d\n", GetAODCTS()->GetEntries());
-    if(fDetector == "PHOS" && GetAODPHOS())printf("Example : in PHOS aod entries %d\n", GetAODPHOS()->GetEntries());
+    if(fDetector == "EMCAL" && GetAODEMCAL())printf("Example : in emcal aod entries %d\n", GetAODEMCAL()->GetEntriesFast());
+    if(fDetector == "CTS" && GetAODCTS())printf("Example : in CTS aod entries %d\n", GetAODCTS()->GetEntriesFast());
+    if(fDetector == "PHOS" && GetAODPHOS())printf("Example : in PHOS aod entries %d\n", GetAODPHOS()->GetEntriesFast());
   }
   
   //Get List with tracks or clusters  
@@ -190,7 +190,7 @@ void  AliAnaExample::MakeAnalysisFillAOD()
   else if(fDetector == "EMCAL") partList = GetAODEMCAL();
   else if(fDetector == "PHOS") partList = GetAODPHOS();
   
-  if(!partList || partList->GetEntries() == 0) return ;
+  if(!partList || partList->GetEntriesFast() == 0) return ;
   
   //Fill AODCaloClusters and AODParticleCorrelation with PHOS/EMCAL aods
   if(fDetector == "EMCAL" || fDetector == "PHOS"){
@@ -198,14 +198,14 @@ void  AliAnaExample::MakeAnalysisFillAOD()
     //WORK WITH CALOCLUSTERS
     if(GetReader()->GetDataType()!= AliCaloTrackReader::kMC) 
     ConnectAODCaloClusters(); //Do Only when filling AODCaloClusters 
-    if(GetDebug() > 0) printf("Example: in calo clusters aod entries %d\n", GetAODCaloClusters()->GetEntries());
+    if(GetDebug() > 0) printf("Example: in calo clusters aod entries %d\n", GetAODCaloClusters()->GetEntriesFast());
     
     //Get vertex for photon momentum calculation
     Double_t v[3] ; //vertex ;
     GetReader()->GetVertex(v);
     
     TLorentzVector mom ;
-    for(Int_t i = 0; i < partList->GetEntries(); i++){
+    for(Int_t i = 0; i < partList->GetEntriesFast(); i++){
       
       AliAODCaloCluster * calo =  dynamic_cast<AliAODCaloCluster*> (partList->At(i));
       
@@ -279,7 +279,7 @@ void  AliAnaExample::MakeAnalysisFillAOD()
   else if(fDetector == "CTS"){ //Track analysis
     //Fill AODParticleCorrelation with CTS aods
     TVector3 p3;
-    for(Int_t i = 0; i < GetAODCTS()->GetEntries(); i++){
+    for(Int_t i = 0; i < GetAODCTS()->GetEntriesFast(); i++){
       
       AliAODTrack * track =  dynamic_cast<AliAODTrack*> (GetAODCTS()->At(i));
       
@@ -301,8 +301,8 @@ void  AliAnaExample::MakeAnalysisFillAOD()
   }//CTS analysis
   
   if(GetDebug() > 0) {
-    printf("Example: final aod calocluster entries %d\n", GetAODCaloClusters()->GetEntries());
-    printf("Example: final aod branch entries %d\n", GetAODBranch()->GetEntries());
+    printf("Example: final aod calocluster entries %d\n", GetAODCaloClusters()->GetEntriesFast());
+    printf("Example: final aod branch entries %d\n", GetAODBranch()->GetEntriesFast());
     printf("Example: final aod cell  entries %d\n", GetAODCaloCells()->GetNumberOfCells());
   }
 } 
index a49221d..d1384d9 100644 (file)
@@ -5,7 +5,7 @@
  * 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   *
+ * documentation strictly for non-commercial purposes iGetEntriesFast(s 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     *
@@ -270,7 +270,7 @@ Bool_t AliAnaGammaDirect::CheckInvMass(const Int_t icalo,const TLorentzVector mo
   //Search if there is a companion decay photon to the candidate 
   // and discard it in such case
   TLorentzVector mom2 ;
-  for(Int_t jcalo = 0; jcalo < pl->GetEntries(); jcalo++){
+  for(Int_t jcalo = 0; jcalo < pl->GetEntriesFast(); jcalo++){
     if(icalo==jcalo) continue ;
     AliAODCaloCluster * calo =  dynamic_cast<AliAODCaloCluster*> (pl->At(jcalo));
   
@@ -676,11 +676,11 @@ void  AliAnaGammaDirect::MakeAnalysisFillAOD()
     pl = GetAODPHOS();
   else if (fDetector == "EMCAL")
     pl = GetAODEMCAL();
-  //cout<<"Number of entries "<<pl->GetEntries()<<endl;
+  //cout<<"Number of entries "<<pl->GetEntriesFast()<<endl;
   
   //Fill AODCaloClusters and AODParticleCorrelation with PHOS aods
   TLorentzVector mom ;
-  for(Int_t icalo = 0; icalo < pl->GetEntries(); icalo++){
+  for(Int_t icalo = 0; icalo < pl->GetEntriesFast(); icalo++){
     AliAODCaloCluster * calo =  dynamic_cast<AliAODCaloCluster*> (pl->At(icalo));
   
     //Cluster selection, not charged, with photon id and in fidutial cut
index 27edcc0..8c5492d 100644 (file)
@@ -4,7 +4,7 @@
  * 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   *
+ * Permission to use, copy, modify and distribute this software and its   *GetEntriesFast(
  * 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   *
@@ -139,7 +139,7 @@ AliAnaPartCorrBaseClass::~AliAnaPartCorrBaseClass()
 void AliAnaPartCorrBaseClass::AddAODCaloCluster(AliAODCaloCluster calo) {
   //Put AOD calo cluster in the CaloClusters array
 
-  Int_t i = fAODCaloClusters->GetEntries();
+  Int_t i = fAODCaloClusters->GetEntriesFast();
   new((*fAODCaloClusters)[i])  AliAODCaloCluster(calo);
 
 }
@@ -148,7 +148,7 @@ void AliAnaPartCorrBaseClass::AddAODCaloCluster(AliAODCaloCluster calo) {
 void AliAnaPartCorrBaseClass::AddAODParticleCorrelation(AliAODParticleCorrelation pc) {
   //Put AOD calo cluster in the AODParticleCorrelation array
 
-  Int_t i = fAODBranch->GetEntries();
+  Int_t i = fAODBranch->GetEntriesFast();
   new((*fAODBranch)[i])  AliAODParticleCorrelation(pc);
 
 }
index 2b8ce05..cd8f4b5 100644 (file)
@@ -199,7 +199,7 @@ TList *  AliAnaParticleHadronCorrelation::GetCreateOutputObjects()
 
     //Keep neutral meson selection histograms if requiered
     //Setting done in AliNeutralMesonSelection
-    if(GetNeutralMesonSelection()){
+       if(GetNeutralMesonSelection()){
       TList * nmsHistos = GetNeutralMesonSelection()->GetCreateOutputObjects() ;
       cout<<"NMSHistos "<< nmsHistos<<endl;
       if(GetNeutralMesonSelection()->AreNeutralMesonSelectionHistosKept())
@@ -246,10 +246,10 @@ void  AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD()
   //Particle-Hadron Correlation Analysis, fill AODs
   if(GetDebug() > 1){
     printf("Begin hadron correlation analysis, fill AODs \n");
-    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntries());
-    printf("In CTS aod entries %d\n", GetAODCTS()->GetEntries());
-    printf("In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntries());
-    printf("In PHOS aod entries %d\n", GetAODPHOS()->GetEntries());
+    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntriesFast());
+    printf("In CTS aod entries %d\n", GetAODCTS()->GetEntriesFast());
+    printf("In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast());
+    printf("In PHOS aod entries %d\n", GetAODPHOS()->GetEntriesFast());
   }
   
   //Loop on stored AOD particles, trigger
@@ -262,16 +262,16 @@ void  AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD()
   
     //Make correlation with neutral pions
     //Trigger particle in PHOS, correlation with EMCAL
-    if(particle->GetDetector()=="PHOS" && GetReader()->IsEMCALSwitchedOn() && GetAODEMCAL()->GetEntries() > 0)
+    if(particle->GetDetector()=="PHOS" && GetReader()->IsEMCALSwitchedOn() && GetAODEMCAL()->GetEntriesFast() > 0)
       MakeNeutralCorrelation(particle,(TSeqCollection*)GetAODEMCAL(),kFALSE);
     //Trigger particle in EMCAL, correlation with PHOS
-    else if(particle->GetDetector()=="EMCAL" && GetReader()->IsPHOSSwitchedOn() && GetAODPHOS()->GetEntries() > 0)
+    else if(particle->GetDetector()=="EMCAL" && GetReader()->IsPHOSSwitchedOn() && GetAODPHOS()->GetEntriesFast() > 0)
       MakeNeutralCorrelation(particle,(TSeqCollection*)GetAODPHOS(),kFALSE);
     //Trigger particle in CTS, correlation with PHOS, EMCAL and CTS
     else if(particle->GetDetector()=="CTS" ){
-      if(GetReader()->IsPHOSSwitchedOn() && GetAODPHOS()->GetEntries() > 0) 
+      if(GetReader()->IsPHOSSwitchedOn() && GetAODPHOS()->GetEntriesFast() > 0) 
        MakeNeutralCorrelation(particle,(TSeqCollection*)GetAODPHOS(),kFALSE);
-      if(GetReader()->IsEMCALSwitchedOn() && GetAODEMCAL()->GetEntries() > 0) 
+      if(GetReader()->IsEMCALSwitchedOn() && GetAODEMCAL()->GetEntriesFast() > 0) 
        MakeNeutralCorrelation(particle,(TSeqCollection*)GetAODEMCAL(),kFALSE);
     }
 
@@ -287,7 +287,7 @@ void  AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms()
   //Particle-Hadron Correlation Analysis, fill AODs
   if(GetDebug() > 1){
     printf("Begin hadron correlation analysis, fill histograms \n");
-    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntries());
+    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntriesFast());
   }
   
   //Loop on stored AOD particles
@@ -296,16 +296,16 @@ void  AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms()
     AliAODParticleCorrelation* particle =  dynamic_cast<AliAODParticleCorrelation*> (GetAODBranch()->At(iaod));
    
     if(GetDebug() > 1){
-      printf("Particle %d, In Track Refs  entries %d\n", iaod, (particle->GetRefTracks())->GetEntries());
-      printf("Particle %d, In Cluster Refs entries %d\n",iaod, (particle->GetRefClusters())->GetEntries());
+      printf("Particle %d, In Track Refs  entries %d\n", iaod, (particle->GetRefTracks())->GetEntriesFast());
+      printf("Particle %d, In Cluster Refs entries %d\n",iaod, (particle->GetRefClusters())->GetEntriesFast());
     }
 
     //Make correlation with charged hadrons
-    if((particle->GetRefTracks())->GetEntries() > 0)
+    if((particle->GetRefTracks())->GetEntriesFast() > 0)
       MakeChargedCorrelation(particle, (TSeqCollection*) (particle->GetRefTracks()),kTRUE);
     
     //Make correlation with neutral pions
-    if((particle->GetRefClusters())->GetEntries() > 0)
+    if((particle->GetRefClusters())->GetEntriesFast() > 0)
       MakeNeutralCorrelation(particle,  (TSeqCollection*) (particle->GetRefClusters()), kTRUE);
     
   }//Aod branch loop
index 007cfe1..2bcd9ca 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
-/* $Id: AliAnaGammaJetFinder.cxx 22232 2007-11-17 16:39:49Z gustavo $ */
-
-/* History of cvs commits:
- *
- * $Log$
- * Revision 1.3  2007/10/29 13:48:42  gustavo
- * Corrected coding violations
- *
- * Revision 1.2  2007/08/17 12:40:04  schutz
- * New analysis classes by Gustavo Conesa
- *
- * Revision 1.1.2.1  2007/07/26 10:32:09  schutz
- * new analysis classes in the the new analysis framework
- *
- *
- */
+/* $Id: AliAnaParticleJetFinderCorrelation.cxx 22232 2007-11-17 16:39:49Z gustavo $ */
 
 //_________________________________________________________________________
-// Class for the analysis of gamma-jet (standard jet finder) correlations
+// Class for the analysis of particle (direct gamma) -jet (jet found with finder) correlations
 //*-- Author: Gustavo Conesa (LNF-INFN) 
 //////////////////////////////////////////////////////////////////////////////
 
 
 // --- ROOT system ---
+#include "TH2F.h"
 #include "Riostream.h"
 
 //---- AliRoot system ----
-#include "AliAnaGammaJetFinder.h" 
+#include "AliCaloTrackReader.h"
+#include "AliAODJet.h"
+#include "AliAnaParticleJetFinderCorrelation.h" 
 #include "AliLog.h"
   
-  ClassImp(AliAnaGammaJetFinder)
+  ClassImp(AliAnaParticleJetFinderCorrelation)
   
 
 //____________________________________________________________________________
-  AliAnaGammaJetFinder::AliAnaGammaJetFinder() : 
-    AliAnaGammaCorrelation(),   
-    fhDeltaEtaJet(0), fhDeltaPhiJet(0), 
-    fhDeltaPtJet(0), fhPtRatJet(0)
+  AliAnaParticleJetFinderCorrelation::AliAnaParticleJetFinderCorrelation() : 
+       AliAnaPartCorrBaseClass(),  
+    fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.), fRatioMaxCut(0.),  fRatioMinCut(0.), 
+       fConeSize(0), fPtThresholdInCone(0),fUseJetRefTracks(0), fMakeCorrelationInHistoMaker(0),
+       fhDeltaEta(0), fhDeltaPhi(0), fhDeltaPt(0), fhPtRatio(0), fhPt(0),
+       fhFFz(0),fhFFxi(0),fhFFpt(0),fhNTracksInCone(0)
 {
-  //Default Ctor
+       //Default Ctor
 
-  SetCorrelationType(kJetFinder);
-  //Initialize parameters
-  InitParameters();
+       //Initialize parameters
+       InitParameters();
 }
 
 //____________________________________________________________________________
-AliAnaGammaJetFinder::AliAnaGammaJetFinder(const AliAnaGammaJetFinder & g) :   
-  AliAnaGammaCorrelation(g),   
-  fhDeltaEtaJet(g.fhDeltaEtaJet), fhDeltaPhiJet(g.fhDeltaPhiJet), 
-  fhDeltaPtJet(g.fhDeltaPtJet), fhPtRatJet(g.fhPtRatJet)
+AliAnaParticleJetFinderCorrelation::AliAnaParticleJetFinderCorrelation(const AliAnaParticleJetFinderCorrelation & pjf) :   
+       AliAnaPartCorrBaseClass(pjf),  
+       fDeltaPhiMaxCut(pjf.fDeltaPhiMaxCut), fDeltaPhiMinCut(pjf.fDeltaPhiMinCut), 
+       fRatioMaxCut(pjf.fRatioMaxCut), fRatioMinCut(pjf.fRatioMinCut), 
+       fConeSize(pjf.fConeSize), fPtThresholdInCone(pjf.fPtThresholdInCone),   
+       fUseJetRefTracks(pjf.fUseJetRefTracks), fMakeCorrelationInHistoMaker(pjf.fMakeCorrelationInHistoMaker),
+       fhDeltaEta(pjf.fhDeltaEta), fhDeltaPhi(pjf.fhDeltaPhi), 
+       fhDeltaPt(pjf.fhDeltaPt), fhPtRatio(pjf.fhPtRatio), fhPt(pjf.fhPt), 
+       fhFFz(pjf.fhFFz),fhFFxi(pjf.fhFFxi),fhFFpt(pjf.fhFFpt),
+       fhNTracksInCone(pjf.fhNTracksInCone)
 {
-  // cpy ctor
+       // cpy ctor
 
 }
 
 //_________________________________________________________________________
-AliAnaGammaJetFinder & AliAnaGammaJetFinder::operator = (const AliAnaGammaJetFinder & source)
+AliAnaParticleJetFinderCorrelation & AliAnaParticleJetFinderCorrelation::operator = (const AliAnaParticleJetFinderCorrelation & pjf)
 {
-  // assignment operator
-
-  if(this == &source)return *this;
-  ((AliAnaGammaCorrelation *)this)->operator=(source);
-  fhDeltaEtaJet = source.fhDeltaEtaJet;
-  fhDeltaPhiJet = source.fhDeltaPhiJet;
-  fhDeltaPtJet = source.fhDeltaPtJet;
-  fhPtRatJet = source.fhPtRatJet;
+       // assignment operator
+
+       if(this == &pjf)return *this;
+       ((AliAnaPartCorrBaseClass *)this)->operator=(pjf);
+  
+       fDeltaPhiMaxCut    = pjf.fDeltaPhiMaxCut ; 
+       fDeltaPhiMinCut    = pjf.fDeltaPhiMinCut ; 
+       fRatioMaxCut       = pjf.fRatioMaxCut ;
+       fRatioMinCut       = pjf.fRatioMinCut ; 
+       fConeSize          = pjf.fConeSize ; 
+       fPtThresholdInCone = pjf.fPtThresholdInCone ;
+       fUseJetRefTracks   = pjf.fUseJetRefTracks ;
+       fMakeCorrelationInHistoMaker = pjf.fMakeCorrelationInHistoMaker ;  
+         
+       //Histograms
+       fhDeltaEta = pjf.fhDeltaEta;
+       fhDeltaPhi = pjf.fhDeltaPhi;
+       fhDeltaPt  = pjf.fhDeltaPt;
+       fhPtRatio  = pjf.fhPtRatio;
+       fhPt       = pjf.fhPt;
+  
+       fhFFz   = pjf.fhFFz;
+       fhFFxi  = pjf.fhFFxi;
+       fhFFpt  = pjf.fhFFpt;
+       fhNTracksInCone = pjf.fhNTracksInCone;  
   
   return *this;
 
 }
 
 //____________________________________________________________________________
-AliAnaGammaJetFinder::~AliAnaGammaJetFinder() 
-{
-   // Remove all pointers except analysis output pointers.
-}
+//AliAnaParticleJetFinderCorrelation::~AliAnaParticleJetFinderCorrelation() 
+//{
+//   // Remove all pointers except analysis output pointers.
+// 
+//}
 
 
 //________________________________________________________________________
-TList *  AliAnaGammaJetFinder::GetCreateOutputObjects()
+TList *  AliAnaParticleJetFinderCorrelation::GetCreateOutputObjects()
 {  
   // Create histograms to be saved in output file and 
   // store them in fOutputContainer
 
-  AliDebug(1,"Init jet histograms");
+  if(GetDebug()>1) printf("Init histograms \n");
 
   TList * outputContainer = new TList() ; 
-  outputContainer->SetName("GammaJetHistos") ; 
-
-  //---kJet---
-  fhDeltaPhiJet  = new TH2F
-    ("DeltaPhiJet","#phi_{#gamma} - #phi_{jet} vs p_{T #gamma}",
-     200,0,120,200,0,6.4); 
-  fhDeltaPhiJet->SetYTitle("#Delta #phi");
-  fhDeltaPhiJet->SetXTitle("p_{T #gamma} (GeV/c)");
-  outputContainer->Add(fhDeltaPhiJet);
-
-  fhDeltaEtaJet  = new TH2F
-    ("DeltaEtaJet","#eta_{#gamma} - #eta_{jet} vs p_{T #gamma}",
-     200,0,120,200,-2,2); 
-  fhDeltaEtaJet->SetYTitle("#Delta #eta");
-  fhDeltaEtaJet->SetXTitle("p_{T #gamma} (GeV/c)");
-  outputContainer->Add(fhDeltaEtaJet);
-
-  fhDeltaPtJet  = new TH2F
-    ("DeltaPtJet","#p_{T #gamma} - #p_{T jet} vs p_{T #gamma}",
-     200,0,120,100,-10,10); 
-  fhDeltaPtJet->SetYTitle("#Delta #p_{T}");
-  fhDeltaPtJet->SetXTitle("p_{T #gamma} (GeV/c)"); 
-  outputContainer->Add(fhDeltaPtJet);
-
-  fhPtRatJet  = new TH2F
-    ("PtRatJet","#p_{T jet} / #p_{T #gamma} vs p_{T #gamma}",
-     200,0,120,200,0,5); 
-  fhPtRatJet->SetYTitle("ratio");
-  fhPtRatJet->SetXTitle("p_{T #gamma} (GeV/c)");
-  outputContainer->Add(fhPtRatJet);
-
-  SetOutputContainer(outputContainer);
+  outputContainer->SetName("ParticleJetFinderHistos") ; 
+
+  fhDeltaPhi  = new TH2F("DeltaPhi","#phi_{jet} - #phi_{trigger} vs p_{T trigger}",120,0,120,200,-4,4); 
+  fhDeltaPhi->SetYTitle("#Delta #phi");
+  fhDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
+  outputContainer->Add(fhDeltaPhi);
+
+  fhDeltaEta  = new TH2F("DeltaEta","#eta_{jet} - #eta_{trigger} vs p_{T trigger}",120,0,120,200,-5,5); 
+  fhDeltaEta->SetYTitle("#Delta #eta");
+  fhDeltaEta->SetXTitle("p_{T trigger} (GeV/c)");
+  outputContainer->Add(fhDeltaEta);
+
+  fhDeltaPt  = new TH2F("DeltaPt","#p_{T trigger} - #p_{T jet} vs p_{T trigger}",120,0,120,200,-100,100); 
+  fhDeltaPt->SetYTitle("#Delta #p_{T}");
+  fhDeltaPt->SetXTitle("p_{T trigger} (GeV/c)"); 
+  outputContainer->Add(fhDeltaPt);
+
+  fhPtRatio  = new TH2F("PtRatio","#p_{T jet} / #p_{T trigger} vs p_{T trigger}",120,0,120,200,0,2.); 
+  fhPtRatio->SetYTitle("ratio");
+  fhPtRatio->SetXTitle("p_{T trigger} (GeV/c)");
+  outputContainer->Add(fhPtRatio);
+  
+  fhPt  = new TH2F("Pt","#p_{T jet} vs p_{T trigger}",120,0,120,120,0,120); 
+  fhPt->SetYTitle("#p_{T jet}(GeV/c)");
+  fhPt->SetXTitle("p_{T trigger} (GeV/c)");
+  outputContainer->Add(fhPt);
+  
+  fhFFz  = new TH2F("FFz","z = p_{T i charged}/p_{T trigger} vs p_{T trigger}", 120,0.,120.,200,0.,2);  
+  fhFFz->SetYTitle("z");
+  fhFFz->SetXTitle("p_{T trigger}");
+  outputContainer->Add(fhFFz) ;
+
+  fhFFxi  = new TH2F("FFxi","#xi = ln(p_{T trigger}/p_{T i charged}) vs p_{T trigger}", 120,0.,120.,100,0.,10.); 
+  fhFFxi->SetYTitle("#xi");
+  fhFFxi->SetXTitle("p_{T trigger}");
+  outputContainer->Add(fhFFxi) ;
+  
+  fhFFpt  = new TH2F("FFpt","#xi = p_{T i charged}) vs p_{T trigger}", 120,0.,120.,200,0.,50.); 
+  fhFFpt->SetYTitle("p_{T charged hadron}");
+  fhFFpt->SetXTitle("p_{T trigger}");
+  outputContainer->Add(fhFFpt) ;
 
+  fhNTracksInCone  = new TH2F("NTracksInCone","#xi = p_{T i charged}) vs p_{T trigger}", 120,0.,120.,200,0.,50.); 
+  fhNTracksInCone->SetYTitle("p_{T charged hadron}");
+  fhNTracksInCone->SetXTitle("p_{T trigger}");
+  outputContainer->Add(fhNTracksInCone) ;
+       
   return outputContainer;
 }
 
  //____________________________________________________________________________
-void AliAnaGammaJetFinder::InitParameters()
+void AliAnaParticleJetFinderCorrelation::InitParameters()
 {
  
   //Initialize the parameters of the analysis.
 
-  ;
+  fDeltaPhiMinCut    = 1.5 ;
+  fDeltaPhiMaxCut    = 4.5 ; 
+  fRatioMaxCut       = 1.2 ; 
+  fRatioMinCut       = 0.3 ; 
+  fConeSize          = 0.3 ;
+  fPtThresholdInCone = 0.5 ;
+  fUseJetRefTracks   = kFALSE ;
+  fMakeCorrelationInHistoMaker = kFALSE ;
+  }
+
+//__________________________________________________________________
+Int_t  AliAnaParticleJetFinderCorrelation::SelectJet(AliAODParticleCorrelation * particle)
+{
+       //Returns the index of the jet that is opposite to the particle
+       
+       Int_t njets = (GetReader()->GetAOD())->GetNJets() ;     
+       cout<<">> Loop on Jets"<<endl;
+       AliAODJet * jet = new AliAODJet ;
+       Int_t index = -1;
+       for(Int_t ijet = 0; ijet < njets ; ijet++){
+               jet = (GetReader()->GetAOD())->GetJet(ijet) ;     
+               Float_t dphi  = TMath::Abs(particle->Phi()-jet->Phi());
+               Float_t ratio = jet->Pt()/particle->Pt();
+               if(GetDebug() > 3)
+                       printf("Jet %d, Ratio pT %2.3f, Delta phi %2.3f\n",ijet,ratio,dphi);      
+               Float_t dphiprev= 10000;
+               if((dphi > fDeltaPhiMinCut) && (dphi<fDeltaPhiMaxCut) &&
+                       (ratio > fRatioMinCut) && (ratio < fRatioMaxCut)  &&
+                       (TMath::Abs(dphi-3.14159) < TMath::Abs(dphiprev-3.14159))){//In case there is more than one jet select the most opposite.
+                       dphiprev = dphi;
+                       index = ijet ;  
+               }//Selection cuts
+       }//AOD Jet loop
+
+       return index ;
 
 }
 
 //__________________________________________________________________
-void AliAnaGammaJetFinder::Print(const Option_t * opt) const
+void  AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() 
+{  
+       //Particle-Jet Correlation Analysis, fill AODs
+       
+       Int_t ntrig =  GetAODBranch()->GetEntriesFast() ;  
+    if(GetDebug() > -3){
+    printf("Begin jet finder  correlation analysis, fill AODs \n");
+    printf("In particle branch aod entries %d\n", ntrig);
+    printf("In jet      branch aod entries %d\n", (GetReader()->GetAOD())->GetNJets());
+       }
+       
+       //Loop on stored AOD particles, trigger
+       for(Int_t iaod = 0; iaod < ntrig ; iaod++){
+               AliAODParticleCorrelation* particle =  dynamic_cast<AliAODParticleCorrelation*> (GetAODBranch()->At(iaod));
+               //cout<<">> Test reference "<<particle->GetRefJet()<<endl;
+                       //Correlate with jets
+               Int_t ijet = SelectJet(particle);
+               if(ijet > -1){
+                       if(GetDebug() > 2) printf ("Jet with index %d selected \n",ijet);
+                       AliAODJet *jet = (GetReader()->GetAOD())->GetJet(ijet);
+                       particle->SetRefJet(jet);       
+               }
+       }                 
+       
+       if(GetDebug() >1)printf("End of jet leading cone analysis, fill AODs \n");
+} 
+
+//__________________________________________________________________
+void  AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() 
 {
+       //Particle-Jet Correlation Analysis, fill histograms
+       Int_t ntrig   =  GetAODBranch()->GetEntriesFast() ;    
+       if(GetDebug() > 1){
+               printf("Begin jet finder  correlation analysis, fill histograms \n");
+               printf("In particle branch aod entries %d\n", ntrig);
+               printf("In jet      branch aod entries %d\n", (GetReader()->GetAOD())->GetNJets());
+       }
+       
+       //Loop on stored AOD particles, trigger
+       for(Int_t iaod = 0; iaod < ntrig ; iaod++){
+               AliAODParticleCorrelation* particle =  dynamic_cast<AliAODParticleCorrelation*> (GetAODBranch()->At(iaod));
+               //cout<<">> Test reference "<<particle->GetRefJet()<<endl;
+               
+               //Recover the jet correlated, found previously.
+               AliAODJet       * jet = particle->GetJet();
+               //If correlation not made before, do it now.
+               if(fMakeCorrelationInHistoMaker){
+                       //Correlate with jets
+                       Int_t ijet = SelectJet(particle);
+                       if(ijet > -1){
+                               if(GetDebug() > 2) printf ("Jet with index %d selected \n",ijet);
+                               jet = (GetReader()->GetAOD())->GetJet(ijet);
+                               particle->SetRefJet(jet);       
+                       }
+               }
+               
+               if (!jet) continue ;
+       
+               //Fill Histograms
+         
+               Double_t ptTrig = particle->Pt();
+               Double_t ptJet = jet->Pt();
+               Double_t phiTrig = particle->Phi();
+               Double_t phiJet = jet->Phi();
+               Double_t etaTrig = particle->Eta();
+               Double_t etaJet = jet->Eta();
+               //printf("pT trigger %2.3f, pT jet %2.3f, Delta phi %2.3f, Delta eta %2.3f, Delta pT %2.3f, ratio %2.3f \n",
+               //      ptTrig,ptJet, phiJet-phiTrig, etaJet-etaTrig, ptTrig-ptJet, ptJet/ptTrig);
+               fhDeltaPt ->Fill(ptTrig, ptTrig-ptJet);
+               fhDeltaPhi->Fill(ptTrig, phiJet-phiTrig);
+               fhDeltaEta->Fill(ptTrig, etaJet-etaTrig);
+               fhPtRatio ->Fill(ptTrig, ptJet/ptTrig);
+               fhPt      ->Fill(ptTrig, ptJet);
 
-  //Print some relevant parameters set for the analysis
-  if(! opt)
-    return;
-  
+               //Fragmentation function
+               Float_t  rad = 0, pt = 0, eta = 0, phi = 0;
+               Int_t    npartcone = 0;
+               TVector3 p3;
+               AliAODTrack* track = new AliAODTrack ;
+       
+               Int_t ntracks =  0;
+               if(!fUseJetRefTracks)
+                       ntracks =GetAODCTS()->GetEntriesFast();
+               else //If you want to use jet tracks from JETAN
+                       ntracks =  (jet->GetRefTracks())->GetEntriesFast();
+       
+               for(Int_t ipr = 0;ipr < ntracks ; ipr ++ ){
+                       if(!fUseJetRefTracks)
+                               track = dynamic_cast<AliAODTrack *>(GetAODCTS()->At(ipr)) ; 
+                       else //If you want to use jet tracks from JETAN
+                               track = dynamic_cast<AliAODTrack *>((jet->GetRefTracks())->At(ipr));
+                                       
+                       p3.SetXYZ(track->Px(),track->Py(),track->Pz());
+                       pt    = p3.Pt();
+                       eta  = p3.Eta();
+                       phi  = p3.Phi() ;
+                       if(phi < 0) phi+=TMath::TwoPi();
+               
+                       //Check if there is any particle inside cone with pt larger than  fPtThreshold
+                       rad = TMath::Sqrt((eta-etaJet)*(eta-etaJet)+ (phi-phiJet)*(phi-phiJet));
+                       if(rad < fConeSize  && pt > fPtThresholdInCone){        
+                               //printf("charged in jet cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad);
+                               npartcone++;
+                               fhFFz ->Fill(ptTrig, pt/ptTrig);
+                               fhFFxi->Fill(ptTrig, TMath::Log(ptTrig/pt));
+                               fhFFpt->Fill(ptTrig, pt);
+                       }
+               }//Tracks
+               fhNTracksInCone->Fill(ptTrig, npartcone);
+       }//AOD trigger particle loop
+       if(GetDebug() >1) printf("End of jet leading cone analysis, fill histograms \n");
 } 
 
+
 //__________________________________________________________________
-void  AliAnaGammaJetFinder::MakeGammaCorrelation(TParticle * pGamma, TClonesArray *pl, TClonesArray *) 
+void AliAnaParticleJetFinderCorrelation::Print(const Option_t * opt) const
 {
-  //Gamma -Jet  Correlation Analysis
-  AliDebug(2, "Begin jet analysis");
-  cout<<pGamma<<" "<<pl<<endl;
-  AliInfo("Not implemented");  
+
+       //Print some relevant parameters set for the analysis
+       if(! opt)
+               return;
+  
+       printf("Phi trigger-jet        <     %3.2f\n", fDeltaPhiMaxCut) ; 
+       printf("Phi trigger-jet        >     %3.2f\n", fDeltaPhiMinCut) ;
+       printf("pT Ratio trigger/jet   <     %3.2f\n", fRatioMaxCut) ; 
+       printf("pT Ratio trigger/jet   >     %3.2f\n", fRatioMinCut) ;
+       printf("fConeSize              =     %3.2f\n", fConeSize) ; 
+       printf("fPtThresholdInCone     =     %3.2f\n", fPtThresholdInCone) ;
+       printf("fUseJetRefTracks           =     %d\n",    fUseJetRefTracks) ;
+       printf("fMakeCorrelationInHistoMaker       =     %d\n",    fMakeCorrelationInHistoMaker) ;      
 } 
+
index 0d6decf..c61f241 100644 (file)
@@ -1,56 +1,94 @@
-#ifndef ALIANAGAMMAJETFINDER_H
-#define ALIANAGAMMAJETFINDER_H
+#ifndef AliAnaParticleJetFinderCorrelation_H
+#define AliAnaParticleJetFinderCorrelation_H
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice     */
-/* $Id: AliAnaGammaJetFinder.h 21839 2007-10-29 13:49:42Z gustavo $ */
-
-/* History of cvs commits:
- *
- * $Log$
- * Revision 1.2  2007/08/17 12:40:04  schutz
- * New analysis classes by Gustavo Conesa
- *
- * Revision 1.1.2.1  2007/07/26 10:32:09  schutz
- * new analysis classes in the the new analysis framework
- *
- *
- */
+/* $Id: AliAnaParticleJetFinderCorrelation.h 21839 2007-10-29 13:49:42Z gustavo $ */
+
 
 //_________________________________________________________________________
-// Class that contains the algorithm for the analysis of gamma-jet (standard finder) correlation 
+// Class that contains the algorithm for the analysis of particle (direct gamma) - jet 
+// (standard jet found with JETAN) correlation 
+// Particle and jet for correlation found by independent algorithms.
+// For Example direct isolated photon found in AliAnaGammaDirect and the jet with JETAN
+//
 //-- Author: Gustavo Conesa (INFN-LNF)
 
-#include "AliAnaGammaCorrelation.h"
+// --- ROOT system ---
+class TH2F;
+
+//---- Analysis system ----
+class AliLog;
+#include "AliAnaPartCorrBaseClass.h"
      
-class AliAnaGammaJetFinder : public AliAnaGammaCorrelation {
+class AliAnaParticleJetFinderCorrelation : public AliAnaPartCorrBaseClass {
        
-  public: 
+       public: 
        
-       AliAnaGammaJetFinder() ; // default ctor
-       AliAnaGammaJetFinder(const AliAnaGammaJetFinder & g) ; // cpy ctor
-       AliAnaGammaJetFinder & operator = (const AliAnaGammaJetFinder & g) ;//cpy assignment
-       virtual ~AliAnaGammaJetFinder() ; //virtual dtor
+               AliAnaParticleJetFinderCorrelation() ; // default ctor
+               AliAnaParticleJetFinderCorrelation(const AliAnaParticleJetFinderCorrelation & g) ; // cpy ctor
+               AliAnaParticleJetFinderCorrelation & operator = (const AliAnaParticleJetFinderCorrelation & g) ;//cpy assignment
+               virtual ~AliAnaParticleJetFinderCorrelation() {;} //virtual dtor
               
-       TList * GetCreateOutputObjects();
+               TList * GetCreateOutputObjects();
        
-       void InitParameters();
+               void InitParameters();
        
-       void Print(const Option_t * opt) const;
-       
-       void MakeGammaCorrelation( TParticle * pGamma, TClonesArray *pl, TClonesArray *)  ;
+               void Print(const Option_t * opt) const;
        
+               Float_t  GetConeSize() const {return fConeSize ; }
+               Float_t  GetPtThresholdInCone() const {return fPtThresholdInCone ; }       
+               Double_t GetDeltaPhiMaxCut() const {return fDeltaPhiMaxCut ; }
+               Double_t GetDeltaPhiMinCut() const {return fDeltaPhiMinCut ; }
+               Double_t GetRatioMaxCut() const {return fRatioMaxCut ; }
+               Double_t GetRatioMinCut() const {return fRatioMinCut ; }           
+               Bool_t   AreJetRefTracks() const {return fUseJetRefTracks ; }
+               Bool_t   IsCorrelationMadeInHistoMaker() const {return fMakeCorrelationInHistoMaker ;} 
+               
+               void SetConeSize(Float_t cone) {fConeSize = cone; }
+               void SetPtThresholdInCone(Float_t pt){fPtThresholdInCone = pt; };          
+               void SetDeltaPhiCutRange(Double_t phimin, Double_t phimax)
+                       {fDeltaPhiMaxCut =phimax;  fDeltaPhiMinCut =phimin;}
+               void SetRatioCutRange(Double_t ratiomin, Double_t ratiomax)
+                       {fRatioMaxCut =ratiomax;  fRatioMinCut = ratiomin ; }
+               void UseJetRefTracks(Bool_t use) {fUseJetRefTracks = use ; }    
+           void SetMakeCorrelationInHistoMaker(Bool_t make) {fMakeCorrelationInHistoMaker = make ;}    
+               
+        private:
+    
+               Int_t SelectJet(AliAODParticleCorrelation * particle) ;
+       
+           void MakeAnalysisFillAOD() ;
+        void MakeAnalysisFillHistograms() ;
+                       
   private:
        
-       TH2F * fhDeltaEtaJet; // Difference of jet eta and prompt gamma eta as function of gamma pT
-       TH2F * fhDeltaPhiJet;  // Difference of jet phi and prompt gamma phi as function of gamma pT
-       TH2F * fhDeltaPtJet; // Difference of jet pT and prompt gamma pT as function of gamma pT
-       TH2F * fhPtRatJet; // Ratio of jet pT and prompt gamma pT as function of gamma pT
-       
-       ClassDef(AliAnaGammaJetFinder,1)
+       //selection parameters  
+       Double_t   fDeltaPhiMaxCut ; //! Minimum Delta Phi Gamma-Leading
+       Double_t   fDeltaPhiMinCut ; //!  Maximum Delta Phi Gamma-Leading
+       Double_t   fRatioMaxCut ; //! Jet/ particle Ratio cut maximum
+       Double_t   fRatioMinCut ; //! Jet/particle Ratio cut minimum
+          
+       Double_t   fConeSize  ;         //! Jet cone size 
+       Double_t   fPtThresholdInCone ; //! Jet pT threshold in jet cone
+       Bool_t     fUseJetRefTracks ; //! Use track references from JETAN not the AOD tracks
+       Bool_t     fMakeCorrelationInHistoMaker ; //!Make particle-jet correlation in histogram maker
+          
+       TH2F * fhDeltaEta; //! Difference of jet eta and trigger particle eta as function of trigger particle pT
+       TH2F * fhDeltaPhi;  //! Difference of jet phi and trigger particle phi as function of trigger particle pT
+       TH2F * fhDeltaPt; //! Difference of jet pT and trigger particle pT as function of trigger particle pT
+       TH2F * fhPtRatio; //! Ratio of jet pT and trigger particle pT as function of trigger particle pT
+       TH2F * fhPt; //! jet pT vs trigger particle pT 
+               
+       TH2F * fhFFz ; //! Accepted reconstructed jet fragmentation function, z=ptjet/pttrig
+       TH2F * fhFFxi; //! Accepted reconstructed jet fragmentation function, xsi = ln(pttrig/ptjet)
+       TH2F * fhFFpt; //! Jet particle pt distribution in cone
+       TH2F * fhNTracksInCone   ; //! jet multiplicity in cone
+          
+       ClassDef(AliAnaParticleJetFinderCorrelation,1)
  } ;
 
 
-#endif //ALIANAGAMMAJETFINDER_H
+#endif //AliAnaParticleJetFinderCorrelation_H
 
 
 
index d06878c..1c4a9c7 100644 (file)
@@ -407,7 +407,7 @@ void AliAnaParticleJetLeadingConeCorrelation::FillJetHistos(AliAODParticleCorrel
   
   TVector3 p3;
   Int_t nTracksInCone = 0; 
-  for(Int_t ipr = 0;ipr < pl->GetEntries() ; ipr ++ ){
+  for(Int_t ipr = 0;ipr < pl->GetEntriesFast() ; ipr ++ ){
     AliAODTrack* track = dynamic_cast<AliAODTrack *>(pl->At(ipr)) ;
     p3.SetXYZ(track->Px(),track->Py(),track->Pz());
     
@@ -828,7 +828,7 @@ void  AliAnaParticleJetLeadingConeCorrelation::GetLeadingCharge(AliAODParticleCo
     Double_t phi = -100.;
     TVector3 p3;
     
-    for(Int_t ipr = 0;ipr < GetAODCTS()->GetEntries() ; ipr ++ ){
+    for(Int_t ipr = 0;ipr < GetAODCTS()->GetEntriesFast() ; ipr ++ ){
       AliAODTrack* track = dynamic_cast<AliAODTrack *>(GetAODCTS()->At(ipr)) ;
       p3.SetXYZ(track->Px(),track->Py(),track->Pz());
       pt    = p3.Pt();
@@ -872,7 +872,7 @@ void  AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0(AliAODParticleCorre
     if(!GetReader()->GetDataType()== AliCaloTrackReader::kMC) GetReader()->GetVertex(vertex);
     
     //Cluster loop, select pairs with good pt, phi and fill AODs or histograms
-    for(Int_t iclus = 0;iclus < GetAODEMCAL()->GetEntries() ; iclus ++ ){
+    for(Int_t iclus = 0;iclus < GetAODEMCAL()->GetEntriesFast() ; iclus ++ ){
       AliAODCaloCluster * calo = dynamic_cast< AliAODCaloCluster *>(GetAODEMCAL()->At(iclus)) ;
       
       //Cluster selection, not charged, with photon or pi0 id and in fidutial cut
@@ -901,7 +901,7 @@ void  AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0(AliAODParticleCorre
       else if(pdgi == AliCaloPID::kPhoton){    
        //Search the photon companion in case it comes from  a Pi0 decay
        //Apply several cuts to select the good pair
-       for(Int_t jclus = iclus+1; jclus < GetAODEMCAL()->GetEntries() ; jclus ++ ){
+       for(Int_t jclus = iclus+1; jclus < GetAODEMCAL()->GetEntriesFast() ; jclus ++ ){
          AliAODCaloCluster * calo2 = dynamic_cast< AliAODCaloCluster *>(GetAODEMCAL()->At(jclus)) ;
          
          //Cluster selection, not charged with photon or pi0 id and in fidutial cut
@@ -1160,9 +1160,9 @@ void  AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD()
   //Particle-Hadron Correlation Analysis, fill AODs
   if(GetDebug() > 1){
     printf("Begin jet leading cone  correlation analysis, fill AODs \n");
-    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntries());
-    printf("In CTS aod entries %d\n", GetAODCTS()->GetEntries());
-    printf("In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntries());
+    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntriesFast());
+    printf("In CTS aod entries %d\n", GetAODCTS()->GetEntriesFast());
+    printf("In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast());
   }
   
   TLorentzVector pLeading(0,0,0,0); //It will contain the kinematics of the found leading particle
@@ -1193,9 +1193,9 @@ void  AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms()
   //Particle-Hadron Correlation Analysis, fill AODs
   if(GetDebug() > 1){
     printf("Begin jet leading cone  correlation analysis, fill histograms \n");
-    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntries());
-    printf("In CTS aod entries %d\n", GetAODCTS()->GetEntries());
-    printf("In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntries());
+    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntriesFast());
+    printf("In CTS aod entries %d\n", GetAODCTS()->GetEntriesFast());
+    printf("In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast());
   }
  
   TLorentzVector pLeading(0,0,0,0) ;
@@ -1304,7 +1304,7 @@ void AliAnaParticleJetLeadingConeCorrelation::MakeAODJet(AliAODParticleCorrelati
   
   //Fill jet with tracks
   TVector3 p3;
-  for(Int_t ipr = 0;ipr < (GetAODCTS())->GetEntries() ; ipr ++ ){
+  for(Int_t ipr = 0;ipr < (GetAODCTS())->GetEntriesFast() ; ipr ++ ){
     AliAODTrack* track = dynamic_cast<AliAODTrack *>((GetAODCTS())->At(ipr)) ;
     p3.SetXYZ(track->Px(),track->Py(),track->Pz());
     
@@ -1332,7 +1332,7 @@ void AliAnaParticleJetLeadingConeCorrelation::MakeAODJet(AliAODParticleCorrelati
     Double_t vertex[] = {0,0,0};
     if(!GetReader()->GetDataType()== AliCaloTrackReader::kMC) GetReader()->GetVertex(vertex);
     
-    for(Int_t iclus = 0;iclus < (GetAODEMCAL())->GetEntries() ; iclus ++ ){
+    for(Int_t iclus = 0;iclus < (GetAODEMCAL())->GetEntriesFast() ; iclus ++ ){
       AliAODCaloCluster * calo = dynamic_cast< AliAODCaloCluster *>(GetAODEMCAL()->At(iclus)) ;
       
       //Cluster selection, not charged
@@ -1383,7 +1383,7 @@ void AliAnaParticleJetLeadingConeCorrelation::MakeJetFromAOD(AliAODParticleCorre
   //Fill jet with tracks
   //Particles in jet   
   TVector3 p3;
-  for(Int_t ipr = 0;ipr < (particle->GetRefTracks())->GetEntries() ; ipr ++ ){
+  for(Int_t ipr = 0;ipr < (particle->GetRefTracks())->GetEntriesFast() ; ipr ++ ){
     AliAODTrack* track = dynamic_cast<AliAODTrack *>((particle-> GetRefTracks())->At(ipr)) ;
     p3.SetXYZ(track->Px(),track->Py(),track->Pz());
     if(p3.Pt() > ptcut && IsParticleInJetCone(p3.Eta(), p3.Phi(), etal, phil) ){
@@ -1393,7 +1393,7 @@ void AliAnaParticleJetLeadingConeCorrelation::MakeJetFromAOD(AliAODParticleCorre
   }//jet Track loop
   
   //Particles in background   
-  for(Int_t ipr = 0;ipr < (particle-> GetRefBackgroundTracks())->GetEntries() ; ipr ++ ){
+  for(Int_t ipr = 0;ipr < (particle-> GetRefBackgroundTracks())->GetEntriesFast() ; ipr ++ ){
     AliAODTrack* track = dynamic_cast<AliAODTrack *>((particle->GetRefBackgroundTracks())->At(ipr)) ;
     p3.SetXYZ(track->Px(),track->Py(),track->Pz());
     if(p3.Pt() > ptcut && IsParticleInJetCone(p3.Eta(),p3.Phi(),etal, phiTrig) ) {  
@@ -1409,14 +1409,14 @@ void AliAnaParticleJetLeadingConeCorrelation::MakeJetFromAOD(AliAODParticleCorre
     if(!GetReader()->GetDataType()== AliCaloTrackReader::kMC) GetReader()->GetVertex(vertex);
     
     //Loop on jet particles
-    for(Int_t iclus = 0;iclus < (particle->GetRefClusters())->GetEntries() ; iclus ++ ){
+    for(Int_t iclus = 0;iclus < (particle->GetRefClusters())->GetEntriesFast() ; iclus ++ ){
       AliAODCaloCluster * calo = dynamic_cast< AliAODCaloCluster *>((particle->GetRefClusters())->At(iclus)) ;
       calo->GetMomentum(lv,vertex); 
       if(lv.Pt() > ptcut && IsParticleInJetCone(lv.Eta(),lv.Phi(), etal, phil)) jet+=lv;   
     }//jet cluster loop
     
      //Loop on background particles
-    for(Int_t iclus = 0;iclus < (particle->GetRefClusters())->GetEntries() ; iclus ++ ){
+    for(Int_t iclus = 0;iclus < (particle->GetRefClusters())->GetEntriesFast() ; iclus ++ ){
       AliAODCaloCluster * calo = dynamic_cast< AliAODCaloCluster *>((particle->GetRefClusters())->At(iclus)) ;
       calo->GetMomentum(lv,vertex);
       if( lv.Pt() > ptcut &&IsParticleInJetCone(lv.Eta(),lv.Phi(),etal, phiTrig)) bkg+=lv;
index d81f914..89b1ee7 100644 (file)
@@ -179,7 +179,7 @@ void  AliAnaParticlePartonCorrelation::MakeAnalysisFillAOD()
 
   if(GetDebug() > 1){
     printf("Begin parton correlation analysis, fill AODs \n");
-    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntries());
+    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntriesFast());
   }
   
   //Loop on stored AOD particles
@@ -215,7 +215,7 @@ void  AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms()
   //Particle-Parton Correlation Analysis, fill histograms
   if(GetDebug() > 1){
     printf("Begin parton correlation analysis, fill histograms \n");
-    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntries());
+    printf("In particle branch aod entries %d\n", GetAODBranch()->GetEntriesFast());
   }
 
   AliStack * stack =  GetMCStack() ;
@@ -235,7 +235,7 @@ void  AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms()
     Int_t iparent  = 2000;
     Int_t iawayparent = -1;
 
-    if(!(particle->GetRefTracks()) || (particle->GetRefTracks())->GetEntries() < 7) AliFatal("Reference list with partons not filled, STOP analysis");
+    if(!(particle->GetRefTracks()) || (particle->GetRefTracks())->GetEntriesFast() < 7) AliFatal("Reference list with partons not filled, STOP analysis");
 
     //Check and get indeces of mother and parton    
     if(imom < 8 ) iparent = imom ;   //mother is already a parton
@@ -251,7 +251,7 @@ void  AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms()
       }   
     }
     
-    if(GetDebug() > 1) printf("N reference partons %d; labels:  mother %d, parent %d \n", (particle->GetRefTracks())->GetEntries(), imom, iparent);
+    if(GetDebug() > 1) printf("N reference partons %d; labels:  mother %d, parent %d \n", (particle->GetRefTracks())->GetEntriesFast(), imom, iparent);
 
     
     if(iparent < 0 || iparent > 8) { 
index 8199533..9de1aa3 100644 (file)
@@ -103,7 +103,7 @@ void AliCaloTrackAODReader::FillInputCTS() {
     }//Pt and Fidutial cut passed. 
     //}// track status
   }// track loop
-  if(fDebug > 1) printf("FillInputCTS():: aod entries %d\n", fAODCTS->GetEntries());
+  if(fDebug > 1) printf("FillInputCTS():: aod entries %d\n", fAODCTS->GetEntriesFast());
 }
 
 //____________________________________________________________________________
@@ -120,7 +120,7 @@ void AliCaloTrackAODReader::FillInputEMCAL() {
 
   //Loop to select clusters in fidutial cut and fill container with aodClusters
   Int_t naod = 0;
-  for (Int_t iclus =  0; iclus <  caloClusters->GetEntries(); iclus++) {
+  for (Int_t iclus =  0; iclus <  caloClusters->GetEntriesFast(); iclus++) {
     AliAODCaloCluster * clus = (AliAODCaloCluster *) caloClusters->At(iclus) ;
     TLorentzVector momentum ;
     clus->GetMomentum(momentum, v);      
@@ -135,7 +135,7 @@ void AliCaloTrackAODReader::FillInputEMCAL() {
     }//Pt and Fidutial cut passed.
   }//esd cluster loop
   
-  if(fDebug > 1) printf("FillInputEMCAL():: aod entries %d\n", fAODEMCAL->GetEntries());
+  if(fDebug > 1) printf("FillInputEMCAL():: aod entries %d\n", fAODEMCAL->GetEntriesFast());
 
 }
 
@@ -154,7 +154,7 @@ void AliCaloTrackAODReader::FillInputPHOS() {
   //Loop to select clusters in fidutial cut and fill container with aodClusters
   Int_t naod = 0;
 
-  for (Int_t iclus =  0; iclus <  caloClusters->GetEntries(); iclus++) {
+  for (Int_t iclus =  0; iclus <  caloClusters->GetEntriesFast(); iclus++) {
     AliAODCaloCluster * clus = (AliAODCaloCluster *) caloClusters->At(iclus) ;
     TLorentzVector momentum ;
     clus->GetMomentum(momentum, v);      
@@ -169,7 +169,7 @@ void AliCaloTrackAODReader::FillInputPHOS() {
     }//Pt and Fidutial cut passed.
   }//esd cluster loop
   
-  if(fDebug > 1) printf("FillInputPHOS():: aod entries %d\n", fAODPHOS->GetEntries());
+  if(fDebug > 1) printf("FillInputPHOS():: aod entries %d\n", fAODPHOS->GetEntriesFast());
 
 
 }
index e13e361..f93cd87 100644 (file)
@@ -125,7 +125,7 @@ void AliCaloTrackESDReader::FillInputCTS() {
       }//Pt and Fidutial cut passed. 
     }// track status
   }// track loop
-  if(fDebug > 1) printf("FillInputCTS():: aod entries %d\n", fAODCTS->GetEntries());
+  if(fDebug > 1) printf("FillInputCTS():: aod entries %d\n", fAODCTS->GetEntriesFast());
 }
   
 //____________________________________________________________________________
@@ -146,7 +146,7 @@ void AliCaloTrackESDReader::FillInputEMCAL() {
   Float_t pos[3] ;
 //   Double_t * pid = new Double_t[AliPID::kSPECIESN];
 
-  for (Int_t iclus =  0; iclus <  caloClusters->GetEntries(); iclus++) {
+  for (Int_t iclus =  0; iclus <  caloClusters->GetEntriesFast(); iclus++) {
     AliESDCaloCluster * clus = (AliESDCaloCluster *) caloClusters->At(iclus) ;
     TLorentzVector momentum ;
     clus->GetMomentum(momentum, v);      
@@ -191,7 +191,7 @@ void AliCaloTrackESDReader::FillInputEMCAL() {
     }//Pt and Fidutial cut passed.
   }//esd cluster loop
   
-  if(fDebug > 1) printf("FillInputEMCAL():: aod entries %d\n", fAODEMCAL->GetEntries());
+  if(fDebug > 1) printf("FillInputEMCAL():: aod entries %d\n", fAODEMCAL->GetEntriesFast());
 
 }
 
@@ -212,7 +212,7 @@ void AliCaloTrackESDReader::FillInputPHOS() {
   Float_t pos[3] ;
   Double_t * pid = new Double_t[AliPID::kSPECIESN];
  
-  for (Int_t iclus =  0; iclus <  caloClusters->GetEntries(); iclus++) {
+  for (Int_t iclus =  0; iclus <  caloClusters->GetEntriesFast(); iclus++) {
     AliESDCaloCluster * clus = (AliESDCaloCluster *) caloClusters->At(iclus) ;
     TLorentzVector momentum ;
     clus->GetMomentum(momentum, v);      
@@ -262,7 +262,7 @@ void AliCaloTrackESDReader::FillInputPHOS() {
      
     }//Pt and Fidutial cut passed.
   }//esd cluster loop
-  if(fDebug > 1) printf("FillInputPHOS():: aod entries %d\n", fAODPHOS->GetEntries());
+  if(fDebug > 1) printf("FillInputPHOS():: aod entries %d\n", fAODPHOS->GetEntriesFast());
 
 
 }
index 857929d..6335a96 100644 (file)
@@ -21,8 +21,8 @@
 #pragma link C++ class AliAnaGammaDirect+;
 #pragma link C++ class AliAnaParticlePartonCorrelation+;
 #pragma link C++ class AliAnaParticleHadronCorrelation+;
+#pragma link C++ class AliAnaParticleJetFinderCorrelation+;
 #pragma link C++ class AliAnaParticleJetLeadingConeCorrelation+;
-//#pragma link C++ class AliAnaParticleJetFinderCorrelation+;
 #pragma link C++ class AliAnalysisTaskParticleCorrelation+;
 #pragma link C++ class AliCaloTrackReader+;
 #pragma link C++ class AliCaloTrackESDReader+;
index 720a951..237d6b0 100644 (file)
@@ -6,11 +6,11 @@ SRCS = AliAnaCaloTrigger.cxx AliAnaCaloTriggerMC.cxx \
        AliAnaScale.cxx AliAnaPartCorrMaker.cxx \
        AliAnaPartCorrBaseClass.cxx  AliAnaExample.cxx AliAnaGammaDirect.cxx  \
        AliAnaParticlePartonCorrelation.cxx AliAnaParticleHadronCorrelation.cxx \
-       AliAnaParticleJetLeadingConeCorrelation.cxx AliAnalysisTaskParticleCorrelation.cxx \
+       AliAnaParticleJetFinderCorrelation.cxx \
+          AliAnaParticleJetLeadingConeCorrelation.cxx AliAnalysisTaskParticleCorrelation.cxx \
        AliCaloTrackReader.cxx AliCaloTrackESDReader.cxx \
        AliCaloTrackAODReader.cxx AliCaloTrackMCReader.cxx   AliAnaPi0.cxx AliCaloPhoton.cxx
-
-       #AliAnaParticleJetFinderCorrelation.cxx \
+      
 
 HDRS:= $(SRCS:.cxx=.h) 
 
diff --git a/PWG4/macros/ConfigAnalysisGammaJetFinderCorrelation.C b/PWG4/macros/ConfigAnalysisGammaJetFinderCorrelation.C
new file mode 100644 (file)
index 0000000..9cb3006
--- /dev/null
@@ -0,0 +1,132 @@
+/* $Id: $ */
+
+//------------------------------------
+// Configuration macro example:
+//
+// Do prompt photon - jet (JETAN) correlation analysis with ESDs
+//
+// Author : Gustavo Conesa Balbastre (INFN-LNF)
+//------------------------------------
+
+AliAnaPartCorrMaker*  ConfigAnalysis()
+{
+  //
+  // Configuration goes here
+  // 
+  printf("======================== \n");
+  printf("ConfigAnalysis() \n");
+  printf("======================== \n");
+  
+  
+  //Detector Fidutial Cuts
+  AliFidutialCut * fidCut = new AliFidutialCut();
+  fidCut->DoCTSFidutialCut(kTRUE) ;
+  fidCut->DoEMCALFidutialCut(kTRUE) ;
+  fidCut->DoPHOSFidutialCut(kTRUE) ;
+  
+  fidCut->SetSimpleCTSFidutialCut(0.9,0.,360.);
+  fidCut->SetSimpleEMCALFidutialCut(0.7,80.,190.);
+  fidCut->SetSimplePHOSFidutialCut(0.13,220.,320.);
+  fidCut->Print("");
+  
+  //-----------------------------------------------------------  
+  // Reader
+  //-----------------------------------------------------------
+  AliCaloTrackReader *reader = new AliCaloTrackESDReader();
+  reader->SetDebug(-1);
+
+  //Switch on or off the detectors information that you want
+  reader->SwitchOnEMCAL();
+  reader->SwitchOnCTS();
+  reader->SwitchOnPHOS();
+  reader->SwitchOffEMCALCells();
+  reader->SwitchOffPHOSCells();
+
+  //Min particle pT
+  reader->SetEMCALPtMin(0.5); 
+  reader->SetPHOSPtMin(0.5);
+  reader->SetCTSPtMin(0.2);
+  
+  reader->SetFidutialCut(fidCut);
+  reader->Print("");
+  
+  
+  //---------------------------------------------------------------------
+  // Analysis algorithm
+  //---------------------------------------------------------------------
+  
+  //Detector Fidutial Cuts for analysis part
+  AliFidutialCut * fidCut2 = new AliFidutialCut();
+  fidCut2->DoCTSFidutialCut(kFALSE) ;
+  fidCut2->DoEMCALFidutialCut(kTRUE) ;
+  fidCut2->DoPHOSFidutialCut(kFALSE) ;
+  
+  fidCut2->SetSimpleCTSFidutialCut(0.9,0.,360.);
+  fidCut2->SetSimpleEMCALFidutialCut(0.7,80.,190.);
+  fidCut2->SetSimplePHOSFidutialCut(0.13,220.,320.);
+  fidCut2->Print("");
+
+  AliCaloPID * pid = new AliCaloPID();
+  // use selection with simple weights
+  pid->SetPHOSPhotonWeight(0.7);    pid->SetPHOSPi0Weight(0.7); 
+  pid->SetEMCALPhotonWeight(0.7);    pid->SetEMCALPi0Weight(0.7);
+  
+  pid->Print("");
+
+  AliIsolationCut * ic = new AliIsolationCut();
+  ic->SetConeSize(0.4);
+  ic->SetPtThreshold(1.);
+  ic->SetICMethod(AliIsolationCut::kPtThresIC);
+  ic->Print("");
+
+  //Photon Analysis
+  AliAnaGammaDirect *ana = new AliAnaGammaDirect();
+  ana->SetDebug(-1);
+  ana->SetMinPt(5.);
+  ana->SetCaloPID(pid);
+  ana->SetFidutialCut(fidCut2);
+  ana->SetIsolationCut(ic) ;
+  ana->SetDetector("EMCAL");
+  ana->SwitchOnIsolation();
+  ana->SwitchOnCaloPID();
+  ana->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
+  ana->SwitchOffFidutialCut();
+  ana->SwitchOffInvariantMass();
+  ana->SwitchOffDataMC() ;
+
+  ana->Print("");
+
+  //Photon - JETAN correlation
+  AliAnaParticleJetFinderCorrelation *ana2 = new AliAnaParticleJetFinderCorrelation();
+  ana2->SetDebug(-1);
+  ana2->SetConeSize(1);  
+  ana2->SetPtThresholdInCone(0.5);
+  ana2->SetDeltaPhiCutRange(0.5,5.5);//Mostly Open Cuts 
+  ana2->SetRatioCutRange(0.01,3); //Mostly Open Cuts
+  ana2->UseJetRefTracks(kFALSE); //Not working now
+  ana2->Print("");
+  
+  //---------------------------------------------------------------------
+  // Set  analysis algorithm and reader
+  //---------------------------------------------------------------------
+  maker = new AliAnaPartCorrMaker();
+  maker->SetReader(reader);//pointer to reader
+  maker->AddAnalysis(ana,0);
+  maker->AddAnalysis(ana2,1);
+  maker->SetAODBranchName("PhotonJetCorrelation");
+  maker->SetAnaDebug(-1)  ;
+  maker->SwitchOnHistogramsMaker()  ;
+  //maker->SwitchOffHistogramsMaker() ;  
+  maker->SwitchOnAODsMaker()  ;
+  //maker->SwitchOffAODsMaker() ; 
+  
+  maker->Print("");
+  //
+  printf("======================== \n");
+  printf("END ConfigAnalysis() \n");
+  printf("======================== \n");
+  return maker ;
+}
+
diff --git a/PWG4/macros/anaPartCorrJetAn.C b/PWG4/macros/anaPartCorrJetAn.C
new file mode 100644 (file)
index 0000000..5427d11
--- /dev/null
@@ -0,0 +1,481 @@
+/* $Id:  $ */
+
+//--------------------------------------------------
+// Example macro to do analysis with the 
+// analysis classes in PWG4PartCorr
+// and JETAN at the same time
+// Can be executed with Root and AliRoot
+//
+// Pay attention to the options and definitions
+// set in the lines below
+//
+//  Author : Gustavo Conesa Balbastre (INFN-LNF)
+//
+//-------------------------------------------------
+enum anaModes {mLocal, mLocalCAF,mPROOF,mGRID};
+//mLocal: Analyze locally files in your computer
+//mLocalCAF: Analyze locally CAF files
+//mPROOF: Analyze CAF files with PROOF
+
+//---------------------------------------------------------------------------
+//Settings to read locally several files, only for "mLocal" mode
+//The different values are default, they can be set with environmental 
+//variables: INDIR, PATTERN, NEVENT, respectivelly
+char * kInDir = "/home/group/alice/schutz/analysis/PWG4/data"; 
+char * kPattern = ""; // Data are in diles /data/Run0, 
+// /Data/Run1 ...
+Int_t kEvent = 1; // Number of files
+//---------------------------------------------------------------------------
+//Collection file for grid analysis
+char * kXML = "collection.xml";
+//---------------------------------------------------------------------------
+//Scale histograms from file. Change to kTRUE when xsection file exists
+//Put name of file containing xsection 
+//Put number of events per ESD file
+//This is an specific case for normalization of Pythia files.
+const Bool_t kGetXSectionFromFileAndScale = kTRUE ;
+const char * kXSFileName = "pyxsec.root";
+const Int_t kNumberOfEventsPerFile = 100; 
+//---------------------------------------------------------------------------
+
+const Bool_t kMC = kTRUE; //With real data kMC = kFALSE
+const TString kInputData = "ESD";
+void anaPartCorrJETAN(Int_t mode=mLocal, TString configName = "ConfigAnalysisExample")
+{
+  // Main
+
+  //--------------------------------------------------------------------
+  // Load analysis libraries
+  // Look at the method below, 
+  // change whatever you need for your analysis case
+  // ------------------------------------------------------------------
+  LoadLibraries(mode) ;
+  
+  //-------------------------------------------------------------------------------------------------
+  //Create chain from ESD and from cross sections files, look below for options.
+  //------------------------------------------------------------------------------------------------- 
+  TChain *chain   = new TChain("esdTree") ;
+  TChain * chainxs = new TChain("Xsection") ;
+  CreateChain(mode, chain, chainxs);  
+
+  if(chain){
+    AliLog::SetGlobalLogLevel(AliLog::kError);//Minimum prints on screen
+    
+    //--------------------------------------
+    // Make the analysis manager
+    //-------------------------------------
+    AliAnalysisManager *mgr  = new AliAnalysisManager("Manager", "Manager");
+    // MC handler
+    if(kMC){
+      AliMCEventHandler* mcHandler = new AliMCEventHandler();
+      mcHandler->SetReadTR(kFALSE);//Do not search TrackRef file
+      mgr->SetMCtruthEventHandler(mcHandler);
+    }
+
+    // AOD output handler
+    AliAODHandler* aodoutHandler   = new AliAODHandler();
+    aodoutHandler->SetOutputFileName("aod.root");
+    //aodoutHandler->SetCreateNonStandardAOD();
+    mgr->SetOutputEventHandler(aodoutHandler);
+    
+    //input
+    if(kInputData == "ESD"){
+      // ESD handler
+      AliESDInputHandler *esdHandler = new AliESDInputHandler();
+      mgr->SetInputEventHandler(esdHandler);
+    }
+    if(kInputData == "AOD"){
+      // AOD handler
+      AliAODInputHandler *aodHandler = new AliAODInputHandler();
+      mgr->SetInputEventHandler(aodHandler);
+    }
+
+    mgr->SetDebugLevel(10); // For debugging
+
+    //-------------------------------------------------------------------------
+    //Define task, put here any other task that you want to use.
+    //-------------------------------------------------------------------------
+       
+       AliAnalysisTaskJets *jetana = new AliAnalysisTaskJets("JetAnalysis");
+    jetana->SetDebugLevel(-1);
+    mgr->AddTask(jetana);
+       
+    AliAnalysisTaskParticleCorrelation * taskpwg4 = new AliAnalysisTaskParticleCorrelation ("Particle");
+    taskpwg4->SetConfigFileName(configName); //Default name is ConfigAnalysis
+       
+    mgr->AddTask(taskpwg4);
+    
+    // Create containers for input/output
+    AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("cchain",TChain::Class(), 
+                                                            AliAnalysisManager::kInputContainer);
+    AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("tree", TTree::Class(),
+                                                             AliAnalysisManager::kOutputContainer, "default");
+    AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("corrhistos", TList::Class(),
+                                                             AliAnalysisManager::kOutputContainer, "histos.root");
+    
+    AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("jethistos", TList::Class(),
+                                                             AliAnalysisManager::kOutputContainer, "histos.root");
+       
+    mgr->ConnectInput  (taskpwg4,     0, cinput1);
+    mgr->ConnectOutput (taskpwg4,     0, coutput1 );
+    mgr->ConnectOutput (taskpwg4,     1, coutput2 );
+       
+       mgr->ConnectInput  (jetana,     0, cinput1);
+       mgr->ConnectOutput (jetana,     0, coutput1 );
+    mgr->ConnectOutput (jetana,     1, coutput3 );
+
+    //------------------------  
+    //Scaling task
+    //-----------------------
+    Int_t nfiles = chainxs->GetEntries();
+    //cout<<"Get? "<<kGetXSectionFromFileAndScale<<" nfiles "<<nfiles<<endl;
+    if(kGetXSectionFromFileAndScale && nfiles > 0){
+      //cout<<"Init AnaScale"<<endl;
+      //Get the cross section
+      Double_t xsection=0; 
+      Float_t ntrials = 0;
+      GetAverageXsection(chainxs, xsection, ntrials);
+      
+      AliAnaScale * scale = new AliAnaScale("scale") ;
+      scale->Set(xsection/ntrials/kNumberOfEventsPerFile/nfiles) ;
+      scale->MakeSumw2(kFALSE);
+      scale->SetDebugLevel(2);
+      mgr->AddTask(scale);
+      
+      AliAnalysisDataContainer *coutput4 = mgr->CreateContainer("corrhistosscaled", TList::Class(),
+                                                               AliAnalysisManager::kOutputContainer, "histosscaled.root");
+      mgr->ConnectInput  (scale,     0, coutput2);
+      mgr->ConnectOutput (scale,     0, coutput4 );
+         
+         AliAnaScale * scalejet = new AliAnaScale("scalejet") ;
+      scalejet->Set(xsection/ntrials/kNumberOfEventsPerFile/nfiles) ;
+      scalejet->MakeSumw2(kFALSE);
+      scalejet->SetDebugLevel(2);
+      mgr->AddTask(scalejet);
+      
+      AliAnalysisDataContainer *coutput5 = mgr->CreateContainer("jethistosscaled", TList::Class(),
+                                                               AliAnalysisManager::kOutputContainer, "histosscaled.root");
+      mgr->ConnectInput  (scalejet,     0, coutput3);
+      mgr->ConnectOutput (scalejet,     0, coutput5 );   
+    }
+    
+    //-----------------------
+    // Run the analysis
+    //-----------------------    
+    TString smode = "";
+    if (mode==mLocal || mode == mLocalCAF) 
+      smode = "local";
+    else if (mode==mPROOF) 
+      smode = "proof";
+    else if (mode==mGRID) 
+      smode = "grid";
+    
+    mgr->InitAnalysis();
+    mgr->PrintStatus();
+    mgr->StartAnalysis(smode.Data(),chain);
+
+cout <<" Analysis ended sucessfully "<< endl ;
+
+  }
+  else cout << "Chain was not produced ! "<<endl;
+  
+}
+
+void  LoadLibraries(const anaModes mode) {
+  
+  //--------------------------------------
+  // Load the needed libraries most of them already loaded by aliroot
+  //--------------------------------------
+  gSystem->Load("libTree.so");
+  gSystem->Load("libGeom.so");
+  gSystem->Load("libVMC.so");
+  gSystem->Load("libXMLIO.so");
+  
+  //----------------------------------------------------------
+  // >>>>>>>>>>> Local mode <<<<<<<<<<<<<< 
+  //----------------------------------------------------------
+  if (mode==mLocal || mode == mLocalCAF || mode == mGRID) {
+    //--------------------------------------------------------
+    // If you want to use already compiled libraries 
+    // in the aliroot distribution
+    //--------------------------------------------------------
+    //gSystem->Load("libSTEERBase");
+    //gSystem->Load("libESD");
+    //gSystem->Load("libAOD");
+    //gSystem->Load("libANALYSIS");
+    //gSystem->Load("libANALYSISalice");
+        //gSystem->Load("libJETAN");
+        //gSystem->Load("libPWG4PartCorr");
+    
+    //--------------------------------------------------------
+    //If you want to use root and par files from aliroot
+    //--------------------------------------------------------  
+    SetupPar("STEERBase");
+    SetupPar("ESD");
+    SetupPar("AOD");
+    SetupPar("ANALYSIS");
+    SetupPar("ANALYSISalice");
+       SetupPar("JETAN");
+    SetupPar("PWG4PartCorr");
+    
+  }
+
+  //---------------------------------------------------------
+  // <<<<<<<<<< PROOF mode >>>>>>>>>>>>
+  //---------------------------------------------------------
+  else if (mode==mPROOF) {
+    //
+    // Connect to proof
+    // Put appropriate username here
+    // TProof::Reset("proof://mgheata@lxb6046.cern.ch"); 
+    TProof::Open("proof://mgheata@lxb6046.cern.ch");
+    
+    //    gProof->ClearPackages();
+    //    gProof->ClearPackage("ESD");
+    //    gProof->ClearPackage("AOD");
+    //    gProof->ClearPackage("ANALYSIS"); 
+       //    gProof->ClearPackage("JETAN");  
+       //    gProof->ClearPackage("PWG4PartCorr");
+    
+    // Enable the STEERBase Package
+    gProof->UploadPackage("STEERBase.par");
+    gProof->EnablePackage("STEERBase");
+    // Enable the ESD Package
+    gProof->UploadPackage("ESD.par");
+    gProof->EnablePackage("ESD");
+    // Enable the AOD Package
+    gProof->UploadPackage("AOD.par");
+    gProof->EnablePackage("AOD");
+    // Enable the Analysis Package
+    gProof->UploadPackage("ANALYSIS.par");
+    gProof->EnablePackage("ANALYSIS");
+       // Enable JETAN
+    gProof->UploadPackage("JETAN.par");
+    gProof->EnablePackage("JETAN");
+    // Enable gamma jet analysis
+    gProof->UploadPackage("PWG4PartCorr.par");
+    gProof->EnablePackage("PWG4PartCorr");
+    //
+    gProof->ShowEnabledPackages();
+  }  
+  
+}
+
+void SetupPar(char* pararchivename)
+{
+  //Load par files, create analysis libraries
+  //For testing, if par file already decompressed and modified
+  //classes then do not decompress.
+  TString cdir(Form("%s", gSystem->WorkingDirectory() )) ; 
+  TString parpar(Form("%s.par", pararchivename)) ; 
+  if ( gSystem->AccessPathName(parpar.Data()) ) {
+    gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ;
+    TString processline(Form(".! make %s", parpar.Data())) ; 
+    gROOT->ProcessLine(processline.Data()) ;
+    gSystem->ChangeDirectory(cdir) ; 
+    processline = Form(".! mv $ALICE_ROOT/%s .", parpar.Data()) ;
+    gROOT->ProcessLine(processline.Data()) ;
+  } 
+  if ( gSystem->AccessPathName(pararchivename) ) {  
+    TString processline = Form(".! tar xvzf %s",parpar.Data()) ;
+    gROOT->ProcessLine(processline.Data());
+  }
+  
+  TString ocwd = gSystem->WorkingDirectory();
+  gSystem->ChangeDirectory(pararchivename);
+  
+  // check for BUILD.sh and execute
+  if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
+    printf("*******************************\n");
+    printf("*** Building PAR archive    ***\n");
+    cout<<pararchivename<<endl;
+    printf("*******************************\n");
+    
+    if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
+      Error("runProcess","Cannot Build the PAR Archive! - Abort!");
+      return -1;
+    }
+  }
+  // check for SETUP.C and execute
+  if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
+    printf("*******************************\n");
+    printf("*** Setup PAR archive       ***\n");
+    cout<<pararchivename<<endl;
+    printf("*******************************\n");
+    gROOT->Macro("PROOF-INF/SETUP.C");
+  }
+  
+  gSystem->ChangeDirectory(ocwd.Data());
+  printf("Current dir: %s\n", ocwd.Data());
+}
+
+
+
+void CreateChain(const anaModes mode, TChain * chain, TChain * chainxs){
+  //Fills chain with data
+  TString ocwd = gSystem->WorkingDirectory();
+  
+  //-----------------------------------------------------------
+  //Analysis of CAF data locally and with PROOF
+  //-----------------------------------------------------------
+  if(mode ==mPROOF || mode ==mLocalCAF){
+    // Chain from CAF
+    gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
+    // The second parameter is the number of input files in the chain
+    chain = CreateESDChain("ESD12001.txt", 5);  
+  }
+  
+  //---------------------------------------
+  //Local files analysis
+  //---------------------------------------
+  else if(mode == mLocal){    
+    //If you want to add several ESD files sitting in a common directory INDIR
+    //Specify as environmental variables the directory (INDIR), the number of files 
+    //to analyze (NEVENT) and the pattern name of the directories with files (PATTERN)
+
+    if(gSystem->Getenv("INDIR"))  
+      kInDir = gSystem->Getenv("INDIR") ; 
+    else cout<<"INDIR not set, use default: "<<kInDir<<endl;   
+    
+    if(gSystem->Getenv("PATTERN"))   
+      kPattern = gSystem->Getenv("PATTERN") ; 
+    else  cout<<"PATTERN not set, use default: "<<kPattern<<endl;
+    
+    if(gSystem->Getenv("NEVENT"))
+      kEvent = atoi(gSystem->Getenv("NEVENT")) ;
+    else cout<<"NEVENT not set, use default: "<<kEvent<<endl;
+    
+    //Check if env variables are set and are correct
+    if ( kInDir  && kEvent) {
+      printf("Get %d files from directory %s\n",kEvent,kInDir);
+      if ( ! gSystem->cd(kInDir) ) {//check if ESDs directory exist
+       printf("%s does not exist\n", kInDir) ;
+       return ;
+      }
+      cout<<"INDIR : "<<kInDir<<endl;
+      cout<<"NEVENT : "<<kEvent<<endl;
+      cout<<"PATTERN: " <<kPattern<<endl;
+      
+      //Loop on ESD files, add them to chain
+      Int_t event =0;
+      Int_t skipped=0 ; 
+      char file[120] ;
+      char filexs[120] ;
+      
+      for (event = 0 ; event < kEvent ; event++) {
+       sprintf(file, "%s/%s%d/AliESDs.root", kInDir,kPattern,event) ; 
+       sprintf(filexs, "%s/%s%d/%s", kInDir,kPattern,event,kXSFileName) ; 
+       TFile * fESD = 0 ; 
+       //Check if file exists and add it, if not skip it
+       if ( fESD = TFile::Open(file)) {
+         if ( fESD->Get("esdTree") ) { 
+           printf("++++ Adding %s\n", file) ;
+           chain->AddFile(file);
+           chainxs->Add(filexs) ; 
+         }
+       }
+       else { 
+         printf("---- Skipping %s\n", file) ;
+         skipped++ ;
+       }
+      }
+      printf("number of entries # %lld, skipped %d\n", chain->GetEntries(), skipped*100) ;     
+    }
+    else {
+      TString input = "AliESDs.root" ;
+      cout<<">>>>>> No list added, take a single file <<<<<<<<< "<<input<<endl;
+      chain->AddFile(input);
+    }
+    
+  }// local files analysis
+  
+  //------------------------------
+  //GRID xml files
+  //-----------------------------
+  else if(mode == mGRID){
+    //Get colection file. It is specified by the environmental
+    //variable XML
+
+    if(gSystem->Getenv("XML") )
+      kXML = gSystem->Getenv("XML");
+    else
+      sprintf(kXML, "collection.xml") ; 
+    
+    if (!TFile::Open(kXML)) {
+      printf("No collection file with name -- %s -- was found\n",kXML);
+      return ;
+    }
+    else cout<<"XML file "<<kXML<<endl;
+
+    //Load necessary libraries and connect to the GRID
+    gSystem->Load("libNetx.so") ; 
+    gSystem->Load("libRAliEn.so"); 
+    TGrid::Connect("alien://") ;
+
+    //Feed Grid with collection file
+    //TGridCollection * collection =  (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)", kXML));
+    TGridCollection * collection = (TGridCollection*) TAlienCollection::Open(kXML);
+    if (! collection) {
+      AliError(Form("%s not found", kXML)) ; 
+      return kFALSE ; 
+    }
+    TGridResult* result = collection->GetGridResult("",0 ,0);
+   
+    // Makes the ESD chain 
+    printf("*** Getting the Chain       ***\n");
+    for (Int_t index = 0; index < result->GetEntries(); index++) {
+      TString alienURL = result->GetKey(index, "turl") ; 
+      cout << "================== " << alienURL << endl ; 
+      chain->Add(alienURL) ; 
+      alienURL.ReplaceAll("AliESDs.root",kXSFileName);
+      chainxs->Add(alienURL) ; 
+    }
+  }// xml analysis
+  
+  gSystem->ChangeDirectory(ocwd.Data());
+}
+
+//________________________________________________
+void GetAverageXsection(TTree * tree, Double_t & xs, Float_t & ntr)
+{
+  // Read the PYTHIA statistics from the file pyxsec.root created by
+  // the function WriteXsection():
+  // integrated cross section (xsection) and
+  // the  number of Pyevent() calls (ntrials)
+  // and calculate the weight per one event xsection/ntrials
+  // The spectrum calculated by a user should be
+  // multiplied by this weight, something like this:
+  // TH1F *userSpectrum ... // book and fill the spectrum
+  // userSpectrum->Scale(weight)
+  //
+  // Yuri Kharlov 19 June 2007
+  // Gustavo Conesa 15 April 2008
+  Double_t xsection = 0;
+  UInt_t    ntrials = 0;
+  xs = 0;
+  ntr = 0;
+  
+  Int_t nfiles =  tree->GetEntries()  ;
+  if (tree && nfiles > 0) {
+    tree->SetBranchAddress("xsection",&xsection);
+    tree->SetBranchAddress("ntrials",&ntrials);
+    for(Int_t i = 0; i < nfiles; i++){
+      tree->GetEntry(i);
+      xs += xsection ;
+      ntr += ntrials ;
+      cout << "xsection " <<xsection<<" ntrials "<<ntrials<<endl; 
+    }
+    
+    xs =   xs /  nfiles;
+    ntr =  ntr / nfiles;
+    cout << "-----------------------------------------------------------------"<<endl;
+    cout << "Average of "<< nfiles<<" files: xsection " <<xs<<" ntrials "<<ntr<<endl; 
+    cout << "-----------------------------------------------------------------"<<endl;
+  } 
+  else cout << " >>>> Empty tree !!!! <<<<< "<<endl;
+  
+}
+
+
+