Skip to content

Commit a8cf091

Browse files
David Dobrigkeit Chinellatoromainschotter
authored andcommitted
Git add for new files
1 parent 7ce83c4 commit a8cf091

File tree

2 files changed

+852
-0
lines changed

2 files changed

+852
-0
lines changed
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
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+
/// \file trackPropagationTester.cxx
13+
/// \brief testing ground for track propagation
14+
/// \author ALICE
15+
16+
//===============================================================
17+
//
18+
// Experimental version of the track propagation task
19+
// this utilizes an analysis task module that can be employed elsewhere
20+
// and allows for the re-utilization of a material LUT
21+
//
22+
// candidate approach for core service approach
23+
//
24+
//===============================================================
25+
26+
#include "Framework/AnalysisDataModel.h"
27+
#include "Framework/AnalysisTask.h"
28+
#include "Framework/runDataProcessing.h"
29+
#include "Framework/RunningWorkflowInfo.h"
30+
#include "Common/DataModel/TrackSelectionTables.h"
31+
#include "Common/Core/trackUtilities.h"
32+
#include "ReconstructionDataFormats/DCA.h"
33+
#include "DetectorsBase/Propagator.h"
34+
#include "DetectorsBase/GeometryManager.h"
35+
#include "CommonUtils/NameConf.h"
36+
#include "CCDB/CcdbApi.h"
37+
#include "DataFormatsParameters/GRPMagField.h"
38+
#include "CCDB/BasicCCDBManager.h"
39+
#include "Framework/HistogramRegistry.h"
40+
#include "DataFormatsCalibration/MeanVertexObject.h"
41+
#include "CommonConstants/GeomConstants.h"
42+
#include "Common/Tools/TrackPropagationModule.h"
43+
#include "Common/Tools/StandardCCDBLoader.h"
44+
#include "Framework/O2DatabasePDGPlugin.h"
45+
#include "MetadataHelper.h"
46+
#include "Common/Tools/MultModule.h"
47+
48+
using namespace o2;
49+
using namespace o2::framework;
50+
// using namespace o2::framework::expressions;
51+
52+
MetadataHelper metadataInfo; // Metadata helper
53+
54+
struct MultCentTable {
55+
o2::common::multiplicity::standardConfigurables opts;
56+
o2::common::multiplicity::products products;
57+
o2::common::multiplicity::MultModule module;
58+
59+
// CCDB boilerplate declarations
60+
o2::framework::Configurable<std::string> ccdburl{"ccdburl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
61+
Service<o2::ccdb::BasicCCDBManager> ccdb;
62+
Service<o2::framework::O2DatabasePDG> pdg;
63+
64+
// hold multiplicity values for layover to centrality calculation
65+
std::vector<o2::common::multiplicity::multEntry> mults;
66+
67+
// slicers
68+
Preslice<soa::Join<aod::TracksIU, aod::TracksExtra>> slicerTracksIU = o2::aod::track::collisionId;
69+
Preslice<soa::Join<aod::TracksIU, aod::TracksExtra, aod::TrackSelection, aod::TrackSelectionExtension>> slicerTracksIUwithSelections = o2::aod::track::collisionId;
70+
71+
72+
void init(o2::framework::InitContext& initContext)
73+
{
74+
// CCDB boilerplate init
75+
ccdb->setCaching(true);
76+
ccdb->setLocalObjectValidityChecking();
77+
ccdb->setURL(ccdburl.value);
78+
79+
// task-specific
80+
module.init(opts, initContext);
81+
}
82+
83+
void processRun2(aod::Collisions const& collisions, soa::Join<aod::StoredTracksIU, aod::TracksCovIU, aod::TracksExtra> const& tracks, aod::Collisions const&, aod::BCs const& bcs)
84+
{
85+
// WIP
86+
}
87+
88+
void processRun3(soa::Join<aod::Collisions, aod::EvSels> const& collisions,
89+
soa::Join<aod::TracksIU, aod::TracksExtra> const& tracks,
90+
soa::Join<aod::BCs, aod::Timestamps, aod::Run3MatchedToBCSparse> const& bcs,
91+
aod::Zdcs const& zdcs,
92+
aod::FV0As const& fv0as,
93+
aod::FT0s const& ft0s,
94+
aod::FDDs const& fdds)
95+
{
96+
mults.clear();
97+
for (auto const& collision : collisions) {
98+
o2::common::multiplicity::multEntry mult;
99+
const auto& bc = collision.bc_as<soa::Join<aod::BCs, aod::Timestamps, aod::Run3MatchedToBCSparse>>();
100+
const uint64_t collIdx = collision.globalIndex();
101+
auto tracksThisCollision = tracks.sliceBy(slicerTracksIU, collIdx);
102+
mult = module.collisionProcessRun3(ccdb, metadataInfo, collision, tracksThisCollision, bc, products);
103+
mults.push_back(mult);
104+
}
105+
}
106+
107+
void processRun3WithGlobalCounters(soa::Join<aod::Collisions, aod::EvSels> const& collisions,
108+
soa::Join<aod::TracksIU, aod::TracksExtra, aod::TrackSelection, aod::TrackSelectionExtension> const& tracks,
109+
soa::Join<aod::BCs, aod::Timestamps, aod::Run3MatchedToBCSparse> const& bcs,
110+
aod::Zdcs const& zdcs,
111+
aod::FV0As const& fv0as,
112+
aod::FT0s const& ft0s,
113+
aod::FDDs const& fdds)
114+
{
115+
mults.clear();
116+
for (auto const& collision : collisions) {
117+
o2::common::multiplicity::multEntry mult;
118+
const auto& bc = collision.bc_as<soa::Join<aod::BCs, aod::Timestamps, aod::Run3MatchedToBCSparse>>();
119+
const uint64_t collIdx = collision.globalIndex();
120+
auto tracksThisCollision = tracks.sliceBy(slicerTracksIUwithSelections, collIdx);
121+
mult = module.collisionProcessRun3(ccdb, metadataInfo, collision, tracksThisCollision, bc, products);
122+
mults.push_back(mult);
123+
}
124+
}
125+
void processMFT(soa::Join<aod::Collisions, aod::EvSels>::iterator const& collision,
126+
o2::aod::MFTTracks const& mfttracks,
127+
soa::SmallGroups<aod::BestCollisionsFwd> const& retracks)
128+
{
129+
if(opts.mEnabledTables[o2::common::multiplicity::kMFTMults]){
130+
// populates MFT information in the mults buffer (in addition to filling table)
131+
module.collisionProcessMFT(collision, mfttracks, retracks, mults, products);
132+
}
133+
}
134+
void processMonteCarlo(aod::McCollision const& mcCollision, aod::McParticles const& mcParticles)
135+
{
136+
if(opts.mEnabledTables[o2::common::multiplicity::kMultMCExtras]){
137+
module.collisionProcessMonteCarlo(mcCollision, mcParticles, pdg, products);
138+
}
139+
}
140+
void processMonteCarlo2Mults(soa::Join<aod::McCollisionLabels, aod::Collisions>::iterator const& collision)
141+
{
142+
if(opts.mEnabledTables[o2::common::multiplicity::kMult2MCExtras]){
143+
// establish simple interlink for posterior analysis (derived data)
144+
products.tableExtraMult2MCExtras(collision.mcCollisionId());
145+
}
146+
}
147+
void processCentrality(aod::Collisions const& collisions)
148+
{
149+
// it is important that this function is at the end of the other process functions.
150+
// it requires `mults` to be properly set, which will only happen after the other process
151+
// functions have been called.
152+
153+
// internally, the function below will do nothing if no centrality is requested.
154+
// it is thus safer to always keep the actual process function for centrality
155+
// generation to true, since the requisites for being in this context are
156+
// always fulfilled
157+
if(collisions.size() != mults.size()) {
158+
LOGF(fatal, "Size of collisions doesn't match size of multiplicity buffer!");
159+
}
160+
161+
// module.generateCentralities();
162+
}
163+
164+
PROCESS_SWITCH(MultCentTable, processRun2, "Process Run 2", false);
165+
PROCESS_SWITCH(MultCentTable, processRun3, "Process Run 3", true);
166+
PROCESS_SWITCH(MultCentTable, processRun3WithGlobalCounters, "Process Run 3 + global tracking counters", false);
167+
PROCESS_SWITCH(MultCentTable, processMFT, "Process MFT info", true);
168+
PROCESS_SWITCH(MultCentTable, processMonteCarlo, "Process Monte Carlo information", false);
169+
PROCESS_SWITCH(MultCentTable, processMonteCarlo2Mults, "Process Monte Carlo information", false);
170+
PROCESS_SWITCH(MultCentTable, processCentrality, "Generate centralities", true);
171+
};
172+
173+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
174+
{
175+
metadataInfo.initMetadata(cfgc);
176+
WorkflowSpec workflow{adaptAnalysisTask<MultCentTable>(cfgc)};
177+
return workflow;
178+
}

0 commit comments

Comments
 (0)