1818
1919using 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
154114WorkflowSpec 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