Skip to content

Commit 16ff654

Browse files
committed
making helper tasks which allows to connect truth to reco
1 parent e7f9357 commit 16ff654

5 files changed

Lines changed: 196 additions & 2 deletions

File tree

PWGUD/DataModel/UDIndex.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
#ifndef PWGUD_DATAMODEL_UDINDEX_H_
13+
#define PWGUD_DATAMODEL_UDINDEX_H_
14+
15+
#include "Framework/AnalysisDataModel.h"
16+
namespace o2::aod
17+
{
18+
namespace udidx
19+
{
20+
DECLARE_SOA_ARRAY_INDEX_COLUMN(UDTrack, udtracks);
21+
DECLARE_SOA_ARRAY_INDEX_COLUMN(UDCollision, udcollisions);
22+
} // namespace udidx
23+
DECLARE_SOA_TABLE(UDMcParticlesToUDTracks, "AOD", "UDP2UDT", udidx::UDTrackIds);
24+
DECLARE_SOA_TABLE(UDMcCollisionsToUDCollisions, "AOD", "UDMCC2UDC", udidx::UDCollisionIds);
25+
} // namespace o2::aod
26+
#endif // PWGUD_DATAMODEL_UDINDEX_H_

PWGUD/TableProducer/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,8 @@ o2physics_add_dpl_workflow(fwdtrack-propagation
4040
SOURCES fwdTrackPropagation.cxx
4141
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2::GlobalTracking
4242
COMPONENT_NAME Analysis)
43+
44+
o2physics_add_dpl_workflow(udmcparticles-to-udtracks
45+
SOURCES udMcParticles2udTracks.cxx
46+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
47+
COMPONENT_NAME Analysis)

PWGUD/TableProducer/tauEventTableProducer.cxx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include "Common/DataModel/TrackSelectionTables.h"
4141
#include "PWGUD/Core/UPCTauCentralBarrelHelperRL.h"
4242
#include "PWGUD/DataModel/UDTables.h"
43+
#include "PWGUD/DataModel/UDIndex.h" // for UDMcParticles2UDTracks table
4344
#include "PWGUD/Core/SGSelector.h"
4445

4546
// ROOT headers
@@ -193,6 +194,10 @@ struct TauEventTableProducer {
193194
using FullUDTracks = soa::Join<aod::UDTracks, aod::UDTracksExtra, aod::UDTracksDCA, aod::UDTracksPID, aod::UDTracksFlags>;
194195
using FullSGUDCollisions = soa::Join<aod::UDCollisions, aod::UDCollisionsSels, aod::UDCollisionSelExtras, aod::SGCollisions, aod::UDZdcsReduced>;
195196
using FullSGUDCollision = FullSGUDCollisions::iterator;
197+
using FullMCUDTracks = soa::Join<aod::UDTracks, aod::UDTracksExtra, aod::UDTracksDCA, aod::UDTracksPID, aod::UDTracksFlags, aod::UDMcTrackLabels>;
198+
using FullMCSGUDCollisions = soa::Join<aod::UDCollisions, aod::UDCollisionsSels, aod::UDCollisionSelExtras, aod::SGCollisions, aod::UDMcCollsLabels>;
199+
using FullMCSGUDCollision = FullMCSGUDCollisions::iterator;
200+
using UDMcParticlesWithUDTracks = soa::Join<aod::McParticles, aod::UDMcParticlesToUDTracks>;
196201

197202
// init
198203
void init(InitContext&)
@@ -471,9 +476,19 @@ struct TauEventTableProducer {
471476
tofSignal, tofEl, tofMu, tofPi, tofKa, tofPr, tofEP);
472477
}
473478

474-
} // end processDataSG
479+
}
480+
PROCESS_SWITCH(TauEventTableProducer, processDataSG, "Iterate UD tables with measured data created by SG-Candidate-Producer.", false);
481+
482+
void processMonteCarlo(FullMCSGUDCollision const& mccollision,
483+
FullSGUDCollisions const& collisions,
484+
FullUDTracks const& tracks,
485+
UDMcParticlesWithUDTracks const& particles)
486+
{
487+
488+
489+
}
490+
PROCESS_SWITCH(TauEventTableProducer, processMonteCarlo, "Iterate UD tables with simulated data created by SG-Candidate-Producer.", false);
475491

476-
PROCESS_SWITCH(TauEventTableProducer, processDataSG, "Iterate UD tables with measured data created by SG-Candidate-Producer.", false);
477492
};
478493

479494
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
///
13+
/// \file udParticles2udTracks.cxx
14+
/// \author Roman Lavička
15+
/// \since 2025-04-15
16+
/// \brief A task to create a reverse index from UDMcCollisions to UDCollisions
17+
///
18+
19+
#include "Framework/runDataProcessing.h"
20+
#include "Framework/AnalysisDataModel.h"
21+
#include "Framework/AnalysisTask.h"
22+
#include "PWGUD/DataModel/UDTables.h"
23+
#include "PWGUD/DataModel/UDIndex.h"
24+
25+
using namespace o2;
26+
using namespace o2::framework;
27+
28+
struct UDMcCollisions2UDCollisions {
29+
using LabeledCollisions = soa::Join<aod::UDCollisions, aod::UDMcCollsLabels>;
30+
Produces<aod::UDMcCollisionsToUDCollisions> udmcc2udc;
31+
32+
std::vector<int> collisionIds;
33+
34+
void init(InitContext&)
35+
{
36+
}
37+
38+
void process(aod::UDMcCollisions const& mcCollisions)
39+
{
40+
if (doprocessIndexingCentral || doprocessIndexingCentralFast) {
41+
udmcc2udc.reserve(mcCollisions.size());
42+
}
43+
}
44+
45+
void processIndexingCentralFast(aod::UDMcCollisions const& mcCollisions, LabeledCollisions const& collisions)
46+
{
47+
// faster version, but will use more memory due to pre-allocation
48+
std::vector<std::vector<int>> mccoll2coll(mcCollisions.size());
49+
for (auto& collision : collisions) {
50+
if (collision.has_mcCollision())
51+
mccoll2coll[collision.mcCollisionId()].push_back(collision.globalIndex());
52+
}
53+
for (auto& mcCollision : mcCollisions) {
54+
udmcc2udc(mccoll2coll[mcCollision.globalIndex()]);
55+
}
56+
}
57+
PROCESS_SWITCH(UDMcCollisions2UDCollisions, processIndexingCentralFast, "Create reverse index from mccollisions to collision: more memory use but potentially faster", true);
58+
59+
void processIndexingCentral(aod::UDMcCollisions const&, soa::SmallGroups<LabeledCollisions> const& collisions)
60+
{
61+
collisionIds.clear();
62+
for (auto& collision : collisions) {
63+
collisionIds.push_back(collision.globalIndex());
64+
}
65+
udmcc2udc(collisionIds);
66+
}
67+
PROCESS_SWITCH(UDMcCollisions2UDCollisions, processIndexingCentral, "Create reverse index from mccollisions to collision", false);
68+
69+
};
70+
71+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
72+
{
73+
return WorkflowSpec{adaptAnalysisTask<UDMcCollisions2UDCollisions>(cfgc)};
74+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
///
13+
/// \file udParticles2udTracks.cxx
14+
/// \author Roman Lavička
15+
/// \since 2025-04-15
16+
/// \brief A task to create a reverse index from UDMcParticles to UDTracks
17+
///
18+
19+
#include "Framework/runDataProcessing.h"
20+
#include "Framework/AnalysisDataModel.h"
21+
#include "Framework/AnalysisTask.h"
22+
#include "PWGUD/DataModel/UDTables.h"
23+
#include "PWGUD/DataModel/UDIndex.h"
24+
25+
using namespace o2;
26+
using namespace o2::framework;
27+
28+
struct UDMcParticlesToUDTracks {
29+
using LabeledTracks = soa::Join<aod::UDTracks, aod::UDMcTrackLabels>;
30+
Produces<aod::UDMcParticlesToUDTracks> udp2udt;
31+
32+
std::vector<int> trackIds;
33+
34+
void init(InitContext&)
35+
{
36+
}
37+
38+
void process(aod::UDMcParticles const& particles)
39+
{
40+
if (doprocessIndexingCentral || doprocessIndexingCentralFast) {
41+
udp2udt.reserve(particles.size());
42+
}
43+
}
44+
45+
void processIndexingCentralFast(aod::UDMcParticles const& mcParticles, LabeledTracks const& tracks)
46+
{
47+
// faster version, but will use more memory due to pre-allocation
48+
std::vector<std::vector<int>> part2track(mcParticles.size());
49+
for (auto& track : tracks) {
50+
if (track.has_mcParticle())
51+
part2track[track.mcParticleId()].push_back(track.globalIndex());
52+
}
53+
for (auto& mcParticle : mcParticles) {
54+
udp2udt(part2track[mcParticle.globalIndex()]);
55+
}
56+
}
57+
PROCESS_SWITCH(UDMcParticlesToUDTracks, processIndexingCentralFast, "Create reverse index from particles to tracks: more memory use but potentially faster", true);
58+
59+
void processIndexingCentral(aod::UDMcParticles const&, soa::SmallGroups<LabeledTracks> const& tracks)
60+
{
61+
trackIds.clear();
62+
for (auto& track : tracks) {
63+
trackIds.push_back(track.globalIndex());
64+
}
65+
udp2udt(trackIds);
66+
}
67+
PROCESS_SWITCH(UDMcParticlesToUDTracks, processIndexingCentral, "Create reverse index from particles to tracks", false);
68+
69+
};
70+
71+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
72+
{
73+
return WorkflowSpec{adaptAnalysisTask<UDMcParticlesToUDTracks>(cfgc)};
74+
}

0 commit comments

Comments
 (0)