File indexing completed on 2024-04-06 12:20:59
0001 #include "L1Trigger/L1TMuonEndCap/interface/SectorProcessor.h"
0002
0003 SectorProcessor::SectorProcessor() {}
0004
0005 SectorProcessor::~SectorProcessor() {}
0006
0007 void SectorProcessor::configure(const EMTFSetup* setup, int verbose, int endcap, int sector) {
0008 emtf_assert(setup != nullptr);
0009 emtf_assert(emtf::MIN_ENDCAP <= endcap && endcap <= emtf::MAX_ENDCAP);
0010 emtf_assert(emtf::MIN_TRIGSECTOR <= sector && sector <= emtf::MAX_TRIGSECTOR);
0011
0012 setup_ = setup;
0013 verbose_ = verbose;
0014 endcap_ = endcap;
0015 sector_ = sector;
0016 }
0017
0018 void SectorProcessor::process(const edm::EventID& event_id,
0019 const TriggerPrimitiveCollection& muon_primitives,
0020 EMTFHitCollection& out_hits,
0021 EMTFTrackCollection& out_tracks) const {
0022 auto cfg = setup_->getVersionControl();
0023
0024
0025
0026 std::deque<EMTFHitCollection> extended_conv_hits;
0027
0028
0029 std::deque<EMTFTrackCollection> extended_best_track_cands;
0030
0031
0032 std::map<pattern_ref_t, int> patt_lifetime_map;
0033
0034
0035
0036
0037 int delayBX = cfg.bxWindow_ - 1;
0038
0039 for (int bx = cfg.minBX_; bx <= cfg.maxBX_ + delayBX; ++bx) {
0040 if (verbose_ > 0) {
0041 std::cout << "Event: " << event_id << " Endcap: " << endcap_ << " Sector: " << sector_ << " BX: " << bx
0042 << std::endl;
0043 }
0044
0045 process_single_bx(
0046 bx, muon_primitives, out_hits, out_tracks, extended_conv_hits, extended_best_track_cands, patt_lifetime_map);
0047
0048
0049 if (bx >= cfg.minBX_ + delayBX) {
0050 extended_conv_hits.pop_front();
0051
0052 int n = emtf::zone_array<int>().size();
0053 extended_best_track_cands.erase(extended_best_track_cands.end() - n,
0054 extended_best_track_cands.end());
0055 }
0056 }
0057
0058 return;
0059 }
0060
0061 void SectorProcessor::process_single_bx(int bx,
0062 const TriggerPrimitiveCollection& muon_primitives,
0063 EMTFHitCollection& out_hits,
0064 EMTFTrackCollection& out_tracks,
0065 std::deque<EMTFHitCollection>& extended_conv_hits,
0066 std::deque<EMTFTrackCollection>& extended_best_track_cands,
0067 std::map<pattern_ref_t, int>& patt_lifetime_map) const {
0068 auto cfg = setup_->getVersionControl();
0069
0070 auto tp_geom_ = &(setup_->getGeometryTranslator());
0071 auto pc_lut_ = &(setup_->getSectorProcessorLUT());
0072 auto pt_assign_engine_ = setup_->getPtAssignmentEngine();
0073 auto pt_assign_engine_dxy_ = setup_->getPtAssignmentEngineDxy();
0074
0075
0076
0077
0078 PrimitiveSelection prim_sel;
0079 prim_sel.configure(verbose_,
0080 endcap_,
0081 sector_,
0082 bx,
0083 cfg.bxShiftCSC_,
0084 cfg.bxShiftRPC_,
0085 cfg.bxShiftGEM_,
0086 cfg.bxShiftME0_,
0087 cfg.includeNeighbor_,
0088 cfg.duplicateTheta_,
0089 cfg.bugME11Dupes_,
0090 cfg.useRun3CCLUT_OTMB_,
0091 cfg.useRun3CCLUT_TMB_);
0092
0093 PrimitiveConversion prim_conv;
0094 prim_conv.configure(tp_geom_,
0095 pc_lut_,
0096 verbose_,
0097 endcap_,
0098 sector_,
0099 bx,
0100 cfg.bxShiftCSC_,
0101 cfg.bxShiftRPC_,
0102 cfg.bxShiftGEM_,
0103 cfg.bxShiftME0_,
0104 cfg.zoneBoundaries_,
0105 cfg.zoneOverlap_,
0106 cfg.duplicateTheta_,
0107 cfg.fixZonePhi_,
0108 cfg.useNewZones_,
0109 cfg.fixME11Edges_,
0110 cfg.bugME11Dupes_,
0111 cfg.useRun3CCLUT_OTMB_,
0112 cfg.useRun3CCLUT_TMB_);
0113
0114 PatternRecognition patt_recog;
0115 patt_recog.configure(verbose_,
0116 endcap_,
0117 sector_,
0118 bx,
0119 cfg.bxWindow_,
0120 cfg.pattDefinitions_,
0121 cfg.symPattDefinitions_,
0122 cfg.useSymPatterns_,
0123 cfg.maxRoadsPerZone_,
0124 cfg.useSecondEarliest_);
0125
0126 PrimitiveMatching prim_match;
0127 prim_match.configure(
0128 verbose_, endcap_, sector_, bx, cfg.fixZonePhi_, cfg.useNewZones_, cfg.bugSt2PhDiff_, cfg.bugME11Dupes_);
0129
0130 AngleCalculation angle_calc;
0131 angle_calc.configure(verbose_,
0132 endcap_,
0133 sector_,
0134 bx,
0135 cfg.bxWindow_,
0136 cfg.thetaWindow_,
0137 cfg.thetaWindowZone0_,
0138 cfg.bugME11Dupes_,
0139 cfg.bugAmbigThetaWin_,
0140 cfg.twoStationSameBX_);
0141
0142 BestTrackSelection btrack_sel;
0143 btrack_sel.configure(verbose_,
0144 endcap_,
0145 sector_,
0146 bx,
0147 cfg.bxWindow_,
0148 cfg.maxRoadsPerZone_,
0149 cfg.maxTracks_,
0150 cfg.useSecondEarliest_,
0151 cfg.bugSameSectorPt0_);
0152
0153 SingleHitTrack single_hit;
0154 single_hit.configure(verbose_, endcap_, sector_, bx, cfg.maxTracks_, cfg.useSingleHits_);
0155
0156 PtAssignment pt_assign;
0157 pt_assign.configure(pt_assign_engine_,
0158 pt_assign_engine_dxy_,
0159 verbose_,
0160 endcap_,
0161 sector_,
0162 bx,
0163 cfg.readPtLUTFile_,
0164 cfg.fixMode15HighPt_,
0165 cfg.bug9BitDPhi_,
0166 cfg.bugMode7CLCT_,
0167 cfg.bugNegPt_,
0168 cfg.bugGMTPhi_,
0169 cfg.promoteMode7_,
0170 cfg.modeQualVer_,
0171 cfg.pbFileName_);
0172
0173 std::map<int, TriggerPrimitiveCollection> selected_dt_map;
0174 std::map<int, TriggerPrimitiveCollection> selected_csc_map;
0175 std::map<int, TriggerPrimitiveCollection> selected_rpc_map;
0176 std::map<int, TriggerPrimitiveCollection> selected_gem_map;
0177 std::map<int, TriggerPrimitiveCollection> selected_me0_map;
0178 std::map<int, TriggerPrimitiveCollection> selected_prim_map;
0179 std::map<int, TriggerPrimitiveCollection> inclusive_selected_prim_map;
0180
0181 EMTFHitCollection conv_hits;
0182 EMTFHitCollection inclusive_conv_hits;
0183
0184 emtf::zone_array<EMTFRoadCollection> zone_roads;
0185
0186 emtf::zone_array<EMTFTrackCollection> zone_tracks;
0187
0188 EMTFTrackCollection best_tracks;
0189
0190
0191
0192
0193
0194
0195
0196
0197 prim_sel.process(emtf::DTTag(), muon_primitives, selected_dt_map);
0198 prim_sel.process(emtf::CSCTag(), muon_primitives, selected_csc_map);
0199 prim_sel.process(emtf::RPCTag(), muon_primitives, selected_rpc_map);
0200 prim_sel.process(emtf::GEMTag(), muon_primitives, selected_gem_map);
0201 prim_sel.process(emtf::ME0Tag(), muon_primitives, selected_me0_map);
0202 prim_sel.merge(
0203 selected_dt_map, selected_csc_map, selected_rpc_map, selected_gem_map, selected_me0_map, selected_prim_map);
0204
0205
0206
0207
0208 prim_conv.process(selected_prim_map, conv_hits);
0209 extended_conv_hits.push_back(conv_hits);
0210
0211 {
0212
0213
0214 prim_sel.merge_no_truncate(selected_dt_map,
0215 selected_csc_map,
0216 selected_rpc_map,
0217 selected_gem_map,
0218 selected_me0_map,
0219 inclusive_selected_prim_map);
0220 prim_conv.process(inclusive_selected_prim_map, inclusive_conv_hits);
0221
0222
0223 selected_dt_map.clear();
0224 selected_csc_map.clear();
0225 selected_rpc_map.clear();
0226 selected_gem_map.clear();
0227 selected_me0_map.clear();
0228 }
0229
0230
0231
0232 patt_recog.process(extended_conv_hits, patt_lifetime_map, zone_roads);
0233
0234
0235
0236 prim_match.process(extended_conv_hits, zone_roads, zone_tracks);
0237
0238
0239
0240 angle_calc.process(zone_tracks);
0241 extended_best_track_cands.insert(
0242 extended_best_track_cands.begin(), zone_tracks.begin(), zone_tracks.end());
0243
0244
0245
0246 btrack_sel.process(extended_best_track_cands, best_tracks);
0247
0248
0249
0250 single_hit.process(conv_hits, best_tracks);
0251
0252
0253
0254 pt_assign.process(best_tracks);
0255
0256
0257
0258
0259 out_hits.insert(out_hits.end(), inclusive_conv_hits.begin(), inclusive_conv_hits.end());
0260 out_tracks.insert(out_tracks.end(), best_tracks.begin(), best_tracks.end());
0261
0262 return;
0263 }