|
29 | 29 | #include "CommonDataFormat/IRFrame.h" |
30 | 30 | #include "DetectorsBase/GRPGeomHelper.h" |
31 | 31 | #include "ITStracking/BoundedAllocator.h" |
32 | | -#include "DetectorsRaw/HBFUtils.h" |
33 | 32 | #include "Framework/InputRecordWalker.h" |
34 | 33 | #include "Framework/DataRefUtils.h" |
35 | 34 | #include "Framework/DeviceSpec.h" |
@@ -83,30 +82,35 @@ void ITSTrackingInterface::initialise() |
83 | 82 | mFilter.emplace_back("itsmclabels", "ITS", "CLUSTERSMCTR", iLayer, Lifetime::Timeframe); |
84 | 83 | } |
85 | 84 | } |
86 | | - |
87 | | - // prepare rof lookup table(s) |
88 | | - const int nOrbitsPerTF = raw::HBFUtils::Instance().getNOrbitsPerTF(); |
89 | | - TimeFrameN::ROFOverlapTableN rofTable; |
90 | | - TimeFrameN::ROFVertexLookupTableN vtxTable; |
91 | | - TimeFrameN::ROFTimeSliceTableN sliceTable; |
92 | | - // can use DPL param since call to ccdb has been made |
93 | | - const auto& par = o2::itsmft::DPLAlpideParam<o2::detectors::DetID::ITS>::Instance(); |
94 | | - for (int iLayer = 0; iLayer < NLayers; ++iLayer) { |
95 | | - const int nROFsPerOrbit = o2::constants::lhc::LHCMaxBunches / par.getROFLengthInBC(iLayer); |
96 | | - rofTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]); |
97 | | - vtxTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]); |
98 | | - sliceTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]); |
99 | | - } |
100 | | - rofTable.init(); |
101 | | - mTimeFrame->setROFOverlapTable(rofTable); |
102 | | - vtxTable.init(); |
103 | | - mTimeFrame->setROFVertexLookupTable(vtxTable); |
104 | | - sliceTable.init(trackParams[0].NTimeSlices); |
105 | | - mTimeFrame->setROFTimeSliceTable(sliceTable); |
106 | 85 | } |
107 | 86 |
|
108 | 87 | void ITSTrackingInterface::run(framework::ProcessingContext& pc) |
109 | 88 | { |
| 89 | + if (static bool doneOnce{false}; !doneOnce) { |
| 90 | + doneOnce = true; |
| 91 | + |
| 92 | + // prepare rof lookup table(s) |
| 93 | + // has to be done here to ensure we get the right number of HB per TF |
| 94 | + const int nOrbitsPerTF = o2::base::GRPGeomHelper::getNHBFPerTF(); |
| 95 | + TimeFrameN::ROFOverlapTableN rofTable; |
| 96 | + TimeFrameN::ROFVertexLookupTableN vtxTable; |
| 97 | + TimeFrameN::ROFTimeSliceTableN sliceTable; |
| 98 | + const auto& par = o2::itsmft::DPLAlpideParam<o2::detectors::DetID::ITS>::Instance(); |
| 99 | + const auto& trackParams = mTracker->getParameters(); |
| 100 | + for (int iLayer = 0; iLayer < NLayers; ++iLayer) { |
| 101 | + const int nROFsPerOrbit = o2::constants::lhc::LHCMaxBunches / par.getROFLengthInBC(iLayer); |
| 102 | + rofTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]); |
| 103 | + vtxTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]); |
| 104 | + sliceTable.defineLayer(iLayer, nOrbitsPerTF * nROFsPerOrbit, par.getROFLengthInBC(iLayer), par.getROFDelayInBC(iLayer), trackParams[0].DeltaROF[iLayer]); |
| 105 | + } |
| 106 | + rofTable.init(); |
| 107 | + mTimeFrame->setROFOverlapTable(rofTable); |
| 108 | + vtxTable.init(); |
| 109 | + mTimeFrame->setROFVertexLookupTable(vtxTable); |
| 110 | + sliceTable.init(trackParams[0].NTimeSlices); |
| 111 | + mTimeFrame->setROFTimeSliceTable(sliceTable); |
| 112 | + } |
| 113 | + |
110 | 114 | std::array<gsl::span<const itsmft::CompClusterExt>, NLayers> compClusters; |
111 | 115 | std::array<gsl::span<const unsigned char>, NLayers> patterns; |
112 | 116 | std::array<gsl::span<const itsmft::ROFRecord>, NLayers> rofsinput; |
|
0 commit comments