@@ -44,7 +44,7 @@ void ClustererDPL::init(InitContext& ic)
4444 mClusterer ->setNChips (its3::constants::detID::nChips + itsmft::ChipMappingITS::getNChips (itsmft::ChipMappingITS::MB ) + itsmft::ChipMappingITS::getNChips (itsmft::ChipMappingITS::OB ));
4545
4646 // prepare data filter
47- for (int iLayer = 0 ; iLayer < NLayers; ++iLayer) {
47+ for (int iLayer = 0 ; iLayer < ( mDoStaggering ? NLayers : 1 ) ; ++iLayer) {
4848 mFilter .emplace_back (" digits" , " IT3" , " DIGITS" , iLayer, Lifetime::Timeframe);
4949 mFilter .emplace_back (" ROframe" , " IT3" , " DIGITSROF" , iLayer, Lifetime::Timeframe);
5050 if (mUseMC ) {
@@ -82,18 +82,20 @@ void ClustererDPL::run(ProcessingContext& pc)
8282 uint64_t nClusters{0 };
8383 TStopwatch sw;
8484 o2::itsmft::DigitPixelReader reader;
85- for (uint32_t iLayer{0 }; iLayer < NLayers; ++iLayer) {
85+ for (uint32_t iLayer{0 }; iLayer < (mDoStaggering ? NLayers : 1 ); ++iLayer) {
86+ int layer = (mDoStaggering ) ? iLayer : -1 ;
8687 sw.Start ();
8788 LOG (info) << " IT3Clusterer on layer " << iLayer << " pulled " << digits[iLayer].size () << " digits, in " << rofs[iLayer].size () << " RO frames" ;
88- mClusterer ->setMaxROFDepthToSquash (mClusterer ->getMaxROFDepthToSquash (iLayer));
89+ LOG (info) << " IT3Clusterer" << ((mDoStaggering ) ? std::format (" on layer {}" , layer) : " " ) << " pulled " << digits[iLayer].size () << " digits, in " << rofs[iLayer].size () << " RO frames" ;
90+ mClusterer ->setMaxROFDepthToSquash (mClusterer ->getMaxROFDepthToSquash (layer));
8991 o2::dataformats::ConstMCTruthContainerView<o2::MCCompLabel> labels (labelsbuffer[iLayer]);
90- reader.setSquashingDepth (mClusterer ->getMaxROFDepthToSquash (iLayer ));
92+ reader.setSquashingDepth (mClusterer ->getMaxROFDepthToSquash (layer ));
9193 reader.setSquashingDist (mClusterer ->getMaxRowColDiffToMask ()); // Sharing same parameter/logic with masking
92- reader.setMaxBCSeparationToSquash (mClusterer ->getMaxBCSeparationToSquash (iLayer ));
94+ reader.setMaxBCSeparationToSquash (mClusterer ->getMaxBCSeparationToSquash (layer ));
9395 reader.setDigits (digits[iLayer]);
9496 reader.setROFRecords (rofs[iLayer]);
9597 if (mUseMC ) {
96- LOG (info) << " IT3Clusterer on layer " << iLayer << " pulled " << labels.getNElements () << " labels " ;
98+ LOG (info) << " IT3Clusterer" << (( mDoStaggering ) ? std::format ( " on layer {} " , layer) : " " ) << " pulled " << labels.getNElements () << " labels " ;
9799 reader.setDigitsMCTruth (labels.getIndexedSize () > 0 ? &labels : nullptr );
98100 }
99101 reader.init ();
@@ -128,18 +130,18 @@ void ClustererDPL::run(ProcessingContext& pc)
128130 for (const auto & rof : clusROFVec) {
129131 const auto & ir = rof.getBCData ();
130132 if (ir < firstIR) {
131- LOGP (warn, " Discard ROF {} preceding TF 1st orbit {} on layer {}" , ir.asString (), firstTForbit, iLayer );
133+ LOGP (warn, " Discard ROF {} preceding TF 1st orbit {}{}" , ir.asString (), firstTForbit, (( mDoStaggering ) ? std::format ( " on layer {} " , layer) : " " ) );
132134 continue ;
133135 }
134136 auto irToFirst = ir - firstIR;
135137 if (irToFirst.toLong () - par.getROFDelayInBC (iLayer) < 0 ) {
136- LOGP (warn, " Discard ROF {} preceding TF 1st orbit {} due to imposed ROF delay on layer {}" , ir.asString (), firstTForbit, iLayer);
138+ LOGP (warn, " Discard ROF {} preceding TF 1st orbit {} due to imposed ROF delay{}" , ir.asString (), firstTForbit, (( mDoStaggering ) ? std::format ( " on layer {} " , iLayer) : " " ) );
137139 continue ;
138140 }
139141 irToFirst -= par.getROFDelayInBC (iLayer);
140142 const long irROF = irToFirst.toLong () / par.getROFLengthInBC (iLayer);
141143 if (irROF >= nROFsTF) {
142- LOGP (warn, " Discard ROF {} exceeding TF orbit range on layer {}" , ir.asString (), iLayer );
144+ LOGP (warn, " Discard ROF {} exceeding TF orbit range{}" , ir.asString (), (( mDoStaggering ) ? std::format ( " on layer {} " , layer) : " " ) );
143145 continue ;
144146 }
145147 auto & expROF = expClusRofVec[irROF];
@@ -148,11 +150,11 @@ void ClustererDPL::run(ProcessingContext& pc)
148150 expROF.setNEntries (rof.getNEntries ());
149151 } else {
150152 if (expROF.getNEntries () < rof.getNEntries ()) {
151- LOGP (warn, " Repeating {} with {} clusters, prefer to already processed instance with {} clusters on layer {}" , rof.asString (), rof.getNEntries (), expROF.getNEntries (), iLayer );
153+ LOGP (warn, " Repeating {} with {} clusters, prefer to already processed instance with {} clusters{}" , rof.asString (), rof.getNEntries (), expROF.getNEntries (), (( mDoStaggering ) ? std::format ( " on layer {} " , layer) : " " ) );
152154 expROF.setFirstEntry (rof.getFirstEntry ());
153155 expROF.setNEntries (rof.getNEntries ());
154156 } else {
155- LOGP (warn, " Repeating {} with {} clusters, discard preferring already processed instance with {} clusters on layer {}" , rof.asString (), rof.getNEntries (), expROF.getNEntries (), iLayer );
157+ LOGP (warn, " Repeating {} with {} clusters, discard preferring already processed instance with {} clusters{}" , rof.asString (), rof.getNEntries (), expROF.getNEntries (), (( mDoStaggering ) ? std::format ( " on layer {} " , layer) : " " ) );
156158 }
157159 }
158160 }
@@ -257,11 +259,11 @@ void ClustererDPL::endOfStream(o2::framework::EndOfStreamContext& /*ec*/)
257259 mClusterer ->print ();
258260}
259261
260- DataProcessorSpec getClustererSpec (bool useMC)
262+ DataProcessorSpec getClustererSpec (bool useMC, bool doStag )
261263{
262264 std::vector<InputSpec> inputs;
263265 std::vector<OutputSpec> outputs;
264- for (uint32_t iLayer = 0 ; iLayer < ClustererDPL::NLayers; ++iLayer) {
266+ for (uint32_t iLayer = 0 ; iLayer < (doStag ? ClustererDPL::NLayers : 1 ) ; ++iLayer) {
265267 inputs.emplace_back (" digits" , " IT3" , " DIGITS" , iLayer, Lifetime::Timeframe);
266268 inputs.emplace_back (" ROframes" , " IT3" , " DIGITSROF" , iLayer, Lifetime::Timeframe);
267269 outputs.emplace_back (" ITS" , " COMPCLUSTERS" , iLayer, Lifetime::Timeframe);
@@ -288,7 +290,7 @@ DataProcessorSpec getClustererSpec(bool useMC)
288290 .name = " its3-clusterer" ,
289291 .inputs = inputs,
290292 .outputs = outputs,
291- .algorithm = AlgorithmSpec{adaptFromTask<ClustererDPL>(ggRequest, useMC)},
293+ .algorithm = AlgorithmSpec{adaptFromTask<ClustererDPL>(ggRequest, useMC, doStag )},
292294 .options = Options{
293295 {" ignore-cluster-dictionary" , VariantType::Bool, false , {" do not use cluster dictionary, always store explicit patterns" }},
294296 {" nthreads" , VariantType::Int, 1 , {" Number of clustering threads" }}}};
0 commit comments