Skip to content

Commit 9c2ac71

Browse files
authored
Clean LF derived tree producer (AliceO2Group#827)
1 parent c3dcdbc commit 9c2ac71

2 files changed

Lines changed: 72 additions & 70 deletions

File tree

PWGLF/DataModel/LFNucleiTables.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ namespace fullEvent
3030
DECLARE_SOA_INDEX_COLUMN(BC, bc); //! Most probably BC to where this collision has occured
3131
DECLARE_SOA_COLUMN(IsEventReject, isEventReject, int);
3232
DECLARE_SOA_COLUMN(RunNumber, runNumber, int);
33-
DECLARE_SOA_COLUMN(Vz, vz, float);
3433
DECLARE_SOA_COLUMN(V0M, v0m, int);
3534
} // namespace fullEvent
3635
DECLARE_SOA_TABLE(LfCandNucleusFullEvents, "AOD", "LFNUCLEvent",

PWGLF/TableProducer/LFTreeCreatorNuclei.cxx

Lines changed: 72 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,15 @@ using namespace o2::framework::expressions;
4646

4747
/// Writes the full information in an output TTree
4848
struct LfTreeCreatorNuclei {
49-
Produces<o2::aod::LfCandNucleusFull> rowCandidateFull;
50-
Produces<o2::aod::LfCandNucleusFullEvents> rowCandidateFullEvents;
51-
Produces<o2::aod::LfCandNucleusMC> rowCandidateMC;
49+
Produces<o2::aod::LfCandNucleusFullEvents> tableEvents;
50+
Produces<o2::aod::LfCandNucleusFull> tableCandidate;
51+
Produces<o2::aod::LfCandNucleusMC> tableCandidateMC;
5252

5353
void init(o2::framework::InitContext&)
5454
{
55+
if (doprocessData == true && doprocessMC == true) {
56+
LOGF(fatal, "Cannot enable processData and processMC at the same time. Please choose one.");
57+
}
5558
}
5659

5760
// track
@@ -69,97 +72,97 @@ struct LfTreeCreatorNuclei {
6972
Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex;
7073
Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (requireGlobalTrackInFilter());
7174
Filter DCAcutFilter = (nabs(aod::track::dcaXY) < cfgCutDCAxy) && (nabs(aod::track::dcaZ) < cfgCutDCAz);
75+
using EventCandidates = soa::Join<aod::Collisions, aod::EvSels, aod::Mults>;
7276
using TrackCandidates = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksExtended, aod::TrackSelection,
7377
aod::pidTOFbeta, aod::TOFSignal,
7478
aod::pidTPCFullPi, aod::pidTOFFullPi,
7579
aod::pidTPCFullKa, aod::pidTOFFullKa,
7680
aod::pidTPCFullPr, aod::pidTOFFullPr,
7781
aod::pidTPCFullDe, aod::pidTOFFullDe,
7882
aod::pidTPCFullHe, aod::pidTOFFullHe>;
79-
int nevs = 0;
80-
void process(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults>> const& collisions,
81-
soa::Filtered<TrackCandidates> const& tracks, aod::BCs const&)
83+
84+
template <bool isMC, typename TrackType, typename CollisionType>
85+
void fillForOneEvent(CollisionType const& collision, TrackType const& tracks)
86+
{
87+
// Filling event properties
88+
tableEvents(collision.bcId(),
89+
collision.numContrib(),
90+
collision.posX(),
91+
collision.posY(),
92+
collision.posZ(),
93+
collision.multFV0M(),
94+
collision.sel8(),
95+
collision.bc().runNumber());
96+
97+
// Filling candidate properties
98+
tableCandidate.reserve(tracks.size());
99+
if constexpr (isMC) {
100+
tableCandidateMC.reserve(tracks.size());
101+
}
102+
for (auto& track : tracks) {
103+
// auto const& mcParticle = track.mcParticle();
104+
tableCandidate(
105+
tableEvents.lastIndex(),
106+
track.dcaXY(),
107+
track.dcaZ(),
108+
track.tpcNSigmaPi(), track.tpcNSigmaKa(), track.tpcNSigmaPr(),
109+
track.tpcNSigmaDe(), track.tpcNSigmaHe(),
110+
track.tofNSigmaPi(), track.tofNSigmaKa(), track.tofNSigmaPr(),
111+
track.tofNSigmaDe(), track.tofNSigmaHe(),
112+
track.hasTOF(),
113+
track.tpcInnerParam(),
114+
track.tpcSignal(),
115+
track.beta(),
116+
track.px(),
117+
track.py(),
118+
track.pz(),
119+
track.pt(),
120+
track.p(),
121+
track.eta(),
122+
track.phi(),
123+
track.sign(),
124+
track.tpcNClsCrossedRows(),
125+
track.tpcCrossedRowsOverFindableCls(),
126+
track.tpcChi2NCl(),
127+
track.itsChi2NCl());
128+
129+
if constexpr (isMC) { // Filling MC reco information
130+
if (track.has_mcParticle()) {
131+
const auto& particle = track.mcParticle();
132+
tableCandidateMC(particle.pdgCode());
133+
continue;
134+
}
135+
tableCandidateMC(0);
136+
}
137+
}
138+
}
139+
140+
void processData(soa::Filtered<EventCandidates> const& collisions,
141+
soa::Filtered<TrackCandidates> const& tracks, aod::BCs const&)
82142
{
83143
for (const auto& collision : collisions) {
84-
LOG(INFO) << "nevs=" << nevs++;
85144
if (useEvsel && !collision.sel8()) {
86145
return;
87146
}
88-
// std::cout<<"mc Z-vertex ====>"<<mcColl.posZ()<<std::endl;
89-
/*for(auto& mcCollItr : mcCollisions)
90-
{}*/
91-
// Filling event properties
92-
rowCandidateFullEvents(
93-
collision.bcId(),
94-
collision.numContrib(),
95-
collision.posX(),
96-
collision.posY(),
97-
collision.posZ(),
98-
collision.multFV0M(),
99-
collision.sel8(),
100-
collision.bc().runNumber());
101-
102-
// Filling candidate properties
103147
const auto& tracksInCollision = tracks.sliceBy(aod::track::collisionId, collision.globalIndex());
104-
rowCandidateFull.reserve(tracksInCollision.size());
105-
for (auto& track : tracksInCollision) {
106-
// auto const& mcParticle = track.mcParticle();
107-
// std::cout<<"mc pdg code ====>"<<mcParticle.pdgCode()<<std::endl;
108-
// std::cout<<"mc physical primary ====>"<<mcParticle.isPhysicalPrimary()<<std::endl;
109-
// std::cout<<"eta-gen ====>"<<mcParticle.eta()<<" eta-reco"<<track.eta()<<std::endl;
110-
rowCandidateFull(
111-
rowCandidateFullEvents.lastIndex(),
112-
track.dcaXY(),
113-
track.dcaZ(),
114-
track.tpcNSigmaPi(), track.tpcNSigmaKa(), track.tpcNSigmaPr(),
115-
track.tpcNSigmaDe(), track.tpcNSigmaHe(),
116-
track.tofNSigmaPi(), track.tofNSigmaKa(), track.tofNSigmaPr(),
117-
track.tofNSigmaDe(), track.tofNSigmaHe(),
118-
track.hasTOF(),
119-
track.tpcInnerParam(),
120-
track.tpcSignal(),
121-
track.beta(),
122-
track.px(),
123-
track.py(),
124-
track.pz(),
125-
track.pt(),
126-
track.p(),
127-
track.eta(),
128-
track.phi(),
129-
track.sign(),
130-
track.tpcNClsCrossedRows(),
131-
track.tpcCrossedRowsOverFindableCls(),
132-
track.tpcChi2NCl(),
133-
track.itsChi2NCl());
134-
}
148+
fillForOneEvent<false>(collision, tracksInCollision);
135149
}
136150
}
137-
int nevsmc = 0;
138-
void processMC(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::McCollisionLabels>> const& collisions,
151+
PROCESS_SWITCH(LfTreeCreatorNuclei, processData, "process Data", true);
152+
153+
void processMC(soa::Filtered<soa::Join<EventCandidates, aod::McCollisionLabels>> const& collisions,
139154
soa::Filtered<soa::Join<TrackCandidates, aod::McTrackLabels>> const& tracks,
140155
aod::BCs const&, aod::McCollisions const& mcCollisions, aod::McParticles const& mcParticles)
141156
{
142157
for (const auto& collision : collisions) {
143-
LOG(INFO) << "nevsmc=" << nevsmc++;
144158
if (useEvsel && !collision.sel8()) {
145159
return;
146160
}
147161
const auto& tracksInCollision = tracks.sliceBy(aod::track::collisionId, collision.globalIndex());
148-
rowCandidateMC.reserve(tracksInCollision.size());
149-
LOG(info) << tracks.size() << " " << tracksInCollision.size();
150-
for (const auto& track : tracksInCollision)
151-
// for(const auto& track: tracks)
152-
{
153-
if (track.has_mcParticle()) {
154-
const auto& particle = track.mcParticle();
155-
rowCandidateMC(particle.pdgCode());
156-
continue;
157-
}
158-
rowCandidateMC(0);
159-
}
162+
fillForOneEvent<true>(collision, tracksInCollision);
160163
}
161164
}
162-
PROCESS_SWITCH(LfTreeCreatorNuclei, processMC, "process MC", true);
165+
PROCESS_SWITCH(LfTreeCreatorNuclei, processMC, "process MC", false);
163166
};
164167

165168
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)