Skip to content

Commit ef87bfe

Browse files
mfagginMattia Faggin
andauthored
[Common]: add user-friendly interface for trackTuner configuration. (#8190)
Co-authored-by: Mattia Faggin <mfaggin@cern.ch>
1 parent fb55489 commit ef87bfe

File tree

2 files changed

+153
-13
lines changed

2 files changed

+153
-13
lines changed

Common/TableProducer/trackPropagation.cxx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ struct TrackPropagation {
6262
// for TrackTuner only (MC smearing)
6363
Configurable<bool> useTrackTuner{"useTrackTuner", false, "Apply track tuner corrections to MC"};
6464
Configurable<bool> fillTrackTunerTable{"fillTrackTunerTable", false, "flag to fill track tuner table"};
65+
Configurable<int> trackTunerConfigSource{"trackTunerConfigSource", aod::track_tuner::InputString, "1: input string; 2: TrackTuner Configurables"};
6566
Configurable<std::string> trackTunerParams{"trackTunerParams", "debugInfo=0|updateTrackDCAs=1|updateTrackCovMat=1|updateCurvature=0|updateCurvatureIU=0|updatePulls=0|isInputFileFromCCDB=1|pathInputFile=Users/m/mfaggin/test/inputsTrackTuner/PbPb2022|nameInputFile=trackTuner_DataLHC22sPass5_McLHC22l1b2_run529397.root|pathFileQoverPt=Users/h/hsharma/qOverPtGraphs|nameFileQoverPt=D0sigma_Data_removal_itstps_MC_LHC22b1b.root|usePvRefitCorrections=0|qOverPtMC=-1.|qOverPtData=-1.", "TrackTuner parameter initialization (format: <name>=<value>|<name>=<value>)"};
6667
ConfigurableAxis axisPtQA{"axisPtQA", {VARIABLE_WIDTH, 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f, 1.8f, 1.9f, 2.0f, 2.2f, 2.4f, 2.6f, 2.8f, 3.0f, 3.2f, 3.4f, 3.6f, 3.8f, 4.0f, 4.4f, 4.8f, 5.2f, 5.6f, 6.0f, 6.5f, 7.0f, 7.5f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 17.0f, 19.0f, 21.0f, 23.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f}, "pt axis for QA histograms"};
6768
OutputObj<TH1D> trackTunedTracks{TH1D("trackTunedTracks", "", 1, 0.5, 1.5), OutputObjHandlingPolicy::AnalysisObject};
@@ -119,7 +120,20 @@ struct TrackPropagation {
119120

120121
/// TrackTuner initialization
121122
if (useTrackTuner) {
122-
std::string outputStringParams = trackTunerObj.configParams(trackTunerParams);
123+
std::string outputStringParams = "";
124+
switch (trackTunerConfigSource) {
125+
case aod::track_tuner::InputString:
126+
outputStringParams = trackTunerObj.configParams(trackTunerParams);
127+
break;
128+
case aod::track_tuner::Configurables:
129+
outputStringParams = trackTunerObj.configParams();
130+
break;
131+
132+
default:
133+
LOG(fatal) << "TrackTuner configuration source not defined. Fix it! (Supported options: input string (1); Configurables (2))";
134+
break;
135+
}
136+
123137
trackTunerObj.getDcaGraphs();
124138
trackTunedTracks->SetTitle(outputStringParams.c_str());
125139
trackTunedTracks->GetXaxis()->SetBinLabel(1, "all tracks");

Common/Tools/TrackTuner.h

Lines changed: 138 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "DetectorsBase/GeometryManager.h"
3838
#include "Framework/AnalysisDataModel.h"
3939
#include "Framework/AnalysisTask.h"
40+
#include "Framework/Configurable.h"
4041
#include "Framework/HistogramRegistry.h"
4142
#include "Framework/runDataProcessing.h"
4243
#include "Framework/RunningWorkflowInfo.h"
@@ -49,13 +50,34 @@ namespace o2::aod
4950
namespace track_tuner
5051
{
5152
DECLARE_SOA_COLUMN(TunedQOverPt, tunedQOverPt, float);
53+
54+
/// configuration source
55+
enum configSource : int { InputString = 1,
56+
Configurables };
5257
} // namespace track_tuner
5358

5459
DECLARE_SOA_TABLE(TrackTunerTable, "AOD", "TRACKTUNERTABLE", //!
5560
track_tuner::TunedQOverPt);
5661
} // namespace o2::aod
5762

58-
struct TrackTuner {
63+
struct TrackTuner : o2::framework::ConfigurableGroup {
64+
65+
std::string prefix = "trackTuner"; // JSON group name
66+
o2::framework::Configurable<bool> cfgDebugInfo{"debugInfo", false, "Flag to switch on the debug printout"};
67+
o2::framework::Configurable<bool> cfgUpdateTrackDCAs{"updateTrackDCAs", false, "Flag to enable the DCA smearing"};
68+
o2::framework::Configurable<bool> cfgUpdateTrackCovMat{"updateTrackCovMat", false, "Flag to enable the DCA covariance-matrix smearing"};
69+
o2::framework::Configurable<bool> cfgUpdateCurvature{"updateCurvature", false, "Flag to enable the Q/Pt smearing after the propagation to the production point"};
70+
o2::framework::Configurable<bool> cfgUpdateCurvatureIU{"updateCurvatureIU", false, "Flag to enable the Q/Pt smearing before the propagation to the production point"};
71+
o2::framework::Configurable<bool> cfgUpdatePulls{"updatePulls", false, "Flag to enable the pulls smearing"};
72+
o2::framework::Configurable<bool> cfgIsInputFileFromCCDB{"isInputFileFromCCDB", false, "True: files from CCDB; False: fils from local path (debug)"};
73+
o2::framework::Configurable<std::string> cfgPathInputFile{"pathInputFile", "", "Path to file containing DCAxy, DCAz graphs from data and MC"};
74+
o2::framework::Configurable<std::string> cfgNameInputFile{"nameInputFile", "", "Name of the file containing DCAxy, DCAz graphs from data and MC"};
75+
o2::framework::Configurable<std::string> cfgPathFileQoverPt{"pathFileQoverPt", "", "Path to file containing Q/Pt correction graphs from data and MC"};
76+
o2::framework::Configurable<std::string> cfgNameFileQoverPt{"nameFileQoverPt", "", "Name of file containing Q/Pt correction graphs from data and MC"};
77+
o2::framework::Configurable<bool> cfgUsePvRefitCorrections{"usePvRefitCorrections", false, "Flag to establish whether to use corrections obtained with or w/o PV refit"};
78+
o2::framework::Configurable<float> cfgQOverPtMC{"qOverPtMC", -1., "Scaling factor on q/pt of MC"};
79+
o2::framework::Configurable<float> cfgQOverPtData{"qOverPtData", -1., "Scaling factor on q/pt of data"};
80+
5981
///////////////////////////////
6082
/// parameters to be configured
6183
bool debugInfo = false;
@@ -66,13 +88,15 @@ struct TrackTuner {
6688
bool updatePulls = false;
6789
bool isInputFileFromCCDB = false; // query input file from CCDB or local folder
6890
std::string pathInputFile = ""; // Path to file containing DCAxy, DCAz graphs from data and MC
69-
std::string nameInputFile = ""; // Common Name of different files containing graphs, found in the above paths
70-
std::string pathFileQoverPt = ""; // Path to file containing D0 sigma graphs from data and MC
91+
std::string nameInputFile = ""; // Name of the file containing DCAxy, DCAz graphs from data and MC
92+
std::string pathFileQoverPt = ""; // Path to file containing Q/Pt correction graphs from data and MC (only one proxy provided, i.e. D0 sigma graphs from data and MC)
7193
std::string nameFileQoverPt = ""; // file name containing Q/Pt correction graphs from data and MC
7294
bool usePvRefitCorrections = false; // establish whether to use corrections obtained with or w/o PV refit
73-
float qOverPtMC = -1.; // 1/pt old
74-
float qOverPtData = -1.; // 1/pt new
95+
float qOverPtMC = -1.; // 1/pt MC
96+
float qOverPtData = -1.; // 1/pt data
7597
///////////////////////////////
98+
bool isConfigFromString = false;
99+
bool isConfigFromConfigurables = false;
76100

77101
o2::ccdb::CcdbApi ccdbApi;
78102
std::map<std::string, std::string> metadata;
@@ -98,11 +122,31 @@ struct TrackTuner {
98122
std::unique_ptr<TGraphErrors> grDcaZPullVsPtPionMC;
99123
std::unique_ptr<TGraphErrors> grDcaZPullVsPtPionData;
100124

101-
/// @brief Function to configure the TrackTuner parameters
125+
/// @brief Function doing a few sanity-checks on the configurations
126+
void checkConfig()
127+
{
128+
/// check configuration source
129+
if (isConfigFromString && isConfigFromConfigurables) {
130+
LOG(fatal) << " [ isConfigFromString==kTRUE and isConfigFromConfigurables==kTRUE ] Configuration done both via string and via configurables -> Only one of them can be set to kTRUE at once! Please refer to the trackTuner documentation.";
131+
}
132+
/// check Q/pt update
133+
if ((updateCurvatureIU) && (updateCurvature)) {
134+
LOG(fatal) << " [ updateCurvatureIU==kTRUE and updateCurvature==kTRUE ] -> Only one of them can be set to kTRUE at once! Please refer to the trackTuner documentation.";
135+
}
136+
}
137+
138+
/// @brief Function to configure the TrackTuner parameters with an input string
102139
/// @param inputString Input string with all parameter configuration. Format: <name>=<value>|<name>=<value>
103140
/// @return String with the values of all parameters after configurations are listed, to cross check that everything worked well
104141
std::string configParams(std::string inputString)
105142
{
143+
144+
LOG(info) << "[TrackTuner] /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/";
145+
LOG(info) << "[TrackTuner] /*/*/ /*/*/";
146+
LOG(info) << "[TrackTuner] /*/*/ Configuring the TrackTuner via a string /*/*/";
147+
LOG(info) << "[TrackTuner] /*/*/ /*/*/";
148+
LOG(info) << "[TrackTuner] /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/";
149+
106150
std::string delimiter = "|";
107151
std::string assignmentSymbol = "=";
108152

@@ -167,7 +211,7 @@ struct TrackTuner {
167211
LOG(info) << "[TrackTuner]";
168212
LOG(info) << "[TrackTuner] >>> Parameters before the custom settings";
169213
LOG(info) << "[TrackTuner] debugInfo = " << debugInfo;
170-
LOG(info) << "[TrackTuner] updateTrackDCAs = " << UpdateTrackDCAs;
214+
LOG(info) << "[TrackTuner] updateTrackDCAs = " << updateTrackDCAs;
171215
LOG(info) << "[TrackTuner] updateTrackCovMat = " << updateTrackCovMat;
172216
LOG(info) << "[TrackTuner] updateCurvature = " << updateCurvature;
173217
LOG(info) << "[TrackTuner] updateCurvatureIU = " << updateCurvatureIU;
@@ -294,9 +338,91 @@ struct TrackTuner {
294338
outputString += ", qOverPtData=" + std::to_string(qOverPtData);
295339
LOG(info) << "[TrackTuner] qOverPtData = " << qOverPtData;
296340

297-
if ((updateCurvatureIU) && (updateCurvature)) {
298-
LOG(fatal) << " [ updateCurvatureIU==kTRUE and updateCurvature==kTRUE ] -> Only one of them can be set to kTRUE at once! Please refer to the trackTuner documentation.";
299-
}
341+
/// declare that the configuration is done via an input string
342+
isConfigFromString = true;
343+
344+
/// sanity-checks on the configurations
345+
checkConfig();
346+
347+
return outputString;
348+
}
349+
350+
/// @brief Function to configure the TrackTuner parameters with an input string
351+
/// @return String with the values of all parameters after configurations are listed, to cross check that everything worked well
352+
std::string configParams()
353+
{
354+
355+
LOG(info) << "[TrackTuner] /=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#";
356+
LOG(info) << "[TrackTuner] /=/#/ /=/#/";
357+
LOG(info) << "[TrackTuner] /=/#/ Configuring the TrackTuner using the input Configurables /=/#/";
358+
LOG(info) << "[TrackTuner] /=/#/ /=/#/";
359+
LOG(info) << "[TrackTuner] /=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/=/#/";
360+
361+
std::string outputString = "";
362+
LOG(info) << "[TrackTuner] ";
363+
LOG(info) << "[TrackTuner] >>> Parameters after the custom settings";
364+
// Configure debugInfo
365+
debugInfo = cfgDebugInfo;
366+
LOG(info) << "[TrackTuner] debugInfo = " << debugInfo;
367+
outputString += "debugInfo=" + std::to_string(debugInfo);
368+
// Configure updateTrackDCAs
369+
updateTrackDCAs = cfgUpdateTrackDCAs;
370+
LOG(info) << "[TrackTuner] updateTrackDCAs = " << updateTrackDCAs;
371+
outputString += ", updateTrackDCAs=" + std::to_string(updateTrackDCAs);
372+
// Configure updateTrackCovMat
373+
updateTrackCovMat = cfgUpdateTrackCovMat;
374+
LOG(info) << "[TrackTuner] updateTrackCovMat = " << updateTrackCovMat;
375+
outputString += ", updateTrackCovMat=" + std::to_string(updateTrackCovMat);
376+
// Configure updateCurvature
377+
updateCurvature = cfgUpdateCurvature;
378+
LOG(info) << "[TrackTuner] updateCurvature = " << updateCurvature;
379+
outputString += ", updateCurvature=" + std::to_string(updateCurvature);
380+
// Configure updateCurvatureIU
381+
updateCurvatureIU = cfgUpdateCurvatureIU;
382+
LOG(info) << "[TrackTuner] updateCurvatureIU = " << updateCurvatureIU;
383+
outputString += ", updateCurvatureIU=" + std::to_string(updateCurvatureIU);
384+
// Configure updatePulls
385+
updatePulls = cfgUpdatePulls;
386+
LOG(info) << "[TrackTuner] updatePulls = " << updatePulls;
387+
outputString += ", updatePulls=" + std::to_string(updatePulls);
388+
// Configure isInputFileFromCCDB
389+
isInputFileFromCCDB = cfgIsInputFileFromCCDB;
390+
LOG(info) << "[TrackTuner] isInputFileFromCCDB = " << isInputFileFromCCDB;
391+
outputString += ", isInputFileFromCCDB=" + std::to_string(isInputFileFromCCDB);
392+
// Configure pathInputFile
393+
pathInputFile = cfgPathInputFile;
394+
outputString += ", pathInputFile=" + pathInputFile;
395+
LOG(info) << "[TrackTuner] pathInputFile = " << pathInputFile;
396+
// Configure pathInputFile
397+
pathFileQoverPt = cfgPathFileQoverPt;
398+
outputString += ", pathFileQoverPt=" + pathFileQoverPt;
399+
LOG(info) << "[TrackTuner] pathFileQoverPt = " << pathFileQoverPt;
400+
// Configure nameInputFile
401+
nameInputFile = cfgNameInputFile;
402+
outputString += ", nameInputFile=" + nameInputFile;
403+
LOG(info) << "[TrackTuner] nameInputFile = " << nameInputFile;
404+
// Configure nameFileQoverPt
405+
nameFileQoverPt = cfgNameFileQoverPt;
406+
outputString += ", nameFileQoverPt=" + nameFileQoverPt;
407+
LOG(info) << "[TrackTuner] nameFileQoverPt = " << nameFileQoverPt;
408+
// Configure usePvRefitCorrections
409+
usePvRefitCorrections = cfgUsePvRefitCorrections;
410+
outputString += ", usePvRefitCorrections=" + std::to_string(usePvRefitCorrections);
411+
LOG(info) << "[TrackTuner] usePvRefitCorrections = " << usePvRefitCorrections;
412+
// Configure qOverPtMC
413+
qOverPtMC = cfgQOverPtMC;
414+
outputString += ", qOverPtMC=" + std::to_string(qOverPtMC);
415+
LOG(info) << "[TrackTuner] qOverPtMC = " << qOverPtMC;
416+
// Configure qOverPtData
417+
qOverPtData = cfgQOverPtData;
418+
outputString += ", qOverPtData=" + std::to_string(qOverPtData);
419+
LOG(info) << "[TrackTuner] qOverPtData = " << qOverPtData;
420+
421+
/// declare that the configuration is done via the Configurables
422+
isConfigFromConfigurables = true;
423+
424+
/// sanity-checks on the configurations
425+
checkConfig();
300426

301427
return outputString;
302428
}
@@ -431,7 +557,7 @@ struct TrackTuner {
431557
qOverPtMC = std::max(0.0, evalGraph(ptMC, grOneOverPtPionMC.get()));
432558
qOverPtData = std::max(0.0, evalGraph(ptMC, grOneOverPtPionData.get()));
433559
} // qOverPtMC, qOverPtData block ends here
434-
} // updateCurvature, updateCurvatureIU block ends here
560+
} // updateCurvature, updateCurvatureIU block ends here
435561

436562
if (updateTrackDCAs) {
437563
dcaXYMeanMC = evalGraph(ptMC, grDcaXYMeanVsPtPionMC.get());
@@ -720,7 +846,7 @@ struct TrackTuner {
720846
trackParCov.setCov(sigma1Pt2, 14);
721847
}
722848
} // ---> track cov matrix elements for 1/Pt ends here
723-
} // ---> updateTrackCovMat block ends here
849+
} // ---> updateTrackCovMat block ends here
724850

725851
if (updatePulls) {
726852
double ratioDCAxyPulls = 1.0;

0 commit comments

Comments
 (0)