Skip to content
Snippets Groups Projects
Commit 53318d44 authored by Maximilian Emanuel Goblirsch-Kolb's avatar Maximilian Emanuel Goblirsch-Kolb
Browse files

re-package existing bug as a feature

parent 8578e01e
No related branches found
No related tags found
No related merge requests found
......@@ -46,6 +46,7 @@ namespace InDet {
void set(const Trk::SpacePoint*const&,const float*,const float*);
void setQuality(float);
void setParam(const float&);
void setScorePenalty(const float& par) {m_scorePenalty=par;}
const Trk::SpacePoint* spacepoint;
const float& x() const {return m_x;}
......@@ -55,8 +56,9 @@ namespace InDet {
float phi() const {return atan2(m_y,m_x);}
const float& covr() const {return m_covr;}
const float& covz() const {return m_covz;}
const float& param() const {return m_param;}
const float& quality() const {return m_q ;}
const float& param() const {return m_param;} /// impact parameter
const float& scorePenalty() const {return m_scorePenalty;} /// penalty term in the seed score
const float& quality() const {return m_q ;} /// quality of the best seed this candidate was seen on
const Trk::Surface* sur() const {return m_su;}
const Trk::Surface* sun() const {return m_sn;}
......@@ -68,8 +70,9 @@ namespace InDet {
float m_r ; // radius in beam system coordinates
float m_covr; //
float m_covz; //
float m_param;
float m_q ;
float m_param; /// impact parameter
float m_scorePenalty; /// penalty term in the seed score
float m_q ; /// quality of the best seed this candidate was seen on
const Trk::Surface* m_su;
const Trk::Surface* m_sn;
};
......
......@@ -114,6 +114,7 @@ namespace InDet {
m_q = q;
bool pixb = !m_s0->spacepoint->clusterList().second;
bool pixt = !m_s2->spacepoint->clusterList().second;
/// if PPP or SSS, just update quality, don't cut
if(pixb==pixt) {
m_s0->setQuality(q);
m_s1->setQuality(q);
......
......@@ -199,6 +199,11 @@ namespace InDet {
FloatProperty m_drmin{this, "mindRadius", 5.};
FloatProperty m_maxdImpact{this, "maxdImpact", 10.};
FloatProperty m_maxdImpactSSS{this, "maxdImpactSSS", 50.};
/// these flags allow to dynamically tighten the d0 cut on non-confirmed seeds based on
/// the penalty score they receive for kinking in the r-z plane.
/// The cut is adapted as cut_value = original - slope x penalty
FloatProperty m_dImpactCutSlopeUnconfirmedSSS{this, "dImpactCutSlopeUnconfirmedSSS", 1.0};
FloatProperty m_dImpactCutSlopeUnconfirmedPPP{this, "dImpactCutSlopeUnconfirmedPPP", 0.};
FloatProperty m_maxdImpactDecays{this, "maxdImpactForDecays", 20.};
FloatProperty m_ptmin{this, "pTmin", 500.};
//@}
......@@ -246,6 +251,7 @@ namespace InDet {
float m_dzdrmax0{0.}; ///< implicitly store eta cut
float m_ipt{0.}; ///< inverse of 90% of the ptmin cut
float m_ipt2{0.}; ///< inverse square of 90% of the pt min cut
// static constexpr float m_COF{134*.05*9}; ///< appears to be an approximated term related to multiple-scattering of particles traversing the ID during the seed formation
static constexpr float m_COF{134*.05*9}; ///< appears to be an approximated term related to multiple-scattering of particles traversing the ID during the seed formation
/// @name Binning parameters
......
......@@ -1987,12 +1987,14 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::production3Sp
/// evaluate distance the two closest-by SP in this seed candidate
float dr = data.R[b];
if (data.R[t] < data.R[b]) dr = data.R[t];
/// update the d0 estimate
d0+=std::abs((Tzb-data.Tz[t])/(dr*sTzb2));
/// 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
data.SP[t]->setScorePenalty(std::abs((Tzb-data.Tz[t])/(dr*sTzb2)));
data.SP[t]->setParam(d0);
/// record one possible seed candidate, sort by the curvature
data.CmSp.emplace_back(std::make_pair(B/std::sqrt(onePlusAsquare), data.SP[t]));
/// store the transverse IP, will later be used as a quality estimator
data.SP[t]->setParam(d0);
}
} ///< end loop over top space point candidates
......@@ -2276,8 +2278,9 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::newOneSeedWithCurvaturesComparison
for (; it_commonTopSP!=ie; ++it_commonTopSP) {
/// the seed quality is set to d0 initially
float seedQuality = (*it_commonTopSP).second->param();
float originalSeedQuality = (*it_commonTopSP).second->param();
float seedIP = (*it_commonTopSP).second->param();
float seedQuality = seedIP + (*it_commonTopSP).second->scorePenalty();
float originalSeedQuality = seedQuality;
if(m_maxdImpact > 50){ //This only applies to LRT
......@@ -2288,7 +2291,7 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::newOneSeedWithCurvaturesComparison
float eta1=-std::log(std::tan(.5*theta1));
float Zot=bottomZ - (bottomR-originalSeedQuality) * ((topZ-bottomZ)/(topR-bottomR));
float theta0=std::atan2((*it_commonTopSP).second->param(),Zot);
float theta0=std::atan2(seedIP,Zot);
float eta0=-std::log(std::tan(.5*theta0));
float deltaEta=std::abs(eta1-eta0); //For LLP daughters, the direction of the track is correlated with the direction of the LLP (which is correlated with the direction of the point of closest approach
......@@ -2353,16 +2356,21 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::newOneSeedWithCurvaturesComparison
if (seedQuality > data.maxScore) continue;
/// if we have PPS seeds and no confirmation SP exists (which would give the -200 bonus)
/// or the seed quality is worse than the quality of the individual SP, skip this seed
/// or the hits on this seed were already used on a higher quality PPP/SSS seed, kick this one
if (bottomSPisPixel!=topSPisPixel) {
if (seedQuality > 0. ||
(seedQuality > bottomSPQuality && seedQuality > centralSPQuality && seedQuality > (*it_commonTopSP).second->quality())
) continue;
}
/// if we have a SSS seed, apply the d0 cut.
/// Exception: If the SSS seed has a confirmation seed (-400 from SSS and -200 from confirmation),
/// then we skip the d0 cut
if (!bottomSPisPixel && (originalSeedQuality > m_maxdImpactSSS) && (seedQuality > m_seedScoreThresholdSSSConfirmationSeed)) continue;
/// If we have a non-confirmed seed, apply a stricter d0 cut.
/// This, is determined using the original cut and the score penalty modifier.
if (!isConfirmedSeed(SPb,it_commonTopSP->second,seedQuality)){
/// PPP seeds
double maxdImpact = m_maxdImpact - (m_dImpactCutSlopeUnconfirmedPPP * (*it_commonTopSP).second->scorePenalty());
/// SSS seeds
if (!bottomSPisPixel) maxdImpact = m_maxdImpactSSS - (m_dImpactCutSlopeUnconfirmedSSS * (*it_commonTopSP).second->scorePenalty());
if (seedIP > maxdImpact) continue;
}
/// this is a good seed, save it (unless we have too many seeds per SP)
newOneSeed(data, SPb, SP0, (*it_commonTopSP).second, Zob, seedQuality);
} ///< end of loop over top SP candidates
......@@ -2394,7 +2402,7 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::fillSeeds(EventData& data) const
theSeed = (*it_seedCandidate).second;
/// if this is not the highest-quality seed in the list and we have the first hit in the IBL, require a confirmation seed (score is then boosted by -200 for PPP + -200 for confirmation --> below -200)
if (it_seedCandidate!=it_firstSeedCandidate && theSeed->spacepoint0()->radius() < m_radiusCutIBL && quality > m_seedScoreThresholdPPPConfirmationSeed) continue;
/// this will return false for strip seeds if the quality of the seed is worse than the one of all of the space points on the seed.
/// this will set the quality member of all points on the seed to the quality score of this candidate
if (!theSeed->setQuality(quality)) continue;
/// if we have space, write the seed directly into an existing slot
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment