]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
clean up in spectrum task, added area histograms and deltaAOD running
authorkleinb <kleinb@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 12 Feb 2011 10:22:55 +0000 (10:22 +0000)
committerkleinb <kleinb@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 12 Feb 2011 10:22:55 +0000 (10:22 +0000)
PWG4/JetTasks/AliAnalysisTaskJetSpectrum2.cxx
PWG4/JetTasks/AliAnalysisTaskJetSpectrum2.h
PWG4/macros/AddTaskJetSpectrum2.C
PWG4/macros/AnalysisTrainPWG4Jets.C

index cf4dcc3823017cf48fdde244e8f513b801937c34..0d1b5e0d485fdfbd1e78ece000bb14c3333ed76b 100644 (file)
@@ -1,4 +1,3 @@
-
 // **************************************
 // Task used for the correction of determiantion of reconstructed jet spectra
 // Compares input (gen) and output (rec) jets   
@@ -35,6 +34,7 @@
 #include <TList.h>
 #include <TLorentzVector.h>
 #include <TClonesArray.h>
+#include <TRefArray.h>
 #include  "TDatabasePDG.h"
 
 #include "AliAnalysisTaskJetSpectrum2.h"
@@ -64,7 +64,8 @@
 
 ClassImp(AliAnalysisTaskJetSpectrum2)
 
-AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(): AliAnalysisTaskSE(),
+AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(): 
+  AliAnalysisTaskSE(),
   fJetHeaderRec(0x0),
   fJetHeaderGen(0x0),
   fAODIn(0x0),
@@ -75,7 +76,8 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(): AliAnalysisTaskSE(),
   f1PtScale(0x0),
   fBranchRec("jets"),
   fBranchGen(""),
-  fBranchBkg(""), 
+  fBranchBkgRec(""), 
+  fBranchBkgGen(""), 
   fNonStdFile(""),
   fUseAODJetInput(kFALSE),
   fUseAODTrackInput(kFALSE),
@@ -83,9 +85,7 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(): AliAnalysisTaskSE(),
   fUseGlobalSelection(kFALSE),
   fUseExternalWeightOnly(kFALSE),
   fLimitGenJetEta(kFALSE),
-  fBkgSubtraction(kFALSE),
   fNMatchJets(5),
-  fFillCorrBkg(0),
   fFilterMask(0),
   fEventSelectionMask(0),
   fAnalysisType(0),
@@ -99,6 +99,8 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(): AliAnalysisTaskSE(),
   fMinJetPt(0),
   fMinTrackPt(0.15),
   fDeltaPhiWindow(90./180.*TMath::Pi()),
+  fMultRec(0),
+  fMultGen(0),
   fh1Xsec(0x0),
   fh1Trials(0x0),
   fh1PtHard(0x0),
@@ -106,6 +108,8 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(): AliAnalysisTaskSE(),
   fh1PtHardTrials(0x0),
   fh1ZVtx(0x0),
   fh1TmpRho(0x0),
+  fh2MultRec(0x0),
+  fh2MultGen(0x0),
   fh2PtFGen(0x0),
   fh2RelPtFGen(0x0),
   fHistList(0x0)  
@@ -120,13 +124,15 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(): AliAnalysisTaskSE(),
     fh1PtJetsIn[ij] = 0;
     fh1PtTracksIn[ij] = 0;
     fh1PtTracksLeadingIn[ij] = 0;
+    fh2MultJetPt[ij] = 0;
     fh2NJetsPt[ij]  = 0;
     fh2NTracksPt[ij]  = 0;
-    fh2LeadingJetPtJetPhi[ij] = 0;
     fh2LeadingTrackPtTrackPhi[ij] = 0;
-    for(int i = 0;i < kMaxJets;++i){
+    for(int i = 0;i <= kMaxJets;++i){
       fh2PhiPt[ij][i] = 0;
       fh2EtaPt[ij][i] = 0;
+      fh2AreaPt[ij][i] = 0;
+      fh2EtaArea[ij][i] = 0;
       fh2PhiEta[ij][i] = 0; 
       
       fh1PtIn[ij][i] = 0;
@@ -155,7 +161,8 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(const char* name):
   f1PtScale(0x0),
   fBranchRec("jets"),
   fBranchGen(""),
-  fBranchBkg(""),
+  fBranchBkgRec(""),
+  fBranchBkgGen(""),
   fNonStdFile(""),
   fUseAODJetInput(kFALSE),
   fUseAODTrackInput(kFALSE),
@@ -163,9 +170,7 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(const char* name):
   fUseGlobalSelection(kFALSE),
   fUseExternalWeightOnly(kFALSE),
   fLimitGenJetEta(kFALSE),
-  fBkgSubtraction(kFALSE),
   fNMatchJets(5),
-  fFillCorrBkg(0),
   fFilterMask(0),
   fEventSelectionMask(0),
   fAnalysisType(0),
@@ -179,6 +184,8 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(const char* name):
   fMinJetPt(0),
   fMinTrackPt(0.15),
   fDeltaPhiWindow(90./180.*TMath::Pi()),
+  fMultRec(0),
+  fMultGen(0),
   fh1Xsec(0x0),
   fh1Trials(0x0),
   fh1PtHard(0x0),
@@ -186,6 +193,8 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(const char* name):
   fh1PtHardTrials(0x0),
   fh1ZVtx(0x0),
   fh1TmpRho(0x0),
+  fh2MultRec(0x0),
+  fh2MultGen(0x0),
   fh2PtFGen(0x0),
   fh2RelPtFGen(0x0),
   fHistList(0x0)
@@ -201,13 +210,15 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(const char* name):
     fh1PtJetsIn[ij] = 0;
     fh1PtTracksIn[ij] = 0;
     fh1PtTracksLeadingIn[ij] = 0;
+    fh2MultJetPt[ij] = 0;
     fh2NJetsPt[ij]  = 0;
     fh2NTracksPt[ij]  = 0;
-    fh2LeadingJetPtJetPhi[ij] = 0;
     fh2LeadingTrackPtTrackPhi[ij] = 0;
-    for(int i = 0;i < kMaxJets;++i){
+    for(int i = 0;i <= kMaxJets;++i){
       fh2PhiPt[ij][i] = 0;
       fh2EtaPt[ij][i] = 0;
+      fh2AreaPt[ij][i] = 0;
+      fh2EtaArea[ij][i] = 0;
       fh2PhiEta[ij][i] = 0; 
 
       fh1PtIn[ij][i] = 0;
@@ -222,7 +233,7 @@ AliAnalysisTaskJetSpectrum2::AliAnalysisTaskJetSpectrum2(const char* name):
     fh2DijetDifvsSum[ij] = 0;
   } 
 
- DefineOutput(1, TList::Class());  
 DefineOutput(1, TList::Class());  
 }
 
 
@@ -288,14 +299,12 @@ void AliAnalysisTaskJetSpectrum2::UserCreateOutputObjects()
   // Connect the AOD
 
   if (fDebug > 1) printf("AnalysisTaskJetSpectrum2::UserCreateOutputObjects() \n");
-
   OpenFile(1);
-  if(!fHistList)fHistList = new TList();
+  if(!fHistList)fHistList = new TList(); 
   fHistList->SetOwner(kTRUE);
-  Bool_t oldStatus = TH1::AddDirectoryStatus();
+  Bool_t oldStatus = TH1::AddDirectoryStatus(); 
   TH1::AddDirectory(kFALSE);
 
-
   MakeJetContainer();
   fHistList->Add(fhnCorrelation);
   fHistList->Add(fhnCorrelationPhiZRec);
@@ -314,30 +323,17 @@ void AliAnalysisTaskJetSpectrum2::UserCreateOutputObjects()
       binLimitsPt[iPt] =  binLimitsPt[iPt-1] + 1.0;
     }
   }
-  
   const Int_t nBinPhi = 90;
   Double_t binLimitsPhi[nBinPhi+1];
   for(Int_t iPhi = 0;iPhi<=nBinPhi;iPhi++){
     if(iPhi==0){
-      binLimitsPhi[iPhi] = -1.*TMath::Pi();
+      binLimitsPhi[iPhi] = 0;
     }
     else{
       binLimitsPhi[iPhi] = binLimitsPhi[iPhi-1] + 1/(Float_t)nBinPhi * TMath::Pi()*2;
     }
   }
 
-
-  const Int_t nBinPhi2 = 360;
-  Double_t binLimitsPhi2[nBinPhi2+1];
-  for(Int_t iPhi2 = 0;iPhi2<=nBinPhi2;iPhi2++){
-    if(iPhi2==0){
-      binLimitsPhi2[iPhi2] = 0.;
-    }
-    else{
-      binLimitsPhi2[iPhi2] = binLimitsPhi2[iPhi2-1] + 1/(Float_t)nBinPhi2 * TMath::Pi()*2;
-    }
-  }
-
   const Int_t nBinEta = 40;
   Double_t binLimitsEta[nBinEta+1];
   for(Int_t iEta = 0;iEta<=nBinEta;iEta++){
@@ -353,23 +349,22 @@ void AliAnalysisTaskJetSpectrum2::UserCreateOutputObjects()
   fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
   fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
    fHistList->Add(fh1Xsec);
-
   fh1Trials = new TH1F("fh1Trials","trials root file",1,0,1);
   fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
   fHistList->Add(fh1Trials);
-
   fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",nBinPt,binLimitsPt);
   fHistList->Add(fh1PtHard);
-
   fh1PtHardNoW = new TH1F("fh1PtHardNoW","PYTHIA Pt hard no weight;p_{T,hard}",nBinPt,binLimitsPt);
   fHistList->Add(fh1PtHardNoW);
-  
   fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",nBinPt,binLimitsPt);
   fHistList->Add(fh1PtHardTrials);
-
   
   fh1ZVtx = new TH1F("fh1ZVtx","z vtx;z_{vtx} (cm)",400,-20,20);
   fHistList->Add(fh1ZVtx);
+  fh2MultRec = new TH2F("fh2MultRec","multiplicity rec;# tracks;# jetrefs",400,-0.5,4000,400,0.,4000);
+  fHistList->Add(fh2MultRec);
+  fh2MultGen = new TH2F("fh2MultGen","multiplicity gen;# tracks;# jetrefs",400,-0.5,4000,400,0.,4000);
+  fHistList->Add(fh2MultGen);
 
   fh2PtFGen = new TH2F("fh2PtFGen",Form("%s vs. %s;p_{T,gen};p_{T,rec}",fBranchRec.Data(),fBranchGen.Data()),nBinPt,binLimitsPt,nBinPt,binLimitsPt);
   fHistList->Add(fh2PtFGen);
@@ -377,7 +372,6 @@ void AliAnalysisTaskJetSpectrum2::UserCreateOutputObjects()
   fh2RelPtFGen = new TH2F("fh2RelPtFGen",";p_{T,gen};p_{T,rec}-p_{T,gen}/p_{T,Gen}",nBinPt,binLimitsPt,241,-2.41,2.41);
   fHistList->Add(fh2RelPtFGen);
 
-
     for(int ij = 0;ij <kJetTypes;++ij){    
       TString cAdd = "";
       TString cJetBranch = "";
@@ -413,22 +407,20 @@ void AliAnalysisTaskJetSpectrum2::UserCreateOutputObjects()
       fh1SumPtTrack[ij] = new TH1F(Form("fh1SumPtTrack%s",cAdd.Data()),Form("Sum %s track p_T;p_{T} (GeV/c)",cAdd.Data()),nBinPt,binLimitsPt);
       fHistList->Add(fh1SumPtTrack[ij]);
 
+      fh2MultJetPt[ij]  = new TH2F(Form("fh2MultJetPt%s",cAdd.Data()),Form("%s jets p_T;# tracks;;p_{T} (GeV/c)",cAdd.Data()),400,0,4000,nBinPt,binLimitsPt);
+      fHistList->Add(fh2MultJetPt[ij]);
+
       fh2NJetsPt[ij]  = new TH2F(Form("fh2N%sJetsPt",cAdd.Data()),Form("Number of %s jets above threshhold;p_{T,cut} (GeV/c);N_{jets}",cAdd.Data()),nBinPt,binLimitsPt,50,-0.5,49.5);
       fHistList->Add(fh2NJetsPt[ij]);
 
       fh2NTracksPt[ij]  = new TH2F(Form("fh2N%sTracksPt",cAdd.Data()),Form("Number of %s tracks above threshhold;p_{T,cut} (GeV/c);N_{tracks}",cAdd.Data()),nBinPt,binLimitsPt,1000,0.,4000);
       fHistList->Add(fh2NTracksPt[ij]);
 
-      fh2LeadingJetPtJetPhi[ij] = new TH2F(Form("fh2Leading%sJetPtJetPhi",cAdd.Data()),Form("phi of leading %s jet;p_{T};#phi;",cAdd.Data()),
-                                          nBinPt,binLimitsPt,nBinPhi,binLimitsPhi);
-      fHistList->Add(fh2LeadingJetPtJetPhi[ij]);
-    
       fh2LeadingTrackPtTrackPhi[ij] = new TH2F(Form("fh2Leading%sTrackPtTrackPhi",cAdd.Data()),Form("phi of leading %s track;p_{T};#phi;",cAdd.Data()),
                                               nBinPt,binLimitsPt,nBinPhi,binLimitsPhi);
       fHistList->Add(fh2LeadingTrackPtTrackPhi[ij]);
-      
-      for(int i = 0;i < kMaxJets;++i){
 
+      for(int i = 0;i <= kMaxJets;++i){
        fh1PtIn[ij][i] = new TH1F(Form("fh1Pt%sIn_j%d",cAdd.Data(),i),Form("%s p_T input ;p_{T}",cAdd.Data()),nBinPt,binLimitsPt);
        fHistList->Add(fh1PtIn[ij][i]);
 
@@ -436,22 +428,29 @@ void AliAnalysisTaskJetSpectrum2::UserCreateOutputObjects()
                                   40,0.,2.,nBinPt,binLimitsPt);
        fHistList->Add(fh2RhoPt[ij][i]);
        if(!fh1TmpRho)fh1TmpRho = new TH1F("fh1TmpRho","tmp histo for jet shape",40,0.,2);
-
-
        fh2PsiPt[ij][i] = new TH2F(Form("fh2PsiPt%s_j%d",cAdd.Data(),i),Form("jet shape #psi for %s jets;r;p_{T};",cAdd.Data()),
                                     40,0.,2.,nBinPt,binLimitsPt);
        fHistList->Add(fh2PsiPt[ij][i]);
-
-       fh2PhiPt[ij][i] = new TH2F(Form("fh2PhiPt%s_j%d",cAdd.Data(),i),Form("pt vs phi %s;phi;p_{T};",cAdd.Data()),
+       fh2PhiPt[ij][i] = new TH2F(Form("fh2PhiPt%s_j%d",cAdd.Data(),i),Form("pt vs phi %s;#phi;p_{T};",cAdd.Data()),
                                   nBinPhi,binLimitsPhi,nBinPt,binLimitsPt);
        fHistList->Add(fh2PhiPt[ij][i]);
-       fh2EtaPt[ij][i] = new TH2F(Form("fh2EtaPt%s_j%d",cAdd.Data(),i),Form("pt vs phi %s;phi;p_{T};",cAdd.Data()),
-                                  20,-1.,1.,nBinPt,binLimitsPt);
+       fh2EtaPt[ij][i] = new TH2F(Form("fh2EtaPt%s_j%d",cAdd.Data(),i),Form("pt vs eta %s;#eta;p_{T};",cAdd.Data()),
+                                  50,-1.,1.,nBinPt,binLimitsPt);
        fHistList->Add(fh2EtaPt[ij][i]);
+       fh2AreaPt[ij][i] = new TH2F(Form("fh2AreaPt%s_j%d",cAdd.Data(),i),
+                                   Form("pt vs area %s;area;p_{T};",
+                                        cAdd.Data()),
+                                   50,0.,1.,nBinPt,binLimitsPt);
+       fHistList->Add(fh2AreaPt[ij][i]);
+       fh2EtaArea[ij][i] = new TH2F(Form("fh2EtaArea%s_j%d",cAdd.Data(),i),
+                                    Form("area vs eta %s;#eta;area;",
+                                         cAdd.Data()),
+                                    50,-1.,1.,50,0,1.);
+       fHistList->Add(fh2EtaArea[ij][i]);
+
        fh2PhiEta[ij][i] =  new TH2F(Form("fh2PhiEta%s_j%d",cAdd.Data(),i),Form("phi vs eta %s ;phi;p_{T};",cAdd.Data()),
                                     nBinPhi,binLimitsPhi,20,-1.,1.);
        fHistList->Add(fh2PhiEta[ij][i]);
-
       }
 
 
@@ -466,11 +465,9 @@ void AliAnalysisTaskJetSpectrum2::UserCreateOutputObjects()
 
       fh2DijetPt2vsPt1[ij]          = new TH2F(Form("fh2Dijet%sPt2vsPt1",cAdd.Data()),"Pt2 versus Pt1;p_{T,1} (GeV/c);p_{T,2} (GeV/c)",250,0.,250.,250,0.,250.);
       fHistList->Add(fh2DijetPt2vsPt1[ij]);
-
       fh2DijetDifvsSum[ij]         = new TH2F(Form("fh2Dijet%sDifvsSum",cAdd.Data()),"Pt difference vs Pt sum;p_{T,1}+p_{T,2} (GeV/c);#Deltap_{T} (GeV/c)",400,0.,400.,150,0.,150.);
       fHistList->Add( fh2DijetDifvsSum[ij]);
     }   
-
   // =========== Switch on Sumw2 for all histos ===========
   for (Int_t i=0; i<fHistList->GetEntries(); ++i) {
     TH1 *h1 = dynamic_cast<TH1*>(fHistList->At(i));
@@ -575,6 +572,44 @@ void AliAnalysisTaskJetSpectrum2::UserExec(Option_t */*option*/){
     }
   }
 
+  TClonesArray *aodBackRecJets = 0;
+  if(fBranchBkgRec.Length()>0){
+    if(fAODOut&&!aodBackRecJets){
+      aodBackRecJets = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fBranchBkgRec.Data()));
+    }
+    if(fAODExtension&&!aodBackRecJets){
+      aodBackRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchBkgRec.Data()));
+    }
+    if(fAODIn&&!aodBackRecJets){
+      aodBackRecJets = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fBranchBkgRec.Data()));
+    }
+
+    if(!aodBackRecJets){
+      Printf("%s:%d no background rec Jet array with name %s in AOD",(char*)__FILE__,__LINE__,fBranchBkgRec.Data());
+      return;
+    }
+  }
+
+
+  TClonesArray *aodBackGenJets = 0;
+
+  if(fBranchBkgGen.Length()>0){
+    if(fAODOut&&!aodBackGenJets){
+      aodBackGenJets = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fBranchBkgGen.Data()));
+    }
+    if(fAODExtension&&!aodBackGenJets){
+      aodBackGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchBkgGen.Data()));
+    }
+    if(fAODIn&&!aodBackGenJets){
+      aodBackGenJets = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fBranchBkgGen.Data()));
+    }
+
+    if(!aodBackGenJets){
+      Printf("%s:%d no background rec Jet array with name %s in AOD",(char*)__FILE__,__LINE__,fBranchBkgGen.Data());
+      return;
+    }
+  }
+
  
   // new Scheme
   // first fill all the pure  histograms, i.e. full jets 
@@ -654,8 +689,19 @@ void AliAnalysisTaskJetSpectrum2::UserExec(Option_t */*option*/){
     fh1ZVtx->Fill(aod->GetPrimaryVertex()->GetZ());
   }
 
-  
 
+  Int_t recMult1 = recParticles.GetEntries();
+  Int_t genMult1 = genParticles.GetEntries();
+
+  Int_t recMult2 = MultFromJetRefs(aodBackRecJets);
+  Int_t genMult2 = MultFromJetRefs(aodBackGenJets);
+
+  fh2MultRec->Fill(recMult1,recMult2);
+  fh2MultGen->Fill(genMult1,genMult2);
+  fMultRec = recMult1;
+  if(fMultRec<=0)fMultRec = recMult2;
+  fMultGen = genMult1;
+  if(fMultGen<=0)fMultGen = genMult2;
 
   // the loops for rec and gen should be indentical... pass it to a separate
   // function ...
@@ -687,6 +733,11 @@ void AliAnalysisTaskJetSpectrum2::FillJetHistos(TList &jetsList,TList &particles
     return;
   }
 
+  Int_t refMult = fMultRec;
+  if(iType==kJetGen||iType==kJetGenFull){
+    refMult = fMultGen;
+  }
+
   Int_t nJets = jetsList.GetEntries(); 
   fh1NJets[iType]->Fill(nJets);
 
@@ -705,6 +756,7 @@ void AliAnalysisTaskJetSpectrum2::FillJetHistos(TList &jetsList,TList &particles
     AliAODJet *jet = (AliAODJet*)jetsList.At(ij);
     Float_t ptJet = jet->Pt();
     fh1PtJetsIn[iType]->Fill(ptJet);
+    fh2MultJetPt[iType]->Fill(refMult,ptJet);
     if(ptJet>ptOld){
       Printf("%s:%d Jets Type %d Not Sorted !! %d:%.3E %d:%.3E",(char*)__FILE__,__LINE__,iType,ij,ptJet,ij-1,ptOld);
     }
@@ -730,24 +782,32 @@ void AliAnalysisTaskJetSpectrum2::FillJetHistos(TList &jetsList,TList &particles
       }
     }
     // fill jet histos for kmax jets
-    if(ij<kMaxJets){      
+
       Float_t phiJet = jet->Phi();
       Float_t etaJet = jet->Eta();
       if(phiJet<0)phiJet+=TMath::Pi()*2.;    
       fh1TmpRho->Reset();
-      fh1PtIn[iType][ij]->Fill(ptJet);
+      if(ij<kMaxJets)fh1PtIn[iType][ij]->Fill(ptJet);
+      fh1PtIn[iType][kMaxJets]->Fill(ptJet);
       // fill leading jets...
-      if(ptJet>10)fh2PhiEta[iType][ij]->Fill(phiJet,etaJet);
-      fh2PhiPt[iType][ij]->Fill(phiJet,ptJet);
-      fh2EtaPt[iType][ij]->Fill(etaJet,ptJet);
-      if(ij==0){
-       fh2LeadingJetPtJetPhi[iType]->Fill(ptJet,phiJet);
-       if(ij==0&&iType==0&&fDebug>1){
-         Printf("%d %3.3f %p %s",iType,ptJet,jet,fBranchRec.Data());
+      if(ptJet>10){
+       if(ij<kMaxJets){
+         fh2PhiEta[iType][ij]->Fill(phiJet,etaJet);
+         fh2AreaPt[iType][ij]->Fill(jet->EffectiveAreaCharged(),ptJet);
+         fh2EtaArea[iType][ij]->Fill(etaJet,jet->EffectiveAreaCharged());
        }
+       fh2PhiEta[iType][kMaxJets]->Fill(phiJet,etaJet);
+       fh2AreaPt[iType][kMaxJets]->Fill(jet->EffectiveAreaCharged(),ptJet);
+       fh2EtaArea[iType][kMaxJets]->Fill(etaJet,jet->EffectiveAreaCharged());
+      }
+      if(ij<kMaxJets){
+       fh2PhiPt[iType][ij]->Fill(phiJet,ptJet);
+       fh2EtaPt[iType][ij]->Fill(etaJet,ptJet);
       }
-      if(particlesList.GetSize()){
+      fh2PhiPt[iType][kMaxJets]->Fill(phiJet,ptJet);
+      fh2EtaPt[iType][kMaxJets]->Fill(etaJet,ptJet);
 
+      if(particlesList.GetSize()&&ij<kMaxJets){
        // Particles... correlated with jets...
        for(int it = 0;it<particlesList.GetEntries();++it){
          AliVParticle *part = (AliVParticle*)particlesList.At(it);
@@ -764,7 +824,6 @@ void AliAnalysisTaskJetSpectrum2::FillJetHistos(TList &jetsList,TList &particles
          fh2PsiPt[iType][ij]->Fill(r,ptJet,rhoSum);
        }
       }// if we have particles
-    }// ij < kMaxJets
   }// Jet Loop
 
 
@@ -1227,3 +1286,17 @@ Int_t  AliAnalysisTaskJetSpectrum2::GetListOfJets(TList *list,TClonesArray* jarr
 }
 
 
+Int_t AliAnalysisTaskJetSpectrum2::MultFromJetRefs(TClonesArray* jets){
+  if(!jets)return 0;
+
+  Int_t refMult = 0;
+  for(int ij = 0;ij < jets->GetEntries();++ij){
+    AliAODJet* jet = (AliAODJet*)jets->At(ij);
+    if(!jet)continue;
+    TRefArray *refs = jet->GetRefTracks();
+    if(!refs)continue;
+    refMult += refs->GetEntries();
+  }
+  return refMult;
+
+}
index 458b692755de448bcf098ea0739ec96e43cc4562..9be9563a87197405fa14379319020209fd5896fb 100644 (file)
@@ -53,8 +53,6 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
     virtual void SetAODTrackInput(Bool_t b){fUseAODTrackInput = b;}
     virtual void SetAODMCInput(Bool_t b){fUseAODMCInput = b;}
     virtual void SetLimitGenJetEta(Bool_t b){fLimitGenJetEta = b;}
-    virtual void SetBkgSubtraction(Bool_t b){fBkgSubtraction = b;}
-    virtual void SetFillCorrBkg(Int_t i){fFillCorrBkg = i;}
     virtual void SetJetEtaWindow(Float_t f){fJetRecEtaWindow = f;}
     virtual void SetTrackEtaWindow(Float_t f){fTrackRecEtaWindow = f;}
     virtual void SetNMatchJets(Short_t f){fNMatchJets = f;}
@@ -64,7 +62,8 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
     virtual void SetAnalysisType(Int_t i){fAnalysisType = i;}
     virtual void SetBranchGen(const char* c){fBranchGen = c;}
     virtual void SetBranchRec(const char* c){fBranchRec = c;}
-    virtual void SetBranchBkg(const char* c){fBranchBkg = c;}  
+    virtual void SetBranchBkgRec(const char* c){fBranchBkgRec = c;}  
+    virtual void SetBranchBkgGen(const char* c){fBranchBkgGen = c;}  
     virtual void SetTrackTypeGen(Int_t i){fTrackTypeGen = i;}
     virtual void SetTrackTypeRec(Int_t i){fTrackTypeRec = i;}
     virtual void SetFilterMask(UInt_t i){fFilterMask = i;}
@@ -81,7 +80,7 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
     // this has to match with our selection of input events
     enum {kTrackUndef = 0, kTrackAOD, kTrackKineAll,kTrackKineCharged, kTrackAODMCAll, kTrackAODMCCharged, kTrackAODMCChargedAcceptance};
     enum {kAnaMC =  0x1, kAnaMCESD = 0x2};
-    enum {kMaxJets = 4};
+    enum {kMaxJets = 3};
     enum {kJetRec = 0, kJetGen, kJetRecFull, kJetGenFull, kJetTypes}; //
     enum {kMaxCorrelation =  3};
     
@@ -109,6 +108,8 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
     void    FillMatchHistos(TList &recJetsList,TList &genJetsList);
 
     Bool_t  JetSelected(AliAODJet *jet);
+    Int_t MultFromJetRefs(TClonesArray *jets);
+
     AliJetHeader *fJetHeaderRec;//! The jet header that can be fetched from the userinfo
     AliJetHeader *fJetHeaderGen;//! The jet header that can fetched from the userinfo
     AliAODEvent  *fAODIn; //! where we take the jets from 
@@ -122,7 +123,8 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
 
     TString       fBranchRec;  // AOD branch name for reconstructed
     TString       fBranchGen;  // AOD brnach for genereated
-    TString       fBranchBkg;  //AOD branch for background 
+    TString       fBranchBkgRec;  //AOD branch for background 
+    TString       fBranchBkgGen;  //AOD branch for background 
     TString       fNonStdFile; // name of delta aod file to catch the extension
 
     Bool_t        fUseAODJetInput;        // take jet from input AOD not from ouptu AOD
@@ -131,9 +133,7 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
     Bool_t        fUseGlobalSelection;    // Limit the eta of the generated jets
     Bool_t        fUseExternalWeightOnly; // use only external weight
     Bool_t        fLimitGenJetEta;        // Limit the eta of the generated jets
-    Bool_t        fBkgSubtraction;        // flag for bckg subtraction
     Short_t       fNMatchJets;            // number of leading jets considered from the list
-    Int_t         fFillCorrBkg;           // flag for filling bckg response matrix
     UInt_t        fFilterMask;            // filter bit for slecected tracks
     UInt_t        fEventSelectionMask;    // Selection information used to filter events
     Int_t         fAnalysisType;          // Analysis type 
@@ -147,7 +147,8 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
     Float_t       fMinJetPt;              // limits the jet p_T in addition to what already is done in the jet finder, this is important for jet matching for JF with lo threshold
     Float_t       fMinTrackPt;            // limits the track p_T 
     Float_t       fDeltaPhiWindow;        // minium angle between dijets
-
+    Int_t         fMultRec;               // ! reconstructed track multiplicity
+    Int_t         fMultGen;               // ! generated track multiplicity
 
     TProfile*     fh1Xsec;   //! pythia cross section and trials
     TH1F*         fh1Trials; //! trials are added
@@ -155,30 +156,35 @@ class AliAnalysisTaskJetSpectrum2 : public AliAnalysisTaskSE
     TH1F*         fh1PtHardNoW;  //! Pt har of the event without weigt       
     TH1F*         fh1PtHardTrials;  //! Number of trials 
     TH1F*         fh1ZVtx;          //! z-vtx distribution
-    TH1F*         fh1TmpRho;            //! just temporary histo for calculation    
+    TH1F*         fh1TmpRho;        //! just temporary histo for calculation    
+    TH2F*         fh2MultRec;       //! reconstructed track multiplicity   
+    TH2F*         fh2MultGen;       //! generated track multiplicity   
+
     TH2F*         fh2PtFGen;                //! found vs generated 
     TH2F*         fh2RelPtFGen;             //! relative difference between generated and found 
+    
 
     // Jet histos second go
 
     TH1F*         fh1NJets[kJetTypes];      //! nr of gen jets
     TH1F*         fh1SumPtTrack[kJetTypes]; //! sum over all track pT    
 
-    TH1F*         fh1PtIn[kJetTypes][kMaxJets];  //! Jet pt  
+    TH1F*         fh1PtIn[kJetTypes][kMaxJets+1];  //! Jet pt  
     TH1F*         fh1PtJetsIn[kJetTypes];  //! Jet pt for all jets
     TH1F*         fh1PtTracksIn[kJetTypes];  //! track pt for all tracks
     TH1F*         fh1PtTracksLeadingIn[kJetTypes];  //! track pt for all tracks
     
+    TH2F*         fh2MultJetPt[kJetTypes];  //! jet pt vs. mult
     TH2F*         fh2NJetsPt[kJetTypes];    //! Number of found jets above threshold
     TH2F*         fh2NTracksPt[kJetTypes];  //! Number of tracks above threshold
-    TH2F*         fh2LeadingJetPtJetPhi[kJetTypes];     //! Phi distribution of accepted leading jets 
     TH2F*         fh2LeadingTrackPtTrackPhi[kJetTypes]; //! phi distribution of accepted leading tracks
-    TH2F*         fh2RhoPt[kJetTypes][kMaxJets];     //! jet shape variable rho
-    TH2F*         fh2PsiPt[kJetTypes][kMaxJets];     //! jet shape variable psi
-    TH2F*         fh2PhiPt[kJetTypes][kMaxJets];       //! phi distribution correlation of jets      
-    TH2F*         fh2EtaPt[kJetTypes][kMaxJets];       //! phi distribution correlation of jets      
-    TH2F*         fh2PhiEta[kJetTypes][kMaxJets];      //! eta phi distribution of jet      
-
+    TH2F*         fh2RhoPt[kJetTypes][kMaxJets+1];     //! jet shape variable rho
+    TH2F*         fh2PsiPt[kJetTypes][kMaxJets+1];     //! jet shape variable psi
+    TH2F*         fh2PhiPt[kJetTypes][kMaxJets+1];       //! phi of jets      
+    TH2F*         fh2EtaPt[kJetTypes][kMaxJets+1];       //! eta of jets      
+    TH2F*         fh2AreaPt[kJetTypes][kMaxJets+1];       //! area distribution 
+    TH2F*         fh2EtaArea[kJetTypes][kMaxJets+1];       //! area vs eta distribution 
+    TH2F*         fh2PhiEta[kJetTypes][kMaxJets+1];      //! eta phi distribution of jet      
 
 
     TH1F*   fh1DijetMinv[kJetTypes];            //! dijet inv mass
index b6e4d1ca5cbd069570f92df9bc73581b941ee6f5..51ab0bc93df3eabf4a0f9f1311be1ba31804a13b 100644 (file)
@@ -1,51 +1,51 @@
-AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec = "jets",const char* bGen = "jetsAODMC_UA104",const char* bBkg="",UInt_t filterMask = 32, Int_t iPhysicsSelectionFlag = AliVEvent::kMB,UInt_t iEventSelectionMask = 0,Bool_t kBackground=kTRUE,Int_t iFillCorrBkg = 0,Int_t iCl = 0);\r
+AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec = "jets",const char* bGen = "jetsAODMC_UA104",const char* bBkg="",UInt_t filterMask = 32, Int_t iPhysicsSelectionFlag = AliVEvent::kMB,UInt_t iEventSelectionMask = 0,Int_t iCl = 0);\r
 \r
 \r
-AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2Delta(UInt_t filterMask = 32,Bool_t kUseAODMC = kFALSE,Int_t iPhysicsSelectionFlag = AliVEvent::kMB,UInt_t iFlag = 0xfffffff, UInt_t iEventSelectionMask = 0,Bool_t kBackground = kTRUE,char* back = ""){\r
+AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2Delta(UInt_t filterMask = 32,Bool_t kUseAODMC = kFALSE,Int_t iPhysicsSelectionFlag = AliVEvent::kMB,UInt_t iFlag = 0xfffffff, UInt_t iEventSelectionMask = 0,char* back = ""){\r
 \r
   TString cBack = back;\r
 \r
   AliAnalysisTaskJetSpectrum2 *js = 0;\r
   if(kUseAODMC){\r
     if(iFlag&(1<<0)){ // UA104\r
-      js = AddTaskJetSpectrum2("jets","jetsAODMC_UA104",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,kBackground);\r
-      js = AddTaskJetSpectrum2("jets","jetsAODMC2_UA104",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,kBackground);\r
+      js = AddTaskJetSpectrum2("jets","jetsAODMC_UA104",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask);\r
+      js = AddTaskJetSpectrum2("jets","jetsAODMC2_UA104",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask);\r
     }\r
     if(iFlag&(1<<1)){ // ANTIKT 04\r
-      js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,kBackground);\r
-      js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC2_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag,  iEventSelectionMask,kBackground);\r
+      js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask);\r
+      js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC2_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag,  iEventSelectionMask);\r
       // cross check MC only background subtration\r
-      js = AddTaskJetSpectrum2("jetsAODMC2_FASTJET04","jetsAODMC_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag,  iEventSelectionMask,kBackground);\r
+      js = AddTaskJetSpectrum2("jetsAODMC2_FASTJET04","jetsAODMC_FASTJET04",cBack.Data(),filterMask,iPhysicsSelectionFlag,  iEventSelectionMask);\r
     }\r
     if(iFlag&(1<<2)){ // KT 04\r
-      js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC_FASTKT04",cBack.Data(),filterMask,iPhysicsSelectionFlag,iEventSelectionMask,kBackground);\r
-      js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC2_FASTKT04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,kBackground);\r
+      js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC_FASTKT04",cBack.Data(),filterMask,iPhysicsSelectionFlag,iEventSelectionMask);\r
+      js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC2_FASTKT04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask);\r
     }\r
     if(iFlag&(1<<3)){ // SISCONE 04\r
-      js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","jetsAODMC_SISCONE04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,kBackground);\r
-      js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","jetsAODMC2_SISCONE04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,kBackground);\r
+      js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","jetsAODMC_SISCONE04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask);\r
+      js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","jetsAODMC2_SISCONE04",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask);\r
     }\r
     // here can go other radii\r
   }\r
   else { // only the data ... no MC\r
     if(iFlag&(1<<0)){ // UA104\r
-      js = AddTaskJetSpectrum2("jets","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,kBackground,1);\r
+      js = AddTaskJetSpectrum2("jets","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,1);\r
     }\r
     if(iFlag&(1<<1)){ // ANTIKT 04\r
-      js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,kBackground,1);\r
+      js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask);\r
     }\r
     if(iFlag&(1<<2)){ // KT 04\r
-      js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","",cBack.Data(),filterMask,iPhysicsSelectionFlag,iEventSelectionMask,kBackground,1);\r
+      js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","",cBack.Data(),filterMask,iPhysicsSelectionFlag,iEventSelectionMask);\r
     }\r
     if(iFlag&(1<<3)){ // SISCONE 04\r
-      js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask,kBackground,1);\r
+      js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","",cBack.Data(),filterMask,iPhysicsSelectionFlag, iEventSelectionMask);\r
     }\r
   }\r
   return js;\r
 }\r
 \r
 \r
-AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec,const char* bGen ,const char* bBkg,UInt_t filterMask,Int_t iPhysicsSelectionFlag,UInt_t iEventSelectionMask,Bool_t kBackground,Int_t iFillCorrBkg,Int_t iCl)\r
+AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec,const char* bGen ,const char* bBkg,UInt_t filterMask,Int_t iPhysicsSelectionFlag,UInt_t iEventSelectionMask,Int_t iCl)\r
 {\r
   // Creates a jet fider task, configures it and adds it to the analysis manager.\r
   // Get the pointer to the existing analysis manager via the static access method.\r
@@ -69,19 +69,11 @@ AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec,const char* bG
   typeGen.ToUpper();\r
   typeRec.ToUpper();\r
   \r
-   TString bBkgName = bBkg;\r
-   if(kBackground&&bBkgName.Length()==0){\r
-     // default\r
-     if(typeRec.Contains("AODMC2"))bBkgName = "jeteventbackground_clustersAODMC2_KT06";\r
-     else bBkgName = "jeteventbackground_clustersAOD_KT06";\r
-   }\r
 \r
    // Create the task and configure it.\r
    //===========================================================================\r
 \r
-   if(iFillCorrBkg)bGen = Form("SubBkg%d",iFillCorrBkg);   \r
    AliAnalysisTaskJetSpectrum2* pwg4spec = new  AliAnalysisTaskJetSpectrum2(Form("JetSpectrum2%s-%s_%010d_Class%02d",bRec,bGen,iEventSelectionMask,iCl));\r
-   pwg4spec->SetFillCorrBkg(iFillCorrBkg);\r
    if(iCl)pwg4spec->SetEventClass(iCl);\r
 \r
    // add the filter mask for non default jets branches\r
@@ -89,23 +81,18 @@ AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec,const char* bG
    cAdd += Form("_Filter%05d",filterMask);\r
 \r
    \r
-   if(iFillCorrBkg)pwg4spec->SetBranchGen("");  \r
-   else {\r
-     pwg4spec->SetBranchGen(bGen); \r
-     //  if(typeGen.Contains("JETSAOD")&&!typeGen.Contains("MC"))pwg4spec->SetBranchGen(Form("%s%s",bGen,cAdd.Data())); \r
-   }\r
+\r
+   pwg4spec->SetBranchGen(bGen); \r
+   //  if(typeGen.Contains("JETSAOD")&&!typeGen.Contains("MC"))pwg4spec->SetBranchGen(Form("%s%s",bGen,cAdd.Data())); \r
+\r
    pwg4spec->SetBranchRec(bRec); \r
    // if(typeRec.Contains("JETSAOD")&&!typeRec.Contains("MC"))     pwg4spec->SetBranchRec(Form("%s%s",bRec,cAdd.Data())); \r
 \r
-   if(bBkgName.Length()>0)pwg4spec->SetBranchBkg(bBkgName.Data());\r
-\r
 \r
    pwg4spec->SetFilterMask(filterMask); \r
    pwg4spec->SetUseGlobalSelection(kTRUE); \r
    pwg4spec->SetMinJetPt(5.);\r
    pwg4spec->SetJetEtaWindow(0.4);\r
-   pwg4spec->SetBkgSubtraction(kBackground);\r
-\r
 \r
    if(type == "AOD"){\r
      // Assume all jet are produced already\r
index 191b1a2ba56e3d03a55dc0adc1852f78512833db..3f2ead7603ebb690f3d0bac6d2e93fa4427a9047 100644 (file)
@@ -83,8 +83,8 @@ Bool_t      kIsPbPb             = kFALSE;  // Pb+Pb
 Int_t       iJETAN             = 1;      // Jet analysis (PWG4) // 1 write standard 2 write non-standard jets, 3 wrtie both
 Int_t       iJETSUBTRACT        = 1;      // Jet background subtration
 TString     kDefaultJetBranch     = "";      // is currently set when filled (iJETAN or clusters) or from config macro 
-TString     kDefaultJetBackgroundBranch     = "";      // is currently set when filled (jet clsuters  
-TString     kDefaultJetBackgroundBranch_extra     = "";      // is currently set when filled (jet clsuters  
+TString     kDefaultJetBackgroundBranch            = "";      // is currently set when filled (jet clsuters  
+TString     kDefaultJetBackgroundBranch_extra     = "";      // is currently set when filled (jet clsuters) 
 TString     kJetSubtractBranches     = "";      // is currently set when filled (jet clsuters  
 TString     kJetSubtractBranches_extra     = "";      // is currently set when filled (jet clsuters  
 
@@ -570,11 +570,10 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
         taskCl->SetGhostEtamax(0.9);
        } 
 
-       taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1,kDeltaAODJetName.Data(),0.15);
+       taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,2,1,kDeltaAODJetName.Data(),0.15);
        taskCl->SetCentralityCut(fCenLo,fCenUp);
        if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data());
        taskCl->SetNRandomCones(10);
-       taskCl->SetNSkipLeadingRan(2);
        kDefaultJetBranch = taskCl->GetJetOutputBranch();
        if(kDeltaAODJetName.Length()==0&&kFilterAOD){
         if(kIsPbPb)taskCl->SetJetTriggerPtCut(40.);
@@ -629,40 +628,41 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
      }
    }
 
-   if(iJETSUBTRACT){
-      gROOT->LoadMacro("$ALICE_ROOT_SRC/PWG4/macros/AddTaskJetBackgroundSubtract.C");
-      AliAnalysisTaskJetBackgroundSubtract *taskSubtract = 0;
-      if(kJetSubtractBranches.Length()){
-
-       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches,3,kJetSubtractMask1.Data(),kJetSubtractMask2.Data());
-       taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data()); 
-       if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
-
-       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches,2,kJetSubtractMask1.Data(),kJetSubtractMask2.Data());
-       taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data());          taskSubtract->SelectCollisionCandidates(iPhysicsSelectionFlag);
-       if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
 
-       //      taskSubtract->SetDebugLevel(3);
+   if(iJETSUBTRACT){
+     gROOT->LoadMacro("$ALICE_ROOT_SRC/PWG4/macros/AddTaskJetBackgroundSubtract.C");
+     AliAnalysisTaskJetBackgroundSubtract *taskSubtract = 0;
+     if(kJetSubtractBranches.Length()){
 
-       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches,1,kJetSubtractMask1.Data(),kJetSubtractMask2.Data());
-       taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data());          taskSubtract->SelectCollisionCandidates(iPhysicsSelectionFlag);
-       if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
+       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches,3,kJetSubtractMask1.Data(),kJetSubtractMask2.Data());
+       taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data()); 
+       if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
 
-       if(kJetSubtractBranches.Contains(kDefaultJetBranch.Data())&&kIsPbPb){
-         kDefaultJetBranch.ReplaceAll(taskSubtract->GetToReplace(),Form(taskSubtract->GetReplacementMask(),taskSubtract->GetSubtractionMethod()));
-       }
-      }
-      if(kJetSubtractBranches_extra.Length()){
-       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches_extra,1,kJetSubtractMask1.Data(),kJetSubtractMask2.Data(),"extra");
-       taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch_extra.Data());
-       taskSubtract->SelectCollisionCandidates(iPhysicsSelectionFlag);
-        //taskSubtract->SetDebugLevel(3);
-       if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
-       if(kJetSubtractBranches_extra.Contains(kDefaultJetBranch.Data())){
-         kDefaultJetBranch.ReplaceAll(taskSubtract->GetToReplace(),Form(taskSubtract->GetReplacementMask(),taskSubtract->GetSubtractionMethod()));
-       }
-      }
-      if (!taskSubtract) ::Warning("AnalysisTrainPWG4Jets", "AliAnalysisTaskJetBackgroundSubtrac cannot run for this train conditions - EXCLUDED");     
+       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches,2,kJetSubtractMask1.Data(),kJetSubtractMask2.Data());
+       taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data());          taskSubtract->SelectCollisionCandidates(iPhysicsSelectionFlag);
+       if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
+       
+       //      taskSubtract->SetDebugLevel(3);
+       
+       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches,1,kJetSubtractMask1.Data(),kJetSubtractMask2.Data());
+       taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data());          taskSubtract->SelectCollisionCandidates(iPhysicsSelectionFlag);
+       if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
+       
+       if(kJetSubtractBranches.Contains(kDefaultJetBranch.Data())&&kIsPbPb){
+        kDefaultJetBranch.ReplaceAll(taskSubtract->GetToReplace(),Form(taskSubtract->GetReplacementMask(),taskSubtract->GetSubtractionMethod()));
+       }
+     }
+     if(kJetSubtractBranches_extra.Length()){
+       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches_extra,1,kJetSubtractMask1.Data(),kJetSubtractMask2.Data(),"extra");
+       taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch_extra.Data());
+       taskSubtract->SelectCollisionCandidates(iPhysicsSelectionFlag);
+       //taskSubtract->SetDebugLevel(3);
+       if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
+       if(kJetSubtractBranches_extra.Contains(kDefaultJetBranch.Data())){
+        kDefaultJetBranch.ReplaceAll(taskSubtract->GetToReplace(),Form(taskSubtract->GetReplacementMask(),taskSubtract->GetSubtractionMethod()));
+       }
+     }
+     if (!taskSubtract) ::Warning("AnalysisTrainPWG4Jets", "AliAnalysisTaskJetBackgroundSubtrac cannot run for this train conditions - EXCLUDED");     
    }
 
    if (iDIJETAN) {
@@ -718,7 +718,7 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
      }
    }
 
-   if(iPWG4JetSpectrum){
+if(iPWG4JetSpectrum){
      gROOT->LoadMacro("$ALICE_ROOT_SRC/PWG4/macros/AddTaskJetSpectrum2.C");
      AliAnalysisTaskJetSpectrum2 *taskjetSpectrum = 0;
      if(iPWG4JetSpectrum&1){
@@ -728,7 +728,13 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
           //      tmp.ReplaceAll(Form(kJetSubtractMask2.Data(),1),kJetSubtractMask1.Data());
           //      tmp.ReplaceAll(Form(kJetSubtractMask2.Data(),1),kJetSubtractMask1.Data());
           tmp.ReplaceAll(Form(kJetSubtractMask2.Data(),1),Form(kJetSubtractMask1.Data(),0));
-          taskjetSpectrum = AddTaskJetSpectrum2(kDefaultJetBranch.Data(),tmp.Data(),"",kHighPtFilterMask,AliVEvent::kMB,0,kFALSE,0,i);
+
+          TString bkgClusters = kDefaultJetBackgroundBranch.Data(); 
+          bkgClusters.ReplaceAll(Form("%s_",AliAODJetEventBackground::StdBranchName()),"");
+          taskjetSpectrum = AddTaskJetSpectrum2(kDefaultJetBranch.Data(),tmp.Data(),"",kHighPtFilterMask,AliVEvent::kMB,0,i);
+          taskjetSpectrum->SetBranchBkgRec(bkgClusters.Data());
+          taskjetSpectrum->SetBranchBkgGen(bkgClusters.Data());
+
           //      taskjetSpectrum->SetDebugLevel(3);
           //      taskjetSpectrum->SetMinJetPt(10);
           taskjetSpectrum->SetTrackEtaWindow(0.8);
@@ -739,7 +745,9 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
           // check the old subtracted vs. the new subtracted
           TString tmp2(kDefaultJetBranch.Data());
           tmp2.ReplaceAll(Form(kJetSubtractMask2.Data(),1),Form(kJetSubtractMask2.Data(),2));
-          taskjetSpectrum = AddTaskJetSpectrum2(tmp2.Data(),kDefaultJetBranch.Data(),"",kHighPtFilterMask,AliVEvent::kMB,0,kFALSE,0,i);
+          taskjetSpectrum = AddTaskJetSpectrum2(tmp2.Data(),kDefaultJetBranch.Data(),"",kHighPtFilterMask,AliVEvent::kMB,0,i);
+          taskjetSpectrum->SetBranchBkgRec(bkgClusters.Data());
+          taskjetSpectrum->SetBranchBkgGen(bkgClusters.Data());
           //      taskjetSpectrum->SetDebugLevel(3);
           //      taskjetSpectrum->SetMinJetPt(10);
           taskjetSpectrum->SetTrackEtaWindow(0.8);
@@ -750,19 +758,23 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
           TString tmp3(kDefaultJetBranch.Data());
           tmp3.ReplaceAll(Form(kJetSubtractMask2.Data(),1),Form(kJetSubtractMask2.Data(),3));
 
-          taskjetSpectrum = AddTaskJetSpectrum2(tmp3.Data(),kDefaultJetBranch.Data(),"",kHighPtFilterMask,AliVEvent::kMB,0,kFALSE,0,i);
+          taskjetSpectrum = AddTaskJetSpectrum2(tmp3.Data(),kDefaultJetBranch.Data(),"",kHighPtFilterMask,AliVEvent::kMB,0,i);
           //      taskjetSpectrum->SetDebugLevel(3);
           //      taskjetSpectrum->SetMinJetPt(10);
+          taskjetSpectrum->SetBranchBkgRec(bkgClusters.Data());
+          taskjetSpectrum->SetBranchBkgGen(bkgClusters.Data());
           taskjetSpectrum->SetTrackEtaWindow(0.8);
           taskjetSpectrum->SetJetEtaWindow(0.4);
           if(iAODanalysis)SetAODInput(taskjetSpectrum);
 
 
-          taskjetSpectrum = AddTaskJetSpectrum2(Form("jetsAOD_UA104_B2_Filter%05d_Cut01000",kHighPtFilterMask),kDefaultJetBranch.Data(),"",kHighPtFilterMask,AliVEvent::kMB,0,kFALSE,0,i);
+          taskjetSpectrum = AddTaskJetSpectrum2(Form("jetsAOD_UA104_B2_Filter%05d_Cut01000",kHighPtFilterMask),kDefaultJetBranch.Data(),"",kHighPtFilterMask,AliVEvent::kMB,0,i);
           //      taskjetSpectrum->SetDebugLevel(3);
           //      taskjetSpectrum->SetMinJetPt(10);
           taskjetSpectrum->SetTrackEtaWindow(0.8);
           taskjetSpectrum->SetJetEtaWindow(0.4);
+          taskjetSpectrum->SetBranchBkgRec(bkgClusters.Data());
+          taskjetSpectrum->SetBranchBkgGen(bkgClusters.Data());
           if(iAODanalysis)SetAODInput(taskjetSpectrum);
 
         }
@@ -778,6 +790,8 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
         //        taskjetSpectrum->SetMinJetPt(10);
         taskjetSpectrum->SetTrackEtaWindow(0.8);
         taskjetSpectrum->SetJetEtaWindow(0.4);
+        taskjetSpectrum->SetBranchBkgRec(bkgClusters.Data());
+        taskjetSpectrum->SetBranchBkgGen(bkgClusters.Data());
         if(iAODanalysis)SetAODInput(taskjetSpectrum);
         
 
@@ -786,7 +800,9 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
         taskjetSpectrum = AddTaskJetSpectrum2(tmp2.Data(),kDefaultJetBranch.Data(),"",kHighPtFilterMask,AliVEvent::kMB,0,kFALSE,0,i);
         //      taskjetSpectrum->SetDebugLevel(3);
         //        taskjetSpectrum->SetMinJetPt(10);
-        taskjetSpectrum->SetTrackEtaWindow(0.8);
+        taskjetSpectrum->SetBranchBkgRec(bkgClusters.Data());
+        taskjetSpectrum->SetBranchBkgGen(bkgClusters.Data());
+x       taskjetSpectrum->SetTrackEtaWindow(0.8);
         taskjetSpectrum->SetJetEtaWindow(0.4);
 
         // check the old subtracted vs. the new subtracted
@@ -795,6 +811,8 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
         taskjetSpectrum = AddTaskJetSpectrum2(tmp3.Data(),kDefaultJetBranch.Data(),"",kHighPtFilterMask,AliVEvent::kMB,0,kFALSE,0,i);
         //      taskjetSpectrum->SetDebugLevel(3);
         //        taskjetSpectrum->SetMinJetPt(10);
+        taskjetSpectrum->SetBranchBkgRec(bkgClusters.Data());
+        taskjetSpectrum->SetBranchBkgGen(bkgClusters.Data());
         taskjetSpectrum->SetTrackEtaWindow(0.8);
         taskjetSpectrum->SetJetEtaWindow(0.4);
         if(iAODanalysis)SetAODInput(taskjetSpectrum);
@@ -1674,11 +1692,13 @@ TChain *CreateChain(const char *mode, const char *plugin_mode)
               TString line;
               ifstream in;
               in.open(kLocalDataList.Data());
+              Int_t ic = 0;
               while (in.good()) {
                 in >> line;
                 if (line.Length() == 0) continue;
-                // cout << " line = " << line << endl;
+                Printf("%d adding %s",ic,line.Data());
                 chain->Add(line.Data());
+                ic++;
               }       
             } else {
                // Interactive AOD