169 m_chrono->chronoStart(
"FPGAOutputValidationAlg::pixel diff");
178 const auto& pixelClusters0 = *handle0;
179 std::unordered_multimap<xAOD::DetectorIDHashType, const xAOD::PixelCluster*> pixelClustersHashIdMap0;
180 for (
const auto* cluster0 : pixelClusters0) {
182 pixelClustersHashIdMap0.insert(std::make_pair(hashId0, cluster0));
184 const std::vector<ClusterPair<xAOD::PixelCluster>> pixelClusterPairsWithCommonRdos = findNonMergedClusters(pixelClustersHashIdMap0);
185 if (pixelClusterPairsWithCommonRdos.size() > 0) {
186 std::stringstream
ss;
187 for (
const auto&
pair : pixelClusterPairsWithCommonRdos) {
188 ss <<
"Found " <<
pair.commonRDOs <<
" common RDOs between clusters with hash "
189 <<
pair.clusters.first->identifierHash() <<
": "
190 <<
pair.clusters.first->identifier() <<
" and "
191 <<
pair.clusters.second->identifier() <<
"\n";
198 std::unordered_multimap<xAOD::DetectorIdentType, const xAOD::PixelCluster*> pixelClustersMap1;
199 std::unordered_multimap<xAOD::DetectorIDHashType, const xAOD::PixelCluster*> pixelClustersHashIdMap1;
200 for (
const auto* cluster1 : pixelClusters1) {
203 pixelClustersMap1.insert(std::make_pair(id1, cluster1));
204 pixelClustersHashIdMap1.insert(std::make_pair(hashId1, cluster1));
207 for (
auto cluster0 : *handle0) {
208 const std::vector<const xAOD::PixelCluster*> matchedClusters = findMatchingCluster(cluster0, pixelClustersMap1, pixelClustersHashIdMap1,
212 if (matchedClusters.size() == 0) {
213 std::vector<std::string>
regions {
"all"};
215 else regions.push_back(
"endcap");
216 for (
const auto& region :
regions) {
220 Monitored::Scalar<float>(handle0.
key() +
"_UNMATCHED_GLOBALPOSITION_R_" + region, sqrt(cluster0->globalPosition()[0]*cluster0->globalPosition()[0] +
221 cluster0->globalPosition()[1]*cluster0->globalPosition()[1])),
227 if (matchedClusters.size() > 1) {
229 return StatusCode::FAILURE;
234 std::vector<std::string>
regions {
"all"};
236 else regions.push_back(
"endcap");
238 for(
auto const& region:
regions)
264 cluster0->localPosition<2>()[0] - cluster1->
localPosition<2>()[0]),
266 cluster0->localPosition<2>()[1] - cluster1->
localPosition<2>()[1]),
268 cluster0->localCovariance<2>()(0, 0) - cluster1->
localCovariance<2>()(0, 0)),
270 cluster0->localCovariance<2>()(1, 1) - cluster1->
localCovariance<2>()(1, 1)),
282 m_chrono->chronoStop(
"FPGAOutputValidationAlg::pixel diff");
286 m_chrono->chronoStart(
"FPGAOutputValidationAlg::strip diff");
296 std::unordered_multimap<xAOD::DetectorIDHashType, const xAOD::StripCluster*> stripClustersHashIdMap0;
297 for (
const auto* cluster0 : stripClusters0) {
299 stripClustersHashIdMap0.insert(std::make_pair(hashId0, cluster0));
303 const std::vector<ClusterPair<xAOD::StripCluster>> stripPairsWithCommonRdos = findNonMergedClusters(stripClustersHashIdMap0);
306 if (stripPairsWithCommonRdos.size() > 0) {
307 std::stringstream
ss;
308 for (
const auto&
pair : stripPairsWithCommonRdos) {
309 ss <<
"Found " <<
pair.commonRDOs <<
" common RDOs between clusters with hash "
310 <<
pair.clusters.first->identifierHash() <<
": "
311 <<
pair.clusters.first->identifier() <<
" and "
312 <<
pair.clusters.second->identifier() <<
"\n";
318 std::unordered_multimap<xAOD::DetectorIdentType, const xAOD::StripCluster*> stripClustersMap1;
319 std::unordered_multimap<xAOD::DetectorIDHashType, const xAOD::StripCluster*> stripClustersHashIdMap1;
320 for (
const auto *cluster1 : stripClusters1) {
323 stripClustersMap1.insert(std::make_pair(id1, cluster1));
324 stripClustersHashIdMap1.insert(std::make_pair(hashId1, cluster1));
328 for (
auto cluster0 : *handle0) {
329 const std::vector<const xAOD::StripCluster*> matchedClusters = findMatchingCluster(cluster0, stripClustersMap1, stripClustersHashIdMap1,
333 if (matchedClusters.size() == 0 && handle1->size() > 0) {
334 std::vector<std::string>
regions {
"all"};
336 else regions.push_back(
"endcap");
337 for (
const auto& region :
regions) {
341 Monitored::Scalar<float>(handle0.
key() +
"_UNMATCHED_GLOBALPOSITION_R_" + region, sqrt(cluster0->globalPosition()[0]*cluster0->globalPosition()[0] +
342 cluster0->globalPosition()[1]*cluster0->globalPosition()[1])),
348 if (matchedClusters.size() > 1) {
350 return StatusCode::FAILURE;
355 std::vector<std::string>
regions {
"all"};
357 else regions.push_back(
"endcap");
359 for(
auto const& region:
regions)
381 cluster0->localPosition<1>()[0] - cluster1->
localPosition<1>()[0]),
383 cluster0->localPosition<1>()[0] - cluster1->
localPosition<1>()[0]),
385 cluster0->localCovariance<1>()(0, 0) - cluster1->
localCovariance<1>()(0, 0)),
397 m_chrono->chronoStop(
"FPGAOutputValidationAlg::strip diff");
406 for(
auto cluster : *handle)
408 std::vector<std::string>
regions {
"all"};
410 else regions.push_back(
"endcap");
412 for(
auto const& region:
regions)
437 for(
auto cluster : *handle)
439 std::vector<std::string>
regions {
"all"};
441 else regions.push_back(
"endcap");
443 for(
auto const& region:
regions)
459 return StatusCode::SUCCESS;