Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions PWGCF/DataModel/FemtoDerived.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2019-2025 CERN and copyright holders of ALICE O2.

Check failure on line 1 in PWGCF/DataModel/FemtoDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Provide mandatory file documentation.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
Expand All @@ -8,7 +8,7 @@
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.

Check failure on line 11 in PWGCF/DataModel/FemtoDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Documentation for \author is missing, incorrect or misplaced.

Check failure on line 11 in PWGCF/DataModel/FemtoDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Documentation for \brief is missing, incorrect or misplaced.

Check failure on line 11 in PWGCF/DataModel/FemtoDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[doc/file]

Documentation for \file is missing, incorrect or misplaced.
#ifndef PWGCF_DATAMODEL_FEMTODERIVED_H_
#define PWGCF_DATAMODEL_FEMTODERIVED_H_

Expand All @@ -35,7 +35,7 @@
kMult, //! Bin collision in number of charged tracks for mixing
kMultPercentile, //! Bin collision in multiplicity percentile for mixing
kMultMultPercentile, //! Bin collision in number of charged tracks and multiplicity percentile for mixing
kMultPercentileqn, //! Bin collision in multiplicity percentile an qn value for mixing
kMultPercentileqn, //! Bin collision in multiplicity percentile an qn value for mixing
kNCollisionBinning
};

Expand All @@ -46,13 +46,13 @@

using BitMaskType = uint32_t; //! Definition of the data type for the collision masks

DECLARE_SOA_COLUMN(BitMaskTrackOne, bitmaskTrackOne, BitMaskType); //! Bit for track one

Check failure on line 49 in PWGCF/DataModel/FemtoDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(BitMaskTrackTwo, bitmaskTrackTwo, BitMaskType); //! Bit for track two

Check failure on line 50 in PWGCF/DataModel/FemtoDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(BitMaskTrackThree, bitmaskTrackThree, BitMaskType); //! Bit for track three

Check failure on line 51 in PWGCF/DataModel/FemtoDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.

DECLARE_SOA_COLUMN(Downsample, downsample, bool); //! Flag for downsampling

DECLARE_SOA_COLUMN(QnVal, qnVal, int); //! qn bins for dividing events
DECLARE_SOA_COLUMN(QnVal, qnVal, int); //! qn bins for dividing events
DECLARE_SOA_COLUMN(Occupancy, occupancy, int); //! TPC occupancy
} // namespace femtodreamcollision

Expand Down Expand Up @@ -89,7 +89,7 @@

namespace mcfdcolllabel
{
DECLARE_SOA_INDEX_COLUMN(FDMCCollision, fdMCCollision); //! MC collision for femtodreamcollision

Check failure on line 92 in PWGCF/DataModel/FemtoDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
}
DECLARE_SOA_TABLE_STAGED(FDMCCollLabels, "FDMCCollLabel", mcfdcolllabel::FDMCCollisionId);

Expand Down Expand Up @@ -130,13 +130,13 @@

static constexpr std::string_view TrackTypeName[kNTrackTypes] = {"Trk", "Pos", "Neg", "Bach"}; //! Naming of the different particle types

DECLARE_SOA_INDEX_COLUMN(FDCollision, fdCollision);

Check failure on line 133 in PWGCF/DataModel/FemtoDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(Pt, pt, float); //! p_T (GeV/c)
DECLARE_SOA_COLUMN(Eta, eta, float); //! Eta
DECLARE_SOA_COLUMN(Phi, phi, float); //! Phi
DECLARE_SOA_COLUMN(PartType, partType, uint8_t); //! Type of the particle, according to femtodreamparticle::ParticleType
DECLARE_SOA_COLUMN(Cut, cut, cutContainerType); //! Bit-wise container for the different selection criteria
DECLARE_SOA_COLUMN(PIDCut, pidcut, cutContainerType); //! Bit-wise container for the different PID selection criteria \todo since bit-masking cannot be done yet with filters we use a second field for the PID

Check failure on line 139 in PWGCF/DataModel/FemtoDerived.h

View workflow job for this annotation

GitHub Actions / O2 linter

[name/o2-column]

Use UpperCamelCase for names of O2 columns and matching lowerCamelCase names for their getters.
DECLARE_SOA_COLUMN(TempFitVar, tempFitVar, float); //! Observable for the template fitting (Track: DCA_xy, V0: CPA)
DECLARE_SOA_SELF_ARRAY_INDEX_COLUMN(Children, children); //! Field for the track indices to remove auto-correlations
DECLARE_SOA_COLUMN(MLambda, mLambda, float); //! The invariant mass of V0 candidate, assuming lambda
Expand Down
158 changes: 78 additions & 80 deletions PWGCF/FemtoDream/Core/femtoDreamCollisionSelection.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,17 @@
#ifndef PWGCF_FEMTODREAM_CORE_FEMTODREAMCOLLISIONSELECTION_H_
#define PWGCF_FEMTODREAM_CORE_FEMTODREAMCOLLISIONSELECTION_H_

#include <string>
#include <iostream>
#include <vector>
#include "Common/CCDB/TriggerAliases.h"
#include "Common/Core/EventPlaneHelper.h"
#include "Common/DataModel/EventSelection.h"
#include "Common/DataModel/Qvectors.h"

#include "Framework/HistogramRegistry.h"
#include "Framework/Logger.h"

#include "Common/Core/EventPlaneHelper.h"
#include "Common/DataModel/Qvectors.h"
#include <iostream>
#include <string>
#include <vector>

using namespace o2::framework;

Expand Down Expand Up @@ -165,17 +166,15 @@ class FemtoDreamCollisionSelection
/// \param col Collision
/// \return whether or not the collisions fulfills the specified selections
template <typename C>
bool isPileUpCollisionPbPb(C const& col,
bool noSameBunchPileup, bool isGoodITSLayersAll,
int tpcOccupancyMin, int tpcOccupancyMax)
bool isPileUpCollisionPbPb(C const& col,
bool noSameBunchPileup, bool isGoodITSLayersAll,
int tpcOccupancyMin, int tpcOccupancyMax)
{
const auto occupancy = col.trackOccupancyInTimeRange();
if ((occupancy < tpcOccupancyMin || occupancy > tpcOccupancyMax)) {
return false;
}
if ((noSameBunchPileup && !col.selection_bit(aod::evsel::kNoSameBunchPileup))
|| (isGoodITSLayersAll && !col.selection_bit(aod::evsel::kIsGoodITSLayersAll))
) {
if ((noSameBunchPileup && !col.selection_bit(aod::evsel::kNoSameBunchPileup)) || (isGoodITSLayersAll && !col.selection_bit(aod::evsel::kIsGoodITSLayersAll))) {
return false;
}

Expand Down Expand Up @@ -207,11 +206,11 @@ class FemtoDreamCollisionSelection
{
mHistogramQn = registry;
mHistogramQn->add("Event/centFT0CBefore", "; cent", kTH1F, {{10, 0, 100}});
mHistogramQn->add("Event/centFT0CAfter", "; cent", kTH1F, {{10, 0, 100}});
mHistogramQn->add("Event/centFT0CAfter", "; cent", kTH1F, {{10, 0, 100}});
mHistogramQn->add("Event/centVsqn", "; cent; qn", kTH2F, {{10, 0, 100}, {100, 0, 1000}});
mHistogramQn->add("Event/centVsqnVsSpher", "; cent; qn; Sphericity", kTH3F, {{10, 0, 100}, {100, 0, 1000}, {100, 0, 1}});
mHistogramQn->add("Event/qnBin", "; qnBin; entries", kTH1F, {{20, 0, 20}});

for (int iqn(0); iqn < mumQnBins; ++iqn) {
mHistogramQn->add(("Qn/mult_" + std::to_string(iqn)).c_str(), "; cent; c22", kTH1F, {{100, 0, 3500}});
}
Expand All @@ -230,12 +229,12 @@ class FemtoDreamCollisionSelection
mReQ2thisEvt = new TH2D("ReQ2thisEvt", "", binPt, 0., 5., binEta, -0.8, 0.8);
mImQ2thisEvt = new TH2D("ImQ2thisEvt", "", binPt, 0., 5., binEta, -0.8, 0.8);
mMQthisEvt = new TH2D("MQthisEvt", "", binPt, 0., 5., binEta, -0.8, 0.8);
mMQWeightthisEvt = new TH2D("MQWeightthisEvt", "", binPt, 0., 5., binEta, -0.8, 0.8);
mMQWeightthisEvt = new TH2D("MQWeightthisEvt", "", binPt, 0., 5., binEta, -0.8, 0.8);

mHistogramQn = registry;
mHistogramQn->add<TProfile>("Event/profileC22", "; cent; c22", kTProfile, {{10, 0, 100}});
mHistogramQn->add<TProfile>("Event/profileC24", "; cent; c24", kTProfile, {{10, 0, 100}});
if (doQnSeparation){
if (doQnSeparation) {
for (int iqn(0); iqn < mumQnBins; ++iqn) {
mHistogramQn->add<TProfile>(("Qn/profileC22_" + std::to_string(iqn)).c_str(), "; cent; c22", kTProfile, {{10, 0, 100}});
}
Expand Down Expand Up @@ -328,14 +327,14 @@ class FemtoDreamCollisionSelection

/// \todo to be implemented!
/// \return the 1-d qn-vector separator to 2-d
std::vector<std::vector<float>> getQnBinSeparator2D(std::vector<float> flat, const int numQnBins = 10)
std::vector<std::vector<float>> getQnBinSeparator2D(std::vector<float> flat, const int numQnBins = 10)
{
size_t nBins = numQnBins+1;
size_t nBins = numQnBins + 1;

if (flat.empty() || flat.size() % nBins != 0) {
LOGP(error, "ConfQnBinSeparator size = {} is not divisible by {}",
LOGP(error, "ConfQnBinSeparator size = {} is not divisible by {}",
flat.size(), nBins);
return {{-999, -999}};
return {{-999, -999}};
}

size_t nCent = flat.size() / nBins;
Expand All @@ -362,14 +361,14 @@ class FemtoDreamCollisionSelection
}

if (doFillHisto)
mHistogramQn->fill(HIST("Event/centFT0CBefore"), centrality);
mHistogramQn->fill(HIST("Event/centFT0CBefore"), centrality);

int qnBin = -999;
int mycentBin = static_cast<int>(centrality / centBinWidth);
if (mycentBin >= static_cast<int>(centMax / centBinWidth))
return qnBin;

if (mycentBin > static_cast<int>(twoDSeparator.size()) -1)
if (mycentBin > static_cast<int>(twoDSeparator.size()) - 1)
return qnBin;

for (int iqn(0); iqn < static_cast<int>(twoDSeparator[mycentBin].size()) - 1; ++iqn) {
Expand All @@ -383,12 +382,12 @@ class FemtoDreamCollisionSelection

mQnBin = qnBin;

if (doFillHisto){
if (doFillHisto) {
mHistogramQn->fill(HIST("Event/centFT0CAfter"), centrality);
mHistogramQn->fill(HIST("Event/centVsqn"), centrality, qn);
mHistogramQn->fill(HIST("Event/centVsqnVsSpher"), centrality, qn, fSpher);
mHistogramQn->fill(HIST("Event/qnBin"), qnBin);
if (qnBin >= 0 && qnBin < numQnBins){
if (qnBin >= 0 && qnBin < numQnBins) {
switch (qnBin) {
case 0:
mHistogramQn->fill(HIST("Qn/mult_") + HIST("0"), mult);
Expand All @@ -397,8 +396,8 @@ class FemtoDreamCollisionSelection
mHistogramQn->fill(HIST("Qn/mult_") + HIST("1"), mult);
break;
case 2:
mHistogramQn->fill(HIST("Qn/mult_") + HIST("2"), mult);
break;
mHistogramQn->fill(HIST("Qn/mult_") + HIST("2"), mult);
break;
case 3:
mHistogramQn->fill(HIST("Qn/mult_") + HIST("3"), mult);
break;
Expand All @@ -419,11 +418,11 @@ class FemtoDreamCollisionSelection
break;
case 9:
mHistogramQn->fill(HIST("Qn/mult_") + HIST("9"), mult);
break;
break;
default:
return qnBin; // invalid qn bin
return qnBin; // invalid qn bin
}
}
}
}

return qnBin;
Expand All @@ -436,34 +435,34 @@ class FemtoDreamCollisionSelection
/// \tparam T2 type of the tracks
/// \param tracks All tracks
template <typename T1, typename T2>
bool fillCumulants(T1 const& col, T2 const& tracks, float fHarmonic=2.f)
{
bool fillCumulants(T1 const& col, T2 const& tracks, float fHarmonic = 2.f)
{
int numOfTracks = col.numContrib();
if (numOfTracks < 3)
return false;

mReQthisEvt->Reset();
mImQthisEvt->Reset();
mReQ2thisEvt->Reset();
mImQ2thisEvt->Reset();
mReQ2thisEvt->Reset();
mImQ2thisEvt->Reset();
mMQthisEvt->Reset();
mMQWeightthisEvt->Reset();
mMQWeightthisEvt->Reset();

for (auto const& track : tracks) {
double weight=1; // Will implement NUA&NUE correction
double weight = 1; // Will implement NUA&NUE correction
double phi = track.phi();
double pt = track.pt();
double eta = track.eta();
double cosnphi = weight * TMath::Cos(fHarmonic*phi);
double sinnphi = weight * TMath::Sin(fHarmonic*phi);
double cos2nphi = weight * TMath::Cos(2*fHarmonic*phi);
double sin2nphi = weight * TMath::Sin(2*fHarmonic*phi);
double cosnphi = weight * TMath::Cos(fHarmonic * phi);
double sinnphi = weight * TMath::Sin(fHarmonic * phi);
double cos2nphi = weight * TMath::Cos(2 * fHarmonic * phi);
double sin2nphi = weight * TMath::Sin(2 * fHarmonic * phi);
mReQthisEvt->Fill(pt, eta, cosnphi);
mImQthisEvt->Fill(pt, eta, sinnphi);
mReQ2thisEvt->Fill(pt,eta,cos2nphi);
mImQ2thisEvt->Fill(pt, eta, sin2nphi);
mMQthisEvt ->Fill(pt, eta);
mMQWeightthisEvt ->Fill(pt, eta, weight);
mReQ2thisEvt->Fill(pt, eta, cos2nphi);
mImQ2thisEvt->Fill(pt, eta, sin2nphi);
mMQthisEvt->Fill(pt, eta);
mMQWeightthisEvt->Fill(pt, eta, weight);
}
return true;
}
Expand All @@ -480,73 +479,72 @@ class FemtoDreamCollisionSelection
if (!fillCumulants(col, tracks))
return;

if (mMQthisEvt->Integral(1, binPt, 1, binEta) < 2)
if (mMQthisEvt->Integral(1, binPt, 1, binEta) < 2)
return;
double allReQ = mReQthisEvt ->Integral(1, binPt, 1, binEta);
double allImQ = mImQthisEvt ->Integral(1, binPt, 1, binEta);

double allReQ = mReQthisEvt->Integral(1, binPt, 1, binEta);
double allImQ = mImQthisEvt->Integral(1, binPt, 1, binEta);
TComplex Q(allReQ, allImQ);
TComplex QStar = TComplex::Conjugate(Q);
double posEtaRe = mReQthisEvt->Integral(1, binPt, mReQthisEvt->GetYaxis()->FindBin(fEtaGap+1e-6), binEta);
double posEtaIm = mImQthisEvt->Integral(1, binPt, mImQthisEvt->GetYaxis()->FindBin(fEtaGap+1e-6), binEta);
if (mMQthisEvt->Integral(1, binPt, mMQthisEvt->GetYaxis()->FindBin(fEtaGap+1e-6), binEta) < 2)

double posEtaRe = mReQthisEvt->Integral(1, binPt, mReQthisEvt->GetYaxis()->FindBin(fEtaGap + 1e-6), binEta);
double posEtaIm = mImQthisEvt->Integral(1, binPt, mImQthisEvt->GetYaxis()->FindBin(fEtaGap + 1e-6), binEta);
if (mMQthisEvt->Integral(1, binPt, mMQthisEvt->GetYaxis()->FindBin(fEtaGap + 1e-6), binEta) < 2)
return;
float posEtaMQ = mMQWeightthisEvt->Integral(1, binPt, mMQthisEvt->GetYaxis()->FindBin(fEtaGap+1e-6), binEta);
float posEtaMQ = mMQWeightthisEvt->Integral(1, binPt, mMQthisEvt->GetYaxis()->FindBin(fEtaGap + 1e-6), binEta);
TComplex posEtaQ = TComplex(posEtaRe, posEtaIm);
TComplex posEtaQStar = TComplex::Conjugate(posEtaQ);
double negEtaRe = mReQthisEvt->Integral(1, binPt, 1, mReQthisEvt->GetYaxis()->FindBin(-1*fEtaGap-1e-6));
double negEtaIm = mImQthisEvt->Integral(1, binPt, 1, mImQthisEvt->GetYaxis()->FindBin(-1*fEtaGap-1e-6));
if (mMQthisEvt->Integral(1, binPt, 1, mMQthisEvt->GetYaxis()->FindBin(-1*fEtaGap-1e-6)) < 2)

double negEtaRe = mReQthisEvt->Integral(1, binPt, 1, mReQthisEvt->GetYaxis()->FindBin(-1 * fEtaGap - 1e-6));
double negEtaIm = mImQthisEvt->Integral(1, binPt, 1, mImQthisEvt->GetYaxis()->FindBin(-1 * fEtaGap - 1e-6));
if (mMQthisEvt->Integral(1, binPt, 1, mMQthisEvt->GetYaxis()->FindBin(-1 * fEtaGap - 1e-6)) < 2)
return;
float negEtaMQ = mMQWeightthisEvt->Integral(1, binPt, 1, mMQthisEvt->GetYaxis()->FindBin(-1*fEtaGap-1e-6));
float negEtaMQ = mMQWeightthisEvt->Integral(1, binPt, 1, mMQthisEvt->GetYaxis()->FindBin(-1 * fEtaGap - 1e-6));
TComplex negEtaQ = TComplex(negEtaRe, negEtaIm);
TComplex negEtaQStar = TComplex::Conjugate(negEtaQ);

mHistogramQn->get<TProfile>(HIST("Event/profileC22"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
if (doQnSeparation && mQnBin >= 0 && mQnBin < numQnBins){
mHistogramQn->get<TProfile>(HIST("Event/profileC22"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
if (doQnSeparation && mQnBin >= 0 && mQnBin < numQnBins) {
switch (mQnBin) {
case 0:
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("0"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("0"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
break;
case 1:
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("1"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("1"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
break;
case 2:
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("2"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("2"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
break;
case 3:
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("3"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("3"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
break;
case 4:
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("4"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("4"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
break;
case 5:
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("5"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("5"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
break;
case 6:
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("6"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("6"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
break;
case 7:
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("7"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("7"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
break;
case 8:
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("8"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("8"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
break;
case 9:
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("9"))->Fill(centrality, (negEtaQ*posEtaQStar).Re()/(negEtaMQ*posEtaMQ), (negEtaMQ*posEtaMQ));
break;
mHistogramQn->get<TProfile>(HIST("Qn/profileC22_") + HIST("9"))->Fill(centrality, (negEtaQ * posEtaQStar).Re() / (negEtaMQ * posEtaMQ), (negEtaMQ * posEtaMQ));
break;
default:
return; // invalid qn bin
return; // invalid qn bin
}
}
return;
}


private:
HistogramRegistry* mHistogramRegistry = nullptr; ///< For QA output
HistogramRegistry* mHistogramRegistry = nullptr; ///< For QA output
bool mCutsSet = false; ///< Protection against running without cuts
bool mCheckTrigger = false; ///< Check for trigger
bool mCheckOffline = false; ///< Check for offline criteria (might change)
Expand All @@ -557,13 +555,13 @@ class FemtoDreamCollisionSelection
float mMinSphericity = 0.f;
float mSphericityPtmin = 0.f;
int mQnBin = -999;
HistogramRegistry* mHistogramQn = nullptr; ///< For flow cumulant output
TH2D* mReQthisEvt = nullptr; ///< For flow cumulant in an event
TH2D* mImQthisEvt = nullptr; ///< For flow cumulant in an event
TH2D* mReQ2thisEvt = nullptr; ///< For flow cumulant in an event
TH2D* mImQ2thisEvt = nullptr; ///< For flow cumulant in an event
TH2D* mMQthisEvt = nullptr; ///< For flow cumulant in an event
TH2D* mMQWeightthisEvt = nullptr; ///< For flow cumulant in an event
HistogramRegistry* mHistogramQn = nullptr; ///< For flow cumulant output
TH2D* mReQthisEvt = nullptr; ///< For flow cumulant in an event
TH2D* mImQthisEvt = nullptr; ///< For flow cumulant in an event
TH2D* mReQ2thisEvt = nullptr; ///< For flow cumulant in an event
TH2D* mImQ2thisEvt = nullptr; ///< For flow cumulant in an event
TH2D* mMQthisEvt = nullptr; ///< For flow cumulant in an event
TH2D* mMQWeightthisEvt = nullptr; ///< For flow cumulant in an event
};
} // namespace o2::analysis::femtoDream

Expand Down
Loading
Loading