ATLAS Offline Software
|
#include <SiTrackMaker_xk.h>
Public Member Functions | |
Standard tool methods | |
SiTrackMaker_xk (const std::string &, const std::string &, const IInterface *) | |
virtual | ~SiTrackMaker_xk ()=default |
virtual StatusCode | initialize () override |
virtual StatusCode | finalize () override |
Main methods for local track finding | |
virtual std::list< Trk::Track * > | getTracks (const EventContext &ctx, SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const override |
virtual std::list< Trk::Track * > | getTracks (const EventContext &ctx, SiTrackMakerEventData_xk &data, const Trk::TrackParameters &Tp, const std::vector< Amg::Vector3D > &Gp) const override |
virtual void | newEvent (const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override |
virtual void | newTrigEvent (const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override |
virtual void | endEvent (SiTrackMakerEventData_xk &data) const override |
Print internal tool parameters and status | |
MsgStream & | dump (SiTrackMakerEventData_xk &data, MsgStream &out) const override |
Private Member Functions | |
Disallow default constructor, copy constructor and assignment operator | |
SiTrackMaker_xk ()=delete | |
SiTrackMaker_xk (const SiTrackMaker_xk &)=delete | |
SiTrackMaker_xk & | operator= (const SiTrackMaker_xk &)=delete |
Private Attributes | |
Tool handles | |
ToolHandle< InDet::ISiDetElementsRoadMaker > | m_roadmaker {this, "RoadTool", "InDet::SiDetElementsRoadMaker_xk"} |
ToolHandle< InDet::ISiCombinatorialTrackFinder > | m_tracksfinder {this, "CombinatorialTrackFinder", "InDet::SiCombinatorialTrackFinder_xk"} |
ToolHandle< ITrigInDetTrackFollowingTool > | m_trigInDetTrackFollowingTool {this, "TrigTrackFollowingTool", "TrigInDetTrackFollowingTool"} |
ToolHandle< ITrigInDetRoadPredictorTool > | m_trigInDetRoadPredictorTool {this, "TrigInDetRoadPredictorTool", "TrigInDetRoadPredictorTool_FTF"} |
ToolHandle< InDet::ISeedToTrackConversionTool > | m_seedtrack {this, "SeedToTrackConversion", "InDet::SeedToTrackConversionTool"} |
Data handles | |
SG::ReadCondHandleKey< InDet::BeamSpotData > | m_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"} |
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > | m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"} |
SG::ReadHandleKey< ROIPhiRZContainer > | m_caloCluster {this, "EMROIPhiRZContainer", ""} |
SG::ReadHandleKey< ROIPhiRZContainer > | m_caloHad {this, "HadROIPhiRZContainer", ""} |
Properties | |
BooleanProperty | m_seedsfilter {this, "UseSeedFilter", true, "Use seed filter"} |
StringProperty | m_fieldmode {this, "MagneticFieldMode", "MapSolenoid", "Mode of magnetic field"} |
StringProperty | m_patternName {this, "TrackPatternRecoInfo", "SiSPSeededFinder", "Name of the pattern recognition"} |
BooleanProperty | m_usePix {this, "usePixel", true, "flags to set whether to use pixel/sct cluster, irrespective of what is in event"} |
BooleanProperty | m_useSct {this, "useSCT", true} |
BooleanProperty | m_useassoTool {this, "UseAssociationTool", false, "Use prd-track association tool"} |
BooleanProperty | m_cosmicTrack {this, "CosmicTrack", false, "Is it cosmic track"} |
BooleanProperty | m_multitracks {this, "doMultiTracksProd", false} |
BooleanProperty | m_useBremModel {this, "useBremModel", false} |
BooleanProperty | m_useCaloSeeds {this, "doCaloSeededBrem", false} |
BooleanProperty | m_useSSSfilter {this, "useSSSseedsFilter", true} |
BooleanProperty | m_useHClusSeed {this, "doHadCaloSeedSSS", false, "Hadronic Calorimeter Seeds"} |
BooleanProperty | m_ITKGeometry {this, "ITKGeometry", false, "ITK geometry"} |
BooleanProperty | m_seedsegmentsWrite {this, "SeedSegmentsWrite", false, "Call seed to track conversion"} |
BooleanProperty | m_useTrigTrackFollowingTool {this, "useTrigTrackFollowingTool", false, "Option to use TrigInDetTrackFollowingTool instead of SiCombinatorialTrackFinder_xk"} |
BooleanProperty | m_useTrigInDetRoadPredictorTool {this, "useTrigInDetRoadPredictorTool", false, "Option to use TrigInDetRoadPredictorTool instead of ISiDetElementsRoadMaker"} |
DoubleProperty | m_xi2max {this, "Xi2max", 15., "max Xi2 for updators"} |
DoubleProperty | m_xi2maxNoAdd {this, "Xi2maxNoAdd", 35., "max Xi2 for clusters"} |
DoubleProperty | m_xi2maxlink {this, "Xi2maxlink", 200., "max Xi2 for clusters"} |
DoubleProperty | m_pTmin {this, "pTmin", 500., "min pT"} |
DoubleProperty | m_pTminBrem {this, "pTminBrem", 1000., "min pT for Brem mode"} |
DoubleProperty | m_distmax {this, "MaxDistanceForSCTsp", 5.} |
DoubleProperty | m_xi2multitracks {this, "Xi2maxMultiTracks", 3., "max Xi2 for multi tracks"} |
IntegerProperty | m_nholesmax {this, "nHolesMax", 2, "Max number holes"} |
IntegerProperty | m_dholesmax {this, "nHolesGapMax", 2, "Max holes gap"} |
IntegerProperty | m_nclusmin {this, "nClustersMin", 6, "Min number clusters"} |
IntegerProperty | m_nwclusmin {this, "nWeightedClustersMin", 6, "Min umber weighted clusters(pix=2 sct=1)"} |
DoubleProperty | m_phiWidth {this, "phiWidth", 0.3} |
DoubleProperty | m_etaWidth {this, "etaWidth", 0.3} |
DoubleArrayProperty | m_etabins {this, "etaBins", {}, "eta bins"} |
DoubleArrayProperty | m_ptbins {this, "pTBins", {}, "pT bins"} |
InDet::SiTrackMaker_xk is algorithm which produce Trk::Track started from 3 space points information of SCT and Pixels in the road of InDetDD::SiDetectorElement* sorted in propagation order.
In AthenaMT, event dependent cache inside SiTrackMaker_xk is not preferred. SiTrackMakerEventData_xk class holds event dependent data for SiTrackMaker_xk. Its object is instantiated in SiSPSeededTrackFinder::execute.
Definition at line 63 of file SiTrackMaker_xk.h.
|
private |
Enumerator | |
---|---|
kUsedSeedsEta | |
kSeedsWithTracksEta |
Definition at line 221 of file SiTrackMaker_xk.h.
|
private |
Definition at line 203 of file SiTrackMaker_xk.h.
InDet::SiTrackMaker_xk::SiTrackMaker_xk | ( | const std::string & | t, |
const std::string & | n, | ||
const IInterface * | p | ||
) |
Definition at line 27 of file SiTrackMaker_xk.cxx.
|
virtualdefault |
|
privatedelete |
|
privatedelete |
|
staticprivate |
Definition at line 1163 of file SiTrackMaker_xk.cxx.
|
staticprivate |
Definition at line 1040 of file SiTrackMaker_xk.cxx.
|
override |
Definition at line 394 of file SiTrackMaker_xk.cxx.
|
private |
Definition at line 405 of file SiTrackMaker_xk.cxx.
|
staticprivate |
Definition at line 474 of file SiTrackMaker_xk.cxx.
|
private |
Definition at line 197 of file SiTrackMaker_xk.cxx.
|
overridevirtual |
End event for track finder tool
correction to exclude memory fragmentation
Definition at line 584 of file SiTrackMaker_xk.cxx.
|
overridevirtual |
Definition at line 184 of file SiTrackMaker_xk.cxx.
|
private |
we need at least three space points on the seed.
for tracklets we select first, middle, and last spacepoint of the seed to improve pT estimate
get the first cluster on the first hit
and use the surface from this cluster as our reference plane
write the global positions into arrays. This includes an improved position estimate for strip spacepoints. If this improvement fails, the method can return false -> then we abort
translate second and third SP w.r.t first one
distance of second SP to first in transverse plane Also happens to be u-coordinate of second SP in conformal mapping
denominator for conformal mapping
coordinate system for conformal mapping - this is local x
u-coordinate of third SP in conformal mapping
v-coordinate of third SP in conformal mapping
A,B are slope and intercept of the straight line in the u,v plane connecting the three points.
Keep in mind that v1 == 0
From inserting A into linear equation. Note that Igor sneaks in a factor two here
Curvature estimate. (2R)²=(1+A²)/b² => 1/2R = b/sqrt(1+A²) = B / sqrt(1+A²).
estimate of the track dz/dr (1/tanTheta), corrected for curvature effects
local x of the surface in the global frame
local y of the surface in the global frame
centre of the surface in the global frame
location of the first SP w.r.t centre of the surface
local x and y - project onto local axes
silently switch off field if solenoid is off
if we are not running with "no field":
get the field at our first SP
field is in kiloTesla. So here we check for more than 0.1 Tesla
phi estimate
theta estimate
inverse transverse momentum estimate
if we have low field, use a straight-line estimate
note: Now no curvature correction
no pt estimate, assume min pt
treat absence of solenoid like the low-field case
apply the pt on the initial parameter estimate, with some margin
update qoverp
qoverp from qoverpt and theta
ref point = first SP
never done in main ATLAS tracking. Would otherwise check if the seed is compatible with a hadronic ROI
now we can return the initial track parameters we built, parameterised using the ref surface. Pass a nullptr for the covariance
Definition at line 856 of file SiTrackMaker_xk.cxx.
|
overridevirtual |
incremenet seed counter
0 or 3 typically (PPP or SSS), other numbers indicate PPS/PSS (1/2)
eta of the seed, rounded down to leading digit via int-conversion
more counter incrementation
prepare output list
if we run the SI track maker without using the Si, this becomes a trivial task...
check seed quality.
this checks if all of the clusters on the seed are already on one single existing track. If not, we consider the seed to be "good"
read the B-field cache
Get initial parameters estimation from our seed
if we failed to get the initial parameters, we bail out. Can happen in certain pathological cases (e.g. malformed strip hits), or if we would be running with calo-ROI strip seeds (we aren't)
otherwise, increment the 'good seeds' counter
Now, obtain a search road of detector elements. This is done by extrapolating our estimated starting parameters through the detector and collecting all detector elements reasonably close to the projected trajectory. This will populate the 'DE" list.
if we don't use all of pix and SCT, filter our list, erasing any that don't fit our requirements
if we did not find sufficient detector elements to fulfill the minimum cluster requirement, bail out. We will not be able to build a track satisfying the cuts.
update statistics tables - we have sufficient detector elements to have a chance of finding a track!
prepare a list of global positions
update another counter
Find possible list of tracks using space points space points information
Note: The branch below is the one taken in ATLAS default inside-out tracking for run-3
update stat tables
update the cluster-track-map to allow to filter any upcoming seeds with hits that are already taken
require sufficient free clusters on track
Definition at line 635 of file SiTrackMaker_xk.cxx.
|
overridevirtual |
Definition at line 793 of file SiTrackMaker_xk.cxx.
|
staticprivate |
Here, we derive the local track direction in the space-points as the tangents to the estimated trajectory (assuming a circle in x-y and straight line in r-z)
transform transverse coordinates relative to the first SP
Now apply the same transform used in the seed maker: x,y --> u:=x/(x²+y²); v:=y/(x²+y²); in a frame centered around first SP
set x axis as direction unit vector in transverse plane, from first to second SP
reasoning: u = sqrt(d01)/d01, and v01 = 0
decompose the SP3-SP1 separation into components parallel...
and orthogonal to our new local x axis
squared distance third to first SP the transverse plane
u,v coordinates of third SP in the new frame
Now obtain A,B parameters from circle parameterisation in the new frame: V = (-x0/y0) x U + 1/(2y0) =: A x U + B. A ~= delta V / delta U, B = V - A x U, add a factor 2 for utility
v01 is 0, as the direction from SP 1 to 2 is the u-axis
Now we can resolve the related geometry. Note that A0, in the original frame, is related to the angle Phi1 between the tangent the central SP and the tendon between the first and second SP, alpha, as tan(alpha) = A0.
dz/dr along the seed = 1 / tan(theta)
1/sqrt(1+1/tan²(theta)) -> sin(theta)
cos theta (= sin(theta)/tan(theta))
multiply with cos(alpha) via A0
(a,b) parameterises the direction corresponding to the tendon between the first two SP. Now, go from there to the local tangents by removing or adding the angle 'alpha' from before, derived from A0. direction at first SP - rotated by - 1 x alpha w.r.t the tendon defining a and b The structure below comes from the formulae for sin / cos of a sum of two angles with (a,b) = r(cos phi / - sin phi)
px0: a sin theta cos alpha - b sin theta sin alpha
py0: b sin theta cos alpha + a sin theta sin alpha
pz0: cos theta
direction at second SP - rotated by + 1 x alpha w.r.t the tendon
px1: a sin theta cos alpha + b sin theta sin alpha
py1: b sin theta cos alpha - a sin theta sin alpha
pz1: cos theta
direction at third SP
px2: a sin theta cos alpha * C2 - b sin theta cos alpha S2
py2: b sin theta cos alpha * C2 + a sin theta cos alpha S2
Definition at line 1378 of file SiTrackMaker_xk.cxx.
|
private |
This is a refinement of the global position for strip space-points.
It uses the direction estimate to fix the hit position along the strip axis (non-sensitive direction).
pick up the two components of the space point
get the two ends of the strip in the global frame for each of the two clusters
get the "strip axis" in the global frame for each of the two clusters these define two planes in which the strips are sensitive
get the connection vector between the bottom ends of the two strips
divide max distance by the first strip length
Get the cross products of the direction vector and the strip axes. This gives us a normal representation of the planes containing both.
The two planes are still only defined up to a shift along the normal. Now, we fix this degree of freedom by requiring that the u-plane (perpendicular to momentum and second strip direction) should actually contain the second strip itself. To do so, we virtually 'hold' the u-plane at its intersection plane with the first strip, starting with it touching the very bottom of the first strip, and then move the intersection point along the strip. We can thus parameterise the shift by the distance we need to walk this way
Find the maximum distance we can go until we have walked past the full length of the first strip. Equivalent to the projection of the full strip length on the u-plane normal.
if no such component, bail out - no solution exists
The distance we need to walk to contain the second strip in the u-plane is is obtained by projecting the separation vector between the strip starting points onto the normal. (remember, we virtually start our shift with the u-plane intersecting the first strip at its starting point). We normalise the shifts to the maximum allowed shift.
this is playing the same game, but for shifting the v-plane w.r.t the version that intersects with the bottom of the second strip until we contain the first strip in it. du has the same length as dv (symmetry of the problem)
check that the result is valid. We want the final fixed planes to still intersect the respective other strip within some tolerance. Keep in mind that s=0 --> intersect start of strip, s == 1 --> intersect end of strip. We apply a tolerance beyond each end
now, update the position estimate as the intersection of the updated u-plane with the first strip.
Definition at line 1263 of file SiTrackMaker_xk.cxx.
|
private |
first, fill the arrays with the global positions of the 3 points
for PPP seeds, we are done
for SSS, we need some extra work
try to refine the position estimate for strip SP using the cluster information in combination with the direction estimate
Definition at line 1221 of file SiTrackMaker_xk.cxx.
|
overridevirtual |
Get beam geometry
read the config string for the field mode
this one is the default
Get detector elements road maker tool
Get combinatorial track finder tool
Get trigger track following tool
Get trigger road predictor tool
Get seed to track conversion tool This is used if we want to write out the seeds for performance studies
flag for HI running
this is on by default in offline tracking
useSSSfilter is on by default in offline, m_useHClusSeed is off by default.
pt cut can never be below 20 MeV
initialize counters
Definition at line 38 of file SiTrackMaker_xk.cxx.
|
private |
Definition at line 1343 of file SiTrackMaker_xk.cxx.
|
private |
Definition at line 1359 of file SiTrackMaker_xk.cxx.
|
staticprivate |
Definition at line 1179 of file SiTrackMaker_xk.cxx.
|
staticprivate |
Definition at line 1136 of file SiTrackMaker_xk.cxx.
|
overridevirtual |
initialize beam position
propagate pixel / strip usage to the event data object
build a holder for the configured track quality cuts
Setup New event for track finder tool
Erase cluster to track association m_seedsfilter is true in the vast majority of all applications, so this is usually done
Erase statistic information
retrieve calo seeds for brem fit
retrieve hadronic seeds for SSS seed filter
if we want to write out the seeds, also call newEvent for the seed-to-track converter
Definition at line 493 of file SiTrackMaker_xk.cxx.
|
private |
counter for clusters on track
start by checking the first cluster - always needed
lookup if the cluster is already used by another track
add tracks consuming our seed space-points to the trackseed list.
increment cluster counter
now, prepare to check also the second cluster on any strip seed
if we don't have one, nothing to do
otherwise, same game as before. Note that a track consuming both clusters on a strip hit is counted twice into the map
incremenent counter again
check if at least on cluster is not already used by any track. This works since the multiset allows adding the same track multiple times If this is the case, we accept the seed.
in the case of HI reco, we accept any 3-cluster (PPP) seed.
Now we look for the track consuming the largest number of clusters
This is done by looping over all tracks using any of our clusters, and counting the appearance of each track in the multiset. If one single track contains all of the clusters (--> is included n times), we reject this seed.
loop over the list of tracks
if this is a new track, reset the counter
otherwise increment the counter. If this track has all clusters from the seed on it, reject the event
If we have no single track 'eating' all of our clusters, we accept the seed
Definition at line 1067 of file SiTrackMaker_xk.cxx.
|
overridevirtual |
Definition at line 554 of file SiTrackMaker_xk.cxx.
|
privatedelete |
|
private |
|
staticprivate |
Definition at line 1148 of file SiTrackMaker_xk.cxx.
|
inlineprivate |
helper for working with the stat arrays
Definition at line 263 of file SiTrackMaker_xk.h.
|
inlineprivate |
Definition at line 266 of file SiTrackMaker_xk.h.
|
private |
Definition at line 1005 of file SiTrackMaker_xk.cxx.
|
mutableprivate |
Definition at line 184 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 185 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 186 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 187 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 188 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 189 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 190 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 191 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 192 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 193 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 194 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 195 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 196 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 197 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 198 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 200 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 201 of file SiTrackMaker_xk.h.
|
private |
Definition at line 131 of file SiTrackMaker_xk.h.
|
private |
Definition at line 133 of file SiTrackMaker_xk.h.
|
private |
Definition at line 134 of file SiTrackMaker_xk.h.
|
private |
Definition at line 145 of file SiTrackMaker_xk.h.
|
mutableprivate |
Definition at line 183 of file SiTrackMaker_xk.h.
|
private |
Definition at line 163 of file SiTrackMaker_xk.h.
|
private |
Definition at line 160 of file SiTrackMaker_xk.h.
|
private |
Definition at line 168 of file SiTrackMaker_xk.h.
|
private |
Definition at line 167 of file SiTrackMaker_xk.h.
|
private |
Definition at line 132 of file SiTrackMaker_xk.h.
|
private |
Definition at line 140 of file SiTrackMaker_xk.h.
|
private |
Definition at line 176 of file SiTrackMaker_xk.h.
|
private |
Definition at line 175 of file SiTrackMaker_xk.h.
|
private |
Definition at line 226 of file SiTrackMaker_xk.h.
|
private |
Definition at line 151 of file SiTrackMaker_xk.h.
|
private |
Definition at line 146 of file SiTrackMaker_xk.h.
|
private |
Definition at line 164 of file SiTrackMaker_xk.h.
|
private |
Definition at line 162 of file SiTrackMaker_xk.h.
|
private |
Definition at line 165 of file SiTrackMaker_xk.h.
|
private |
Definition at line 141 of file SiTrackMaker_xk.h.
|
private |
Definition at line 166 of file SiTrackMaker_xk.h.
|
private |
Definition at line 169 of file SiTrackMaker_xk.h.
|
private |
Definition at line 158 of file SiTrackMaker_xk.h.
|
private |
Definition at line 159 of file SiTrackMaker_xk.h.
|
private |
Definition at line 122 of file SiTrackMaker_xk.h.
|
private |
Definition at line 152 of file SiTrackMaker_xk.h.
|
private |
Definition at line 139 of file SiTrackMaker_xk.h.
|
private |
Definition at line 126 of file SiTrackMaker_xk.h.
|
private |
Definition at line 174 of file SiTrackMaker_xk.h.
|
private |
Definition at line 123 of file SiTrackMaker_xk.h.
|
private |
Definition at line 125 of file SiTrackMaker_xk.h.
|
private |
Definition at line 124 of file SiTrackMaker_xk.h.
|
private |
Definition at line 144 of file SiTrackMaker_xk.h.
|
private |
Definition at line 147 of file SiTrackMaker_xk.h.
|
private |
Definition at line 148 of file SiTrackMaker_xk.h.
|
private |
Definition at line 150 of file SiTrackMaker_xk.h.
|
private |
Definition at line 142 of file SiTrackMaker_xk.h.
|
private |
Definition at line 143 of file SiTrackMaker_xk.h.
|
private |
Definition at line 149 of file SiTrackMaker_xk.h.
|
private |
Definition at line 154 of file SiTrackMaker_xk.h.
|
private |
Definition at line 153 of file SiTrackMaker_xk.h.
|
private |
Definition at line 155 of file SiTrackMaker_xk.h.
|
private |
Definition at line 157 of file SiTrackMaker_xk.h.
|
private |
Definition at line 156 of file SiTrackMaker_xk.h.
|
private |
Definition at line 161 of file SiTrackMaker_xk.h.