- add AliAnalysisTsakJetResponseV2
authorkleinb <kleinb@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Apr 2011 20:30:14 +0000 (20:30 +0000)
committerkleinb <kleinb@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Apr 2011 20:30:14 +0000 (20:30 +0000)
TaskJetResponse:
- introduce reaction plane
- introduce number of input tracks
- new histograms for jet area
- change binning of some histograms

PWG4/CMakelibPWG4JetTasks.pkg
PWG4/JetTasks/AliAnalysisTaskJetResponse.cxx
PWG4/JetTasks/AliAnalysisTaskJetResponse.h
PWG4/JetTasks/AliAnalysisTaskJetResponseV2.cxx [new file with mode: 0644]
PWG4/JetTasks/AliAnalysisTaskJetResponseV2.h [new file with mode: 0644]
PWG4/PWG4JetTasksLinkDef.h
PWG4/macros/AddTaskFastEmbedding.C
PWG4/macros/AddTaskJetResponse.C
PWG4/macros/AddTaskJetResponseV2.C [new file with mode: 0644]

index ce70a8f..12c394a 100644 (file)
@@ -25,7 +25,7 @@
 # SHLIBS - Shared Libraries and objects for linking (Executables only)           #
 #--------------------------------------------------------------------------------#
 
-set ( SRCS  JetTasks/AliAnalysisTaskUE.cxx JetTasks/AliHistogramsUE.cxx JetTasks/AliAnalyseUE.cxx JetTasks/AliAnalysisTaskJetSpectrum.cxx JetTasks/AliAnalysisTaskJetSpectrum2.cxx JetTasks/AliAnalysisHelperJetTasks.cxx JetTasks/AliAnalysisTaskJetServices.cxx JetTasks/AliAnalysisTaskPWG4PidDetEx.cxx JetTasks/AliJetSpectrumUnfolding.cxx JetTasks/AliAnalysisTaskJFSystematics.cxx JetTasks/AliAnalysisTaskJetCorrections.cxx JetTasks/AliAnalysisTaskThreeJets.cxx JetTasks/AliPWG4HighPtQATPConly.cxx JetTasks/AliPWG4HighPtQAMC.cxx JetTasks/AliPWG4HighPtSpectra.cxx JetTasks/AliPWG4CosmicCandidates.cxx JetTasks/AliAnalysisTaskJetChem.cxx JetTasks/AliAnalysisTaskFragmentationFunction.cxx JetTasks/AliAnalysisTaskMinijet.cxx JetTasks/AliUEHist.cxx JetTasks/AliUEHistograms.cxx JetTasks/AliAnalyseLeadingTrackUE.cxx JetTasks/AliAnalysisTaskLeadingTrackUE.cxx JetTasks/AliAnalysisTaskQGSep.cxx JetTasks/AliAnalysisTaskJetsTM.cxx JetTasks/AliAnalysisTaskPhiCorrelations.cxx JetTasks/AliAnalysisTaskJetResponse.cxx JetTasks/AliPWG4HighPtTrackQA.cxx JetTasks/AliEventPoolManager.cxx JetTasks/AliPhiCorrelationsQATask.cxx )
+set ( SRCS  JetTasks/AliAnalysisTaskUE.cxx JetTasks/AliHistogramsUE.cxx JetTasks/AliAnalyseUE.cxx JetTasks/AliAnalysisTaskJetSpectrum.cxx JetTasks/AliAnalysisTaskJetSpectrum2.cxx JetTasks/AliAnalysisHelperJetTasks.cxx JetTasks/AliAnalysisTaskJetServices.cxx JetTasks/AliAnalysisTaskPWG4PidDetEx.cxx JetTasks/AliJetSpectrumUnfolding.cxx JetTasks/AliAnalysisTaskJFSystematics.cxx JetTasks/AliAnalysisTaskJetCorrections.cxx JetTasks/AliAnalysisTaskThreeJets.cxx JetTasks/AliPWG4HighPtQATPConly.cxx JetTasks/AliPWG4HighPtQAMC.cxx JetTasks/AliPWG4HighPtSpectra.cxx JetTasks/AliPWG4CosmicCandidates.cxx JetTasks/AliAnalysisTaskJetChem.cxx JetTasks/AliAnalysisTaskFragmentationFunction.cxx JetTasks/AliAnalysisTaskMinijet.cxx JetTasks/AliUEHist.cxx JetTasks/AliUEHistograms.cxx JetTasks/AliAnalyseLeadingTrackUE.cxx JetTasks/AliAnalysisTaskLeadingTrackUE.cxx JetTasks/AliAnalysisTaskQGSep.cxx JetTasks/AliAnalysisTaskJetsTM.cxx JetTasks/AliAnalysisTaskJetResponse.cxx JetTasks/AliPWG4HighPtTrackQA.cxx JetTasks/AliEventPoolManager.cxx JetTasks/AliPhiCorrelationsQATask.cxx JetTasks/AliAnalysisTaskPhiCorrelations.cxx JetTasks/AliAnalysisTaskJetResponseV2.cxx)
 
 string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" )
 
index a2d5495..69ad3c9 100644 (file)
@@ -37,6 +37,9 @@ AliAnalysisTaskJetResponse::AliAnalysisTaskJetResponse() :
   fEvtClassMax(4),
   fCentMin(0.),
   fCentMax(100.),
+  fNInputTracksMin(0),
+  fNInputTracksMax(-1),
+  fReactionPlaneBin(-1),
   fJetEtaMin(-.5),
   fJetEtaMax(.5),
   fJetPtMin(20.),
@@ -44,27 +47,34 @@ AliAnalysisTaskJetResponse::AliAnalysisTaskJetResponse() :
   fNMatchJets(4),
   //fJetDeltaEta(.4),
   //fJetDeltaPhi(.4),
+  fEvtClassMode(0),
   fkNbranches(2),
-  fkEvtClasses(5),
+  fkEvtClasses(12),
   fOutputList(0x0),
   fHistEvtSelection(0x0),
   fHistEvtClass(0x0),
   fHistCentrality(0x0),
+  fHistNInputTracks(0x0),
+  //fHistNInputTracks2(0x0),
+  fHistCentVsTracks(0x0),
+  fHistReactionPlane(0x0),
+  fHistReactionPlaneWrtJets(0x0),
   fHistPtJet(new TH1F*[fkNbranches]),
   fHistEtaPhiJet(new TH2F*[fkNbranches]),
   fHistEtaPhiJetCut(new TH2F*[fkNbranches]),
   fHistDeltaEtaDeltaPhiJet(new TH2F*[fkEvtClasses]),
   fHistDeltaEtaDeltaPhiJetCut(new TH2F*[fkEvtClasses]),
-  fHistDeltaEtaDeltaPhiJetNOMatching(new TH2F*[fkEvtClasses]),
+  //fHistDeltaEtaDeltaPhiJetNOMatching(new TH2F*[fkEvtClasses]),
   fHistDeltaEtaEtaJet(new TH2F*[fkEvtClasses]),
   fHistDeltaPtEtaJet(new TH2F*[fkEvtClasses]),
   fHistPtFraction(new TH2F*[fkEvtClasses]),
-  fHistPtPtExtra(0x0),
   fHistPtResponse(new TH2F*[fkEvtClasses]),
   fHistPtSmearing(new TH2F*[fkEvtClasses]),
   fHistDeltaR(new TH2F*[fkEvtClasses]),
-  fHistArea(new TH2F*[fkEvtClasses]),
-  fHistDeltaArea(new TH2F*[fkEvtClasses])
+  fHistArea(new TH3F*[fkEvtClasses]),
+  //fHistJetPtArea(new TH2F*[fkEvtClasses]),
+  fHistDeltaArea(new TH2F*[fkEvtClasses]),
+  fHistJetPtDeltaArea(new TH2F*[fkEvtClasses])
 {
   // default Constructor
 
@@ -87,34 +97,42 @@ AliAnalysisTaskJetResponse::AliAnalysisTaskJetResponse(const char *name) :
   fEvtClassMax(4),
   fCentMin(0.),
   fCentMax(100.),
+  fNInputTracksMin(0),
+  fNInputTracksMax(-1),
+  fReactionPlaneBin(-1),
   fJetEtaMin(-.5),
   fJetEtaMax(.5),
   fJetPtMin(20.),
   fJetPtFractionMin(0.5),
   fNMatchJets(4),
-  //fJetDeltaEta(.4),
-  //fJetDeltaPhi(.4),
+  fEvtClassMode(0),
   fkNbranches(2),
-  fkEvtClasses(5),
+  fkEvtClasses(12),
   fOutputList(0x0),
   fHistEvtSelection(0x0),
   fHistEvtClass(0x0),
   fHistCentrality(0x0),
+  fHistNInputTracks(0x0),
+  //fHistNInputTracks2(0x0),
+  fHistCentVsTracks(0x0),
+  fHistReactionPlane(0x0),
+  fHistReactionPlaneWrtJets(0x0),
   fHistPtJet(new TH1F*[fkNbranches]),
   fHistEtaPhiJet(new TH2F*[fkNbranches]),
   fHistEtaPhiJetCut(new TH2F*[fkNbranches]),
   fHistDeltaEtaDeltaPhiJet(new TH2F*[fkEvtClasses]),
   fHistDeltaEtaDeltaPhiJetCut(new TH2F*[fkEvtClasses]),
-  fHistDeltaEtaDeltaPhiJetNOMatching(new TH2F*[fkEvtClasses]),
+  //fHistDeltaEtaDeltaPhiJetNOMatching(new TH2F*[fkEvtClasses]),
   fHistDeltaEtaEtaJet(new TH2F*[fkEvtClasses]),
   fHistDeltaPtEtaJet(new TH2F*[fkEvtClasses]),
   fHistPtFraction(new TH2F*[fkEvtClasses]),
-  fHistPtPtExtra(0x0),
   fHistPtResponse(new TH2F*[fkEvtClasses]),
   fHistPtSmearing(new TH2F*[fkEvtClasses]),
   fHistDeltaR(new TH2F*[fkEvtClasses]),
-  fHistArea(new TH2F*[fkEvtClasses]),
-  fHistDeltaArea(new TH2F*[fkEvtClasses])
+  fHistArea(new TH3F*[fkEvtClasses]),
+  //fHistJetPtArea(new TH2F*[fkEvtClasses]),
+  fHistDeltaArea(new TH2F*[fkEvtClasses]),
+  fHistJetPtDeltaArea(new TH2F*[fkEvtClasses])
 {
   // Constructor
 
@@ -161,15 +179,21 @@ void AliAnalysisTaskJetResponse::UserCreateOutputObjects()
   TH1::AddDirectory(kFALSE);
 
 
-  fHistEvtSelection = new TH1I("fHistEvtSelection", "event selection", 5, -0.5, 4.5);
+  fHistEvtSelection = new TH1I("fHistEvtSelection", "event selection", 6, -0.5, 5.5);
   fHistEvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
   fHistEvtSelection->GetXaxis()->SetBinLabel(2,"events IN");
   fHistEvtSelection->GetXaxis()->SetBinLabel(3,"event selection (rejected)");
   fHistEvtSelection->GetXaxis()->SetBinLabel(4,"vertex cut (rejected)");
   fHistEvtSelection->GetXaxis()->SetBinLabel(5,"centrality (rejected)");
+  fHistEvtSelection->GetXaxis()->SetBinLabel(6,"multiplicity (rejected)");
   
-  fHistEvtClass   = new TH1I("fHistEvtClass", "event classes", fkEvtClasses, -0.5, fkEvtClasses-0.5);
+  fHistEvtClass   = new TH1I("fHistEvtClass", "event classes (centrality) ", fkEvtClasses, -0.5, fkEvtClasses-0.5);
   fHistCentrality = new TH1F("fHistCentrality", "event centrality", 100, 0., 100.);
+  fHistNInputTracks  = new TH1F("fHistNInputTracks", "nb. of input tracks", 400, 0., 4000.);
+  //fHistNInputTracks2 = new TH2F("fHistNInputTracks2", "nb. of input tracks;from B0;from Bx", 400, 0., 4000., 400, 0., 4000.);
+  fHistCentVsTracks  = new TH2F("fHistCentVsTracks", "centrality vs. nb. of input tracks;centrality;input tracks", 100, 0., 100., 400, 0., 4000.); 
+  fHistReactionPlane = new TH1F("fHistReactionPlane", "reaction plane", 30, 0., TMath::Pi());
+  fHistReactionPlaneWrtJets = new TH1F("fHistReactionPlaneWrtJets", "reaction plane wrt jets", 48, -TMath::Pi(), TMath::Pi());
 
   for (Int_t iBranch = 0; iBranch < fkNbranches; iBranch++) {
     fHistPtJet[iBranch] = new TH1F(Form("fHistPtJet%i", iBranch),
@@ -179,17 +203,13 @@ void AliAnalysisTaskJetResponse::UserCreateOutputObjects()
 
     fHistEtaPhiJet[iBranch]    = new TH2F(Form("fHistEtaPhiJet%i", iBranch),
                                                         Form("#eta - #phi of jets from branch %i (before cut);#eta;#phi", iBranch),
-                                                        48, -1.2, 1.2, 100, 0., 2*TMath::Pi());
+                                                        28, -0.7, 0.7, 100, 0., 2*TMath::Pi());
        fHistEtaPhiJetCut[iBranch] = new TH2F(Form("fHistEtaPhiJetCut%i", iBranch),
                                                         Form("#eta - #phi of jets from branch %i (before cut);#eta;#phi", iBranch),
-                                                        48, -1.2, 1.2, 100, 0., 2*TMath::Pi());
+                                                        28, -0.7, 0.7, 100, 0., 2*TMath::Pi());
 
   }
   
-
-  fHistPtPtExtra = new TH2F("fHistPtPtExtra", "p_{T} response;p_{T} (GeV/c);p_{T} (GeV/c)",
-                           250, 0., 250., 250, 0., 250.);
-
   for (Int_t iEvtClass =0; iEvtClass < fkEvtClasses; iEvtClass++) {
     fHistDeltaEtaDeltaPhiJet[iEvtClass] = new TH2F(Form("fHistDeltaEtaDeltaPhiJet%i",iEvtClass),
                                                                      "#Delta#eta - #Delta#phi of jet;#Delta#eta;#Delta#phi",
@@ -197,45 +217,50 @@ void AliAnalysisTaskJetResponse::UserCreateOutputObjects()
     fHistDeltaEtaDeltaPhiJetCut[iEvtClass] = new TH2F(Form("fHistDeltaEtaDeltaPhiJetCut%i",iEvtClass),
                                                                      "#Delta#eta - #Delta#phi of jet;#Delta#eta;#Delta#phi",
                                                                      101, -1.01, 1.01, 101, -1.01, 1.01);                                                                                                
-    fHistDeltaEtaDeltaPhiJetNOMatching[iEvtClass] = new TH2F("fHistDeltaEtaDeltaPhiJetNOMatching",
-                                                                                "#Delta#eta - #Delta#phi of jets which do not match;#Delta#eta;#Delta#phi",
-                                                                                100, -2., 2., 100, TMath::Pi(), TMath::Pi());
+    //fHistDeltaEtaDeltaPhiJetNOMatching[iEvtClass] = new TH2F("fHistDeltaEtaDeltaPhiJetNOMatching",
+       //                                                                       "#Delta#eta - #Delta#phi of jets which do not match;#Delta#eta;#Delta#phi",
+       //                                                                       100, -2., 2., 100, TMath::Pi(), TMath::Pi());
     fHistPtResponse[iEvtClass] = new TH2F(Form("pt_response%i",iEvtClass), Form("pt_response%i;p_{T} (GeV/c);p_{T} (GeV/c)",iEvtClass),
                                                              250, 0., 250., 250, 0., 250.);
     fHistPtSmearing[iEvtClass] = new TH2F(Form("pt_smearing%i",iEvtClass), Form("pt_smearing%i;#Deltap_{T} (GeV/c);p_{T} (GeV/c)",iEvtClass),
-                                                             200, -50., 150., 250, 0., 250.);
-    fHistDeltaR[iEvtClass]     = new TH2F(Form("hist_DeltaR%i",iEvtClass), "#DeltaR of matched jets;#Deltap_{T};#DeltaR", 200, -50.,150., 60, 0.,.6);
-    fHistArea[iEvtClass]       = new TH2F(Form("hist_Area%i",iEvtClass), "jet area;#Deltap_{T};jet area", 200, -50.,150., 100, 0.,1.0);
-    fHistDeltaArea[iEvtClass]  = new TH2F(Form("hist_DeltaArea%i",iEvtClass), "#DeltaArea of matched jets;#Deltap_{T};#Deltaarea", 200, -50., 150., 60, 0., .3); 
+                                                             161, -80.5, 80.5, 250, 0., 250.);
+    fHistDeltaR[iEvtClass]     = new TH2F(Form("hist_DeltaR%i",iEvtClass), "#DeltaR of matched jets;#Deltap_{T};#DeltaR", 161, -80.5,80.5, 85, 0.,3.4);
+    fHistArea[iEvtClass]       = new TH3F(Form("hist_Area%i",iEvtClass), "jet area;probe p_{T};#Deltap_{T};jet area", 250, 0., 250., 161, -80.5,80.5, 100, 0.,1.0);
+       //fHistJetPtArea[iEvtClass]       = new TH2F(Form("hist_JetPtArea%i",iEvtClass), "jet area vs. probe p_{T};jet p_{T};jet area", 250, 0.,250., 100, 0.,1.0);
+    fHistDeltaArea[iEvtClass]  = new TH2F(Form("hist_DeltaArea%i",iEvtClass), "#DeltaArea of matched jets;#Deltap_{T};#Deltaarea", 161, -80.5, 80.5, 32, -.8, .8); 
+       fHistJetPtDeltaArea[iEvtClass]  = new TH2F(Form("hist_JetPtDeltaArea%i",iEvtClass), "#DeltaArea of matched jets vs. probe jet p_{T};#Deltap_{T};#Deltaarea", 250, 0., 250., 32, -.8, .8);
        
     fHistDeltaEtaEtaJet[iEvtClass] = new TH2F(Form("fHistDeltaEtaEtaJet%i", iEvtClass),
                                                 Form("#eta - #Delta#eta of matched jets from event class %i;#eta;#Delta#eta", iEvtClass),
-                                                60, -.6, .6, 100, -.5, .5);
+                                                28, -.7, .7, 101, -1.01, 1.01);
     fHistDeltaPtEtaJet[iEvtClass] = new TH2F(Form("fHistDeltaPtEtaJet%i", iEvtClass),
                                                 Form("#eta - #Deltap_{T} of matched jets from event class %i;#eta;#Deltap_{T}", iEvtClass),
-                                                60, -.6, .6, 200, -50., 150);
+                                                28, -.7, .7, 161, -80.5, 80.5);
     fHistPtFraction[iEvtClass] = new TH2F(Form("fHistPtFraction%i", iEvtClass),
                                              Form("fraction from embedded jet in reconstructed jet;fraction (event class %i);p_{T}^{emb}", iEvtClass),
-                                                                                 100, 0., 1., 250, 0., 250.);
+                                                                                 52, 0., 1.04, 250, 0., 250.);
   }
 
   
   fOutputList->Add(fHistEvtSelection);
   fOutputList->Add(fHistEvtClass);
   fOutputList->Add(fHistCentrality);
+  fOutputList->Add(fHistNInputTracks);
+  fOutputList->Add(fHistCentVsTracks);
+  fOutputList->Add(fHistReactionPlane);
+  fOutputList->Add(fHistReactionPlaneWrtJets);
+
 
   for (Int_t iBranch = 0; iBranch < fkNbranches; iBranch++) {
     fOutputList->Add(fHistPtJet[iBranch]);
     fOutputList->Add(fHistEtaPhiJet[iBranch]);
        fOutputList->Add(fHistEtaPhiJetCut[iBranch]);
   }
-  
-  fOutputList->Add(fHistPtPtExtra);
-  
+    
   for (Int_t iEvtClass =0; iEvtClass < fkEvtClasses; iEvtClass++) {
     fOutputList->Add(fHistDeltaEtaDeltaPhiJet[iEvtClass]);
     fOutputList->Add(fHistDeltaEtaDeltaPhiJetCut[iEvtClass]);
-    fOutputList->Add(fHistDeltaEtaDeltaPhiJetNOMatching[iEvtClass]);
+    //fOutputList->Add(fHistDeltaEtaDeltaPhiJetNOMatching[iEvtClass]);
        fOutputList->Add(fHistDeltaEtaEtaJet[iEvtClass]);
     fOutputList->Add(fHistDeltaPtEtaJet[iEvtClass]);
        fOutputList->Add(fHistPtFraction[iEvtClass]);
@@ -244,7 +269,9 @@ void AliAnalysisTaskJetResponse::UserCreateOutputObjects()
     fOutputList->Add(fHistPtSmearing[iEvtClass]);
     fOutputList->Add(fHistDeltaR[iEvtClass]);
     fOutputList->Add(fHistArea[iEvtClass]);
+       //fOutputList->Add(fHistJetPtArea[iEvtClass]);
     fOutputList->Add(fHistDeltaArea[iEvtClass]);
+       fOutputList->Add(fHistJetPtDeltaArea[iEvtClass]);
   }
 
   // =========== Switch on Sumw2 for all histos ===========
@@ -263,7 +290,6 @@ void AliAnalysisTaskJetResponse::UserCreateOutputObjects()
 void AliAnalysisTaskJetResponse::UserExec(Option_t *)
 {
   // load events, apply event cuts, then compare leading jets
-
   if(!strlen(fJetBranchName[0].Data()) || !strlen(fJetBranchName[1].Data())){
       AliError("Jet branch name not set.");
       return;
@@ -316,7 +342,7 @@ void AliAnalysisTaskJetResponse::UserExec(Option_t *)
 
   // centrality selection
   AliCentrality *cent = fESD->GetCentrality();
-  Float_t centValue = cent->GetCentralityPercentile("TRK");
+  Float_t centValue = cent->GetCentralityPercentile("V0M");
   if(fDebug) printf("centrality: %f\n", centValue);
   if (centValue < fCentMin || centValue > fCentMax){
     fHistEvtSelection->Fill(4);
@@ -324,11 +350,55 @@ void AliAnalysisTaskJetResponse::UserExec(Option_t *)
     return;
   }
 
+
+  // multiplicity due to input tracks
+  Int_t nInputTracks = 0;
+  
+  TString jbname(fJetBranchName[1]);
+  for(Int_t i=1; i<=3; ++i){
+    if(jbname.Contains(Form("B%d",i))) jbname.ReplaceAll(Form("B%d",i),"B0");
+  }
+  // use only HI event
+  if(jbname.Contains("AODextraonly")) jbname.ReplaceAll("AODextraonly","AOD");
+  if(jbname.Contains("AODextra")) jbname.ReplaceAll("AODextra","AOD");
+  
+  if(fDebug) Printf("Multiplicity from jet branch %s", jbname.Data());
+  TClonesArray *tmpAODjets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(jbname.Data()));
+    
+  for (Int_t iJet=0; iJet<tmpAODjets->GetEntriesFast(); iJet++){
+      AliAODJet *jet = dynamic_cast<AliAODJet*>((*tmpAODjets)[iJet]);
+         if(!jet) continue;
+         TRefArray *trackList = jet->GetRefTracks();
+         Int_t nTracks = trackList->GetEntriesFast();
+         nInputTracks += nTracks;
+         if(fDebug) Printf("#jet%d: %d tracks", iJet, nTracks);
+  }
+  if(fDebug) Printf("---> input tracks: %d", nInputTracks);
+
+  if (nInputTracks < fNInputTracksMin || (fNInputTracksMax > -1 && nInputTracks > fNInputTracksMax)){
+       fHistEvtSelection->Fill(5);
+       PostData(1, fOutputList);
+       return;
+  }
+  
+  if(fEvtClassMode==1){ //multiplicity
+     fHistEvtClass->SetTitle("event classes (multiplicity)");
+     eventClass = fkEvtClasses-1 - (Int_t)(nInputTracks/250.);
+     if(eventClass<0) eventClass = 0;
+  }
+  
   fHistEvtSelection->Fill(0); // accepted events
   fHistEvtClass->Fill(eventClass);
   fHistCentrality->Fill(centValue);
+  fHistNInputTracks->Fill(nInputTracks);
+  fHistCentVsTracks->Fill(centValue,nInputTracks);
+  Double_t rp = AliAnalysisHelperJetTasks::ReactionPlane(kFALSE);
   // -- end event selection --
 
+  
+  
   // fetch jets
   TClonesArray *aodJets[2];
   aodJets[0] = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fJetBranchName[0].Data())); // in general: embedded jet
@@ -344,7 +414,7 @@ void AliAnalysisTaskJetResponse::UserExec(Option_t *)
     }
     fListJets[iJetType]->Sort();
   }
-  
+    
   // jet matching 
   static TArrayI aMatchIndex(fListJets[0]->GetEntries());
   static TArrayF aPtFraction(fListJets[0]->GetEntries());
@@ -381,6 +451,17 @@ void AliAnalysisTaskJetResponse::UserExec(Option_t *)
                jetPt[i]   = jet[i]->Pt();
                jetArea[i] = jet[i]->EffectiveAreaCharged();
         }
+         
+         // reaction plane;
+         if(fReactionPlaneBin>=0){
+            Int_t rpBin = AliAnalysisHelperJetTasks::GetPhiBin(TVector2::Phi_mpi_pi(rp-jetPhi[1]), 3);
+            if(rpBin!=fReactionPlaneBin) continue;
+         }
+         fHistReactionPlane->Fill(rp);
+         fHistReactionPlaneWrtJets->Fill(TVector2::Phi_mpi_pi(rp-jetPhi[1]));
+         
+
+
         if(eventClass > -1 && eventClass < fkEvtClasses){
         fHistPtFraction[eventClass] -> Fill(fraction, jetPt[0]);
         }
@@ -426,8 +507,6 @@ void AliAnalysisTaskJetResponse::UserExec(Option_t *)
              fHistEtaPhiJetCut[i] -> Fill(jetEta[i], jetPhi[i]);
         }
         
-        fHistPtPtExtra->Fill(jetPt[0], jetPt[1]);
-        
         if(eventClass > -1 && eventClass < fkEvtClasses){
                 fHistDeltaEtaDeltaPhiJetCut[eventClass] -> Fill(deltaEta, deltaPhi);
                 
@@ -438,8 +517,10 @@ void AliAnalysisTaskJetResponse::UserExec(Option_t *)
                  fHistDeltaEtaEtaJet[eventClass]         -> Fill(jetEta[0], deltaEta);
                 
                 fHistDeltaR[eventClass]                 -> Fill(deltaPt, deltaR);
-                fHistArea[eventClass]                   -> Fill(deltaPt, jetArea[1]);
+                fHistArea[eventClass]                   -> Fill(jetPt[0], deltaPt, jetArea[1]);
+                                //fHistJetPtArea[eventClass]                   -> Fill(jetPt[0], jetArea[1]);
                  fHistDeltaArea[eventClass]              -> Fill(deltaPt, deltaArea);
+                                fHistJetPtDeltaArea[eventClass]              -> Fill(jetPt[0], deltaArea);
                 
         }
   }
index 9b6d539..8ff02ab 100644 (file)
@@ -31,13 +31,15 @@ class AliAnalysisTaskJetResponse : public AliAnalysisTaskSE {
   virtual Int_t    GetEvtClassMax() const { return fEvtClassMax; }
   virtual Float_t  GetCentMin() const { return fCentMin; }
   virtual Float_t  GetCentMax() const { return fCentMax; }
+  virtual Int_t    GetNInputTracksMin() const { return fNInputTracksMin; }
+  virtual Int_t    GetNInputTracksMax() const { return fNInputTracksMax; } 
+  virtual Float_t  GetReactionPlaneBin() const { return fReactionPlaneBin; }
   virtual Float_t  GetJetEtaMin() const { return fJetEtaMin; }
   virtual Float_t  GetJetEtaMax() const { return fJetEtaMax; }
   virtual Float_t  GetJetPtMin() const { return fJetPtMin; }
   virtual Float_t  GetJetPtFractionMin() const { return fJetPtFractionMin; }
   virtual Int_t    GetNMatchJets() const { return fNMatchJets; }
-  //virtual Float_t  GetJetDeltaEta() const { return fJetDeltaEta; }
-  //virtual Float_t  GetJetDeltaPhi() const { return fJetDeltaPhi; }
+  virtual Int_t    GetEventClassMode() const { return fEvtClassMode; }
 
   virtual void     SetBranchNames(const TString &branch1, const TString &branch2);
   virtual void     SetOfflineTrgMask(AliVEvent::EOfflineTriggerTypes mask) { fOfflineTrgMask = mask; }
@@ -48,13 +50,15 @@ class AliAnalysisTaskJetResponse : public AliAnalysisTaskSE {
   virtual void     SetEvtClassMax(Int_t evtClass) { fEvtClassMax = evtClass; }
   virtual void     SetCentMin(Float_t cent) { fCentMin = cent; }
   virtual void     SetCentMax(Float_t cent) { fCentMax = cent; }
+  virtual void     SetNInputTracksMin(Int_t nTr) { fNInputTracksMin = nTr; }
+  virtual void     SetNInputTracksMax(Int_t nTr) { fNInputTracksMax = nTr; }
+  virtual void     SetReactionPlaneBin(Int_t rpBin) { fReactionPlaneBin = rpBin; }
   virtual void     SetJetEtaMin(Float_t eta) { fJetEtaMin = eta; }
   virtual void     SetJetEtaMax(Float_t eta) { fJetEtaMax = eta; }
   virtual void     SetJetPtMin(Float_t pt) { fJetPtMin = pt; }
   virtual void     SetJetPtFractionMin(Float_t pt) { fJetPtFractionMin = pt; }
   virtual void     SetNMatchJets(Int_t n) { fNMatchJets = n; }
-  //virtual void     SetJetDeltaEta(Float_t eta) { fJetDeltaEta = eta; }
-  //virtual void     SetJetDeltaPhi(Float_t phi) { fJetDeltaPhi = phi; }
+  virtual void     SetEventClassMode(Int_t mode) { fEvtClassMode = mode; }
 
  private:
   // ESD/AOD events
@@ -74,13 +78,16 @@ class AliAnalysisTaskJetResponse : public AliAnalysisTaskSE {
   Int_t   fEvtClassMax;          // upper bound on event class
   Float_t fCentMin;      // lower bound on centrality
   Float_t fCentMax;      // upper bound on centrality
+  Int_t   fNInputTracksMin;  // lower bound of nb. of input tracks
+  Int_t   fNInputTracksMax;  // upper bound of nb. of input tracks
+  Float_t fReactionPlaneBin; // reaction plane bin
   Float_t fJetEtaMin;     // lower bound on eta for found jets
   Float_t fJetEtaMax;     // upper bound on eta for found jets
   Float_t fJetPtMin;      // minimum jet pT
   Float_t fJetPtFractionMin; // minimum fraction for positiv match of jets
   Int_t   fNMatchJets;       // maximal nb. of jets taken for matching
-  //Float_t fJetDeltaEta;   // max difference in eta to match leading jets
-  //Float_t fJetDeltaPhi;   // max difference in phi to match leading jets
+  
+  Int_t fEvtClassMode; // event class mode; 0: centrality (default), 1: multiplicity
 
   // output objects
   const Int_t fkNbranches;                   //! number of branches to be read
@@ -89,26 +96,31 @@ class AliAnalysisTaskJetResponse : public AliAnalysisTaskSE {
   TH1I  *fHistEvtSelection;                  //! event selection statistic
   TH1I  *fHistEvtClass;                      //! event classes (from helper task)
   TH1F  *fHistCentrality;                    //! centrality of the event  
+  TH1F  *fHistNInputTracks;                  //! nb. of input tracks in the event
+  TH2F  *fHistCentVsTracks;                  //! centrality vs. nb. of input tracks of the event
+  TH1F  *fHistReactionPlane;                 //! reaction plane of the event
+  TH1F  *fHistReactionPlaneWrtJets;                 //! reaction plane of the event wrt the jet
   TH1F **fHistPtJet;                         //! pt distribution of jets
   TH2F **fHistEtaPhiJet;                     //! eta-phi distribution of jets (before acceptance cuts)
   TH2F **fHistEtaPhiJetCut;                  //! eta-phi distribution of jets in eta acceptace per event class
   TH2F **fHistDeltaEtaDeltaPhiJet;           //! delta eta vs. delta phi of matched jets (before acceptance cuts)
   TH2F **fHistDeltaEtaDeltaPhiJetCut;        //! delta eta vs. delta phi of matched jets
-  TH2F **fHistDeltaEtaDeltaPhiJetNOMatching; //! delta eta vs. delta phi of jets which do not match
+  //TH2F **fHistDeltaEtaDeltaPhiJetNOMatching; //! delta eta vs. delta phi of jets which do not match
   TH2F **fHistDeltaEtaEtaJet;                //! delta eta vs. eta of matched jets per event class
   TH2F **fHistDeltaPtEtaJet;                 //! delta eta vs. eta of matched jets per event class
   TH2F **fHistPtFraction;                    //! fraction from embedded jet in reconstructed jet per event class
-  TH2F  *fHistPtPtExtra;                     //! jet pt response
   TH2F **fHistPtResponse;                    //! jet pt response per event class
   TH2F **fHistPtSmearing;                    //! emb-jet pt vs (emb+UE - emb) pt
   TH2F **fHistDeltaR;                        //! shift dR of jets vs (emb+UE - emb) pt
-  TH2F **fHistArea;                          //! area of jets vs (emb+UE - emb) pt
+  TH3F **fHistArea;                          //! area of jets vs (emb+UE - emb) pt
+  //TH2F **fHistJetPtArea;                          //! area of jets vs (emb+UE - emb) pt
   TH2F **fHistDeltaArea;                     //! delta area of jets vs (emb+UE - emb) pt
+  TH2F **fHistJetPtDeltaArea;                     //! delta area of jets vs emb pt
 
   AliAnalysisTaskJetResponse(const AliAnalysisTaskJetResponse&); // not implemented
   AliAnalysisTaskJetResponse& operator=(const AliAnalysisTaskJetResponse&); // not implemented
 
-  ClassDef(AliAnalysisTaskJetResponse, 2);
+  ClassDef(AliAnalysisTaskJetResponse, 3);
 };
 
 #endif
diff --git a/PWG4/JetTasks/AliAnalysisTaskJetResponseV2.cxx b/PWG4/JetTasks/AliAnalysisTaskJetResponseV2.cxx
new file mode 100644 (file)
index 0000000..eb0a061
--- /dev/null
@@ -0,0 +1,534 @@
+#include "TChain.h"
+#include "TTree.h"
+#include "TMath.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TH3F.h"
+#include "THnSparse.h"
+#include "TCanvas.h"
+
+#include "AliLog.h"
+
+#include "AliAnalysisTask.h"
+#include "AliAnalysisManager.h"
+
+#include "AliVEvent.h"
+#include "AliESDEvent.h"
+#include "AliESDInputHandler.h"
+#include "AliCentrality.h"
+#include "AliAnalysisHelperJetTasks.h"
+#include "AliInputEventHandler.h"
+
+#include "AliAODEvent.h"
+#include "AliAODJet.h"
+
+#include "AliAnalysisTaskJetResponseV2.h"
+
+ClassImp(AliAnalysisTaskJetResponseV2)
+
+AliAnalysisTaskJetResponseV2::AliAnalysisTaskJetResponseV2() :
+  AliAnalysisTaskSE(),
+  fESD(0x0),
+  fAOD(0x0),
+  fOfflineTrgMask(AliVEvent::kAny),
+  fMinContribVtx(1),
+  fVtxZMin(-8.),
+  fVtxZMax(8.),
+  fEvtClassMin(1),
+  fEvtClassMax(4),
+  fCentMin(0.),
+  fCentMax(100.),
+  fNInputTracksMin(0),
+  fNInputTracksMax(-1),
+  fReactionPlaneBin(-1),
+  fJetEtaMin(-.5),
+  fJetEtaMax(.5),
+  fJetPtMin(20.),
+  fJetPtFractionMin(0.5),
+  fNMatchJets(4),
+  fMatchMaxDist(0.8),
+  fkNbranches(2),
+  fkEvtClasses(12),
+  fOutputList(0x0),
+  fHistEvtSelection(0x0),
+  fhnEvent(0x0),
+  fhnJetsRp(0x0),
+  fhnJetsDeltaPt(0x0),
+  fhnJetsEta(0x0),
+  fhnJetsArea(0x0),
+  fhnJetsBeforeCut1(0x0),
+  fhnJetsBeforeCut2(0x0)
+{
+  // default Constructor
+
+  fJetBranchName[0] = "";
+  fJetBranchName[1] = "";
+
+  fListJets[0] = new TList;
+  fListJets[1] = new TList;
+}
+
+AliAnalysisTaskJetResponseV2::AliAnalysisTaskJetResponseV2(const char *name) :
+  AliAnalysisTaskSE(name),
+  fESD(0x0),
+  fAOD(0x0),
+  fOfflineTrgMask(AliVEvent::kAny),
+  fMinContribVtx(1),
+  fVtxZMin(-8.),
+  fVtxZMax(8.),
+  fEvtClassMin(1),
+  fEvtClassMax(4),
+  fCentMin(0.),
+  fCentMax(100.),
+  fNInputTracksMin(0),
+  fNInputTracksMax(-1),
+  fReactionPlaneBin(-1),
+  fJetEtaMin(-.5),
+  fJetEtaMax(.5),
+  fJetPtMin(20.),
+  fJetPtFractionMin(0.5),
+  fNMatchJets(4),
+  fMatchMaxDist(0.8),
+  fkNbranches(2),
+  fkEvtClasses(12),
+  fOutputList(0x0),
+  fHistEvtSelection(0x0),
+  fhnEvent(0x0),
+  fhnJetsRp(0x0),
+  fhnJetsDeltaPt(0x0),
+  fhnJetsEta(0x0),
+  fhnJetsArea(0x0),
+  fhnJetsBeforeCut1(0x0),
+  fhnJetsBeforeCut2(0x0)
+{
+  // Constructor
+
+  fJetBranchName[0] = "";
+  fJetBranchName[1] = "";
+
+  fListJets[0] = new TList;
+  fListJets[1] = new TList;
+
+  DefineOutput(1, TList::Class());
+}
+
+AliAnalysisTaskJetResponseV2::~AliAnalysisTaskJetResponseV2()
+{
+  delete fListJets[0];
+  delete fListJets[1];
+}
+
+void AliAnalysisTaskJetResponseV2::SetBranchNames(const TString &branch1, const TString &branch2)
+{
+  fJetBranchName[0] = branch1;
+  fJetBranchName[1] = branch2;
+}
+
+void AliAnalysisTaskJetResponseV2::Init()
+{
+
+   // check for jet branches
+   if(!strlen(fJetBranchName[0].Data()) || !strlen(fJetBranchName[1].Data())){
+      AliError("Jet branch name not set.");
+   }
+
+}
+
+void AliAnalysisTaskJetResponseV2::UserCreateOutputObjects()
+{
+  // Create histograms
+  // Called once
+  OpenFile(1);
+  if(!fOutputList) fOutputList = new TList;
+  fOutputList->SetOwner(kTRUE);
+
+  Bool_t oldStatus = TH1::AddDirectoryStatus();
+  TH1::AddDirectory(kFALSE);
+
+
+  fHistEvtSelection = new TH1I("fHistEvtSelection", "event selection", 6, -0.5, 5.5);
+  fHistEvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
+  fHistEvtSelection->GetXaxis()->SetBinLabel(2,"events IN");
+  fHistEvtSelection->GetXaxis()->SetBinLabel(3,"event selection (rejected)");
+  fHistEvtSelection->GetXaxis()->SetBinLabel(4,"vertex cut (rejected)");
+  fHistEvtSelection->GetXaxis()->SetBinLabel(5,"centrality (rejected)");
+  fHistEvtSelection->GetXaxis()->SetBinLabel(6,"multiplicity (rejected)");
+  
+  Float_t pi = TMath::Pi();
+  
+  const Int_t dim1 = 3;
+  // cent : nInpTrks : rp
+  Int_t    nbins1[dim1] = { 100,   400,  30  };
+  Double_t xmin1[dim1]  = {   0.,    0.,  0. };
+  Double_t xmax1[dim1]  = { 100., 4000., pi  };
+  
+  TString hnTitle("variables per event;centrality;nb. of input tracks;reaction plane #phi");
+  
+  fhnEvent = new THnSparseF("fhnEvent", hnTitle.Data(), dim1, nbins1, xmin1, xmax1);
+  
+  /* original thnsparse
+  const Int_t dim2 = 18;
+  // cent : nInpTrks : rp bins : rp wrt jet : fraction : 
+  // jetPt(2x) : jetEta(2x) : jetPhi (2x) : jetArea(2x)
+  // deltaPt : deltaEta : deltaPhi : deltaR : deltaArea
+  
+  Int_t    nbins2[dim2] = {  16,   400,    3,  48,    52, 125,  125,    56,   56,   25,   25, 100, 100,    201,   101,    51,  50,   81 };
+  Double_t xmin2[dim2]  = {   0.,    0., -.5, -pi,  0.  ,   0.,   0., -0.7, -0.7,   0.,   0., 0. , 0. , -100.5, -1.01, -1.02,  0., -.81 };
+  Double_t xmax2[dim2]  = {  80., 4000., 2.5,  pi,  1.04, 250., 250.,  0.7,  0.7, 2*pi, 2*pi, 1.0, 1.0,  100.5,  1.01,  1.02,  1.,  .81 };
+  
+  fhnJets = new THnSparseF("fhnJets", "variables per jet", dim2, nbins2, xmin2, xmax2);
+  */
+  
+  
+  const Int_t dim2 = 6;
+  // cent : nInpTrks : rp bins : rp wrt jet : probe pT
+  Int_t    nbins2[dim2] = {   8 ,    40,   3,  48,  48,  50 };
+  Double_t xmin2[dim2]  = {   0.,    0., -.5, -pi, -pi,  0. };
+  Double_t xmax2[dim2]  = {  80., 4000., 2.5,  pi,  pi, 250.};
+  hnTitle = "variables per jet;centrality;nb. of input tracks; reaction plane bin;#Delta#phi(RP-jet);probe p_{T}";
+  fhnJetsRp = new THnSparseF("fhnJetsRp", hnTitle.Data(), dim2, nbins2, xmin2, xmax2);
+  
+  
+  const Int_t dim3 = 6;
+  // cent : nInpTrks : rp bins:  deltaPt : jetPt(2x) (hr delta pt)
+  Int_t    nbins3[dim3] = {  16,   400,    3,    241,  250,  250 };
+  Double_t xmin3[dim3]  = {   0.,    0., -.5, -120.5,   0.,   0. };
+  Double_t xmax3[dim3]  = {  80., 4000., 2.5,  120.5, 250., 250. };
+  hnTitle = "variables per jet;centrality;nb. of input tracks; reaction plane bin;#delta p_{T};probe p_{T};rec p_{T}";
+  fhnJetsDeltaPt = new THnSparseF("fhnJetsDeltaPt", hnTitle.Data(), dim3, nbins3, xmin3, xmax3);
+    
+  const Int_t dim4 = 10;       
+  // cent : nInpTrks : rp bins : deltaPt : jetPt(2x) : deltaR : deltaEta : jetEta(2x) (hr for eta)
+  Int_t    nbins4[dim4] = {   8 ,   40 ,   3,  101 ,  50 ,  50 , 50,    51,   56,   56 };
+  Double_t xmin4[dim4]  = {   0.,    0., -.5, -101.,   0.,   0., 0., -1.02, -0.7, -0.7 };
+  Double_t xmax4[dim4]  = {  80., 4000., 2.5,  101., 250., 250., 1.,  1.02,  0.7,  0.7 };
+  hnTitle = "variables per jet;centrality;nb. of input tracks; reaction plane bin;#delta p_{T};probe p_{T};rec p_{T};#DeltaR;#Delta#eta;#eta(probe);#eta(rec)";
+  fhnJetsEta = new THnSparseF("fhnJetsEta", hnTitle.Data(), dim4, nbins4, xmin4, xmax4);
+  
+  const Int_t dim5 = 13; 
+  // cent : nInpTrks : rp bins : deltaArea : jetArea(2x) : deltaR : fraction : distance next rec jet : pT next jet : deltaPt : jetPt(2x) (hr for area) 
+  hnTitle = "variables per jet;centrality;nb. of input tracks; reaction plane bin;#Deltaarea;probe area;rec area;#DeltaR;fraction;distance to closest rec jet;p_{T} of closest rec jet;#delta p_{T};probe p_{T};rec p_{T}";
+  Int_t    nbins5[dim5] = {   8 ,   40 ,   3,   81, 100, 100, 50,   52,   51 , 100 ,  101 ,  50 ,  50  };
+  Double_t xmin5[dim5]  = {   0.,    0., -.5, -.81,  0.,  0., 0., 0.  , -0.02,   0., -101.,   0.,   0. };
+  Double_t xmax5[dim5]  = {  80., 4000., 2.5,  .81,  1.,  1., 1., 1.04,  1.  , 200.,  101., 250., 250. };
+  fhnJetsArea = new THnSparseF("fhnJetsArea", hnTitle.Data(), dim5, nbins5, xmin5, xmax5);
+  
+  
+  //before cut
+  const Int_t dim6 = 10;
+  // cent : nInpTrks : rp bins : fraction : jetPt(2x) : jetEta(2x) : jetPhi(2x) (low resolution) (with fraction, eta, phi, pt cuts possible)
+  Int_t    nbins6[dim6] = {  8 ,   40 ,   3, 52 ,  50 ,  50 ,   28,   28,   25,   25 };
+  Double_t xmin6[dim6]  = {  0.,    0., -.5,  0.,   0.,   0., -0.7, -0.7,   0.,   0. };
+  Double_t xmax6[dim6]  = { 80., 4000., 2.5, 1.04, 250., 250.,  0.7,  0.7, 2*pi, 2*pi };
+  hnTitle = "variables before cut;centrality;nb. of input tracks; reaction plane bin;fraction;probe p_{T};rec p_{T};probe #eta; rec #eta;probe #phi;rec #phi";
+  fhnJetsBeforeCut1 = new THnSparseF("fhnJetsBeforeCut1", hnTitle.Data(), dim6, nbins6, xmin6, xmax6);
+  
+  const Int_t dim7 = 10;
+  // cent : nInpTrks : rp bins : deltaPt : jetPt(2x) : deltaR : deltaEta : jetEta(2x) (low resolution)
+  Int_t    nbins7[dim7] = {   8 ,   40 ,   3,  101 ,  50 ,  50 , 50,    51,   28,   28 };
+  Double_t xmin7[dim7]  = {   0.,    0., -.5, -101.,   0.,   0., 0., -1.02, -0.7, -0.7 };
+  Double_t xmax7[dim7]  = {  80., 4000., 2.5,  101., 250., 250., 1.,  1.02,  0.7,  0.7 };
+  hnTitle = "variables before cut;centrality;nb. of input tracks; reaction plane bin;#delta p_{T};probe p_{T};rec p_{T};#Delta R;#Delta #eta;probe #eta;rec #eta";
+  fhnJetsBeforeCut2 = new THnSparseF("fhnJetsBeforeCut2", hnTitle.Data(), dim7, nbins7, xmin7, xmax7);
+  
+  
+  
+  fOutputList->Add(fHistEvtSelection);
+  fOutputList->Add(fhnEvent);
+  fOutputList->Add(fhnJetsRp);
+  fOutputList->Add(fhnJetsDeltaPt);
+  fOutputList->Add(fhnJetsEta);
+  fOutputList->Add(fhnJetsArea);
+  fOutputList->Add(fhnJetsBeforeCut1);
+  fOutputList->Add(fhnJetsBeforeCut2);
+
+  // =========== Switch on Sumw2 for all histos ===========
+  for (Int_t i=0; i<fOutputList->GetEntries(); ++i) {
+    TH1 *h1 = dynamic_cast<TH1*>(fOutputList->At(i));
+    if (h1){
+      h1->Sumw2();
+      continue;
+    }
+       THnSparse *hn = dynamic_cast<THnSparse*>(fOutputList->At(i));
+    if (hn){
+      hn->Sumw2();
+    }    
+  }
+  TH1::AddDirectory(oldStatus);
+
+  PostData(1, fOutputList);
+}
+
+void AliAnalysisTaskJetResponseV2::UserExec(Option_t *)
+{
+  // load events, apply event cuts, then compare leading jets
+
+  if(!strlen(fJetBranchName[0].Data()) || !strlen(fJetBranchName[1].Data())){
+      AliError("Jet branch name not set.");
+      return;
+   }
+
+  fESD=dynamic_cast<AliESDEvent*>(InputEvent());
+  if (!fESD) {
+    AliError("ESD not available");
+    return;
+  }
+  fAOD = dynamic_cast<AliAODEvent*>(AODEvent());
+  if (!fAOD) {
+    AliError("AOD not available");
+    return;
+  }
+
+  // -- event selection --
+  fHistEvtSelection->Fill(1); // number of events before event selection
+
+  // physics selection
+  AliInputEventHandler* inputHandler = (AliInputEventHandler*)
+    ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
+  if(!(inputHandler->IsEventSelected() & fOfflineTrgMask)){
+    if(fDebug) Printf(" Trigger Selection: event REJECTED ... ");
+    fHistEvtSelection->Fill(2);
+    PostData(1, fOutputList);
+    return;
+  }
+
+  // vertex selection
+  AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
+  Int_t nTracksPrim = primVtx->GetNContributors();
+  if ((nTracksPrim < fMinContribVtx) ||
+      (primVtx->GetZ() < fVtxZMin) ||
+      (primVtx->GetZ() > fVtxZMax) ){
+    if(fDebug) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
+    fHistEvtSelection->Fill(3);
+    PostData(1, fOutputList);
+    return;
+  }
+
+  // event class selection (from jet helper task)
+  Int_t eventClass = AliAnalysisHelperJetTasks::EventClass();
+  if(fDebug) Printf("Event class %d", eventClass);
+  if (eventClass < fEvtClassMin || eventClass > fEvtClassMax){
+    fHistEvtSelection->Fill(4);
+    PostData(1, fOutputList);
+    return;
+  }
+
+  // centrality selection
+  AliCentrality *cent = fESD->GetCentrality();
+  Float_t centValue = cent->GetCentralityPercentile("V0M");
+  if(fDebug) printf("centrality: %f\n", centValue);
+  if (centValue < fCentMin || centValue > fCentMax){
+    fHistEvtSelection->Fill(4);
+    PostData(1, fOutputList);
+    return;
+  }
+
+
+  // multiplicity due to input tracks
+  Int_t nInputTracks = GetNInputTracks();
+  
+  if (nInputTracks < fNInputTracksMin || (fNInputTracksMax > -1 && nInputTracks > fNInputTracksMax)){
+       fHistEvtSelection->Fill(5);
+       PostData(1, fOutputList);
+       return;
+  }
+  
+   
+  fHistEvtSelection->Fill(0); // accepted events  
+  // -- end event selection --
+
+  Double_t rp = AliAnalysisHelperJetTasks::ReactionPlane(kFALSE);
+  Double_t eventEntries[3] = { (Double_t)centValue, (Double_t)nInputTracks, rp };
+  fhnEvent->Fill(eventEntries);
+  
+  
+  // fetch jets
+  TClonesArray *aodJets[2];
+  aodJets[0] = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fJetBranchName[0].Data())); // in general: embedded jet
+  aodJets[1] = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fJetBranchName[1].Data())); // in general: embedded jet + UE
+
+  for (Int_t iJetType = 0; iJetType < 2; iJetType++) {
+    fListJets[iJetType]->Clear();
+    if (!aodJets[iJetType]) continue;
+       
+    for (Int_t iJet = 0; iJet < aodJets[iJetType]->GetEntriesFast(); iJet++) {
+      AliAODJet *jet = dynamic_cast<AliAODJet*>((*aodJets[iJetType])[iJet]);
+      if (jet) fListJets[iJetType]->Add(jet);
+    }
+    fListJets[iJetType]->Sort();
+  }
+    
+    
+  // jet matching 
+  static TArrayI aMatchIndex(fListJets[0]->GetEntries());
+  static TArrayF aPtFraction(fListJets[0]->GetEntries());
+  if(aMatchIndex.GetSize()<fListJets[0]->GetEntries()) aMatchIndex.Set(fListJets[0]->GetEntries());
+  if(aPtFraction.GetSize()<fListJets[0]->GetEntries()) aPtFraction.Set(fListJets[0]->GetEntries());
+  
+  // stores matched jets in 'aMatchIndex' and fraction of pT in 'aPtFraction'
+  AliAnalysisHelperJetTasks::GetJetMatching(fListJets[0], TMath::Min((Int_t)fNMatchJets,(Int_t)fListJets[0]->GetEntries()),
+                                            fListJets[1], TMath::Min((Int_t)fNMatchJets,(Int_t)fListJets[1]->GetEntries()),
+                                            aMatchIndex, aPtFraction, fDebug, fMatchMaxDist);
+                                                                                       
+  // loop over matched jets
+  Int_t ir = -1; // index of matched reconstruced jet
+  Float_t fraction = -1.;
+  AliAODJet *jet[2]  = { 0x0, 0x0 };
+  Float_t jetEta[2]  = { -990., -990. };
+  Float_t jetPhi[2]  = { -990., -990. };
+  Float_t jetPt[2]   = { -990., -990. };
+  Float_t jetArea[2] = { -990., -990. };
+  Float_t rpJet[2]   = { -990., -990. };
+   
+  for(Int_t ig=0; ig<fListJets[0]->GetEntries(); ++ig){
+     ir = aMatchIndex[ig];
+        if(ir<0) continue;
+        fraction = aPtFraction[ig];
+        
+        // fetch jets
+        jet[0] = (AliAODJet*)(fListJets[0]->At(ig));
+        jet[1] = (AliAODJet*)(fListJets[1]->At(ir));
+        if(!jet[0] || !jet[1]) continue;
+        
+        // look for distance to next rec jet
+        Float_t distNextJet = -0.01; // no neighbor
+        Float_t ptNextJet = -1.;
+        for(Int_t r=0; r<fListJets[1]->GetEntries(); ++r){
+           if(r==ir) continue;
+               Float_t tmpDeltaR = jet[1]->DeltaR((AliAODJet*)fListJets[1]->At(r));
+               if(distNextJet<0. || distNextJet>tmpDeltaR){
+               distNextJet = tmpDeltaR;
+                   ptNextJet   = ((AliAODJet*)fListJets[1]->At(r))->Pt();
+               }
+        }
+        
+        // get parameters
+        for(Int_t i=0; i<fkNbranches; ++i){
+           jetEta[i]  = jet[i]->Eta();
+               jetPhi[i]  = jet[i]->Phi();
+               jetPt[i]   = jet[i]->Pt();
+               jetArea[i] = jet[i]->EffectiveAreaCharged();
+               rpJet[i]   = TVector2::Phi_mpi_pi(rp-jetPhi[i]);
+        }
+        Int_t rpBin = AliAnalysisHelperJetTasks::GetPhiBin(TVector2::Phi_mpi_pi(rp-jetPhi[1]), 3);
+
+        
+        // calculate parameters of associated jets
+        Float_t deltaPt    = jetPt[1]-jetPt[0];
+        Float_t deltaEta   = jetEta[1]-jetEta[0];
+        Float_t deltaPhi   = TVector2::Phi_mpi_pi(jetPhi[1]-jetPhi[0]);
+        Float_t deltaR     = TMath::Sqrt(deltaEta*deltaEta+deltaPhi*deltaPhi);
+        Float_t deltaArea  = jetArea[1]-jetArea[0];
+        
+       
+        // fill thnsparse before acceptance cut
+        Double_t jetBeforeCutEntries1[10] = { 
+           (Double_t)centValue, (Double_t)nInputTracks, (Double_t)rpBin,
+               (Double_t)fraction,     (Double_t)jetPt[0], (Double_t)jetPt[1], 
+               (Double_t)jetEta[0], (Double_t)jetEta[1], (Double_t)jetPhi[0], (Double_t)jetPhi[1] };
+        
+        Double_t jetBeforeCutEntries2[10] = {
+        (Double_t)centValue, (Double_t)nInputTracks, (Double_t)rpBin, 
+               (Double_t)deltaPt, (Double_t)jetPt[0], (Double_t)jetPt[1],
+               (Double_t)deltaR, (Double_t)deltaEta,
+               (Double_t)jetEta[0], (Double_t)jetEta[1] };
+        
+        fhnJetsBeforeCut1->Fill(jetBeforeCutEntries1);
+        fhnJetsBeforeCut2->Fill(jetBeforeCutEntries2);
+        
+        
+        // minimum fraction required
+        if(fraction<fJetPtFractionMin) continue;
+        
+        // jet acceptance + minimum pT check
+        if(jetEta[0]>fJetEtaMax || jetEta[0]<fJetEtaMin ||
+           jetEta[1]>fJetEtaMax || jetEta[1]<fJetEtaMin){
+               
+               if(fDebug){
+               Printf("Jet not in eta acceptance.");
+                       Printf("[0]: jet %d eta %.2f", ig, jetEta[0]);
+                       Printf("[1]: jet %d eta %.2f", ir, jetEta[1]);
+               }
+               continue;
+     }
+        if(jetPt[1] < fJetPtMin){
+           if(fDebug) Printf("Jet %d (pT %.1f GeV/c) has less than required pT.", ir, jetPt[1]);
+           continue;
+        }
+        
+        // fill thnsparse
+        Double_t jetEntriesRp[6] = {
+          (Double_t)centValue, (Double_t)nInputTracks, (Double_t)rpBin, 
+          (Double_t)rpJet[0], (Double_t)rpJet[1], (Double_t)jetPt[0]
+          };
+     fhnJetsRp->Fill(jetEntriesRp);
+        
+        Double_t jetEntriesDeltaPt[6] = {
+           (Double_t)centValue, (Double_t)nInputTracks, (Double_t)rpBin,
+                  (Double_t)deltaPt, (Double_t)jetPt[0], (Double_t)jetPt[1]
+                  };            
+     fhnJetsDeltaPt->Fill(jetEntriesDeltaPt);
+        
+        Double_t jetEntriesEta[10] = {
+           (Double_t)centValue, (Double_t)nInputTracks, (Double_t)rpBin,
+                  (Double_t)deltaPt, (Double_t)jetPt[0], (Double_t)jetPt[1],
+                  (Double_t)deltaR, (Double_t)deltaEta, (Double_t)jetEta[0], (Double_t)jetEta[1]
+                  };                            
+     fhnJetsEta->Fill(jetEntriesEta);
+        
+        Double_t jetEntriesArea[13] = {
+           (Double_t)centValue, (Double_t)nInputTracks, (Double_t)rpBin,
+           (Double_t)deltaArea, (Double_t)jetArea[0], (Double_t)jetArea[1],
+                  (Double_t)deltaR, (Double_t)fraction, (Double_t)distNextJet, (Double_t)ptNextJet,
+                  (Double_t)deltaPt, (Double_t)jetPt[0], (Double_t)jetPt[1]
+                  };                            
+     fhnJetsArea->Fill(jetEntriesArea);
+        
+  }
+
+  PostData(1, fOutputList);
+}
+
+void AliAnalysisTaskJetResponseV2::Terminate(const Option_t *)
+{
+  // Draw result to the screen
+  // Called once at the end of the query
+
+  if (!GetOutputData(1))
+    return;
+}
+
+Int_t AliAnalysisTaskJetResponseV2::GetNInputTracks()
+{
+
+  Int_t nInputTracks = 0;
+  
+  TString jbname(fJetBranchName[1]);
+  //needs complete event, use jets without background subtraction
+  for(Int_t i=1; i<=3; ++i){
+    if(jbname.Contains(Form("B%d",i))) jbname.ReplaceAll(Form("B%d",i),"B0");
+  }
+  // use only HI event
+  if(jbname.Contains("AODextraonly")) jbname.ReplaceAll("AODextraonly","AOD");
+  if(jbname.Contains("AODextra")) jbname.ReplaceAll("AODextra","AOD");
+  
+  if(fDebug) Printf("Multiplicity from jet branch %s", jbname.Data());
+  TClonesArray *tmpAODjets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(jbname.Data()));
+  if(!tmpAODjets){
+    Printf("Jet branch %s not found", jbname.Data());
+       Printf("AliAnalysisTaskJetResponseV2::GetNInputTracks FAILED");
+       return -1;
+  }
+      
+  for (Int_t iJet=0; iJet<tmpAODjets->GetEntriesFast(); iJet++){
+      AliAODJet *jet = dynamic_cast<AliAODJet*>((*tmpAODjets)[iJet]);
+         if(!jet) continue;
+         TRefArray *trackList = jet->GetRefTracks();
+         Int_t nTracks = trackList->GetEntriesFast();
+         nInputTracks += nTracks;
+         if(fDebug) Printf("#jet%d: %d tracks", iJet, nTracks);
+  }
+  if(fDebug) Printf("---> input tracks: %d", nInputTracks);
+  
+  return nInputTracks;  
+}
diff --git a/PWG4/JetTasks/AliAnalysisTaskJetResponseV2.h b/PWG4/JetTasks/AliAnalysisTaskJetResponseV2.h
new file mode 100644 (file)
index 0000000..16351e0
--- /dev/null
@@ -0,0 +1,111 @@
+#ifndef ALIANALYSISTASKJETRESPONSEV2_H
+#define ALIANALYSISTASKJETRESPONSEV2_H
+
+class TH1F;
+class TH2F;
+class TH3F;
+class THnSparse;
+class AliESDEvent;
+class AliAODEvent;
+
+#include "AliAnalysisTaskSE.h"
+#include "AliVEvent.h"
+
+class AliAnalysisTaskJetResponseV2 : public AliAnalysisTaskSE {
+ public:
+  AliAnalysisTaskJetResponseV2();
+  AliAnalysisTaskJetResponseV2(const char *name);
+  virtual ~AliAnalysisTaskJetResponseV2();
+
+  virtual void     LocalInit() {Init();}
+  virtual void     Init();
+  virtual void     UserCreateOutputObjects();
+  virtual void     UserExec(Option_t *option);
+  virtual void     Terminate(const Option_t*);
+  virtual Int_t    GetNInputTracks();
+
+  virtual AliVEvent::EOfflineTriggerTypes GetOfflineTrgMask() const { return fOfflineTrgMask; }
+  virtual void     GetBranchNames(TString &branch1, TString &branch2) const { branch1 = fJetBranchName[0]; branch2 = fJetBranchName[1]; }
+  virtual Int_t    GetMinContribVtx() const { return fMinContribVtx; };
+  virtual Float_t  GetVtxZMin() const { return fVtxZMin; }
+  virtual Float_t  GetVtxZMax() const { return fVtxZMax; }
+  virtual Int_t    GetEvtClassMin() const { return fEvtClassMin; }
+  virtual Int_t    GetEvtClassMax() const { return fEvtClassMax; }
+  virtual Float_t  GetCentMin() const { return fCentMin; }
+  virtual Float_t  GetCentMax() const { return fCentMax; }
+  virtual Int_t    GetNInputTracksMin() const { return fNInputTracksMin; }
+  virtual Int_t    GetNInputTracksMax() const { return fNInputTracksMax; } 
+  virtual Float_t  GetReactionPlaneBin() const { return fReactionPlaneBin; }
+  virtual Float_t  GetJetEtaMin() const { return fJetEtaMin; }
+  virtual Float_t  GetJetEtaMax() const { return fJetEtaMax; }
+  virtual Float_t  GetJetPtMin() const { return fJetPtMin; }
+  virtual Float_t  GetJetPtFractionMin() const { return fJetPtFractionMin; }
+  virtual Int_t    GetNMatchJets() const { return fNMatchJets; }
+
+  virtual void     SetBranchNames(const TString &branch1, const TString &branch2);
+  virtual void     SetOfflineTrgMask(AliVEvent::EOfflineTriggerTypes mask) { fOfflineTrgMask = mask; }
+  virtual void     SetMinContribVtx(Int_t n) { fMinContribVtx = n; }
+  virtual void     SetVtxZMin(Float_t z) { fVtxZMin = z; }
+  virtual void     SetVtxZMax(Float_t z) { fVtxZMax = z; }
+  virtual void     SetEvtClassMin(Int_t evtClass) { fEvtClassMin = evtClass; }
+  virtual void     SetEvtClassMax(Int_t evtClass) { fEvtClassMax = evtClass; }
+  virtual void     SetCentMin(Float_t cent) { fCentMin = cent; }
+  virtual void     SetCentMax(Float_t cent) { fCentMax = cent; }
+  virtual void     SetNInputTracksMin(Int_t nTr) { fNInputTracksMin = nTr; }
+  virtual void     SetNInputTracksMax(Int_t nTr) { fNInputTracksMax = nTr; }
+  virtual void     SetReactionPlaneBin(Int_t rpBin) { fReactionPlaneBin = rpBin; }
+  virtual void     SetJetEtaMin(Float_t eta) { fJetEtaMin = eta; }
+  virtual void     SetJetEtaMax(Float_t eta) { fJetEtaMax = eta; }
+  virtual void     SetJetPtMin(Float_t pt) { fJetPtMin = pt; }
+  virtual void     SetJetPtFractionMin(Float_t pt) { fJetPtFractionMin = pt; }
+  virtual void     SetNMatchJets(Int_t n) { fNMatchJets = n; }
+
+ private:
+  // ESD/AOD events
+  AliESDEvent *fESD;    //! ESD object
+  AliAODEvent *fAOD;    //! AOD event
+
+  // jets to compare
+  TString fJetBranchName[2]; //  name of jet branches to compare
+  TList *fListJets[2];       //! jet lists
+
+  // event selection
+  AliVEvent::EOfflineTriggerTypes fOfflineTrgMask; // mask of offline triggers to accept
+  Int_t   fMinContribVtx; // minimum number of track contributors for primary vertex
+  Float_t fVtxZMin;      // lower bound on vertex z
+  Float_t fVtxZMax;      // upper bound on vertex z
+  Int_t   fEvtClassMin;          // lower bound on event class
+  Int_t   fEvtClassMax;          // upper bound on event class
+  Float_t fCentMin;      // lower bound on centrality
+  Float_t fCentMax;      // upper bound on centrality
+  Int_t   fNInputTracksMin;  // lower bound of nb. of input tracks
+  Int_t   fNInputTracksMax;  // upper bound of nb. of input tracks
+  Float_t fReactionPlaneBin; // reaction plane bin
+  Float_t fJetEtaMin;     // lower bound on eta for found jets
+  Float_t fJetEtaMax;     // upper bound on eta for found jets
+  Float_t fJetPtMin;      // minimum jet pT
+  Float_t fJetPtFractionMin; // minimum fraction for positiv match of jets
+  Int_t   fNMatchJets;       // maximal nb. of jets taken for matching
+  Double_t fMatchMaxDist;     // maximal distance of matching jets
+  
+
+  // output objects
+  const Int_t fkNbranches;                   //! number of branches to be read
+  const Int_t fkEvtClasses;                  //! number of event classes
+  TList *fOutputList;                        //! output data container
+  TH1I  *fHistEvtSelection;                  //! event selection statistic
+  THnSparse *fhnEvent;                       //! variables per event
+  THnSparse *fhnJetsRp;                      //! variables per jet
+  THnSparse *fhnJetsDeltaPt;                 //! variables per jet
+  THnSparse *fhnJetsEta;                     //! variables per jet
+  THnSparse *fhnJetsArea;                    //! variables per jet
+  THnSparse *fhnJetsBeforeCut1;               //! variables per jet before acceptance cut
+  THnSparse *fhnJetsBeforeCut2;               //! variables per jet before acceptance cut
+  
+  AliAnalysisTaskJetResponseV2(const AliAnalysisTaskJetResponseV2&); // not implemented
+  AliAnalysisTaskJetResponseV2& operator=(const AliAnalysisTaskJetResponseV2&); // not implemented
+
+  ClassDef(AliAnalysisTaskJetResponseV2, 1);
+};
+
+#endif
index b4da285..934dd3d 100644 (file)
@@ -37,6 +37,7 @@
 #pragma link C++ class AliAnalysisTaskJetsTM+;
 #pragma link C++ class AliAnalysisTaskQGSep+;
 #pragma link C++ class AliAnalysisTaskJetResponse+;
+#pragma link C++ class AliAnalysisTaskJetResponseV2;
 #pragma link C++ class AliAnalysisTaskPhiCorrelations+;
 #pragma link C++ class AliEventPool+;
 #pragma link C++ class AliEventPoolManager+;
index 86a5ef7..557162a 100644 (file)
@@ -21,6 +21,7 @@ AliAnalysisTaskFastEmbedding* AddTaskFastEmbedding(){
     //SetToyTrackRanges(
     Double_t minPt = 20.;   Double_t maxPt = 200.;
     Double_t minEta = -0.5; Double_t maxEta = 0.5;
+    //Double_t minEta = -0.4; Double_t maxEta = 0.4;  // for LHC10h pass1
     Double_t minPhi = 0.;   Double_t maxPhi = 2*TMath::Pi();
     //fToyDistributionTrackPt: 0 = uniform distribution
     //                         else = exponential / power law (not implemented yet)
@@ -35,7 +36,8 @@ AliAnalysisTaskFastEmbedding* AddTaskFastEmbedding(){
 
     // ## set jet pT range for event selection ##
     // SetEvtSelJetPtRange(Float_t minPt, Float_t maxPt)
-    task->SetEvtSelJetPtRange(20.,-1.);
+    task->SetEvtSelJetPtRange(40.,-1.);
+    //task->SetEvtSelJetEtaRange(-0.4, 0.4); // smaller eta window for LHC10h pass1
 
     mgr->AddTask(task);
 
index 3a1ba8f..6bd14c0 100644 (file)
@@ -1,4 +1,4 @@
-AliAnalysisTaskJetResponse* AddTaskJetResponse(Char_t* type = "clusters", Char_t* jf = "FASTKT", Float_t radius = 0.4, UInt_t filterMask = 256 , Float_t ptTrackMin = 0.15, Int_t iBack = 1, Int_t eventClassMin = 1, Int_t eventClassMax = 4){
+AliAnalysisTaskJetResponse* AddTaskJetResponse(Char_t* type = "clusters", Char_t* jf = "FASTKT", Float_t radius = 0.4, UInt_t filterMask = 256 , Float_t ptTrackMin = 0.15, Int_t iBack = 1, Int_t eventClassMin = 1, Int_t eventClassMax = 4, Int_t reactionPlaneBin = -1){
 
   Printf("adding task jet response\n");
 
@@ -46,9 +46,23 @@ AliAnalysisTaskJetResponse* AddTaskJetResponse(Char_t* type = "clusters", Char_t
     //task->SetJetDeltaEta(0.2);
     //task->SetJetDeltaPhi(0.2);
 
+    task->SetReactionPlaneBin(reactionPlaneBin);
+   
+    task->SetJetPtMin(0.);   // min jet pt is implicit a cut on delta pT!!
+    //task->SetJetEtaMin(-.4); // reduced tracking acceptance in
+    //task->SetJetEtaMax(.4);  // LHC10h pass1
+
+    //task->SetNMatchJets(1); // leading jets only
+    task->SetEventClassMode(1); //0: centrality (default), 1: multiplicity 
+
 
     mgr->AddTask(task);
 
+
+    if(reactionPlaneBin>=0){
+        suffix2 += Form("_rp%d", reactionPlaneBin);
+    }
+
     AliAnalysisDataContainer *coutputJetResponse = mgr->CreateContainer(
          Form("jetresponse_%s%s", type,suffix2.Data()), TList::Class(), AliAnalysisManager::kOutputContainer,
          Form("%s:PWG4_JetResponse_%s%s", AliAnalysisManager::GetCommonFileName(), type, suffix2.Data()));
diff --git a/PWG4/macros/AddTaskJetResponseV2.C b/PWG4/macros/AddTaskJetResponseV2.C
new file mode 100644 (file)
index 0000000..ea4bdb7
--- /dev/null
@@ -0,0 +1,74 @@
+AliAnalysisTaskJetResponseV2* AddTaskJetResponseV2(Char_t* type = "clusters", Char_t* jf = "FASTKT", Float_t radius = 0.4, UInt_t filterMask = 256 , Float_t ptTrackMin = 0.15, Int_t iBack = 1, Int_t eventClassMin = 1, Int_t eventClassMax = 4, Int_t reactionPlaneBin = -1){
+
+  Printf("adding task jet response\n");
+
+    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+    if(!mgr){
+       ::Error("AddTaskJetResponseV2", "No analysis manager to connect to.");
+       return NULL;
+    }
+    if(!mgr->GetInputEventHandler()){
+        ::Error("AddTaskJetResponseV2", "This task requires an input event handler.");
+       return NULL;
+    }
+
+    TString suffix = "";
+    suffix += Form("_%s", jf);
+    suffix += Form("%02d", (int)((radius+0.01)*10.));
+    suffix += Form("_B0");                                // no background subtraction for extra-only
+    suffix += Form("_Filter%05d", filterMask);
+    suffix += Form("_Cut%05d", (int)((1000.*ptTrackMin)));
+    if(type=="clusters") suffix += Form("_Skip00");
+
+    TString suffix2 = "";
+    suffix2 += Form("_%s", jf);
+    suffix2 += Form("%02d", (int)((radius+0.01)*10.));
+    suffix2 += Form("_B%d", iBack);
+    suffix2 += Form("_Filter%05d", filterMask);
+    suffix2 += Form("_Cut%05d", (int)((1000.*ptTrackMin)));
+    if(type=="clusters") suffix2 += Form("_Skip00");
+
+    AliAnalysisTaskJetResponseV2 *task = new AliAnalysisTaskJetResponseV2(Form("JetResponseV2%s", suffix2.Data()));
+
+    TString branch1 = Form("%sAODextraonly%s",type, suffix.Data());
+    Printf("Branch1: %s",branch1.Data());
+
+    TString branch2 = Form("%sAODextra%s",type, suffix2.Data());
+    Printf("Branch2: %s",branch2.Data());
+    task->SetBranchNames(branch1,branch2);
+    task->SetOfflineTrgMask(AliVEvent::kMB);
+
+    task->SetEvtClassMin(eventClassMin);
+    task->SetEvtClassMax(eventClassMax);
+    task->SetCentMin(0.);
+    task->SetCentMax(100.);
+    //task->SetJetDeltaEta(0.2);
+    //task->SetJetDeltaPhi(0.2);
+
+    task->SetReactionPlaneBin(reactionPlaneBin);
+   
+    task->SetJetPtMin(0.);   // min jet pt is implicit a cut on delta pT!!
+    //task->SetJetEtaMin(-.4); // reduced tracking acceptance in
+    //task->SetJetEtaMax(.4);  // LHC10h pass1
+
+    //task->SetNMatchJets(1); // leading jets only
+
+
+    mgr->AddTask(task);
+
+
+    if(reactionPlaneBin>=0){
+        suffix2 += Form("_rp%d", reactionPlaneBin);
+    }
+
+    AliAnalysisDataContainer *coutputJetResponseV2 = mgr->CreateContainer(
+         Form("jetresponseV2_%s%s", type,suffix2.Data()), TList::Class(), AliAnalysisManager::kOutputContainer,
+         Form("%s:PWG4_JetResponseV2_%s%s", AliAnalysisManager::GetCommonFileName(), type, suffix2.Data()));
+
+    mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer());
+    mgr->ConnectOutput(task, 0, mgr->GetCommonOutputContainer());
+    mgr->ConnectOutput(task, 1, coutputJetResponseV2);
+
+    return task;
+}