/// Access the placement of a node in the chain of placements for this branch PlacedVolume GlobalAlignment::nodePlacement(int level) const { CheckHandle verify_handle(*this); PlacedVolume pv = PlacedVolume(ptr()->GetNode(level)); if ( pv.isValid() ) return pv; throw runtime_error("DD4hep: The object chain of "+string(placement().name())+ " is too short. [Invalid index]"); }
/// Given a detector element, access it's sensitive detector (if the sub-detector is sensitive!) SensitiveDetector LCDDHelper::sensitiveDetector(DetElement detector) const { for(DetElement par = detector; par.isValid(); par = par.parent()) { if ( par.ptr() != ptr()->world().ptr() ) { PlacedVolume pv = par.placement(); if ( pv.isValid() ) { const PlacedVolume::VolIDs& ids = pv.volIDs(); for(PlacedVolume::VolIDs::const_iterator i=ids.begin(); i!=ids.end();++i) { if ( (*i).first == "system" ) { return sensitiveDetector(par.name()); } } } } } return SensitiveDetector(0); }