ROOT logo
//
// Do subtraction for jet shapes using derivatives arXiv:1211:2811
//
// Author: M.Verweij

#include <TClonesArray.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TH3F.h>
#include <THnSparse.h>
#include <TF1.h>
#include <TList.h>
#include <TLorentzVector.h>
#include <TProfile.h>
#include <TChain.h>
#include <TSystem.h>
#include <TFile.h>
#include <TKey.h>
#include <TTree.h>

#include "AliVCluster.h"
#include "AliVTrack.h"
#include "AliEmcalJet.h"
#include "AliRhoParameter.h"
#include "AliLog.h"
#include "AliEmcalParticle.h"
#include "AliMCEvent.h"
#include "AliAODEvent.h"
#include "AliGenPythiaEventHeader.h"
#include "AliAODMCHeader.h"
#include "AliAnalysisManager.h"
#include "AliJetContainer.h"
#include "AliParticleContainer.h"

#include "AliAnalysisTaskJetShapeDeriv.h"

ClassImp(AliAnalysisTaskJetShapeDeriv)

//________________________________________________________________________
AliAnalysisTaskJetShapeDeriv::AliAnalysisTaskJetShapeDeriv() : 
  AliAnalysisTaskEmcalJet("AliAnalysisTaskJetShapeDeriv", kTRUE),
  fContainerBase(0),
  fContainerNoEmb(1),
  fMinFractionShared(0),
  fSingleTrackEmb(kFALSE),
  fCreateTree(kFALSE),
  fJetMassVarType(kMass),
  fUseSumw2(0),
  fTreeJetBkg(),
  fJet1Vec(new TLorentzVector()),
  fJet2Vec(new TLorentzVector()),
  fArea(0),
  fAreaPhi(0),
  fAreaEta(0),
  fRho(0),
  fRhoM(0),
  fNConst(0),
  fM1st(0),
  fM2nd(0),
  fDeriv1st(0),
  fDeriv2nd(0),
  fMatch(0),
  fh2MSubMatch(0x0),
  fh2MSubPtRawAll(0x0),
  fh3MSubPtRawDRMatch(0x0),
  fh3MSubPtTrueDR(0x0),
  fh3MTruePtTrueDR(0x0),
  fh3PtTrueDeltaMDR(0x0),
  fh3PtTrueDeltaMRelDR(0x0),
  fhnMassResponse(0x0),
  fh2PtTrueSubFacV1(0x0),
  fh2PtRawSubFacV1(0x0),
  fh2PtCorrSubFacV1(0x0),
  fh2NConstSubFacV1(0x0),
  fh2PtTrueSubFacV2(0x0),
  fh2PtRawSubFacV2(0x0),
  fh2PtCorrSubFacV2(0x0),
  fh2NConstSubFacV2(0x0)
{
  // Default constructor.

  fh2MSubMatch         = new TH2F*[fNcentBins];
  fh2MSubPtRawAll      = new TH2F*[fNcentBins];
  fh3MSubPtRawDRMatch  = new TH3F*[fNcentBins];
  fh3MSubPtTrueDR      = new TH3F*[fNcentBins];
  fh3MTruePtTrueDR     = new TH3F*[fNcentBins];
  fh3PtTrueDeltaMDR    = new TH3F*[fNcentBins];
  fh3PtTrueDeltaMRelDR = new TH3F*[fNcentBins];
  fhnMassResponse      = new THnSparse*[fNcentBins];
  fh2PtTrueSubFacV1    = new TH2F*[fNcentBins];
  fh2PtRawSubFacV1     = new TH2F*[fNcentBins];
  fh2PtCorrSubFacV1    = new TH2F*[fNcentBins];
  fh2NConstSubFacV1    = new TH2F*[fNcentBins];
  fh2PtTrueSubFacV2    = new TH2F*[fNcentBins];
  fh2PtRawSubFacV2     = new TH2F*[fNcentBins];
  fh2PtCorrSubFacV2    = new TH2F*[fNcentBins];
  fh2NConstSubFacV2    = new TH2F*[fNcentBins];

  for (Int_t i = 0; i < fNcentBins; i++) {
    fh2MSubMatch[i]         = 0;
    fh2MSubPtRawAll[i]      = 0;
    fh3MSubPtRawDRMatch[i]  = 0;
    fh3MSubPtTrueDR[i]      = 0;
    fh3MTruePtTrueDR[i]     = 0;
    fh3PtTrueDeltaMDR[i]    = 0;
    fh3PtTrueDeltaMRelDR[i] = 0;
    fhnMassResponse[i]      = 0;
    fh2PtTrueSubFacV1[i]    = 0;
    fh2PtRawSubFacV1[i]     = 0;
    fh2PtCorrSubFacV1[i]    = 0;
    fh2NConstSubFacV1[i]    = 0;
    fh2PtTrueSubFacV2[i]    = 0;
    fh2PtRawSubFacV2[i]     = 0;
    fh2PtCorrSubFacV2[i]    = 0;
    fh2NConstSubFacV2[i]    = 0;
  }

  SetMakeGeneralHistograms(kTRUE);
  if(fCreateTree) DefineOutput(2, TTree::Class());
}

//________________________________________________________________________
AliAnalysisTaskJetShapeDeriv::AliAnalysisTaskJetShapeDeriv(const char *name) : 
  AliAnalysisTaskEmcalJet(name, kTRUE),  
  fContainerBase(0),
  fContainerNoEmb(1),
  fMinFractionShared(0),
  fSingleTrackEmb(kFALSE),
  fCreateTree(kFALSE),
  fJetMassVarType(kMass),
  fUseSumw2(0),
  fTreeJetBkg(0),
  fJet1Vec(new TLorentzVector()),
  fJet2Vec(new TLorentzVector()),
  fArea(0),
  fAreaPhi(0),
  fAreaEta(0),
  fRho(0),
  fRhoM(0),
  fNConst(0),
  fM1st(0),
  fM2nd(0),
  fDeriv1st(0),
  fDeriv2nd(0),
  fMatch(0),
  fh2MSubMatch(0x0),
  fh2MSubPtRawAll(0x0),
  fh3MSubPtRawDRMatch(0x0),
  fh3MSubPtTrueDR(0x0),
  fh3MTruePtTrueDR(0x0),
  fh3PtTrueDeltaMDR(0x0),
  fh3PtTrueDeltaMRelDR(0x0),
  fhnMassResponse(0x0),
  fh2PtTrueSubFacV1(0x0),
  fh2PtRawSubFacV1(0x0),
  fh2PtCorrSubFacV1(0x0),
  fh2NConstSubFacV1(0x0),
  fh2PtTrueSubFacV2(0x0),
  fh2PtRawSubFacV2(0x0),
  fh2PtCorrSubFacV2(0x0),
  fh2NConstSubFacV2(0x0)
{
  // Standard constructor.

  fh2MSubMatch         = new TH2F*[fNcentBins];
  fh2MSubPtRawAll      = new TH2F*[fNcentBins];
  fh3MSubPtRawDRMatch  = new TH3F*[fNcentBins];
  fh3MSubPtTrueDR      = new TH3F*[fNcentBins];
  fh3MTruePtTrueDR     = new TH3F*[fNcentBins];
  fh3PtTrueDeltaMDR    = new TH3F*[fNcentBins];
  fh3PtTrueDeltaMRelDR = new TH3F*[fNcentBins];
  fhnMassResponse      = new THnSparse*[fNcentBins];
  fh2PtTrueSubFacV1    = new TH2F*[fNcentBins];
  fh2PtRawSubFacV1     = new TH2F*[fNcentBins];
  fh2PtCorrSubFacV1    = new TH2F*[fNcentBins];
  fh2NConstSubFacV1    = new TH2F*[fNcentBins];
  fh2PtTrueSubFacV2    = new TH2F*[fNcentBins];
  fh2PtRawSubFacV2     = new TH2F*[fNcentBins];
  fh2PtCorrSubFacV2    = new TH2F*[fNcentBins];
  fh2NConstSubFacV2    = new TH2F*[fNcentBins];

  for (Int_t i = 0; i < fNcentBins; i++) {
    fh2MSubMatch[i]         = 0;
    fh2MSubPtRawAll[i]      = 0;
    fh3MSubPtRawDRMatch[i]  = 0;
    fh3MSubPtTrueDR[i]      = 0;
    fh3MTruePtTrueDR[i]     = 0;
    fh3PtTrueDeltaMDR[i]    = 0;
    fh3PtTrueDeltaMRelDR[i] = 0;
    fhnMassResponse[i]      = 0;
    fh2PtTrueSubFacV1[i]    = 0;
    fh2PtRawSubFacV1[i]     = 0;
    fh2PtCorrSubFacV1[i]    = 0;
    fh2NConstSubFacV1[i]    = 0;
    fh2PtTrueSubFacV2[i]    = 0;
    fh2PtRawSubFacV2[i]     = 0;
    fh2PtCorrSubFacV2[i]    = 0;
    fh2NConstSubFacV2[i]    = 0;
  }

  SetMakeGeneralHistograms(kTRUE);
  if(fCreateTree) DefineOutput(2, TTree::Class());
}

//________________________________________________________________________
AliAnalysisTaskJetShapeDeriv::~AliAnalysisTaskJetShapeDeriv()
{
  // Destructor.
}

//________________________________________________________________________
void AliAnalysisTaskJetShapeDeriv::UserCreateOutputObjects()
{
  // Create user output.

  AliAnalysisTaskEmcalJet::UserCreateOutputObjects();

  Bool_t oldStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE);

  const Int_t nBinsPt  = 200;
  const Double_t minPt = -50.;
  const Double_t maxPt = 150.;

  Int_t nBinsM  = 100;
  Double_t minM = -20.;
  Double_t maxM = 80.;
  if(fJetMassVarType==kRatMPt) {
    nBinsM = 100;
    minM   = -0.2;
    maxM   = 0.8;
  }

  Int_t nBinsDM  = 100;
  Double_t minDM = -25.;
  Double_t maxDM = 25.;
  if(fJetMassVarType==kRatMPt) {
    nBinsDM = 100;
    minDM   = -0.5;
    maxDM   = 0.5;
  }

  const Int_t nBinsDRToLJ  = 20; //distance to leading jet in Pb-Pb only event
  const Double_t minDRToLJ = 0.;
  const Double_t maxDRToLJ = 1.;

  const Int_t nBinsV1  = 60;
  const Double_t minV1 = -60.;
  const Double_t maxV1 = 0.;

  const Int_t nBinsV2  = 60;
  const Double_t minV2 = -30.;
  const Double_t maxV2 = 0.;

  //Binning for THnSparse
  const Int_t nBinsSparse0 = 5;
  const Int_t nBins0[nBinsSparse0] = {nBinsM,nBinsM,nBinsPt,nBinsPt,nBinsDRToLJ};
  const Double_t xmin0[nBinsSparse0]  = { minM, minM, minPt, minPt, minDRToLJ};
  const Double_t xmax0[nBinsSparse0]  = { maxM, maxM, maxPt, maxPt, maxDRToLJ};

  TString histName = "";
  TString histTitle = "";
  TString varName = "#it{M}_{jet}";
  if(fJetMassVarType==kRatMPt) varName = "#it{M}_{jet}/#it{p}_{T,jet}";

  for (Int_t i = 0; i < fNcentBins; i++) {
    histName = Form("fh2MSubMatch_%d",i);
    histTitle = Form("fh2MSubMatch_%d;%s;match",i,varName.Data());
    fh2MSubMatch[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsM,minM,maxM,2,-0.5,1.5);
    fOutput->Add(fh2MSubMatch[i]);

    histName = Form("fh2MSubPtRawAll_%d",i);
    histTitle = Form("fh2MSubPtRawAll_%d;%s;#it{p}_{T}",i,varName.Data());
    fh2MSubPtRawAll[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsM,minM,maxM,nBinsPt,minPt,maxPt);
    fOutput->Add(fh2MSubPtRawAll[i]);

    histName = Form("fh3MSubPtRawDRMatch_%d",i);
    histTitle = Form("fh3MSubPtRawDRMatch_%d;%s;#it{p}_{T}",i,varName.Data());
    fh3MSubPtRawDRMatch[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsM,minM,maxM,nBinsPt,minPt,maxPt,nBinsDRToLJ,minDRToLJ,maxDRToLJ);
    fOutput->Add(fh3MSubPtRawDRMatch[i]);

    histName = Form("fh3MSubPtTrueDR_%d",i);
    histTitle = Form("fh3MSubPtTrueDR_%d;%s;#it{p}_{T}",i,varName.Data());
    fh3MSubPtTrueDR[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsM,minM,maxM,nBinsPt,minPt,maxPt,nBinsDRToLJ,minDRToLJ,maxDRToLJ);
    fOutput->Add(fh3MSubPtTrueDR[i]);

    histName = Form("fh3MTruePtTrueDR_%d",i);
    histTitle = Form("fh3MTruePtTrueDR_%d;%s;#it{p}_{T}",i,varName.Data());
    fh3MTruePtTrueDR[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsM,minM,maxM,nBinsPt,minPt,maxPt,nBinsDRToLJ,minDRToLJ,maxDRToLJ);
    fOutput->Add(fh3MTruePtTrueDR[i]);

    histName = Form("fh3PtTrueDeltaMDR_%d",i);
    histTitle = Form("fh3PtTrueDeltaMDR_%d;#it{p}_{T,true};#Delta %s",i,varName.Data());
    fh3PtTrueDeltaMDR[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsDM,minDM,maxDM,nBinsDRToLJ,minDRToLJ,maxDRToLJ);
    fOutput->Add(fh3PtTrueDeltaMDR[i]);

    histName = Form("fh3PtTrueDeltaMRelDR_%d",i);
    histTitle = Form("fh3PtTrueDeltaMRelDR_%d;#it{p}_{T,true};Rel #Delta %s",i,varName.Data());
    fh3PtTrueDeltaMRelDR[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,400,-1.,3.,nBinsDRToLJ,minDRToLJ,maxDRToLJ);
    fOutput->Add(fh3PtTrueDeltaMRelDR[i]);

    histName = Form("fhnMassResponse_%d",i);
    histTitle = Form("fhnMassResponse_%d;%s sub;%s true;#it{p}_{T,sub};#it{p}_{T,true};#Delta R_{LJ}",i,varName.Data(),varName.Data());
    fhnMassResponse[i] = new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
    fOutput->Add(fhnMassResponse[i]);

    //derivative histograms
    histName = Form("fh2PtTrueSubFacV1_%d",i);
    histTitle = Form("fh2PtTrueSubFacV1_%d;#it{p}_{T,true};-(#rho+#rho_{m})V_{1}",i);
    fh2PtTrueSubFacV1[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsV1,minV1,maxV1);

    histName = Form("fh2PtRawSubFacV1_%d",i);
    histTitle = Form("fh2PtRawSubFacV1_%d;#it{p}_{T,raw};-(#rho+#rho_{m})V_{1}",i);
    fh2PtRawSubFacV1[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsV1,minV1,maxV1);

    histName = Form("fh2PtCorrSubFacV1_%d",i);
    histTitle = Form("fh2PtCorrSubFacV1_%d;#it{p}_{T,corr};-(#rho+#rho_{m})V_{1}",i);
    fh2PtCorrSubFacV1[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsV1,minV1,maxV1);

    histName = Form("fh2NConstSubFacV1_%d",i);
    histTitle = Form("fh2NConstSubFacV1_%d;#it{N}_{const};-(#rho+#rho_{m})V_{1}",i);
    fh2NConstSubFacV1[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,100,0.,200.);

    histName = Form("fh2PtTrueSubFacV2_%d",i);
    histTitle = Form("fh2PtTrueSubFacV2_%d;#it{p}_{T,true};0.5(#rho+#rho_{m})^{2}V_{2}",i);
    fh2PtTrueSubFacV2[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsV2,minV2,maxV2);

    histName = Form("fh2PtRawSubFacV2_%d",i);
    histTitle = Form("fh2PtRawSubFacV2_%d;#it{p}_{T,raw};0.5(#rho+#rho_{m})^{2}V_{2}",i);
    fh2PtRawSubFacV2[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsV2,minV2,maxV2);

    histName = Form("fh2PtCorrSubFacV2_%d",i);
    histTitle = Form("fh2PtCorrSubFacV2_%d;#it{p}_{T,corr};0.5(#rho+#rho_{m})^{2}V_{2}",i);
    fh2PtCorrSubFacV2[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsV2,minV2,maxV2);

    histName = Form("fh2NConstSubFacV2_%d",i);
    histTitle = Form("fh2NConstSubFacV2_%d;#it{N}_{const};0.5(#rho+#rho_{m})^{2}V_{2}",i);
    fh2NConstSubFacV2[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,100,0.,200.);

  }

  if(fUseSumw2) {
    // =========== Switch on Sumw2 for all histos ===========
    for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
      TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
      if (h1){
	h1->Sumw2();
	continue;
      }
      THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
      if(hn)hn->Sumw2();
    }
  }

  TH1::AddDirectory(oldStatus);

  // Create a tree.
  if(fCreateTree) {
    fTreeJetBkg = new TTree("fTreeJetBkg", "fTreeJetBkg");
    fTreeJetBkg->Branch("fJet1Vec","TLorentzVector",&fJet1Vec);
    fTreeJetBkg->Branch("fJet2Vec","TLorentzVector",&fJet2Vec);
    fTreeJetBkg->Branch("fArea",&fArea,"fArea/F");
    fTreeJetBkg->Branch("fAreaPhi",&fAreaPhi,"fAreaPhi/F");
    fTreeJetBkg->Branch("fAreaEta",&fAreaEta,"fAreaEta/F");
    fTreeJetBkg->Branch("fRho",&fRho,"fRho/F");
    fTreeJetBkg->Branch("fRhoM",&fRhoM,"fRhoM/F");
    fTreeJetBkg->Branch("fNConst",&fNConst,"fNConst/I");
    fTreeJetBkg->Branch("fM1st",&fM1st,"fM1st/F");
    fTreeJetBkg->Branch("fM2nd",&fM2nd,"fM2nd/F");
    fTreeJetBkg->Branch("fDeriv1st",&fDeriv1st,"fDeriv1st/F");
    fTreeJetBkg->Branch("fDeriv2nd",&fDeriv2nd,"fDeriv2nd/F");
    fTreeJetBkg->Branch("fMatch",&fMatch,"fMatch/I");
  }
  
  PostData(1, fOutput); // Post data for ALL output slots > 0 here.
  if(fCreateTree) PostData(2, fTreeJetBkg);
}

//________________________________________________________________________
Bool_t AliAnalysisTaskJetShapeDeriv::Run()
{
  // Run analysis code here, if needed. It will be executed before FillHistograms().

  return kTRUE;
}

//________________________________________________________________________
Bool_t AliAnalysisTaskJetShapeDeriv::FillHistograms()
{
  // Fill histograms.

  AliEmcalJet* jet1  = NULL; //AA jet
  AliEmcalJet *jet2  = NULL; //Embedded Pythia jet
  //  AliEmcalJet *jet1T = NULL; //tagged AA jet
  //  AliEmcalJet *jet2T = NULL; //tagged Pythia jet
  AliJetContainer *jetCont = GetJetContainer(fContainerBase);
  fRho  = (Float_t)jetCont->GetRhoVal();
  fRhoM = (Float_t)jetCont->GetRhoMassVal();

  //Get leading jet in Pb-Pb event without embedded objects
  AliJetContainer *jetContNoEmb = GetJetContainer(fContainerNoEmb);
  AliEmcalJet *jetL = NULL;
  if(jetContNoEmb) jetL = jetContNoEmb->GetLeadingJet("rho");

  if(jetCont) {
    jetCont->ResetCurrentID();
    while((jet1 = jetCont->GetNextAcceptJet())) {
      jet2 = NULL;

      Double_t mjet1 = jet1->GetSecondOrderSubtracted();
      Double_t ptjet1 = jet1->Pt()-jetCont->GetRhoVal()*jet1->Area();
      Double_t var = mjet1;
      if(fJetMassVarType==kRatMPt) {
	if(ptjet1>0. || ptjet1<0.) var = mjet1/ptjet1;
	else var = -999.;
      }

      //Fill histograms for all AA jets
      fh2MSubPtRawAll[fCentBin]->Fill(var,ptjet1);
      fh2PtRawSubFacV1[fCentBin]->Fill(jet1->Pt(),-1.*(fRho+fRhoM)*jet1->GetFirstDerivative());
      fh2PtCorrSubFacV1[fCentBin]->Fill(jet1->Pt()-fRho*jet1->Area(),-1.*(fRho+fRhoM)*jet1->GetFirstDerivative());
      fh2NConstSubFacV1[fCentBin]->Fill(jet1->GetNumberOfTracks(),-1.*(fRho+fRhoM)*jet1->GetFirstDerivative());
      fh2PtRawSubFacV2[fCentBin]->Fill(jet1->Pt(),0.5*(fRho+fRhoM)*(fRho+fRhoM)*jet1->GetSecondDerivative());
      fh2PtCorrSubFacV2[fCentBin]->Fill(jet1->Pt()-fRho*jet1->Area(),0.5*(fRho+fRhoM)*(fRho+fRhoM)*jet1->GetSecondDerivative());
      fh2NConstSubFacV2[fCentBin]->Fill(jet1->GetNumberOfTracks(),0.5*(fRho+fRhoM)*(fRho+fRhoM)*jet1->GetSecondDerivative());

      Double_t fraction = 0.;
      fMatch = 0;
      fJet2Vec->SetPtEtaPhiM(0.,0.,0.,0.);
      if(fSingleTrackEmb) {
	AliVParticle *vp = GetEmbeddedConstituent(jet1);
	if(vp) {
	  fJet2Vec->SetPxPyPzE(vp->Px(),vp->Py(),vp->Pz(),vp->E());
	  fMatch = 1;
	}
      } else {
	jet2 = jet1->ClosestJet();
	fraction = jetCont->GetFractionSharedPt(jet1);
	fMatch = 1;
	if(fMinFractionShared>0.) {
	  if(fraction>fMinFractionShared) {
	    fJet2Vec->SetPxPyPzE(jet2->Px(),jet2->Py(),jet2->Pz(),jet2->E());
	    fMatch = 1;
	  } else
	    fMatch = 0;
	}
      }

      //      if(fMatch==1 && jet2->GetTagStatus()>0) jet2T = jet2->GetTaggedJet();

      //Fill histograms for matched jets
      fh2MSubMatch[fCentBin]->Fill(var,fMatch);
      if(fMatch==1) {
	Double_t drToLJ = -1.;
	if(jetL) drToLJ = jet1->DeltaR(jetL);
	fh3MSubPtRawDRMatch[fCentBin]->Fill(var,ptjet1,drToLJ);
	if(jet2) {
	  Double_t var2 = jet2->M();
	  if(fJetMassVarType==kRatMPt) {
	    if(jet2->Pt()>0. || jet2->Pt()<0.) var2 = jet2->M()/jet2->Pt();
	  }
	  fh3MSubPtTrueDR[fCentBin]->Fill(var,jet2->Pt(),drToLJ);
	  fh3MTruePtTrueDR[fCentBin]->Fill(var2,jet2->Pt(),drToLJ);
	  fh3PtTrueDeltaMDR[fCentBin]->Fill(jet2->Pt(),var-var2,drToLJ);
	  if(jet2->M()>0.) fh3PtTrueDeltaMRelDR[fCentBin]->Fill(jet2->Pt(),(var-var2)/var2,drToLJ);
	  Double_t varsp[5] = {var,var2,ptjet1,jet2->Pt(),drToLJ};
	  fhnMassResponse[fCentBin]->Fill(varsp);
	}
      }

      if(fCreateTree) {      
	fJet1Vec->SetPxPyPzE(jet1->Px(),jet1->Py(),jet1->Pz(),jet1->E());
	fArea = (Float_t)jet1->Area();
	fAreaPhi = (Float_t)jet1->AreaPhi();
	fAreaEta = (Float_t)jet1->AreaEta();
	fNConst = (Int_t)jet1->GetNumberOfTracks();
	fM1st   = (Float_t)jet1->GetFirstOrderSubtracted();
	fM2nd   = (Float_t)jet1->GetSecondOrderSubtracted();
	fDeriv1st = (Float_t)jet1->GetFirstDerivative();
	fDeriv2nd = (Float_t)jet1->GetSecondDerivative();
	fTreeJetBkg->Fill();
      }
    }
  }
  return kTRUE;
}

//________________________________________________________________________
AliVParticle* AliAnalysisTaskJetShapeDeriv::GetEmbeddedConstituent(AliEmcalJet *jet) {

  AliJetContainer *jetCont = GetJetContainer(fContainerBase);
  AliVParticle *vp = 0x0;
  AliVParticle *vpe = 0x0; //embedded particle
  Int_t nc = 0;
  for(Int_t i=0; i<jet->GetNumberOfTracks(); i++) {
    vp = static_cast<AliVParticle*>(jet->TrackAt(i, jetCont->GetParticleContainer()->GetArray())); //check if fTracks is the correct track branch
    if (vp->TestBits(TObject::kBitMask) != (Int_t)(TObject::kBitMask) ) continue;
    if(!vpe) vpe = vp;
    else if(vp->Pt()>vpe->Pt()) vpe = vp;
    nc++;
  }
  AliDebug(11,Form("Found %d embedded particles",nc));
  return vpe;
}


//________________________________________________________________________
Bool_t AliAnalysisTaskJetShapeDeriv::RetrieveEventObjects() {
  //
  // retrieve event objects
  //

  if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
    return kFALSE;

  AliJetContainer *jetCont = GetJetContainer(fContainerBase);
  jetCont->LoadRhoMass(InputEvent());

  return kTRUE;
}

//_______________________________________________________________________
void AliAnalysisTaskJetShapeDeriv::Terminate(Option_t *) 
{
  // Called once at the end of the analysis.
}

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