Skip to content

Commit 497f893

Browse files
authored
Merge branch 'master' into master
2 parents 4fb544a + 2dba948 commit 497f893

File tree

121 files changed

+10604
-5525
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

121 files changed

+10604
-5525
lines changed

ALICE3/DataModel/OTFMulticharm.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ DECLARE_SOA_COLUMN(XiccMass, xiccMass, float);
4040
// kine vars
4141
DECLARE_SOA_COLUMN(XiccPt, xiccPt, float);
4242
DECLARE_SOA_COLUMN(XiccEta, xiccEta, float);
43+
DECLARE_SOA_COLUMN(XicPt, xicPt, float);
44+
DECLARE_SOA_COLUMN(XicEta, xicEta, float);
4345

4446
// topo vars
4547
DECLARE_SOA_COLUMN(XiDCAz, xiDCAz, float);
@@ -122,12 +124,15 @@ DECLARE_SOA_TABLE(MCharmIndices, "AOD", "MCharmIndices",
122124
otfmulticharm::XiCCPionId);
123125

124126
DECLARE_SOA_TABLE(MCharmCores, "AOD", "MCharmCores",
125-
otfmulticharm::XicDauDCA,
126-
otfmulticharm::XiccDauDCA,
127-
otfmulticharm::XicMass,
128127
otfmulticharm::XiccMass,
129128
otfmulticharm::XiccPt,
130129
otfmulticharm::XiccEta,
130+
otfmulticharm::XiccDauDCA,
131+
132+
otfmulticharm::XicMass,
133+
otfmulticharm::XicPt,
134+
otfmulticharm::XicEta,
135+
otfmulticharm::XicDauDCA,
131136

132137
otfmulticharm::XiDCAxy,
133138
otfmulticharm::XiDCAz,

ALICE3/TableProducer/alice3-multicharmTable.cxx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -734,9 +734,10 @@ struct alice3multicharmTable {
734734
picc.globalIndex());
735735

736736
multiCharmCore(
737-
thisXiCcandidate.dca, thisXiCCcandidate.dca,
738-
thisXiCcandidate.mass, thisXiCCcandidate.mass,
739-
thisXiCCcandidate.pt, thisXiCCcandidate.eta,
737+
thisXiCCcandidate.mass, thisXiCCcandidate.pt,
738+
thisXiCCcandidate.eta, thisXiCCcandidate.dca,
739+
thisXiCcandidate.mass, thisXiCcandidate.pt,
740+
thisXiCcandidate.eta, thisXiCcandidate.dca,
740741
xi.dcaXY(), xi.dcaZ(),
741742
xicdcaXY, xicdcaZ,
742743
xiccdcaXY, xiccdcaZ,
@@ -756,12 +757,10 @@ struct alice3multicharmTable {
756757
pi1cTOFDiffOuter, pi1c.nSigmaPionOuterTOF(),
757758
pi1c.hasSigPi(), pi1c.nSigmaPionRich(),
758759
getPdgCodeForTrack(pi1c),
759-
760760
pi2cTOFDiffInner, pi2c.nSigmaPionInnerTOF(),
761761
pi2cTOFDiffOuter, pi2c.nSigmaPionOuterTOF(),
762762
pi2c.hasSigPi(), pi2c.nSigmaPionRich(),
763763
getPdgCodeForTrack(pi2c),
764-
765764
piccTOFDiffInner, picc.nSigmaPionInnerTOF(),
766765
piccTOFDiffOuter, picc.nSigmaPionOuterTOF(),
767766
picc.hasSigPi(), picc.nSigmaPionRich(),
@@ -774,9 +773,7 @@ struct alice3multicharmTable {
774773
prFromLa.dcaXY(), prFromLa.dcaZ(),
775774
piFromLa.pt(), piFromLa.eta(),
776775
piFromLa.dcaXY(), piFromLa.dcaZ(),
777-
pi1c.eta(),
778-
pi2c.eta(),
779-
picc.eta());
776+
pi1c.eta(), pi2c.eta(), picc.eta());
780777
}
781778
}
782779
histos.fill(HIST("hCombinationsXiCC"), nCombinationsCC);

ALICE3/Tasks/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ o2physics_add_dpl_workflow(alice3-taskcorrelationddbar
6161

6262
o2physics_add_dpl_workflow(alice3-multicharm
6363
SOURCES alice3-multicharm.cxx
64-
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
64+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2Physics::MLCore
6565
COMPONENT_NAME Analysis)
6666

6767
o2physics_add_dpl_workflow(alice3-efficiency

ALICE3/Tasks/alice3-multicharm.cxx

Lines changed: 251 additions & 46 deletions
Large diffs are not rendered by default.

CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
/PWGMM/Lumi @alibuild @aalkin @jgcn
5959
/PWGMM/UE @alibuild @aalkin @aortizve @jgcn
6060

61-
/PWGUD @alibuild @pbuehler @abylinkin @rolavick
61+
/PWGUD @alibuild @pbuehler @nystrand @rolavick
6262
/PWGJE @alibuild @lhavener @maoyx @nzardosh @fjonasALICE @mfasDa @mhemmer-cern
6363
/Tools/PIDML @alibuild @saganatt
6464
/Tools/ML @alibuild @fcatalan92 @fmazzasc

Common/DataModel/Multiplicity.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ DECLARE_SOA_TABLE(MFTMults, "AOD", "MFTMULT", //! Multiplicity with MFT
125125
mult::MFTNalltracks, mult::MFTNtracks);
126126
using BarrelMults = soa::Join<TrackletMults, TPCMults, PVMults>;
127127
using Mults = soa::Join<BarrelMults, FV0Mults, FT0Mults, FDDMults, ZDCMults>;
128+
using MultsRun3 = soa::Join<TPCMults, PVMults, FV0Mults, FT0Mults, FDDMults, ZDCMults>;
128129
using FT0Mult = FT0Mults::iterator;
129130
using MFTMult = MFTMults::iterator;
130131
using Mult = Mults::iterator;

Common/TableProducer/PID/pidTPC.cxx

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,11 @@ struct tpcPid {
150150
Configurable<int> useNetworkHe{"useNetworkHe", 1, {"Switch for applying neural network on the helium3 mass hypothesis (if network enabled) (set to 0 to disable)"}};
151151
Configurable<int> useNetworkAl{"useNetworkAl", 1, {"Switch for applying neural network on the alpha mass hypothesis (if network enabled) (set to 0 to disable)"}};
152152
Configurable<float> networkBetaGammaCutoff{"networkBetaGammaCutoff", 0.45, {"Lower value of beta-gamma to override the NN application"}};
153+
Configurable<float> networkInputBatchedMode{"networkInputBatchedMode", -1, {"-1: Takes all tracks, >0: Takes networkInputBatchedMode number of tracks at once"}};
153154

154155
// Parametrization configuration
155156
bool useCCDBParam = false;
157+
std::vector<float> track_properties;
156158

157159
void init(o2::framework::InitContext& initContext)
158160
{
@@ -298,8 +300,6 @@ struct tpcPid {
298300
std::vector<float> createNetworkPrediction(C const& collisions, T const& tracks, B const& bcs, const size_t size)
299301
{
300302

301-
std::vector<float> network_prediction;
302-
303303
auto start_network_total = std::chrono::high_resolution_clock::now();
304304
if (autofetchNetworks) {
305305
const auto& bc = bcs.begin();
@@ -345,20 +345,24 @@ struct tpcPid {
345345
// Defining some network parameters
346346
int input_dimensions = network.getNumInputNodes();
347347
int output_dimensions = network.getNumOutputNodes();
348-
const uint64_t track_prop_size = input_dimensions * size;
349348
const uint64_t prediction_size = output_dimensions * size;
349+
const uint8_t numSpecies = 9;
350+
const uint64_t total_eval_size = size * numSpecies; // 9 species
350351

351-
network_prediction = std::vector<float>(prediction_size * 9); // For each mass hypotheses
352352
const float nNclNormalization = response->GetNClNormalization();
353353
float duration_network = 0;
354354

355-
std::vector<float> track_properties(track_prop_size);
356-
uint64_t counter_track_props = 0;
357-
int loop_counter = 0;
355+
uint64_t counter_track_props = 0, exec_counter = 0, in_batch_counter = 0, total_input_count = 0;
356+
uint64_t track_prop_size = networkInputBatchedMode.value;
357+
if (networkInputBatchedMode.value <= 0) {
358+
track_prop_size = size; // If the networkInputBatchedMode is not set, we use all tracks at once
359+
}
360+
track_properties.resize(track_prop_size * input_dimensions); // If the networkInputBatchedMode is set, we use the number of tracks specified in the config
361+
std::vector<float> network_prediction(prediction_size * numSpecies); // For each mass hypotheses
358362

359363
// Filling a std::vector<float> to be evaluated by the network
360364
// Evaluation on single tracks brings huge overhead: Thus evaluation is done on one large vector
361-
for (int i = 0; i < 9; i++) { // Loop over particle number for which network correction is used
365+
for (int species = 0; species < numSpecies; species++) { // Loop over particle number for which network correction is used
362366
for (auto const& trk : tracks) {
363367
if (!trk.hasTPC()) {
364368
continue;
@@ -368,30 +372,38 @@ struct tpcPid {
368372
continue;
369373
}
370374
}
371-
track_properties[counter_track_props] = trk.tpcInnerParam();
375+
376+
if ((in_batch_counter == track_prop_size) || (total_input_count == total_eval_size)) { // If the batch size is reached, reset the counter
377+
int32_t fill_shift = (exec_counter * track_prop_size - ((total_input_count == total_eval_size) ? (total_input_count % track_prop_size) : 0)) * output_dimensions;
378+
auto start_network_eval = std::chrono::high_resolution_clock::now();
379+
float* output_network = network.evalModel(track_properties);
380+
auto stop_network_eval = std::chrono::high_resolution_clock::now();
381+
duration_network += std::chrono::duration<float, std::ratio<1, 1000000000>>(stop_network_eval - start_network_eval).count();
382+
383+
for (uint64_t i = 0; i < (in_batch_counter * output_dimensions); i += output_dimensions) {
384+
for (int j = 0; j < output_dimensions; j++) {
385+
network_prediction[i + j + fill_shift] = output_network[i + j];
386+
}
387+
}
388+
counter_track_props = 0;
389+
in_batch_counter = 0;
390+
exec_counter++;
391+
}
392+
393+
// LOG(info) << "counter_tracks_props: " << counter_track_props << "; in_batch_counter: " << in_batch_counter << "; total_input_count: " << total_input_count << "; exec_counter: " << exec_counter << "; track_prop_size: " << track_prop_size << "; size: " << size << "; track_properties.size(): " << track_properties.size();
394+
track_properties[counter_track_props] = trk.tpcInnerParam(); // (tracks.asArrowTable()->GetColumn<float>("tpcInnerParam")).GetData();
372395
track_properties[counter_track_props + 1] = trk.tgl();
373396
track_properties[counter_track_props + 2] = trk.signed1Pt();
374-
track_properties[counter_track_props + 3] = o2::track::pid_constants::sMasses[i];
397+
track_properties[counter_track_props + 3] = o2::track::pid_constants::sMasses[species];
375398
track_properties[counter_track_props + 4] = trk.has_collision() ? collisions.iteratorAt(trk.collisionId()).multTPC() / 11000. : 1.;
376399
track_properties[counter_track_props + 5] = std::sqrt(nNclNormalization / trk.tpcNClsFound());
377400
if (input_dimensions == 7 && networkVersion == "2") {
378401
track_properties[counter_track_props + 6] = trk.has_collision() ? collisions.iteratorAt(trk.collisionId()).ft0cOccupancyInTimeRange() / 60000. : 1.;
379402
}
380403
counter_track_props += input_dimensions;
404+
in_batch_counter++;
405+
total_input_count++;
381406
}
382-
383-
auto start_network_eval = std::chrono::high_resolution_clock::now();
384-
float* output_network = network.evalModel(track_properties);
385-
auto stop_network_eval = std::chrono::high_resolution_clock::now();
386-
duration_network += std::chrono::duration<float, std::ratio<1, 1000000000>>(stop_network_eval - start_network_eval).count();
387-
for (uint64_t i = 0; i < prediction_size; i += output_dimensions) {
388-
for (int j = 0; j < output_dimensions; j++) {
389-
network_prediction[i + j + prediction_size * loop_counter] = output_network[i + j];
390-
}
391-
}
392-
393-
counter_track_props = 0;
394-
loop_counter += 1;
395407
}
396408
track_properties.clear();
397409

0 commit comments

Comments
 (0)