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
2 changes: 1 addition & 1 deletion Analysis/Tasks/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ o2_add_dpl_workflow(pid-tpc
COMPONENT_NAME Analysis)

o2_add_dpl_workflow(pid-tpc-split
SOURCES pidTPC.cxx
SOURCES pidTPC_split.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2::DetectorsBase O2::AnalysisDataModel O2::AnalysisCore
COMPONENT_NAME Analysis)

Expand Down
18 changes: 1 addition & 17 deletions Analysis/Tasks/PWGLF/spectraTOF_split.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,6 @@ struct TOFSpectraTaskSplit {
histos.add(hp[i].data(), Form("%s;#it{p} (GeV/#it{c})", pT[i]), kTH1F, {{100, 0, 20}});
histos.add(hpt[i].data(), Form("%s;#it{p}_{T} (GeV/#it{c})", pT[i]), kTH1F, {{100, 0, 20}});
}
histos.add("electronbeta/hp_El", ";#it{p} (GeV/#it{c})", kTH1F, {{100, 0, 20}});
histos.add("electronbeta/hpt_El", ";#it{p}_{T} (GeV/#it{c})", kTH1F, {{100, 0, 20}});
histos.add("electronbeta/hlength_El", ";Track Length (cm);Tracks", kTH1D, {{100, 0, 1000}});
histos.add("electronbeta/htime_El", ";TOF Time (ns);Tracks", kTH1D, {{1000, 0, 600}});
histos.add("electronbeta/hp_beta_El", ";#it{p} (GeV/#it{c});#beta - #beta_{e};Tracks", kTH2D, {{100, 0, 20}, {100, -0.01, 0.01}});
histos.add("electronbeta/hp_betasigma_El", ";#it{p} (GeV/#it{c});(#beta - #beta_{e})/#sigma;Tracks", kTH2D, {{100, 0, 20}, {100, -5, 5}});
}

template <std::size_t i, typename T>
Expand All @@ -64,7 +58,7 @@ struct TOFSpectraTaskSplit {
aod::pidRespTOFEl, aod::pidRespTOFMu, aod::pidRespTOFPi,
aod::pidRespTOFKa, aod::pidRespTOFPr, aod::pidRespTOFDe,
aod::pidRespTOFTr, aod::pidRespTOFHe, aod::pidRespTOFAl,
aod::pidRespTOFbeta, aod::TrackSelection>>;
aod::TrackSelection>>;
void process(TrackCandidates::iterator const& track)
{
histos.fill(HIST("p/Unselected"), track.p());
Expand All @@ -79,16 +73,6 @@ struct TOFSpectraTaskSplit {
fillParticleHistos<6>(track, track.tofNSigmaTr());
fillParticleHistos<7>(track, track.tofNSigmaHe());
fillParticleHistos<8>(track, track.tofNSigmaAl());

//
if (TMath::Abs(track.separationbetael() < 1.f)) {
histos.fill(HIST("electronbeta/hp_El"), track.p());
histos.fill(HIST("electronbeta/hpt_El"), track.pt());
histos.fill(HIST("electronbeta/hlength_El"), track.length());
histos.fill(HIST("electronbeta/htime_El"), track.tofSignal() / 1000);
histos.fill(HIST("electronbeta/hp_beta_El"), track.p(), track.diffbetael());
histos.fill(HIST("electronbeta/hp_betasigma_El"), track.p(), track.separationbetael());
}
}
};

Expand Down
6 changes: 4 additions & 2 deletions Analysis/Tasks/PWGLF/spectraTOF_tiny.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,15 @@ struct TOFSpectraTaskTiny {
Configurable<float> cfgCutVertex{"cfgCutVertex", 10.0f, "Accepted z-vertex range"};
Configurable<float> cfgCutEta{"cfgCutEta", 0.8f, "Eta range for tracks"};
Configurable<float> nsigmacut{"nsigmacut", 3, "Value of the Nsigma cut"};

Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex;
Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::isGlobalTrack == (uint8_t) true) && (aod::track::tofSignal > 0.f);
using TrackCandidates = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra,
aod::pidRespTOFTEl, aod::pidRespTOFTMu, aod::pidRespTOFTPi,
aod::pidRespTOFTKa, aod::pidRespTOFTPr, aod::pidRespTOFTDe,
aod::pidRespTOFTTr, aod::pidRespTOFTHe, aod::pidRespTOFTAl,
aod::pidRespTOFbeta, aod::TrackSelection>>;
aod::TrackSelection>>;

void process(TrackCandidates::iterator const& track)
{
histos.fill(HIST("p/Unselected"), track.p());
Expand All @@ -77,6 +79,6 @@ struct TOFSpectraTaskTiny {

WorkflowSpec defineDataProcessing(ConfigContext const&)
{
WorkflowSpec workflow{adaptAnalysisTask<TOFSpectraTaskTiny>("tofspectra-split-task")};
WorkflowSpec workflow{adaptAnalysisTask<TOFSpectraTaskTiny>("tofspectra-tiny-task")};
return workflow;
}
109 changes: 8 additions & 101 deletions Analysis/Tasks/PWGLF/spectraTPC_split.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

// O2 includes
#include "ReconstructionDataFormats/Track.h"
#include "Framework/runDataProcessing.h"
#include "Framework/AnalysisTask.h"
#include "Framework/AnalysisDataModel.h"
#include "Framework/ASoAHelpers.h"
Expand All @@ -20,43 +21,8 @@ using namespace o2;
using namespace o2::framework;
using namespace o2::framework::expressions;

void customize(std::vector<o2::framework::ConfigParamSpec>& workflowOptions)
{
std::vector<ConfigParamSpec> options{
{"add-tof-histos", VariantType::Int, 0, {"Generate TPC with TOF histograms"}}};
std::swap(workflowOptions, options);
}

#include "Framework/runDataProcessing.h"

#define CANDIDATE_SELECTION \
Configurable<float> cfgCutVertex{"cfgCutVertex", 10.0f, "Accepted z-vertex range"}; \
Configurable<float> cfgCutEta{"cfgCutEta", 0.8f, "Eta range for tracks"}; \
Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex; \
Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::isGlobalTrack == (uint8_t) true);

// FIXME: we should put this function in some common header so it has to be defined only once
template <typename T>
void makelogaxis(T h)
{
const int nbins = h->GetNbinsX();
double binp[nbins + 1];
double max = h->GetXaxis()->GetBinUpEdge(nbins);
double min = h->GetXaxis()->GetBinLowEdge(1);
if (min <= 0) {
min = 0.00001;
}
double lmin = TMath::Log10(min);
double ldelta = (TMath::Log10(max) - lmin) / ((double)nbins);
for (int i = 0; i < nbins; i++) {
binp[i] = TMath::Exp(TMath::Log(10) * (lmin + i * ldelta));
}
binp[nbins] = max + 1;
h->GetXaxis()->Set(nbins, binp);
}

constexpr int Np = 9;
struct TPCSpectraTaskSplit {
static constexpr int Np = 9;
static constexpr const char* pT[Np] = {"e", "#mu", "#pi", "K", "p", "d", "t", "^{3}He", "#alpha"};
static constexpr std::string_view hp[Np] = {"p/El", "p/Mu", "p/Pi", "p/Ka", "p/Pr", "p/De", "p/Tr", "p/He", "p/Al"};
static constexpr std::string_view hpt[Np] = {"pt/El", "pt/Mu", "pt/Pi", "pt/Ka", "pt/Pr", "pt/De", "pt/Tr", "pt/He", "pt/Al"};
Expand All @@ -72,11 +38,6 @@ struct TPCSpectraTaskSplit {
}
}

//Defining filters and input
CANDIDATE_SELECTION

Configurable<float> nsigmacut{"nsigmacut", 3, "Value of the Nsigma cut"};

template <std::size_t i, typename T>
void fillParticleHistos(const T& track, const float& nsigma)
{
Expand All @@ -87,6 +48,12 @@ struct TPCSpectraTaskSplit {
histos.fill(HIST(hpt[i]), track.pt());
}

Configurable<float> cfgCutVertex{"cfgCutVertex", 10.0f, "Accepted z-vertex range"};
Configurable<float> cfgCutEta{"cfgCutEta", 0.8f, "Eta range for tracks"};
Configurable<float> nsigmacut{"nsigmacut", 3, "Value of the Nsigma cut"};

Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex;
Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::isGlobalTrack == (uint8_t) true);
using TrackCandidates = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra,
aod::pidRespTPCEl, aod::pidRespTPCMu, aod::pidRespTPCPi,
aod::pidRespTPCKa, aod::pidRespTPCPr, aod::pidRespTPCDe,
Expand All @@ -110,68 +77,8 @@ struct TPCSpectraTaskSplit {
}
};

struct TPCPIDQASignalwTOFTaskSplit {
static constexpr const char* pT[Np] = {"e", "#mu", "#pi", "K", "p", "d", "t", "^{3}He", "#alpha"};
static constexpr std::string_view htpcsignal[Np] = {"tpcsignal/El", "tpcsignal/Mu", "tpcsignal/Pi",
"tpcsignal/Ka", "tpcsignal/Pr", "tpcsignal/De",
"tpcsignal/Tr", "tpcsignal/He", "tpcsignal/Al"};
HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject};

template <uint8_t i>
void addParticleHistos()
{
histos.add(htpcsignal[i].data(), Form(";#it{p} (GeV/#it{c});TPC Signal;N_{#sigma}^{TPC}(%s)", pT[i]), kTH3D, {{1000, 0.001, 20}, {1000, 0, 1000}, {20, -10, 10}});
makelogaxis(histos.get<TH3>(HIST(htpcsignal[i])));
}

void init(o2::framework::InitContext&)
{
addParticleHistos<0>();
addParticleHistos<1>();
addParticleHistos<2>();
addParticleHistos<3>();
addParticleHistos<4>();
addParticleHistos<5>();
addParticleHistos<6>();
addParticleHistos<7>();
addParticleHistos<8>();
}

// Filters
CANDIDATE_SELECTION

Filter trackFilterTOF = (aod::track::tofSignal > 0.f); // Skip tracks without TOF
using TrackCandidates = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra,
aod::pidRespTPCEl, aod::pidRespTPCMu, aod::pidRespTPCPi,
aod::pidRespTPCKa, aod::pidRespTPCPr, aod::pidRespTPCDe,
aod::pidRespTPCTr, aod::pidRespTPCHe, aod::pidRespTPCAl,
aod::pidRespTOFEl, aod::pidRespTOFMu, aod::pidRespTOFPi,
aod::pidRespTOFKa, aod::pidRespTOFPr, aod::pidRespTOFDe,
aod::pidRespTOFTr, aod::pidRespTOFHe, aod::pidRespTOFAl,
aod::TrackSelection>>;

void process(TrackCandidates::iterator const& track)
{
// const float mom = track.p();
const float mom = track.tpcInnerParam();
histos.fill(HIST(htpcsignal[0]), mom, track.tpcSignal(), track.tofNSigmaEl());
histos.fill(HIST(htpcsignal[1]), mom, track.tpcSignal(), track.tofNSigmaMu());
histos.fill(HIST(htpcsignal[2]), mom, track.tpcSignal(), track.tofNSigmaPi());
histos.fill(HIST(htpcsignal[3]), mom, track.tpcSignal(), track.tofNSigmaKa());
histos.fill(HIST(htpcsignal[4]), mom, track.tpcSignal(), track.tofNSigmaPr());
histos.fill(HIST(htpcsignal[5]), mom, track.tpcSignal(), track.tofNSigmaDe());
histos.fill(HIST(htpcsignal[6]), mom, track.tpcSignal(), track.tofNSigmaTr());
histos.fill(HIST(htpcsignal[7]), mom, track.tpcSignal(), track.tofNSigmaHe());
histos.fill(HIST(htpcsignal[8]), mom, track.tpcSignal(), track.tofNSigmaAl());
}
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
int TPCwTOF = cfgc.options().get<int>("add-tof-histos");
WorkflowSpec workflow{adaptAnalysisTask<TPCSpectraTaskSplit>("tpcspectra-split-task")};
if (TPCwTOF) {
workflow.push_back(adaptAnalysisTask<TPCPIDQASignalwTOFTaskSplit>("TPCpidqa-signalwTOF-split-task"));
}
return workflow;
}
32 changes: 3 additions & 29 deletions Analysis/Tasks/PWGLF/spectraTPC_tiny.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

// O2 includes
#include "ReconstructionDataFormats/Track.h"
#include "Framework/runDataProcessing.h"
#include "Framework/AnalysisTask.h"
#include "Framework/AnalysisDataModel.h"
#include "Framework/ASoAHelpers.h"
Expand All @@ -20,34 +21,6 @@ using namespace o2;
using namespace o2::framework;
using namespace o2::framework::expressions;

void customize(std::vector<o2::framework::ConfigParamSpec>& workflowOptions)
{
std::vector<ConfigParamSpec> options{
{"add-tof-histos", VariantType::Int, 0, {"Generate TPC with TOF histograms"}}};
std::swap(workflowOptions, options);
}

#include "Framework/runDataProcessing.h"

template <typename T>
void makelogaxis(T h)
{
const int nbins = h->GetNbinsX();
double binp[nbins + 1];
double max = h->GetXaxis()->GetBinUpEdge(nbins);
double min = h->GetXaxis()->GetBinLowEdge(1);
if (min <= 0) {
min = 0.00001;
}
double lmin = TMath::Log10(min);
double ldelta = (TMath::Log10(max) - lmin) / ((double)nbins);
for (int i = 0; i < nbins; i++) {
binp[i] = TMath::Exp(TMath::Log(10) * (lmin + i * ldelta));
}
binp[nbins] = max + 1;
h->GetXaxis()->Set(nbins, binp);
}

struct TPCSpectraTaskTiny {
static constexpr int Np = 9;
static constexpr const char* pT[Np] = {"e", "#mu", "#pi", "K", "p", "d", "t", "^{3}He", "#alpha"};
Expand Down Expand Up @@ -78,6 +51,7 @@ struct TPCSpectraTaskTiny {
Configurable<float> cfgCutVertex{"cfgCutVertex", 10.0f, "Accepted z-vertex range"};
Configurable<float> cfgCutEta{"cfgCutEta", 0.8f, "Eta range for tracks"};
Configurable<float> nsigmacut{"nsigmacut", 3, "Value of the Nsigma cut"};

Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex;
Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::isGlobalTrack == (uint8_t) true);
using TrackCandidates = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra,
Expand All @@ -103,7 +77,7 @@ struct TPCSpectraTaskTiny {
}
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
WorkflowSpec defineDataProcessing(ConfigContext const&)
{
WorkflowSpec workflow{adaptAnalysisTask<TPCSpectraTaskTiny>("tpcspectra-tiny-task")};
return workflow;
Expand Down
Loading