22 if (!MuonDetMgr) {
return false; }
23 unsigned int n_hits{0};
27 if (!stgcContainer->size())
ATH_MSG_DEBUG(
"sTGC Sim container is empty");
29 if(
hit.depositEnergy()==0.)
continue;
32 int simId =
hit.sTGCId();
37 int layer = stgchhelper->
GetLayer(simId);
38 int side = stgchhelper->
GetSide(simId);
47 int detNumber = -999, wedgeId = -999, wedgeType = -999;
48 if(stname.length()!=4) {
49 ATH_MSG_WARNING(
"sTGC validation: station Name exceeds 4 charactes, filling dummy information for detNumber, wedgeId and wedgeType");
52 detNumber = atoi(stname.substr(2,1).c_str());
53 wedgeId = (stname.substr(1,1).compare(
"L")) ? 0 : 1;
54 wedgeType = (stname.substr(3,1).compare(
"P")) ? 0 : 1;
58 side == 1 ? steta+1 : -steta-1,
59 (stphi-1)/2+1,multilayer,layer,1,1 );
66 if(
type == 2 && off_channel == 63) {
67 ATH_MSG_DEBUG(
"Found sTGC Wire Sim Hit with channel number 63 (dead region), skipping this hit");
73 ATH_MSG_ERROR(
"sTGCSimHitVariables::fillVariables() - Failed to retrieve sTgcReadoutElement for "<<
idHelperSvc()->stgcIdHelper().print_to_string(offId).c_str());
77 if( !
idHelperSvc()->stgcIdHelper().is_stgc(offId) ){
80 if( !
idHelperSvc()->stgcIdHelper().is_muon(offId) ){
85 <<
" " <<
idHelperSvc()->stgcIdHelper().is_tgc(offId) <<
" " <<
idHelperSvc()->stgcIdHelper().is_csc(offId) <<
" " <<
idHelperSvc()->stgcIdHelper().is_mm(offId) );
87 if(
idHelperSvc()->stgcIdHelper().gasGap(offId) != layer ) {
92 int barcode =
hit.particleLink().barcode();
111 if (
hit.kineticEnergy() < 0.0) {
116 <<
" phi " <<
idHelperSvc()->stgcIdHelper().stationPhi(offId) <<
" ml " <<
idHelperSvc()->stgcIdHelper().multilayer(offId) );
131 double scale = -rSurface_pos.z()/ldir.z();
140 int stripNumber = detEl->
stripNumber(posOnSurf,newId);
141 if( stripNumber == -1 ){
148 if(
idHelperSvc()->stgcIdHelper().gasGap(offId) != layer ) {
149 ATH_MSG_WARNING(
"sTGC validation: sTgc id has bad layer field(2)! " << std::endl <<
" " <<
idHelperSvc()->stgcIdHelper().print_to_string(offId) << std::endl
150 <<
" " <<
idHelperSvc()->stgcIdHelper().print_to_string(oldId) <<
" stripN " << stripNumber );
155 ATH_MSG_WARNING(
"sTGC validation: failed to obtain local position for identifier " <<
idHelperSvc()->stgcIdHelper().print_to_string(offId) );
159 ATH_MSG_DEBUG(
"sTGC Global hit: r " <<
hit.globalPosition().perp() <<
", phi " <<
hit.globalPosition().phi() <<
", z " <<
hit.globalPosition().z()
160 <<
"; detEl: r " << detpos.perp() <<
", phi " << detpos.phi() <<
", z " << detpos.z()
161 <<
"; surf z " << surf.
center().z() <<
", ml " << multilayer <<
", l " << layer );
163 ATH_MSG_DEBUG(
" detEl: x " << dSurface_pos.x() <<
" y " << dSurface_pos.y() <<
" z " << dSurface_pos.z());
164 ATH_MSG_DEBUG(
"sTGC Fast digit: x " << fastDigitPos.x() <<
" y " << fastDigitPos.y()
165 <<
", gToL: x " << rSurface_pos.x() <<
" y " << rSurface_pos.y() <<
" z " << rSurface_pos.z() );
#define ATH_MSG_WARNING(x)
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
const sTgcReadoutElement * getsTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
const Amg::Transform3D & absTransform() const
const Amg::Vector3D globalPosition() const
An sTgcReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station c...
virtual bool stripPosition(const Identifier &id, Amg::Vector2D &pos) const override final
strip position - should be renamed to channel position If the strip number is outside the range of va...
virtual int stripNumber(const Amg::Vector2D &pos, const Identifier &id) const override final
strip number corresponding to local position.
const std::string & stationNameString(const Identifier &id) const
const MuonGM::MuonDetectorManager * getDetMgr(const EventContext &ctx) const
const Muon::IMuonIdHelperSvc * idHelperSvc() const
PrdTesterModule(MuonTesterTree &tree, const std::string &grp_name, MSG::Level msglvl)
bool declare_keys() override final
ThreeVectorBranch m_NSWsTGC_hitGlobalPrePosition
VectorBranch< int > & m_NSWsTGC_stripNumber
sTGCSimHitVariables(MuonTesterTree &tree, const std::string &container_name, MSG::Level msglvl)
ScalarBranch< unsigned int > & m_NSWsTGC_nSimHits
SG::ReadHandleKey< sTGCSimHitCollection > m_key
bool fill(const EventContext &ctx) override final
The fill method checks if enough information is provided such that the branch is cleared from the inf...
ThreeVectorBranch m_NSWsTGC_hitGlobalPosition
ThreeVectorBranch m_NSWsTGC_hitToDsurfacePosition
VectorBranch< float > & m_NSWsTGC_kineticEnergy
VectorBranch< float > & m_NSWsTGC_globalTime
VectorBranch< float > & m_NSWsTGC_depositEnergy
VectorBranch< int > & m_NSWsTGC_wedgeType
ThreeVectorBranch m_NSWsTGC_hitToRsurfacePosition
VectorBranch< int > & m_NSWsTGC_particleEncoding
VectorBranch< int > & m_NSWsTGC_detectorNumber
VectorBranch< bool > & m_NSWsTGC_isInsideBounds
VectorBranch< int > & m_NSWsTGC_wedgeId
ThreeVectorBranch m_NSWsTGC_detector_globalPosition
VectorBranch< float > & m_NSWsTGC_FastDigitRsurfacePositionX
VectorBranch< int > & m_NSWsTGC_trackId
ThreeVectorBranch m_NSWsTGC_hitGlobalDirection
sTgcIdentifierBranch m_NSWsTGC_Id
VectorBranch< float > & m_NSWsTGC_FastDigitRsurfacePositionY
bool declare_dependency(Key &key)
Declares the ReadHandle/ ReadCondHandleKey as data dependency of the algorithm.
TTree * tree() override final
Returns the underlying TTree object.
virtual const sTgcIdHelper & stgcIdHelper() const =0
access to TgcIdHelper
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Class for a planaer rectangular or trapezoidal surface in the ATLAS detector.
virtual bool insideBounds(const Amg::Vector2D &locpos, double tol1=0., double tol2=0.) const override
This method calls the inside() method of the Bounds.
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
const Amg::Vector3D & center() const
Returns the center position of the Surface.
int GetZSector(const int &hid) const
int GetMultiLayer(const int &hid) const
int GetSide(const int &hid) const
std::string GetStationName(const int &hid) const
int GetPhiSector(const int &hid) const
int GetLayer(const int &hid) const
static const sTgcHitIdHelper * GetHelper()
int channel(const Identifier &id) const override
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int gasGap, int channelType, int channel) const
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
bool isSmall(const ChIndex index)
Returns true if the chamber index is in a small sector.
const std::string & stName(StIndex index)
convert StIndex into a string