Skip to content

Commit 5ec23fa

Browse files
DanielSamitzsawenzel
authored andcommitted
use 'Produces' and 'Spawns' to create tables
1 parent 21fcba2 commit 5ec23fa

3 files changed

Lines changed: 59 additions & 115 deletions

File tree

run/SimExamples/McTracksToAOD/mctracks_to_aod_simple_task.cxx

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,11 @@
1313
#include "Framework/HistogramRegistry.h"
1414
#include "Framework/AnalysisDataModel.h"
1515
#include "Framework/ConfigParamSpec.h"
16+
#include "Framework/runDataProcessing.h"
1617

1718
using namespace o2;
1819
using namespace o2::framework;
1920

20-
void customize(std::vector<o2::framework::ConfigParamSpec>& workflowOptions)
21-
{
22-
workflowOptions.push_back(ConfigParamSpec{"on-the-fly", o2::framework::VariantType::Bool, false, {"set the inputs for on-the-fly analysis"}});
23-
}
24-
25-
#include "Framework/runDataProcessing.h"
26-
2721
struct SimpleTask {
2822

2923
HistogramRegistry registry{"registry", {}};
@@ -51,13 +45,6 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
5145
{
5246
WorkflowSpec specs;
5347
DataProcessorSpec dSpec = adaptAnalysisTask<SimpleTask>(cfgc, TaskName{"mctracks-to-aod-simple-task"});
54-
if (cfgc.options().get<bool>("on-the-fly")) {
55-
std::vector<InputSpec> inputs;
56-
inputs.emplace_back("McCollisions", "AOD", "MCCOLLISION", 0, Lifetime::Timeframe);
57-
inputs.emplace_back("McParticles", "AOD", "MCPARTICLE_001", 0, Lifetime::Timeframe);
58-
inputs.emplace_back("McParticles_001Extension", "AOD", "MCPARTICLE_001E", 0, Lifetime::Timeframe);
59-
dSpec.inputs = inputs;
60-
}
6148
specs.emplace_back(dSpec);
6249
return specs;
6350
}

run/SimExamples/McTracksToAOD/run.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ SIMPROC=$!
1010
# launch a DPL process (having the right proxy configuration)
1111
# (Note that the option --o2sim-pid is not strictly necessary when only one o2-sim process is running.
1212
# The socket will than be auto-determined.)
13-
o2-sim-mctracks-proxy -b --nevents ${NEVENTS} --o2sim-pid ${SIMPROC} | o2-sim-mctracks-to-aod -b | o2-analysis-mctracks-to-aod-simple-task -b --on-the-fly &
13+
14+
o2-sim-mctracks-proxy -b --nevents ${NEVENTS} --o2sim-pid ${SIMPROC} | o2-sim-mctracks-to-aod -b | o2-analysis-mctracks-to-aod-simple-task -b &
1415
TRACKANAPROC=$!
1516

1617
wait ${SIMPROC}
1718
wait ${TRACKANAPROC}
1819

1920

20-
# the very same analysis task can also directly run on an AO2D with McCollisions and McParticles_001 without the '--on-the-fly' flag:
21+
# the very same analysis task can also directly run on an AO2D with McCollisions and McParticles:
2122
# o2-analysis-mctracks-to-aod-simple-task -b --aod-file <AO2DFile>

run/o2sim_mctracks_to_aod.cxx

Lines changed: 55 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -18,36 +18,39 @@
1818

1919
using namespace o2::framework;
2020

21-
struct KineToAOD {
22-
23-
int eventNumber = 0;
21+
struct McTracksToAODSpawner {
22+
Spawns<o2::aod::McParticles> mcparticlesExt;
2423

2524
void init(o2::framework::InitContext& ic) {}
2625

27-
void run(o2::framework::ProcessingContext& pc)
28-
{
26+
void run(o2::framework::ProcessingContext& pc) {}
27+
};
2928

30-
auto mctracks = pc.inputs().get<std::vector<o2::MCTrack>>("mctracks");
31-
auto mcheader = pc.inputs().get<o2::dataformats::MCEventHeader*>("mcheader");
29+
struct McTracksToAOD {
30+
31+
Produces<o2::aod::McCollisions> mcollisions;
32+
Produces<o2::aod::StoredMcParticles_001> mcparticles;
3233

33-
auto& mcCollisionsBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "MCCOLLISION"});
34-
auto& mcParticlesBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "MCPARTICLE_001"});
35-
auto& mcParticlesEBuilder = pc.outputs().make<TableBuilder>(Output{"AOD", "MCPARTICLE_001E"});
34+
Configurable<int> collisionsPerTimeFfame{"collisionsPerTimeframe", 200, "Number of McCollisions per timeframe"};
3635

37-
auto mcCollisionsCursor = mcCollisionsBuilder.cursor<o2::aod::McCollisions>();
38-
auto mcParticlesCursor = mcParticlesBuilder.cursor<o2::aod::StoredMcParticles_001>();
39-
auto mcParticlesECursor = mcParticlesEBuilder.cursor<o2::aod::McParticles_001>();
36+
int collisionId = 0;
37+
long timeframe = 0;
38+
39+
void init(o2::framework::InitContext& ic) {}
4040

41-
mcCollisionsCursor(0,
42-
0, // bc
43-
0, // generatorId
44-
mcheader->GetX(),
45-
mcheader->GetY(),
46-
mcheader->GetZ(),
47-
mcheader->GetT(),
48-
1., // weight
49-
mcheader->GetB());
41+
void run(o2::framework::ProcessingContext& pc)
42+
{
43+
auto mcheader = pc.inputs().get<o2::dataformats::MCEventHeader*>("mcheader");
44+
auto mctracks = pc.inputs().get<std::vector<o2::MCTrack>>("mctracks");
5045

46+
mcollisions(0, // bc
47+
0, // generatorId
48+
mcheader->GetX(),
49+
mcheader->GetY(),
50+
mcheader->GetZ(),
51+
mcheader->GetT(),
52+
1., // weight
53+
mcheader->GetB());
5154
for (auto& mctrack : mctracks) {
5255
int mothers_size = 0;
5356
std::vector<int> mothers;
@@ -72,7 +75,6 @@ struct KineToAOD {
7275
}
7376
int PdgCode = mctrack.GetPdgCode();
7477
int statusCode = mctrack.getStatusCode().fullEncoding;
75-
int collisionId = 0; // or eventNumber?
7678
float weight = mctrack.getWeight();
7779
float px = mctrack.Px();
7880
float py = mctrack.Py();
@@ -83,92 +85,46 @@ struct KineToAOD {
8385
float z = mctrack.GetStartVertexCoordinatesZ();
8486
float t = mctrack.GetStartVertexCoordinatesT();
8587
int flags = 0;
86-
mcParticlesCursor(0,
87-
collisionId,
88-
PdgCode,
89-
statusCode,
90-
flags,
91-
mothers,
92-
daughters,
93-
weight,
94-
px,
95-
py,
96-
pz,
97-
e,
98-
x,
99-
y,
100-
z,
101-
t);
102-
float phi = PI + atan2(-1.0f * py, -1.0f * px);
103-
float p = sqrt(px * px + py * py + pz * pz);
104-
float pt = sqrt(px * px + py * py);
105-
float eta;
106-
if (p - pz < static_cast<float>(1e-7)) {
107-
if (pz < 0.f) {
108-
eta = -100.f;
109-
} else {
110-
eta = 100.f;
111-
}
112-
} else {
113-
eta = 0.5f * log((p + pz) / (p - pz));
114-
}
115-
float Y;
116-
if (e - pz < static_cast<float>(1e-7)) {
117-
if (pz < 0.f) {
118-
Y = -100.f;
119-
} else {
120-
Y = 100.f;
121-
}
122-
} else {
123-
Y = 0.5f * log((e + pz) / (e - pz));
124-
}
125-
mcParticlesECursor(0,
126-
phi,
127-
eta,
128-
pt,
129-
p,
130-
Y,
131-
collisionId,
132-
PdgCode,
133-
statusCode,
134-
flags,
135-
mothers,
136-
daughters,
137-
weight,
138-
px,
139-
py,
140-
pz,
141-
e,
142-
x,
143-
y,
144-
z,
145-
t);
88+
mcparticles(0, // collisionId,
89+
PdgCode,
90+
statusCode,
91+
flags,
92+
mothers,
93+
daughters,
94+
weight,
95+
px,
96+
py,
97+
pz,
98+
e,
99+
x,
100+
y,
101+
z,
102+
t);
146103
}
147-
eventNumber++;
104+
collisionId++;
148105
pc.outputs().snapshot(Output{"TFF", "TFFilename", 0, Lifetime::Timeframe}, "");
149-
// pc.outputs().snapshot(Output{"TFN", "TFNumber", 0, Lifetime::Timeframe}, -1L);
150-
pc.outputs().snapshot(Output{"TFN", "TFNumber", 0, Lifetime::Timeframe}, eventNumber);
106+
pc.outputs().snapshot(Output{"TFN", "TFNumber", 0, Lifetime::Timeframe}, timeframe);
107+
if (collisionId == collisionsPerTimeFfame) {
108+
collisionId = 0;
109+
timeframe++;
110+
}
151111
}
152112
};
153113

154114
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
155115
{
156116
WorkflowSpec specs;
157-
std::vector<OutputSpec> outputs;
158-
outputs.emplace_back(OutputLabel{"O2mccollision"}, "AOD", "MCCOLLISION", 0, Lifetime::Timeframe);
159-
outputs.emplace_back(OutputLabel{"O2mcparticle_001"}, "AOD", "MCPARTICLE_001", 0, Lifetime::Timeframe);
160-
outputs.emplace_back(OutputLabel{"O2mcparticle_001E"}, "AOD", "MCPARTICLE_001E", 0, Lifetime::Timeframe);
161-
outputs.emplace_back(OutputSpec{"TFF", "TFFilename"});
162-
outputs.emplace_back(OutputSpec{"TFN", "TFNumber"});
163117
std::vector<InputSpec> inputs;
164118
inputs.emplace_back("mctracks", "MC", "MCTRACKS", 0., Lifetime::Timeframe);
165119
inputs.emplace_back("mcheader", "MC", "MCHEADER", 0., Lifetime::Timeframe);
166-
DataProcessorSpec dSpec = DataProcessorSpec{
167-
"mctracks-to-aod",
168-
inputs,
169-
outputs,
170-
AlgorithmSpec{adaptFromTask<KineToAOD>()},
171-
{}};
120+
DataProcessorSpec dSpec = adaptAnalysisTask<McTracksToAOD>(cfgc, TaskName{"mctracks-to-aod"});
121+
dSpec.inputs = inputs;
122+
dSpec.outputs.emplace_back(OutputSpec{"TFF", "TFFilename"});
123+
dSpec.outputs.emplace_back(OutputSpec{"TFN", "TFNumber"});
172124
specs.emplace_back(dSpec);
125+
126+
DataProcessorSpec dSpec2 = adaptAnalysisTask<McTracksToAODSpawner>(cfgc, TaskName{"mctracks-to-aod-spawner"});
127+
specs.emplace_back(dSpec2);
128+
173129
return specs;
174-
}
130+
}

0 commit comments

Comments
 (0)