ClassImp(AliAnalysisTaskRhoVnModulation)
AliAnalysisTaskRhoVnModulation::AliAnalysisTaskRhoVnModulation() : AliAnalysisTaskEmcalJet("AliAnalysisTaskRhoVnModulation", kTRUE),
- fDebug(0), fInitialized(0), fFillQAHistograms(kTRUE), fFitModulationType(kNoFit), fDetectorType(kTPC), fFitModulationOptions("Q"), fRunModeType(kGrid), fDataType(kESD), fRandom(0), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fNameJetClones(0), fNamePicoTrackClones(0), fNameRho(0), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fMinDisanceRCtoLJ(0), fRandomConeRadius(0.4), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfVn(0), fHistPsi2(0), fHistPsi2Spread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiTPC(0),
+ fDebug(0), fInitialized(0), fFillQAHistograms(kTRUE), fCentralityClasses(0), fFitModulationType(kNoFit), fDetectorType(kTPC), fFitModulationOptions("Q"), fRunModeType(kGrid), fDataType(kESD), fRandom(0), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fMinPvalue(0), fNameJetClones(0), fNamePicoTrackClones(0), fNameRho(0), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fMinDisanceRCtoLJ(0), fRandomConeRadius(0.4), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfVn(0), fHistPsi2(0), fHistPsi2Spread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiTPC(0),
fHistRhoVsMult(0), fHistRhoVsCent(0), fHistRhoAVsMult(0), fHistRhoAVsCent(0) {
for(Int_t i(0); i < 10; i++) {
fHistPicoTrackPt[i] = 0;
- fHistPicoTrackPhi[i] = 0;
- fHistPicoTrackEta[i] = 0;
fHistPicoCat1[i] = 0;
fHistPicoCat2[i] = 0;
fHistPicoCat3[i] = 0;
fHistRCPhiEta[i] = 0;
fHistRhoVsRCPt[i] = 0;
fHistRCPt[i] = 0;
- fHistDeltaPtRC[i] = 0;
+ fHistDeltaPtDeltaPhi[i] = 0;
fHistRCPhiEtaExLJ[i] = 0;
fHistRhoVsRCPtExLJ[i] = 0;
fHistRCPtExLJ[i] = 0;
- fHistDeltaPtRCExLJ[i] = 0;
+ fHistDeltaPtDeltaPhiExLJ[i] = 0;
fHistRCPhiEtaRand[i] = 0;
fHistRhoVsRCPtRand[i] = 0;
fHistRCPtRand[i] = 0;
- fHistDeltaPtRCRand[i] = 0;
+ fHistDeltaPtDeltaPhiRand[i] = 0;
fHistJetPtRaw[i] = 0;
fHistJetPt[i] = 0;
fHistJetEtaPhi[i] = 0;
fHistJetPtArea[i] = 0;
fHistJetPtConstituents[i] = 0;
- fHistJetPtInPlaneVZEROA[i] = 0;
- fHistJetPtOutPlaneVZEROA[i] = 0;
- fHistJetPtMidPlaneVZEROA[i] = 0;
- fHistJetPtInPlaneVZEROC[i] = 0;
- fHistJetPtOutPlaneVZEROC[i] = 0;
- fHistJetPtMidPlaneVZEROC[i] = 0;
- fHistJetPtInPlaneTPC[i] = 0;
- fHistJetPtOutPlaneTPC[i] = 0;
- fHistJetPtMidPlaneTPC[i] = 0;
fHistJetPsiTPCPt[i] = 0;
fHistJetPsiVZEROAPt[i] = 0;
fHistJetPsiVZEROCPt[i] = 0;
}
//_____________________________________________________________________________
AliAnalysisTaskRhoVnModulation::AliAnalysisTaskRhoVnModulation(const char* name, runModeType type) : AliAnalysisTaskEmcalJet(name, kTRUE),
- fDebug(0), fInitialized(0), fFillQAHistograms(kTRUE), fFitModulationType(kNoFit), fDetectorType(kTPC), fFitModulationOptions("Q"), fRunModeType(type), fDataType(kESD), fRandom(0), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fNameJetClones(0), fNamePicoTrackClones(0), fNameRho(0), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fMinDisanceRCtoLJ(0), fRandomConeRadius(0.4), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfVn(0), fHistPsi2(0), fHistPsi2Spread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiTPC(0),
+ fDebug(0), fInitialized(0), fFillQAHistograms(kTRUE), fCentralityClasses(0), fFitModulationType(kNoFit), fDetectorType(kTPC), fFitModulationOptions("Q"), fRunModeType(type), fDataType(kESD), fRandom(0), fMappedRunNumber(0), fInCentralitySelection(-1), fFitModulation(0), fMinPvalue(0), fNameJetClones(0), fNamePicoTrackClones(0), fNameRho(0), fAbsVertexZ(10), fHistCentrality(0), fHistVertexz(0), fHistRunnumbersPhi(0), fHistRunnumbersEta(0), fMinDisanceRCtoLJ(0), fRandomConeRadius(0.4), fOutputList(0), fOutputListGood(0), fOutputListBad(0), fHistAnalysisSummary(0), fHistSwap(0), fProfVn(0), fHistPsi2(0), fHistPsi2Spread(0), fHistPsiVZEROA(0), fHistPsiVZEROC(0), fHistPsiTPC(0),
fHistRhoVsMult(0), fHistRhoVsCent(0), fHistRhoAVsMult(0), fHistRhoAVsCent(0) {
for(Int_t i(0); i < 10; i++) {
fHistPicoTrackPt[i] = 0;
- fHistPicoTrackPhi[i] = 0;
- fHistPicoTrackEta[i] = 0;
fHistPicoCat1[i] = 0;
fHistPicoCat2[i] = 0;
fHistPicoCat3[i] = 0;
fHistRCPhiEta[i] = 0;
fHistRhoVsRCPt[i] = 0;
fHistRCPt[i] = 0;
- fHistDeltaPtRC[i] = 0;
+ fHistDeltaPtDeltaPhi[i] = 0;
fHistRCPhiEtaExLJ[i] = 0;
fHistRhoVsRCPtExLJ[i] = 0;
fHistRCPtExLJ[i] = 0;
- fHistDeltaPtRCExLJ[i] = 0;
+ fHistDeltaPtDeltaPhiExLJ[i] = 0;
fHistRCPhiEtaRand[i] = 0;
fHistRhoVsRCPtRand[i] = 0;
fHistRCPtRand[i] = 0;
- fHistDeltaPtRCRand[i] = 0;
+ fHistDeltaPtDeltaPhiRand[i] = 0;
fHistJetPtRaw[i] = 0;
fHistJetPt[i] = 0;
fHistJetEtaPhi[i] = 0;
fHistJetPtArea[i] = 0;
fHistJetPtConstituents[i] = 0;
- fHistJetPtInPlaneVZEROA[i] = 0;
- fHistJetPtOutPlaneVZEROA[i] = 0;
- fHistJetPtMidPlaneVZEROA[i] = 0;
- fHistJetPtInPlaneVZEROC[i] = 0;
- fHistJetPtOutPlaneVZEROC[i] = 0;
- fHistJetPtMidPlaneVZEROC[i] = 0;
- fHistJetPtInPlaneTPC[i] = 0;
- fHistJetPtOutPlaneTPC[i] = 0;
- fHistJetPtMidPlaneTPC[i] = 0;
fHistJetPsiTPCPt[i] = 0;
fHistJetPsiVZEROAPt[i] = 0;
fHistJetPsiVZEROCPt[i] = 0;
AliAnalysisTaskRhoVnModulation::~AliAnalysisTaskRhoVnModulation()
{
// destructor
- if(fOutputList) delete fOutputList;
- if(fOutputListGood) delete fOutputListGood;
- if(fOutputListBad) delete fOutputListBad;
- if(fFitModulation) delete fFitModulation;
- if(fHistSwap) delete fHistSwap;
+ if(fOutputList) delete fOutputList;
+ if(fOutputListGood) delete fOutputListGood;
+ if(fOutputListBad) delete fOutputListBad;
+ if(fFitModulation) delete fFitModulation;
+ if(fHistSwap) delete fHistSwap;
+ if(fCentralityClasses) delete fCentralityClasses;
}
//_____________________________________________________________________________
Bool_t AliAnalysisTaskRhoVnModulation::InitializeAnalysis()
fFitModulation->FixParameter(1, 1.); // constant
fFitModulation->FixParameter(2, 3.); // constant
} break;
- case kCombined : {
- SetModulationFit(new TF1("fit_kCombined", "[0]*([1]+[2]*([3]*TMath::Cos([2]*(x-[4]))+[7]*TMath::Cos([5]*(x-[6]))))"));
+ default : { // for the combined fit and the 'direct fourier series' we use v2 and v3
+ SetModulationFit(new TF1("fit_kCombined", "[0]*([1]+[2]*([3]*TMath::Cos([2]*(x-[4]))+[7]*TMath::Cos([5]*(x-[6]))))", 0, TMath::TwoPi()));
fFitModulation->SetParameter(0, 0.); // normalization
fFitModulation->SetParameter(3, 0.2); // v2
fFitModulation->FixParameter(1, 1.); // constant
fFitModulation->FixParameter(5, 3.); // constant
fFitModulation->SetParameter(7, 0.2); // v3
} break;
- default: break;
}
switch (fRunModeType) {
case kGrid : { fFitModulationOptions += "N0"; } break;
// book a TH1F and connect it to the output container
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
if(!fOutputList) return 0x0;
- if(c!=-1) name = Form("%s_%i", name, c);
- TH1F* histogram = new TH1F(name, name, bins, min, max);
- histogram->GetXaxis()->SetTitle(x);
- histogram->GetYaxis()->SetTitle("[counts]");
+ TString title(name);
+ if(c!=-1) { // format centrality dependent histograms accordingly
+ name = Form("%s_%i", name, c);
+ title += Form("_%i-%i", fCentralityClasses->At(c), fCentralityClasses->At(1+c));
+ }
+ title += Form(";%s;[counts]", x);
+ TH1F* histogram = new TH1F(name, title.Data(), bins, min, max);
histogram->Sumw2();
fOutputList->Add(histogram);
return histogram;
// 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(!fOutputList) return 0x0;
- if(c!=-1) name = Form("%s_%i", name, c);
- TH2F* histogram = new TH2F(name, name, binsx, minx, maxx, binsy, miny, maxy);
- histogram->GetXaxis()->SetTitle(x);
- histogram->GetYaxis()->SetTitle(y);
+ TString title(name);
+ if(c!=-1) { // format centrality dependent histograms accordingly
+ name = Form("%s_%i", name, c);
+ title += Form("_%i-%i", fCentralityClasses->At(c), fCentralityClasses->At(1+c));
+ }
+ title += Form(";%s;%s", x, y);
+ TH2F* histogram = new TH2F(name, title.Data(), binsx, minx, maxx, binsy, miny, maxy);
histogram->Sumw2();
fOutputList->Add(histogram);
return histogram;
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fOutputList = new TList();
fOutputList->SetOwner(kTRUE);
+ if(!fCentralityClasses) { // classes must be defined at this point
+ Int_t c[] = {0, 20, 40, 60, 80, 100};
+ fCentralityClasses = new TArrayI(sizeof(c)/sizeof(c[0]), c);
+ }
// global QA
fHistCentrality = BookTH1F("fHistCentrality", "centrality \%", 102, -2, 100);
fHistVertexz = BookTH1F("fHistVertexz", "vertex z (cm)", 100, -12, 12);
// pico track kinematics
- for(Int_t i(0); i < 10; i++) {
+ for(Int_t i(0); i < fCentralityClasses->GetSize()-1; i++) {
fHistPicoTrackPt[i] = BookTH1F("fHistPicoTrackPt", "p_{t} [GeV/c]", 100, 0, 50, i);
- fHistPicoTrackPhi[i] = BookTH1F("fHistPicoTrackPhi", "#phi", 100, 0, TMath::TwoPi(), i);
- fHistPicoTrackEta[i] = BookTH1F("fHistPicoTrackEta", "#eta", 100, -1, 1, i);
if(fFillQAHistograms) {
fHistPicoCat1[i] = BookTH2F("fHistPicoCat1", "#eta", "#phi", 100, -1, 1, 100, 0, TMath::TwoPi(), i);
fHistPicoCat2[i] = BookTH2F("fHistPicoCat2", "#eta", "#phi", 100, -1, 1, 100, 0, TMath::TwoPi(), i);
fHistPsiTPC = BookTH1F("fHistPsiTPC", "#Psi_{TPC}", 100, -.5*TMath::Pi(), .5*TMath::Pi());
// background
- for(Int_t i(0); i < 10; i ++) {
+ for(Int_t i(0); i < fCentralityClasses->GetSize()-1; i ++) {
fHistRhoPackage[i] = BookTH1F("fHistRhoPackage", "#rho [GeV/c]", 100, 0, 150, i);
fHistRho[i] = BookTH1F("fHistRho", "#rho [GeV/c]", 100, 0, 150, i);
}
fHistRhoAVsCent = BookTH2F("fHistRhoAVsCent", "centrality", "#rho * A (jet) [GeV/c]", 100, 0, 100, 100, 0, 50);
// delta pt distributions
- for(Int_t i(0); i < 10; i ++) {
+ for(Int_t i(0); i < fCentralityClasses->GetSize()-1; i ++) {
fHistRCPhiEta[i] = BookTH2F("fHistRCPhiEta", "#phi (RC)", "#eta (RC)", 100, 0, TMath::TwoPi(), 100, -1, 1, i);
fHistRhoVsRCPt[i] = BookTH2F("fHistRhoVsRCPt", "p_{t} (RC) [GeV/c]", "#rho * A (RC) [GeV/c]", 100, 0, 300, 100, 0, 250, i);
fHistRCPt[i] = BookTH1F("fHistRCPt", "p_{t} (RC) [GeV/c]", 130, -20, 150, i);
- fHistDeltaPtRC[i] = BookTH1F("fHistDeltaPtRC", "#delta p_{t} [GeV/c]", 180, -50, 150, i);
+ fHistDeltaPtDeltaPhi[i] = BookTH2F("fHistDeltaPtDeltaPhi", "#phi - #Psi_{TPC}", "#delta p_{t} [GeV/c]", 100, 0, TMath::TwoPi(), 100, -50, 100);
fHistRCPhiEtaExLJ[i] = BookTH2F("fHistRCPhiEtaExLJ", "#phi (RC)", "#eta (RC)", 100, 0, TMath::TwoPi(), 100, -1, 1, i);
fHistRhoVsRCPtExLJ[i] = BookTH2F("fHistRhoVsRCPtExLJ", "p_{t} (RC) [GeV/c]", "#rho * A (RC) [GeV/c]", 100, 0, 300, 100, 0, 250, i);
fHistRCPtExLJ[i] = BookTH1F("fHistRCPtExLJ", "p_{t} (RC) [GeV/c]", 130, -20, 150, i);
- fHistDeltaPtRCExLJ[i] = BookTH1F("fHistDeltaPtRCExLJ", "#delta p_{t} [GeV/c]", 180, -50, 150, i);
+ fHistDeltaPtDeltaPhiExLJ[i] = BookTH2F("fHistDeltaPtDeltaPhiExLJ", "#phi - #Psi_{TPC}", "#delta p_{t} [GeV/c]", 100, 0, TMath::TwoPi(), 100, -50, 100);
fHistRCPhiEtaRand[i] = BookTH2F("fHistRCPhiEtaRand", "#phi (RC)", "#eta (RC)", 100, 0, TMath::TwoPi(), 100, -1, 1, i);
fHistRhoVsRCPtRand[i] = BookTH2F("fHistRhoVsRCPtRand", "p_{t} (RC) [GeV/c]", "#rho * A (RC) [GeV/c]", 100, 0, 300, 100, 0, 250, i);
fHistRCPtRand[i] = BookTH1F("fHistRCPtRand", "p_{t} (RC) [GeV/c]", 130, -20, 150, i);
- fHistDeltaPtRCRand[i] = BookTH1F("fHistDeltaPtRCRand", "#delta p_{t} [GeV/c]", 180, -50, 150, i);
-
+ fHistDeltaPtDeltaPhiRand[i] = BookTH2F("fHistDeltaPtDeltaPhiRand", "#phi - #Psi_{TPC}", "#delta p_{t} [GeV/c]", 100, 0, TMath::TwoPi(), 100, -50, 100);
// jet histograms (after kinematic cuts)
fHistJetPtRaw[i] = BookTH1F("fHistJetPtRaw", "p_{t} RAW [GeV/c]", 200, -50, 150, i);
fHistJetPt[i] = BookTH1F("fHistJetPt", "p_{t} [GeV/c]", 200, -50, 150, i);
fHistJetEtaPhi[i] = BookTH2F("fHistJetEtaPhi", "#eta", "#phi", 100, -1, 1, 100, 0, TMath::TwoPi(), i);
fHistJetPtArea[i] = BookTH2F("fHistJetPtArea", "p_{t} [GeV/c]", "Area", 200, -50, 150, 60, 0, 0.3, i);
fHistJetPtConstituents[i] = BookTH2F("fHistJetPtConstituents", "p_{t} [GeV/c]", "Area", 200, -50, 150, 60, 0, 150, i);
-
// in plane and out of plane spectra
- fHistJetPtInPlaneVZEROA[i] = BookTH1F("fHistJetPtInPlaneVZEROA", "p_{t} [GeV/c]", 200, -50, 150, i);
- fHistJetPtOutPlaneVZEROA[i] = BookTH1F("fHistJetPtOutPlaneVZEROA", "p_{t} [GeV/c]", 200, -50, 150, i);
- fHistJetPtMidPlaneVZEROA[i] = BookTH1F("fHistJetPtMidPlaneVZEROA", "p_{t} [GeV/c]", 200, -50, 150, i);
- fHistJetPtInPlaneVZEROC[i] = BookTH1F("fHistJetPtInPlaneVZEROC", "p_{t} [GeV/c]", 200, -50, 150, i);
- fHistJetPtOutPlaneVZEROC[i] = BookTH1F("fHistJetPtOutPlaneVZEROC", "p_{t} [GeV/c]", 200, -50, 150, i);
- fHistJetPtMidPlaneVZEROC[i] = BookTH1F("fHistJetPtMidPlaneVZEROC", "p_{t} [GeV/c]", 200, -50, 150, i);
- fHistJetPtInPlaneTPC[i] = BookTH1F("fHistJetPtInPlaneTPC", "p_{t} [GeV/c]", 200, -50, 150, i);
- fHistJetPtOutPlaneTPC[i] = BookTH1F("fHistJetPtOutPlaneTPC", "p_{t} [GeV/c]", 200, -50, 150, i);
- fHistJetPtMidPlaneTPC[i] = BookTH1F("fHistJetPtMidPlaneTPC", "p_{t} [GeV/c]", 200, -50, 150, i);
fHistJetPsiTPCPt[i] = BookTH2F("fHistJetPsiTPCPt", "#phi_{jet} - #Psi_{TPC}", "p_{t} [GeV/c]", 100, 0., TMath::TwoPi(), 100, -50, 100, i);
fHistJetPsiVZEROAPt[i] = BookTH2F("fHistJetPsiVZEROAPt", "#phi_{jet} - #Psi_{VZEROA}", "p_{t} [GeV/c]", 100, 0., TMath::TwoPi(), 100, -50, 100, i);
fHistJetPsiVZEROCPt[i] = BookTH2F("fHistJetPsiVZEROCPt", "#phi_{jet} - #Psi_{VZEROC}", "p_{t} [GeV/c]", 100, 0., TMath::TwoPi(), 100, -50, 100, i);
-
// phi minus psi
fHistDeltaPhiVZEROA[i] = BookTH1F("fHistDeltaPhiVZEROA", "#phi_{jet} - #Psi_{VZEROA}", 100, 0, TMath::TwoPi(), i);
fHistDeltaPhiVZEROC[i] = BookTH1F("fHistDeltaPhiVZEROC", "#phi_{jet} - #Psi_{VZEROC}", 100, 0, TMath::TwoPi(), i);
} break;
default: break;
}
-
-
}
//_____________________________________________________________________________
Bool_t AliAnalysisTaskRhoVnModulation::Run()
// reject the event if expected data is missing
if(!PassesCuts(InputEvent())) return kFALSE;
if(!(fTracks||fJets||fRho)) return kFALSE;
- if(!fCaloClusters && fDebug > 0) printf(" > warning: couldn't retreive calo clusters! < \n");
-
+ if(!fCaloClusters && fDebug > 0) printf(" > Warning: couldn't retreive calo clusters! < \n");
// [0][0] psi2a [1,0] psi2c
// [0][1] psi3a [1,1] psi3c
Double_t vzero[2][2];
CorrectRho(fitParameters, psi2, psi3);
fProfVn->Fill((double)1, fFitModulation->GetParameter(3));
} break;
- case kCombined : {
+ case kUser : {
+ CorrectRho(fitParameters, psi2, psi3);
+ } break;
+ default : {
CorrectRho(fitParameters, psi2, psi3);
fProfVn->Fill((double)0, fFitModulation->GetParameter(3));
fProfVn->Fill((double)1, fFitModulation->GetParameter(7));
} break;
- default : break;
}
// fill a number of histograms
FillHistogramsAfterSubtraction(vzero, tpc);
void AliAnalysisTaskRhoVnModulation::CorrectRho(Double_t* params, Double_t psi2, Double_t psi3) const
{
// get rho' -> rho(phi)
- // the fit is constrained based on the switch of fFitModulationType which is called
- // in the initialization of this class.
- // after fitting, an array of fit parameters is set which can be re-created at
- // any point from the TF1 pointer fFitModulation
+ // two routines are available
+ // [1] fitting a fourier expansion to the de/dphi distribution
+ // [2] getting vn from a fourier series around dn/dphi (see below for info)
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
TString detector("");
switch (fDetectorType) {
default: break;
}
Int_t iTracks(fTracks->GetEntriesFast());
- fHistSwap->Reset(); // clear the histogram
+ if(iTracks <= 0 || RhoVal() <= 0 ) return; // no use fitting an empty event ...
+ fHistSwap->Reset(); // clear the histogram
for(Int_t i(0); i < iTracks; i++) {
AliVTrack* track = static_cast<AliVTrack*>(fTracks->At(i));
if(!PassesCuts(track) || track->Pt() > 5 || track->Pt() < 0.15) continue;
fFitModulation->SetParameter(0, RhoVal());
switch (fFitModulationType) {
case kNoFit : { fFitModulation->FixParameter(0, RhoVal() ); }
- case kV2 : { fFitModulation->FixParameter(4, psi2); } break;
- case kV3 : { fFitModulation->FixParameter(4, psi3); } break;
+ case kV2 : {
+ fFitModulation->FixParameter(4, psi2);
+ } break;
+ case kV3 : {
+ fFitModulation->FixParameter(4, psi3);
+ } break;
case kCombined : {
fFitModulation->FixParameter(4, psi2);
fFitModulation->FixParameter(6, psi3);
} break;
+ case kFourierSeries : {
+ // in this approach, an explicit calculation will be made of vn = sqrt(xn^2+yn^2)
+ // where x[y] = Integrate[r(phi)cos[sin](n phi)dphi, 0, 2pi]
+ Double_t cos2(0), sin2(0), cos3(0), sin3(0), sumPt(0);
+ for(Int_t i(0); i < iTracks; i++) {
+ AliVTrack* track = static_cast<AliVTrack*>(fTracks->At(i));
+ if(!PassesCuts(track) || track->Pt() > 5 || track->Pt() < 0.15) continue;
+ sumPt += track->Pt();
+ cos2 += track->Pt()*TMath::Cos(2*PhaseShift(track->Phi()-psi2));
+ sin2 += track->Pt()*TMath::Sin(2*PhaseShift(track->Phi()-psi2));
+ cos3 += track->Pt()*TMath::Cos(3*PhaseShift(track->Phi()-psi3));
+ sin3 += track->Pt()*TMath::Sin(3*PhaseShift(track->Phi()-psi3));
+ }
+ fFitModulation->SetParameter(3, TMath::Sqrt(cos2*cos2+sin2*sin2)/RhoVal());
+ fFitModulation->SetParameter(4, psi2);
+ fFitModulation->SetParameter(6, psi3);
+ fFitModulation->SetParameter(7, TMath::Sqrt(cos3*cos3+sin3*sin3)/RhoVal());
+ }
default : break;
}
fHistSwap->Fit(fFitModulation, fFitModulationOptions.Data(), "", 0, TMath::TwoPi());
+ if(ChiSquare(fFitModulation->GetNDF(), fFitModulation->GetChisquare()) <= fMinPvalue) { // if we don't trust the fit
+ switch (fFitModulationType) {
+ case kNoFit : break; // nothing to do
+ case kUser : break; // FIXME not implemented yet
+ case kCombined : fFitModulation->SetParameter(7, 0); // no break
+ default : { // needs to be done if there was a fit
+ fFitModulation->SetParameter(3, 0);
+ fFitModulation->SetParameter(0, RhoVal());
+ } break;
+ }
+ }
for(Int_t i(0); i < fFitModulation->GetNpar(); i++) params[i] = fFitModulation->GetParameter(i);
// for LOCAL didactic purposes, save the best and the worst fits
// this routine can produce a lot of output histograms and will not work on GRID
- // since the output will become unmergeable
+ // since the output will become unmergeable (i.e. different nodes may produce conflicting output)
switch (fRunModeType) {
- case kGrid : break;
case kLocal : {
static Int_t didacticCounterBest(0);
static Int_t didacticCounterWorst(0);
Double_t p(ChiSquare(fFitModulation->GetNDF(), fFitModulation->GetChisquare()));
if(p > bestFitP || p > 0.12) {
TProfile* didacticProfile = (TProfile*)fHistSwap->Clone(Form("Fit_%i_p_%.3f_cen_%i_%s", didacticCounterBest, p, fInCentralitySelection, detector.Data()));
+ TF1* didactifFit = (TF1*)fFitModulation->Clone(Form("fit_%i_p_%.3f_cen_%i_%s", didacticCounterBest, p, fInCentralitySelection, detector.Data()));
+ didacticProfile->GetListOfFunctions()->Add(didactifFit);
fOutputListGood->Add(didacticProfile);
didacticCounterBest++;
bestFitP = p;
}
else if(p < worstFitP) {
TProfile* didacticProfile = (TProfile*)fHistSwap->Clone(Form("Fit_%i_p_%.3f_cen_%i_%s", didacticCounterWorst, p, fInCentralitySelection, detector.Data() ));
+ TF1* didactifFit = (TF1*)fFitModulation->Clone(Form("fit_%i_p_%.3f_cen_%i_%s", didacticCounterWorst, p, fInCentralitySelection, detector.Data()));
+ didacticProfile->GetListOfFunctions()->Add(didactifFit);
fOutputListBad->Add(didacticProfile);
didacticCounterWorst++;
worstFitP = p;
}
fCent = InputEvent()->GetCentrality()->GetCentralityPercentile("V0M");
if(fCent <= 0 || fCent >= 100 || TMath::Abs(fCent-InputEvent()->GetCentrality()->GetCentralityPercentile("TRK")) > 5.) return kFALSE;
- fInCentralitySelection = TMath::FloorNint(fCent/10.);
+ // determine centrality class
+ for(Int_t i(0); i < fCentralityClasses->GetSize()-1; i++) {
+ if(fCent > fCentralityClasses->At(i) && fCent < fCentralityClasses->At(1+i)) {
+ fInCentralitySelection = i;
+ break; }
+ }
if(fFillQAHistograms) FillQAHistograms(event);
return kTRUE;
}
/* FillCorrectedClusterHistograms(); */
FillEventPlaneHistograms(vzero, tpc);
FillRhoHistograms();
- FillDeltaPtHistograms();
+ FillDeltaPtHistograms(tpc);
FillDeltaPhiHistograms(vzero, tpc);
}
//_____________________________________________________________________________
AliVTrack* track = static_cast<AliVTrack*>(fTracks->At(i));
if(!PassesCuts(track)) continue;
fHistPicoTrackPt[fInCentralitySelection]->Fill(track->Pt());
- fHistPicoTrackEta[fInCentralitySelection]->Fill(track->Eta());
- fHistPicoTrackPhi[fInCentralitySelection]->Fill(track->Phi());
if(fFillQAHistograms) FillQAHistograms(track);
}
return;
return;
}
//_____________________________________________________________________________
-void AliAnalysisTaskRhoVnModulation::FillDeltaPtHistograms() const
+void AliAnalysisTaskRhoVnModulation::FillDeltaPtHistograms(Double_t* tpc) const
{
// fill delta pt histograms
if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
fHistRCPhiEta[fInCentralitySelection]->Fill(phi, eta);
fHistRhoVsRCPt[fInCentralitySelection]->Fill(pt, RhoVal(phi, fJetRadius, fRho->GetVal())*areaRC);
fHistRCPt[fInCentralitySelection]->Fill(pt);
- fHistDeltaPtRC[fInCentralitySelection]->Fill(pt - areaRC*RhoVal(phi, fJetRadius, fRho->GetVal()));
+ fHistDeltaPtDeltaPhi[fInCentralitySelection]->Fill(PhaseShift(phi-tpc[0]), pt - areaRC*RhoVal(phi, fJetRadius, fRho->GetVal()));
}
// get a random cone excluding leading jet area
CalculateRandomCone(pt, eta, phi, leadingJet);
fHistRCPhiEtaExLJ[fInCentralitySelection]->Fill(phi, eta);
fHistRhoVsRCPtExLJ[fInCentralitySelection]->Fill(pt, RhoVal(phi, fJetRadius, fRho->GetVal())*areaRC);
fHistRCPtExLJ[fInCentralitySelection]->Fill(pt);
- fHistDeltaPtRCExLJ[fInCentralitySelection]->Fill(pt - areaRC*RhoVal(phi, fJetRadius, fRho->GetVal()));
+ fHistDeltaPtDeltaPhiExLJ[fInCentralitySelection]->Fill(PhaseShift(phi-tpc[0]), pt - areaRC*RhoVal(phi, fJetRadius, fRho->GetVal()));
}
// get a random cone in an event with randomized phi and eta
CalculateRandomCone(pt, eta, phi, 0x0, kTRUE);
fHistRCPhiEtaRand[fInCentralitySelection]->Fill(phi, eta);
fHistRhoVsRCPtRand[fInCentralitySelection]->Fill(pt, RhoVal(phi, fJetRadius, fRho->GetVal())*areaRC);
fHistRCPtRand[fInCentralitySelection]->Fill(pt);
- fHistDeltaPtRCRand[fInCentralitySelection]->Fill(pt - areaRC*RhoVal(phi, fJetRadius, fRho->GetVal()));
+ fHistDeltaPtDeltaPhiRand[fInCentralitySelection]->Fill(PhaseShift(phi-tpc[0]), pt - areaRC*RhoVal(phi, fJetRadius, fRho->GetVal()));
}
}
}
Double_t dPhiA = PhaseShift(phi-vzero[0][0]);
Double_t dPhiC = PhaseShift(phi-vzero[1][0]);
Double_t dPhiTPC = PhaseShift(phi-tpc[0]);
- Double_t PiE = TMath::PiOver4()/2.;
fHistJetPsiTPCPt[fInCentralitySelection]->Fill(dPhiTPC, pt-area*rho);
fHistJetPsiVZEROAPt[fInCentralitySelection]->Fill(dPhiA, pt-area*rho);
fHistJetPsiVZEROCPt[fInCentralitySelection]->Fill(dPhiC, pt-area*rho);
- if(dPhiA > 15.*PiE && dPhiA < PiE) fHistJetPtInPlaneVZEROA[fInCentralitySelection]->Fill(pt-area*rho);
- else if(dPhiA > 7.*PiE && dPhiA < 9.*PiE) fHistJetPtInPlaneVZEROA[fInCentralitySelection]->Fill(pt-area*rho);
- else if(dPhiA > 3.*PiE && dPhiA < 5.*PiE) fHistJetPtOutPlaneVZEROA[fInCentralitySelection]->Fill(pt-area*rho);
- else if(dPhiA > 11.*PiE && dPhiA < 13.*PiE) fHistJetPtOutPlaneVZEROA[fInCentralitySelection]->Fill(pt-area*rho);
- else fHistJetPtMidPlaneVZEROA[fInCentralitySelection]->Fill(pt-area*rho);
- if(dPhiC > 15.*PiE && dPhiC < PiE) fHistJetPtInPlaneVZEROC[fInCentralitySelection]->Fill(pt-area*rho);
- else if(dPhiC > 7.*PiE && dPhiC < 9.*PiE) fHistJetPtInPlaneVZEROC[fInCentralitySelection]->Fill(pt-area*rho);
- else if(dPhiC > 3.*PiE && dPhiC < 5.*PiE) fHistJetPtOutPlaneVZEROC[fInCentralitySelection]->Fill(pt-area*rho);
- else if(dPhiC > 11.*PiE && dPhiC < 13.*PiE) fHistJetPtOutPlaneVZEROC[fInCentralitySelection]->Fill(pt-area*rho);
- else fHistJetPtMidPlaneVZEROC[fInCentralitySelection]->Fill(pt-area*rho);
- if(dPhiTPC > 15.*PiE && dPhiTPC < PiE) fHistJetPtInPlaneTPC[fInCentralitySelection]->Fill(pt-area*rho);
- else if(dPhiTPC > 7.*PiE && dPhiTPC < 9.*PiE) fHistJetPtInPlaneTPC[fInCentralitySelection]->Fill(pt-area*rho);
- else if(dPhiTPC > 3.*PiE && dPhiTPC < 5.*PiE) fHistJetPtOutPlaneTPC[fInCentralitySelection]->Fill(pt-area*rho);
- else if(dPhiTPC > 11.*PiE && dPhiTPC < 13.*PiE) fHistJetPtOutPlaneTPC[fInCentralitySelection]->Fill(pt-area*rho);
- else fHistJetPtMidPlaneTPC[fInCentralitySelection]->Fill(pt-area*rho);
- // last but not least, set the subtracted pt
- jet->SetPtSub(jet->PtSub(rho));
- fHistJetPtConstituents[fInCentralitySelection]->Fill(jet->PtSub(), jet->Nch());
+ fHistJetPtConstituents[fInCentralitySelection]->Fill(pt-area*rho, jet->Nch());
}
}
//_____________________________________________________________________________
{
public:
// enumerators
- enum fitModulationType { kNoFit, kV2, kV3, kCombined }; // fit type
+ enum fitModulationType { kNoFit, kV2, kV3, kCombined, kUser, kFourierSeries }; // fit type
enum runModeType { kLocal, kGrid }; // run mode type
enum dataType { kESD, kAOD, kESDMC, kAODMC }; // data type
enum detectorType { kTPC, kVZEROA, kVZEROC }; // detector that was used
}
}
// setters - analysis setup
- void SetDebugMode(Int_t d) {fDebug = d;};
- void SetFillQAHistograms(Bool_t qa) {fFillQAHistograms = qa;};
+ void SetDebugMode(Int_t d) {fDebug = d;}
+ void SetFillQAHistograms(Bool_t qa) {fFillQAHistograms = qa;}
+ void SetCentralityClasses(TArrayI* c) {fCentralityClasses = c;}
void SetNameJetClones(const char* name) {fNameJetClones = name; }
void SetNamePicoTrackClones(const char* name) {fNamePicoTrackClones = name; }
void SetNameRho(const char* name) {fNameRho = name; }
void SetRandomSeed(TRandom3* r) {if (fRandom) delete fRandom; fRandom = r; }
void SetModulationFit(TF1* fit) {if (fFitModulation) delete fFitModulation;
fFitModulation = fit; }
+ void SetModulationFitMinimumPvalue(Float_t p) {fMinPvalue = p;}
void SetModulationFitType(fitModulationType type) {fFitModulationType = type; }
void SetModulationFitOptions(TString opt) {fFitModulationOptions = opt; }
void SetModulationFitDetector(detectorType type) {fDetectorType = type; }
void FillCorrectedClusterHistograms() const;
void FillEventPlaneHistograms(Double_t vzero[2][2], Double_t* tpc) const;
void FillRhoHistograms() const;
- void FillDeltaPtHistograms() const;
+ void FillDeltaPtHistograms(Double_t* tpc) const;
void FillJetHistograms(Double_t vzero[2][2], Double_t* tpc) const;
void FillDeltaPhiHistograms(Double_t vzero[2][2], Double_t* tpc) const;
void FillQAHistograms(AliVTrack* vtrack) const;
void FillQAHistograms(AliVEvent* vevent);
virtual void Terminate(Option_t* option);
private:
- // analysis flags
+ // analysis flags and settings
Int_t fDebug; // debug level (0 none, 1 fcn calls, 2 verbose)
Bool_t fInitialized; //! is the analysis initialized?
Bool_t fFillQAHistograms; // fill qa histograms
+ TArrayI* fCentralityClasses; //-> centrality classes (maximum 10)
// members
fitModulationType fFitModulationType; // fit modulation type
detectorType fDetectorType; // type of detector used for modulation fit
Int_t fMappedRunNumber; //! mapped runnumer (for QA)
Int_t fInCentralitySelection; //! centrality bin
TF1* fFitModulation; //-> modulation fit for rho
+ Float_t fMinPvalue; // minimum value of p
const char* fNameJetClones; //! collection of tclones array with jets
const char* fNamePicoTrackClones; //! collection of tclones with pico tracks
const char* fNameRho; //! name of rho
TProfile* fProfVn; //! extracted vn
// qa histograms for accepted pico tracks
TH1F* fHistPicoTrackPt[10]; //! pt of all charged tracks
- TH1F* fHistPicoTrackPhi[10]; //! phi of all charged tracks
- TH1F* fHistPicoTrackEta[10]; //! eta of all charged tracks
TH2F* fHistPicoCat1[10]; //! pico tracks spd hit and refit
TH2F* fHistPicoCat2[10]; //! pico tracks wo spd hit w refit, constrained
TH2F* fHistPicoCat3[10]; //! pico tracks wo spd hit wo refit, constrained
TH2F* fHistRhoAVsMult; //! rho * A vs multiplicity for all jets
TH2F* fHistRhoAVsCent; //! rho * A vs centrality for all jets
// delta pt distributions
- TH2F* fHistRCPhiEta[10]; //! random cone eta and phi
- TH2F* fHistRhoVsRCPt[10]; //! rho * A vs rcpt
- TH1F* fHistRCPt[10]; //! rcpt
- TH1F* fHistDeltaPtRC[10]; //! rcpt - A*rho
- TH2F* fHistRCPhiEtaExLJ[10]; //! random cone eta and phi, excl leading jet
- TH2F* fHistRhoVsRCPtExLJ[10]; //! rho * A vs rcpt, excl leading jet
- TH1F* fHistRCPtExLJ[10]; //! rcpt, excl leading jet
- TH1F* fHistDeltaPtRCExLJ[10]; //! rcpt - A*rho, excl leading jet
- TH2F* fHistRCPhiEtaRand[10]; //! random cone eta and phi, randomized
- TH2F* fHistRhoVsRCPtRand[10]; //! rho * A vs rcpt, randomized
- TH1F* fHistRCPtRand[10]; //! rcpt, randomized
- TH1F* fHistDeltaPtRCRand[10]; //! rcpt - A*rho, randomized
+ TH2F* fHistRCPhiEta[10]; //! random cone eta and phi
+ TH2F* fHistRhoVsRCPt[10]; //! rho * A vs rcpt
+ TH1F* fHistRCPt[10]; //! rcpt
+ TH2F* fHistDeltaPtDeltaPhi[10]; //! dpt vs dphi
+ TH2F* fHistRCPhiEtaExLJ[10]; //! random cone eta and phi, excl leading jet
+ TH2F* fHistRhoVsRCPtExLJ[10]; //! rho * A vs rcpt, excl leading jet
+ TH1F* fHistRCPtExLJ[10]; //! rcpt, excl leading jet
+ TH2F* fHistDeltaPtDeltaPhiExLJ[10]; //! dpt vs dphi, excl leading jet
+ TH2F* fHistRCPhiEtaRand[10]; //! random cone eta and phi, randomized
+ TH2F* fHistRhoVsRCPtRand[10]; //! rho * A vs rcpt, randomized
+ TH1F* fHistRCPtRand[10]; //! rcpt, randomized
+ TH2F* fHistDeltaPtDeltaPhiRand[10]; //! dpt vs dphi, randomized
// jet histograms (after kinematic cuts)
TH1F* fHistJetPtRaw[10]; //! jet pt - no background subtraction
TH1F* fHistJetPt[10]; //! pt of found jets (background subtracted)
TH2F* fHistJetEtaPhi[10]; //! eta and phi correlation
TH2F* fHistJetPtArea[10]; //! jet pt versus area
TH2F* fHistJetPtConstituents[10]; //! jet pt versus number of constituents
-
// in plane, out of plane jet spectra
- TH1F* fHistJetPtInPlaneVZEROA[10]; //! out of plane jet pt
- TH1F* fHistJetPtOutPlaneVZEROA[10]; //! in plane jet pt
- TH1F* fHistJetPtMidPlaneVZEROA[10]; //! intermedate plane jet pt
- TH1F* fHistJetPtInPlaneVZEROC[10]; //! out of plane jet pt
- TH1F* fHistJetPtOutPlaneVZEROC[10]; //! in plane jet pt
- TH1F* fHistJetPtMidPlaneVZEROC[10]; //! intermedate plane jet pt
- TH1F* fHistJetPtInPlaneTPC[10]; //! out of plane jet pt
- TH1F* fHistJetPtOutPlaneTPC[10]; //! in plane jet pt
- TH1F* fHistJetPtMidPlaneTPC[10]; //! intermedate plane jet pt
TH2F* fHistJetPsiTPCPt[10]; //! psi tpc versus pt
TH2F* fHistJetPsiVZEROAPt[10]; //! psi vzeroa versus pt
TH2F* fHistJetPsiVZEROCPt[10]; //! psi vzeroc versus pt
TH1F* fHistDeltaPhiVZEROC[10]; //! phi minus psi_C
TH1F* fHistDeltaPhiTPC[10]; //! phi minus psi_TPC
-
AliAnalysisTaskRhoVnModulation(const AliAnalysisTaskRhoVnModulation&); // not implemented
AliAnalysisTaskRhoVnModulation& operator=(const AliAnalysisTaskRhoVnModulation&); // not implemented
- ClassDef(AliAnalysisTaskRhoVnModulation, 1);
+ ClassDef(AliAnalysisTaskRhoVnModulation, 2);
};
#endif