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 propagationService.cxx
13+ // / \brief
14+ // / \author ALICE
15+
16+ // ===============================================================
17+ //
18+ // Merged track propagation + strangeness building task
19+ //
20+ // Provides a common task to deal with track propagation and
21+ // strangeness building in a single DPL device that is particularly
22+ // adequate for pipelining.
23+ //
24+ // Currently meant for testing and performance evaluation
25+ //
26+ // ===============================================================
27+
28+ #include " Framework/AnalysisDataModel.h"
29+ #include " Framework/AnalysisTask.h"
30+ #include " Framework/runDataProcessing.h"
31+ #include " Framework/RunningWorkflowInfo.h"
32+ #include " Common/DataModel/TrackSelectionTables.h"
33+ #include " Common/Core/trackUtilities.h"
34+ #include " ReconstructionDataFormats/DCA.h"
35+ #include " DetectorsBase/Propagator.h"
36+ #include " DetectorsBase/GeometryManager.h"
37+ #include " CommonUtils/NameConf.h"
38+ #include " CCDB/CcdbApi.h"
39+ #include " DataFormatsParameters/GRPMagField.h"
40+ #include " CCDB/BasicCCDBManager.h"
41+ #include " Framework/HistogramRegistry.h"
42+ #include " DataFormatsCalibration/MeanVertexObject.h"
43+ #include " CommonConstants/GeomConstants.h"
44+ #include " PWGLF/Utils/strangenessBuilderModule.h"
45+ #include " Common/Tools/TrackPropagationModule.h"
46+ #include " Common/Tools/StandardCCDBLoader.h"
47+
48+ using namespace o2 ;
49+ using namespace o2 ::framework;
50+ // using namespace o2::framework::expressions;
51+
52+ // use parameters + cov mat non-propagated, aux info + (extension propagated)
53+ using FullTracksExt = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov>;
54+ using FullTracksExtIU = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU>;
55+ using FullTracksExtWithPID = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
56+ using FullTracksExtIUWithPID = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
57+ using FullTracksExtLabeled = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::McTrackLabels>;
58+ using FullTracksExtLabeledIU = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::McTrackLabels>;
59+ using FullTracksExtLabeledWithPID = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe, aod::McTrackLabels>;
60+ using FullTracksExtLabeledIUWithPID = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe, aod::McTrackLabels>;
61+ using TracksWithExtra = soa::Join<aod::Tracks, aod::TracksExtra>;
62+
63+ // For dE/dx association in pre-selection
64+ using TracksExtraWithPID = soa::Join<aod::TracksExtra, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
65+
66+ struct propagationService {
67+ // CCDB boilerplate declarations
68+ o2::framework::Configurable<std::string> ccdburl{" ccdburl" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
69+ Service<o2::ccdb::BasicCCDBManager> ccdb;
70+
71+ // propagation stuff
72+ o2::common::StandardCCDBLoaderConfigurables standardCCDBLoaderConfigurables;
73+ o2::common::StandardCCDBLoader ccdbLoader;
74+
75+ // boilerplate: strangeness builder stuff
76+ o2::pwglf::strangenessbuilder::products products;
77+ o2::pwglf::strangenessbuilder::coreConfigurables baseOpts;
78+ o2::pwglf::strangenessbuilder::v0Configurables v0BuilderOpts;
79+ o2::pwglf::strangenessbuilder::cascadeConfigurables cascadeBuilderOpts;
80+ o2::pwglf::strangenessbuilder::preSelectOpts preSelectOpts;
81+ o2::pwglf::strangenessbuilder::BuilderModule strangenessBuilderModule;
82+
83+ // track propagation
84+ o2::common::TrackPropagationProducts trackPropagationProducts;
85+ o2::common::TrackPropagationConfigurables trackPropagationConfigurables;
86+ o2::common::TrackPropagationModule trackPropagation;
87+
88+ // registry
89+ HistogramRegistry histos{" histos" };
90+
91+ void init (o2::framework::InitContext& initContext)
92+ {
93+ // CCDB boilerplate init
94+ ccdb->setCaching (true );
95+ ccdb->setLocalObjectValidityChecking ();
96+ ccdb->setURL (ccdburl.value );
97+
98+ // task-specific
99+ trackPropagation.init (trackPropagationConfigurables, histos, initContext);
100+ strangenessBuilderModule.init (baseOpts, v0BuilderOpts, cascadeBuilderOpts, preSelectOpts, histos, initContext);
101+ }
102+
103+ void processRealData (soa::Join<aod::Collisions, aod::EvSels> const & collisions, aod::V0s const & v0s, aod::Cascades const & cascades, aod::TrackedCascades const & trackedCascades, FullTracksExtIU const & tracks, aod::BCsWithTimestamps const & bcs)
104+ {
105+ ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
106+ trackPropagation.fillTrackTables <false >(trackPropagationConfigurables, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
107+ strangenessBuilderModule.dataProcess (ccdb, histos, collisions, static_cast <TObject*>(nullptr ), v0s, cascades, trackedCascades, tracks, bcs, static_cast <TObject*>(nullptr ), products);
108+ }
109+
110+ void processMonteCarlo (soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels> const & collisions, aod::McCollisions const & mccollisions, aod::V0s const & v0s, aod::Cascades const & cascades, aod::TrackedCascades const & trackedCascades, FullTracksExtLabeledIU const & tracks, aod::BCsWithTimestamps const & bcs, aod::McParticles const & mcParticles)
111+ {
112+ ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
113+ trackPropagation.fillTrackTables <true >(trackPropagationConfigurables, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
114+ strangenessBuilderModule.dataProcess (ccdb, histos, collisions, mccollisions, v0s, cascades, trackedCascades, tracks, bcs, mcParticles, products);
115+ }
116+
117+ void processRealDataWithPID (soa::Join<aod::Collisions, aod::EvSels> const & collisions, aod::V0s const & v0s, aod::Cascades const & cascades, aod::TrackedCascades const & trackedCascades, FullTracksExtIUWithPID const & tracks, aod::BCsWithTimestamps const & bcs)
118+ {
119+ ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
120+ trackPropagation.fillTrackTables <false >(trackPropagationConfigurables, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
121+ strangenessBuilderModule.dataProcess (ccdb, histos, collisions, static_cast <TObject*>(nullptr ), v0s, cascades, trackedCascades, tracks, bcs, static_cast <TObject*>(nullptr ), products);
122+ }
123+
124+ void processMonteCarloWithPID (soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels> const & collisions, aod::McCollisions const & mccollisions, aod::V0s const & v0s, aod::Cascades const & cascades, aod::TrackedCascades const & trackedCascades, FullTracksExtLabeledIUWithPID const & tracks, aod::BCsWithTimestamps const & bcs, aod::McParticles const & mcParticles)
125+ {
126+ ccdbLoader.initCCDBfromBCs (standardCCDBLoaderConfigurables, ccdb, bcs);
127+ trackPropagation.fillTrackTables <true >(trackPropagationConfigurables, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
128+ strangenessBuilderModule.dataProcess (ccdb, histos, collisions, mccollisions, v0s, cascades, trackedCascades, tracks, bcs, mcParticles, products);
129+ }
130+
131+ PROCESS_SWITCH (propagationService, processRealData, " process real data" , true );
132+ PROCESS_SWITCH (propagationService, processMonteCarlo, " process monte carlo" , false );
133+ PROCESS_SWITCH (propagationService, processRealDataWithPID, " process real data" , false );
134+ PROCESS_SWITCH (propagationService, processMonteCarloWithPID, " process monte carlo" , false );
135+ };
136+
137+ // ****************************************************************************************
138+ /* *
139+ * Workflow definition.
140+ */
141+ // ****************************************************************************************
142+ WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
143+ {
144+ WorkflowSpec workflow{adaptAnalysisTask<propagationService>(cfgc)};
145+ return workflow;
146+ }
0 commit comments