Skip to content

Commit 516234c

Browse files
AnnalenaKanjacazio
andauthored
TPC PID Skim Tree Creation (#1002)
* Add downsampling Tsallis * fix errors * Fix configurable name * Correct NCl norm and default values tpc signal and reso * default resolution 0 and variables constant * change default values sigma and signal * Fix formatting errors * declare variables const * remove TMath and use std * Add configurable track selection * Fix formatting errors Co-authored-by: Nicolò Jacazio <njacazio@users.noreply.github.com>
1 parent 7505d9d commit 516234c

12 files changed

Lines changed: 734 additions & 23 deletions

File tree

Common/Core/PID/TPCPIDResponse.h

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "Framework/Logger.h"
2424
// O2 includes
2525
#include "ReconstructionDataFormats/PID.h"
26+
#include "Framework/DataTypes.h"
2627
#include "DataFormatsTPC/BetheBlochAleph.h"
2728

2829
namespace o2::pid::tpc
@@ -44,13 +45,15 @@ class Response
4445
void SetMIP(const float mip) { mMIP = mip; }
4546
void SetChargeFactor(const float chargeFactor) { mChargeFactor = chargeFactor; }
4647
void SetMultiplicityNormalization(const float multNormalization) { mMultNormalization = multNormalization; }
48+
void SetNClNormalization(const float nclnorm) { nClNorm = nclnorm; }
4749
void SetUseDefaultResolutionParam(const bool useDefault) { mUseDefaultResolutionParam = useDefault; }
4850
void SetParameters(const Response* response)
4951
{
5052
mBetheBlochParams = response->GetBetheBlochParams();
5153
mResolutionParamsDefault = response->GetResolutionParamsDefault();
5254
mResolutionParams = response->GetResolutionParams();
5355
mMIP = response->GetMIP();
56+
nClNorm = response->GetNClNormalization();
5457
mChargeFactor = response->GetChargeFactor();
5558
mMultNormalization = response->GetMultiplicityNormalization();
5659
mUseDefaultResolutionParam = response->GetUseDefaultResolutionParam();
@@ -60,6 +63,7 @@ class Response
6063
const std::array<float, 2> GetResolutionParamsDefault() const { return mResolutionParamsDefault; }
6164
const std::vector<double> GetResolutionParams() const { return mResolutionParams; }
6265
const float GetMIP() const { return mMIP; }
66+
const float GetNClNormalization() const { return nClNorm; }
6367
const float GetChargeFactor() const { return mChargeFactor; }
6468
const float GetMultiplicityNormalization() const { return mMultNormalization; }
6569
const bool GetUseDefaultResolutionParam() const { return mUseDefaultResolutionParam; }
@@ -89,30 +93,37 @@ class Response
8993
float mChargeFactor = 2.299999952316284f;
9094
float mMultNormalization = 11000.;
9195
bool mUseDefaultResolutionParam = true;
96+
float nClNorm = 152.f;
9297

93-
ClassDefNV(Response, 2);
98+
ClassDefNV(Response, 3);
9499

95100
}; // class Response
96101

97102
/// Get expected Signal of the measurement
98103
template <typename TrackType>
99104
inline float Response::GetExpectedSignal(const TrackType& track, const o2::track::PID::ID id) const
100105
{
106+
if (!track.hasTPC()) {
107+
return -999.f;
108+
}
101109
const float bethe = mMIP * o2::tpc::BetheBlochAleph(track.tpcInnerParam() / o2::track::pid_constants::sMasses[id], mBetheBlochParams[0], mBetheBlochParams[1], mBetheBlochParams[2], mBetheBlochParams[3], mBetheBlochParams[4]) * std::pow((float)o2::track::pid_constants::sCharges[id], mChargeFactor);
102-
return bethe >= 0.f ? bethe : 0.f;
110+
return bethe >= 0.f ? bethe : -999.f;
103111
}
104112

105113
/// Gets the expected resolution of the measurement
106114
template <typename CollisionType, typename TrackType>
107115
inline float Response::GetExpectedSigma(const CollisionType& collision, const TrackType& track, const o2::track::PID::ID id) const
108116
{
117+
if (!track.hasTPC()) {
118+
return -999.f;
119+
}
109120
float resolution = 0.;
110121
if (mUseDefaultResolutionParam) {
111122
const float reso = track.tpcSignal() * mResolutionParamsDefault[0] * ((float)track.tpcNClsFound() > 0 ? std::sqrt(1. + mResolutionParamsDefault[1] / (float)track.tpcNClsFound()) : 1.f);
112-
reso >= 0.f ? resolution = reso : resolution = 0.f;
123+
reso >= 0.f ? resolution = reso : resolution = -999.f;
113124
} else {
114125

115-
const double ncl = 159. / track.tpcNClsFound(); //
126+
const double ncl = nClNorm / track.tpcNClsFound(); //
116127
const double p = track.tpcInnerParam();
117128
const double mass = o2::track::pid_constants::sMasses[id];
118129
const double bg = p / mass;
@@ -122,7 +133,7 @@ inline float Response::GetExpectedSigma(const CollisionType& collision, const Tr
122133
const std::vector<double> values{1.f / dEdx, track.tgl(), std::sqrt(ncl), relReso, track.signed1Pt(), collision.multTPC() / mMultNormalization};
123134

124135
const float reso = sqrt(pow(mResolutionParams[0], 2) * values[0] + pow(mResolutionParams[1], 2) * (values[2] * mResolutionParams[5]) * pow(values[0] / sqrt(1 + pow(values[1], 2)), mResolutionParams[2]) + values[2] * pow(values[3], 2) + pow(mResolutionParams[4] * values[4], 2) + pow(values[5] * mResolutionParams[6], 2) + pow(values[5] * (values[0] / sqrt(1 + pow(values[1], 2))) * mResolutionParams[7], 2)) * dEdx * mMIP;
125-
reso >= 0.f ? resolution = reso : resolution = 0.f;
136+
reso >= 0.f ? resolution = reso : resolution = -999.f;
126137
}
127138
return resolution;
128139
}
@@ -131,13 +142,28 @@ inline float Response::GetExpectedSigma(const CollisionType& collision, const Tr
131142
template <typename CollisionType, typename TrackType>
132143
inline float Response::GetNumberOfSigma(const CollisionType& collision, const TrackType& trk, const o2::track::PID::ID id) const
133144
{
145+
if (GetExpectedSigma(collision, trk, id) < 0.) {
146+
return -999.f;
147+
}
148+
if (GetExpectedSignal(trk, id) < 0.) {
149+
return -999.f;
150+
}
151+
if (!trk.hasTPC()) {
152+
return -999.f;
153+
}
134154
return ((trk.tpcSignal() - GetExpectedSignal(trk, id)) / GetExpectedSigma(collision, trk, id));
135155
}
136156

137157
/// Gets the deviation between the actual signal and the expected signal
138158
template <typename TrackType>
139159
inline float Response::GetSignalDelta(const TrackType& trk, const o2::track::PID::ID id) const
140160
{
161+
if (GetExpectedSignal(trk, id) < 0.) {
162+
return -999.f;
163+
}
164+
if (!trk.hasTPC()) {
165+
return -999.f;
166+
}
141167
return (trk.tpcSignal() - GetExpectedSignal(trk, id));
142168
}
143169

@@ -173,6 +199,7 @@ inline void Response::PrintAll() const
173199
LOGP(info, "mMIP = {}", mMIP);
174200
LOGP(info, "mChargeFactor = {}", mChargeFactor);
175201
LOGP(info, "mMultNormalization = {}", mMultNormalization);
202+
LOGP(info, "nClNorm = {}", nClNorm);
176203
}
177204

178205
} // namespace o2::pid::tpc

Common/DataModel/PIDResponse.h

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,25 @@ DECLARE_SOA_TABLE(pidTOFAl, "AOD", "pidTOFAl", //! Table of the TOF response wit
888888
namespace pidtpc
889889
{
890890
// Expected signals
891+
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalEl, tpcExpSignalEl, //! Expected signal with the TPC detector for electron
892+
[](float nsigma, float sigma, float tpcsignal) -> float { return tpcsignal - nsigma * sigma; });
893+
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalMu, tpcExpSignalMu, //! Expected signal with the TPC detector for muon
894+
[](float nsigma, float sigma, float tpcsignal) -> float { return tpcsignal - nsigma * sigma; });
895+
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalPi, tpcExpSignalPi, //! Expected signal with the TPC detector for pion
896+
[](float nsigma, float sigma, float tpcsignal) -> float { return tpcsignal - nsigma * sigma; });
897+
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalKa, tpcExpSignalKa, //! Expected signal with the TPC detector for kaon
898+
[](float nsigma, float sigma, float tpcsignal) -> float { return tpcsignal - nsigma * sigma; });
899+
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalPr, tpcExpSignalPr, //! Expected signal with the TPC detector for proton
900+
[](float nsigma, float sigma, float tpcsignal) -> float { return tpcsignal - nsigma * sigma; });
901+
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalDe, tpcExpSignalDe, //! Expected signal with the TPC detector for deuteron
902+
[](float nsigma, float sigma, float tpcsignal) -> float { return tpcsignal - nsigma * sigma; });
903+
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalTr, tpcExpSignalTr, //! Expected signal with the TPC detector for triton
904+
[](float nsigma, float sigma, float tpcsignal) -> float { return tpcsignal - nsigma * sigma; });
905+
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalHe, tpcExpSignalHe, //! Expected signal with the TPC detector for helium3
906+
[](float nsigma, float sigma, float tpcsignal) -> float { return tpcsignal - nsigma * sigma; });
907+
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalAl, tpcExpSignalAl, //! Expected signal with the TPC detector for alpha
908+
[](float nsigma, float sigma, float tpcsignal) -> float { return tpcsignal - nsigma * sigma; });
909+
// Expected signals difference
891910
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalDiffEl, tpcExpSignalDiffEl, //! Difference between signal and expected for electron
892911
[](float nsigma, float sigma) -> float { return nsigma * sigma; });
893912
DECLARE_SOA_DYNAMIC_COLUMN(TPCExpSignalDiffMu, tpcExpSignalDiffMu, //! Difference between signal and expected for muon
@@ -968,23 +987,23 @@ DEFINE_UNWRAP_NSIGMA_COLUMN(TPCNSigmaAl, tpcNSigmaAl); //! Unwrapped (float) nsi
968987

969988
// Per particle tables
970989
DECLARE_SOA_TABLE(pidTPCFullEl, "AOD", "pidTPCFullEl", //! Table of the TPC (full) response with expected signal, expected resolution and Nsigma for electron
971-
pidtpc::TPCExpSignalDiffEl<pidtpc::TPCNSigmaEl, pidtpc::TPCExpSigmaEl>, pidtpc::TPCExpSigmaEl, pidtpc::TPCNSigmaEl);
990+
pidtpc::TPCExpSignalEl<pidtpc::TPCNSigmaEl, pidtpc::TPCExpSigmaEl>, pidtpc::TPCExpSignalDiffEl<pidtpc::TPCNSigmaEl, pidtpc::TPCExpSigmaEl>, pidtpc::TPCExpSigmaEl, pidtpc::TPCNSigmaEl);
972991
DECLARE_SOA_TABLE(pidTPCFullMu, "AOD", "pidTPCFullMu", //! Table of the TPC (full) response with expected signal, expected resolution and Nsigma for muon
973-
pidtpc::TPCExpSignalDiffMu<pidtpc::TPCNSigmaMu, pidtpc::TPCExpSigmaMu>, pidtpc::TPCExpSigmaMu, pidtpc::TPCNSigmaMu);
992+
pidtpc::TPCExpSignalMu<pidtpc::TPCNSigmaMu, pidtpc::TPCExpSigmaMu>, pidtpc::TPCExpSignalDiffMu<pidtpc::TPCNSigmaMu, pidtpc::TPCExpSigmaMu>, pidtpc::TPCExpSigmaMu, pidtpc::TPCNSigmaMu);
974993
DECLARE_SOA_TABLE(pidTPCFullPi, "AOD", "pidTPCFullPi", //! Table of the TPC (full) response with expected signal, expected resolution and Nsigma for pion
975-
pidtpc::TPCExpSignalDiffPi<pidtpc::TPCNSigmaPi, pidtpc::TPCExpSigmaPi>, pidtpc::TPCExpSigmaPi, pidtpc::TPCNSigmaPi);
994+
pidtpc::TPCExpSignalPi<pidtpc::TPCNSigmaPi, pidtpc::TPCExpSigmaPi>, pidtpc::TPCExpSignalDiffPi<pidtpc::TPCNSigmaPi, pidtpc::TPCExpSigmaPi>, pidtpc::TPCExpSigmaPi, pidtpc::TPCNSigmaPi);
976995
DECLARE_SOA_TABLE(pidTPCFullKa, "AOD", "pidTPCFullKa", //! Table of the TPC (full) response with expected signal, expected resolution and Nsigma for kaon
977-
pidtpc::TPCExpSignalDiffKa<pidtpc::TPCNSigmaKa, pidtpc::TPCExpSigmaKa>, pidtpc::TPCExpSigmaKa, pidtpc::TPCNSigmaKa);
996+
pidtpc::TPCExpSignalKa<pidtpc::TPCNSigmaKa, pidtpc::TPCExpSigmaKa>, pidtpc::TPCExpSignalDiffKa<pidtpc::TPCNSigmaKa, pidtpc::TPCExpSigmaKa>, pidtpc::TPCExpSigmaKa, pidtpc::TPCNSigmaKa);
978997
DECLARE_SOA_TABLE(pidTPCFullPr, "AOD", "pidTPCFullPr", //! Table of the TPC (full) response with expected signal, expected resolution and Nsigma for proton
979-
pidtpc::TPCExpSignalDiffPr<pidtpc::TPCNSigmaPr, pidtpc::TPCExpSigmaPr>, pidtpc::TPCExpSigmaPr, pidtpc::TPCNSigmaPr);
998+
pidtpc::TPCExpSignalPr<pidtpc::TPCNSigmaPr, pidtpc::TPCExpSigmaPr>, pidtpc::TPCExpSignalDiffPr<pidtpc::TPCNSigmaPr, pidtpc::TPCExpSigmaPr>, pidtpc::TPCExpSigmaPr, pidtpc::TPCNSigmaPr);
980999
DECLARE_SOA_TABLE(pidTPCFullDe, "AOD", "pidTPCFullDe", //! Table of the TPC (full) response with expected signal, expected resolution and Nsigma for deuteron
981-
pidtpc::TPCExpSignalDiffDe<pidtpc::TPCNSigmaDe, pidtpc::TPCExpSigmaDe>, pidtpc::TPCExpSigmaDe, pidtpc::TPCNSigmaDe);
1000+
pidtpc::TPCExpSignalDe<pidtpc::TPCNSigmaDe, pidtpc::TPCExpSigmaDe>, pidtpc::TPCExpSignalDiffDe<pidtpc::TPCNSigmaDe, pidtpc::TPCExpSigmaDe>, pidtpc::TPCExpSigmaDe, pidtpc::TPCNSigmaDe);
9821001
DECLARE_SOA_TABLE(pidTPCFullTr, "AOD", "pidTPCFullTr", //! Table of the TPC (full) response with expected signal, expected resolution and Nsigma for triton
983-
pidtpc::TPCExpSignalDiffTr<pidtpc::TPCNSigmaTr, pidtpc::TPCExpSigmaTr>, pidtpc::TPCExpSigmaTr, pidtpc::TPCNSigmaTr);
1002+
pidtpc::TPCExpSignalTr<pidtpc::TPCNSigmaTr, pidtpc::TPCExpSigmaTr>, pidtpc::TPCExpSignalDiffTr<pidtpc::TPCNSigmaTr, pidtpc::TPCExpSigmaTr>, pidtpc::TPCExpSigmaTr, pidtpc::TPCNSigmaTr);
9841003
DECLARE_SOA_TABLE(pidTPCFullHe, "AOD", "pidTPCFullHe", //! Table of the TPC (full) response with expected signal, expected resolution and Nsigma for helium3
985-
pidtpc::TPCExpSignalDiffHe<pidtpc::TPCNSigmaHe, pidtpc::TPCExpSigmaHe>, pidtpc::TPCExpSigmaHe, pidtpc::TPCNSigmaHe);
1004+
pidtpc::TPCExpSignalHe<pidtpc::TPCNSigmaHe, pidtpc::TPCExpSigmaHe>, pidtpc::TPCExpSignalDiffHe<pidtpc::TPCNSigmaHe, pidtpc::TPCExpSigmaHe>, pidtpc::TPCExpSigmaHe, pidtpc::TPCNSigmaHe);
9861005
DECLARE_SOA_TABLE(pidTPCFullAl, "AOD", "pidTPCFullAl", //! Table of the TPC (full) response with expected signal, expected resolution and Nsigma for alpha
987-
pidtpc::TPCExpSignalDiffAl<pidtpc::TPCNSigmaAl, pidtpc::TPCExpSigmaAl>, pidtpc::TPCExpSigmaAl, pidtpc::TPCNSigmaAl);
1006+
pidtpc::TPCExpSignalAl<pidtpc::TPCNSigmaAl, pidtpc::TPCExpSigmaAl>, pidtpc::TPCExpSignalDiffAl<pidtpc::TPCNSigmaAl, pidtpc::TPCExpSigmaAl>, pidtpc::TPCExpSigmaAl, pidtpc::TPCNSigmaAl);
9881007

9891008
// Tiny size tables
9901009
DECLARE_SOA_TABLE(pidTPCEl, "AOD", "pidTPCEl", //! Table of the TPC response with binned Nsigma for electron

Common/TableProducer/PID/pidTPC.cxx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ struct tpcPid {
158158
enableNetworkOptimizations.value);
159159
network = temp_net;
160160
network.evalNetwork(std::vector<float>(network.getInputDimensions(), 1.)); // This is an initialisation and might reduce the overhead of the model
161+
network.SetNClNormalization(response.GetNClNormalization());
161162
}
162163
}
163164
}
@@ -186,6 +187,7 @@ struct tpcPid {
186187
reserveTable(pidAl, tablePIDAl);
187188

188189
std::vector<float> network_prediction;
190+
const float nNclNormalization = response.GetNClNormalization();
189191

190192
if (useNetworkCorrection) {
191193

@@ -230,7 +232,7 @@ struct tpcPid {
230232
track_properties[counter_track_props + 2] = trk.signed1Pt();
231233
track_properties[counter_track_props + 3] = o2::track::pid_constants::sMasses[i];
232234
track_properties[counter_track_props + 4] = collisions.iteratorAt(trk.collisionId()).multTPC() / 11000.;
233-
track_properties[counter_track_props + 5] = std::sqrt(159. / trk.tpcNClsFound());
235+
track_properties[counter_track_props + 5] = std::sqrt(nNclNormalization / trk.tpcNClsFound());
234236
counter_track_props += input_dimensions;
235237
}
236238

Common/TableProducer/PID/pidTPCFull.cxx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ struct tpcPidFull {
158158
enableNetworkOptimizations.value);
159159
network = temp_net;
160160
network.evalNetwork(std::vector<float>(network.getInputDimensions(), 1.)); // This is an initialisation and might reduce the overhead of the model
161+
network.SetNClNormalization(response.GetNClNormalization());
161162
}
162163
}
163164
}
@@ -214,7 +215,7 @@ struct tpcPidFull {
214215
const unsigned long prediction_size = output_dimensions * tracks_size;
215216

216217
network_prediction = std::vector<float>(prediction_size * 9); // For each mass hypotheses
217-
218+
const float nNclNormalization = response.GetNClNormalization();
218219
float duration_network = 0;
219220

220221
std::vector<float> track_properties(track_prop_size);
@@ -230,7 +231,7 @@ struct tpcPidFull {
230231
track_properties[counter_track_props + 2] = trk.signed1Pt();
231232
track_properties[counter_track_props + 3] = o2::track::pid_constants::sMasses[i];
232233
track_properties[counter_track_props + 4] = collisions.iteratorAt(trk.collisionId()).multTPC() / 11000.;
233-
track_properties[counter_track_props + 5] = std::sqrt(159. / trk.tpcNClsFound());
234+
track_properties[counter_track_props + 5] = std::sqrt(nNclNormalization / trk.tpcNClsFound());
234235
counter_track_props += input_dimensions;
235236
}
236237

Common/TableProducer/PID/pidTPCML.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ std::array<float, 6> Network::createInputFromTrack(const C& collision_it, const
124124
const float signed1Pt = track.signed1Pt();
125125
const float mass = o2::track::pid_constants::sMasses[id];
126126
const float multTPC = collision_it.multTPC() / 11000.;
127-
const float ncl = std::sqrt(159. / track.tpcNClsFound());
127+
const float ncl = std::sqrt(nClNorm / track.tpcNClsFound());
128128

129129
return {p, tgl, signed1Pt, mass, multTPC, ncl};
130130
}

Common/TableProducer/PID/pidTPCML.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,14 @@ class Network
4646
template <typename C, typename T>
4747
std::array<float, 6> createInputFromTrack(const C&, const T&, const uint8_t) const; // create a std::vector<float> with all the inputs for the network
4848
std::vector<Ort::Value> createTensor(std::array<float, 6>) const; // create a std::vector<Ort::Value> (= ONNX tensor) for model input
49-
float* evalNetwork(std::vector<Ort::Value>); // evaluate the network on a std::vector<Ort::Value> (= ONNX tensor)
50-
float* evalNetwork(std::vector<float>); // evaluate the network on a std::vector<float>
49+
float* evalNetwork(std::vector<Ort::Value>); // evaluate the network on a std::vector<Ort::Value> (= ONNX tensor)
50+
float* evalNetwork(std::vector<float>); // evaluate the network on a std::vector<float>
5151

5252
// Getters & Setters
5353
int getInputDimensions() const { return mInputShapes[0][1]; };
5454
int getOutputDimensions() const { return mOutputShapes[0][1]; };
55+
void SetNClNormalization(const float nclnorm) { nClNorm = nclnorm; }
56+
const float GetNClNormalization() const { return nClNorm; }
5557

5658
private:
5759
// Environment variables for the ONNX runtime
@@ -65,6 +67,8 @@ class Network
6567
std::vector<std::string> mOutputNames;
6668
std::vector<std::vector<int64_t>> mOutputShapes;
6769

70+
float nClNorm = 152.f;
71+
6872
// Internal function for printing the shape of tensors: See https://github.com/saganatt/PID_ML_in_O2 or O2Physics/Tools/PIDML/simpleApplyPidOnnxModel.cxx
6973
std::string printShape(const std::vector<int64_t>& v);
7074

@@ -75,4 +79,4 @@ class Network
7579

7680
} // namespace o2::pid::tpc
7781

78-
#endif // O2_PID_TPC_ML_H_
82+
#endif // O2_PID_TPC_ML_H_

Common/Tools/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ o2physics_add_executable(pidparam-tof-reso
2424
o2physics_add_executable(pidparam-tpc-response
2525
SOURCES handleParamTPCResponse.cxx
2626
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
27-
)
27+
)
28+

Common/Tools/handleParamTPCResponse.cxx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ bool initOptionsAndParse(bpo::options_description& options, int argc, char* argv
4141
"paramMIP", bpo::value<float>()->default_value(50.f), "MIP parameter value")(
4242
"paramChargeFactor", bpo::value<float>()->default_value(2.299999952316284f), "Charge factor value")(
4343
"paramMultNormalization", bpo::value<float>()->default_value(11000.), "Multiplicity Normalization")(
44+
"paramnClNormalization", bpo::value<float>()->default_value(152.), "Maximum nClusters for normalisation (159 for run 2, 152 for run 3)")(
4445
"useDefaultParam", bpo::value<bool>()->default_value(true), "Use default sigma parametrisation")(
4546
"mode", bpo::value<string>()->default_value(""), "Running mode ('read' from file, 'write' to file, 'pull' from CCDB, 'push' to CCDB)")(
4647
"help,h", "Produce help message.");
@@ -93,6 +94,7 @@ int main(int argc, char* argv[])
9394
const float mipval = arguments["paramMIP"].as<float>();
9495
const float chargefacval = arguments["paramChargeFactor"].as<float>();
9596
const float multNormval = arguments["paramMultNormalization"].as<float>();
97+
const float nClNormval = arguments["paramnClNormalization"].as<float>();
9698
const bool useDefaultParam = arguments["useDefaultParam"].as<bool>();
9799
const std::string optMode = arguments["mode"].as<std::string>();
98100
if (optMode.empty()) {
@@ -172,6 +174,7 @@ int main(int argc, char* argv[])
172174
tpc->SetMIP(mipval);
173175
tpc->SetChargeFactor(chargefacval);
174176
tpc->SetMultiplicityNormalization(multNormval);
177+
tpc->SetNClNormalization(nClNormval);
175178
tpc->SetUseDefaultResolutionParam(useDefaultParam);
176179
tpc->PrintAll();
177180
}

DPG/Tasks/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@
1010
# or submit itself to any jurisdiction.
1111

1212
add_subdirectory(AOTTrack)
13+
add_subdirectory(TPC)
1314
add_subdirectory(FDD)
14-

0 commit comments

Comments
 (0)