Skip to content

Commit e825e97

Browse files
committed
[Common] Move propagation service to Common
1 parent 5b32849 commit e825e97

File tree

3 files changed

+304
-0
lines changed

3 files changed

+304
-0
lines changed

Common/TableProducer/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ o2physics_add_dpl_workflow(track-propagation
7474
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
7575
COMPONENT_NAME Analysis)
7676

77+
o2physics_add_dpl_workflow(propagationservice
78+
SOURCES propagationService.cxx
79+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::DCAFitter KFParticle::KFParticle O2Physics::TPCDriftManager
80+
COMPONENT_NAME Analysis)
81+
82+
o2physics_add_dpl_workflow(propagationservice-run2
83+
SOURCES propagationServiceRun2.cxx
84+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::DCAFitter KFParticle::KFParticle O2Physics::TPCDriftManager
85+
COMPONENT_NAME Analysis)
86+
7787
o2physics_add_dpl_workflow(track-dca-cov-filler-run2
7888
SOURCES trackDcaCovFillerRun2.cxx
7989
PUBLIC_LINK_LIBRARIES O2::DetectorsBase O2Physics::AnalysisCore
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
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+
//===============================================================
25+
26+
#include "PWGLF/Utils/strangenessBuilderModule.h"
27+
28+
#include "Common/Core/trackUtilities.h"
29+
#include "Common/DataModel/TrackSelectionTables.h"
30+
#include "Common/Tools/StandardCCDBLoader.h"
31+
#include "Common/Tools/TrackPropagationModule.h"
32+
#include "Common/Tools/TrackTuner.h"
33+
34+
#include "CCDB/BasicCCDBManager.h"
35+
#include "CCDB/CcdbApi.h"
36+
#include "CommonConstants/GeomConstants.h"
37+
#include "CommonUtils/NameConf.h"
38+
#include "DataFormatsParameters/GRPMagField.h"
39+
#include "DetectorsBase/GeometryManager.h"
40+
#include "DetectorsBase/Propagator.h"
41+
#include "Framework/AnalysisDataModel.h"
42+
#include "Framework/AnalysisTask.h"
43+
#include "Framework/HistogramRegistry.h"
44+
#include "Framework/RunningWorkflowInfo.h"
45+
#include "Framework/runDataProcessing.h"
46+
#include "ReconstructionDataFormats/DCA.h"
47+
48+
#include <string>
49+
50+
using namespace o2;
51+
using namespace o2::framework;
52+
// using namespace o2::framework::expressions;
53+
54+
// use parameters + cov mat non-propagated, aux info + (extension propagated)
55+
using FullTracksExt = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov>;
56+
using FullTracksExtIU = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU>;
57+
using FullTracksExtWithPID = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
58+
using FullTracksExtIUWithPID = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
59+
using FullTracksExtLabeled = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::McTrackLabels>;
60+
using FullTracksExtLabeledIU = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::McTrackLabels>;
61+
using FullTracksExtLabeledWithPID = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe, aod::McTrackLabels>;
62+
using FullTracksExtLabeledIUWithPID = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe, aod::McTrackLabels>;
63+
using TracksWithExtra = soa::Join<aod::Tracks, aod::TracksExtra>;
64+
65+
// For dE/dx association in pre-selection
66+
using TracksExtraWithPID = soa::Join<aod::TracksExtra, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
67+
68+
struct propagationService {
69+
// CCDB boilerplate declarations
70+
o2::framework::Configurable<std::string> ccdburl{"ccdburl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
71+
Service<o2::ccdb::BasicCCDBManager> ccdb;
72+
73+
// propagation stuff
74+
o2::common::StandardCCDBLoaderConfigurables standardCCDBLoaderConfigurables;
75+
o2::common::StandardCCDBLoader ccdbLoader;
76+
77+
// boilerplate: strangeness builder stuff
78+
o2::pwglf::strangenessbuilder::products products;
79+
o2::pwglf::strangenessbuilder::coreConfigurables baseOpts;
80+
o2::pwglf::strangenessbuilder::v0Configurables v0BuilderOpts;
81+
o2::pwglf::strangenessbuilder::cascadeConfigurables cascadeBuilderOpts;
82+
o2::pwglf::strangenessbuilder::preSelectOpts preSelectOpts;
83+
o2::pwglf::strangenessbuilder::BuilderModule strangenessBuilderModule;
84+
85+
// the track tuner object -> needs to be here as it inherits from ConfigurableGroup (+ has its own copy of ccdbApi)
86+
TrackTuner trackTunerObj;
87+
88+
// track propagation
89+
o2::common::TrackPropagationProducts trackPropagationProducts;
90+
o2::common::TrackPropagationConfigurables trackPropagationConfigurables;
91+
o2::common::TrackPropagationModule trackPropagation;
92+
93+
// registry
94+
HistogramRegistry histos{"histos"};
95+
96+
void init(o2::framework::InitContext& initContext)
97+
{
98+
// CCDB boilerplate init
99+
ccdb->setCaching(true);
100+
ccdb->setLocalObjectValidityChecking();
101+
ccdb->setURL(ccdburl.value);
102+
103+
// task-specific
104+
trackPropagation.init(trackPropagationConfigurables, trackTunerObj, histos, initContext);
105+
strangenessBuilderModule.init(baseOpts, v0BuilderOpts, cascadeBuilderOpts, preSelectOpts, histos, initContext);
106+
}
107+
108+
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)
109+
{
110+
ccdbLoader.initCCDBfromBCs(standardCCDBLoaderConfigurables, ccdb, bcs);
111+
trackPropagation.fillTrackTables<false>(trackPropagationConfigurables, trackTunerObj, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
112+
strangenessBuilderModule.dataProcess(ccdb, histos, collisions, static_cast<TObject*>(nullptr), v0s, cascades, trackedCascades, tracks, bcs, static_cast<TObject*>(nullptr), products);
113+
}
114+
115+
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)
116+
{
117+
ccdbLoader.initCCDBfromBCs(standardCCDBLoaderConfigurables, ccdb, bcs);
118+
trackPropagation.fillTrackTables<true>(trackPropagationConfigurables, trackTunerObj, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
119+
strangenessBuilderModule.dataProcess(ccdb, histos, collisions, mccollisions, v0s, cascades, trackedCascades, tracks, bcs, mcParticles, products);
120+
}
121+
122+
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)
123+
{
124+
ccdbLoader.initCCDBfromBCs(standardCCDBLoaderConfigurables, ccdb, bcs);
125+
trackPropagation.fillTrackTables<false>(trackPropagationConfigurables, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
126+
strangenessBuilderModule.dataProcess(ccdb, histos, collisions, static_cast<TObject*>(nullptr), v0s, cascades, trackedCascades, tracks, bcs, static_cast<TObject*>(nullptr), products);
127+
}
128+
129+
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)
130+
{
131+
ccdbLoader.initCCDBfromBCs(standardCCDBLoaderConfigurables, ccdb, bcs);
132+
trackPropagation.fillTrackTables<true>(trackPropagationConfigurables, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
133+
strangenessBuilderModule.dataProcess(ccdb, histos, collisions, mccollisions, v0s, cascades, trackedCascades, tracks, bcs, mcParticles, products);
134+
}
135+
136+
PROCESS_SWITCH(propagationService, processRealData, "process real data", true);
137+
PROCESS_SWITCH(propagationService, processMonteCarlo, "process monte carlo", false);
138+
PROCESS_SWITCH(propagationService, processRealDataWithPID, "process real data", false);
139+
PROCESS_SWITCH(propagationService, processMonteCarloWithPID, "process monte carlo", false);
140+
};
141+
142+
//****************************************************************************************
143+
/**
144+
* Workflow definition.
145+
*/
146+
//****************************************************************************************
147+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
148+
{
149+
WorkflowSpec workflow{adaptAnalysisTask<propagationService>(cfgc)};
150+
return workflow;
151+
}
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
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+
//===============================================================
25+
26+
#include "PWGLF/Utils/strangenessBuilderModule.h"
27+
28+
#include "Common/Core/trackUtilities.h"
29+
#include "Common/DataModel/TrackSelectionTables.h"
30+
#include "Common/Tools/StandardCCDBLoader.h"
31+
#include "Common/Tools/TrackPropagationModule.h"
32+
#include "Common/Tools/TrackTuner.h"
33+
34+
#include "CCDB/BasicCCDBManager.h"
35+
#include "CCDB/CcdbApi.h"
36+
#include "CommonConstants/GeomConstants.h"
37+
#include "CommonUtils/NameConf.h"
38+
#include "DataFormatsParameters/GRPMagField.h"
39+
#include "DetectorsBase/GeometryManager.h"
40+
#include "DetectorsBase/Propagator.h"
41+
#include "Framework/AnalysisDataModel.h"
42+
#include "Framework/AnalysisTask.h"
43+
#include "Framework/HistogramRegistry.h"
44+
#include "Framework/RunningWorkflowInfo.h"
45+
#include "Framework/runDataProcessing.h"
46+
#include "ReconstructionDataFormats/DCA.h"
47+
48+
#include <string>
49+
50+
using namespace o2;
51+
using namespace o2::framework;
52+
// using namespace o2::framework::expressions;
53+
54+
// use parameters + cov mat non-propagated, aux info + (extension propagated)
55+
using FullTracksExt = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov>;
56+
using FullTracksExtIU = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU>;
57+
using FullTracksExtWithPID = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
58+
using FullTracksExtIUWithPID = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
59+
using FullTracksExtLabeled = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::McTrackLabels>;
60+
using FullTracksExtLabeledIU = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::McTrackLabels>;
61+
using FullTracksExtLabeledWithPID = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe, aod::McTrackLabels>;
62+
using FullTracksExtLabeledIUWithPID = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe, aod::McTrackLabels>;
63+
using TracksWithExtra = soa::Join<aod::Tracks, aod::TracksExtra>;
64+
65+
// For dE/dx association in pre-selection
66+
using TracksExtraWithPID = soa::Join<aod::TracksExtra, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
67+
68+
struct propagationServiceRun2 {
69+
// CCDB boilerplate declarations
70+
o2::framework::Configurable<std::string> ccdburl{"ccdburl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
71+
Service<o2::ccdb::BasicCCDBManager> ccdb;
72+
73+
// propagation stuff
74+
o2::common::StandardCCDBLoaderConfigurables standardCCDBLoaderConfigurables;
75+
o2::common::StandardCCDBLoader ccdbLoader;
76+
77+
// boilerplate: strangeness builder stuff
78+
o2::pwglf::strangenessbuilder::products products;
79+
o2::pwglf::strangenessbuilder::coreConfigurables baseOpts;
80+
o2::pwglf::strangenessbuilder::v0Configurables v0BuilderOpts;
81+
o2::pwglf::strangenessbuilder::cascadeConfigurables cascadeBuilderOpts;
82+
o2::pwglf::strangenessbuilder::preSelectOpts preSelectOpts;
83+
o2::pwglf::strangenessbuilder::BuilderModule strangenessBuilderModule;
84+
85+
// registry
86+
HistogramRegistry histos{"histos"};
87+
88+
void init(o2::framework::InitContext& initContext)
89+
{
90+
// CCDB boilerplate init
91+
ccdb->setCaching(true);
92+
ccdb->setLocalObjectValidityChecking();
93+
ccdb->setURL(ccdburl.value);
94+
95+
// task-specific
96+
strangenessBuilderModule.init(baseOpts, v0BuilderOpts, cascadeBuilderOpts, preSelectOpts, histos, initContext);
97+
}
98+
99+
void processRealData(soa::Join<aod::Collisions, aod::EvSels> const& collisions, aod::V0s const& v0s, aod::Cascades const& cascades, FullTracksExt const& tracks, aod::BCsWithTimestamps const& bcs)
100+
{
101+
ccdbLoader.initCCDBfromBCs(standardCCDBLoaderConfigurables, ccdb, bcs);
102+
strangenessBuilderModule.dataProcess(ccdb, histos, collisions, static_cast<TObject*>(nullptr), v0s, cascades, static_cast<TObject*>(nullptr), tracks, bcs, static_cast<TObject*>(nullptr), products);
103+
}
104+
105+
void processMonteCarlo(soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels> const& collisions, aod::McCollisions const& mccollisions, aod::V0s const& v0s, aod::Cascades const& cascades, FullTracksExtLabeled const& tracks, aod::BCsWithTimestamps const& bcs, aod::McParticles const& mcParticles)
106+
{
107+
ccdbLoader.initCCDBfromBCs(standardCCDBLoaderConfigurables, ccdb, bcs);
108+
strangenessBuilderModule.dataProcess(ccdb, histos, collisions, mccollisions, v0s, cascades, static_cast<TObject*>(nullptr), tracks, bcs, mcParticles, products);
109+
}
110+
111+
// FIXME: the part below is only viable if TPC PID
112+
// switches to using TracksIU (circular dependency)
113+
//
114+
// 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)
115+
// {
116+
// ccdbLoader.initCCDBfromBCs(standardCCDBLoaderConfigurables, ccdb, bcs);
117+
// trackPropagation.fillTrackTables<false>(trackPropagationConfigurables, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
118+
// strangenessBuilderModule.dataProcess(ccdb, histos, collisions, static_cast<TObject*>(nullptr), v0s, cascades, trackedCascades, tracks, bcs, static_cast<TObject*>(nullptr), products);
119+
// }
120+
121+
// 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)
122+
// {
123+
// ccdbLoader.initCCDBfromBCs(standardCCDBLoaderConfigurables, ccdb, bcs);
124+
// trackPropagation.fillTrackTables<true>(trackPropagationConfigurables, ccdbLoader, collisions, tracks, trackPropagationProducts, histos);
125+
// strangenessBuilderModule.dataProcess(ccdb, histos, collisions, mccollisions, v0s, cascades, trackedCascades, tracks, bcs, mcParticles, products);
126+
// }
127+
128+
PROCESS_SWITCH(propagationServiceRun2, processRealData, "process real data", true);
129+
PROCESS_SWITCH(propagationServiceRun2, processMonteCarlo, "process monte carlo", false);
130+
// PROCESS_SWITCH(propagationService, processRealDataWithPID, "process real data", false);
131+
// PROCESS_SWITCH(propagationService, processMonteCarloWithPID, "process monte carlo", false);
132+
};
133+
134+
//****************************************************************************************
135+
/**
136+
* Workflow definition.
137+
*/
138+
//****************************************************************************************
139+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
140+
{
141+
WorkflowSpec workflow{adaptAnalysisTask<propagationServiceRun2>(cfgc)};
142+
return workflow;
143+
}

0 commit comments

Comments
 (0)