Skip to content

Commit b7b1016

Browse files
authored
Merge da7693b into sapling-pr-archive-ktf
2 parents c9812e0 + da7693b commit b7b1016

34 files changed

Lines changed: 1128 additions & 127 deletions

File tree

DataFormats/Detectors/ITSMFT/ITS/include/DataFormatsITS/TrackITS.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,33 @@ class TrackITSExt : public TrackITS
210210
return mIndex;
211211
}
212212

213+
#ifndef GPUCA_GPUCODE
214+
// build order-independent hash via the external cluster idx (unique within a TF) for the selected layers
215+
// cluster indices are either sorted inward or outward
216+
size_t hash(uint16_t layerMask = 0xFFFF, bool inward = true) const noexcept
217+
{
218+
size_t h1 = 0, h2 = 0;
219+
int from = (int)getLastClusterLayer(), to = -1, step = -1;
220+
if (inward) {
221+
from = (int)getFirstClusterLayer();
222+
to = MaxClusters;
223+
step = 1;
224+
}
225+
// clusters are stored continously but they do not necesarrily correspond to the layers
226+
for (int layer = from, slot{0}; layer != to; layer += step) {
227+
if (hasHitOnLayer(layer)) {
228+
int idx = mIndex[slot++];
229+
if (layerMask & (uint16_t(1) << layer)) {
230+
size_t v = std::hash<int>{}(idx);
231+
h1 ^= v;
232+
h2 += v * 0x9e3779b97f4a7c15ULL; // boost's hash_combine
233+
}
234+
}
235+
}
236+
return h1 ^ (h2 << 1);
237+
}
238+
#endif
239+
213240
private:
214241
std::array<int, MaxClusters> mIndex = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; ///< Indices of associated clusters
215242
ClassDefNV(TrackITSExt, 3);

DataFormats/simulation/include/SimulationDataFormat/O2DatabasePDG.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,48 @@ inline void O2DatabasePDG::addALICEParticles(TDatabasePDG* db)
524524
db->AddParticle("f2_1525", "f2_1525", 1.525, kFALSE, 0.073, 0, "Resonance", ionCode);
525525
}
526526

527+
// when using hadronic rescattering in Pythia8
528+
ionCode = 9000221;
529+
if (!db->GetParticle(ionCode)) {
530+
db->AddParticle("f0_500", "f0_500", 0.500, kFALSE, 0.350, 0.0, "Resonance", ionCode);
531+
}
532+
ionCode = -100313;
533+
if (!db->GetParticle(ionCode)) {
534+
db->AddParticle("K*(1410)bar0", "K*(1410)bar0", 1.414, kFALSE, 0.232, 0, "Resonance", ionCode);
535+
}
536+
ionCode = 100313;
537+
if (!db->GetParticle(ionCode)) {
538+
db->AddParticle("K*(1410)0", "K*(1410)0", 1.414, kFALSE, 0.232, 0, "Resonance", ionCode);
539+
}
540+
ionCode = 100323;
541+
if (!db->GetParticle(ionCode)) {
542+
db->AddParticle("K*(1410)+", "K*(1410)+", 1.414, kFALSE, 0.232, +1, "Resonance", ionCode);
543+
}
544+
ionCode = -100323;
545+
if (!db->GetParticle(ionCode)) {
546+
db->AddParticle("K*(1410)-", "K*(1410)-", 1.414, kFALSE, 0.232, -1, "Resonance", ionCode);
547+
}
548+
ionCode = 100211;
549+
if (!db->GetParticle(ionCode)) {
550+
db->AddParticle("pi(1300)+", "pi(1300)+", 1.165, kFALSE, 0.400, +1, "Resonance", ionCode);
551+
}
552+
ionCode = -100211;
553+
if (!db->GetParticle(ionCode)) {
554+
db->AddParticle("pi(1300)-", "pi(1300)-", 1.165, kFALSE, 0.400, -1, "Resonance", ionCode);
555+
}
556+
ionCode = 202112;
557+
if (!db->GetParticle(ionCode)) {
558+
db->AddParticle("n(1440)0", "n(1440)0", 1.358, kFALSE, 0.350, 0, "Ion", ionCode);
559+
}
560+
ionCode = -202212;
561+
if (!db->GetParticle(ionCode)) {
562+
db->AddParticle("p(1440)bar-", "p(1440)bar-", 1.793, kFALSE, 0.350, -1, "Ion", ionCode);
563+
}
564+
ionCode = 202212;
565+
if (!db->GetParticle(ionCode)) {
566+
db->AddParticle("p(1440)+", "p(1440)+", 1.793, kFALSE, 0.350, 1, "Ion", ionCode);
567+
}
568+
527569
// Xi-/+ (1820)
528570
ionCode = 123314;
529571
if (!db->GetParticle(ionCode)) {

Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ class AODProducerWorkflowDPL : public Task
249249
bool mThinTracks{false};
250250
bool mPropTracks{false};
251251
bool mPropMuons{false};
252+
bool mStoreAllMFTCov{false};
252253
float mTrackQCKeepGlobalTracks{false};
253254
float mTrackQCRetainOnlydEdx{false};
254255
float mTrackQCFraction{0.00};
@@ -547,8 +548,8 @@ class AODProducerWorkflowDPL : public Task
547548
template <typename TRDsExtraCursorType>
548549
void addToTRDsExtra(const o2::globaltracking::RecoContainer& recoData, TRDsExtraCursorType& trdExtraCursor, const GIndex& trkIdx, int trkTableIdx);
549550

550-
template <typename mftTracksCursorType, typename AmbigMFTTracksCursorType>
551-
void addToMFTTracksTable(mftTracksCursorType& mftTracksCursor, AmbigMFTTracksCursorType& ambigMFTTracksCursor,
551+
template <typename mftTracksCursorType, typename mftTracksCovCursorType, typename AmbigMFTTracksCursorType>
552+
void addToMFTTracksTable(mftTracksCursorType& mftTracksCursor, mftTracksCovCursorType& mftTracksCovCursor, AmbigMFTTracksCursorType& ambigMFTTracksCursor,
552553
GIndex trackID, const o2::globaltracking::RecoContainer& data, int collisionID,
553554
std::uint64_t collisionBC, const std::map<uint64_t, int>& bcsMap);
554555

Detectors/AOD/src/AODProducerWorkflowSpec.cxx

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -507,8 +507,8 @@ void AODProducerWorkflowDPL::addToTRDsExtra(const o2::globaltracking::RecoContai
507507
trdExtraCursor(trkTableIdx, q0s, q1s, q2s, q0sCor, q1sCor, q2sCor, ttgls, tphis);
508508
}
509509

510-
template <typename mftTracksCursorType, typename AmbigMFTTracksCursorType>
511-
void AODProducerWorkflowDPL::addToMFTTracksTable(mftTracksCursorType& mftTracksCursor, AmbigMFTTracksCursorType& ambigMFTTracksCursor,
510+
template <typename mftTracksCursorType, typename mftTracksCovCursorType, typename AmbigMFTTracksCursorType>
511+
void AODProducerWorkflowDPL::addToMFTTracksTable(mftTracksCursorType& mftTracksCursor, mftTracksCovCursorType& mftTracksCovCursor, AmbigMFTTracksCursorType& ambigMFTTracksCursor,
512512
GIndex trackID, const o2::globaltracking::RecoContainer& data, int collisionID,
513513
std::uint64_t collisionBC, const std::map<uint64_t, int>& bcsMap)
514514
{
@@ -543,6 +543,30 @@ void AODProducerWorkflowDPL::addToMFTTracksTable(mftTracksCursorType& mftTracksC
543543
truncateFloatFraction(track.getTrackChi2(), mTrackChi2),
544544
truncateFloatFraction(trackTime, mTrackTime),
545545
truncateFloatFraction(trackTimeRes, mTrackTimeError));
546+
if (mStoreAllMFTCov) {
547+
float sX = TMath::Sqrt(track.getSigma2X());
548+
float sY = TMath::Sqrt(track.getSigma2Y());
549+
float sPhi = TMath::Sqrt(track.getSigma2Phi());
550+
float sTgl = TMath::Sqrt(track.getSigma2Tanl());
551+
float sQ2Pt = TMath::Sqrt(track.getSigma2InvQPt());
552+
553+
mftTracksCovCursor(mTableTrMFTID,
554+
truncateFloatFraction(sX, mTrackCovDiag),
555+
truncateFloatFraction(sY, mTrackCovDiag),
556+
truncateFloatFraction(sPhi, mTrackCovDiag),
557+
truncateFloatFraction(sTgl, mTrackCovDiag),
558+
truncateFloatFraction(sQ2Pt, mTrackCovDiag),
559+
(Char_t)(128. * track.getCovariances()(0, 1) / (sX * sY)),
560+
(Char_t)(128. * track.getCovariances()(0, 2) / (sPhi * sX)),
561+
(Char_t)(128. * track.getCovariances()(1, 2) / (sPhi * sY)),
562+
(Char_t)(128. * track.getCovariances()(0, 3) / (sTgl * sX)),
563+
(Char_t)(128. * track.getCovariances()(1, 3) / (sTgl * sY)),
564+
(Char_t)(128. * track.getCovariances()(2, 3) / (sTgl * sPhi)),
565+
(Char_t)(128. * track.getCovariances()(0, 4) / (sQ2Pt * sX)),
566+
(Char_t)(128. * track.getCovariances()(1, 4) / (sQ2Pt * sY)),
567+
(Char_t)(128. * track.getCovariances()(2, 4) / (sQ2Pt * sPhi)),
568+
(Char_t)(128. * track.getCovariances()(3, 4) / (sQ2Pt * sTgl)));
569+
}
546570
if (needBCSlice) {
547571
ambigMFTTracksCursor(mTableTrMFTID, bcSlice);
548572
}
@@ -579,10 +603,13 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
579603
int nToReserve = end - start; // + last index for a given table
580604
if (src == GIndex::Source::MFT) {
581605
mftTracksCursor.reserve(nToReserve + mftTracksCursor.lastIndex());
606+
if (mStoreAllMFTCov) {
607+
mftTracksCovCursor.reserve(nToReserve + mftTracksCovCursor.lastIndex());
608+
}
582609
} else if (src == GIndex::Source::MCH || src == GIndex::Source::MFTMCH || src == GIndex::Source::MCHMID) {
583610
fwdTracksCursor.reserve(nToReserve + fwdTracksCursor.lastIndex());
584611
fwdTracksCovCursor.reserve(nToReserve + fwdTracksCovCursor.lastIndex());
585-
if (src == GIndex::Source::MFTMCH) {
612+
if (!mStoreAllMFTCov && src == GIndex::Source::MFTMCH) {
586613
mftTracksCovCursor.reserve(nToReserve + mftTracksCovCursor.lastIndex());
587614
}
588615
} else {
@@ -597,7 +624,7 @@ void AODProducerWorkflowDPL::fillTrackTablesPerCollision(int collisionID,
597624
if (trackIndex.isAmbiguous() && mGIDToTableMFTID.find(trackIndex) != mGIDToTableMFTID.end()) { // was it already stored ?
598625
continue;
599626
}
600-
addToMFTTracksTable(mftTracksCursor, ambigMFTTracksCursor, trackIndex, data, collisionID, collisionBC, bcsMap);
627+
addToMFTTracksTable(mftTracksCursor, mftTracksCovCursor, ambigMFTTracksCursor, trackIndex, data, collisionID, collisionBC, bcsMap);
601628
mGIDToTableMFTID.emplace(trackIndex, mTableTrMFTID);
602629
mTableTrMFTID++;
603630
} else if (src == GIndex::Source::MCH || src == GIndex::Source::MFTMCH || src == GIndex::Source::MCHMID) { // FwdTracks tracks are treated separately since they are stored in a different table
@@ -929,22 +956,24 @@ void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksC
929956
float sX = TMath::Sqrt(mfttrack.getSigma2X()), sY = TMath::Sqrt(mfttrack.getSigma2Y()), sPhi = TMath::Sqrt(mfttrack.getSigma2Phi()),
930957
sTgl = TMath::Sqrt(mfttrack.getSigma2Tanl()), sQ2Pt = TMath::Sqrt(mfttrack.getSigma2InvQPt());
931958

932-
mftTracksCovCursor(fwdInfo.matchmfttrackid,
933-
truncateFloatFraction(sX, mTrackCovDiag),
934-
truncateFloatFraction(sY, mTrackCovDiag),
935-
truncateFloatFraction(sPhi, mTrackCovDiag),
936-
truncateFloatFraction(sTgl, mTrackCovDiag),
937-
truncateFloatFraction(sQ2Pt, mTrackCovDiag),
938-
(Char_t)(128. * mfttrack.getCovariances()(0, 1) / (sX * sY)),
939-
(Char_t)(128. * mfttrack.getCovariances()(0, 2) / (sPhi * sX)),
940-
(Char_t)(128. * mfttrack.getCovariances()(1, 2) / (sPhi * sY)),
941-
(Char_t)(128. * mfttrack.getCovariances()(0, 3) / (sTgl * sX)),
942-
(Char_t)(128. * mfttrack.getCovariances()(1, 3) / (sTgl * sY)),
943-
(Char_t)(128. * mfttrack.getCovariances()(2, 3) / (sTgl * sPhi)),
944-
(Char_t)(128. * mfttrack.getCovariances()(0, 4) / (sQ2Pt * sX)),
945-
(Char_t)(128. * mfttrack.getCovariances()(1, 4) / (sQ2Pt * sY)),
946-
(Char_t)(128. * mfttrack.getCovariances()(2, 4) / (sQ2Pt * sPhi)),
947-
(Char_t)(128. * mfttrack.getCovariances()(3, 4) / (sQ2Pt * sTgl)));
959+
if (!mStoreAllMFTCov) {
960+
mftTracksCovCursor(fwdInfo.matchmfttrackid,
961+
truncateFloatFraction(sX, mTrackCovDiag),
962+
truncateFloatFraction(sY, mTrackCovDiag),
963+
truncateFloatFraction(sPhi, mTrackCovDiag),
964+
truncateFloatFraction(sTgl, mTrackCovDiag),
965+
truncateFloatFraction(sQ2Pt, mTrackCovDiag),
966+
(Char_t)(128. * mfttrack.getCovariances()(0, 1) / (sX * sY)),
967+
(Char_t)(128. * mfttrack.getCovariances()(0, 2) / (sPhi * sX)),
968+
(Char_t)(128. * mfttrack.getCovariances()(1, 2) / (sPhi * sY)),
969+
(Char_t)(128. * mfttrack.getCovariances()(0, 3) / (sTgl * sX)),
970+
(Char_t)(128. * mfttrack.getCovariances()(1, 3) / (sTgl * sY)),
971+
(Char_t)(128. * mfttrack.getCovariances()(2, 3) / (sTgl * sPhi)),
972+
(Char_t)(128. * mfttrack.getCovariances()(0, 4) / (sQ2Pt * sX)),
973+
(Char_t)(128. * mfttrack.getCovariances()(1, 4) / (sQ2Pt * sY)),
974+
(Char_t)(128. * mfttrack.getCovariances()(2, 4) / (sQ2Pt * sPhi)),
975+
(Char_t)(128. * mfttrack.getCovariances()(3, 4) / (sQ2Pt * sTgl)));
976+
}
948977
}
949978

950979
std::uint64_t bcOfTimeRef;
@@ -1830,6 +1859,7 @@ void AODProducerWorkflowDPL::init(InitContext& ic)
18301859
mPropTracks = ic.options().get<bool>("propagate-tracks");
18311860
mMaxPropXiu = ic.options().get<float>("propagate-tracks-max-xiu");
18321861
mPropMuons = ic.options().get<bool>("propagate-muons");
1862+
mStoreAllMFTCov = ic.options().get<bool>("store-all-mft-cov");
18331863
if (auto s = ic.options().get<std::string>("with-streamers"); !s.empty()) {
18341864
mStreamerFlags.set(s);
18351865
if (mStreamerFlags) {
@@ -3524,6 +3554,7 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
35243554
ConfigParamSpec{"propagate-tracks-max-xiu", VariantType::Float, 5.0f, {"Propagate tracks to IP if X_IU smaller than this value (and if propagate tracks enabled)"}},
35253555
ConfigParamSpec{"hepmc-update", VariantType::String, "always", {"When to update HepMC Aux tables: always - force update, never - never update, all - if all keys are present, any - when any key is present (not valid yet)"}},
35263556
ConfigParamSpec{"propagate-muons", VariantType::Bool, false, {"Propagate muons to IP"}},
3557+
ConfigParamSpec{"store-all-mft-cov", VariantType::Bool, false, {"Store covariance matrices for all MFT tracks"}},
35273558
ConfigParamSpec{"thin-tracks", VariantType::Bool, false, {"Produce thinned track tables"}},
35283559
ConfigParamSpec{"trackqc-keepglobaltracks", VariantType::Bool, false, {"Always keep TrackQA for global tracks"}},
35293560
ConfigParamSpec{"trackqc-retainonlydedx", VariantType::Bool, false, {"Keep only dEdx information, zero out everything else"}},

Detectors/EMCAL/reconstruction/include/EMCALReconstruction/TRUDataHandler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include <array>
1515
#include <bitset>
16+
#include <climits>
1617
#include <cstdint>
1718
#include <exception>
1819
#include <iosfwd>

Detectors/ITSMFT/ITS/tracking/GPU/ITStrackingGPU/TimeFrameGPU.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace o2::its::gpu
2525
{
2626

2727
template <int NLayers>
28-
class TimeFrameGPU final : public TimeFrame<NLayers>
28+
class TimeFrameGPU : public TimeFrame<NLayers>
2929
{
3030
using typename TimeFrame<NLayers>::IndexTableUtilsN;
3131
using typename TimeFrame<NLayers>::ROFOverlapTableN;
@@ -35,7 +35,7 @@ class TimeFrameGPU final : public TimeFrame<NLayers>
3535

3636
public:
3737
TimeFrameGPU() = default;
38-
~TimeFrameGPU() final = default;
38+
~TimeFrameGPU() override = default;
3939

4040
/// Most relevant operations
4141
void pushMemoryStack(const int);
@@ -104,7 +104,7 @@ class TimeFrameGPU final : public TimeFrame<NLayers>
104104

105105
/// interface
106106
virtual bool isGPU() const noexcept final { return true; }
107-
virtual const char* getName() const noexcept { return "GPU"; }
107+
virtual const char* getName() const noexcept override final { return "GPU"; }
108108
IndexTableUtilsN* getDeviceIndexTableUtils() { return mIndexTableUtilsDevice; }
109109
const auto getDeviceROFOverlapTableView() { return mDeviceROFOverlapTableView; }
110110
const auto getDeviceROFVertexLookupTableView() { return mDeviceROFVertexLookupTableView; }

Detectors/ITSMFT/ITS/tracking/GPU/cuda/TimeFrameGPU.cu

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,4 +694,8 @@ void TimeFrameGPU<NLayers>::wipe()
694694
}
695695

696696
template class TimeFrameGPU<7>;
697+
// ALICE3 upgrade
698+
#ifdef ENABLE_UPGRADES
699+
template class TimeFrameGPU<11>;
700+
#endif
697701
} // namespace o2::its::gpu

Detectors/ITSMFT/ITS/tracking/GPU/cuda/TrackerTraitsGPU.cxx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,4 +388,7 @@ void TrackerTraitsGPU<NLayers>::setBz(float bz)
388388
}
389389

390390
template class TrackerTraitsGPU<7>;
391+
#ifdef ENABLE_UPGRADES
392+
template class TrackerTraitsGPU<11>;
393+
#endif
391394
} // namespace o2::its

0 commit comments

Comments
 (0)