ATLAS Offline Software
|
#include <ITkSiSpacePointsSeedMaker.h>
Public Member Functions | |
Standard tool methods | |
SiSpacePointsSeedMaker (const std::string &, const std::string &, const IInterface *) | |
virtual | ~SiSpacePointsSeedMaker ()=default |
virtual StatusCode | initialize () override |
virtual StatusCode | finalize () override |
Methods to initialize tool for new event or region | |
virtual void | newEvent (const EventContext &ctx, EventData &data, int iteration) const override |
virtual void | newRegion (const EventContext &ctx, EventData &data, const std::vector< IdentifierHash > &vPixel, const std::vector< IdentifierHash > &vStrip) const override |
virtual void | newRegion (const EventContext &ctx, EventData &data, const std::vector< IdentifierHash > &vPixel, const std::vector< IdentifierHash > &vStrip, const IRoiDescriptor &iRD) const override |
Methods to initilize different strategies of seeds production | |
virtual void | find2Sp (EventData &data, const std::list< Trk::Vertex > &lv) const override |
with two space points with or without vertex constraint More... | |
virtual void | find3Sp (const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv) const override |
with three space points with or without vertex constraint More... | |
virtual void | find3Sp (const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv, const double *zVertex) const override |
with three space points with or without vertex constraint with information about min and max Z of the vertex More... | |
virtual void | findVSp (const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv) const override |
with variable number space points with or without vertex constraint Variable means (2,3,4,....) any number space points More... | |
Iterator through seeds pseudo collection | |
produced accordingly methods find | |
virtual const InDet::SiSpacePointsSeed * | next (const EventContext &ctx, EventData &data) const override |
virtual void | writeNtuple (const InDet::SiSpacePointsSeed *seed, const Trk::Track *track, int seedType, long eventNumber) const override |
virtual bool | getWriteNtupleBoolProperty () const override |
Private Attributes | |
Data handles | |
SG::ReadHandleKey< SpacePointContainer > | m_spacepointsStrip {this, "SpacePointsStripName", "ITkStripSpacePoints", "Strip space points container"} |
SG::ReadHandleKey< SpacePointContainer > | m_spacepointsPixel {this, "SpacePointsPixelName", "ITkPixelSpacePoints", "Pixel space points container"} |
SG::ReadHandleKey< SpacePointOverlapCollection > | m_spacepointsOverlap {this, "SpacePointsOverlapName", "OverlapSpacePoints"} |
SG::ReadHandleKey< Trk::PRDtoTrackMap > | m_prdToTrackMap {this,"PRDtoTrackMap","","option PRD-to-track association"} |
SG::ReadCondHandleKey< InDet::BeamSpotData > | m_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"} |
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > | m_fieldCondObjInputKey |
Properties, which will not be changed after construction | |
BooleanProperty | m_pixel {this, "usePixel", true} |
BooleanProperty | m_strip {this, "useStrip", true} |
BooleanProperty | m_useOverlap {this, "useOverlapSpCollection", true} |
IntegerProperty | m_maxsize {this, "maxSize", 10000} |
IntegerProperty | m_maxsizeSP {this, "maxSizeSP", 4096} |
IntegerProperty | m_maxOneSize {this, "maxSeedsForSpacePoint", 5} |
FloatProperty | m_etamax {this, "etaMax", 2.7} |
FloatProperty | m_r1minv {this, "minVRadius1", 0.} |
FloatProperty | m_r1maxv {this, "maxVRadius1", 60.} |
FloatProperty | m_r2minv {this, "minVRadius2", 70.} |
FloatProperty | m_r2maxv {this, "maxVRadius2", 200.} |
FloatProperty | m_drmin {this, "mindRadius", 5.} |
FloatProperty | m_drmax {this, "maxdRadius", 300.} |
FloatProperty | m_zmin {this, "minZ", -250.} |
FloatProperty | m_zmax {this , "maxZ", +250.} |
FloatProperty | m_r_rmin {this, "radMin", 0.} |
FloatProperty | m_binSizeR {this, "radStep", 2.} |
FloatProperty | m_dzver {this, "maxdZver", 5.} |
FloatProperty | m_dzdrver {this, "maxdZdRver", 0.02} |
FloatProperty | m_maxdImpact {this, "maxdImpact", 10.} |
FloatProperty | m_maxdImpactSSS {this, "maxdImpactSSS", 20.} |
FloatProperty | m_dzmaxPPP {this, "dZmaxForPPPSeeds", 600.} |
FloatProperty | m_maxScore {this, "maximumAcceptedSeedScore", 100.} |
IntegerProperty | m_maxOneSizeSSS {this, "maxSeedsForSpacePointStrips", 5} |
IntegerProperty | m_maxOneSizePPP {this, "maxSeedsForSpacePointPixels", 5} |
BooleanProperty | m_alwaysKeepConfirmedPixelSeeds {this, "alwaysKeepConfirmedPixelSeeds", false} |
BooleanProperty | m_alwaysKeepConfirmedStripSeeds {this, "alwaysKeepConfirmedStripSeeds", false} |
BooleanProperty | m_fastTracking {this, "useFastTracking", false} |
FloatProperty | m_seedScoreBonusPPP {this, "seedScoreBonusPPP", -200.} |
FloatProperty | m_seedScoreBonusSSS {this, "seedScoreBonusSSS", -400.} |
BooleanProperty | m_optimisePhiBinning {this, "optimisePhiBinning", true} |
FloatProperty | m_rminSSS {this, "radMinSSS", 400.} |
FloatProperty | m_rmaxSSS {this, "radMaxSSS", 1000.} |
BooleanProperty | m_isLRT {this, "isLRT", false} |
FloatProperty | m_drminPPP {this, "mindRadiusPPP", 6.} |
FloatProperty | m_drmaxPPP {this, "maxdRadiusPPP", 150.} |
FloatProperty | m_zmaxPPP {this, "maxZPPP", 2700.} |
FloatProperty | m_drminSSS {this, "mindRadiusSSS", 20.} |
FloatProperty | m_drmaxSSS {this, "maxdRadiusSSS", 300.} |
FloatProperty | m_zmaxSSS {this, "maxZSSS", 2700.} |
FloatProperty | m_dImpactCutSlopeUnconfirmedSSS {this, "dImpactCutSlopeUnconfirmedSSS", 1.0} |
FloatProperty | m_dImpactCutSlopeUnconfirmedPPP {this, "dImpactCutSlopeUnconfirmedPPP", 0.} |
FloatProperty | m_seedScoreBonusConfirmationSeed {this, "seedScoreBonusConfirmationSeed", -200.} |
BooleanProperty | m_useSeedConfirmation {this, "useSeedConfirmation", false} |
Properties, which will be updated in initialize | |
FloatProperty | m_etamin {this, "etaMin", 0.} |
FloatProperty | m_r_rmax {this, "radMax", 1100.} |
FloatProperty | m_ptmin {this, "pTmin", 500.} |
FloatProperty | m_umax {this, "minSeedsQuality", 0.} |
Properties, which will be updated in event methods, checketa is prepared in EventData. | |
BooleanProperty | m_checketa {this, "checkEta", false} |
Data members, which are updated only in initialize | |
int | m_outputlevel {0} |
float | m_dzdrmin0 {0.} |
float | m_dzdrmax0 {0.} |
float | m_ipt {0.} |
float | m_ipt2 {0.} |
float | m_COF {134 * .05f * 9} |
float | m_dzMaxFast {200.} |
float | m_R2MaxFast {2500.} |
float | m_rmaxPPP {140.} |
float | m_dzmaxSSS {900.} |
float | m_drminSeedConf {5.} |
Properties of writeNTuple for validation purpose | |
Gaudi::Property< bool > | m_writeNtuple {this, "WriteNtuple", false, "Flag to write Validation Ntuples"} |
ServiceHandle< ITHistSvc > | m_thistSvc |
Flag to write validation ntuples. Turned off by default. More... | |
TTree * | m_outputTree |
std::mutex | m_mutex |
std::string m_treeName | ATLAS_THREAD_SAFE |
TString m_treeFolder | ATLAS_THREAD_SAFE |
float m_d0 | ATLAS_THREAD_SAFE = 0 |
float m_z0 | ATLAS_THREAD_SAFE = 0 |
float m_pt | ATLAS_THREAD_SAFE = 0 |
float m_eta | ATLAS_THREAD_SAFE = 0 |
double m_x1 | ATLAS_THREAD_SAFE = 0 |
double m_x2 | ATLAS_THREAD_SAFE = 0 |
double m_x3 | ATLAS_THREAD_SAFE = 0 |
double m_y1 | ATLAS_THREAD_SAFE = 0 |
double m_y2 | ATLAS_THREAD_SAFE = 0 |
double m_y3 | ATLAS_THREAD_SAFE = 0 |
double m_z1 | ATLAS_THREAD_SAFE = 0 |
double m_z2 | ATLAS_THREAD_SAFE = 0 |
double m_z3 | ATLAS_THREAD_SAFE = 0 |
double m_r1 | ATLAS_THREAD_SAFE = 0 |
double m_r2 | ATLAS_THREAD_SAFE = 0 |
double m_r3 | ATLAS_THREAD_SAFE = 0 |
float m_quality | ATLAS_THREAD_SAFE = 0 |
int m_type | ATLAS_THREAD_SAFE = 0 |
double m_dzdr_t | ATLAS_THREAD_SAFE = 0 |
double m_dzdr_b | ATLAS_THREAD_SAFE = 0 |
bool m_givesTrack | ATLAS_THREAD_SAFE = 0 |
float m_trackPt | ATLAS_THREAD_SAFE = 0 |
float m_trackEta | ATLAS_THREAD_SAFE = 0 |
long m_eventNumber | ATLAS_THREAD_SAFE = 0 |
Binning parameters | |
int | m_nBinsR {0} |
number of bins in the radial coordinate More... | |
int | m_maxPhiBinPPP {0} |
number of bins in phi More... | |
float | m_inverseBinSizePhiPPP {0} |
cache the inverse bin size in phi which we use - needed to evaluate phi bin locations More... | |
int | m_maxPhiBinSSS {0} |
float | m_inverseBinSizePhiSSS {0} |
int | m_maxBinPhiVertex {0} |
float | m_inverseBinSizePhiVertex {0} |
float | m_seedScoreThresholdPPPConfirmationSeed {0.} |
Seed score thresholds defined based on the modifiers defined as configurables above. More... | |
float | m_seedScoreThresholdSSSConfirmationSeed {0.} |
max (score is assigned negative sign) score for SSS seeds with confirmation seed requirement. More... | |
std::array< int, arraySizePhiZ > | m_nNeighbourCellsBottomPPP {} |
arrays associating bins to each other for SP formation More... | |
std::array< int, arraySizePhiZ > | m_nNeighbourCellsTopPPP {} |
number of neighbouring phi-z bins to consider when looking for "top SP" candidates for each phi-z bin More... | |
std::array< std::array< int, arraySizeNeighbourBins >, arraySizePhiZ > | m_neighbourCellsBottomPPP {} |
mapping of neighbour cells in the 2D phi-z binning to consider for the "bottom SP" search for central SPs in each phi-z bin. Number of valid entries stored in m_nNeighboursPhiZbottom More... | |
std::array< std::array< int, arraySizeNeighbourBins >, arraySizePhiZ > | m_neighbourCellsTopPPP {} |
mapping of neighbour cells in the 2D phi-z binning to consider for the "top SP" search for central SPs in each phi-z bin. Number of valid entries stored in m_nNeighboursPhiZtop More... | |
std::array< int, arraySizePhiZ > | m_nNeighbourCellsBottomSSS {} |
std::array< int, arraySizePhiZ > | m_nNeighbourCellsTopSSS {} |
std::array< std::array< int, arraySizeNeighbourBins >, arraySizePhiZ > | m_neighbourCellsBottomSSS {} |
std::array< std::array< int, arraySizeNeighbourBins >, arraySizePhiZ > | m_neighbourCellsTopSSS {} |
std::array< int, arraySizePhiZV > | m_nNeighboursVertexPhiZ {} |
std::array< std::array< int, arraySizeNeighbourBinsVertex >, arraySizePhiZV > | m_neighboursVertexPhiZ {} |
Print internal tool parameters and status | |
enum | Size { arraySizePhi =200, arraySizeZ =11, arraySizePhiZ =arraySizePhi*arraySizeZ, arraySizeNeighbourBins =9, arraySizePhiV =100, arraySizeZV =3, arraySizePhiZV =arraySizePhiV*arraySizeZV, arraySizeNeighbourBinsVertex =6 } |
enum for array sizes Note that this stores the maximum capacities, the actual binnings do not always use the full size. More... | |
virtual MsgStream & | dump (EventData &data, MsgStream &out) const override |
Disallow default instantiation, copy, assignment | |
SiSpacePointsSeedMaker ()=delete | |
SiSpacePointsSeedMaker (const SiSpacePointsSeedMaker &)=delete | |
SiSpacePointsSeedMaker & | operator= (const SiSpacePointsSeedMaker &)=delete |
MsgStream & | dumpConditions (EventData &data, MsgStream &out) const |
void | buildFrameWork () |
void | buildBeamFrameWork (EventData &data) const |
SiSpacePointForSeed * | newSpacePoint (EventData &data, const Trk::SpacePoint *const &sp) const |
Create a SiSpacePointForSeed from the space point. More... | |
SiSpacePointForSeed * | newSpacePoint (EventData &data, const Trk::SpacePoint *const &sp, float *r, bool usePixStripInform=false) const |
void | newOneSeed (EventData &data, SiSpacePointForSeed *&, SiSpacePointForSeed *&, SiSpacePointForSeed *&, float, float) const |
void | newOneSeedQ (EventData &data, SiSpacePointForSeed *&, SiSpacePointForSeed *&, SiSpacePointForSeed *&, float, float) const |
void | newOneSeedWithCurvaturesComparison (EventData &data, SiSpacePointForSeed *&, SiSpacePointForSeed *&, float) const |
void | fillLists (EventData &data) const |
void | production2Sp (EventData &data) const |
void | production3Sp (EventData &data) const |
void | production3SpSSS (EventData &data, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &iter_bottomCands, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &iter_endBottomCands, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &iter_topCands, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &iter_endTopCands, const int numberBottomCells, const int numberTopCells, int &nseed) const |
: Seed production from space points. More... | |
void | production3SpPPP (EventData &data, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &iter_bottomCands, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &iter_endBottomCands, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &iter_topCands, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &iter_endTopCands, const int numberBottomCells, const int numberTopCells, int &nseed) const |
void | production3SpTrigger (EventData &, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &, std::array< std::vector< SiSpacePointForSeed * >::iterator, arraySizeNeighbourBins > &, const int, const int, int &) const |
as above, but for the trigger More... | |
void | newOneSeedWithCurvaturesComparisonSSS (EventData &data, SiSpacePointForSeed *&SPb, SiSpacePointForSeed *&SP0, float Zob) const |
This creates all possible seeds with the passed central and bottom SP, using all top SP candidates which are stored in the data.CmSp member. More... | |
void | newOneSeedWithCurvaturesComparisonPPP (EventData &data, SiSpacePointForSeed *&SPb, SiSpacePointForSeed *&SP0, float Zob) const |
void | newOneSeedWithCurvaturesComparisonSeedConfirmation (EventData &data, SiSpacePointForSeed *&SPb, SiSpacePointForSeed *&SP0, float Zob) const |
bool | isConfirmedSeed (const SiSpacePointForSeed *bottomSP, const SiSpacePointForSeed *topSP, float quality) const |
Helper method to determine if a seed is 'confirmed' - this means that a second seed exists with compatible curvature, the same bottom and central SP, but a different third SP. More... | |
void | sort (std::vector< InDet::FloatInt > &s, int start, int size) const |
bool | newVertices (EventData &data, const std::list< Trk::Vertex > &) const |
void | findNext (EventData &data) const |
bool | isZCompatible (EventData &data, float Zv, float R, float T) const |
bool | isUsed (const Trk::SpacePoint *, const Trk::PRDtoTrackMap &prd_to_track_map) const |
void | initializeEventData (EventData &data, const EventContext &ctx) const |
static MsgStream & | dumpEvent (EventData &data, MsgStream &out) |
static void | buildConnectionMaps (std::array< int, arraySizePhiZ > &nNeighbourCellsBottom, std::array< int, arraySizePhiZ > &nNeighbourCellsTop, std::array< std::array< int, arraySizeNeighbourBins >, arraySizePhiZ > &neighbourCellsBottom, std::array< std::array< int, arraySizeNeighbourBins >, arraySizePhiZ > &neighbourCellsTop, int maxPhiBin, bool isSSS) |
static void | buildConnectionMapsVertex (std::array< int, arraySizePhiZV > &nNeighbourCells, std::array< std::array< int, arraySizeNeighbourBinsVertex >, arraySizePhiZV > &neighbourCells, int maxPhiBin) |
Build maps for radius-azimuthal-Z sorted collections for Z Similar logic to the above, just simplified as only 3 regions in z exist! More... | |
static float | azimuthalStep (const float pTmin, const float maxd0, const float Rmin, const float Rmax) |
Determine the expected azimuthal trajectory displacement in phi in presence of the magnetic field for a particle with momentum pTmin and impact parameter maxd0, moving from a radial coordinate Rmin outward to Rmax. More... | |
static void | newSeed (EventData &data, SiSpacePointForSeed *&, SiSpacePointForSeed *&, float) |
static void | fillSeeds (EventData &data) |
static void | pixInform (const Trk::SpacePoint *sp, float *r) |
static void | stripInform (EventData &data, const Trk::SpacePoint *sp, float *r) |
static void | erase (EventData &data) |
static void | convertToBeamFrameWork (EventData &data, const Trk::SpacePoint *const &, float *) |
Class for track candidates generation using space points information for standard Atlas geometry
In AthenaMT, event dependent cache inside ITk::SiSpacePointsSeedMaker is not preferred. SiSpacePointsSeedMakerEventData = EventData class holds event dependent data for ITk::SiSpacePointsSeedMaker. Its object is instantiated in SiSPSeededTrackFinder::execute.
Definition at line 76 of file ITkSiSpacePointsSeedMaker.h.
|
private |
enum for array sizes Note that this stores the maximum capacities, the actual binnings do not always use the full size.
See data members below for the actual binning paramaters, which are determined in buildFramework.
Definition at line 151 of file ITkSiSpacePointsSeedMaker.h.
ITk::SiSpacePointsSeedMaker::SiSpacePointsSeedMaker | ( | const std::string & | t, |
const std::string & | n, | ||
const IInterface * | p | ||
) |
Definition at line 37 of file ITkSiSpacePointsSeedMaker.cxx.
|
virtualdefault |
|
privatedelete |
|
privatedelete |
|
staticprivate |
Determine the expected azimuthal trajectory displacement in phi in presence of the magnetic field for a particle with momentum pTmin and impact parameter maxd0, moving from a radial coordinate Rmin outward to Rmax.
This method is used to determine the optimal binning of the phi-z regions we consider in the seed making, to ensure we contain the hits from our softest tracks in a set of consecutive bins.
[in] | pTmin | minimum pt cut applied in MeV |
[in] | maxD0 | maximum d0 allowed |
[in] | Rmin | starting radius for trajectory displacement |
[in] | Rmax | end radius for trajectory displacement |
here we approximate the largest curvature that can be expected for the seeds we build using R[mm] ~ pT[MeV] / (0.3 * B[T]), with B == 2T
for LRT, the maximum allowed d0 may be larger than the radius at which the innermost hit is possible. In that case, our "worst case" trajectory generating the largest phi displacement will be the one with a hit at Rmin and d0 == Rmin.
Definition at line 1131 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
Definition at line 1158 of file ITkSiSpacePointsSeedMaker.cxx.
|
staticprivate |
Build maps for radius-azimuthal-Z sorted collections. Here, we associate which bins are 'connected' to a given phi-Z bin for the seeding
< loop around at edges of range
< loop around at edges of range
For each azimuthal region loop through all Z regions
we always include the two neighbouring phi bins for the top / bottom space point search
in addition, we usually add at least one neighbouring slice in Z. This depends on where we are in the detector. Guide for the following: z == 5: central z region, |z|<250mm 0 1 2 3 4 5 6 7 8 9 10 z bin index -----------------------------------—> Z[mm] Z=-2500 IP,Z=0 Z=+2500
for the top SP search in positive z, if we are not in the outermost z region, we include the neighbouring Z region on the right (away from the IP). In z = 10, the most forward, we do not have such a 'right side' neighbour we can add
for the bottom SP in negative non-central z, we include the neighbouring z region on the right (towards the IP) in the bottom neighbour search
z bins 3 / 7: 450mm < |z| < 925mm.: also include the central z region in the bottom SP search.
likely for PPP seeds with hits in pixel barrel + endcaps
Only used for strip seeds
Definition at line 947 of file ITkSiSpacePointsSeedMaker.cxx.
|
staticprivate |
Build maps for radius-azimuthal-Z sorted collections for Z Similar logic to the above, just simplified as only 3 regions in z exist!
For each azimuthal region loop through central Z regions
always include the two neighbour bins in phi
for the positive z bin, include the central z slice as well
for the negative z bin, include the central z slice as well
Definition at line 1088 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
ensure consistency in the transverse IP cuts
symmetrise eta cut if eta min not explicitly set
set dz/dr cut values based on eta cuts
cache inverse pt cuts
set up the score thresholds based on the user-supplied properties The score of any seeds will always be >= the bonus applied, since the starting value is |d0|. Hence, by subtracting one, we get all seeds which have received an additional bonus in addition to the PPP/SSS one, which is the confirmation one by construction.
Build radius sorted containers
Now we construct the radius-azimuthal sorted containers. Binning is determined semi-dynamically based on the tool config
determine the phi binning
The max Nb. of bins possible is given by the binning enum
< for run-3: 200 : 6.28 ~ 31.8, bin size 0.0314
derive the optimum bin size in phi for our needs. We do this by checking the size needed for each of the passes we run, and then pick the larger one (more conservative). This is slightly less optimal than using separate settings per pass, but avoids having to book and store in memory two distinct R-phi-Z maps.
case 1: PPP seeds, if we use them
approximate lowest R location of pixel hits (driven by barrel)
approximate largest R location of pixel hits (driven by endcap)
case 2: SSS seeds, if we use them
this is the default phi binning as operated in release 21 - optimised for a trajectory with 400 MeV, from the origin, and Rmin = 0 / Rmax = 600mm float ptm = 400.;
if we cut below 400 MeV, adapt the ptm
truncate the bin size to fall within our thresholds
now we can determine the number of bins by dividing the interval by the bin size
additional protection against too many bins. Should not happen given constraints above
recompute inverse bin size, taking into account rounding + truncation
same logic as for the space points above
Definition at line 829 of file ITkSiSpacePointsSeedMaker.cxx.
|
staticprivate |
Definition at line 1192 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
Definition at line 615 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
Definition at line 626 of file ITkSiSpacePointsSeedMaker.cxx.
|
staticprivate |
Definition at line 743 of file ITkSiSpacePointsSeedMaker.cxx.
|
staticprivate |
Definition at line 1410 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
The following is done separately for each iteration. We sort the hits in our radially sorted lists into the z-phi binning, keeping only those we want to consider to reduce combinatorics
Note that the use of r_first to start the loop is what ensures that the first iteration is a pure SSS pass. In newEvent, r_first is set to the bin after the last radial bin containing Pixel space points. For the second iteration, we reset it to zero and thus start in the pixels.
< if we encounter Si hits at z > +100m, we are probably not in ATLAS anymore...
skip empty radial bins
remember the first non-empty bin we encounter
Azimuthal angle sort find the bin by dividing phi in 0...2pi by the bin size
handle overflows
z-coordinate sort. Here, we have a variable bin size. Use a map to replace 5 levels of nested ternaries for a somewhat more readable notation while retaining a logN lookup speed
some protection in case things go REALLY wrong
< z beyond the max: return last bin
2D bin index - computed from the 1D using standard 2D array bin arithmetics
increment total counter of space points. This is not reset between iterations.
the conditional seems to always be true. The rfz_index vector stores the 2D bin for each SP in the radius-sorted map. This way, we obtain effectively a 3D binning in r(via the r-sorted vector), phi and z (via the 2D index)
Definition at line 1203 of file ITkSiSpacePointsSeedMaker.cxx.
|
staticprivate |
no seeds - nothing to do.
loop over the seed candidates we have stored in the event data
quality score of the seed, lower = better, list is sorted by quality
this will set the quality member of all points on the seed to the quality score of this candidate
if we have space, write the seed directly into an existing slot
otherwise, extend the seed list and update the iterators
Definition at line 2744 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
Definition at line 130 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
with two space points with or without vertex constraint
Definition at line 454 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
with three space points with or without vertex constraint
call fillLists to repopulate the candidate space points
reset the Z interval stored in the data object
mode 2 if we have no vertices in the list, otherwise mode 3
copy the vertices into the data object, if we have any. Note that by construction, newv will ALWAYS be false, also if we pass vertices.
update the data object's config
< This performs the actual seed finding
reset the i_ITkSeed iterator - this is used to return the seeds to the consumer when they call next()
Definition at line 464 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
with three space points with or without vertex constraint with information about min and max Z of the vertex
call fillLists to repopulate the candidate space points
Update the data object's Z interval based on the interval passed as arg to this function.
< don't go beyond user-specified intervals
< don't go beyond user-specified intervals
mode 2 when working with the Z constraint
copy the vertices into the data object, if we have any. Note that by construction, newv will ALWAYS be false, also if we pass vertices.
update the data object's config
< This performs the actual seed finding
reset the i_ITkSeed iterator - this is used to return the seeds to the consumer when they call next()
Definition at line 515 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
Definition at line 769 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
with variable number space points with or without vertex constraint Variable means (2,3,4,....) any number space points
call fillLists to repopulate the candidate space points
Definition at line 572 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
Definition at line 3413 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
Definition at line 55 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
maxsize not used
sizeRF not used
Read the field information
retrieve field
Knowing the field (note that the field cache returns the field in units of kiloTesla!) allows to set the circle-radius to pT conversion factor.
See for example ATLAS-CONF-2010-072 R[mm] =pT[GeV] / (3·10−4×B[T]) = pT[MeV] / (300 *Bz[kT])
We actually estimate the circle diameter, 2R, in the seeding. So what we want is: 2R = pT[MeV] x 2 / (300 x Bz) = K x pT[MeV].
helper variables allowing us to directly apply our pt cut on the variables available at seed level. ipt2K is 1 / (K * 0.9 * pt cut)²
related to the mysterious magic number, m_COF{134*.05*9}
save magnetic field used for later
Definition at line 2947 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
Helper method to determine if a seed is 'confirmed' - this means that a second seed exists with compatible curvature, the same bottom and central SP, but a different third SP.
This information is stored in a modification of the seed quality, which we check here.
[in] | bottomSP | bottom space point |
[in] | topSP | top space point |
[in] | quality | seed quality |
SSS seeds
PPP seeds
PPS: the confirmation is the only quality modifier applied
Definition at line 3351 of file ITkSiSpacePointsSeedMaker.cxx.
|
inlineprivate |
Definition at line 519 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 2837 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
if not done so, book the arrays etc inside the event data object
Erase any existing entries in the data object
pass the iteration info into our data object
< max score, where low scores are "better".
build the r-binning.
set the spacepoint iterator to the beginning of the space-point list
as for the pixel, veto already used SP if we are using the PRD to track map in laterpasses of track finding. Also, veto SP outside the maximum and minimum radii
create a space point and write it into the data object's list of points
Determine the radial bin
again store the SP in the r-binned vectors
update the count of SP in the given bin
update the r_index map and data.nr if needed
and increment the SP count too.
Get strip overlap space points containers from store gate
usual rejection of SP used in previous track finding passes if we run with the PRT to track map + check of the max and min radii
SP creation, entry into list of the data object
radial bin determination
insert into the "histogram" vector
update the counter for each bin content
update the bin index list and occupied bin counter
and the total SP count too.
loop over the pixel space points
if we use the PRD to track map and this SP has already been used in a track, bail out also skip any SP outside the r binning
create a SiSpacePointForSeed from the space point. This will also add the point to the l_spforseed list and update the i_spforseed iterator
this can occur if we fail the eta cut
determine the r-bin of this SP. done by dividing the radius by the bin size.
catch outliers
now add the SP to the r-binned vector
increment the counter for this bin
if this is the first time we see this bin in use, we update the index map for this bin to the radius bin index
update the space point counter
Definition at line 139 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
get the worst seed so far
There are three cases where we simply add our new seed to the list and push it into the map: a) we have not yet reached our max number of seeds
b) we have reached the max number but always want to keep confirmed seeds and the new seed is a confirmed one, with worse quality than the worst one so far
c) we have reached the max number but always want to keep confirmed seeds and the new seed of higher quality than the worst one so far, with the latter however being confirmed
otherwise, we check if there is a poorer-quality seed that we can kick out
Overwrite the parameters of the worst seed with the new one
re-insert it with its proper quality to make sure it ends up in the right place
and remove the entry with the old quality to avoid duplicates
Definition at line 2555 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
get the worst seed so far
There are three cases where we simply add our new seed to the list and push it into the map: a) we have not yet reached our max number of seeds
b) we have reached the max number but always want to keep confirmed seeds and the new seed is a confirmed one, with worse quality than the worst one so far
c) we have reached the max number but always want to keep confirmed seeds and the new seed of higher quality than the worst one so far, with the latter however being confirmed
otherwise, we check if there is a poorer-quality seed that we can kick out
Overwrite the parameters of the worst seed with the new one
re-insert it with its proper quality to make sure it ends up in the right place
and remove the entry with the old quality to avoid duplicates
Definition at line 2604 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
Definition at line 2658 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
sort common SP by curvature
check all possible common top SP
form a curvature interval cut
Now we look at the other SP candidates and try to find a confirmation seed, including the same centre/lower SP and giving a compatible curvature, but with the top SP in a different layer
if we are looking at the same SP, skip it
if we have a lower curvature than the minimum, skip - and remember to not bother with this candidate again later, as the vectors are curvature-sorted
abort once the the curvature gets too large
Definition at line 3102 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
sort common SP by curvature
check all possible common top SP
the seed quality is set to d0 initially
check the surface the hit is on
form a curvature interval cut
Note: The score modifiers used here have the purpose of separating the candidates into classes / groups disjoint from each other. So the score increment (200 by default) should exceed the maximum |d0| (base score) we expect to encounter to avoid overlap. For LRT, we may want to tune this!
if we have a SSS seed, boost the quality score by 400
if we have a PPP, boost the quality by 200
Now we look at the other SP candidates and try to find a confirmation seed, including the same centre/lower SP and giving a compatible curvature, but with the top SP in a different layer
if we are looking at the same SP, skip it
if we have a lower curvature than the minimum, skip - and remember to not bother with this candidate again later, as the vectors are curvature-sorted
abort once the the curvature gets too large
if both SP are on the surface, skip it
if the other SP is too close to the current top one, skip
kick this seed candidate if the score is too high (lower values = better)
if we have PPS seeds and no confirmation SP exists (which would give the -200 bonus) or the hits on this seed were already used on a higher quality PPP/SSS seed, kick this one
If we have a non-confirmed seed, apply a stricter d0 cut. This, is determined using the original cut and the score penalty modifier.
PPP seeds
SSS seeds
this is a good seed, save it (unless we have too many seeds per SP)
Definition at line 3213 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
This creates all possible seeds with the passed central and bottom SP, using all top SP candidates which are stored in the data.CmSp member.
Seeds are scored by a quality score seeded by abs(d0), and modified if there is a second-seed confirmation or in case of PPP/SSS topologies. Then, they are written out via the newOneSeed method.
[in] | SPb | Bottom Space point for the seed creation |
[in] | SP0 | Central Space point for the seed creation |
[in] | Zob | z0 estimate |
sort common SP by curvature
check all possible common top SP
form a curvature interval cut
Now we look at the other SP candidates and try to find a confirmation seed, including the same centre/lower SP and giving a compatible curvature, but with the top SP in a different layer
if we are looking at the same SP, skip it
if we have a lower curvature than the minimum, skip - and remember to not bother with this candidate again later, as the vectors are curvature-sorted
abort once the the curvature gets too large
this is a good seed, save it (unless we have too many seeds per SP)
Definition at line 3015 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
build the r-binning.
set the spacepoint iterator to the beginning of the space-point list
Definition at line 313 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
Definition at line 425 of file ITkSiSpacePointsSeedMaker.cxx.
|
staticprivate |
Definition at line 2930 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
Create a SiSpacePointForSeed from the space point.
This will also add the point to the data object's l_spforseed list and update its i_spforseed iterator to point to the entry after the new SP for further additions. Returns a nullptr if the SP fails the eta cut, should we apply one
[in,out] | data | Provides beam spot location, receives updates to the l_spforseed and i_spforseed members |
[in] | sp | Input space point. |
Definition at line 2860 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
r will store the coordinates of the space point relative to the beam spot
if needed, apply eta criterion
If we have previously populated the list and just reset the iterator when re-initialising the data object, then we re-use existing entries
re-use existing entry at the current location
and then update the existing entry with the new SP and location. Unfortunately, set still relies on C-arrays...
otherwise, the list needs to grow
set our return pointer
and make sure to update the iterator
Definition at line 2866 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
reset the isvertex flag
if we had no vertices before and have none now, we can exit right away
clean up the vertex list
if we have no vertices now, we can exit
otherwise, update the data with the new vertices
and also update the z interval, adding 20mm before/after the first/last vertex in z make sure not to extend the interval beyond the user-configured z interval.
Definition at line 787 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
This only holds if we call next() without manually calling newEvent/find3Sp
If we are out of seeds, call findNext to see if we can find more.
findNext will call production3Sp again IF data.endlist is false, which is only the case if the last run of production3Sp did not run to the end or if we did not run seed finding before For run-3 offline, this will not do anything.
if no new seeds were found, exit
iterate until we find a valid seed satisfying certain quality cuts in set3
then return this next seed candidate
same as above for 2SP
Definition at line 2792 of file ITkSiSpacePointsSeedMaker.cxx.
|
privatedelete |
|
staticprivate |
Definition at line 1349 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
Definition at line 1445 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
we need at least 3 SP in our phi-z binning, otherwise can't build 3-SP seeds
This method will run a separate seed formation round for each phi-Z region, taking the central SP from there and allowing the top/bottom SP to come from either the same or certain neighbouring bins.
The search in each region is performed in the overload of this method with the extended signature below. Here, we implement the loop over the 2D regions
Order how we walk across z. 0-4 are negative z, 5 is central z, 6-10 are positive z. 0 1 2 3 4 5 6 7 8 9 10 z bin index -----------------------------------—> Z[mm] Z=-2500 IP,Z=0 Z=+2500
prepare arrays to store the iterators over the SP containers for all neighbouring cells we wish to consider in the seed formation
counter for the found
prevent another pass from being run when we run out of Seeds
Loop through all azimuthal regions
For each azimuthal region loop through all Z regions
If we had to abort a previous run, continue where we left off
note that this loop follows the order within 'zBinIndex', not the ascending order of z regions. We start in the centre, not at -2500 mm, and then move outward.
can skip the rest if this particular 2D bin is empty
count how many non-emtpy cells should be searched for the top and bottom neighbour
walk through the cells in phi-z we wish to consider for the bottom SP search. Typically, this will be 3 adjacent phi bins (including the one of the central SP) and possibly neighbours in z on side towards the IP or on both sides, depdending on the z region we are in
only do something if this cell is populated
plug the begin and end iterators to the SP in the cell into our array
walk through the cells in phi-z we wish to consider for the top SP search. Typically, this will be 3 adjacent phi bins (including the one of the central SP) and possibly neighbours in z on the side opposed to the IP or on both sides, depdending on the z region we are in
only do something if this cell is populated
plug the begin and end iterators to the SP in the cell into our array
now run the seed search for the current phi-z bin.
If we exceed the seed capacity, we stop here. Save where we were in z and phi, and set endlist to false. This will trigger another run of production3Sp when The client calls next() after processing all vertices seen so far (freeing up capacity).
Processed all seeds there are without aborting - no re-run needed!
Definition at line 1454 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
This method implements the seed search for a single phi-Z region of the detector. The central SP is taken from the region, while the top and bottom SP are allowed to come from either the same or a range of neighbouring cells.
iterator across the candidates for the central space point.
Next, we work out where we are within the ATLAS geometry. This will help us identify which space-points we need to consider as potential central points of a seed.
find the first central SP candidate above the minimum radius.
for the top candidates in the central phi-Z bin, we do not need to start at a smaller radius than the lowest-r valid central SP candidate
prepare cut values
keep track of the SP storace capacity. Extend it needed (should rarely be the case)
Loop through all central space point candidates
global coordinates of the central SP
for the central SP, we veto locations on the last disk - there would be no "outer" hits to complete a seed.
initialise a counter for found bottom links This also serves as an index in the data.SP vector
Top links production Loop over all the cells where we expect to find such SP
loop over each SP in each cell
evaluate the radial distance,
Comparison with vertices Z coordinates straight line extrapolation to r=0
this is effectively a segment-level eta cut - exclude too shallow seed segments
add SP to the list
< inverse distance to central SP
< transformed U coordinate
< transformed V coordinate
<squared Error on 1/tan theta coming from the space-point position errors
if we are exceeding the SP capacity of our data object, make it resize its vectors. Will add 50 slots by default, so rarely should happen more than once per event.
now continue with the bottom SP search. Make the counter start at Nt, as this serves as a running index in the SP list for this seed.
Bottom links production Loop over all the cells where we expect to find such SP
in each cell, loop over the space points
evaluate the radial distance between the central and bottom SP
if the points are too close in r, abort (future ones will be even closer).
Comparison with vertices Z coordinates straight line extrapolation to r=0
this is effectively a segment-level eta cut - exclude too shallow seed segments
add SP to the list
< inverse distance to central SP
< transformed U coordinate
< transformed V coordinate
<squared Error on 1/tan theta coming from the space-point position errors
if we are exceeding the SP capacity of our data object, make it resize its vectors. Will add 50 slots by default, so rarely should happen more than once per event.
if we found no bottom candidates (remember, Nb starts counting at Nt), abort
Three space points comparison first, loop over the bottom point candidates
retrieve the geometrical paranmeters w.r.t the central SP for this candidate
< 1/tanTheta estimate from central+bottom SP
bottom seed index after sorting
< this is the uncertainty in 1/tanTheta on the bottom segment resulting from the position errors in the 2 SP
< v-coordinate of bottom SP
< u-coordinate of bottom SP
< 1+1/tan²theta - converts transverse to total squared pt
< sqrt (1+1/tan²theta) - used to convert pt to |p|
< this, when divided by the 2R², yields an approximated multiple scattering term assuming the measured pt.
< this is an approximate worst case multiple scattering term assuming the lowest pt we allow and the estimated theta angle
max IP
inner loop over the top point candidates
Apply a cut on the compatibility between the r-z slope of the two seed segments. This is done by comparing the squared difference between slopes, and comparing to the squared uncertainty in this difference - we keep a seed if the difference is compatible within the assumed uncertainties.
average value of 1/tan(theta), approximate the slope at the location of the central space point
squared error on the difference in tan(theta) due to space point position errors.
pre-computed individual squared errors on 1/tan(theta) for the two segments
mixed term with z-uncertainty on central SP
start out by subtracting from the squared difference in 1/tanTheta the space-point-related squared error
First, we test using a generous scattering term calculated assuming the minimum pt we expect to reconstruct.
The following exploits the transformation u:=x/(x²+y²); v:=y/(x²+y²); This is applied on the x,y coordinates in the frame described above, where the origin is put in the central SP and the x axis defined to point directly away from the IP.
In this transformed u,v frame, what would be our circle in x-y space takes the form of
a linear function V = (-x0/y0) x U + 1/(2y0) =: A x U + B/2. Here, x0 and y0 describe the center point of the circle in the x-y frame. As the origin of the x-y frame (the middle space point of our seed) is on the circle, we have x0²+y0²=R² with circle radius R.
For our seed, we can experimentally obtain A as the slope of the linear function, delta V / delta U, estimated using the delta U and delta V between the top and bottom space point.
B is then obtained by inserting the obtained A into the linear equation for the bottom SP, A x U + B/2 = V --> B = 2(V - A x U0
With x0²+y0²=R², and x0=-A/B and y0=1/B, the radius of the circle is then obtained as R²=(1+A²)/B².
With this radius (and pT) estimate, we can apply our pt cut. Reminder, ipt2K is 1 / (K x 0.9 x pt-cut)², where K translates pt into 2R. So here we can apply the pt cut directly on the (2R)² estimate without the extra overhead of conversion / division. The second check is a refinement of the above Tz compatibility cut, replacing the sigmaSquaredScatteringMinPt scattering contribution which assumes the lowest pt by one based on the actual estimated pt.
The second term in this if-statement applies a second version of the 1/tan(theta) compatibility, this time using a scattering term scaled by the actual measured pt. This refines the cut applied above, following the same logic ("delta² - sigma² ?<=0")
This is an estimate of the transverse impact parameter. The reasoning is that, in the x-y frame with the central SP as origin and the x axis pointing away from the IP, we have for the distance between the IP and the middle of the circle: (x0 - r_central)²+y0² = (R + d0)², with R being the circle radius and r_central the radial location of the central SP, placing the IP at IP at (-r_central, 0).
First simplify using R² =x0²+y0², then apply the approximation d0²/R² ~ 0.
Finally, consider that locally close to the central SP, the circle is parallel to the x axis, so A = 0 --> expand (2R)²=(1+A²)/B² around this point to obtain d0 = r_central x (r_central x B - A). Note that below, the variable R is the radial coordinate fo the central SP, corresponding to r_central in the notation above.
apply d0 cut to seed
evaluate distance the two closest-by SP in this seed candidate
obtain a quality score - start from the d0 estimate, and add a penalty term corresponding to how far the seed segments deviate from a straight line in r-z
record one possible seed candidate, sort by the curvature
store the transverse IP, will later be used as a quality estimator
now apply further cleaning on the seed candidates for this central+bottom pair.
cleared in newOneSeedWithCurvaturesComparisonPPP but need to also be cleared in case previous conditional statement isn't fulfilled
record seeds found in this run
Definition at line 1624 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
: Seed production from space points.
Production 3 space points seeds for full scan.
This method will try to find 3-SP combinations within a local phi-z region in the detector.
The central SP of the seed will be taken from this region (technically via the first entry of the bottom candidate array, which always points to the phi-z bin of interest itself).
The top SP is allowed to come from the same or one of several close-by phi-Z bins, as is the bottom SP.
All SP collections are expected to be internally sorted in the radial coordinate.
[in,out] | data | Event data |
[in,out] | iter_bottomCands | collection of iterators over SP collections for up to 9 phi-z cells to consider for the bottom space-point search |
[in,out] | iter_endBottomCands | collection of end-iterators over the SP collections for up to 9 phi-z cells to consider for the bottom space-point search |
[in,out] | iter_topCands | collection of iterators over SP collections for up to 9 phi-z cells to consider for the top space-point search |
[in,out] | iter_endTopCands | collection of end-iterators over the SP collections for up to 9 phi-z cells to consider for the top space-point search |
[in] | numberBottomCells | Number of bottom cells to consider. Determines how many entries in iter_(end)bottomCands are expected to be valid. |
[in] | numberTopCells | Number of top cells to consider.Determines how many entries in iter_(end)topCands are expected to be valid. |
[out] | nseed | Number of seeds found |
This method implements the seed search for a single phi-Z region of the detector. The central SP is taken from the region, while the top and bottom SP are allowed to come from either the same or a range of neighbouring cells.
iterator across the candidates for the central space point.
< will be used for iterating over top/bottom SP
Next, we work out where we are within the ATLAS geometry. This will help us identify which space-points we need to consider as potential central points of a seed.
find the first central SP candidate above the minimum radius.
for the top candidates in the central phi-Z bin, we do not need to start at a smaller radius than the lowest-r valid central SP candidate
prepare cut values
keep track of the SP storace capacity. Extend it needed (should rarely be the case)
Loop through all central space point candidates
< stop if we have moved outside our radial region of interest.
global coordinates of the central SP
for the central SP, we veto locations on the last disk - there would be no "outer" hits to complete a seed.
veto the last strip disk
initialise a counter for found bottom links This also serves as an index in the data.SP vector
Top links production Loop over all the cells where we expect to find such SP
evaluate the radial distance,
loop over each SP in each cell
evaluate the radial distance,
if we are to far, the next ones will be even farther, so abort
Comparison with vertices Z coordinates straight line extrapolation to r=0
for LRT: Before adding top SP to the list, apply a cut for LRT
add SP to the list
if we are exceeding the SP capacity of our data object, make it resize its vectors. Will add 50 slots by default, so rarely should happen more than once per event.
if we did not find ANY top SP, or if we exceed the storage capacity, we abort this seed candidate.
now continue with the bottom SP search. Make the counter start at Nt, as this serves as a running index in the SP list for this seed.
Bottom links production Loop over all the cells where we expect to find such SP
in each cell, loop over the space points
evaluate the radial distance between the central and bottom SP
if the points are too close in r, abort (future ones will be even closer).
Comparison with vertices Z coordinates straight line extrapolation to r=0
for LRT: Before adding top SP to the list, apply a cut for LRT
found a bottom SP candidate, write it into the data object
if we are exceeding the SP capacity of our data object, make it resize its vectors. Will add 50 slots by default, so rarely should happen more than once per event.
if we found no bottom candidates (remember, Nb starts counting at Nt), abort
get covariance on r and z for the central SP
build a unit direction vector pointing from the IP to the central SP
check all SP candidates we found during our loop and compute geometrical variables w.r.t the central point.
transform the space point coordinates into a frame centered around the middle SP, where the x axis points away from the detector frame origin
inverse square distance of the candidate space point to the central point
inverse distance of the candidate space point to the central point
estimate slope in z - distance traveled in transverse plane vs z direction. rough estimate of 1/tan theta from 2 points
if we are looking at a bottom SP candidate, flip the sign to account for different direction of flight (from bottom to central)
save this into our data object
< 1/ tan theta
< z0 estimate.
< inverse distance to central SP
< transformed U coordinate
< transformed V coordinate
<squared Error on 1/tan theta coming from the space-point position errors
Three space points comparison first, loop over the bottom point candidates
retrieve the geometrical paranmeters w.r.t the central SP for this candidate
< z0 estimate from central+bottom SP
< 1/tanTheta estimate from central+bottom SP
< this is the uncertainty in 1/tanTheta on the bottom segment resulting from the position errors in the 2 SP
< v-coordinate of bottom SP
< u-coordinate of bottom SP
< 1+1/tan²theta - converts transverse to total squared pt
< sqrt (1+1/tan²theta) - used to convert pt to |p|
< this, when divided by the 2R², yields an approximated multiple scattering term assuming the measured pt.
< this is an approximate worst case multiple scattering term assuming the lowest pt we allow and the estimated theta angle
max IP
inner loop over the top point candidates
The following exploits the transformation u:=x/(x²+y²); v:=y/(x²+y²); This is applied on the x,y coordinates in the frame described above, where the origin is put in the central SP and the x axis defined to point directly away from the IP.
In this transformed u,v frame, what would be our circle in x-y space takes the form of
a linear function V = (-x0/y0) x U + 1/(2y0) =: A x U + B/2. Here, x0 and y0 describe the center point of the circle in the x-y frame. As the origin of the x-y frame (the middle space point of our seed) is on the circle, we have x0²+y0²=R² with circle radius R.
For our seed, we can experimentally obtain A as the slope of the linear function, delta V / delta U, estimated using the delta U and delta V between the top and bottom space point.
B is then obtained by inserting the obtained A into the linear equation for the bottom SP, A x U + B/2 = V --> B = 2(V - A x U0
With x0²+y0²=R², and x0=-A/B and y0=1/B, the radius of the circle is then obtained as R²=(1+A²)/B².
Apply a cut on the compatibility between the r-z slope of the two seed segments. This is done by comparing the squared difference between slopes, and comparing to the squared uncertainty in this difference - we keep a seed if the difference is compatible within the assumed uncertainties.
average value of 1/tan(theta), approximate the slope at the location of the central space point
squared error on the difference in tan(theta) due to space point position errors.
pre-computed individual squared errors on 1/tan(theta) for the two segments
mixed term with z-uncertainty on central SP
start out by subtracting from the squared difference in 1/tanTheta the space-point-related squared error
First, we test using a generous scattering term calculated assuming the minimum pt we expect to reconstruct.
With this radius (and pT) estimate, we can apply our pt cut. Reminder, ipt2K is 1 / (K x 0.9 x pt-cut)², where K translates pt into 2R. So here we can apply the pt cut directly on the (2R)² estimate without the extra overhead of conversion / division. The second check is a refinement of the above Tz compatibility cut, replacing the sigmaSquaredScatteringMinPt scattering contribution which assumes the lowest pt by one based on the actual estimated pt.
The second term in this if-statement applies a second version of the 1/tan(theta) compatibility, this time using a scattering term scaled by the actual measured pt. This refines the cut applied above, following the same logic ("delta² - sigma² ?<=0")
This is an estimate of the transverse impact parameter. The reasoning is that, in the x-y frame with the central SP as origin and the x axis pointing away from the IP, we have for the distance between the IP and the middle of the circle: (x0 - r_central)²+y0² = (R + d0)², with R being the circle radius and r_central the radial location of the central SP, placing the IP at IP at (-r_central, 0).
First simplify using R² =x0²+y0², then apply the approximation d0²/R² ~ 0.
Finally, consider that locally close to the central SP, the circle is parallel to the x axis, so A = 0 --> expand (2R)²=(1+A²)/B² around this point to obtain d0 = r_central x (r_central x B - A). Note that below, the variable R is the radial coordinate fo the central SP, corresponding to r_central in the notation above.
apply d0 cut to seed
evaluate distance the two closest-by SP in this seed candidate
obtain a quality score - start from the d0 estimate, and add a penalty term corresponding to how far the seed segments deviate from a straight line in r-z
record one possible seed candidate, sort by the curvature
store the transverse IP, will later be used as a quality estimator
now apply further cleaning on the seed candidates for this central+bottom pair.
record seeds found in this run
Definition at line 2058 of file ITkSiSpacePointsSeedMaker.cxx.
|
private |
|
inlineprivate |
Definition at line 535 of file ITkSiSpacePointsSeedMaker.h.
|
staticprivate |
Definition at line 1363 of file ITkSiSpacePointsSeedMaker.cxx.
|
overridevirtual |
Definition at line 3370 of file ITkSiSpacePointsSeedMaker.cxx.
|
mutableprivate |
Definition at line 261 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 262 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 263 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 264 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 265 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 266 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 267 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 268 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 269 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 270 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 271 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 272 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 273 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 274 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 275 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 276 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 277 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 278 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 279 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 280 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 281 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 282 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 283 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 284 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 285 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 286 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 204 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 205 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 171 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 194 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 235 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 246 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 220 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 219 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 190 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 214 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 217 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 189 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 213 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 251 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 216 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 243 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 242 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 196 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 247 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 199 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 250 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 195 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 184 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 227 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 206 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 172 of file ITkSiSpacePointsSeedMaker.h.
|
private |
cache the inverse bin size in phi which we use - needed to evaluate phi bin locations
Definition at line 293 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 295 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 297 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 244 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 245 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 212 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 296 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 197 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 198 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 183 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 203 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 202 of file ITkSiSpacePointsSeedMaker.h.
|
private |
number of bins in phi
Definition at line 292 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 294 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 201 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 181 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 182 of file ITkSiSpacePointsSeedMaker.h.
|
mutableprivate |
Definition at line 260 of file ITkSiSpacePointsSeedMaker.h.
|
private |
number of bins in the radial coordinate
Definition at line 291 of file ITkSiSpacePointsSeedMaker.h.
|
private |
mapping of neighbour cells in the 2D phi-z binning to consider for the "bottom SP" search for central SPs in each phi-z bin. Number of valid entries stored in m_nNeighboursPhiZbottom
Definition at line 315 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 320 of file ITkSiSpacePointsSeedMaker.h.
|
private |
mapping of neighbour cells in the 2D phi-z binning to consider for the "top SP" search for central SPs in each phi-z bin. Number of valid entries stored in m_nNeighboursPhiZtop
Definition at line 316 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 321 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 324 of file ITkSiSpacePointsSeedMaker.h.
|
private |
arrays associating bins to each other for SP formation
number of neighbouring phi-z bins to consider when looking for "bottom SP" candidates for each phi-z bin
Definition at line 313 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 318 of file ITkSiSpacePointsSeedMaker.h.
|
private |
number of neighbouring phi-z bins to consider when looking for "top SP" candidates for each phi-z bin
Definition at line 314 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 319 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 323 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 209 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 240 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 259 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 178 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 170 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 229 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 186 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 185 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 248 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 188 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 187 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 228 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 193 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 249 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 211 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 210 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 221 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 207 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 208 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Seed score thresholds defined based on the modifiers defined as configurables above.
These allow to categorise the seeds based on their quality score. The modifiers above are much larger than the range of the raw unmodified scores would be, resulting in a grouping of the scores based on the modifiers applied. The thresholds are just below the value reachable without the additional modifier max (score is assigned negative sign) score for PPP seeds with confirmation seed requirement.
Definition at line 308 of file ITkSiSpacePointsSeedMaker.h.
|
private |
max (score is assigned negative sign) score for SSS seeds with confirmation seed requirement.
Definition at line 309 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 169 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 168 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 167 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 179 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Flag to write validation ntuples. Turned off by default.
Definition at line 258 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 230 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 180 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 222 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 256 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 192 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 215 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 218 of file ITkSiSpacePointsSeedMaker.h.
|
private |
Definition at line 191 of file ITkSiSpacePointsSeedMaker.h.