|  | ATLAS Offline Software
    | 
 
 
 
#include <SeedingToolBase.h>
|  | 
|  | SeedingToolBase (const std::string &t, const std::string &n, const IInterface *p) | 
|  | 
|  | SeedingToolBase (const std::string &t, const std::string &n, const IInterface *p) | 
|  | 
| ServiceHandle< StoreGateSvc > & | evtStore () | 
|  | The standard StoreGateSvc(event store) Returns (kind of) a pointer to theStoreGateSvc.  More...
 | 
|  | 
| const ServiceHandle< StoreGateSvc > & | evtStore () const | 
|  | The standard StoreGateSvc(event store) Returns (kind of) a pointer to theStoreGateSvc.  More...
 | 
|  | 
| const ServiceHandle< StoreGateSvc > & | detStore () const | 
|  | The standard StoreGateSvc/DetectorStoreReturns (kind of) a pointer to theStoreGateSvc.  More...
 | 
|  | 
| virtual StatusCode | sysInitialize () override | 
|  | Perform system initialization for an algorithm.  More... 
 | 
|  | 
| virtual StatusCode | sysStart () override | 
|  | Handle START transition.  More... 
 | 
|  | 
| virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override | 
|  | Return this algorithm's input handles.  More... 
 | 
|  | 
| virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override | 
|  | Return this algorithm's output handles.  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T, V, H > &t) | 
|  | 
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) | 
|  | Declare a new Gaudi property.  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) | 
|  | Declare a new Gaudi property.  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) | 
|  | 
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) | 
|  | Declare a new Gaudi property.  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") | 
|  | Declare a new Gaudi property.  More... 
 | 
|  | 
| void | updateVHKA (Gaudi::Details::PropertyBase &) | 
|  | 
| MsgStream & | msg () const | 
|  | 
| MsgStream & | msg (const MSG::Level lvl) const | 
|  | 
| bool | msgLvl (const MSG::Level lvl) const | 
|  | 
|  | 
| virtual StatusCode | initialize () | 
|  | 
| virtual StatusCode | finalize () | 
|  | 
| std::pair< int, int > | buildTheGraph (const IRoiDescriptor &, const std::unique_ptr< GNN_DataStorage > &, std::vector< GNN_Edge > &) const | 
|  | 
| int | runCCA (int, std::vector< GNN_Edge > &) const | 
|  | 
| void | extractSeedsFromTheGraph (int, int, int, std::vector< GNN_Edge > &, std::vector< std::tuple< float, int, std::vector< unsigned int > > > &) const | 
|  | 
| virtual StatusCode | initialize () | 
|  | 
| virtual StatusCode | finalize () | 
|  | 
| std::pair< int, int > | buildTheGraph (const IRoiDescriptor &, const std::unique_ptr< GNNR3_DataStorage > &, std::vector< GNNR3_Edge > &) const | 
|  | 
| int | runCCA (int, std::vector< GNNR3_Edge > &) const | 
|  | 
| void | renounceArray (SG::VarHandleKeyArray &handlesArray) | 
|  | remove all handles from I/O resolution  More... 
 | 
|  | 
| std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > | renounce (T &h) | 
|  | 
| void | extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps) | 
|  | Add StoreName to extra input/output deps as needed.  More... 
 | 
|  | 
|  | 
| ToolHandle< ITrigL2LayerNumberTool > | m_layerNumberTool {this, "layerNumberTool", "TrigL2LayerNumberToolITk"} | 
|  | 
| const AtlasDetectorID * | m_atlasId = nullptr | 
|  | 
| const SCT_ID * | m_sctId = nullptr | 
|  | 
| const PixelID * | m_pixelId = nullptr | 
|  | 
| BooleanProperty | m_filter_phi {this, "DoPhiFiltering", true} | 
|  | 
| BooleanProperty | m_useBeamTilt {this, "UseBeamTilt", false} | 
|  | 
| BooleanProperty | m_LRTmode {this, "LRTMode",false} | 
|  | 
| BooleanProperty | m_useML {this, "useML", true} | 
|  | 
| UnsignedIntegerProperty | m_nMaxPhiSlice {this, "nMaxPhiSlice", 53} | 
|  | 
| BooleanProperty | m_doubletFilterRZ {this, "Doublet_FilterRZ", true} | 
|  | 
| BooleanProperty | m_useEtaBinning {this, "UseEtaBinning", true} | 
|  | 
| BooleanProperty | m_matchBeforeCreate {this, "MatchBeforeCreate", true} | 
|  | 
| FloatProperty | m_minPt {this, "pTmin", 1000.0} | 
|  | 
| FloatProperty | m_etaBinOverride {this, "etaBin", 0.0f, "specify non-zero to override eta bin width from connection file (default 0.2 in createLinkingScheme.py)"} | 
|  | 
| IntegerProperty | m_nMaxEdges {this, "MaxGraphEdges", 2000000} | 
|  | 
| IntegerProperty | m_nBufferEdges {this, "BufferEdges", 200000} | 
|  | 
| StringProperty | m_connectionFile {this, "ConnectionFileName", "binTables_ITK_RUN4.txt"} | 
|  | 
| StringProperty | m_lutFile {this, "MLpredictorLutFileName", "gbts_ml_pixel_barrel_loose.lut"} | 
|  | 
| BooleanProperty | m_useGPUseedExtraction {this, "UseGPUseedExtraction", true} | 
|  | 
| BooleanProperty | m_useOldTunings {this, "UseOldTunings", false} | 
|  | 
| FloatProperty | m_tau_ratio_cut {this, "tau_ratio_cut", 0.007} | 
|  | 
| float | m_phiSliceWidth = 0. | 
|  | 
| std::unique_ptr< GNN_FasTrackConnector > | m_connector = nullptr | 
|  | 
| std::vector< TrigInDetSiLayer > | m_layerGeometry | 
|  | 
| std::unique_ptr< const TrigFTF_GNN_Geometry > | m_geo = nullptr | 
|  | 
| std::vector< std::array< float, 5 > > | m_mlLUT | 
|  | 
| std::unique_ptr< GNNR3_FasTrackConnector > | m_connector = nullptr | 
|  | 
| std::unique_ptr< const TrigFTF_GNNR3_Geometry > | m_geo = nullptr | 
|  | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &) | 
|  | specialization for handling Gaudi::Property<SG::VarHandleKey>  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &) | 
|  | specialization for handling Gaudi::Property<SG::VarHandleKeyArray>  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &) | 
|  | specialization for handling Gaudi::Property<SG::VarHandleBase>  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &) | 
|  | specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>  More... 
 | 
|  | 
◆ GNN_DataStorage
◆ GNN_Edge
◆ GNN_Node
◆ GNNR3_DataStorage
◆ GNNR3_Edge
◆ GNNR3_Node
◆ StoreGateSvc_t
◆ SeedingToolBase() [1/2]
  
  | 
        
          | SeedingToolBase::SeedingToolBase | ( | const std::string & | t, |  
          |  |  | const std::string & | n, |  
          |  |  | const IInterface * | p |  
          |  | ) |  |  |  | inline | 
 
 
◆ SeedingToolBase() [2/2]
  
  | 
        
          | SeedingToolBase::SeedingToolBase | ( | const std::string & | t, |  
          |  |  | const std::string & | n, |  
          |  |  | const IInterface * | p |  
          |  | ) |  |  |  | inline | 
 
 
◆ buildTheGraph() [1/2]
Definition at line 98 of file TrigInDetPattRecoTools/src/SeedingToolBase.cxx.
  102   const float cut_dphi_max      = 
m_LRTmode ? 0.07f : 0.012f;
 
  103   const float cut_dcurv_max     = 
m_LRTmode ? 0.015f : 0.001f;
 
  107   const float min_deltaPhi      = 
m_LRTmode ? 0.01f : 0.001f;
 
  108   const float tau_ratio_precut  = 0.009f;
 
  110   const float maxOuterRadius    = 
m_LRTmode ? 1050.0 : 550.0;
 
  112   const float cut_zMinU = min_z0 + maxOuterRadius*roi.
dzdrMinus();
 
  113   const float cut_zMaxU = max_z0 + maxOuterRadius*roi.
dzdrPlus();
 
  115   constexpr 
float ptCoeff = 0.29997*1.9972/2.0;
 
  117   float tripletPtMin = 0.8f*
m_minPt;
 
  118   const float pt_scale     = 900.0f/
m_minPt;
 
  120   float maxCurv = ptCoeff/tripletPtMin;
 
  122   float maxKappa_high_eta          = 
m_LRTmode ? 1.0f*maxCurv : std::sqrt(0.8
f)*maxCurv;
 
  123   float maxKappa_low_eta           = 
m_LRTmode ? 1.0f*maxCurv : std::sqrt(0.6
f)*maxCurv;
 
  126     maxKappa_high_eta          = 4.75e-4
f*pt_scale;
 
  127     maxKappa_low_eta           = 3.75e-4
f*pt_scale;
 
  130   const float dphi_coeff                 = 
m_LRTmode ? 1.0f*maxCurv : 0.68f*maxCurv;
 
  132   const float minDeltaRadius = 2.0;
 
  136   unsigned int nConnections = 0;
 
  142   for(
const auto& 
bg : 
m_geo->bin_groups()) {
 
  146     if(B1.
empty()) 
continue;
 
  152     for(
const auto& b2_idx : 
bg.second) {
 
  156       if(B2.
empty()) 
continue;
 
  161     float abs_dr = std::fabs(rb2-rb1);
 
  163       deltaPhi = min_deltaPhi + dphi_coeff*abs_dr;
 
  167         deltaPhi = 0.002f + 4.33e-4
f*pt_scale*abs_dr;
 
  169         deltaPhi = 0.015f + 2.2e-4
f*pt_scale*abs_dr;
 
  174       unsigned int first_it = 0;
 
  176       for(
unsigned int n1Idx = 0;n1Idx<B1.
m_vn.size();n1Idx++) {
 
  178     std::vector<unsigned int>& v1In = B1.
m_in[n1Idx];   
 
  182     const std::array<float, 5>& n1pars = B1.
m_params[n1Idx];
 
  184     float phi1 = n1pars[2];
 
  185     float r1 = n1pars[3];
 
  186     float z1 = n1pars[4];
 
  193     for(
unsigned int n2PhiIdx = first_it; n2PhiIdx<B2.
m_vPhiNodes.size();n2PhiIdx++) {
 
  201       if(phi2 > maxPhi) 
break;
 
  203       unsigned int n2Idx = B2.
m_vPhiNodes[n2PhiIdx].second;
 
  205       const std::vector<unsigned int>& v2In = B2.
m_in[n2Idx];
 
  209       const std::array<float, 5>& n2pars = B2.
m_params[n2Idx];
 
  211       float r2 = n2pars[3];
 
  215       if(
dr < minDeltaRadius) {
 
  219       float z2 = n2pars[4];
 
  223       float ftau = std::fabs(tau);
 
  228       if(ftau < n1pars[0]) 
continue;
 
  229       if(ftau > n1pars[1]) 
continue;
 
  231       if(ftau < n2pars[0]) 
continue;
 
  232       if(ftau > n2pars[1]) 
continue;
 
  236         float z0 = z1 - 
r1*tau;
 
  238         if(z0 < min_z0 || z0 > max_z0) 
continue;
 
  240         float zouter = 
z0 + maxOuterRadius*tau;
 
  242         if(zouter < cut_zMinU || zouter > cut_zMaxU) 
continue;                
 
  245       float curv = (phi2-phi1)/
dr;
 
  246       float abs_curv = std::abs(curv);
 
  249         if(abs_curv > maxKappa_low_eta) {
 
  254         if(abs_curv > maxKappa_high_eta) {
 
  259       float exp_eta = std::sqrt(1.
f+tau*tau)-tau;
 
  263         bool isGood = v2In.size() <= 2;
 
  267           float uat_1 = 1.0f/exp_eta;
 
  269           for(
const auto& n2_in_idx : v2In) {
 
  271         float tau2 = edgeStorage.at(n2_in_idx).m_p[0]; 
 
  272         float tau_ratio = tau2*uat_1 - 1.0f;
 
  274         if(std::fabs(tau_ratio) > tau_ratio_precut){
 
  287       float dPhi2 = curv*
r2;
 
  288       float dPhi1 = curv*
r1;
 
  292         edgeStorage.emplace_back(B1.
m_vn[n1Idx], B2.
m_vn[n2Idx], exp_eta, curv, phi1 + dPhi1);
 
  296         int outEdgeIdx = nEdges;
 
  298         float uat_2  = 1.f/exp_eta;
 
  299         float Phi2  = phi2 + dPhi2;
 
  302         for(
const auto& inEdgeIdx : v2In) {
 
  308           float tau_ratio = pS->
m_p[0]*uat_2 - 1.0f;
 
  310           if(std::abs(tau_ratio) > cut_tau_ratio_max){
 
  314           float dPhi =  Phi2 - pS->
m_p[2];
 
  319           if(std::abs(
dPhi) > cut_dphi_max) {
 
  323           float dcurv = curv2 - pS->
m_p[1];
 
  325           if(dcurv < -cut_dcurv_max || dcurv > cut_dcurv_max) {
 
  342     ATH_MSG_WARNING(
"Maximum number of graph edges exceeded - possible efficiency loss "<< nEdges);
 
  345   return std::make_pair(nEdges, nConnections);
 
 
 
 
◆ buildTheGraph() [2/2]
Definition at line 71 of file TrigInDetR3PattRecoTools/src/SeedingToolBase.cxx.
   75   const float cut_dphi_max      = 
m_LRTmode ? 0.07 : 0.012;
 
   76   const float cut_dcurv_max     = 
m_LRTmode ? 0.015 : 0.001;
 
   77   const float cut_tau_ratio_max = 
m_LRTmode ? 0.015 : 0.007;
 
   80   const float min_deltaPhi      = 
m_LRTmode ? 0.01f : 0.001f;
 
   82   const float maxOuterRadius    = 
m_LRTmode ? 1050.0 : 550.0;
 
   84   const float cut_zMinU = min_z0 + maxOuterRadius*roi.
dzdrMinus();
 
   85   const float cut_zMaxU = max_z0 + maxOuterRadius*roi.
dzdrPlus();
 
   87   const float ptCoeff = 0.29997*1.9972/2.0;
 
   89   float tripletPtMin = 0.8*
m_minPt;
 
   91   float maxCurv = ptCoeff/tripletPtMin;
 
   93   const float maxKappa_high_eta          = 
m_LRTmode ? 1.0*maxCurv : std::sqrt(0.8)*maxCurv;
 
   94   const float maxKappa_low_eta           = 
m_LRTmode ? 1.0*maxCurv : std::sqrt(0.6)*maxCurv;
 
   95   const float dphi_coeff                 = 
m_LRTmode ? 1.0*maxCurv : 0.68*maxCurv;
 
   97   const float minDeltaRadius = 2.0;
 
  101   unsigned int nConnections = 0;
 
  107   for(
const auto& 
bg : 
m_geo->bin_groups()) {
 
  111     if(B1.
empty()) 
continue;
 
  115     for(
const auto& b2_idx : 
bg.second) {
 
  119       if(B2.
empty()) 
continue;
 
  124     deltaPhi = min_deltaPhi + dphi_coeff*std::fabs(rb2-rb1);    
 
  127       unsigned int first_it = 0;
 
  129       for(
unsigned int n1Idx = 0;n1Idx<B1.
m_vn.size();n1Idx++) {
 
  131     std::vector<unsigned int>& v1In = B1.
m_in[n1Idx];   
 
  135     const std::array<float, 5>& n1pars = B1.
m_params[n1Idx];
 
  137     float phi1 = n1pars[2];
 
  138     float r1 = n1pars[3];
 
  139     float z1 = n1pars[4];
 
  146     for(
unsigned int n2PhiIdx = first_it; n2PhiIdx<B2.
m_vPhiNodes.size();n2PhiIdx++) {
 
  154       if(phi2 > maxPhi) 
break;
 
  156       unsigned int n2Idx = B2.
m_vPhiNodes[n2PhiIdx].second;
 
  158       const std::vector<unsigned int>& v2In = B2.
m_in[n2Idx];
 
  162       const std::array<float, 5>& n2pars = B2.
m_params[n2Idx];
 
  164       float r2 = n2pars[3];
 
  168       if(
dr < minDeltaRadius) {
 
  172       float z2 = n2pars[4];
 
  176       float ftau = std::fabs(tau);
 
  181       if(ftau < n1pars[0]) 
continue;
 
  182       if(ftau > n1pars[1]) 
continue;
 
  184       if(ftau < n2pars[0]) 
continue;
 
  185       if(ftau > n2pars[1]) 
continue;
 
  189         float z0 = z1 - 
r1*tau;
 
  191         if(z0 < min_z0 || z0 > max_z0) 
continue;
 
  193         float zouter = 
z0 + maxOuterRadius*tau;
 
  195         if(zouter < cut_zMinU || zouter > cut_zMaxU) 
continue;                
 
  198       float curv = (phi2-phi1)/
dr;
 
  199       float abs_curv = std::abs(curv);
 
  202         if(abs_curv > maxKappa_low_eta) {
 
  207         if(abs_curv > maxKappa_high_eta) {
 
  212       float exp_eta = std::sqrt(1+tau*tau)-tau;
 
  216         bool isGood = v2In.size() <= 2;
 
  220           float uat_1 = 1.0f/exp_eta;
 
  222           for(
const auto& n2_in_idx : v2In) {
 
  224         float tau2 = edgeStorage.at(n2_in_idx).m_p[0]; 
 
  225         float tau_ratio = tau2*uat_1 - 1.0f;
 
  227         if(std::fabs(tau_ratio) > cut_tau_ratio_max){
 
  240       float dPhi2 = curv*
r2;
 
  241       float dPhi1 = curv*
r1;
 
  245         edgeStorage.emplace_back(B1.
m_vn[n1Idx], B2.
m_vn[n2Idx], exp_eta, curv, phi1 + dPhi1);
 
  249         int outEdgeIdx = nEdges;
 
  251         float uat_2  = 1/exp_eta;
 
  252         float Phi2  = phi2 + dPhi2;
 
  255         for(
const auto& inEdgeIdx : v2In) {
 
  261           float tau_ratio = pS->
m_p[0]*uat_2 - 1.0f;
 
  263           if(std::abs(tau_ratio) > cut_tau_ratio_max){
 
  267           float dPhi =  Phi2 - pS->
m_p[2];
 
  272           if(dPhi < -cut_dphi_max || dPhi > cut_dphi_max) {
 
  276           float dcurv = curv2 - pS->
m_p[1];
 
  278           if(dcurv < -cut_dcurv_max || dcurv > cut_dcurv_max) {
 
  294   return std::make_pair(nEdges, nConnections);
 
 
 
 
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray> 
Definition at line 170 of file AthCommonDataStore.h.
  175                                                        hndl.documentation());
 
 
 
 
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey> 
Definition at line 156 of file AthCommonDataStore.h.
  161                                                        hndl.documentation());
 
 
 
 
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase> 
Definition at line 184 of file AthCommonDataStore.h.
  189                                                        hndl.documentation());
 
 
 
 
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | hndl | Object holding the property value. |  | doc | Documentation string for the property. |  
 
This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class. 
Definition at line 245 of file AthCommonDataStore.h.
  250     this->declare(hndl.
vhKey());
 
  251     hndl.
vhKey().setOwner(
this);
 
  253     return PBASE::declareProperty(
name,hndl,
doc);
 
 
 
 
◆ declareProperty() [2/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | hndl | Object holding the property value. |  | doc | Documentation string for the property. |  
 
This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class. 
Definition at line 221 of file AthCommonDataStore.h.
  229     return PBASE::declareProperty(
name,hndl,
doc);
 
 
 
 
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | property | Object holding the property value. |  | doc | Documentation string for the property. |  
 
This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty. 
Definition at line 333 of file AthCommonDataStore.h.
  338     return PBASE::declareProperty(
name, property, 
doc);
 
 
 
 
◆ declareProperty() [5/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | property | Object holding the property value. |  | doc | Documentation string for the property. |  
 
This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray. 
Definition at line 352 of file AthCommonDataStore.h.
 
 
◆ declareProperty() [6/6]
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extractSeedsFromTheGraph()
  
  | 
        
          | void SeedingToolBase::extractSeedsFromTheGraph | ( | int | maxLevel, |  
          |  |  | int | nEdges, |  
          |  |  | int | nHits, |  
          |  |  | std::vector< GNN_Edge > & | edgeStorage, |  
          |  |  | std::vector< std::tuple< float, int, std::vector< unsigned int > > > & | vSeedCandidates |  
          |  | ) |  | const |  | protected | 
 
Definition at line 416 of file TrigInDetPattRecoTools/src/SeedingToolBase.cxx.
  418   const float edge_mask_min_eta = 1.5;
 
  419   const float hit_share_threshold = 0.49;
 
  421   vSeedCandidates.clear();
 
  429   if(maxLevel < minLevel) 
return;
 
  431   std::vector<GNN_Edge*> vSeeds;
 
  433   vSeeds.reserve(nEdges/2);
 
  435   for(
int edgeIndex = 0; edgeIndex < nEdges; edgeIndex++) {
 
  437     GNN_Edge* pS = &(edgeStorage.at(edgeIndex));
 
  439     if(pS->m_level < minLevel) 
continue;
 
  441     vSeeds.push_back(pS);
 
  444   if(vSeeds.empty()) 
return;
 
  446   std::sort(vSeeds.begin(), vSeeds.end(), GNN_Edge::CompareLevel());
 
  450   vSeedCandidates.reserve(vSeeds.size());
 
  452   auto tFilter = std::make_unique<TrigFTF_GNN_TrackingFilter>(
m_layerGeometry, edgeStorage);
 
  454   for(
auto pS : vSeeds) {
 
  456     if(pS->m_level == -1) 
continue;
 
  460     tFilter->followTrack(pS, rs);
 
  462     if(!rs.m_initialized) {
 
  466     if(
static_cast<int>(rs.m_vs.size()) < minLevel) 
continue;
 
  468     float seed_eta = std::abs(-
std::log(pS->m_p[0]));
 
  470     std::vector<const GNN_Node*> vN;
 
  472     for(std::vector<GNN_Edge*>::reverse_iterator sIt=rs.m_vs.rbegin();sIt!=rs.m_vs.rend();++sIt) {
 
  474       if (seed_eta > edge_mask_min_eta) {
 
  475     (*sIt)->m_level = -1;
 
  478       if(sIt == rs.m_vs.rbegin()) {
 
  479     vN.push_back((*sIt)->m_n1);
 
  482       vN.push_back((*sIt)->m_n2);
 
  486     if(vN.size()<3) 
continue;
 
  488     std::vector<unsigned int> vSpIdx;
 
  490     vSpIdx.resize(vN.size());
 
  492     for(
unsigned int k = 0; 
k < vN.size(); 
k++) {
 
  493       vSpIdx[
k] = vN[
k]->sp_idx();
 
  496     vSeedCandidates.emplace_back(-rs.m_J/vN.size(), 0, vSpIdx);
 
  502   std::sort(vSeedCandidates.begin(), vSeedCandidates.end());
 
  504   std::vector<int> vTrackIds(vSeedCandidates.size());
 
  508   std::iota(vTrackIds.begin(), vTrackIds.end(), 1);
 
  510   std::vector<int> H2T(nHits + 1, 0);
 
  514   for(
const auto& seed : vSeedCandidates) {
 
  516     for(
const auto& 
h : std::get<2>(seed) ) {
 
  518       unsigned int hit_id = 
h + 1;
 
  520       int tid     = H2T[hit_id];
 
  521       int trackId = vTrackIds[seedIdx];
 
  523       if(tid == 0 || tid > trackId) {
 
  525     H2T[hit_id] = trackId;
 
  534   for(
unsigned int trackIdx = 0; trackIdx < vSeedCandidates.size(); trackIdx++) {
 
  536     int nTotal = std::get<2>(vSeedCandidates[trackIdx]).size();
 
  539     int trackId = vTrackIds[trackIdx];
 
  541     for(
const auto& 
h : std::get<2>(vSeedCandidates[trackIdx]) ) {
 
  543       unsigned int hit_id = 
h + 1;
 
  545       int tid = H2T[hit_id];
 
  552     if (nOther > hit_share_threshold*nTotal) {
 
  553         std::get<1>(vSeedCandidates[trackIdx]) = -1;
 
 
 
 
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed. 
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given 
 
 
◆ finalize() [1/2]
  
  | 
        
          | virtual StatusCode SeedingToolBase::finalize | ( |  | ) |  |  | protectedvirtual | 
 
 
◆ finalize() [2/2]
  
  | 
        
          | StatusCode SeedingToolBase::finalize | ( |  | ) |  |  | protectedvirtual | 
 
 
◆ initialize() [1/2]
  
  | 
        
          | virtual StatusCode SeedingToolBase::initialize | ( |  | ) |  |  | protectedvirtual | 
 
 
◆ initialize() [2/2]
  
  | 
        
          | StatusCode SeedingToolBase::initialize | ( |  | ) |  |  | protectedvirtual | 
 
Reimplemented in TrigInDetR3TrackSeedingTool, TrigInDetTrackSeedingTool, and Gbts2ActsSeedingTool.
Definition at line 24 of file TrigInDetPattRecoTools/src/SeedingToolBase.cxx.
   37   if (conn_fileName.empty()) {
 
   38     ATH_MSG_FATAL(
"Cannot find layer connections file " << conn_fileName);
 
   39     return StatusCode::FAILURE;
 
   43     std::ifstream ifs(conn_fileName.c_str());
 
   50     ATH_MSG_INFO(
"Layer connections are initialized from file " << conn_fileName);
 
   62     if (lut_fileName.empty()) {
 
   63       ATH_MSG_FATAL(
"Cannot find ML predictor LUT file " << lut_fileName);
 
   64       return StatusCode::FAILURE;
 
   68       std::ifstream ifs(lut_fileName.c_str());
 
   70     float cl_width, min1, 
max1, min2, max2;
 
   71     ifs >> cl_width >> min1 >> 
max1 >> min2 >> max2;
 
   73     std::array<float, 5> lut_line = {cl_width, min1, 
max1, min2, max2};
 
   77       ATH_MSG_INFO(
"ML predictor is initialized from file " << lut_fileName<<
" LUT has "<<
m_mlLUT.size()<<
" entries");
 
   90   return StatusCode::SUCCESS;
 
 
 
 
◆ inputHandles()
Return this algorithm's input handles. 
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA. 
 
 
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
Return this algorithm's output handles. 
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA. 
 
 
◆ renounce()
◆ renounceArray()
◆ runCCA() [1/2]
  
  | 
        
          | int SeedingToolBase::runCCA | ( | int | nEdges, |  
          |  |  | std::vector< GNN_Edge > & | edgeStorage |  
          |  | ) |  | const |  | protected | 
 
Definition at line 348 of file TrigInDetPattRecoTools/src/SeedingToolBase.cxx.
  350   constexpr 
int maxIter = 15;
 
  356   std::vector<TrigFTF_GNN_Edge*> v_old;
 
  358   for(
int edgeIndex=0;edgeIndex<nEdges;edgeIndex++) {
 
  361     if(pS->
m_nNei == 0) 
continue;
 
  366   std::vector<TrigFTF_GNN_Edge*> v_new;
 
  367   v_new.reserve(v_old.size());
 
  374     for(
auto pS : v_old) {
 
  378       for(
int nIdx=0;nIdx<pS->
m_nNei;nIdx++) {
 
  380         unsigned int nextEdgeIdx = pS->
m_vNei[nIdx];
 
  398     for(
auto pS : v_new) {
 
  402         if(maxLevel < pS->m_level) maxLevel = pS->
m_level;
 
  406     if(nChanges == 0) 
break;
 
 
 
 
◆ runCCA() [2/2]
  
  | 
        
          | int SeedingToolBase::runCCA | ( | int | nEdges, |  
          |  |  | std::vector< GNNR3_Edge > & | edgeStorage |  
          |  | ) |  | const |  | protected | 
 
Definition at line 297 of file TrigInDetR3PattRecoTools/src/SeedingToolBase.cxx.
  299   const int maxIter = 15;
 
  305   std::vector<TrigFTF_GNNR3_Edge*> v_old;
 
  307   for(
int edgeIndex=0;edgeIndex<nEdges;edgeIndex++) {
 
  310     if(pS->
m_nNei == 0) 
continue;
 
  318     std::vector<TrigFTF_GNNR3_Edge*> v_new;
 
  320     v_new.reserve(v_old.size());
 
  322     for(
auto pS : v_old) {
 
  326       for(
int nIdx=0;nIdx<pS->
m_nNei;nIdx++) {
 
  328         unsigned int nextEdgeIdx = pS->
m_vNei[nIdx];
 
  346     for(
auto pS : v_new) {
 
  350         if(maxLevel < pS->m_level) maxLevel = pS->
m_level;
 
  354     if(nChanges == 0) 
break;
 
  357     v_old = std::move(v_new);
 
 
 
 
◆ sysInitialize()
◆ sysStart()
Handle START transition. 
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container. 
 
 
◆ updateVHKA()
◆ m_atlasId
◆ m_connectionFile
  
  | 
        
          | StringProperty SeedingToolBase::m_connectionFile {this, "ConnectionFileName", "binTables_ITK_RUN4.txt"} |  | protected | 
 
 
◆ m_connector [1/2]
◆ m_connector [2/2]
◆ m_detStore
◆ m_doubletFilterRZ
  
  | 
        
          | BooleanProperty SeedingToolBase::m_doubletFilterRZ {this, "Doublet_FilterRZ", true} |  | protected | 
 
 
◆ m_etaBinOverride
  
  | 
        
          | FloatProperty SeedingToolBase::m_etaBinOverride {this, "etaBin", 0.0f, "specify non-zero to override eta bin width from connection file (default 0.2 in createLinkingScheme.py)"} |  | protected | 
 
 
◆ m_evtStore
◆ m_filter_phi
  
  | 
        
          | BooleanProperty SeedingToolBase::m_filter_phi {this, "DoPhiFiltering", true} |  | protected | 
 
 
◆ m_geo [1/2]
◆ m_geo [2/2]
◆ m_layerGeometry
◆ m_layerNumberTool
◆ m_LRTmode
  
  | 
        
          | BooleanProperty SeedingToolBase::m_LRTmode {this, "LRTMode",false} |  | protected | 
 
 
◆ m_lutFile
  
  | 
        
          | StringProperty SeedingToolBase::m_lutFile {this, "MLpredictorLutFileName", "gbts_ml_pixel_barrel_loose.lut"} |  | protected | 
 
 
◆ m_matchBeforeCreate
  
  | 
        
          | BooleanProperty SeedingToolBase::m_matchBeforeCreate {this, "MatchBeforeCreate", true} |  | protected | 
 
 
◆ m_minPt
  
  | 
        
          | FloatProperty SeedingToolBase::m_minPt {this, "pTmin", 1000.0} |  | protected | 
 
 
◆ m_mlLUT
  
  | 
        
          | std::vector<std::array<float, 5> > SeedingToolBase::m_mlLUT |  | protected | 
 
 
◆ m_nBufferEdges
  
  | 
        
          | IntegerProperty SeedingToolBase::m_nBufferEdges {this, "BufferEdges", 200000} |  | protected | 
 
 
◆ m_nMaxEdges
  
  | 
        
          | IntegerProperty SeedingToolBase::m_nMaxEdges {this, "MaxGraphEdges", 2000000} |  | protected | 
 
 
◆ m_nMaxPhiSlice
  
  | 
        
          | UnsignedIntegerProperty SeedingToolBase::m_nMaxPhiSlice {this, "nMaxPhiSlice", 53} |  | protected | 
 
 
◆ m_phiSliceWidth
  
  | 
        
          | float SeedingToolBase::m_phiSliceWidth = 0. |  | protected | 
 
 
◆ m_pixelId
◆ m_sctId
◆ m_tau_ratio_cut
  
  | 
        
          | FloatProperty SeedingToolBase::m_tau_ratio_cut {this, "tau_ratio_cut", 0.007} |  | protected | 
 
 
◆ m_useBeamTilt
  
  | 
        
          | BooleanProperty SeedingToolBase::m_useBeamTilt {this, "UseBeamTilt", false} |  | protected | 
 
 
◆ m_useEtaBinning
  
  | 
        
          | BooleanProperty SeedingToolBase::m_useEtaBinning {this, "UseEtaBinning", true} |  | protected | 
 
 
◆ m_useGPUseedExtraction
  
  | 
        
          | BooleanProperty SeedingToolBase::m_useGPUseedExtraction {this, "UseGPUseedExtraction", true} |  | protected | 
 
 
◆ m_useML
  
  | 
        
          | BooleanProperty SeedingToolBase::m_useML {this, "useML", true} |  | protected | 
 
 
◆ m_useOldTunings
  
  | 
        
          | BooleanProperty SeedingToolBase::m_useOldTunings {this, "UseOldTunings", false} |  | protected | 
 
 
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
 
def retrieve(aClass, aKey=None)
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
std::vector< std::vector< unsigned int > > m_in
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
unsigned int m_vNei[N_SEG_CONNS]
std::vector< std::array< float, 5 > > m_params
float getMaxBinRadius() const
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
float getMinBinRadius() const
bool dPhi(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
virtual double dzdrMinus() const =0
return the gradients
TrigFTF_GNNR3_EtaBin & getEtaBin(int idx)
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual double dzdrPlus() const =0
virtual void setOwner(IDataHandleHolder *o)=0
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
std::vector< std::pair< float, unsigned int > > m_vPhiNodes
::StatusCode StatusCode
StatusCode definition for legacy code.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
TrigFTF_GNN_EtaBin & getEtaBin(int idx)
std::vector< const TrigFTF_GNNR3_Node * > m_vn
float getMaxBinRadius() const
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
unsigned int m_vNei[N_SEG_CONNS]
std::vector< std::pair< float, unsigned int > > m_vPhiNodes
virtual double zedPlus() const =0
the zed and eta values at the most forward and most rear ends of the RoI
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
#define ATH_MSG_WARNING(x)
static std::string find_file(const std::string &logical_file_name, const std::string &search_path)
std::vector< std::vector< unsigned int > > m_in
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
virtual double zedMinus() const =0
std::vector< const TrigFTF_GNN_Node * > m_vn
float getMinBinRadius() const
std::vector< std::array< float, 5 > > m_params