8#include <unordered_set>
14 for (
const std::string hitColl : {
"truthMdtHits",
"truthRpcHits",
"truthTgcHits",
"truthCscHits"}) {
16 if (!acc.isAvailable(*
truthPart))
continue;
17 for (
const long long unsigned id : acc(*
truthPart)){
48 return StatusCode::SUCCESS;
56 return StatusCode::SUCCESS;
62 const EventContext & context = Gaudi::Hive::currentContext();
68 ATH_MSG_FATAL(
"Failed to retrieve Hough data per sector vector");
69 return StatusCode::FAILURE;
72 std::vector<HitTruthMatching> truthMuons{};
76 if(!truthMuonContainer.
isValid()){
78 return StatusCode::FAILURE;
81 truthMuons.emplace_back(truth_mu);
84 if(!truthSegContainer.
isValid()){
86 return StatusCode::FAILURE;
88 ATH_MSG_DEBUG(
"Houghidipuff retrieved all input collections! Start puffing...");
91 for(
unsigned int sec_i=0; sec_i<houghSecVec->vec.size(); ++sec_i){
94 for (
const std::vector<std::shared_ptr<MuonHough::MuonLayerHough::Maximum>>& maxvec :
95 houghSecVec->vec[sec_i].maxVec){
97 for(
const std::shared_ptr<MuonHough::MuonLayerHough::Maximum>&
max : maxvec){
102 bool firstHit =
true;
105 for (
const std::shared_ptr<MuonHough::Hit>& hit :
max->hits){
158 bool matched = std::find_if(truthMuons.begin(), truthMuons.end(),
160 return hit.assocHits.count(prd->identify());
161 }) != truthMuons.end();
171 for (
const std::vector<std::shared_ptr<MuonHough::MuonPhiLayerHough::Maximum>>& phimaxvec :
172 houghSecVec->vec[sec_i].phiMaxVec){
174 for(
const std::shared_ptr<MuonHough::MuonPhiLayerHough::Maximum>&
max : phimaxvec){
177 bool firstHit =
true;
179 int phiHit_index = 0;
180 for (
const std::shared_ptr<MuonHough::PhiHit>& phi_hit :
max->hits){
234 bool matched = std::find_if(truthMuons.begin(), truthMuons.end(),
236 return hit.assocHits.count(prd->identify());
237 }) != truthMuons.end();
259 if(!truthMuLink.
isAvailable(*truthSeg)) {
continue; }
262 if(truthParticle!=truthMu) {
continue; }
263 m_truth_seg_pos.push_back(truthSeg->x(), truthSeg->y(), truthSeg->z());
264 m_truth_seg_p.push_back(truthSeg->px(), truthSeg->py(), truthSeg->pz());
269 int nTriggerHits = truthSeg->nPhiLayers() + truthSeg->nTrigEtaLayers();
276 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
AthHistogramAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
ElementLink implementation for ROOT usage.
MuonVal::ThreeVectorBranch m_hit_global
MuonVal::TgcIdentifierBranch m_phiHit_tgcId
SG::ReadHandleKey< xAOD::MuonSegmentContainer > m_truthSegmentsKey
MuonVal::VectorBranch< float > & m_hit_ymin
MuonVal::VectorBranch< int > & m_hit_tech
MuonVal::CscIdentifierBranch m_phiHit_cscId
MuonVal::TgcIdentifierBranch m_hit_stgcId
MuonVal::VectorBranch< int > & m_truth_seg_nTriggerHits
MuonVal::VectorBranch< float > & m_phiHit_ymin
MuonVal::VectorBranch< int > & m_truth_seg_sector
MuonVal::ScalarBranch< int > & m_maxHit_stationIndex
MuonVal::VectorBranch< int > & m_hit_tgcIndex
MuonVal::MuonTesterTree m_eta_hit_tree
MuonVal::ScalarBranch< float > & m_maxHit_sector
MuonVal::TgcIdentifierBranch m_phiHit_stgcId
MuonVal::MuonTesterTree m_phi_hit_tree
MuonVal::TwoVectorBranch m_phiHit_local
MuonVal::VectorBranch< float > & m_phiHit_ymax
MuonVal::ScalarBranch< float > & m_maxPhiHit_z0
MuonVal::ScalarBranch< int > & m_maxHit_stationEta
MuonVal::CscIdentifierBranch m_hit_cscId
MuonVal::VectorBranch< int > & m_phiHit_mmIndex
MuonVal::RpcIdentifierBranch m_hit_rpcId
MuonVal::VectorBranch< int > & m_hit_stgcIndex
MuonVal::ScalarBranch< int > & m_maxPhiHit_stationEta
MuonVal::ScalarBranch< float > & m_maxPhiHit_sector
MuonVal::ScalarBranch< int > & m_maxHit_region
MuonVal::ScalarBranch< float > & m_maxHit_z0
SG::ReadHandleKey< Muon::HoughDataPerSectorVec > m_houghDataPerSectorVecKey
MuonVal::ThreeVectorBranch m_truth_seg_pos
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
MuonVal::TwoVectorBranch m_hit_local
MuonVal::VectorBranch< int > & m_hit_mmIndex
MuonVal::VectorBranch< float > & m_hit_x
MuonVal::VectorBranch< int > & m_hit_mdtIndex
MuonVal::MdtIdentifierBranch m_phiHit_mdtId
MuonVal::VectorBranch< bool > & m_phiHit_truthMatched
MuonVal::ScalarBranch< float > & m_truth_pt
MuonVal::VectorBranch< int > & m_hit_cscIndex
MuonVal::VectorBranch< float > & m_phiHit_w
MuonVal::ScalarBranch< int > & m_truth_barcode
MuonVal::MdtIdentifierBranch m_hit_mdtId
MuonVal::VectorBranch< float > & m_phiHit_x
MuonVal::VectorBranch< bool > & m_hit_truthMatched
MuonVal::RpcIdentifierBranch m_phiHit_rpcId
MuonVal::VectorBranch< int > & m_hit_rpcIndex
MuonVal::TgcIdentifierBranch m_phiHit_mmId
MuonVal::VectorBranch< float > & m_hit_w
MuonVal::ScalarBranch< float > & m_truth_phi
MuonVal::TgcIdentifierBranch m_hit_mmId
virtual StatusCode finalize() override
MuonVal::VectorBranch< int > & m_phiHit_rpcIndex
MuonVal::VectorBranch< int > & m_phiHit_mdtIndex
MuonVal::ScalarBranch< int > & m_maxPhiHit_stationPhi
MuonHoughDataNtuple(const std::string &name, ISvcLocator *pSvcLocator)
MuonVal::VectorBranch< float > & m_hit_ymax
MuonVal::VectorBranch< int > & m_phiHit_tech
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthMuonKey
MuonVal::VectorBranch< int > & m_phiHit_stgcIndex
MuonVal::VectorBranch< int > & m_truth_seg_nPrecisionHits
MuonVal::ScalarBranch< int > & m_maxPhiHit_stationIndex
MuonVal::TgcIdentifierBranch m_hit_tgcId
MuonVal::ScalarBranch< int > & m_truth_pdgId
MuonVal::VectorBranch< int > & m_phiHit_cscIndex
virtual StatusCode execute() override
MuonVal::ThreeVectorBranch m_phiHit_global
virtual ~MuonHoughDataNtuple() override
virtual StatusCode initialize() override
MuonVal::VectorBranch< int > & m_phiHit_tgcIndex
MuonVal::ThreeVectorBranch m_truth_seg_p
MuonVal::MuonTesterTree m_truth_tree
MuonVal::ScalarBranch< float > & m_maxHit_theta
MuonVal::ScalarBranch< float > & m_truth_eta
MuonVal::ScalarBranch< int > & m_maxHit_stationPhi
struct containing additional debug information on the hits that is not needed for the actual alg but ...
Class to represent measurements from the Monitored Drift Tubes.
virtual const Amg::Vector3D & globalPosition() const
Returns the global position of the CENTER of the drift tube (i.e.
Class representing clusters in the muon system.
virtual const Amg::Vector3D & globalPosition() const =0
Returns the global position of the measurement (calculated on the fly)
SG::ConstAccessor< T, ALLOC > ConstAccessor
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const Amg::Vector2D & localPosition() const
return the local position reference
Identifier identify() const
return the identifier
constexpr int toInt(const EnumType enumVal)
TruthParticle_v1 TruthParticle
Typedef to implementation.
MuonSegment_v1 MuonSegment
Reference the current persistent version:
std::unordered_set< Identifier > assocHits
HitTruthMatching(const xAOD::TruthParticle *truthPart_)
const xAOD::TruthParticle * truthPart