ATLAS Offline Software
|
#include <SiDetElementsRoadMaker_xk.h>
Public Member Functions | |
Standard tool methods | |
SiDetElementsRoadMaker_xk (const std::string &, const std::string &, const IInterface *) | |
virtual | ~SiDetElementsRoadMaker_xk ()=default |
virtual StatusCode | initialize () override |
virtual StatusCode | finalize () override |
Main methods for road builder | |
virtual void | detElementsRoad (std::deque< Amg::Vector3D > &globalPositions, std::vector< const InDetDD::SiDetectorElement * > &Road, bool testDirection, SiDetElementRoadMakerData_xk &roadMakerData, const EventContext &ctx) const override |
This signature assumes you already have a list of positions along the trajectory. More... | |
virtual void | detElementsRoad (const EventContext &ctx, MagField::AtlasFieldCache &fieldCache, const Trk::TrackParameters &Tp, Trk::PropDirection direction, std::vector< const InDetDD::SiDetectorElement * > &Road, SiDetElementRoadMakerData_xk &roadMakerData) const override |
This is the signature used in most ATLAS clients. More... | |
Print internal tool parameters and status | |
MsgStream & | dump (MsgStream &out) const override |
std::ostream & | dump (std::ostream &out) const override |
Private Attributes | |
Service and tool handles | |
PublicToolHandle< Trk::IPropagator > | m_proptool |
Condition handle | |
SG::ReadCondHandleKey< SiDetElementsLayerVectors_xk > | m_layerVecKey |
Created by SiDetElementsRoadCondAlg_xk. More... | |
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > | m_fieldCondObjInputKey |
Properties | |
BooleanProperty | m_usePIX {this, "usePixel", true} |
BooleanProperty | m_useSCT {this, "useSCT", true} |
FloatProperty | m_width {this, "RoadWidth", 20., "Width of the road"} |
DoubleProperty | m_step {this, "MaxStep", 40., "Max step allowed"} |
StringProperty | m_pix {this, "PixManagerLocation", "Pixel", "PIX manager location"} |
StringProperty | m_sct {this, "SCTManagerLocation", "SCT", "SCT manager location"} |
StringProperty | m_fieldmode {this, "MagneticFieldMode", "MapSolenoid", "Mode of magnetic field"} |
BooleanProperty | m_ITkGeometry {this, "ITkGeometry", false} |
Data members, which are updated only in initialize | |
Trk::CylinderBounds | m_bounds {} |
Trk::MagneticFieldMode | m_fieldModeEnum {Trk::FullField} |
int | m_outputlevel {} |
void | computeBounds () |
Trk::CylinderBounds | getBound (MagField::AtlasFieldCache &fieldCache, const Trk::TrackParameters &) const |
MsgStream & | dumpConditions (MsgStream &out) const |
const SiDetElementsLayerVectors_xk * | getLayers (const EventContext &ctx) const |
static float | stepToDetElement (const InDetDD::SiDetectorElement *&, Amg::Vector3D &, Amg::Vector3D &) |
static void | bookUsageTracker (InDet::SiDetElementRoadMakerData_xk &data, const SiDetElementsLayerVectors_xk &layers) |
this method is used to initialize the detector element usage tracker member of the event data struct in case it has not been previously set. More... | |
Definition at line 59 of file SiDetElementsRoadMaker_xk.h.
InDet::SiDetElementsRoadMaker_xk::SiDetElementsRoadMaker_xk | ( | const std::string & | t, |
const std::string & | n, | ||
const IInterface * | p | ||
) |
Definition at line 34 of file SiDetElementsRoadMaker_xk.cxx.
|
virtualdefault |
|
staticprivate |
this method is used to initialize the detector element usage tracker member of the event data struct in case it has not been previously set.
obtain an event usage tracker object
modifies the 'data' argument, based on information in the 'layers' argument.
book sufficient space module_i: iterate over the detector side
for each side, book the number of layers we expect to see
for each layer, book one slot for each detector element on the layer
Definition at line 521 of file SiDetElementsRoadMaker_xk.cxx.
|
private |
Definition at line 606 of file SiDetElementsRoadMaker_xk.cxx.
|
overridevirtual |
This is the signature used in most ATLAS clients.
[in] | ctx | Event context |
[in] | fieldCache | Magnetic field cache |
[in] | Tp | Track parameter hypothesis used for road building. For example obtained from a seed. Will be used to populate a set of space points along the expected trajectory, and to search for detector elements along this linearised trajectory using the signature above |
[in] | direction | Direction of propagation - either along (inside out) or against (cosmic) momentum. |
[out] | Road | List to be populated with the elements of the search road. Will be sorted along the trajectory. |
[in,out] | roadMakerData | event data object used to cache information during an event in a thread-safe way |
500 MeV / pT
truncate at huge pt
step size - scaled by pt / 500 MeV
upper limit to step size: 1000 ;
get a list of global positions for the road search by starting from the first surface and walking along the trajectory using the RK propagator
should find at least 2 positions to sample
if we are extrapolating along them momentum direction, we pick out the part ascending in R
if the next point is at lower r than the previous point, remove the previous one
now perform the road building using our set of positions
Definition at line 539 of file SiDetElementsRoadMaker_xk.cxx.
|
overridevirtual |
This signature assumes you already have a list of positions along the trajectory.
It will look for detector elements compatible with being crossed by the linearised trajectory provided and fill those into the 'Road' argument. If 'testDirection' is used, we only fill detector elements encountered while traversing in the positive direction.
[in] | globalPositions | set of points along the trajectory. Will linearise between them. |
[out] | Road | vector to be populated with the elements of the search road. Will be sorted along the trajectory. |
[in] | testDirection | If set, avoid adding detector elements encountered only when travelling in the negative direction. Set true for inside-out tracking, false for cosmic tracking. |
[in,out] | roadMakerData | event data object used to cache information during an event in a thread-safe way |
this is a vector of vectors of detector elements prepared by the SiDetElementsRoadCondAlg. The outer vector has 3 elements: 0 --> left endcap 1 --> barrel 2 --> right endcap Each of the inner vectors is internally sorted. For the endcaps, sorting is first in z, then for same Z in r, then for same r in phi. For the barrel, we first sort in R, then for same R in phi, then for same phi in Z.
iterators over the positions to consider
fill an array with the reference point (start with the first one), the road width and a placeholder for the step length
check the left endcap layers increment n0 until we are at the layer closest to the first position from the left side
check the barrel layers increment n1 until we are at the layer closest to the first position in the radial direction
and finally, the left endcap. this time, look for the layer closest on the right side.
reset the detector-element usage info. If we are the first client to see this event data object, we allocate the storage for all modules
if we are not the first client, we reset the event data without re-allocation
done with the first probed position. Now we can start to move along the trajectory
store the point we are aiming towards
x of the current position
y of the current position
z of the current position
r of the current position
perform linearisation
dx between the current and the first position
dy between the current and the first position
dz between the current and the first position
3D distance between the current and the first position
if geometry breaks down or two points are duplicates,
we whistle innocently and make a point of looking somewhere else
inverse distance to the first position
now we can book the linearised search direction
Having found the search direction, we are ready to look for detector elements and iterate. Before doing so, we add an additional test to ensure we probe the perigee point if we cross it on the way.
transverse component of the separation vector
negative component of the global location of the previous position into the direction connecting our positions in the x-y plane corresponds to the path length opposite to the linearised direction to reach the perigee
a positive value of SM means the closest approach to the beamline is between the two positions we are considering. In this case, we do not want to iterate to the next point, but instead insert an additional step where we use the perigee point as our reference. We do this by setting the target point to the perigee, which will be made the reference point when repeating the loop. Since the perigee is estimated using the linearised direction, this direction stays valid and does not need to be updated.
only add the perigee point if the next point is beyond the perigee, and if we are not too close anyway
now, the target point is the perigee estimate, while the reference point for this round stays unchanged.
allow 2cm on top of the perigee location when extrapolating inward.
Start collecting detector elements traversed by our linearised path.
First, barrel elements
if we are moving outwards in r:
loop over all barrel layers (starting with the closest one previously identified)
stop if we moved past the targer point in R
collect all compatible detector elements from the current layer
if we are moving inward in R, iterate the other way for the barrel
stop if we moved past the test point in R
collect all compatible detector elements
Positive endcap again check if we are moving forward or back in z
collect all compatible detector elements
collect all compatible detector elements
Negative endcap same game as above
collect all compatible detector elements
collect all compatible detector elements
update the starting point to be the current target point
and increment the total propagation distance
Definition at line 305 of file SiDetElementsRoadMaker_xk.cxx.
|
override |
Definition at line 93 of file SiDetElementsRoadMaker_xk.cxx.
|
override |
Definition at line 275 of file SiDetElementsRoadMaker_xk.cxx.
|
private |
Definition at line 103 of file SiDetElementsRoadMaker_xk.cxx.
|
overridevirtual |
Definition at line 83 of file SiDetElementsRoadMaker_xk.cxx.
|
private |
Definition at line 774 of file SiDetElementsRoadMaker_xk.cxx.
|
inlineprivate |
Definition at line 181 of file SiDetElementsRoadMaker_xk.h.
|
overridevirtual |
Definition at line 44 of file SiDetElementsRoadMaker_xk.cxx.
|
staticprivate |
Definition at line 760 of file SiDetElementsRoadMaker_xk.cxx.
|
private |
Definition at line 162 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 144 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 156 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 163 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 157 of file SiDetElementsRoadMaker_xk.h.
|
private |
Created by SiDetElementsRoadCondAlg_xk.
Definition at line 141 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 164 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 154 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 135 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 155 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 153 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 150 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 151 of file SiDetElementsRoadMaker_xk.h.
|
private |
Definition at line 152 of file SiDetElementsRoadMaker_xk.h.