]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetMassStructure.cxx
Split: removed dirs now in AliPhysics
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskEmcalJetMassStructure.cxx
diff --git a/PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetMassStructure.cxx b/PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetMassStructure.cxx
deleted file mode 100644 (file)
index 4511218..0000000
+++ /dev/null
@@ -1,453 +0,0 @@
-//
-// Jet mass structure analysis task.
-//
-// Author: M.Verweij
-
-#include <TClonesArray.h>
-#include <TH1F.h>
-#include <TH2F.h>
-#include <TH3F.h>
-#include <TProfile2D.h>
-#include <THnSparse.h>
-#include <TList.h>
-#include <TLorentzVector.h>
-#include <TProfile.h>
-#include <TChain.h>
-#include <TSystem.h>
-#include <TFile.h>
-#include <TKey.h>
-#include <TMath.h>
-#include <TRandom3.h>
-
-#include "AliVCluster.h"
-#include "AliVTrack.h"
-#include "AliEmcalJet.h"
-#include "AliRhoParameter.h"
-#include "AliLog.h"
-#include "AliEmcalParticle.h"
-#include "AliMCEvent.h"
-#include "AliGenPythiaEventHeader.h"
-#include "AliAODMCHeader.h"
-#include "AliMCEvent.h"
-#include "AliAnalysisManager.h"
-#include "AliParticleContainer.h"
-#include "AliJetContainer.h"
-#include "AliEmcalJetByJetCorrection.h"
-
-#include "AliAODEvent.h"
-
-#include "AliAnalysisTaskEmcalJetMassStructure.h"
-
-ClassImp(AliAnalysisTaskEmcalJetMassStructure)
-
-//________________________________________________________________________
-AliAnalysisTaskEmcalJetMassStructure::AliAnalysisTaskEmcalJetMassStructure() : 
-  AliAnalysisTaskEmcalJet("AliAnalysisTaskEmcalJetMassStructure", kTRUE),
-  fContainerBase(0),
-  fMinFractionShared(0),
-  fJetMassType(kRaw),
-  fRandom(0),
-  fEfficiencyFixed(1.),
-  fCorrType(kMeanPtR),
-  fEJetByJetCorr(0),
-  fh3PtDRMass(0),
-  fh3PtDRRho(0),
-  fh3PtDRMassCorr(0),
-  fh3PtDRRhoCorr(0),
-  fh2PtMass(0),
-  fh2PtMassCorr(0),
-  fhnMassResponse(0),
-  fhnMassResponseCorr(0),
-  fhnDeltaMass(0),     
-  fhnDeltaMassCorr(0), 
-  fSwitchResolutionhn(1),
-  fh3JetPtDRTrackPt(0),
-  fpUsedEfficiency(0)
-{
-  // Default constructor.
-
-  fh3PtDRMass                       = new TH3F*[fNcentBins];
-  fh3PtDRRho                        = new TH3F*[fNcentBins];
-  fh3PtDRMassCorr                   = new TH3F*[fNcentBins];
-  fh3PtDRRhoCorr                    = new TH3F*[fNcentBins];
-  fh2PtMass                         = new TH2F*[fNcentBins];
-  fh2PtMassCorr                     = new TH2F*[fNcentBins];
-  fh3JetPtDRTrackPt                 = new TH3F*[fNcentBins];
-
-  for (Int_t i = 0; i < fNcentBins; i++) {
-    fh3PtDRMass[i]       = 0;
-    fh3PtDRRho[i]        = 0;
-    fh3PtDRMassCorr[i]   = 0;
-    fh3PtDRRhoCorr[i]    = 0;
-    fh2PtMass[i]         = 0;
-    fh2PtMassCorr[i]     = 0;
-    fh3JetPtDRTrackPt[i] = 0;
-  }
-
-  SetMakeGeneralHistograms(kTRUE);
-}
-
-//________________________________________________________________________
-AliAnalysisTaskEmcalJetMassStructure::AliAnalysisTaskEmcalJetMassStructure(const char *name) : 
-  AliAnalysisTaskEmcalJet(name, kTRUE),  
-  fContainerBase(0),
-  fMinFractionShared(0),
-  fJetMassType(kRaw),
-  fRandom(0),
-  fEfficiencyFixed(1.),
-  fCorrType(kMeanPtR),
-  fEJetByJetCorr(0),
-  fh3PtDRMass(0),
-  fh3PtDRRho(0),
-  fh3PtDRMassCorr(0),
-  fh3PtDRRhoCorr(0),
-  fh2PtMass(0),
-  fh2PtMassCorr(0),
-  fhnMassResponse(0),
-  fhnMassResponseCorr(0),
-  fhnDeltaMass(0),     
-  fhnDeltaMassCorr(0), 
-  fSwitchResolutionhn(1),
-  fh3JetPtDRTrackPt(0),
-  fpUsedEfficiency(0)
-{
-  // Standard constructor.
-
-  fh3PtDRMass                       = new TH3F*[fNcentBins];
-  fh3PtDRRho                        = new TH3F*[fNcentBins];
-  fh3PtDRMassCorr                   = new TH3F*[fNcentBins];
-  fh3PtDRRhoCorr                    = new TH3F*[fNcentBins];
-  fh2PtMass                         = new TH2F*[fNcentBins];
-  fh2PtMassCorr                     = new TH2F*[fNcentBins];
-  fh3JetPtDRTrackPt                 = new TH3F*[fNcentBins];
-
-  for (Int_t i = 0; i < fNcentBins; i++) {
-    fh3PtDRMass[i]       = 0;
-    fh3PtDRRho[i]        = 0; 
-    fh3PtDRMassCorr[i]   = 0;
-    fh3PtDRRhoCorr[i]    = 0;
-    fh2PtMass[i]         = 0;
-    fh2PtMassCorr[i]     = 0;
-    fh3JetPtDRTrackPt[i] = 0;
-  }
-  SetMakeGeneralHistograms(kTRUE);
-}
-
-//________________________________________________________________________
-AliAnalysisTaskEmcalJetMassStructure::~AliAnalysisTaskEmcalJetMassStructure()
-{
-  // Destructor.
-  delete fRandom;
-}
-
-//________________________________________________________________________
-void AliAnalysisTaskEmcalJetMassStructure::UserCreateOutputObjects()
-{
-  // Create user output.
-
-  AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
-
-  if(!fRandom) fRandom = new TRandom3(0);
-
-  if(fCorrType==kMeanPtR && fEJetByJetCorr) fEJetByJetCorr->Init();
-
-  Bool_t oldStatus = TH1::AddDirectoryStatus();
-  TH1::AddDirectory(kFALSE);
-
-  const Int_t nBinsPt  = 200;
-  const Double_t minPt = -50.;
-  const Double_t maxPt = 150.;
-  Double_t *binsPt = new Double_t[nBinsPt+1];
-  for(Int_t i=0; i<=nBinsPt; i++) binsPt[i]=(Double_t)minPt + (maxPt-minPt)/nBinsPt*(Double_t)i ;
-
-  const Int_t nBinsM  = 200;
-  const Double_t minM = -10.;
-  const Double_t maxM = 40.;
-  Double_t *binsM = new Double_t[nBinsM+1];
-  for(Int_t i=0; i<=nBinsM; i++) binsM[i]=(Double_t)minM + (maxM-minM)/nBinsM*(Double_t)i ;
-
-  const Int_t nBinsdM  = 200;
-  const Double_t mindM = -30.;
-  const Double_t maxdM = 20.;
-  Double_t *binsdM = new Double_t[nBinsdM+1];
-  for(Int_t i=0; i<=nBinsdM; i++) binsdM[i]=(Double_t)mindM + (maxdM-mindM)/nBinsdM*(Double_t)i ;
-
-  const Int_t nBinsdMr  = 200;
-  const Double_t mindMr = -2.;
-  const Double_t maxdMr = 2.;
-  Double_t *binsdMr = new Double_t[nBinsdMr+1];
-  for(Int_t i=0; i<=nBinsdM; i++) binsdMr[i]=(Double_t)mindMr + (maxdMr-mindMr)/nBinsdMr*(Double_t)i ;
-
-  const Int_t nBinsR  = 80;
-  const Double_t minR = -0.005;
-  const Double_t maxR = 0.795;
-  Double_t *binsR = new Double_t[nBinsR+1];
-  for(Int_t i=0; i<=nBinsR; i++) binsR[i]=(Double_t)minR + (maxR-minR)/nBinsR*(Double_t)i ;
-
-  //track pt
-  Double_t binWidth1 = 0.1;
-  Double_t binWidth2 = 1.;
-  Double_t binWidth3 = 1.;
-  const Float_t ptmin1 =  0.;
-  const Float_t ptmax1 =  5.;
-  const Float_t ptmin2 =  ptmax1;
-  const Float_t ptmax2 =  10.;
-  const Float_t ptmin3 =  ptmax2 ;
-  const Float_t ptmax3 =  100.;
-  const Int_t nbin11 = (int)((ptmax1-ptmin1)/binWidth1);
-  const Int_t nbin12 = (int)((ptmax2-ptmin2)/binWidth2)+nbin11;
-  const Int_t nbin13 = (int)((ptmax3-ptmin3)/binWidth3)+nbin12;
-  Int_t nBinsPtTr=nbin13;
-  //Create array with low edges of each bin
-  Double_t *binsPtTr=new Double_t[nBinsPtTr+1];
-  for(Int_t i=0; i<=nBinsPtTr; i++) {
-    if(i<=nbin11) binsPtTr[i]=(Double_t)ptmin1 + (ptmax1-ptmin1)/nbin11*(Double_t)i ;
-    if(i<=nbin12 && i>nbin11) binsPtTr[i]=(Double_t)ptmin2 + (ptmax2-ptmin2)/(nbin12-nbin11)*((Double_t)i-(Double_t)nbin11) ;
-    if(i<=nbin13 && i>nbin12) binsPtTr[i]=(Double_t)ptmin3 + (ptmax3-ptmin3)/(nbin13-nbin12)*((Double_t)i-(Double_t)nbin12) ;
-  }
-
-  //Binning for THnSparse
-  const Int_t nBinsSparse0 = 4;
-  const Int_t nBins0[nBinsSparse0] = {nBinsM,nBinsM,nBinsPt,nBinsPt};
-  const Double_t xmin0[nBinsSparse0]  = { minM, minM, minPt, minPt};
-  const Double_t xmax0[nBinsSparse0]  = { maxM, maxM, maxPt, maxPt};
-  const Int_t nBinsSparse1 = 5;
-  const Int_t nBins1[nBinsSparse1] = {nBinsdM,nBinsdMr,nBinsM,nBinsPt,nBinsPt};
-  const Double_t xmin1[nBinsSparse1]  = { mindM, mindMr, minM, minPt, minPt};
-  const Double_t xmax1[nBinsSparse1]  = { maxdM, maxdMr, maxM, maxPt, maxPt};
-
-  TString histName = "";
-  TString histTitle = "";
-  for (Int_t i = 0; i < fNcentBins; i++) {
-    histName = TString::Format("fh3PtDRMass_%d",i);
-    histTitle = TString::Format("%s;#it{p}_{T,jet};r;sum m",histName.Data());
-    fh3PtDRMass[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,111,-0.005,1.105);
-    fOutput->Add(fh3PtDRMass[i]);
-
-    histName = TString::Format("fh3PtDRRho_%d",i);
-    histTitle = TString::Format("%s;#it{p}_{T,jet};r;sum #it{p}_{T}",histName.Data());
-    fh3PtDRRho[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,111,-0.005,1.105);
-    fOutput->Add(fh3PtDRRho[i]);
-
-    histName = TString::Format("fh3PtDRMassCorr_%d",i);
-    histTitle = TString::Format("%s;#it{p}_{T,jet};r;sum m",histName.Data());
-    fh3PtDRMassCorr[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,111,-0.005,1.105);
-    fOutput->Add(fh3PtDRMassCorr[i]);
-
-    histName = TString::Format("fh3PtDRRhoCorr_%d",i);
-    histTitle = TString::Format("%s;#it{p}_{T,jet};r;sum #it{p}_{T}",histName.Data());
-    fh3PtDRRhoCorr[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsR,minR,maxR,111,-0.005,1.105);
-    fOutput->Add(fh3PtDRRhoCorr[i]);
-
-    histName = TString::Format("fh2PtMass_%d",i);
-    histTitle = TString::Format("%s;#it{p}_{T,jet};#it{M}_{jet}",histName.Data());
-    fh2PtMass[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM);
-    fOutput->Add(fh2PtMass[i]);
-
-    histName = TString::Format("fh2PtMassCorr_%d",i);
-    histTitle = TString::Format("%s;#it{p}_{T,jet};#it{M}_{jet}",histName.Data());
-    fh2PtMassCorr[i] = new TH2F(histName.Data(),histTitle.Data(),nBinsPt,minPt,maxPt,nBinsM,minM,maxM);
-    fOutput->Add(fh2PtMassCorr[i]);
-
-    histName = TString::Format("fh3JetPtDRTrackPt_%d",i);
-    histTitle = TString::Format("%s;#it{p}_{T,jet};r;#it{p}_{T,track}",histName.Data());
-    fh3JetPtDRTrackPt[i] = new TH3F(histName.Data(),histTitle.Data(),nBinsPt,binsPt,nBinsR,binsR,nBinsPtTr,binsPtTr);
-    fOutput->Add(fh3JetPtDRTrackPt[i]);
-  }
-
-  histName = "fhnMassResponse";
-  histTitle = Form("%s;#it{M}_{det};#it{M}_{part};#it{p}_{T,det};#it{p}_{T,part}",histName.Data());
-  fhnMassResponse = new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
-  fOutput->Add(fhnMassResponse);
-
-  histName = "fhnMassResponseCorr";
-  histTitle = Form("%s;#it{M}_{det};#it{M}_{part};#it{p}_{T,det};#it{p}_{T,part}",histName.Data());
-  fhnMassResponseCorr = new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse0,nBins0,xmin0,xmax0);
-  fOutput->Add(fhnMassResponseCorr);
-
-  if(fEJetByJetCorr) fpUsedEfficiency = fEJetByJetCorr->GetAppliedEfficiency();
-  fOutput->Add(fpUsedEfficiency);
-
-  if(fSwitchResolutionhn){
-     histName = "fhnDeltaMass";
-     histTitle = Form("%s; #it{M}_{det} - #it{M}_{part} ;(#it{M}_{det} - #it{M}_{part})/#it{M}_{part};  #it{M}_{part}; #it{p}_{T,det}; #it{p}_{T,part}",histName.Data());
-     fhnDeltaMass = new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse1,nBins1,xmin1,xmax1);
-     fOutput->Add(fhnDeltaMass);
-     
-     histName = "fhnDeltaMassCorr";
-     histTitle = Form("%s;#it{M}_{det} - #it{M}_{part} ;(#it{M}_{det} - #it{M}_{part})/#it{M}_{part}; #it{M}_{part}; #it{p}_{T,det}; #it{p}_{T,part}",histName.Data());
-     fhnDeltaMassCorr = new THnSparseF(histName.Data(),histTitle.Data(),nBinsSparse1,nBins1,xmin1,xmax1);
-     fOutput->Add(fhnDeltaMassCorr);
-     
-  }
-  
-  TH1::AddDirectory(oldStatus);
-
-  PostData(1, fOutput); // Post data for ALL output slots > 0 here.
-
-  if(binsPt)                delete [] binsPt;
-  if(binsPtTr)              delete [] binsPtTr;
-  if(binsM)                 delete [] binsM;
-  if(binsR)                 delete [] binsR;
-
-}
-
-//________________________________________________________________________
-Bool_t AliAnalysisTaskEmcalJetMassStructure::Run()
-{
-  // Run analysis code here, if needed. It will be executed before FillHistograms().
-
-  return kTRUE;
-}
-
-//________________________________________________________________________
-Bool_t AliAnalysisTaskEmcalJetMassStructure::FillHistograms()
-{
-  // study how jet mass builds up as function of radial distance to jet axis
-
-  if(fCorrType==kMeanPtR && !fEJetByJetCorr) return kFALSE;
-
-  AliEmcalJet* jet1 = NULL;
-  AliJetContainer *jetCont = GetJetContainer(fContainerBase);
-  if(jetCont) {
-    jetCont->ResetCurrentID();
-    while((jet1 = jetCont->GetNextAcceptJet())) {
-
-      Double_t ptJet1 = jet1->Pt() - GetRhoVal(fContainerBase)*jet1->Area();
-      Double_t mJet1 = GetJetMass(jet1);
-      fh2PtMass[fCentBin]->Fill(ptJet1,mJet1);
-      AliEmcalJet *jPart = jet1->ClosestJet(); 
-      //fill detector response
-      if(jPart) {
-        Double_t var[4] = {mJet1,jPart->M(),ptJet1,jPart->Pt()};
-        fhnMassResponse->Fill(var);
-         Double_t var1[5] = {mJet1-jPart->M(),(mJet1-jPart->M())/jPart->M(),jPart->M(), ptJet1,jPart->Pt()};
-         fhnDeltaMass->Fill(var1);
-       
-      }
-
-      // if(jet1->GetTagStatus()<1 || !jet1->GetTaggedJet())
-      //       continue;
-     
-      //Sort array based on distance to jet axis
-      static Int_t indexes[9999] = {-1};
-      static Float_t dr[9999] = {0};
-      if(!GetSortedArray(indexes,dr,jet1)) continue;
-
-      for(Int_t i=jet1->GetNumberOfTracks()-1; i>-1; i--) {
-        AliVParticle *vp = static_cast<AliVParticle*>(jet1->TrackAt(indexes[i], fTracks));
-        if(!vp) continue;
-        fh3JetPtDRTrackPt[fCentBin]->Fill(ptJet1,dr[indexes[i]],vp->Pt());
-      }
-      if(fCorrType==kAnnulus) {
-        TLorentzVector sumVec;      sumVec.SetPtEtaPhiM(0.,0.,0.,0.);
-        TLorentzVector corrVec;     corrVec.SetPtEtaPhiM(0.,0.,0.,0.);
-        TLorentzVector curVec;
-        for(Int_t i=jet1->GetNumberOfTracks()-1; i>-1; i--) {
-          AliVParticle *vp = static_cast<AliVParticle*>(jet1->TrackAt(indexes[i], fTracks));
-          if(!vp) continue;
-          
-          curVec.SetPtEtaPhiM(vp->Pt(),vp->Eta(),vp->Phi(),vp->M());
-          sumVec+=curVec;
-          corrVec+=curVec;
-
-          fh3PtDRMass[fCentBin]->Fill(ptJet1,dr[indexes[i]],sumVec.M()/mJet1);
-          fh3PtDRRho[fCentBin]->Fill(ptJet1,dr[indexes[i]],sumVec.Pt()/ptJet1);
-          
-          fh3PtDRMassCorr[fCentBin]->Fill(ptJet1,dr[indexes[i]],corrVec.M()/mJet1);
-          fh3PtDRRhoCorr[fCentBin]->Fill(ptJet1,dr[indexes[i]],corrVec.Pt()/ptJet1);
-          
-          Double_t eff = GetEfficiency(vp->Pt());
-          Double_t rnd = fRandom->Uniform(1.);
-          if(rnd>eff) {//put particle back at random position in annulus; using now zero width for annulus
-            Double_t t = TMath::TwoPi()*gRandom->Uniform(1.);
-            Double_t rr = dr[indexes[i]];
-            rr = fRandom->Uniform(0.,jetCont->GetJetRadius());
-            Double_t deta = rr*TMath::Cos(t);
-            Double_t dphi = rr*TMath::Sin(t);
-            curVec.SetPtEtaPhiM(vp->Pt(),deta+jet1->Eta(),dphi+jet1->Phi(),vp->M());
-            corrVec+=curVec;
-            
-            fh3PtDRMassCorr[fCentBin]->Fill(ptJet1,dr[indexes[i]],corrVec.M()/mJet1);
-            fh3PtDRRhoCorr[fCentBin]->Fill(ptJet1,dr[indexes[i]],corrVec.Pt()/ptJet1);
-          }
-        }//track loop
-
-        fh2PtMassCorr[fCentBin]->Fill(corrVec.Pt(), corrVec.M());
-        if(jPart) {
-          Double_t varCorr[4] = {corrVec.M(),jPart->M(),corrVec.Pt(),jPart->Pt()};
-          fhnMassResponseCorr->Fill(varCorr);
-        }
-      }//kAnnulus method
-      else if(fCorrType==kMeanPtR) {
-        //jet-by-jet correction based on templates
-        AliEmcalJet *jetCorr = fEJetByJetCorr->Eval(jet1,jetCont->GetParticleContainer()->GetArray());
-        if(jPart && jetCorr) {
-          Double_t varCorr[4] = {jetCorr->M(),jPart->M(),jetCorr->Pt(),jPart->Pt()};
-          fhnMassResponseCorr->Fill(varCorr);
-          Double_t varCorr1[5] = {jetCorr->M()-jPart->M(),(jetCorr->M()-jPart->M())/jPart->M(),jPart->M(),jetCorr->Pt(),jPart->Pt()};
-          fhnDeltaMassCorr->Fill(varCorr1);
-          
-        }
-      }//kMeanPtR method
-    }//jet loop
-  }//jet container
-  
-  return kTRUE;
-}
-
-//________________________________________________________________________
-Double_t AliAnalysisTaskEmcalJetMassStructure::GetEfficiency(Double_t pt) {
-  pt = 1.*pt;
-  Double_t eff = 1.;
-  if(fEfficiencyFixed<1.) return fEfficiencyFixed;
-  
-  return eff;
-}
-
-//________________________________________________________________________
-Bool_t AliAnalysisTaskEmcalJetMassStructure::GetSortedArray(Int_t indexes[], Float_t dr[], AliEmcalJet *jet) const
-{
-  // sort array
-  const Int_t n = (Int_t)jet->GetNumberOfTracks();//(Int_t)array.size();
-  if (n < 1) return kFALSE;
-  
-  for (Int_t i = 0; i < n; i++) {
-    AliVParticle *vp = static_cast<AliVParticle*>(jet->TrackAt(i, fTracks));
-    if(!vp) continue;
-    dr[i] = jet->DeltaR(vp);
-  }
-  TMath::Sort(n, dr, indexes);
-  return kTRUE;
-}
-
-
-//________________________________________________________________________
-Double_t AliAnalysisTaskEmcalJetMassStructure::GetJetMass(AliEmcalJet *jet) {
-  //calc subtracted jet mass
-  if(fJetMassType==kRaw)
-    return jet->M();
-  else if(fJetMassType==kDeriv)
-    return jet->GetSecondOrderSubtracted();
-  
-  return 0;
-}
-
-//________________________________________________________________________
-Bool_t AliAnalysisTaskEmcalJetMassStructure::RetrieveEventObjects() {
-  //
-  // retrieve event objects
-  //
-  if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
-    return kFALSE;
-
-  return kTRUE;
-}
-
-//_______________________________________________________________________
-void AliAnalysisTaskEmcalJetMassStructure::Terminate(Option_t *) 
-{
-  // Called once at the end of the analysis.
-}
-