13#ifndef ITkSiSpacePointsSeedMaker_H
14#define ITkSiSpacePointsSeedMaker_H
27#include "GaudiKernel/ITHistSvc.h"
58 return((*s1).radius() < (*s2).radius());
77 public extends<AthAlgTool, InDet::ISiSpacePointsSeedMaker>
90 (
const std::string&,
const std::string&,
const IInterface*);
93 virtual StatusCode
finalize()
override;
102 const std::vector<IdentifierHash>& vPixel,
const std::vector<IdentifierHash>& vStrip)
const override;
104 const std::vector<IdentifierHash>& vPixel,
const std::vector<IdentifierHash>& vStrip,
117 virtual void find3Sp(
const EventContext& ctx,
EventData&
data,
const std::list<Trk::Vertex>& lv)
const override;
121 virtual void find3Sp(
const EventContext& ctx,
EventData&
data,
const std::list<Trk::Vertex>& lv,
const double* zVertex)
const override;
125 virtual void findVSp(
const EventContext& ctx,
EventData&
data,
const std::list<Trk::Vertex>& lv)
const override;
173 "Name of the Magnetic Field conditions object key"};
178 BooleanProperty
m_pixel{
this,
"usePixel",
true};
179 BooleanProperty
m_strip{
this,
"useStrip",
true};
189 FloatProperty
m_drmin{
this,
"mindRadius", 5.};
190 FloatProperty
m_drmax{
this,
"maxdRadius", 300.};
191 FloatProperty
m_zmin{
this,
"minZ", -250.};
192 FloatProperty
m_zmax{this ,
"maxZ", +250.};
201 FloatProperty
m_maxScore{
this,
"maximumAcceptedSeedScore", 100.};
212 BooleanProperty
m_isLRT{
this,
"isLRT",
false};
230 FloatProperty
m_umax{
this,
"minSeedsQuality", 0.};
256 Gaudi::Property<bool>
m_writeNtuple {
this,
"WriteNtuple",
false,
"Flag to write Validation Ntuples"};
343 std::array<int, arraySizePhiZ>& nNeighbourCellsTop,
344 std::array<std::array<int, arraySizeNeighbourBins>,
arraySizePhiZ>& neighbourCellsBottom,
345 std::array<std::array<int, arraySizeNeighbourBins>,
arraySizePhiZ>& neighbourCellsTop,
346 int maxPhiBin,
bool isSSS);
348 std::array<std::array<int, arraySizeNeighbourBinsVertex>,
arraySizePhiZV>& neighbourCells,
366 static float azimuthalStep(
const float pTmin,
const float maxd0,
const float Rmin,
const float Rmax) ;
439 const int numberBottomCells,
const int numberTopCells,
int& nseed)
const;
447 const int numberBottomCells,
const int numberTopCells,
int& nseed)
const;
456 const int ,
const int ,
int& )
const;
489 void sort(std::vector<InDet::FloatInt>& s,
int start,
int size)
const;
506 (
const std::pair<float,SiSpacePointForSeed*>& i1,
507 const std::pair<float,SiSpacePointForSeed*>& i2)
509 return i1.first < i2.first;
522 if (!d || !prd_to_track_map.
isUsed(*d))
return false;
524 d =
sp->clusterList().second;
525 if (!d || prd_to_track_map.
isUsed(*d))
return true;
char data[hepevt_bytes_allocation_ATLAS]
Describes the API of the Region of Ineterest geometry.
bool operator()(SiSpacePointForSeed *s1, SiSpacePointForSeed *s2)
IntegerProperty m_maxsize
SG::ReadHandleKey< SpacePointContainer > m_spacepointsPixel
float m_seedScoreThresholdSSSConfirmationSeed
max (score is assigned negative sign) score for SSS seeds with confirmation seed requirement.
static MsgStream & dumpEvent(EventData &data, MsgStream &out)
float m_inverseBinSizePhiSSS
bool isZCompatible(EventData &data, float Zv, float R, float T) const
std::array< std::array< int, arraySizeNeighbourBins >, arraySizePhiZ > m_neighbourCellsBottomSSS
void newOneSeedWithCurvaturesComparisonPPP(EventData &data, SiSpacePointForSeed *&SPb, SiSpacePointForSeed *&SP0, float Zob) const
std::array< int, arraySizePhiZ > m_nNeighbourCellsTopSSS
static void pixInform(const Trk::SpacePoint *sp, float *r)
void fillLists(EventData &data) const
ServiceHandle< ITHistSvc > m_thistSvc
Flag to write validation ntuples. Turned off by default.
BooleanProperty m_fastTracking
virtual StatusCode finalize() override
FloatProperty m_maxdImpact
SiSpacePointForSeed * newSpacePoint(EventData &data, const Trk::SpacePoint *const &sp) const
Create a SiSpacePointForSeed from the space point.
virtual const InDet::SiSpacePointsSeed * next(const EventContext &ctx, EventData &data) const override
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
SiSpacePointsSeedMaker(const std::string &, const std::string &, const IInterface *)
SiSpacePointsSeedMaker(const SiSpacePointsSeedMaker &)=delete
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 compa...
FloatProperty m_maxdImpactSSS
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
IntegerProperty m_maxOneSizePPP
void newOneSeed(EventData &data, SiSpacePointForSeed *&, SiSpacePointForSeed *&, SiSpacePointForSeed *&, float, float) const
BooleanProperty m_optimisePhiBinning
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,...
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...
virtual StatusCode initialize() override
void newOneSeedWithCurvaturesComparison(EventData &data, SiSpacePointForSeed *&, SiSpacePointForSeed *&, float) const
virtual ~SiSpacePointsSeedMaker()=default
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
std::array< int, arraySizePhiZ > m_nNeighbourCellsBottomSSS
BooleanProperty m_alwaysKeepConfirmedStripSeeds
IntegerProperty m_maxOneSizeSSS
FloatProperty m_seedScoreBonusSSS
BooleanProperty m_useSeedConfirmation
void findNext(EventData &data) const
bool newVertices(EventData &data, const std::list< Trk::Vertex > &) const
FloatProperty m_seedScoreBonusConfirmationSeed
Size
enum for array sizes Note that this stores the maximum capacities, the actual binnings do not always ...
@ arraySizeZ
capacity of the 1D z arrays
@ arraySizeNeighbourBinsVertex
@ arraySizeNeighbourBins
array size to store neighbouring phi-z-regions in the seed finding
@ arraySizePhiV
array size in phi for vertexing
@ arraySizeZV
array size in z for vertexing
@ arraySizePhiZV
array size in phi-Z 2D for the vertexing
@ arraySizePhi
capacity of the 1D phi arrays
@ arraySizePhiZ
capacity for the 2D phi-z arrays
float m_inverseBinSizePhiPPP
cache the inverse bin size in phi which we use - needed to evaluate phi bin locations
virtual void writeNtuple(const InDet::SiSpacePointsSeed *seed, const Trk::Track *track, int seedType, long eventNumber) const override
void production3Sp(EventData &data) const
bool isUsed(const Trk::SpacePoint *, const Trk::PRDtoTrackMap &prd_to_track_map) const
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...
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,...
static void newSeed(EventData &data, SiSpacePointForSeed *&, SiSpacePointForSeed *&, float)
IntegerProperty m_maxsizeSP
void newOneSeedQ(EventData &data, SiSpacePointForSeed *&, SiSpacePointForSeed *&, SiSpacePointForSeed *&, float, float) const
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
SiSpacePointsSeedMaker()=delete
int m_maxPhiBinPPP
number of bins in phi
void sort(std::vector< InDet::FloatInt > &s, int start, int size) const
static void fillSeeds(EventData &data)
IntegerProperty m_maxOneSize
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
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 wh...
std::array< std::array< int, arraySizeNeighbourBinsVertex >, arraySizePhiZV > m_neighboursVertexPhiZ
FloatProperty m_dImpactCutSlopeUnconfirmedSSS
MsgStream & dumpConditions(EventData &data, MsgStream &out) const
virtual void find2Sp(EventData &data, const std::list< Trk::Vertex > &lv) const override
with two space points with or without vertex constraint
float m_inverseBinSizePhiVertex
float m_seedScoreThresholdPPPConfirmationSeed
Seed score thresholds defined based on the modifiers defined as configurables above.
BooleanProperty m_alwaysKeepConfirmedPixelSeeds
FloatProperty m_seedScoreBonusPPP
std::array< int, arraySizePhiZ > m_nNeighbourCellsBottomPPP
arrays associating bins to each other for SP formation
std::array< std::array< int, arraySizeNeighbourBins >, arraySizePhiZ > m_neighbourCellsTopSSS
virtual bool getWriteNtupleBoolProperty() const override
std::array< int, arraySizePhiZV > m_nNeighboursVertexPhiZ
SG::ReadHandleKey< SpacePointOverlapCollection > m_spacepointsOverlap
virtual void newEvent(const EventContext &ctx, EventData &data, int iteration) const override
Gaudi::Property< bool > m_writeNtuple
SG::ReadHandleKey< SpacePointContainer > m_spacepointsStrip
static void convertToBeamFrameWork(EventData &data, const Trk::SpacePoint *, float *)
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.
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
static void stripInform(EventData &data, const Trk::SpacePoint *sp, float *r)
void initializeEventData(EventData &data, const EventContext &ctx) const
std::string m_treeName ATLAS_THREAD_SAFE
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 SP...
virtual void newRegion(const EventContext &ctx, EventData &data, const std::vector< IdentifierHash > &vPixel, const std::vector< IdentifierHash > &vStrip) const override
void newOneSeedWithCurvaturesComparisonSeedConfirmation(EventData &data, SiSpacePointForSeed *&SPb, SiSpacePointForSeed *&SP0, float Zob) const
FloatProperty m_dImpactCutSlopeUnconfirmedPPP
void buildBeamFrameWork(EventData &data) const
static void erase(EventData &data)
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
int m_nBinsR
number of bins in the radial coordinate
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)
void production2Sp(EventData &data) const
SiSpacePointsSeedMaker & operator=(const SiSpacePointsSeedMaker &)=delete
BooleanProperty m_checketa
BooleanProperty m_useOverlap
InDet::SiSpacePointsSeedMakerEventData holds event dependent data used by ISiSpacePointsSeedMaker.
Property holding a SG store/key/clid from which a ReadHandle is made.
bool isUsed(const PrepRawData &prd) const
does this PRD belong to at least one track?
InDet::SiSpacePointsSeedMakerEventData EventData
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.