Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
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 4 Analysis/ALICE3/src/alice3-lutmaker.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ struct Alice3LutMaker {
if (mcParticle.pdgCode() != pdg) {
continue;
}
if (selPrim.value && !MC::isPhysicalPrimary<aod::McParticles>(mcParticle)) { // Requiring is physical primary
if (selPrim.value && !MC::isPhysicalPrimary(mcParticle)) { // Requiring is physical primary
continue;
}

Expand Down Expand Up @@ -133,7 +133,7 @@ struct Alice3LutMaker {
if (mcParticle.pdgCode() != pdg) {
continue;
}
if (!MC::isPhysicalPrimary<aod::McParticles>(mcParticle)) { // Requiring is physical primary
if (!MC::isPhysicalPrimary(mcParticle)) { // Requiring is physical primary
continue;
}

Expand Down
4 changes: 2 additions & 2 deletions 4 Analysis/ALICE3/src/alice3-qa-singleparticle.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -118,13 +118,13 @@ struct Alice3SingleParticle {
continue;
}
auto mother = mcParticle.mother0_as<aod::McParticles>();
if (MC::isPhysicalPrimary<aod::McParticles>(mcParticle)) {
if (MC::isPhysicalPrimary(mcParticle)) {
histos.get<TH1>(HIST("primaries"))->Fill(Form("%i", mother.pdgCode()), 1.f);
} else {
histos.get<TH1>(HIST("secondaries"))->Fill(Form("%i", mother.pdgCode()), 1.f);
}
if (doPrint) {
LOG(INFO) << "Track " << track.globalIndex() << " is a " << mcParticle.pdgCode() << " and comes from a " << mother.pdgCode() << " and is " << (MC::isPhysicalPrimary<aod::McParticles>(mcParticle) ? "" : "not") << " a primary";
LOG(INFO) << "Track " << track.globalIndex() << " is a " << mcParticle.pdgCode() << " and comes from a " << mother.pdgCode() << " and is " << (MC::isPhysicalPrimary(mcParticle) ? "" : "not") << " a primary";
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion 2 Analysis/ALICE3/src/pidFTOFqa.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ struct ftofPidQaMC {
if (pdgCode != 0 && abs(mcParticle.pdgCode()) != pdgCode) {
continue;
}
if (useOnlyPhysicsPrimary == 1 && !MC::isPhysicalPrimary<aod::McParticles>(mcParticle)) { // Selecting primaries
if (useOnlyPhysicsPrimary == 1 && !MC::isPhysicalPrimary(mcParticle)) { // Selecting primaries
histos.fill(HIST("p/Sec"), track.p());
continue;
}
Expand Down
4 changes: 2 additions & 2 deletions 4 Analysis/ALICE3/src/pidRICHqa.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ struct richPidQaMc {
if (abs(particle.pdgCode()) == PDGs[pidIndex]) {
histos.fill(HIST(hnsigmaMC[pidIndex]), track.pt(), nsigma);

if (MC::isPhysicalPrimary<aod::McParticles>(particle)) { // Selecting primaries
if (MC::isPhysicalPrimary(particle)) { // Selecting primaries
histos.fill(HIST(hnsigmaMCprm[pidIndex]), track.pt(), nsigma);
} else {
histos.fill(HIST(hnsigmaMCsec[pidIndex]), track.pt(), nsigma);
Expand Down Expand Up @@ -250,7 +250,7 @@ struct richPidQaMc {
}
histos.fill(HIST(hnsigma[pid_type]), track.pt(), nsigma);
histos.fill(HIST(hdelta[pid_type]), track.p(), delta);
if (MC::isPhysicalPrimary<aod::McParticles>(mcParticle)) { // Selecting primaries
if (MC::isPhysicalPrimary(mcParticle)) { // Selecting primaries
histos.fill(HIST(hnsigmaprm[pid_type]), track.pt(), nsigma);
histos.fill(HIST("p/Prim"), track.p());
} else {
Expand Down
1 change: 0 additions & 1 deletion 1 Analysis/Core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ o2_target_root_dictionary(AnalysisCore
include/AnalysisCore/TrackSelection.h
include/AnalysisCore/TrackSelectionDefaults.h
include/AnalysisCore/TriggerAliases.h
include/AnalysisCore/MC.h
LINKDEF src/AnalysisCoreLinkDef.h)

o2_add_executable(merger
Expand Down
9 changes: 8 additions & 1 deletion 9 Analysis/Core/include/AnalysisCore/MC.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#define MC_H

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

#include "TPDGCode.h"

Expand Down Expand Up @@ -61,7 +62,7 @@ bool isStable(int pdg)

// Ported from AliRoot AliStack::IsPhysicalPrimary
template <typename Particles, typename Particle>
bool isPhysicalPrimary(Particle& particle)
bool isPhysicalPrimary(Particle const& particle)
{
// Test if a particle is a physical primary according to the following definition:
// Particles produced in the collision including products of strong and
Expand Down Expand Up @@ -169,6 +170,12 @@ bool isPhysicalPrimary(Particle& particle)
}
}

// Short hand for the standard type
bool isPhysicalPrimary(o2::aod::McParticle const& particle)
{
return isPhysicalPrimary<o2::aod::McParticles>(particle);
}

}; // namespace MC

#endif
4 changes: 2 additions & 2 deletions 4 Analysis/Tasks/PID/qaTOFMC.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ struct pidTOFTaskQA {
if (abs(particle.pdgCode()) == PDGs[pidIndex]) {
histos.fill(HIST(hnsigmaMC[pidIndex]), track.pt(), nsigma);

if (MC::isPhysicalPrimary<aod::McParticles>(particle)) { // Selecting primaries
if (MC::isPhysicalPrimary(particle)) { // Selecting primaries
histos.fill(HIST(hnsigmaMCprm[pidIndex]), track.pt(), nsigma);
} else {
histos.fill(HIST(hnsigmaMCsec[pidIndex]), track.pt(), nsigma);
Expand Down Expand Up @@ -190,7 +190,7 @@ struct pidTOFTaskQA {
histos.fill(HIST(hnsigma[pid_type]), t.pt(), nsigma);
histos.fill(HIST("event/tofbeta"), t.p(), t.beta());
const auto particle = t.mcParticle();
if (MC::isPhysicalPrimary<aod::McParticles>(particle)) { // Selecting primaries
if (MC::isPhysicalPrimary(particle)) { // Selecting primaries
histos.fill(HIST(hnsigmaprm[pid_type]), t.pt(), nsigma);
histos.fill(HIST("event/tofbetaPrm"), t.p(), t.beta());
} else {
Expand Down
4 changes: 2 additions & 2 deletions 4 Analysis/Tasks/PWGLF/NucleiSpectraEfficiency.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ struct NucleiSpectraEfficiencyGen {
spectra.add("histGenPt", "generated particles", HistType::kTH1F, {ptAxis});
}

void process(aod::McCollision const& mcCollision, aod::McParticles& mcParticles)
void process(aod::McCollision const& mcCollision, aod::McParticles const& mcParticles)
{
//
// loop over generated particles and fill generated particles
Expand All @@ -79,7 +79,7 @@ struct NucleiSpectraEfficiencyGen {
if (mcParticleGen.pdgCode() != -1000020030) {
continue;
}
if (!MC::isPhysicalPrimary<aod::McParticles>(mcParticleGen)) {
if (!MC::isPhysicalPrimary(mcParticleGen)) {
continue;
}
if (abs(mcParticleGen.y()) > 0.5) {
Expand Down
6 changes: 3 additions & 3 deletions 6 Analysis/Tasks/PWGLF/raacharged.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ struct raacharged {

Configurable<bool> isMC{"isMC", 1, "0 - data, 1 - MC"};

void process(soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::Cents>::iterator const& collision, soa::Join<aod::Tracks, aod::McTrackLabels, aod::TrackSelection> const& tracks, aod::McParticles& mcParticles)
void process(soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::Cents>::iterator const& collision, soa::Join<aod::Tracks, aod::McTrackLabels, aod::TrackSelection> const& tracks, aod::McParticles const& mcParticles)
{
if (!collision.alias()[kINT7]) {
return;
Expand All @@ -179,7 +179,7 @@ struct raacharged {
continue;
}
const auto particle = track.mcParticle();
if (MC::isPhysicalPrimary<aod::McParticles>(particle)) {
if (MC::isPhysicalPrimary(particle)) {
mcInfoVal = 0.0;
} else {
mcInfoVal = 1.0;
Expand All @@ -198,7 +198,7 @@ struct raacharged {
if (abs(mcParticle.eta()) > 0.8) {
continue;
}
if (!MC::isPhysicalPrimary<aod::McParticles>(mcParticle)) {
if (!MC::isPhysicalPrimary(mcParticle)) {
continue;
}

Expand Down
6 changes: 3 additions & 3 deletions 6 Analysis/Tasks/PWGLF/trackchecks.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ struct TrackCheckTaskEvSel {
//Filters
Filter collfilter = nabs(aod::collision::posZ) < cfgCutVZ;
void process(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>>::iterator const& col,
soa::Join<aod::Tracks, aod::TracksExtra, aod::McTrackLabels>& tracks, aod::McParticles& mcParticles)
soa::Join<aod::Tracks, aod::TracksExtra, aod::McTrackLabels>& tracks, aod::McParticles const& mcParticles)
{

//event selection
Expand All @@ -110,7 +110,7 @@ struct TrackCheckTaskEvSel {
const auto particle = track.mcParticle();
int pdgcode = particle.pdgCode();

if (MC::isPhysicalPrimary<aod::McParticles>(particle)) { //is primary?
if (MC::isPhysicalPrimary(particle)) { //is primary?
isPrimary = true;
}

Expand Down Expand Up @@ -208,7 +208,7 @@ struct TrackCheckTaskEvSelTrackSel {
const auto particle = track.mcParticle();
int pdgcode = particle.pdgCode();

if (MC::isPhysicalPrimary<aod::McParticles>(particle)) { //is primary?
if (MC::isPhysicalPrimary(particle)) { //is primary?
isPrimary = true;
}
//Calculate y
Expand Down
2 changes: 1 addition & 1 deletion 2 Analysis/Tasks/PWGPP/qaEfficiency.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ struct QaTrackingEfficiency {
return true;
}
histos.fill(h, 5);
if ((selPrim == 1) && (!MC::isPhysicalPrimary<o2::aod::McParticles>(p))) { // Requiring is physical primary
if ((selPrim == 1) && (!MC::isPhysicalPrimary(p))) { // Requiring is physical primary
return true;
}
histos.fill(h, 6);
Expand Down
6 changes: 3 additions & 3 deletions 6 Analysis/Tasks/PWGPP/qaEventTrack.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ struct QaTrackingKine {
if (pdgCodeSel != 0 && particle.pdgCode() != pdgCodeSel) { // Checking PDG code
continue;
}
if (MC::isPhysicalPrimary<o2::aod::McParticles>(particle)) {
if (MC::isPhysicalPrimary(particle)) {
histos.fill(HIST("trackingPrm/pt"), t.pt());
histos.fill(HIST("trackingPrm/eta"), t.eta());
histos.fill(HIST("trackingPrm/phi"), t.phi());
Expand All @@ -223,7 +223,7 @@ struct QaTrackingKine {
histos.fill(HIST("particle/pt"), particle.pt());
histos.fill(HIST("particle/eta"), particle.eta());
histos.fill(HIST("particle/phi"), particle.phi());
if (MC::isPhysicalPrimary<o2::aod::McParticles>(particle)) {
if (MC::isPhysicalPrimary(particle)) {
histos.fill(HIST("particlePrm/pt"), particle.pt());
histos.fill(HIST("particlePrm/eta"), particle.eta());
histos.fill(HIST("particlePrm/phi"), particle.phi());
Expand Down Expand Up @@ -376,7 +376,7 @@ struct QaTrackingResolution {
if (pdgCodeSel != 0 && particle.pdgCode() != pdgCodeSel) {
continue;
}
if (useOnlyPhysicsPrimary && !MC::isPhysicalPrimary<o2::aod::McParticles>(particle)) {
if (useOnlyPhysicsPrimary && !MC::isPhysicalPrimary(particle)) {
continue;
}
const double deltaPt = track.pt() - particle.pt();
Expand Down
30 changes: 27 additions & 3 deletions 30 Analysis/Tutorials/src/mcHistograms.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@ struct AccessMcData {
OutputObj<TH1F> etaH{TH1F("eta", "eta", 102, -2.01, 2.01)};

// group according to McCollisions
void process(aod::McCollision const& mcCollision, aod::McParticles& mcParticles)
void process(aod::McCollision const& mcCollision, aod::McParticles const& mcParticles)
{
// access MC truth information with mcCollision() and mcParticle() methods
LOGF(info, "MC. vtx-z = %f", mcCollision.posZ());
LOGF(info, "First: %d | Length: %d", mcParticles.begin().index(), mcParticles.size());
int count = 0;
for (auto& mcParticle : mcParticles) {
if (MC::isPhysicalPrimary<aod::McParticles>(mcParticle)) {
if (MC::isPhysicalPrimary(mcParticle)) {
phiH->Fill(mcParticle.phi());
etaH->Fill(mcParticle.eta());
count++;
Expand All @@ -61,7 +61,8 @@ struct AccessMcTruth {
OutputObj<TH1F> phiDiff{TH1F("phiDiff", ";phi_{MC} - phi_{Rec}", 100, -M_PI, M_PI)};

// group according to reconstructed Collisions
void process(soa::Join<aod::Collisions, aod::McCollisionLabels>::iterator const& collision, soa::Join<aod::Tracks, aod::McTrackLabels> const& tracks, aod::McParticles const& mcParticles, aod::McCollisions const& mcCollisions)
void process(soa::Join<aod::Collisions, aod::McCollisionLabels>::iterator const& collision, soa::Join<aod::Tracks, aod::McTrackLabels> const& tracks,
aod::McParticles const& mcParticles, aod::McCollisions const& mcCollisions)
{
// access MC truth information with mcCollision() and mcParticle() methods
LOGF(info, "vtx-z (data) = %f | vtx-z (MC) = %f", collision.posZ(), collision.mcCollision().posZ());
Expand All @@ -84,11 +85,34 @@ struct AccessMcTruth {
}
};

// Loop over MCColisions and get corresponding collisions (there can be more than one)
// For each of them get the corresponding tracks
struct LoopOverMcMatched {
OutputObj<TH1F> etaDiff{TH1F("etaDiff", ";eta_{MC} - eta_{Rec}", 100, -2, 2)};
void process(aod::McCollision const& mcCollision, soa::Join<aod::McCollisionLabels, aod::Collisions> const& collisions,
soa::Join<aod::Tracks, aod::McTrackLabels> const& tracks, aod::McParticles const& mcParticles)
{
// access MC truth information with mcCollision() and mcParticle() methods
LOGF(info, "MC collision at vtx-z = %f with %d mc particles and %d reconstructed collisions", mcCollision.posZ(), mcParticles.size(), collisions.size());
for (auto& collision : collisions) {
LOGF(info, " Reconstructed collision at vtx-z = %f", collision.posZ());

// NOTE this will be replaced by a improved grouping in the future
auto groupedTracks = tracks.sliceBy(aod::track::collisionId, collision.globalIndex());
LOGF(info, " which has %d tracks", groupedTracks.size());
for (auto& track : groupedTracks) {
etaDiff->Fill(track.mcParticle().eta() - track.eta());
}
}
}
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
return WorkflowSpec{
adaptAnalysisTask<VertexDistribution>(cfgc),
adaptAnalysisTask<AccessMcData>(cfgc),
adaptAnalysisTask<AccessMcTruth>(cfgc),
adaptAnalysisTask<LoopOverMcMatched>(cfgc),
};
}
Morty Proxy This is a proxified and sanitized view of the page, visit original site.