1125{
1126 std::vector<int> v_dvtrk_id;
1127 std::vector<float> v_dvtrk_pt;
1128 std::vector<float> v_dvtrk_eta;
1129 std::vector<float> v_dvtrk_phi;
1130 std::vector<int> v_dvtrk_n_hits_inner;
1131 std::vector<int> v_dvtrk_n_hits_pix;
1132 std::vector<int> v_dvtrk_n_hits_sct;
1133 std::vector<float> v_dvtrk_a0beam;
1134 std::unordered_map<Identifier, int> umap_fittedTrack_identifier;
1135 int fittedTrack_id = -1;
1136
1137 static constexpr float TRKCUT_PTGEV_HITDV = 0.5;
1138
1139 for (const auto track: tracks) {
1140 float shift_x = 0; float shift_y = 0;
1142 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle {
m_beamSpotKey, ctx };
1144 }
1145 trackInfo theTrackInfo;
1146 bool igt =
FTF::isGoodTrackUTT(track, theTrackInfo, shift_x, shift_y, TRKCUT_PTGEV_HITDV);
1147 if (not igt) {continue;}
1148
1149 fittedTrack_id++;
1151
1152
1154 m =
track->measurementsOnTrack()->begin(),
1155 me =
track->measurementsOnTrack()->end ();
1156 for(;
m!=me; ++
m ) {
1157 const Trk::PrepRawData* prd = ((const Trk::RIO_OnTrack*)(*m))->prepRawData();
1158 if( prd == nullptr ) continue;
1159 Identifier id_prd = prd->
identify();
1160 if( umap_fittedTrack_identifier.find(id_prd) == umap_fittedTrack_identifier.end() ) {
1161 umap_fittedTrack_identifier.insert(std::make_pair(id_prd,fittedTrack_id));
1162 }
1163 }
1165 v_dvtrk_id.push_back(fittedTrack_id);
1166 v_dvtrk_pt.push_back(theTrackInfo.
ptGeV*Gaudi::Units::GeV);
1167 v_dvtrk_eta.push_back(theTrackInfo.
eta);
1168 v_dvtrk_phi.push_back(
phi);
1169 v_dvtrk_n_hits_inner.push_back(theTrackInfo.
n_hits_inner);
1170 v_dvtrk_n_hits_pix.push_back(theTrackInfo.
n_hits_pix);
1171 v_dvtrk_n_hits_sct.push_back(theTrackInfo.
n_hits_sct);
1172 v_dvtrk_a0beam.push_back(theTrackInfo.
a0beam);
1173 }
1174 ATH_MSG_DEBUG(
"Nr of selected tracks / all = " << fittedTrack_id <<
" / " << tracks.size());
1175 ATH_MSG_DEBUG(
"Nr of Identifiers used by selected tracks = " << umap_fittedTrack_identifier.size());
1176
1177
1178 int n_sp = 0;
1179 int n_sp_usedByTrk = 0;
1180
1181 std::unordered_map<Identifier, int> umap_sp_identifier;
1182 umap_sp_identifier.reserve(1.3*convertedSpacePoints.size());
1183
1184 auto add_to_sp_map = [&](const Trk::PrepRawData* prd) {
1185 if (prd) {
1186 Identifier id_prd = prd->
identify();
1187 if( umap_sp_identifier.find(id_prd) == umap_sp_identifier.end() ) {
1188 umap_sp_identifier.insert(std::make_pair(id_prd,-1));
1189 }
1190 }
1191 };
1192
1193 for(unsigned int iSp=0; iSp<convertedSpacePoints.size(); ++iSp) {
1194 bool isPix = convertedSpacePoints[iSp].isPixel();
1195 bool isSct = convertedSpacePoints[iSp].isSCT();
1196 if( ! isPix && ! isSct ) continue;
1197 const Trk::SpacePoint*
sp = convertedSpacePoints[iSp].offlineSpacePoint();
1198 add_to_sp_map(
sp->clusterList().first);
1199 add_to_sp_map(
sp->clusterList().second);
1200 }
1201 int n_id_usedByTrack = 0;
1202 for(auto it=umap_sp_identifier.begin(); it!=umap_sp_identifier.end(); ++it) {
1203 Identifier id_sp =
it->first;
1204 if( umap_fittedTrack_identifier.find(id_sp) != umap_fittedTrack_identifier.end() ) {
1205 umap_sp_identifier[id_sp] = umap_fittedTrack_identifier[id_sp];
1206 ++n_id_usedByTrack;
1207 }
1208 }
1209 ATH_MSG_DEBUG(
"Nr of SPs / Identifiers (all) / Identifiers (usedByTrack) = " << convertedSpacePoints.size() <<
" / " << umap_sp_identifier.size() <<
" / " << n_id_usedByTrack);
1210
1211 auto sp_map_used_id = [&](const Trk::PrepRawData* prd) {
1212 int usedTrack_id = -1;
1213 if (prd) {
1214 Identifier id_prd = prd->
identify();
1215 if( umap_sp_identifier.find(id_prd) != umap_sp_identifier.end() ) {
1216 usedTrack_id = umap_sp_identifier[id_prd];
1217 }
1218 }
1219 return usedTrack_id;
1220 };
1221
1222 std::vector<float> v_sp_eta;
1223 v_sp_eta.reserve(convertedSpacePoints.size());
1224 std::vector<float> v_sp_r;
1225 v_sp_r.reserve(convertedSpacePoints.size());
1226 std::vector<float> v_sp_phi;
1227 v_sp_phi.reserve(convertedSpacePoints.size());
1228 std::vector<int> v_sp_layer;
1229 v_sp_layer.reserve(convertedSpacePoints.size());
1230 std::vector<bool> v_sp_isPix;
1231 v_sp_isPix.reserve(convertedSpacePoints.size());
1232 std::vector<bool> v_sp_isSct;
1233 v_sp_isSct.reserve(convertedSpacePoints.size());
1234 std::vector<int> v_sp_usedTrkId;
1235 v_sp_usedTrkId.reserve(convertedSpacePoints.size());
1236
1237 for(
const auto&
sp : convertedSpacePoints) {
1239 bool isSct =
sp.isSCT();
1240 if( ! isPix && ! isSct ) continue;
1241 const Trk::SpacePoint* osp =
sp.offlineSpacePoint();
1242
1243 int usedTrack_id = -1;
1244 int usedTrack_id_first = sp_map_used_id(osp->
clusterList().first);
1245 if (usedTrack_id_first != -1) {
1246 usedTrack_id = usedTrack_id_first;
1247 }
1248 int usedTrack_id_second = sp_map_used_id(osp->
clusterList().second);
1249 if (usedTrack_id_second != -1) {
1250 usedTrack_id = usedTrack_id_second;
1251 }
1252
1253
1254 n_sp++;
1255 if( usedTrack_id != -1 ) n_sp_usedByTrk++;
1257 float sp_r =
sp.r();
1258
1260 float sp_eta = pos_sp.eta();
1261 float sp_phi = pos_sp.phi();
1262
1263 v_sp_eta.push_back(sp_eta);
1264 v_sp_r.push_back(sp_r);
1265 v_sp_phi.push_back(sp_phi);
1266 v_sp_layer.push_back(layer);
1267 v_sp_isPix.push_back(isPix);
1268 v_sp_isSct.push_back(isSct);
1269 v_sp_usedTrkId.push_back(usedTrack_id);
1270
1271 ATH_MSG_VERBOSE(
"+++ SP eta / phi / layer / ixPix / usedTrack_id = " << sp_eta <<
" / " << sp_phi <<
" / " << layer <<
" / " << isPix <<
" / " << usedTrack_id);
1272
1273 }
1274 ATH_MSG_DEBUG(
"Nr of SPs / all = " << n_sp <<
" / " << convertedSpacePoints.size());
1275 ATH_MSG_DEBUG(
"Nr of SPs used by selected tracks = " << n_sp_usedByTrk);
1276
1277
1278 std::vector<float> v_seeds_eta;
1279 std::vector<float> v_seeds_phi;
1280 std::vector<int16_t> v_seeds_type;
1281
1283
1284
1285 const unsigned int L1JET_ET_CUT = 27;
1286
1288 const DataVector<xAOD::jFexSRJetRoI> *jetRoiCollection = jetRoiCollectionHandle.cptr();
1289 if (!jetRoiCollectionHandle.isValid()){
1291 return StatusCode::FAILURE;
1292 }
1295 if( jetRoI == nullptr ) continue;
1296
1297 if( jetRoI->
et() >= L1JET_ET_CUT ) {
1298 v_seeds_eta.push_back(jetRoI->
eta());
1299 v_seeds_phi.push_back(jetRoI->
phi());
1300 v_seeds_type.push_back(0);
1301 }
1302 }
1303 ATH_MSG_DEBUG(
"Nr of L1_J" << L1JET_ET_CUT <<
" seeds = " << v_seeds_eta.size());
1304
1305
1306 std::vector<float> v_spseeds_eta;
1307 std::vector<float> v_spseeds_phi;
1308 ATH_CHECK(
findSPSeeds(ctx, v_sp_eta, v_sp_phi, v_sp_layer, v_sp_usedTrkId, v_spseeds_eta, v_spseeds_phi) );
1310 for(
size_t idx=0;
idx<v_spseeds_eta.size(); ++
idx) {
1311 v_seeds_eta.push_back(v_spseeds_eta[idx]);
1312 v_seeds_phi.push_back(v_spseeds_phi[idx]);
1313 v_seeds_type.push_back(1);
1314 }
1315 ATH_MSG_DEBUG(
"Nr of SP + L1_J" << L1JET_ET_CUT <<
" seeds = " << v_seeds_eta.size());
1316 }
1317
1318
1319
1320
1321 const int N_MAX_SEEDS = 200;
1322 int n_seeds = std::min(N_MAX_SEEDS,(int)v_seeds_eta.size());
1323 hitDVSeedsContainer.reserve(n_seeds);
1324 for(auto iSeed=0; iSeed < n_seeds; ++iSeed) {
1326 seed.eta = v_seeds_eta[iSeed];
1327 seed.phi = v_seeds_phi[iSeed];
1328 seed.type = v_seeds_type[iSeed];
1329 hitDVSeedsContainer.push_back(seed);
1330 }
1331
1332
1333 const float TRKCUT_DELTA_R_TO_SEED = 1.0;
1334 hitDVTrksContainer.reserve(v_dvtrk_pt.size());
1335 for(unsigned int iTrk=0; iTrk<v_dvtrk_pt.size(); ++iTrk) {
1336 float trk_eta = v_dvtrk_eta[iTrk];
1337 float trk_phi = v_dvtrk_phi[iTrk];
1339 bool isNearSeed = false;
1340 for (unsigned int iSeed=0; iSeed<v_seeds_eta.size(); ++iSeed) {
1341 float seed_eta = v_seeds_eta[iSeed];
1342 float seed_phi = v_seeds_phi[iSeed];
1343 float dR2 =
deltaR2(trk_eta,trk_phi,seed_eta,seed_phi);
1344 if( dR2 <= TRKCUT_DELTA_R_TO_SEED*TRKCUT_DELTA_R_TO_SEED ) { isNearSeed = true; break; }
1345 }
1346 if( ! isNearSeed ) continue;
1347 }
1348 HitDVTrk hitDVTrk;
1349 hitDVTrk.
id = v_dvtrk_id[iTrk];
1350 hitDVTrk.
pt = v_dvtrk_pt[iTrk];
1351 hitDVTrk.
eta = v_dvtrk_eta[iTrk];
1352 hitDVTrk.
phi = v_dvtrk_phi[iTrk];
1354 hitDVTrk.
n_hits_pix = v_dvtrk_n_hits_pix[iTrk];
1355 hitDVTrk.
n_hits_sct = v_dvtrk_n_hits_sct[iTrk];
1356 hitDVTrk.
a0beam = v_dvtrk_a0beam[iTrk];
1357
1358 hitDVTrksContainer.push_back(hitDVTrk);
1359 }
1360
1361
1362 const float SPCUT_DELTA_R_TO_SEED = 1.0;
1363 const size_t n_sp_max = std::min<size_t>(100000, v_sp_eta.size());
1364 size_t n_sp_stored = 0;
1365
1366 hitDVSPsContainer.reserve(n_sp_max);
1367
1368 for(size_t iSp=0; iSp<v_sp_eta.size(); ++iSp) {
1370 const float sp_eta = v_sp_eta[iSp];
1371 const float sp_phi = v_sp_phi[iSp];
1372 bool isNearSeed = false;
1373 for (size_t iSeed=0; iSeed<v_seeds_eta.size(); ++iSeed) {
1374 const float seed_eta = v_seeds_eta[iSeed];
1375 const float seed_phi = v_seeds_phi[iSeed];
1376 const float dR2 =
deltaR2(sp_eta, sp_phi, seed_eta, seed_phi);
1377 if( dR2 <= SPCUT_DELTA_R_TO_SEED*SPCUT_DELTA_R_TO_SEED ) { isNearSeed = true; break; }
1378 }
1379 if( ! isNearSeed ) continue;
1380 }
1381 if( n_sp_stored >= n_sp_max ) break;
1382 HitDVSpacePoint hitDVSP;
1383 hitDVSP.
eta = v_sp_eta[iSp];
1384 hitDVSP.
r = v_sp_r[iSp];
1385 hitDVSP.
phi = v_sp_phi[iSp];
1386 hitDVSP.
layer = v_sp_layer[iSp];
1387 hitDVSP.
isPix = v_sp_isPix[iSp];
1388 hitDVSP.
isSct = v_sp_isSct[iSp];
1389 hitDVSP.
usedTrkId = v_sp_usedTrkId[iSp];
1390 hitDVSPsContainer.push_back(hitDVSP);
1391 ++n_sp_stored;
1392 }
1394
1395 return StatusCode::SUCCESS;
1396}
Scalar phi() const
phi method
size_t size() const
Number of registered mappings.
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
const T * at(size_type n) const
Access an element, as an rvalue.
SG::ReadHandleKey< xAOD::jFexSRJetRoIContainer > m_jetRoiCollectionKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Identifier identify() const
return the identifier
const std::pair< const PrepRawData *, const PrepRawData * > & clusterList() const
return the pair of cluster pointers by reference
virtual const Amg::Vector3D & globalPosition() const override final
Interface method to get the global Position.
unsigned int et() const
Methods that require combining results or applying scales.
Eigen::Matrix< double, 3, 1 > Vector3D
void getBeamSpotShift(float &shift_x, float &shift_y, const InDet::BeamSpotData &beamSpotHandle)
bool isGoodTrackUTT(const Trk::Track *track, trackInfo &theTrackInfo, const float shift_x, const float shift_y, float trkcut_ptgev)
jFexSRJetRoI_v1 jFexSRJetRoI
Define the latest version of the jFexSRJetRoI class.