From 70c54bac77ba06e37234c83c7f05bd93f98e68ad Mon Sep 17 00:00:00 2001 From: lgraczyk Date: Sun, 1 Jun 2014 14:33:57 +0200 Subject: [PATCH] Adding DEtaDPhi correlation functions with corrections in AliFemto --- PWGCF/CMakelibPWGCFfemtoscopyUser.pkg | 2 +- .../AliFemtoCorrFctnDEtaDPhiCorrections.cxx | 760 ++++++++++++++++++ .../AliFemtoCorrFctnDEtaDPhiCorrections.h | 93 +++ PWGCF/PWGCFfemtoscopyUserLinkDef.h | 1 + 4 files changed, 855 insertions(+), 1 deletion(-) create mode 100644 PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.cxx create mode 100644 PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.h diff --git a/PWGCF/CMakelibPWGCFfemtoscopyUser.pkg b/PWGCF/CMakelibPWGCFfemtoscopyUser.pkg index ba785fe23ea..746421f9a8a 100644 --- a/PWGCF/CMakelibPWGCFfemtoscopyUser.pkg +++ b/PWGCF/CMakelibPWGCFfemtoscopyUser.pkg @@ -25,7 +25,7 @@ # SHLIBS - Shared Libraries and objects for linking (Executables only) # #--------------------------------------------------------------------------------# -set ( SRCS FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityKTPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoKKTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoTPCInnerCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoChi2CorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnSource.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelGausRinvFreezeOutGenerator.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnTrueQ.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnNonIdDR.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DLCMSSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleMomRes.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelAllHiddenInfo.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCchiNdof.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQATrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQAEventCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCncls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDG.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnTPCNcls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnGammaMonitor.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQinvCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctn3DSphericalEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoBPLCMS3DCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutAntiGamma.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleEtCorr.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutPt.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAvgSepCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDGV0.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAnalysisAzimuthalPbPb.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceLM.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPicoEventRP.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceKK.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx) +set ( SRCS FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityKTPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoKKTrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoTPCInnerCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoChi2CorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnSource.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelGausRinvFreezeOutGenerator.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnTrueQ.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnNonIdDR.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctn3DLCMSSpherical.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleMomRes.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelAllHiddenInfo.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCchiNdof.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQATrackCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQAEventCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorTrackTPCncls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityTPCEntranceSepQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityQAPairCut.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoShareQualityCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoModelCorrFctnDirectYlm.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDG.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnTPCNcls.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhi.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnGammaMonitor.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoQinvCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctn3DSphericalEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoBPLCMS3DCorrFctnEMCIC.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutAntiGamma.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticleEtCorr.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistance.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutPt.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAvgSepCorrFctn.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCutMonitorParticlePtPDGV0.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoAnalysisAzimuthalPbPb.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceLM.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPicoEventRP.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutRadialDistanceKK.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoPairCutResonances.cxx FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnMinvMonitor.cxx) string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" ) diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.cxx b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.cxx new file mode 100644 index 00000000000..c9d0bb129f1 --- /dev/null +++ b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.cxx @@ -0,0 +1,760 @@ +//////////////////////////////////////////////////////////////////////////////// +// // +// AliFemtoCorrFctnDEtaDPhiCorrections - A correlation function that analyzes // +// two particle correlations with respect to the azimuthal angle (phi) // +// and pseudorapidity (eta) difference // +// // +// Authors: Adam Kisiel Adam.Kisiel@cern.ch // +// // +//////////////////////////////////////////////////////////////////////////////// + +#include "AliFemtoCorrFctnDEtaDPhiCorrections.h" +#include "AliFemtoModelHiddenInfo.h" +//#include "AliFemtoHisto.hh" +#include +#include + +#ifdef __ROOT__ +ClassImp(AliFemtoCorrFctnDEtaDPhiCorrections) +#endif + +#define PIH 1.57079632679489656 +#define PIT 6.28318530717958623 + +//____________________________ +AliFemtoCorrFctnDEtaDPhiCorrections::AliFemtoCorrFctnDEtaDPhiCorrections(char* title, const int& aPhiBins=20, const int& aEtaBins=20): + AliFemtoCorrFctn(), + fDPhiDEtaNumerator(0), + fDPhiDEtaDenominator(0), + fDPhiNumerator(0), + fDPhiDenominator(0), + fDCosNumerator(0), + fDCosDenominator(0), + fDoPtAnalysis(0), + fDPhiPtNumerator(0), + fDPhiPtDenominator(0), + fDCosPtNumerator(0), + fDCosPtDenominator(0), + fPhi(0), + fEta(0), + fYtYtNumerator(0), + fYtYtDenominator(0), + fIfCorrectionHist(kNone), + fIfCorrection(0), + fPtCorrectionsNum(0), + fPtCorrectionsDen(0), + fEtaCorrectionsNum(0), + fEtaCorrectionsDen(0), + fCorrFactorTab(0), + fpTab(0), + fPartType(kNoCorrection), + fphiL(0), + fphiT(0) +{ + + fphiL = (-(int)(aPhiBins/4)+0.5)*2.*TMath::Pi()/aPhiBins; + fphiT = 2*TMath::Pi()+(-(int)(aPhiBins/4)+0.5)*2.*TMath::Pi()/aPhiBins; + + // set up numerator + char tTitNumD[101] = "NumDPhiDEta"; + strncat(tTitNumD,title, 100); + fDPhiDEtaNumerator = new TH2D(tTitNumD,title,aPhiBins,fphiL,fphiT,aEtaBins,-2.0,2.0); + // set up denominator + char tTitDenD[101] = "DenDPhiDEta"; + strncat(tTitDenD,title, 100); + fDPhiDEtaDenominator = new TH2D(tTitDenD,title,aPhiBins,fphiL,fphiT,aEtaBins,-2.0,2.0); + + // set up numerator + char tTitNumDPhi[101] = "NumDPhi"; + strncat(tTitNumDPhi,title, 100); + fDPhiNumerator = new TH1D(tTitNumDPhi,title,aPhiBins*2,fphiL, fphiT); + // set up denominator + char tTitDenDPhi[101] = "DenDPhi"; + strncat(tTitDenDPhi,title, 100); + fDPhiDenominator = new TH1D(tTitDenDPhi,title,aPhiBins*2,fphiL, fphiT); + + // set up numerator + char tTitNumDCos[101] = "NumDCos"; + strncat(tTitNumDCos,title, 100); + fDCosNumerator = new TH1D(tTitNumDCos,title,aPhiBins*2,-1.0,1.0); + // set up denominator + char tTitDenDCos[101] = "DenDCos"; + strncat(tTitDenDCos,title, 100); + fDCosDenominator = new TH1D(tTitDenDCos,title,aPhiBins*2,-1.0,1.0); + + char tTitPhi[101] = "Phi"; + strncat(tTitPhi,title, 100); + fPhi = new TH1D(tTitPhi,title,90,-TMath::Pi(),TMath::Pi()); + + char tTitEta[101] = "Eta"; + strncat(tTitEta,title, 100); + fEta = new TH1D(tTitEta,title,90,-1.2,1.2); + + // set up numerator + char tTitYtNum[101] = "NumYtYt"; + strncat(tTitYtNum,title, 100); + fYtYtNumerator = new TH2D(tTitYtNum,title,aPhiBins,1,5,aEtaBins,1,5); + // set up denominator + char tTitYtYtDen[101] = "DenYtYt"; + strncat(tTitYtYtDen,title, 100); + fYtYtDenominator = new TH2D(tTitYtYtDen,title,aPhiBins,1,5,aEtaBins,1,5); + + + char tTitPtCorrectionsNum[101] = "NumpT1pT2EtaPhi"; + strncat(tTitPtCorrectionsNum,title, 100); + char tTitPtCorrectionsDen[101] = "DenpT1pT2EtaPhi"; + strncat(tTitPtCorrectionsDen,title, 100); + + Int_t nbins[4] = {20,20,aPhiBins,aEtaBins}; + Double_t xmin[4] = {0,0,-0.5*TMath::Pi(),-2.0}; + Double_t xmax[4] = {4,4,1.5*TMath::Pi(),2.0}; + + + fPtCorrectionsNum = new THnSparseF(tTitPtCorrectionsNum,title,4,nbins,xmin,xmax); + fPtCorrectionsDen = new THnSparseF(tTitPtCorrectionsDen,title,4,nbins,xmin,xmax); + + char tTitEtaCorrectionsNum[101] = "NumEta1Eta2EtaPhi"; + strncat(tTitEtaCorrectionsNum,title, 100); + char tTitEtaCorrectionsDen[101] = "DenEta1Eta2EtaPhi"; + strncat(tTitEtaCorrectionsDen,title, 100); + + Double_t xmineta[4] = {-1,1,-0.5*TMath::Pi(),-2.0}; + Double_t xmaxeta[4] = {-1,1,1.5*TMath::Pi(),2.0}; + + fEtaCorrectionsNum = new THnSparseF(tTitEtaCorrectionsNum,title,4,nbins,xmineta,xmaxeta); + fEtaCorrectionsDen = new THnSparseF(tTitEtaCorrectionsDen,title,4,nbins,xmineta,xmaxeta); + + // THnSparse(const char* name, const char* title, Int_t dim, + // const Int_t* nbins, const Double_t* xmin, const Double_t* xmax, + // Int_t chunksize); + + // to enable error bar calculation... + fDPhiDEtaNumerator->Sumw2(); + fDPhiDEtaDenominator->Sumw2(); + fDPhiNumerator->Sumw2(); + fDPhiDenominator->Sumw2(); + fDCosNumerator->Sumw2(); + fDCosDenominator->Sumw2(); + fPhi->Sumw2(); + fEta->Sumw2(); + fYtYtNumerator->Sumw2(); + fYtYtDenominator->Sumw2(); + fPtCorrectionsNum->Sumw2(); + fPtCorrectionsDen->Sumw2(); + + + +} + +//____________________________ +AliFemtoCorrFctnDEtaDPhiCorrections::AliFemtoCorrFctnDEtaDPhiCorrections(const AliFemtoCorrFctnDEtaDPhiCorrections& aCorrFctn) : + AliFemtoCorrFctn(), + fDPhiDEtaNumerator(0), + fDPhiDEtaDenominator(0), + fDPhiNumerator(0), + fDPhiDenominator(0), + fDCosNumerator(0), + fDCosDenominator(0), + fDoPtAnalysis(0), + fDPhiPtNumerator(0), + fDPhiPtDenominator(0), + fDCosPtNumerator(0), + fDCosPtDenominator(0), + fPhi(0), + fEta(0), + fYtYtNumerator(0), + fYtYtDenominator(0), + fIfCorrectionHist(kNone), + fIfCorrection(0), + fPtCorrectionsNum(0), + fPtCorrectionsDen(0), + fEtaCorrectionsNum(0), + fEtaCorrectionsDen(0), + fCorrFactorTab(0), + fpTab(0), + fPartType(kNoCorrection), + fphiL(0), + fphiT(0) +{ + // copy constructor + if (aCorrFctn.fDPhiDEtaNumerator) + fDPhiDEtaNumerator = new TH2D(*aCorrFctn.fDPhiDEtaNumerator); + else + fDPhiDEtaNumerator = 0; + if (aCorrFctn.fDPhiDEtaDenominator) + fDPhiDEtaDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator); + else + fDPhiDEtaDenominator = 0; + + if (aCorrFctn.fDPhiNumerator) + fDPhiNumerator = new TH1D(*aCorrFctn.fDPhiNumerator); + else + fDPhiNumerator = 0; + if (aCorrFctn.fDPhiDenominator) + fDPhiDenominator = new TH1D(*aCorrFctn.fDPhiDenominator); + else + fDPhiDenominator = 0; + + if (aCorrFctn.fDCosNumerator) + fDCosNumerator = new TH1D(*aCorrFctn.fDCosNumerator); + else + fDCosNumerator = 0; + if (aCorrFctn.fDCosDenominator) + fDCosDenominator = new TH1D(*aCorrFctn.fDCosDenominator); + else + fDCosDenominator = 0; + + if (aCorrFctn.fDPhiPtNumerator) + fDPhiPtNumerator = new TH2D(*aCorrFctn.fDPhiPtNumerator); + else + fDPhiPtNumerator = 0; + if (aCorrFctn.fDPhiPtDenominator) + fDPhiPtDenominator = new TH2D(*aCorrFctn.fDPhiPtDenominator); + else + fDPhiPtDenominator = 0; + + if (aCorrFctn.fDCosPtNumerator) + fDCosPtNumerator = new TH2D(*aCorrFctn.fDCosPtNumerator); + else + fDCosPtNumerator = 0; + if (aCorrFctn.fDCosPtDenominator) + fDCosPtDenominator = new TH2D(*aCorrFctn.fDCosPtDenominator); + else + fDCosPtDenominator = 0; + if (aCorrFctn.fPhi) + fPhi = new TH1D(*aCorrFctn.fPhi); + else + fPhi = 0; + if (aCorrFctn.fEta) + fEta = new TH1D(*aCorrFctn.fEta); + else + fEta = 0; + + if (aCorrFctn.fYtYtNumerator) + fYtYtNumerator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator); + else + fYtYtNumerator = 0; + + if (aCorrFctn.fYtYtDenominator) + fYtYtDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator); + else + fYtYtDenominator = 0; + + fphiL = aCorrFctn.fphiL; + fphiT = aCorrFctn.fphiT; + + fPartType = aCorrFctn.fPartType; + +// if (aCorrFctn.fPtCorrectionsNum) +// fPtCorrectionsNum = new THnSparseF(*aCorrFctn.fPtCorrectionsNum); +// else +// fPtCorrectionsNum = 0; + +// if (aCorrFctn.fPtCorrectionsDen) +// fPtCorrectionsDen = new THnSparseF(*aCorrFctn.fPtCorrectionsDen); +// else +// fPtCorrectionsDen = 0; + + + +} +//____________________________ +AliFemtoCorrFctnDEtaDPhiCorrections::~AliFemtoCorrFctnDEtaDPhiCorrections(){ + // destructor + delete fDPhiDEtaNumerator; + delete fDPhiDEtaDenominator; + delete fDPhiNumerator; + delete fDPhiDenominator; + delete fDCosNumerator; + delete fDCosDenominator; + if (fDoPtAnalysis) { + delete fDPhiPtNumerator; + delete fDPhiPtDenominator; + delete fDCosPtNumerator; + delete fDCosPtDenominator; + } + delete fPhi; + delete fEta; + + delete fYtYtNumerator; + delete fYtYtDenominator; + + delete fPtCorrectionsNum; + delete fPtCorrectionsDen; + delete fEtaCorrectionsNum; + delete fEtaCorrectionsDen; +} +//_________________________ +AliFemtoCorrFctnDEtaDPhiCorrections& AliFemtoCorrFctnDEtaDPhiCorrections::operator=(const AliFemtoCorrFctnDEtaDPhiCorrections& aCorrFctn) +{ + // assignment operator + if (this == &aCorrFctn) + return *this; + + if (aCorrFctn.fDPhiDEtaNumerator) + fDPhiDEtaNumerator = new TH2D(*aCorrFctn.fDPhiDEtaNumerator); + else + fDPhiDEtaNumerator = 0; + if (aCorrFctn.fDPhiDEtaDenominator) + fDPhiDEtaDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator); + else + fDPhiDEtaDenominator = 0; + + if (aCorrFctn.fDPhiNumerator) + fDPhiNumerator = new TH1D(*aCorrFctn.fDPhiNumerator); + else + fDPhiNumerator = 0; + if (aCorrFctn.fDPhiDenominator) + fDPhiDenominator = new TH1D(*aCorrFctn.fDPhiDenominator); + else + fDPhiDenominator = 0; + + if (aCorrFctn.fDCosNumerator) + fDCosNumerator = new TH1D(*aCorrFctn.fDCosNumerator); + else + fDCosNumerator = 0; + if (aCorrFctn.fDCosDenominator) + fDCosDenominator = new TH1D(*aCorrFctn.fDCosDenominator); + else + fDCosDenominator = 0; + + if (aCorrFctn.fDPhiPtNumerator) + fDPhiPtNumerator = new TH2D(*aCorrFctn.fDPhiPtNumerator); + else + fDPhiPtNumerator = 0; + if (aCorrFctn.fDPhiPtDenominator) + fDPhiPtDenominator = new TH2D(*aCorrFctn.fDPhiPtDenominator); + else + fDPhiPtDenominator = 0; + + if (aCorrFctn.fDCosPtNumerator) + fDCosPtNumerator = new TH2D(*aCorrFctn.fDCosPtNumerator); + else + fDCosPtNumerator = 0; + if (aCorrFctn.fDCosPtDenominator) + fDCosPtDenominator = new TH2D(*aCorrFctn.fDCosPtDenominator); + else + fDCosPtDenominator = 0; + if (aCorrFctn.fPhi) + fPhi = new TH1D(*aCorrFctn.fPhi); + else + fPhi = 0; + if (aCorrFctn.fEta) + fEta = new TH1D(*aCorrFctn.fEta); + else + fEta = 0; + + if (aCorrFctn.fYtYtNumerator) + fYtYtNumerator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator); + else + fYtYtNumerator = 0; + + if (aCorrFctn.fYtYtDenominator) + fYtYtDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator); + else + fYtYtDenominator = 0; + + fIfCorrectionHist = kNone; + fIfCorrection = 0; + + fphiL = aCorrFctn.fphiL; + fphiT = aCorrFctn.fphiT; + + fPartType = aCorrFctn.fPartType; + +// if (aCorrFctn.fPtCorrectionsNum) +// fPtCorrectionsNum = new THnSparseF(*aCorrFctn.fPtCorrectionsNum); +// else +// fPtCorrectionsNum = 0; + +// if (aCorrFctn.fPtCorrectionsDen) +// fPtCorrectionsDen = new THnSparseF(*aCorrFctn.fPtCorrectionsDen); +// else +// fPtCorrectionsDen = 0; + + + + return *this; +} +//_________________________ +void AliFemtoCorrFctnDEtaDPhiCorrections::Finish(){ + // here is where we should normalize, fit, etc... + // we should NOT Draw() the histos (as I had done it below), + // since we want to insulate ourselves from root at this level + // of the code. Do it instead at root command line with browser. + // mShareNumerator->Draw(); + //mShareDenominator->Draw(); + //mRatio->Draw(); + +} + +//____________________________ +AliFemtoString AliFemtoCorrFctnDEtaDPhiCorrections::Report(){ + // create report + string stemp = "TPC Ncls Correlation Function Report:\n"; + char ctemp[100]; + snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fDPhiDEtaNumerator->GetEntries()); + stemp += ctemp; + snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fDPhiDEtaDenominator->GetEntries()); + stemp += ctemp; + // stemp += mCoulombWeight->Report(); + AliFemtoString returnThis = stemp; + return returnThis; +} +//____________________________ +void AliFemtoCorrFctnDEtaDPhiCorrections::AddRealPair( AliFemtoPair* pair){ + // add real (effect) pair + if (fPairCut) + if (!fPairCut->Pass(pair)) return; + + /*double phi1 = pair->Track1()->Track()->P().Phi(); + double phi2 = pair->Track2()->Track()->P().Phi(); + double eta1 = pair->Track1()->Track()->P().PseudoRapidity(); + double eta2 = pair->Track2()->Track()->P().PseudoRapidity();*/ + + double phi1 = pair->Track1()->FourMomentum().Phi(); + double phi2 = pair->Track2()->FourMomentum().Phi(); + double eta1 = pair->Track1()->FourMomentum().PseudoRapidity(); + double eta2 = pair->Track2()->FourMomentum().PseudoRapidity(); + + double dphi = phi1 - phi2; + while (dphifphiT) dphi-=PIT; + + double deta = eta1 - eta2; + + double px1 = pair->Track1()->Track()->P().x(); + double py1 = pair->Track1()->Track()->P().y(); + //double pz1 = pair->Track1()->Track()->P().z(); + + double px2 = pair->Track2()->Track()->P().x(); + double py2 = pair->Track2()->Track()->P().y(); + //double pz2 = pair->Track2()->Track()->P().z(); + + double pt1 = TMath::Hypot(px1, py1); + double pt2 = TMath::Hypot(px2, py2); + + double corrweight; + if (fIfCorrection) corrweight = CalculateCorrectionWeight(pt1, pt2); +/* double ptmin = pt1>pt2 ? pt2 : pt1; + + double cosphi = (px1*px2 + py1*py2 + pz1*pz2)/ + sqrt((px1*px1 + py1*py1 + pz1*pz1)*(px2*px2 + py2*py2 + pz2*pz2)); +*/ + if (fIfCorrection) + fDPhiDEtaNumerator->Fill(dphi, deta, corrweight); + else + fDPhiDEtaNumerator->Fill(dphi, deta); + + fDPhiNumerator->Fill(dphi); +// fDCosNumerator->Fill(cosphi); + + if (fDoPtAnalysis) { +// fDPhiPtNumerator->Fill(dphi, ptmin); +// fDCosPtNumerator->Fill(cosphi, ptmin); + } + + fPhi->Fill(phi1); + fEta->Fill(eta1); + + double PionMass = 0.13956995; + double yt1 = TMath::Log(sqrt(1+(pt1/PionMass)*(pt1/PionMass))+(pt1/PionMass)); + double yt2 = TMath::Log(sqrt(1+(pt2/PionMass)*(pt2/PionMass))+(pt2/PionMass)); + fYtYtNumerator->Fill(yt1,yt2); + + if(fIfCorrectionHist) + { + if(fIfCorrectionHist == kPt){ + Double_t val[] = {pt1,pt2,dphi,deta}; + fPtCorrectionsNum->Fill(val); + } + if(fIfCorrectionHist == kEta){ + Double_t val[] = {eta1,eta2,dphi,deta}; + fEtaCorrectionsNum->Fill(val); + } + + } + +} +//____________________________ +void AliFemtoCorrFctnDEtaDPhiCorrections::AddMixedPair( AliFemtoPair* pair){ + // add mixed (background) pair + if (fPairCut) + if (!fPairCut->Pass(pair)) return; + + /*double phi1 = pair->Track1()->Track()->P().Phi(); + double phi2 = pair->Track2()->Track()->P().Phi(); + double eta1 = pair->Track1()->Track()->P().PseudoRapidity(); + double eta2 = pair->Track2()->Track()->P().PseudoRapidity();*/ + + double phi1 = pair->Track1()->FourMomentum().Phi(); + double phi2 = pair->Track2()->FourMomentum().Phi(); + double eta1 = pair->Track1()->FourMomentum().PseudoRapidity(); + double eta2 = pair->Track2()->FourMomentum().PseudoRapidity(); + + double dphi = phi1 - phi2; + while (dphifphiT) dphi-=PIT; + + double deta = eta1 - eta2; + + double px1 = pair->Track1()->Track()->P().x(); + double py1 = pair->Track1()->Track()->P().y(); + //double pz1 = pair->Track1()->Track()->P().z(); + + double px2 = pair->Track2()->Track()->P().x(); + double py2 = pair->Track2()->Track()->P().y(); + //double pz2 = pair->Track2()->Track()->P().z(); + + double pt1 = TMath::Hypot(px1, py1); + double pt2 = TMath::Hypot(px2, py2); +// double ptmin = pt1>pt2 ? pt2 : pt1; + +// double cosphi = (px1*px2 + py1*py2 + pz1*pz2)/ +// sqrt((px1*px1 + py1*py1 + pz1*pz1)*(px2*px2 + py2*py2 + pz2*pz2)); + + + double corrweight=-999; + if (fIfCorrection) corrweight = CalculateCorrectionWeight(pt1, pt2); + + if(fIfCorrection) + fDPhiDEtaDenominator->Fill(dphi, deta, corrweight); + else + fDPhiDEtaDenominator->Fill(dphi, deta); + + fDPhiDenominator->Fill(dphi); +// fDCosDenominator->Fill(cosphi); + + //if (fDoPtAnalysis) { + // fDPhiPtDenominator->Fill(dphi, ptmin); + // fDCosPtDenominator->Fill(cosphi, ptmin); + //} + + double PionMass = 0.13956995; + double yt1 = TMath::Log(sqrt(1+(pt1/PionMass)*(pt1/PionMass))+(pt1/PionMass)); + double yt2 = TMath::Log(sqrt(1+(pt2/PionMass)*(pt2/PionMass))+(pt2/PionMass)); + fYtYtDenominator->Fill(yt1,yt2); + + if(fIfCorrectionHist) + { + if(fIfCorrectionHist == kPt){ + Double_t val[] = {pt1,pt2,dphi,deta}; + fPtCorrectionsDen->Fill(val); + } + if(fIfCorrectionHist == kEta){ + Double_t val[] = {eta1,eta2,dphi,deta}; + fEtaCorrectionsDen->Fill(val); + } + } + +} + + +void AliFemtoCorrFctnDEtaDPhiCorrections::WriteHistos() +{ + // Write out result histograms + fDPhiDEtaNumerator->Write(); + fDPhiDEtaDenominator->Write(); + /*fDPhiNumerator->Write(); + fDPhiDenominator->Write(); + fDCosNumerator->Write(); + fDCosDenominator->Write(); + if (fDoPtAnalysis) { + fDPhiPtNumerator->Write(); + fDPhiPtDenominator->Write(); + fDCosPtNumerator->Write(); + fDCosPtDenominator->Write(); + }*/ + fPhi->Write(); + fEta->Write(); + + if(fIfCorrectionHist){ + if(fIfCorrectionHist==kPt){ + fPtCorrectionsNum->Write(); + fPtCorrectionsDen->Write();} + if(fIfCorrectionHist==kEta){ + fEtaCorrectionsNum->Write(); + fEtaCorrectionsDen->Write();} + } +} + +TList* AliFemtoCorrFctnDEtaDPhiCorrections::GetOutputList() +{ + // Prepare the list of objects to be written to the output + TList *tOutputList = new TList(); + + tOutputList->Add(fDPhiDEtaNumerator); + tOutputList->Add(fDPhiDEtaDenominator); + /*tOutputList->Add(fDPhiNumerator); + tOutputList->Add(fDPhiDenominator); + tOutputList->Add(fDCosNumerator); + tOutputList->Add(fDCosDenominator); + if (fDoPtAnalysis) { + tOutputList->Add(fDPhiPtNumerator); + tOutputList->Add(fDPhiPtDenominator); + tOutputList->Add(fDCosPtNumerator); + tOutputList->Add(fDCosPtDenominator); + }*/ + tOutputList->Add(fPhi); + tOutputList->Add(fEta); + tOutputList->Add(fYtYtNumerator); + tOutputList->Add(fYtYtDenominator); + + if(fIfCorrectionHist){ + if(fIfCorrection==kPt){ + tOutputList->Add(fPtCorrectionsNum); + tOutputList->Add(fPtCorrectionsDen); + } + if(fIfCorrectionHist==kEta){ + tOutputList->Add(fEtaCorrectionsNum); + tOutputList->Add(fEtaCorrectionsDen); + } + } + return tOutputList; + +} + +void AliFemtoCorrFctnDEtaDPhiCorrections::SetDoPtAnalysis(int do2d) +{ + fDoPtAnalysis = do2d; + + int aPhiBins = fDPhiDEtaNumerator->GetNbinsX(); + const char *title = fDPhiDEtaNumerator->GetTitle(); + + // set up numerator + char tTitNumDPhiPt[101] = "NumDPhiPt"; + strncat(tTitNumDPhiPt,title, 100); + fDPhiPtNumerator = new TH2D(tTitNumDPhiPt,title,aPhiBins*2,-0.5*TMath::Pi(),3./2.*TMath::Pi(), 30, 0.0, 3.0); + // set up denominator + char tTitDenDPhiPt[101] = "DenDPhiPt"; + strncat(tTitDenDPhiPt,title, 100); + fDPhiPtDenominator = new TH2D(tTitDenDPhiPt,title,aPhiBins*2,-0.5*TMath::Pi(),3./2.*TMath::Pi(), 30, 0.0, 3.0); + + // set up numerator + char tTitNumDCosPt[101] = "NumDCosPt"; + strncat(tTitNumDCosPt,title, 100); + fDCosPtNumerator = new TH2D(tTitNumDCosPt,title,aPhiBins*2,-1.0,1.0, 30, 0.0, 3.0); + // set up denominator + char tTitDenDCosPt[101] = "DenDCosPt"; + strncat(tTitDenDCosPt,title, 100); + fDCosPtDenominator = new TH2D(tTitDenDCosPt,title,aPhiBins*2,-1.0,1.0, 30, 0.0, 3.0); + + fDPhiPtNumerator->Sumw2(); + fDPhiPtDenominator->Sumw2(); + fDCosPtNumerator->Sumw2(); + fDCosPtDenominator->Sumw2(); + +} + +void AliFemtoCorrFctnDEtaDPhiCorrections::SetDoCorrections(bool doCorr) +{ + fIfCorrection = doCorr; +} + +void AliFemtoCorrFctnDEtaDPhiCorrections::SetDoCorrectionsHist(CorrectionType doCorr) +{ + fIfCorrectionHist = doCorr; +} + +void AliFemtoCorrFctnDEtaDPhiCorrections::LoadCorrectionTabFromFile(const char *pTtab, const char *corrTab) +{ + + double val=-10000; + + ifstream ifile1; + ifile1.open(pTtab); + if(ifile1) + { + int nrEntries1; + ifile1>>nrEntries1; + fpTab = new double[nrEntries1]; + int i=0; + while(ifile1>>val) + { + fpTab[i] = val; + i++; + } + } + else + { + cout<<"No pT values file open!"<>nrEntries2; + fCorrFactorTab = new double[nrEntries2]; + int i=0; + while(ifile2>>val) + { + fCorrFactorTab[i] = val; + cout<<"fCorrFactorTab: "<0 && pT1<5 && pT2>0 && pT2<5) + { + if(pT1= fpTab[piter] && pT1< fpTab[piter+1]) + { + w1=fCorrFactorTab[piter]; + } + if(pT2>= fpTab[piter] && pT2< fpTab[piter+1]) + { + w2=fCorrFactorTab[piter]; + break; + } + } + } + else if(pT1>pT2) + { + for (int piter = 0 ; piter<200 ; piter++) + { + if(pT2>= fpTab[piter] && pT2< fpTab[piter+1]) + w2=fCorrFactorTab[piter]; + if(pT1>= fpTab[piter] && pT1< fpTab[piter+1]) + { + w1=fCorrFactorTab[piter]; + break; + } + } + } + else //pT1==pT2 + { + for (int piter = 0 ; piter<200 ; piter++) + { + if(pT1>= fpTab[piter] && pT1< fpTab[piter+1]) + { + w1=fCorrFactorTab[piter]; + w2=fCorrFactorTab[piter]; + break; + } + } + } + return w1*w2; + } + else + return 0; + return 0; +} diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.h b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.h new file mode 100644 index 00000000000..567cf451b76 --- /dev/null +++ b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.h @@ -0,0 +1,93 @@ +//////////////////////////////////////////////////////////////////////////////// +// // +// AliFemtoCorrFctnDEtaDPhiCorrections - A correlation function that analyzes // +// two particle correlations with respect to the azimuthal angle (phi) // +// and pseudorapidity (eta) difference // +// // +// Authors: Adam Kisiel Adam.Kisiel@cern.ch // +// // +//////////////////////////////////////////////////////////////////////////////// + +#ifndef ALIFEMTOCORRFCTNDETADPHICORRECTIONS_H +#define ALIFEMTOCORRFCTNDETADPHICORRECTIONS_H + +#include "TH1D.h" +#include "TH2D.h" +#include "THnSparse.h" +#include "TFile.h" +#include "AliFemtoCorrFctn.h" + +class AliFemtoCorrFctnDEtaDPhiCorrections : public AliFemtoCorrFctn { +public: + enum CorrectionType {kNone=0, kPt=1, kEta=2}; + enum ParticleType {kNoCorrection=0, kPion=1, kKaon=2, kProton=3}; + typedef enum CorrectionType ReadCorrectionType; + + AliFemtoCorrFctnDEtaDPhiCorrections(char* title, const int& aPhiBins, const int& aEtaBins); + AliFemtoCorrFctnDEtaDPhiCorrections(const AliFemtoCorrFctnDEtaDPhiCorrections& aCorrFctn); + virtual ~AliFemtoCorrFctnDEtaDPhiCorrections(); + + AliFemtoCorrFctnDEtaDPhiCorrections& operator=(const AliFemtoCorrFctnDEtaDPhiCorrections& aCorrFctn); + + virtual AliFemtoString Report(); + virtual void AddRealPair(AliFemtoPair* aPair); + virtual void AddMixedPair(AliFemtoPair* aPair); + + virtual void Finish(); + void SetDoPtAnalysis(int do2d); + void SetDoCorrections(bool doCorr); + void SetDoCorrectionsHist(CorrectionType doCorr); + double CalculateCorrectionWeight(double pT1, double pT2); + void LoadCorrectionTabFromFile(const char *pTtab, const char *corrTab); + + void WriteHistos(); + virtual TList* GetOutputList(); +private: + + TH2D *fDPhiDEtaNumerator; // Numerator of dEta dPhi function + TH2D *fDPhiDEtaDenominator; // Denominator of dEta dPhi function + + TH1D *fDPhiNumerator; // Numerator of dPhi correlation + TH1D *fDPhiDenominator; // Denominator of dPhi correlation + + TH1D *fDCosNumerator; // Numerator of colinearity correlation + TH1D *fDCosDenominator; // Denominator of colinearity correlation + + int fDoPtAnalysis; // set to 1 to do 2D Pt analysis + + TH2D *fDPhiPtNumerator; // Numerator of dPhi correlation vs. Pt min + TH2D *fDPhiPtDenominator; // Denominator of dPhi correlation vs. Pt min + + TH2D *fDCosPtNumerator; // Numerator of colinearity correlation vs. Pt min + TH2D *fDCosPtDenominator; // Denominator of colinearity correlation vs. Pt min + + TH1D *fPhi; + TH1D *fEta; + + TH2D *fYtYtNumerator; + TH2D *fYtYtDenominator; + + CorrectionType fIfCorrectionHist; + bool fIfCorrection; + THnSparseF *fPtCorrectionsNum; + THnSparseF *fPtCorrectionsDen; + + THnSparseF *fEtaCorrectionsNum; + THnSparseF *fEtaCorrectionsDen; + + double* fCorrFactorTab; + double* fpTab; + ParticleType fPartType; // particle type for calculations of correction factor + + double fphiL; + double fphiT; + + +#ifdef __ROOT__ + ClassDef(AliFemtoCorrFctnDEtaDPhiCorrections, 1) +#endif +}; + + +#endif + diff --git a/PWGCF/PWGCFfemtoscopyUserLinkDef.h b/PWGCF/PWGCFfemtoscopyUserLinkDef.h index 4f0e8bda964..45eb1a39b36 100644 --- a/PWGCF/PWGCFfemtoscopyUserLinkDef.h +++ b/PWGCF/PWGCFfemtoscopyUserLinkDef.h @@ -35,6 +35,7 @@ #pragma link C++ class AliFemtoModelCorrFctnDirectYlm; #pragma link C++ class AliFemtoCorrFctnTPCNcls; #pragma link C++ class AliFemtoCorrFctnDEtaDPhi; +#pragma link C++ class AliFemtoCorrFctnDEtaDPhiCorrections; #pragma link C++ class AliFemtoCutMonitorParticlePtPDG; #pragma link C++ class AliFemtoCutMonitorParticlePtPDGV0; #pragma link C++ class AliFemtoCutMonitorParticleEtCorr; -- 2.43.0