 |
ATLAS Offline Software
|
Go to the documentation of this file.
6 #include "CLHEP/Random/RandGaussZiggurat.h"
7 #include "CLHEP/Random/RandFlat.h"
10 constexpr
double percentage(
unsigned int numerator,
unsigned int denom) {
23 return StatusCode::SUCCESS;
26 ATH_MSG_INFO(
"Tried to convert "<<m_allHits[0]<<
"/"<<m_allHits[1]<<
" hits. In, "
27 <<percentage(m_acceptedHits[0], m_allHits[0]) <<
"/"
28 <<percentage(m_acceptedHits[1], m_allHits[1]) <<
"% of the cases, the conversion was successful");
29 return StatusCode::SUCCESS;
41 CLHEP::HepRandomEngine* rndEngine,
56 if (efficiencyMap && efficiencyMap->
getEfficiency(hitId) < CLHEP::RandFlat::shoot(rndEngine,0.,1.)){
57 ATH_MSG_VERBOSE(
"Simulated hit "<<xAOD::toEigen(timedHit->localPosition())
58 <<
m_idHelperSvc->toString(hitId) <<
" is rejected because of efficency modelling");
62 const Amg::Vector2D locSimHitPos{xAOD::toEigen(timedHit->localPosition()).block<2,1>(0,0)};
65 if (!design.insideTrapezoid(locSimHitPos)) {
67 <<
" is outside of the trapezoid "<<design);
70 const int wireGrpNum = design.stripNumber(locSimHitPos);
74 <<
" is not covered by any wire gang");
78 const double uncert = design.stripPitch() * design.numWiresInGroup(wireGrpNum) / std::sqrt(12);
79 const double locX = CLHEP::RandGaussZiggurat::shoot(rndEngine, locSimHitPos.x(), uncert);
83 const int prdWireNum = design.stripNumber(smearedPos);
86 if (design.insideTrapezoid(smearedPos)) {
88 <<
Amg::toString(smearedPos)<<
" "<<uncert<<
" is outside of "<<design);
104 <<
Amg::toString(locSimHitPos, 2)<<
" wire group number: "<<prdWireNum<<
", time: "<<
hitTime(timedHit)
107 ++m_acceptedHits[
false];
114 CLHEP::HepRandomEngine* rndEngine,
117 const Identifier hitId = timedHit->identify();
129 if (efficiencyMap && efficiencyMap->
getEfficiency(hitId) < CLHEP::RandFlat::shoot(rndEngine,0.,1.)){
130 ATH_MSG_VERBOSE(
"Simulated hit "<<xAOD::toEigen(timedHit->localPosition())
131 <<
m_idHelperSvc->toString(hitId) <<
" is rejected because of efficency modelling");
142 const Amg::Vector2D locSimHitPos{(toPhiRot*xAOD::toEigen(timedHit->localPosition())).block<2,1>(0,0)};
146 if (!design.insideTrapezoid(locSimHitPos)) {
148 <<
" is outside of the trapezoid "<<std::endl<<design);
151 int stripNum = design.stripNumber(locSimHitPos);
162 const double stripPitch = std::abs(*Amg::intersect<2>(design.stripLeftBottom(stripNum), design.stripLeftEdge(stripNum),
163 locSimHitPos, stripNorm)) +
164 std::abs(*Amg::intersect<2>(design.stripRightBottom(stripNum), design.stripRightEdge(stripNum),
165 locSimHitPos, stripNorm));
167 const double uncert = stripPitch / std::sqrt(12);
168 const double locX = CLHEP::RandGaussZiggurat::shoot(rndEngine, locSimHitPos.x(), uncert);
172 const int digitStripNum = design.stripNumber(smearedPos);
174 if (digitStripNum < 0) {
175 if (design.insideTrapezoid(smearedPos)) {
177 <<
Amg::toString(smearedPos)<<
" "<<uncert<<
" is outside of "<<design);
194 <<
Amg::toString(locSimHitPos, 2)<<
" phi strip number: "<<digitStripNum<<
", time: "<<
hitTime(timedHit)
199 ++(m_acceptedHits[
true]);
218 for (
const TimedHit& simHit : viewer) {
225 const bool digitizedEta =
digitizeWireHit(ctx,simHit, efficiencyMap,*outColl, rndEngine, deadTimes);
226 const bool digitizedPhi =
digitizeStripHit(ctx, simHit, efficiencyMap,*outColl, rndEngine, deadTimes);
231 }
else if (digitizedPhi) {
237 re->localToGlobalTrans(
getGeoCtx(ctx),
re->layerHash(simHit->identify()))};
243 }
while(viewer.next());
246 return StatusCode::SUCCESS;
void setIdentifier(const Identifier &id)
Sets the global ATLAS identifier.
Identifier identify() const
Returns the global ATLAS identifier of the SimHit.
Eigen::Matrix< double, 2, 1 > Vector2D
const WireGroupDesign & wireGangLayout(const IdentifierHash &layHash) const
Returns access to the wire group design of the given gasGap [1-3] If the gap does not have a wires an...
MeasVector< N > toStorage(const AmgVector(N)&amgVec)
Converts the double precision of the AmgVector into the floating point storage precision of the MeasV...
void setLocalPosition(MeasVector< 3 > vec)
Sets the local position of the traversing particle.
Amg::Transform3D globalToLocalTrans(const ActsGeometryContext &ctx) const
Transformations to translate between local <-> global coordinates.
#define ATH_MSG_VERBOSE(x)
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
bool empty() const
Test if the key is blank.
@ u
Enums for curvilinear frames.
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
::StatusCode StatusCode
StatusCode definition for legacy code.
Eigen::Affine3d Transform3D
double getEfficiency(const Identifier &channelId, bool isInnerQ1=false) const
Returns the signal generation efficiency of the sTgc channel.
static unsigned gasGapNumber(const IdentifierHash &measHash)
Unpacks the gas gap number from the measurement hash.
ConstVectorMap< 3 > localDirection() const
Returns the local direction of the traversing particle.
IdentifierHash measurementHash(const Identifier &measId) const override final
Constructs the identifier hash from the full measurement Identifier.
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Include the GeoPrimitives which need to be put first.
void setLocalDirection(MeasVector< 3 > vec)
Sets the local direction of the traversing particle.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
StatusCode initialize(bool used=true)
This header ties the generic definitions in this package.
Identifier identify() const
unsigned numStrips(const IdentifierHash &layHash) const
Returns the number of strips for a given gasGap [1-3].
#define ATH_MSG_WARNING(x)
unsigned numWireGangs(const IdentifierHash &layHash) const
Returns the number of wire gangs for a given gasGap [1-3].
const boost::regex re(r_e)
static IdentifierHash constructHash(unsigned measCh, unsigned gasGap, const bool isStrip)
Constructs the Hash out of the Identifier fields (channel, gasGap, isStrip)
ConstVectorMap< 3 > localPosition() const
Returns the local postion of the traversing particle.
const Amg::Transform3D & localToGlobalTrans(const ActsGeometryContext &ctx) const
Returns the local to global transformation into the ATLAS coordinate system.
const T * at(size_type n) const
Access an element, as an rvalue.
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
size_type size() const noexcept
Returns the number of elements in the collection.
const RadialStripDesign & stripLayout(const IdentifierHash &layHash) const
Returns access to the strip design of the given gasGap [1-3] If the gap does not have strips an excep...