ATLAS Offline Software
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
FPGAOutputValidationAlg Class Reference

#include <FPGAOutputValidationAlg.h>

Inheritance diagram for FPGAOutputValidationAlg:
Collaboration diagram for FPGAOutputValidationAlg:

Public Member Functions

 FPGAOutputValidationAlg (const std::string &name, ISvcLocator *pSvcLocator)
 
virtual StatusCode initialize () override final
 
virtual StatusCode execute (const EventContext &ctx) const override final
 
virtual StatusCode sysInitialize () override
 Override sysInitialize. More...
 
virtual bool isClonable () const override
 Specify if the algorithm is clonable. More...
 
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
 
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
virtual bool filterPassed (const EventContext &ctx) const
 
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. 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
 

Protected Member Functions

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...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

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...
 

Private Attributes

Gaudi::Property< std::string > m_outputRootFilePath
 
Gaudi::Property< bool > m_doDiffHistograms
 
Gaudi::Property< bool > m_matchByID {this, "matchByID", false, "Use hash to match clusters. If false, use only the rdo list."}
 
Gaudi::Property< size_t > m_allowedRdoMisses {this, "allowedRdoMisses", 0, "Allowed number of RDOs that don't have to match between clusters. Setting this to a very large number means essentially that 1 common RDO is enough to match clusters."}
 
Gaudi::Property< bool > m_checkClusterRdos {this, "checkClusterRdos", false, "If true, check if FPGA clusters share any RDOs"}
 
SG::ReadHandleKeyArray< xAOD::PixelClusterContainerm_pixelKeys {this, "pixelKeys", {}}
 
SG::ReadHandleKeyArray< xAOD::StripClusterContainerm_stripKeys {this, "stripKeys", {}}
 
ToolHandle< GenericMonitoringToolm_monitoringTool {this, "monitoringTool", "", "Monitoring tool"}
 
ServiceHandle< IChronoStatSvc > m_chrono {this,"ChronoStatSvc","ChronoStatSvc"}
 
const PixelIDm_pixelid {nullptr}
 
const SCT_IDm_stripid {nullptr}
 
const InDetDD::SiDetectorManagerm_PIX_mgr = nullptr
 
const InDetDD::SiDetectorManagerm_SCT_mgr = nullptr
 
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks. More...
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 24 of file FPGAOutputValidationAlg.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ FPGAOutputValidationAlg()

FPGAOutputValidationAlg::FPGAOutputValidationAlg ( const std::string &  name,
ISvcLocator *  pSvcLocator 
)

Definition at line 140 of file FPGAOutputValidationAlg.cxx.

143  : AthReentrantAlgorithm(name, pSvcLocator)
144 {}

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64 {
65  return 0;
66 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation 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.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation 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.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation 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.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation 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.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ execute()

StatusCode FPGAOutputValidationAlg::execute ( const EventContext &  ctx) const
finaloverridevirtual

just compare two for now

just compare two for now

Definition at line 164 of file FPGAOutputValidationAlg.cxx.

164  {
165  if (m_pixelKeys.size() == 2 && m_doDiffHistograms) {
166  m_chrono->chronoStart("FPGAOutputValidationAlg::pixel diff");
170  ATH_CHECK(handle0.isValid());
172  ATH_CHECK(handle1.isValid());
173 
174  if (m_checkClusterRdos) {
175  const auto& pixelClusters0 = *handle0;
176  std::unordered_multimap<xAOD::DetectorIDHashType, const xAOD::PixelCluster*> pixelClustersHashIdMap0; // assumes that the first key is the FPGA one
177  for (const auto* cluster0 : pixelClusters0) {
178  const xAOD::DetectorIDHashType hashId0 = cluster0->identifierHash();
179  pixelClustersHashIdMap0.insert(std::make_pair(hashId0, cluster0));
180  }
181  const std::vector<ClusterPair<xAOD::PixelCluster>> pixelClusterPairsWithCommonRdos = findNonMergedClusters(pixelClustersHashIdMap0);
182  if (pixelClusterPairsWithCommonRdos.size() > 0) {
183  std::stringstream ss;
184  for (const auto& pair : pixelClusterPairsWithCommonRdos) {
185  ss << "Found " << pair.commonRDOs << " common RDOs between clusters with hash "
186  << pair.clusters.first->identifierHash() << ": "
187  << pair.clusters.first->identifier() << " and "
188  << pair.clusters.second->identifier() << "\n";
189  }
190  ATH_MSG_ERROR("Pixel cluster pairs with common RDOs:\n" << ss.str());
191  }
192  }
193 
194  const xAOD::PixelClusterContainer pixelClusters1 = *handle1;
195  std::unordered_multimap<xAOD::DetectorIdentType, const xAOD::PixelCluster*> pixelClustersMap1;
196  std::unordered_multimap<xAOD::DetectorIDHashType, const xAOD::PixelCluster*> pixelClustersHashIdMap1;
197  for (const auto* cluster1 : pixelClusters1) {
198  const xAOD::DetectorIdentType id1 = cluster1->identifier();
199  const xAOD::DetectorIDHashType hashId1 = cluster1->identifierHash();
200  pixelClustersMap1.insert(std::make_pair(id1, cluster1));
201  pixelClustersHashIdMap1.insert(std::make_pair(hashId1, cluster1));
202  }
203 
204  for (auto cluster0 : *handle0) {
205  const std::vector<const xAOD::PixelCluster*> matchedClusters = findMatchingCluster(cluster0, pixelClustersMap1, pixelClustersHashIdMap1,
206  m_matchByID,
208 
209  if (matchedClusters.size() == 0) {
210  std::vector<std::string> regions {"all"};
211  if(m_pixelid->barrel_ec(cluster0->rdoList()[0]) == 0) regions.push_back("barrel");
212  else regions.push_back("endcap");
213  for (const auto& region : regions) {
216  Monitored::Scalar<float>(handle0.key() + "_UNMATCHED_GLOBALPOSITION_Z_" + region, cluster0->globalPosition()[2]),
217  Monitored::Scalar<float>(handle0.key() + "_UNMATCHED_GLOBALPOSITION_R_" + region, sqrt(cluster0->globalPosition()[0]*cluster0->globalPosition()[0] +
218  cluster0->globalPosition()[1]*cluster0->globalPosition()[1])),
219  Monitored::Scalar<float>("nmatched_pixel_clusters_"+region, matchedClusters.size() - 0.5)
220  );
221  }
222  continue;
223  }
224  if (matchedClusters.size() > 1) {
225  ATH_MSG_ERROR(logMultipleClusterMatches(matchedClusters));
226  return StatusCode::FAILURE;
227  }
228 
229  const xAOD::PixelCluster *cluster1 = matchedClusters[0];
230 
231  std::vector<std::string> regions {"all"};
232  if(m_pixelid->barrel_ec(cluster0->rdoList()[0]) == 0) regions.push_back("barrel");
233  else regions.push_back("endcap");
234 
235  for(auto const& region: regions)
236  {
239  Monitored::Scalar<float>("diff_pixel_locx_" +region , cluster0->localPosition<2>()[0] - cluster1->localPosition<2>()[0]),
240  Monitored::Scalar<float>("diff_pixel_locy_" +region , cluster0->localPosition<2>()[1] - cluster1->localPosition<2>()[1]),
241  Monitored::Scalar<float>("diff_pixel_covxx_" +region , cluster0->localCovariance<2>()(0, 0) - cluster1->localCovariance<2>()(0, 0)),
242  Monitored::Scalar<float>("diff_pixel_covyy_" +region , cluster0->localCovariance<2>()(1, 1) - cluster1->localCovariance<2>()(1, 1)),
243  Monitored::Scalar<float>("diff_pixel_globalx_" +region , cluster0->globalPosition()[0] - cluster1->globalPosition()[0]),
244  Monitored::Scalar<float>("diff_pixel_globaly_" +region , cluster0->globalPosition()[1] - cluster1->globalPosition()[1]),
245  Monitored::Scalar<float>("diff_pixel_globalz_" +region , cluster0->globalPosition()[2] - cluster1->globalPosition()[2]),
246  Monitored::Scalar<int>("diff_pixel_channelsphi_" +region , cluster0->channelsInPhi() - cluster1->channelsInPhi()),
247  Monitored::Scalar<int>("diff_pixel_channelseta_" +region , cluster0->channelsInEta() - cluster1->channelsInEta()),
248  Monitored::Scalar<float>("diff_pixel_widtheta_" +region , cluster0->widthInEta() - cluster1->widthInEta()),
249  Monitored::Scalar<int>("diff_pixel_tot_" +region , cluster0->totalToT() - cluster1->totalToT()),
250  Monitored::Scalar<int>("diff_pixel_rdos_" +region , cluster0->rdoList().size() - cluster1->rdoList().size()),
251  Monitored::Scalar<float>("pixel_globalR_ref_" + region, sqrt(cluster1->globalPosition()[0]*cluster1->globalPosition()[0] +
252  cluster1->globalPosition()[1]*cluster1->globalPosition()[1])),
253  Monitored::Scalar<float>("pixel_globalZ_ref_" + region, cluster1->globalPosition()[2]),
254  Monitored::Scalar<float>("nmatched_pixel_clusters_"+region, matchedClusters.size() - 0.5)
255  );
256  if(region != "all")
257  {
260  Monitored::Scalar<float>("diff_pixel_locx_"+region+"Layer" + std::to_string(m_pixelid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
261  cluster0->localPosition<2>()[0] - cluster1->localPosition<2>()[0]),
262  Monitored::Scalar<float>("diff_pixel_locy_"+region+"Layer" + std::to_string(m_pixelid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
263  cluster0->localPosition<2>()[1] - cluster1->localPosition<2>()[1]),
264  Monitored::Scalar<float>("diff_pixel_covxx_"+region+"Layer" + std::to_string(m_pixelid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
265  cluster0->localCovariance<2>()(0, 0) - cluster1->localCovariance<2>()(0, 0)),
266  Monitored::Scalar<float>("diff_pixel_covyy_"+region+"Layer" + std::to_string(m_pixelid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
267  cluster0->localCovariance<2>()(1, 1) - cluster1->localCovariance<2>()(1, 1)),
268  Monitored::Scalar<float>("diff_pixel_globalX_"+region+"Layer" + std::to_string(m_pixelid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
269  cluster0->globalPosition()[0] - cluster1->globalPosition()[0]),
270  Monitored::Scalar<float>("diff_pixel_globalY_"+region+"Layer" + std::to_string(m_pixelid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
271  cluster0->globalPosition()[1] - cluster1->globalPosition()[1]),
272  Monitored::Scalar<float>("diff_pixel_globalZ_"+region+"Layer" + std::to_string(m_pixelid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
273  cluster0->globalPosition()[2] - cluster1->globalPosition()[2]),
274  Monitored::Scalar<float>("nmatched_pixel_clusters_"+region, matchedClusters.size() - 0.5)
275  );
276  }
277  }
278  }
279  m_chrono->chronoStop("FPGAOutputValidationAlg::pixel diff");
280  }
281 
282  if (m_stripKeys.size() == 2 && m_doDiffHistograms) {
283  m_chrono->chronoStart("FPGAOutputValidationAlg::strip diff");
287  ATH_CHECK(handle0.isValid());
289  ATH_CHECK(handle1.isValid());
290 
291  if (m_checkClusterRdos) {
292  const xAOD::StripClusterContainer stripClusters0 = *handle0;
293  std::unordered_multimap<xAOD::DetectorIDHashType, const xAOD::StripCluster*> stripClustersHashIdMap0; // assumes that the first key is the FPGA one
294  for (const auto* cluster0 : stripClusters0) {
295  const xAOD::DetectorIDHashType hashId0 = cluster0->identifierHash();
296  stripClustersHashIdMap0.insert(std::make_pair(hashId0, cluster0));
297  }
298 
299  // Find all pairs of clusters within the same detector element that share at least one RDO
300  const std::vector<ClusterPair<xAOD::StripCluster>> stripPairsWithCommonRdos = findNonMergedClusters(stripClustersHashIdMap0);
301 
302  // If any such pairs are found, log an error with details for debugging
303  if (stripPairsWithCommonRdos.size() > 0) {
304  std::stringstream ss;
305  for (const auto& pair : stripPairsWithCommonRdos) {
306  ss << "Found " << pair.commonRDOs << " common RDOs between clusters with hash "
307  << pair.clusters.first->identifierHash() << ": "
308  << pair.clusters.first->identifier() << " and "
309  << pair.clusters.second->identifier() << "\n";
310  }
311  ATH_MSG_ERROR("Strip cluster pairs with common RDOs:\n" << ss.str());
312  }
313  }
314  const xAOD::StripClusterContainer stripClusters1 = *handle1;
315  std::unordered_multimap<xAOD::DetectorIdentType, const xAOD::StripCluster*> stripClustersMap1;
316  std::unordered_multimap<xAOD::DetectorIDHashType, const xAOD::StripCluster*> stripClustersHashIdMap1;
317  for (const auto *cluster1 : stripClusters1) {
318  const xAOD::DetectorIdentType id1 = cluster1->identifier();
319  const xAOD::DetectorIDHashType hashId1 = cluster1->identifierHash();
320  stripClustersMap1.insert(std::make_pair(id1, cluster1));
321  stripClustersHashIdMap1.insert(std::make_pair(hashId1, cluster1));
322  }
323 
324 
325  for (auto cluster0 : *handle0) {
326  const std::vector<const xAOD::StripCluster*> matchedClusters = findMatchingCluster(cluster0, stripClustersMap1, stripClustersHashIdMap1,
327  m_matchByID,
329 
330  if (matchedClusters.size() == 0 && handle1->size() > 0) {
331  std::vector<std::string> regions {"all"};
332  if(m_stripid->barrel_ec(cluster0->rdoList()[0]) == 0) regions.push_back("barrel");
333  else regions.push_back("endcap");
334  for (const auto& region : regions) {
337  Monitored::Scalar<float>(handle0.key() + "_UNMATCHED_GLOBALPOSITION_Z_" + region, cluster0->globalPosition()[2]),
338  Monitored::Scalar<float>(handle0.key() + "_UNMATCHED_GLOBALPOSITION_R_" + region, sqrt(cluster0->globalPosition()[0]*cluster0->globalPosition()[0] +
339  cluster0->globalPosition()[1]*cluster0->globalPosition()[1])),
340  Monitored::Scalar<float>("nmatched_strip_clusters_"+region, matchedClusters.size() - 0.5)
341  );
342  }
343  continue;
344  }
345  if (matchedClusters.size() > 1) {
346  ATH_MSG_ERROR(logMultipleClusterMatches(matchedClusters));
347  return StatusCode::FAILURE;
348  }
349 
350  const xAOD::StripCluster *cluster1 = matchedClusters[0];
351 
352  std::vector<std::string> regions {"all"};
353  if(m_stripid->barrel_ec(cluster0->rdoList()[0]) == 0) regions.push_back("barrel");
354  else regions.push_back("endcap");
355 
356  for(auto const& region: regions)
357  {
360  Monitored::Scalar<float>("diff_strip_locx_" + region, cluster0->localPosition<1>()[0] - cluster1->localPosition<1>()[0]),
361  Monitored::Scalar<float>("diff_strip_locxZoom_" + region, cluster0->localPosition<1>()[0] - cluster1->localPosition<1>()[0]),
362  Monitored::Scalar<float>("diff_strip_covxx_" + region, cluster0->localCovariance<1>()(0, 0) - cluster1->localCovariance<1>()(0, 0)),
363  Monitored::Scalar<float>("diff_strip_globalx_" + region, cluster0->globalPosition()[0] - cluster1->globalPosition()[0]),
364  Monitored::Scalar<float>("diff_strip_globaly_" + region, cluster0->globalPosition()[1] - cluster1->globalPosition()[1]),
365  Monitored::Scalar<float>("diff_strip_globalz_" + region, cluster0->globalPosition()[2] - cluster1->globalPosition()[2]),
366  Monitored::Scalar<float>("diff_strip_channelsphi_" + region, cluster0->channelsInPhi() - cluster1->channelsInPhi()),
367  Monitored::Scalar<int>("diff_strip_rdos_" +region , cluster0->rdoList().size() - cluster1->rdoList().size()),
368  Monitored::Scalar<float>("strip_globalR_ref_" + region, sqrt(cluster1->globalPosition()[0]*cluster1->globalPosition()[0] +
369  cluster1->globalPosition()[1]*cluster1->globalPosition()[1])),
370  Monitored::Scalar<float>("strip_globalZ_ref_" + region, cluster1->globalPosition()[2]),
371  Monitored::Scalar<float>("nmatched_strip_clusters_"+region, matchedClusters.size() - 0.5)
372  );
373  if(region != "all")
374  {
377  Monitored::Scalar<float>("diff_strip_locx_"+region+"Layer" + std::to_string(m_stripid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
378  cluster0->localPosition<1>()[0] - cluster1->localPosition<1>()[0]),
379  Monitored::Scalar<float>("diff_strip_locxZoom_"+region+"Layer" + std::to_string(m_stripid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
380  cluster0->localPosition<1>()[0] - cluster1->localPosition<1>()[0]),
381  Monitored::Scalar<float>("diff_strip_covxx_"+region+"Layer" + std::to_string(m_stripid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
382  cluster0->localCovariance<1>()(0, 0) - cluster1->localCovariance<1>()(0, 0)),
383  Monitored::Scalar<float>("diff_strip_globalX_"+region+"Layer" + std::to_string(m_stripid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
384  cluster0->globalPosition()[0] - cluster1->globalPosition()[0]),
385  Monitored::Scalar<float>("diff_strip_globalY_"+region+"Layer" + std::to_string(m_stripid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
386  cluster0->globalPosition()[1] - cluster1->globalPosition()[1]),
387  Monitored::Scalar<float>("diff_strip_globalZ_"+region+"Layer" + std::to_string(m_stripid->layer_disk(m_pixelid->wafer_id(cluster0->identifierHash()))),
388  cluster0->globalPosition()[2] - cluster1->globalPosition()[2]),
389  Monitored::Scalar<float>("nmatched_strip_clusters_"+region, matchedClusters.size() - 0.5)
390  );
391  }
392  }
393  }
394  m_chrono->chronoStop("FPGAOutputValidationAlg::strip diff");
395  }
396 
397  for (std::size_t index = 0; index < m_pixelKeys.size(); index++) {
400  ATH_CHECK(handle.isValid());
401 
402 
403  for(auto cluster : *handle)
404  {
405  std::vector<std::string> regions {"all"};
406  if(m_pixelid->barrel_ec(cluster->rdoList()[0]) == 0) regions.push_back("barrel");
407  else regions.push_back("endcap");
408 
409  for(auto const& region: regions)
410  {
413  Monitored::Scalar<float>(key.key() + "_LOCALPOSITION_X_" + region, cluster->localPosition<2>()[0]),
414  Monitored::Scalar<float>(key.key() + "_LOCALPOSITION_Y_" + region, cluster->localPosition<2>()[1]),
415  Monitored::Scalar<float>(key.key() + "_LOCALCOVARIANCE_XX_" + region, cluster->localCovariance<2>()(0, 0)),
416  Monitored::Scalar<float>(key.key() + "_LOCALCOVARIANCE_YY_" + region, cluster->localCovariance<2>()(1, 1)),
417  Monitored::Scalar<float>(key.key() + "_GLOBALPOSITION_X_" + region, cluster->globalPosition()[0]),
418  Monitored::Scalar<float>(key.key() + "_GLOBALPOSITION_Y_" + region, cluster->globalPosition()[1]),
419  Monitored::Scalar<float>(key.key() + "_GLOBALPOSITION_Z_" + region, cluster->globalPosition()[2]),
420  Monitored::Scalar<int>(key.key() + "_CHANNELS_IN_PHI_" + region, cluster->channelsInPhi()),
421  Monitored::Scalar<int>(key.key() + "_CHANNELS_IN_ETA_" + region, cluster->channelsInEta()),
422  Monitored::Scalar<float>(key.key() + "_WIDTH_IN_ETA_" + region, cluster->widthInEta()),
423  Monitored::Scalar<int>(key.key() + "_TOTAL_TOT_" + region, cluster->totalToT())
424  );
425  }
426  }
427  }
428 
429  for (std::size_t index = 0; index < m_stripKeys.size(); index++) {
432  ATH_CHECK(handle.isValid());
433 
434  for(auto cluster : *handle)
435  {
436  std::vector<std::string> regions {"all"};
437  if(m_stripid->barrel_ec(cluster->rdoList()[0]) == 0) regions.push_back("barrel");
438  else regions.push_back("endcap");
439 
440  for(auto const& region: regions)
441  {
444  Monitored::Scalar<float>(key.key() + "_LOCALPOSITIONZOOM_X_" + region, cluster->localPosition<1>()(0,0)),
445  Monitored::Scalar<float>(key.key() + "_LOCALPOSITION_X_" + region, cluster->localPosition<1>()(0,0)),
446  Monitored::Scalar<float>(key.key() + "_LOCALCOVARIANCE_XX_" + region, cluster->localCovariance<1>()(0, 0)),
447  Monitored::Scalar<float>(key.key() + "_GLOBALPOSITION_X_" + region, cluster->globalPosition()[0]),
448  Monitored::Scalar<float>(key.key() + "_GLOBALPOSITION_Y_" + region, cluster->globalPosition()[1]),
449  Monitored::Scalar<float>(key.key() + "_GLOBALPOSITION_Z_" + region, cluster->globalPosition()[2]),
450  Monitored::Scalar<float>(key.key() + "_CHANNELS_IN_PHI_" + region, cluster->channelsInPhi())
451  );
452  }
453  }
454  }
455 
456  return StatusCode::SUCCESS;
457 }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

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

◆ extraOutputDeps()

const DataObjIDColl & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

90 {
91  // If we didn't find any symlinks to add, just return the collection
92  // from the base class. Otherwise, return the extended collection.
93  if (!m_extendedExtraObjects.empty()) {
95  }
96  return BaseAlg::extraOutputDeps();
97 }

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext &  ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96  {
97  return execState( ctx ).filterPassed();
98  }

◆ initialize()

StatusCode FPGAOutputValidationAlg::initialize ( )
finaloverridevirtual

Definition at line 146 of file FPGAOutputValidationAlg.cxx.

146  {
147  ATH_MSG_INFO("Initializing FPGAOutputValidationAlg");
148 
149  ATH_CHECK(m_pixelKeys.initialize(!m_pixelKeys.empty()));
150  ATH_CHECK(m_stripKeys.initialize(!m_stripKeys.empty()));
151 
152  ATH_CHECK(m_monitoringTool.retrieve());
153 
154  ATH_CHECK(m_chrono.retrieve());
155 
156  ATH_CHECK(detStore()->retrieve(m_pixelid, "PixelID"));
157  ATH_CHECK(detStore()->retrieve(m_stripid, "SCT_ID"));
158  ATH_CHECK(detStore()->retrieve(m_SCT_mgr, "ITkStrip"));
159  ATH_CHECK(detStore()->retrieve(m_PIX_mgr, "ITkPixel"));
160 
161  return StatusCode::SUCCESS;
162 }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

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.

◆ isClonable()

bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::isClonable
overridevirtualinherited

Specify if the algorithm is clonable.

Reentrant algorithms are clonable.

Definition at line 68 of file AthCommonReentrantAlgorithm.cxx.

52 {
53  // Reentrant algorithms are clonable.
54  return true;
55 }

◆ msg() [1/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< Gaudi::Algorithm >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

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()

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> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool  state,
const EventContext &  ctx 
) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100  {
101  execState( ctx ).setFilterPassed( state );
102  }

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext &  ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

77 {
78  return BaseAlg::sysExecute (ctx);
79 }

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in InputMakerBase, and HypoBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

107  {
109 
110  if (sc.isFailure()) {
111  return sc;
112  }
113 
114  ServiceHandle<ICondSvc> cs("CondSvc",name());
115  for (auto h : outputHandles()) {
116  if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
117  // do this inside the loop so we don't create the CondSvc until needed
118  if ( cs.retrieve().isFailure() ) {
119  ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
120  return StatusCode::SUCCESS;
121  }
122  if (cs->regHandle(this,*h).isFailure()) {
123  sc = StatusCode::FAILURE;
124  ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
125  << " with CondSvc");
126  }
127  }
128  }
129  return sc;
130 }

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ m_allowedRdoMisses

Gaudi::Property<size_t> FPGAOutputValidationAlg::m_allowedRdoMisses {this, "allowedRdoMisses", 0, "Allowed number of RDOs that don't have to match between clusters. Setting this to a very large number means essentially that 1 common RDO is enough to match clusters."}
private

Definition at line 40 of file FPGAOutputValidationAlg.h.

◆ m_checkClusterRdos

Gaudi::Property<bool> FPGAOutputValidationAlg::m_checkClusterRdos {this, "checkClusterRdos", false, "If true, check if FPGA clusters share any RDOs"}
private

Definition at line 41 of file FPGAOutputValidationAlg.h.

◆ m_chrono

ServiceHandle<IChronoStatSvc> FPGAOutputValidationAlg::m_chrono {this,"ChronoStatSvc","ChronoStatSvc"}
private

Definition at line 49 of file FPGAOutputValidationAlg.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doDiffHistograms

Gaudi::Property<bool> FPGAOutputValidationAlg::m_doDiffHistograms
private
Initial value:
{
this,
"doDiffHistograms",
false,
"Create extra histograms for cluster parameter diffs between matched clusters."
}

Definition at line 33 of file FPGAOutputValidationAlg.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_matchByID

Gaudi::Property<bool> FPGAOutputValidationAlg::m_matchByID {this, "matchByID", false, "Use hash to match clusters. If false, use only the rdo list."}
private

Definition at line 39 of file FPGAOutputValidationAlg.h.

◆ m_monitoringTool

ToolHandle<GenericMonitoringTool> FPGAOutputValidationAlg::m_monitoringTool {this, "monitoringTool", "", "Monitoring tool"}
private

Definition at line 46 of file FPGAOutputValidationAlg.h.

◆ m_outputRootFilePath

Gaudi::Property<std::string> FPGAOutputValidationAlg::m_outputRootFilePath
private
Initial value:
{
this,
"outputRootFilePath",
"fpgaOutputValidation.root",
"Path to output root file containing histograms."
}

Definition at line 26 of file FPGAOutputValidationAlg.h.

◆ m_PIX_mgr

const InDetDD::SiDetectorManager* FPGAOutputValidationAlg::m_PIX_mgr = nullptr
private

Definition at line 53 of file FPGAOutputValidationAlg.h.

◆ m_pixelid

const PixelID* FPGAOutputValidationAlg::m_pixelid {nullptr}
private

Definition at line 51 of file FPGAOutputValidationAlg.h.

◆ m_pixelKeys

SG::ReadHandleKeyArray<xAOD::PixelClusterContainer> FPGAOutputValidationAlg::m_pixelKeys {this, "pixelKeys", {}}
private

Definition at line 43 of file FPGAOutputValidationAlg.h.

◆ m_SCT_mgr

const InDetDD::SiDetectorManager* FPGAOutputValidationAlg::m_SCT_mgr = nullptr
private

Definition at line 54 of file FPGAOutputValidationAlg.h.

◆ m_stripid

const SCT_ID* FPGAOutputValidationAlg::m_stripid {nullptr}
private

Definition at line 52 of file FPGAOutputValidationAlg.h.

◆ m_stripKeys

SG::ReadHandleKeyArray<xAOD::StripClusterContainer> FPGAOutputValidationAlg::m_stripKeys {this, "stripKeys", {}}
private

Definition at line 44 of file FPGAOutputValidationAlg.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::UncalibratedMeasurement_v1::identifier
DetectorIdentType identifier() const
Returns the full Identifier of the measurement.
xAOD::UncalibratedMeasurement_v1::identifierHash
DetectorIDHashType identifierHash() const
Returns the IdentifierHash of the measurement (corresponds to the detector element IdentifierHash)
FPGAOutputValidationAlg::m_pixelKeys
SG::ReadHandleKeyArray< xAOD::PixelClusterContainer > m_pixelKeys
Definition: FPGAOutputValidationAlg.h:43
xAOD::DetectorIdentType
long unsigned int DetectorIdentType
Definition: MeasurementDefs.h:44
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
xAOD::PixelCluster_v1::widthInEta
float widthInEta() const
Returns the width of the cluster in phi (x) and eta (y) directions, respectively.
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::StripCluster_v1::channelsInPhi
int channelsInPhi() const
Returns the dimensions of the cluster in numbers of channels in phi (x), respectively.
FPGAOutputValidationAlg::m_stripid
const SCT_ID * m_stripid
Definition: FPGAOutputValidationAlg.h:52
xAOD::PixelCluster_v1::rdoList
const std::vector< Identifier > rdoList() const
Returns the list of identifiers of the channels building the cluster.
Definition: PixelCluster_v1.cxx:42
PixelID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: PixelID.h:615
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
index
Definition: index.py:1
AthCommonDataStore::renounce
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)
Definition: AthCommonDataStore.h:380
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
SCT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: SCT_ID.h:728
FPGAOutputValidationAlg::m_stripKeys
SG::ReadHandleKeyArray< xAOD::StripClusterContainer > m_stripKeys
Definition: FPGAOutputValidationAlg.h:44
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
SG::ReadHandleKey< xAOD::PixelClusterContainer >
PixelID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: PixelID.h:360
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
xAOD::StripCluster_v1::rdoList
const std::vector< Identifier > rdoList() const
Returns the list of identifiers of the channels building the cluster.
Definition: StripCluster_v1.cxx:37
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
FPGAOutputValidationAlg::m_chrono
ServiceHandle< IChronoStatSvc > m_chrono
Definition: FPGAOutputValidationAlg.h:49
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:74
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
AthCommonReentrantAlgorithm::extraOutputDeps
virtual const DataObjIDColl & extraOutputDeps() const override
Return the list of extra output dependencies.
Definition: AthCommonReentrantAlgorithm.cxx:89
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
FPGAOutputValidationAlg::m_checkClusterRdos
Gaudi::Property< bool > m_checkClusterRdos
Definition: FPGAOutputValidationAlg.h:41
FPGAOutputValidationAlg::m_SCT_mgr
const InDetDD::SiDetectorManager * m_SCT_mgr
Definition: FPGAOutputValidationAlg.h:54
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
AthCommonReentrantAlgorithm::sysExecute
virtual StatusCode sysExecute(const EventContext &ctx) override
Execute an algorithm.
Definition: AthCommonReentrantAlgorithm.cxx:76
FPGAOutputValidationAlg::m_allowedRdoMisses
Gaudi::Property< size_t > m_allowedRdoMisses
Definition: FPGAOutputValidationAlg.h:40
FPGAOutputValidationAlg::m_PIX_mgr
const InDetDD::SiDetectorManager * m_PIX_mgr
Definition: FPGAOutputValidationAlg.h:53
FPGAOutputValidationAlg::m_doDiffHistograms
Gaudi::Property< bool > m_doDiffHistograms
Definition: FPGAOutputValidationAlg.h:33
xAOD::StripCluster_v1
Definition: StripCluster_v1.h:17
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
xAOD::UncalibratedMeasurement_v1::localCovariance
ConstMatrixMap< N > localCovariance() const
Returns the local covariance of the measurement.
FPGAOutputValidationAlg::m_matchByID
Gaudi::Property< bool > m_matchByID
Definition: FPGAOutputValidationAlg.h:39
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
xAOD::UncalibratedMeasurement_v1::localPosition
ConstVectorMap< N > localPosition() const
Returns the local position of the measurement.
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
PixelID::layer_disk
int layer_disk(const Identifier &id) const
Definition: PixelID.h:622
xAOD::PixelCluster_v1::globalPosition
ConstVectorMap< 3 > globalPosition() const
Returns the global position of the pixel cluster.
Definition: PixelCluster_v1.cxx:15
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
xAOD::DetectorIDHashType
unsigned int DetectorIDHashType
@ detector ID element hash
Definition: MeasurementDefs.h:43
xAOD::PixelCluster_v1::totalToT
int totalToT() const
Returns the sum of the ToTs of the channels building the cluster.
FPGAOutputValidationAlg::m_pixelid
const PixelID * m_pixelid
Definition: FPGAOutputValidationAlg.h:51
SCT_ID::layer_disk
int layer_disk(const Identifier &id) const
Definition: SCT_ID.h:734
DeMoScan.index
string index
Definition: DeMoScan.py:362
a
TList * a
Definition: liststreamerinfos.cxx:10
xAOD::PixelCluster_v1
Definition: PixelCluster_v1.h:17
h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::StripCluster_v1::globalPosition
ConstVectorMap< 3 > globalPosition() const
Returns the global position of the strip cluster.
Definition: StripCluster_v1.cxx:15
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthCommonReentrantAlgorithm.cxx:107
FPGAOutputValidationAlg::m_monitoringTool
ToolHandle< GenericMonitoringTool > m_monitoringTool
Definition: FPGAOutputValidationAlg.h:46
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:801
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
xAOD::PixelCluster_v1::channelsInEta
int channelsInEta() const
AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Definition: AthCommonReentrantAlgorithm.h:114
xAOD::PixelCluster_v1::channelsInPhi
int channelsInPhi() const
Returns the dimensions of the cluster in numbers of channels in phi (x) and eta (y) directions,...
fitman.k
k
Definition: fitman.py:528
ServiceHandle< ICondSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
module_driven_slicing.key1
key1
Definition: module_driven_slicing.py:157