Skip to content

Commit a7857ad

Browse files
committed
Add additional propagationServiceV2 for refactoring
1 parent 5036d9e commit a7857ad

2 files changed

Lines changed: 153 additions & 0 deletions

File tree

Common/TableProducer/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ o2physics_add_dpl_workflow(propagationservice
7979
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::DCAFitter KFParticle::KFParticle O2Physics::TPCDriftManager
8080
COMPONENT_NAME Analysis)
8181

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

0 commit comments

Comments
 (0)