#include <TF2.h>
#include <TH1F.h>
#include <TH2F.h>
+#include <TH3F.h>
#include <TProfile.h>
#include <TFile.h>
// aliroot includes
ClassImp(AliAnalysisTaskJetV2)
AliAnalysisTaskJetV2::AliAnalysisTaskJetV2() : AliAnalysisTaskEmcalJet("AliAnalysisTaskJetV2", kTRUE),
- fDebug(0), fRunToyMC(kFALSE), fLocalInit(0), fAttachToEvent(kTRUE), fFillHistograms(kTRUE), fFillQAHistograms(kTRUE), fReduceBinsXByFactor(-1.), fReduceBinsYByFactor(-1.), fNoEventWeightsForQC(kTRUE), fCentralityClasses(0), fExpectedRuns(0), fExpectedSemiGoodRuns(0), fUserSuppliedV2(0), fUserSuppliedV3(0), fUserSuppliedR2(0), fUserSuppliedR3(0), fTracksCont(0), fClusterCont(0), fJetsCont(0), fLeadingJet(0), fNAcceptedTracks(0), fNAcceptedTracksQCn(0), fFitModulationType(kNoFit), fFitGoodnessTest(kChi2Poisson), fQCRecovery(kTryFit), fUsePtWeight(kTRUE), fUsePtWeightErrorPropagation(kTRUE), fDetectorType(kTPC), fAnalysisType( kCharged), fFitModulationOptions("QWLI"), fRunModeType(kGrid), fDataType(kESD), fCollisionType(kPbPb), fRandom(0), fRunNumber(-1), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fFitControl(0), fMinPvalue(0.01), fMaxPvalue(1), fNameSmallRho(""), fCachedRho(0), fSoftTrackMinPt(0.15), fSoftTrackMaxPt(5.), fSemiGoodJetMinPhi(0.), fSemiGoodJetMaxPhi(4.), fSemiGoodTrackMinPhi(0.), fSemiGoodTrackMaxPhi(4.), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fHistPvalueCDFROOT(0), fHistPvalueCDFROOTCent(0), fHistChi2ROOTCent(0), fHistPChi2Root(0), fHistPvalueCDF(0), fHistPvalueCDFCent(0), fHistChi2Cent(0), fHistPChi2(0), fHistKolmogorovTest(0), fHistKolmogorovTestCent(0), fHistPKolmogorov(0), fHistRhoStatusCent(0), fHistUndeterminedRunQA(0), fMinDisanceRCtoLJ(0), fMaxCones(-1), fExcludeLeadingJetsFromFit(1.), fRebinSwapHistoOnTheFly(kTRUE), fPercentageOfFits(10.), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfV2(0), fProfV2Cumulant(0), fProfV3(0), fProfV3Cumulant(0), fHistPsiControl(0), fHistPsiSpread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiVZERO(0), fHistPsiTPC(0), fHistPsiVZEROAV0M(0), fHistPsiVZEROCV0M(0), fHistPsiVZEROVV0M(0), fHistPsiTPCiV0M(0), fHistPsiVZEROATRK(0), fHistPsiVZEROCTRK(0), fHistPsiVZEROTRK(0), fHistPsiTPCTRK(0), fHistRhoVsMult(0), fHistRhoVsCent(0), fHistRhoAVsMult(0), fHistRhoAVsCent(0), fVZEROgainEqualization(0x0), fVZEROgainEqualizationPerRing(kFALSE), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0), fOADB(0x0)
+ fDebug(0), fRunToyMC(kFALSE), fLocalInit(0), fAttachToEvent(kTRUE), fFillHistograms(kTRUE), fFillQAHistograms(kTRUE), fReduceBinsXByFactor(-1.), fReduceBinsYByFactor(-1.), fNoEventWeightsForQC(kTRUE), fCentralityClasses(0), fExpectedRuns(0), fExpectedSemiGoodRuns(0), fUserSuppliedV2(0), fUserSuppliedV3(0), fUserSuppliedR2(0), fUserSuppliedR3(0), fTracksCont(0), fClusterCont(0), fJetsCont(0), fLeadingJet(0), fLeadingJetAfterSub(0), fNAcceptedTracks(0), fNAcceptedTracksQCn(0), fFitModulationType(kNoFit), fFitGoodnessTest(kChi2Poisson), fQCRecovery(kTryFit), fUsePtWeight(kTRUE), fUsePtWeightErrorPropagation(kTRUE), fDetectorType(kVZEROComb), fAnalysisType(kCharged), fFitModulationOptions("QWLI"), fRunModeType(kGrid), fDataType(kESD), fCollisionType(kPbPb), fRandom(0), fRunNumber(-1), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fFitControl(0), fMinPvalue(0.01), fMaxPvalue(1), fNameSmallRho(""), fCachedRho(0), fSoftTrackMinPt(0.15), fSoftTrackMaxPt(5.), fSemiGoodJetMinPhi(0.), fSemiGoodJetMaxPhi(4.), fSemiGoodTrackMinPhi(0.), fSemiGoodTrackMaxPhi(4.), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fHistPvalueCDFROOT(0), fHistPvalueCDFROOTCent(0), fHistChi2ROOTCent(0), fHistPChi2Root(0), fHistPvalueCDF(0), fHistPvalueCDFCent(0), fHistChi2Cent(0), fHistPChi2(0), fHistKolmogorovTest(0), fHistKolmogorovTestCent(0), fHistPKolmogorov(0), fHistRhoStatusCent(0), fHistUndeterminedRunQA(0), fMinDisanceRCtoLJ(0), fMaxCones(-1), fExcludeLeadingJetsFromFit(1.), fRebinSwapHistoOnTheFly(kTRUE), fPercentageOfFits(10.), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfV2(0), fProfV2Cumulant(0), fProfV3(0), fProfV3Cumulant(0), fHistPsiControl(0), fHistPsiSpread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiVZERO(0), fHistPsiTPC(0), fHistPsiVZEROAV0M(0), fHistPsiVZEROCV0M(0), fHistPsiVZEROVV0M(0), fHistPsiTPCV0M(0), fHistPsiVZEROATRK(0), fHistPsiVZEROCTRK(0), fHistPsiVZEROTRK(0), fHistPsiTPCTRK(0), fHistRhoVsMult(0), fHistRhoVsCent(0), fHistRhoAVsMult(0), fHistRhoAVsCent(0), fVZEROgainEqualization(0x0), fVZEROgainEqualizationPerRing(kFALSE), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0), fOADB(0x0)
{
for(Int_t i(0); i < 10; i++) {
fProfV2Resolution[i] = 0;
fHistClusterPt[i] = 0;
fHistClusterEtaPhi[i] = 0;
fHistClusterEtaPhiWeighted[i] = 0;
+ fHistPsiTPCLeadingJet[i] = 0;
+ fHistPsiVZEROALeadingJet[i] = 0;
+ fHistPsiVZEROCLeadingJet[i] = 0;
+ fHistPsiVZEROCombLeadingJet[i] = 0;
+ fHistPsi2Correlation[i] = 0;
+ fHistLeadingJetBackground[i] = 0;
fHistRhoPackage[i] = 0;
fHistRho[i] = 0;
fHistRCPhiEta[i] = 0;
}
//_____________________________________________________________________________
AliAnalysisTaskJetV2::AliAnalysisTaskJetV2(const char* name, runModeType type) : AliAnalysisTaskEmcalJet(name, kTRUE),
- fDebug(0), fRunToyMC(kFALSE), fLocalInit(0), fAttachToEvent(kTRUE), fFillHistograms(kTRUE), fFillQAHistograms(kTRUE), fReduceBinsXByFactor(-1.), fReduceBinsYByFactor(-1.), fNoEventWeightsForQC(kTRUE), fCentralityClasses(0), fExpectedRuns(0), fExpectedSemiGoodRuns(0), fUserSuppliedV2(0), fUserSuppliedV3(0), fUserSuppliedR2(0), fUserSuppliedR3(0), fTracksCont(0), fClusterCont(0), fJetsCont(0), fLeadingJet(0), fNAcceptedTracks(0), fNAcceptedTracksQCn(0), fFitModulationType(kNoFit), fFitGoodnessTest(kChi2Poisson), fQCRecovery(kTryFit), fUsePtWeight(kTRUE), fUsePtWeightErrorPropagation(kTRUE), fDetectorType(kTPC), fAnalysisType(kCharged), fFitModulationOptions("QWLI"), fRunModeType(type), fDataType(kESD), fCollisionType(kPbPb), fRandom(0), fRunNumber(-1), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fFitControl(0), fMinPvalue(0.01), fMaxPvalue(1), fNameSmallRho(""), fCachedRho(0), fSoftTrackMinPt(0.15), fSoftTrackMaxPt(5.), fSemiGoodJetMinPhi(0.), fSemiGoodJetMaxPhi(4.), fSemiGoodTrackMinPhi(0.), fSemiGoodTrackMaxPhi(4.), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fHistPvalueCDFROOT(0), fHistPvalueCDFROOTCent(0), fHistChi2ROOTCent(0), fHistPChi2Root(0), fHistPvalueCDF(0), fHistPvalueCDFCent(0), fHistChi2Cent(0), fHistPChi2(0), fHistKolmogorovTest(0), fHistKolmogorovTestCent(0), fHistPKolmogorov(0), fHistRhoStatusCent(0), fHistUndeterminedRunQA(0), fMinDisanceRCtoLJ(0), fMaxCones(-1), fExcludeLeadingJetsFromFit(1.), fRebinSwapHistoOnTheFly(kTRUE), fPercentageOfFits(10.), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfV2(0), fProfV2Cumulant(0), fProfV3(0), fProfV3Cumulant(0), fHistPsiControl(0), fHistPsiSpread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiVZERO(0), fHistPsiTPC(0), fHistPsiVZEROAV0M(0), fHistPsiVZEROCV0M(0), fHistPsiVZEROVV0M(0), fHistPsiTPCiV0M(0), fHistPsiVZEROATRK(0), fHistPsiVZEROCTRK(0), fHistPsiVZEROTRK(0), fHistPsiTPCTRK(0), fHistRhoVsMult(0), fHistRhoVsCent(0), fHistRhoAVsMult(0), fHistRhoAVsCent(0), fVZEROgainEqualization(0x0), fVZEROgainEqualizationPerRing(kFALSE), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0), fOADB(0x0)
+ fDebug(0), fRunToyMC(kFALSE), fLocalInit(0), fAttachToEvent(kTRUE), fFillHistograms(kTRUE), fFillQAHistograms(kTRUE), fReduceBinsXByFactor(-1.), fReduceBinsYByFactor(-1.), fNoEventWeightsForQC(kTRUE), fCentralityClasses(0), fExpectedRuns(0), fExpectedSemiGoodRuns(0), fUserSuppliedV2(0), fUserSuppliedV3(0), fUserSuppliedR2(0), fUserSuppliedR3(0), fTracksCont(0), fClusterCont(0), fJetsCont(0), fLeadingJet(0), fLeadingJetAfterSub(0), fNAcceptedTracks(0), fNAcceptedTracksQCn(0), fFitModulationType(kNoFit), fFitGoodnessTest(kChi2Poisson), fQCRecovery(kTryFit), fUsePtWeight(kTRUE), fUsePtWeightErrorPropagation(kTRUE), fDetectorType(kVZEROComb), fAnalysisType(kCharged), fFitModulationOptions("QWLI"), fRunModeType(type), fDataType(kESD), fCollisionType(kPbPb), fRandom(0), fRunNumber(-1), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fFitControl(0), fMinPvalue(0.01), fMaxPvalue(1), fNameSmallRho(""), fCachedRho(0), fSoftTrackMinPt(0.15), fSoftTrackMaxPt(5.), fSemiGoodJetMinPhi(0.), fSemiGoodJetMaxPhi(4.), fSemiGoodTrackMinPhi(0.), fSemiGoodTrackMaxPhi(4.), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fHistPvalueCDFROOT(0), fHistPvalueCDFROOTCent(0), fHistChi2ROOTCent(0), fHistPChi2Root(0), fHistPvalueCDF(0), fHistPvalueCDFCent(0), fHistChi2Cent(0), fHistPChi2(0), fHistKolmogorovTest(0), fHistKolmogorovTestCent(0), fHistPKolmogorov(0), fHistRhoStatusCent(0), fHistUndeterminedRunQA(0), fMinDisanceRCtoLJ(0), fMaxCones(-1), fExcludeLeadingJetsFromFit(1.), fRebinSwapHistoOnTheFly(kTRUE), fPercentageOfFits(10.), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfV2(0), fProfV2Cumulant(0), fProfV3(0), fProfV3Cumulant(0), fHistPsiControl(0), fHistPsiSpread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiVZERO(0), fHistPsiTPC(0), fHistPsiVZEROAV0M(0), fHistPsiVZEROCV0M(0), fHistPsiVZEROVV0M(0), fHistPsiTPCV0M(0), fHistPsiVZEROATRK(0), fHistPsiVZEROCTRK(0), fHistPsiVZEROTRK(0), fHistPsiTPCTRK(0), fHistRhoVsMult(0), fHistRhoVsCent(0), fHistRhoAVsMult(0), fHistRhoAVsCent(0), fVZEROgainEqualization(0x0), fVZEROgainEqualizationPerRing(kFALSE), fChi2A(0x0), fChi2C(0x0), fChi3A(0x0), fChi3C(0x0), fOADB(0x0)
{
for(Int_t i(0); i < 10; i++) {
fProfV2Resolution[i] = 0;
fHistClusterPt[i] = 0;
fHistClusterEtaPhi[i] = 0;
fHistClusterEtaPhiWeighted[i] = 0;
+ fHistPsiTPCLeadingJet[i] = 0;
+ fHistPsiVZEROALeadingJet[i] = 0;
+ fHistPsiVZEROCLeadingJet[i] = 0;
+ fHistPsiVZEROCombLeadingJet[i] = 0;
+ fHistPsi2Correlation[i] = 0;
+ fHistLeadingJetBackground[i] = 0;
fHistRhoPackage[i] = 0;
fHistRho[i] = 0;
fHistRCPhiEta[i] = 0;
// no need to change rho or acceptance for 10h, so we're done
return kTRUE;
} break;
+ case kJetFlowMC : {
+ return kTRUE;
+ } break;
default : {
if(fDebug > 0) printf(" checking runnumber to adjust acceptance on the fly \n");
} break;
return histogram;
}
//_____________________________________________________________________________
-TH2F* AliAnalysisTaskJetV2::BookTH2F(const char* name, const char* x, const char*y, Int_t binsx, Double_t minx, Double_t maxx, Int_t binsy, Double_t miny, Double_t maxy, Int_t c, Bool_t append)
+TH2F* AliAnalysisTaskJetV2::BookTH2F(const char* name, const char* x, const char* y, Int_t binsx, Double_t minx, Double_t maxx, Int_t binsy, Double_t miny, Double_t maxy, Int_t c, Bool_t append)
{
// book a TH2F and connect it to the output container
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
return histogram;
}
//_____________________________________________________________________________
+TH3F* AliAnalysisTaskJetV2::BookTH3F(const char* name, const char* x, const char* y, const char* z, Int_t binsx, Double_t minx, Double_t maxx, Int_t binsy, Double_t miny, Double_t maxy, Int_t binsz, Double_t minz, Double_t maxz, Int_t c, Bool_t append)
+{
+ // book a TH2F and connect it to the output container
+ if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ if(fReduceBinsXByFactor > 0 ) {
+ binsx = TMath::Nint(binsx/fReduceBinsXByFactor);
+ binsy = TMath::Nint(binsy/fReduceBinsXByFactor);
+ binsz = TMath::Nint(binsz/fReduceBinsXByFactor);
+ }
+ if(!fOutputList) return 0x0;
+ TString title(name);
+ if(c!=-1) { // format centrality dependent histograms accordingly
+ name = Form("%s_%i", name, c);
+ title += Form("_%i-%i", (int)fCentralityClasses->At(c), (int)(fCentralityClasses->At((1+c))));
+ }
+ title += Form(";%s;%s;%s", x, y, z);
+ TH3F* histogram = new TH3F(name, title.Data(), binsx, minx, maxx, binsy, miny, maxy, binsz, minz, maxz);
+ histogram->Sumw2();
+ if(append) fOutputList->Add(histogram);
+ return histogram;
+}
+//_____________________________________________________________________________
void AliAnalysisTaskJetV2::UserCreateOutputObjects()
{
// create output objects. also initializes some default values in case they aren't
fHistCentrality = BookTH1F("fHistCentrality", "centrality", 102, -2, 100);
fHistVertexz = BookTH1F("fHistVertexz", "vertex z (cm)", 100, -12, 12);
+ // for some histograms adjust the bounds according to analysis acceptance
+ Double_t etaMin(-1.), etaMax(1.), phiMin(0.), phiMax(TMath::TwoPi());
+ switch (fAnalysisType) {
+ case kFull : {
+ etaMin = -.7;
+ etaMax = .7;
+ phiMin = 1.405;
+ phiMax = 3.135;
+ } break;
+ default : break;
+ }
+
// pico track and emcal cluster kinematics
for(Int_t i(0); i < fCentralityClasses->GetSize()-1; i++) {
fHistPicoTrackPt[i] = BookTH1F("fHistPicoTrackPt", "p_{t} [GeV/c]", 100, 0, 100, i);
fHistPicoCat3[i] = BookTH2F("fHistPicoCat3", "#eta", "#phi", 50, -1, 1, 50, 0, TMath::TwoPi(), i);
if(fAnalysisType == AliAnalysisTaskJetV2::kFull) {
fHistClusterPt[i] = BookTH1F("fHistClusterPt", "p_{t} [GeV/c]", 100, 0, 100, i);
- fHistClusterEtaPhi[i] = BookTH2F("fHistClusterEtaPhi", "#eta", "#phi", 100, -1., 1., 100, 0, TMath::TwoPi(), i);
- fHistClusterEtaPhiWeighted[i] = BookTH2F("fHistClusterEtaPhiWeighted", "#eta", "#phi", 100, -1., 1., 100, 0, TMath::TwoPi(), i);
+ fHistClusterEtaPhi[i] = BookTH2F("fHistClusterEtaPhi", "#eta", "#phi", 100, etaMax, etaMax, 100, phiMin, phiMax, i);
+ fHistClusterEtaPhiWeighted[i] = BookTH2F("fHistClusterEtaPhiWeighted", "#eta", "#phi", 100, etaMin, etaMax, 100, phiMin, phiMax, i);
}
+ fHistPsiTPCLeadingJet[i] = BookTH3F("fHistPsiTPCLeadingJet", "p_{t} [GeV/c]", "#Psi_{TPC}", "#varphi_{jet}", 70, 0, 210, 50, -1.*TMath::Pi()/2., TMath::Pi()/2., 50, phiMin, phiMax, i);
+ fHistPsiVZEROALeadingJet[i] = BookTH3F("fHistPsiVZEROALeadingJet", "p_{t} [GeV/c]", "#Psi_{VZEROA}", "#varphi_{jet}", 70, 0, 210, 50, -1.*TMath::Pi()/2., TMath::Pi()/2., 50, phiMin, phiMax, i);
+ fHistPsiVZEROCLeadingJet[i] = BookTH3F("fHistPsiVZEROCLeadingJet", "p_{t} [GeV/c]", "#Psi_{VZEROC}", "#varphi_{jet}", 70, 0, 210, 50, -1.*TMath::Pi()/2., TMath::Pi()/2., 50, phiMin, phiMax, i);
+ fHistPsiVZEROCombLeadingJet[i] = BookTH3F("fHistPsiVZEROCombLeadingJet", "p_{t} [GeV/c]", "#Psi_{VZEROComb}", "#varphi_{jet}", 70, 0, 210, 50, -1.*TMath::Pi()/2., TMath::Pi()/2., 50, phiMin, phiMax, i);
+ fHistPsi2Correlation[i] = BookTH3F("fHistPsi2Correlation", "#Psi_{TPC}", "#Psi_{VZEROA}", "#Psi_{VZEROC}", 20, -1.*TMath::Pi()/2., TMath::Pi()/2., 20, -1.*TMath::Pi()/2., TMath::Pi()/2., 20, -1.*TMath::Pi()/2., TMath::Pi()/2., i);
+ fHistLeadingJetBackground[i] = BookTH2F("fHistLeadingJetBackground", "#Delta #eta (leading jet with, without sub)", "Delta #varphi (leading jet with, without sub)", 50, -2., 2, 50, 0., TMath::TwoPi(), i);
}
}
fHistPsiVZEROAV0M = BookTH2F("fHistPsiVZEROAV0M", "V0M", "#Psi_{2, VZEROA}", 60, 0, 60, 40, -.5*TMath::Pi(), .5*TMath::Pi());
fHistPsiVZEROCV0M = BookTH2F("fHistPsiVZEROCV0M", "V0M", "#Psi_{2, VZEROC}", 60, 0, 60, 40, -.5*TMath::Pi(), .5*TMath::Pi());
fHistPsiVZEROVV0M = BookTH2F("fHistPsiVZEROV0M", "V0M", "#Psi_{2, VZERO}", 60, 0, 60, 40, -.5*TMath::Pi(), .5*TMath::Pi());
- fHistPsiTPCiV0M = BookTH2F("fHistPsiTPCV0M", "V0M", "#Psi_{2, TRK}", 60, 0, 60, 40, -.5*TMath::Pi(), .5*TMath::Pi());
+ fHistPsiTPCV0M = BookTH2F("fHistPsiTPCV0M", "V0M", "#Psi_{2, TRK}", 60, 0, 60, 40, -.5*TMath::Pi(), .5*TMath::Pi());
fHistPsiVZEROATRK = BookTH2F("fHistPsiVZEROATRK", "TRK", "#Psi_{2, VZEROA}", 60, 0, 60, 40, -.5*TMath::Pi(), .5*TMath::Pi());
fHistPsiVZEROCTRK = BookTH2F("fHistPsiVZEROCTRK", "TRK", "#Psi_{2, VZEROC}", 60, 0, 60, 40, -.5*TMath::Pi(), .5*TMath::Pi());
fHistPsiVZEROTRK = BookTH2F("fHistPsiVZEROTRK", "TRK", "#Psi_{2, VZERO}", 60, 0, 60, 40, -.5*TMath::Pi(), .5*TMath::Pi());
break;
case kVZEROComb : detector+="VZEROComb";
break;
+ case kFixedEP : detector+="FixedEP";
+ break;
default: break;
}
// delta pt distributions
for(Int_t i(0); i < fCentralityClasses->GetSize()-1; i ++) {
- if(fFillQAHistograms) fHistRCPhiEta[i] = BookTH2F("fHistRCPhiEta", "#phi (RC)", "#eta (RC)", 40, 0, TMath::TwoPi(), 40, -1, 1, i);
+ if(fFillQAHistograms) fHistRCPhiEta[i] = BookTH2F("fHistRCPhiEta", "#phi (RC)", "#eta (RC)", 40, phiMin, phiMax, 40, etaMin, etaMax, i);
fHistRhoVsRCPt[i] = BookTH2F("fHistRhoVsRCPt", "p_{t} (RC) [GeV/c]", "#rho * A (RC) [GeV/c]", 100, 0, 300, 100, 0, 350, i);
fHistRCPt[i] = BookTH1F("fHistRCPt", "p_{t} (RC) [GeV/c]", 130, -20, 150, i);
- if(fFillQAHistograms) fHistRCPhiEtaExLJ[i] = BookTH2F("fHistRCPhiEtaExLJ", "#phi (RC)", "#eta (RC)", 40, 0, TMath::TwoPi(), 40, -1, 1, i);
+ if(fFillQAHistograms) fHistRCPhiEtaExLJ[i] = BookTH2F("fHistRCPhiEtaExLJ", "#phi (RC)", "#eta (RC)", 40, phiMin, phiMax, 40, etaMin, etaMax, i);
fHistDeltaPtDeltaPhi2[i] = BookTH2F("fHistDeltaPtDeltaPhi2", Form("#phi - #Psi_{2, %s}", detector.Data()), "#delta p_{t} [GeV/c]", 40, 0, TMath::Pi(), 400, -70, 130, i);
fHistDeltaPtDeltaPhi2Rho0[i] = BookTH2F("fHistDeltaPtDeltaPhi2Rho0", Form("#phi - #Psi_{2, %s}", detector.Data()), "#delta p_{t} [GeV/c]", 40, 0, TMath::Pi(), 400, -70, 130, i);
fHistRhoVsRCPtExLJ[i] = BookTH2F("fHistRhoVsRCPtExLJ", "p_{t} (RC) [GeV/c]", "#rho * A (RC) [GeV/c]", 100, 0, 300, 100, 0, 350, i);
// jet histograms (after kinematic cuts)
fHistJetPtRaw[i] = BookTH1F("fHistJetPtRaw", "p_{t, jet} RAW [GeV/c]", 200, -50, 150, i);
fHistJetPt[i] = BookTH1F("fHistJetPt", "p_{t, jet} [GeV/c]", 350, -100, 250, i);
- if(fFillQAHistograms) fHistJetEtaPhi[i] = BookTH2F("fHistJetEtaPhi", "#eta", "#phi", 100, -1, 1, 100, 0, TMath::TwoPi(), i);
+ if(fFillQAHistograms) fHistJetEtaPhi[i] = BookTH2F("fHistJetEtaPhi", "#eta", "#phi", 100, etaMin, etaMax, 100, phiMin, phiMax, i);
fHistJetPtArea[i] = BookTH2F("fHistJetPtArea", "p_{t, jet} [GeV/c]", "Area", 175, -100, 250, 30, 0, 0.9, i);
- fHistJetPtEta[i] = BookTH2F("fHistJetPtEta", "p_{t, jet} [GeV/c]", "Eta", 175, -100, 250, 30, -0.9, 0.9, i);
- fHistJetPtConstituents[i] = BookTH2F("fHistJetPtConstituents", "p_{t, jet} [GeV/c]", "Area", 350, -100, 250, 60, 0, 150, i);
- fHistJetEtaRho[i] = BookTH2F("fHistJetEtaRho", "#eta", "#rho", 100, -1, 1, 100, 0, 300, i);
+ fHistJetPtEta[i] = BookTH2F("fHistJetPtEta", "p_{t, jet} [GeV/c]", "Eta", 175, -100, 250, 30, etaMin, etaMax, i);
+ fHistJetPtConstituents[i] = BookTH2F("fHistJetPtConstituents", "p_{t, jet} [GeV/c]", "no. of constituents", 350, -100, 250, 60, 0, 150, i);
+ fHistJetEtaRho[i] = BookTH2F("fHistJetEtaRho", "#eta", "#rho", 100, etaMin, etaMax, 100, 0, 300, i);
// in plane and out of plane spectra
fHistJetPsi2Pt[i] = BookTH2F("fHistJetPsi2Pt", Form("#phi_{jet} - #Psi_{2, %s}", detector.Data()), "p_{t, jet} [GeV/c]", 40, 0., TMath::Pi(), 350, -100, 250, i);
fHistJetPsi2PtRho0[i] = BookTH2F("fHistJetPsi2PtRho0", Form("#phi_{jet} - #Psi_{2, %s}", detector.Data()), "p_{t, jet} [GeV/c]", 40, 0., TMath::Pi(), 350, -100, 250, i);
{
// called for each accepted event (call made from user exec of parent class)
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
- if(!fTracks||!fJets||!fRho) return kFALSE;
+ if(!fTracks||!fJets||!fRho) {
+ if(!fTracks) printf(" > Failed to retrieve fTracks ! < \n");
+ if(!fJets) printf(" > Failed to retrieve fJets ! < \n");
+ if(!fRho) printf(" > Failed to retrieve fRho ! < \n");
+ return kFALSE;
+ }
if(!fLocalInit) fLocalInit = InitializeAnalysis();
// reject the event if expected data is missing
if(!PassesCuts(InputEvent())) return kFALSE;
- fLeadingJet = GetLeadingJet(); // store the leading jet
+ // cache the leading jet within acceptance
+ fLeadingJet = GetLeadingJet();
// set the rho value
fLocalRho->SetVal(fRho->GetVal());
+ // place holder arrays for the event planes
+ //
// [0][0] psi2a [1,0] psi2c
// [0][1] psi3a [1,1] psi3c
Double_t vzero[2][2];
- CalculateEventPlaneVZERO(vzero);
/* for the combined vzero event plane
* [0] psi2 [1] psi3
* not fully implmemented yet, use with caution ! */
Double_t vzeroComb[2];
- CalculateEventPlaneCombinedVZERO(vzeroComb);
// [0] psi2 [1] psi3
Double_t tpc[2];
- CalculateEventPlaneTPC(tpc);
+ // evaluate the actual event planes
+ switch (fDetectorType) {
+ case kFixedEP : {
+ // for fixed, fix all ep's to default values
+ tpc[0] = 0.; tpc[1] = 1.;
+ vzero[0][0] = 0.; vzero[0][1] = 1.;
+ vzero[1][0] = 0.; vzero[1][1] = 1.;
+ vzeroComb[0] = 0.; vzeroComb[1] = 1.;
+ } break;
+ default : {
+ // else grab the actual data
+ CalculateEventPlaneVZERO(vzero);
+ CalculateEventPlaneCombinedVZERO(vzeroComb);
+ CalculateEventPlaneTPC(tpc);
+ } break;
+ }
Double_t psi2(-1), psi3(-1);
// arrays which will hold the fit parameters
switch (fDetectorType) { // determine the detector type for the rho fit
- case kTPC : { psi2 = tpc[0]; psi3 = tpc[1]; } break;
- case kVZEROA : { psi2 = vzero[0][0]; psi3 = vzero[0][1]; } break;
- case kVZEROC : { psi2 = vzero[1][0]; psi3 = vzero[1][1]; } break;
- case kVZEROComb : { psi2 = vzeroComb[0]; psi3 = vzeroComb[1];} break;
+ case kTPC : { psi2 = tpc[0]; psi3 = tpc[1]; } break;
+ case kVZEROA : { psi2 = vzero[0][0]; psi3 = vzero[0][1]; } break;
+ case kVZEROC : { psi2 = vzero[1][0]; psi3 = vzero[1][1]; } break;
+ case kVZEROComb : { psi2 = vzeroComb[0]; psi3 = vzeroComb[1];} break;
+ case kFixedEP : { psi2 = 0.; psi3 = 1.;} break;
default : break;
}
switch (fFitModulationType) { // do the fits
}
// if all went well, update the local rho parameter
fLocalRho->SetLocalRho(fFitModulation);
+ // and only at this point can the leading jet after rho subtraction be evaluated
+ if(fFillQAHistograms) fLeadingJetAfterSub = GetLeadingJet(fLocalRho);
// fill a number of histograms. event qa needs to be filled first as it also determines the runnumber for the track qa
if(fFillQAHistograms) FillQAHistograms(InputEvent());
if(fFillHistograms) FillHistogramsAfterSubtraction(psi2, vzero, vzeroComb, tpc);
} break;
default: break;
}
-
return kTRUE;
}
//_____________________________________________________________________________
+void AliAnalysisTaskJetV2::Exec(Option_t* c)
+{
+ // for stand alone, avoid framework event setup
+ switch (fCollisionType) {
+ case kJetFlowMC : {
+ // need to call ExecOnce as it is not loaded otherwise
+ if(!fLocalRho) AliAnalysisTaskJetV2::ExecOnce();
+ AliAnalysisTaskJetV2::Run();
+ } break;
+ default : {
+ AliAnalysisTaskSE::Exec(c);
+ } break;
+ }
+}
+//_____________________________________________________________________________
Double_t AliAnalysisTaskJetV2::CalculateEventPlaneChi(Double_t res)
{
// return chi for given resolution to combine event plane estimates from two subevents
}
// get the neutral energy (if clusters are provided)
if(clusterCont) {
+ TLorentzVector momentum;
AliVCluster* cluster = clusterCont->GetNextAcceptCluster(0);
while(cluster) {
- TLorentzVector momentum;
cluster->GetMomentum(momentum, const_cast<Double_t*>(fVertex));
Float_t etaClus(momentum.Eta()), phiClus(momentum.Phi());
// get distance from cone
break;
case kVZEROComb : detector+="VZEROComb";
break;
+ case kFixedEP : detector+="FixedEP";
+ break;
default: break;
}
Int_t iTracks(fTracks->GetEntriesFast());
{
// event cuts
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ switch (fCollisionType) {
+ case kJetFlowMC : {
+ fInCentralitySelection = 0;
+ return kTRUE;
+ } break;
+ default : break;
+ }
if(!event || !AliAnalysisTaskEmcal::IsEventSelected()) return kFALSE;
if(TMath::Abs(InputEvent()->GetPrimaryVertex()->GetZ()) > 10.) return kFALSE;
// aod and esd specific checks
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
if(!fClusterCont) return;
Int_t iClusters(fClusterCont->GetNClusters());
+ TLorentzVector clusterLorentzVector;
for(Int_t i(0); i < iClusters; i++) {
AliVCluster* cluster = fClusterCont->GetCluster(i);
if (!PassesCuts(cluster)) continue;
- TLorentzVector clusterLorentzVector;
cluster->GetMomentum(clusterLorentzVector, const_cast<Double_t*>(fVertex));
fHistClusterPt[fInCentralitySelection]->Fill(clusterLorentzVector.Pt());
fHistClusterEtaPhi[fInCentralitySelection]->Fill(clusterLorentzVector.Eta(), clusterLorentzVector.Phi());
//_____________________________________________________________________________
void AliAnalysisTaskJetV2::FillEventPlaneHistograms(Double_t vzero[2][2], Double_t* vzeroComb, Double_t* tpc) const
{
- // fill event plane histograms
+ // fill event plane histograms, only called in qa mode
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fHistPsiControl->Fill(0.5, vzero[0][0]); // vzero a psi2
fHistPsiControl->Fill(1.5, vzero[1][0]); // vzero c psi2
fHistPsiVZEROAV0M->Fill(V0M, vzero[0][0]);
fHistPsiVZEROCV0M->Fill(V0M, vzero[1][0]);
fHistPsiVZEROVV0M->Fill(V0M, vzeroComb[0]);
- fHistPsiTPCiV0M->Fill(V0M, tpc[0]);
+ fHistPsiTPCV0M->Fill(V0M, tpc[0]);
fHistPsiVZEROATRK->Fill(TRK, vzero[0][0]);
fHistPsiVZEROCTRK->Fill(TRK, vzero[1][0]);
fHistPsiVZEROTRK->Fill(TRK, vzeroComb[0]);
fHistPsiTPCTRK->Fill(TRK, tpc[0]);
+ // leading jet vs event plane bias
+ if(fLeadingJet) {
+ Double_t rho(fLocalRho->GetLocalVal(fLeadingJet->Phi(), GetJetContainer()->GetJetRadius(), fLocalRho->GetVal()));
+ Double_t pt(fLeadingJet->Pt() - fLeadingJet->Area()*rho);
+ fHistPsiTPCLeadingJet[fInCentralitySelection]->Fill(pt, tpc[0], fLeadingJet->Phi());
+ fHistPsiVZEROALeadingJet[fInCentralitySelection]->Fill(pt, vzero[0][0], fLeadingJet->Phi());
+ fHistPsiVZEROCLeadingJet[fInCentralitySelection]->Fill(pt, vzero[1][0], fLeadingJet->Phi());
+ fHistPsiVZEROCombLeadingJet[fInCentralitySelection]->Fill(pt, vzeroComb[0], fLeadingJet->Phi());
+ }
+ // correlation of event planes
+ fHistPsi2Correlation[fInCentralitySelection]->Fill(tpc[0], vzero[0][0], vzero[1][0]);
}
//_____________________________________________________________________________
void AliAnalysisTaskJetV2::FillRhoHistograms()
fHistJetPtEta[fInCentralitySelection]->Fill(pt-area*rho, eta);
fHistJetPsi2Pt[fInCentralitySelection]->Fill(PhaseShift(phi-psi2, 2.), pt-area*rho);
fHistJetPsi2PtRho0[fInCentralitySelection]->Fill(PhaseShift(phi-psi2, 2.), pt-area*fLocalRho->GetVal());
- fHistJetPtConstituents[fInCentralitySelection]->Fill(pt-area*rho, jet->Nch());
+ fHistJetPtConstituents[fInCentralitySelection]->Fill(pt-area*rho, jet->GetNumberOfConstituents());
fHistJetEtaRho[fInCentralitySelection]->Fill(eta, pt/area);
}
}
void AliAnalysisTaskJetV2::FillQAHistograms(AliVTrack* vtrack) const
{
// fill qa histograms for pico tracks
- if(fDebug > 1) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
- if(!vtrack) return;
+ if(fDebug > 1) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
+ if(!vtrack) return;
AliPicoTrack* track = static_cast<AliPicoTrack*>(vtrack);
fHistRunnumbersPhi->Fill(fMappedRunNumber, track->Phi());
fHistRunnumbersEta->Fill(fMappedRunNumber, track->Eta());
fHistVertexz->Fill(vevent->GetPrimaryVertex()->GetZ());
fHistCentrality->Fill(fCent);
Int_t runNumber(InputEvent()->GetRunNumber());
- for(fMappedRunNumber = 0; fMappedRunNumber < fExpectedRuns->GetSize()+1; fMappedRunNumber++) {
+ if(fLeadingJet && fLeadingJetAfterSub) fHistLeadingJetBackground[fInCentralitySelection]->Fill(TMath::Abs(fLeadingJet->Eta()-fLeadingJetAfterSub->Eta()), PhaseShift(fLeadingJet->Phi()-fLeadingJetAfterSub->Phi()));
+ for(fMappedRunNumber = 0; fMappedRunNumber < fExpectedRuns->GetSize(); fMappedRunNumber++) {
if(fExpectedRuns->At(fMappedRunNumber) == runNumber) return;
}
- printf("\n > TASK %s CANNOT IDENTIFY RUN - CONFIGURATION COULD BE INCORRECT < \n", GetName());
+ if(fDebug > 0) printf("\n > TASK %s CANNOT IDENTIFY RUN - CONFIGURATION COULD BE INCORRECT < \n", GetName());
}
//_____________________________________________________________________________
void AliAnalysisTaskJetV2::FillAnalysisSummaryHistogram() const
else return 8;
}
//_____________________________________________________________________________
+AliEmcalJet* AliAnalysisTaskJetV2::GetLeadingJet(AliLocalRhoParameter* localRho) {
+ // return pointer to the highest pt jet (before background subtraction) within acceptance
+ // only rudimentary cuts are applied on this level, hence the implementation outside of
+ // the framework
+ Int_t iJets(fJets->GetEntriesFast());
+ Double_t pt(0);
+ AliEmcalJet* leadingJet(0x0);
+ if(!localRho) {
+ for(Int_t i(0); i < iJets; i++) {
+ AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(i));
+ if(!PassesSimpleCuts(jet)) continue;
+ if(jet->Pt() > pt) {
+ leadingJet = jet;
+ pt = leadingJet->Pt();
+ }
+ }
+ return leadingJet;
+ } else {
+ // return leading jet after background subtraction
+ Double_t rho(0);
+ for(Int_t i(0); i < iJets; i++) {
+ AliEmcalJet* jet = static_cast<AliEmcalJet*>(fJets->At(i));
+ if(!PassesSimpleCuts(jet)) continue;
+ rho = localRho->GetLocalVal(jet->Phi(), GetJetContainer()->GetJetRadius(), localRho->GetVal());
+ if((jet->Pt()-jet->Area()*rho) > pt) {
+ leadingJet = jet;
+ pt = (leadingJet->Pt()-jet->Area()*rho);
+ }
+ }
+ return leadingJet;
+
+ }
+ return 0x0;
+}
+//_____________________________________________________________________________