The fill method checks if enough information is provided such that the branch is cleared from the information of the prevoius event and in cases of that updates did no happen befure a default value is provided.
--> returns false if no update is called or the dummy value has not been defined
14 {
16 SG::ReadHandle<sTGCSimHitCollection> stgcContainer{
m_key, ctx};
19 return false;
20 }
21 const MuonGM::MuonDetectorManager* MuonDetMgr =
getDetMgr(ctx);
22 if (!MuonDetMgr) { return false; }
23 unsigned int n_hits{0};
24
27 if (!stgcContainer->size())
ATH_MSG_DEBUG(
"sTGC Sim container is empty");
28 for (const sTGCSimHit& hit : *stgcContainer) {
29 if(hit.depositEnergy()==0.) continue;
30
32 int simId = hit.sTGCId();
39
40 if ( stphi==0 ) {
42 return false;
43 }
44
45
46
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");
50 }
51 else {
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;
55 }
56
58 side == 1 ? steta+1 : -steta-1,
59 (stphi-1)/2+1,multilayer,layer,1,1 );
63
65
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");
68 continue;
69 }
70
72 if (!detEl) {
73 ATH_MSG_ERROR(
"sTGCSimHitVariables::fillVariables() - Failed to retrieve sTgcReadoutElement for "<<
idHelperSvc()->stgcIdHelper().print_to_string(offId).c_str());
74 return false;
75 }
76
77 if( !
idHelperSvc()->stgcIdHelper().is_stgc(offId) ){
79 }
80 if( !
idHelperSvc()->stgcIdHelper().is_muon(offId) ){
82 }
85 <<
" " <<
idHelperSvc()->stgcIdHelper().is_tgc(offId) <<
" " <<
idHelperSvc()->stgcIdHelper().is_csc(offId) <<
" " <<
idHelperSvc()->stgcIdHelper().is_mm(offId) );
86 }
89 }
90
91
92 int barcode = hit.particleLink().barcode();
97
101
102 const Amg::Vector3D& globalDirection = hit.globalDirection();
104
108
109 const Amg::Vector3D& globalPrePosition = hit.globalPrePosition();
111 if (hit.kineticEnergy() < 0.0) {
113 }
114
117
119
120
121 const Trk::PlaneSurface& surf = detEl->
surface(newId);
124
125
128
130
131 double scale = -rSurface_pos.z()/ldir.z();
133
134
136
137
139
140 int stripNumber = detEl->
stripNumber(posOnSurf,newId);
141 if( stripNumber == -1 ){
144 stripNumber = 1;
145 }
146 Identifier oldId = offId;
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 );
151 }
152
155 ATH_MSG_WARNING(
"sTGC validation: failed to obtain local position for identifier " <<
idHelperSvc()->stgcIdHelper().print_to_string(offId) );
156 }
157
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 );
162
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() );
166
167
169
171
173
177 }
178 ++n_hits;
179 }
181
183 return true;
184 }
#define ATH_MSG_WARNING(x)
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
const sTgcReadoutElement * getsTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
const Amg::Transform3D & absTransform() const
const Amg::Vector3D globalPosition() const
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 int &index) const
const MuonGM::MuonDetectorManager * getDetMgr(const EventContext &ctx) const
const Muon::IMuonIdHelperSvc * idHelperSvc() const
ThreeVectorBranch m_NSWsTGC_hitGlobalPrePosition
VectorBranch< int > & m_NSWsTGC_stripNumber
ScalarBranch< unsigned int > & m_NSWsTGC_nSimHits
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
virtual const sTgcIdHelper & stgcIdHelper() const =0
access to TgcIdHelper
virtual bool isValid() override final
Can the handle be successfully dereferenced?
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
std::pair< int, int > compare(const AmgSymMatrix(N) &m1, const AmgSymMatrix(N) &m2, double precision=1e-9, bool relative=false)
compare two matrices, returns the indices of the first element that fails the condition,...
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
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
constexpr uint8_t stationPhi
station Phi 1 to 8
constexpr uint8_t stationEta
1 to 3