Loading [MathJax]/jax/input/TeX/config.js
 |
ATLAS Offline Software
|
Conditions algorithms for emulating ITK strip defects.
More...
#include <StripDefectsEmulatorCondAlg.h>
|
virtual StatusCode | initialize () override final |
|
virtual StatusCode | execute (const EventContext &ctx) const override |
|
| DefectsEmulatorCondAlgBase (const std::string &name, ISvcLocator *pSvcLocator) |
|
virtual StatusCode | finalize () override |
|
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 > &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 |
|
|
enum | EProbabilities { kModuleDefectProb,
kCellDefectProb,
kNProb
} |
|
enum | ECornerDefectParams {
kCornerDefectProb,
kCornerDefectWidthColumnDirectionOffset,
kCornerDefectWidthColumnDirection,
kCornerDefectkWidthRowDirectionOffset,
kCornerDefectkWidthRowDirection,
kCornerDefectkSagittaOffset,
kCornerDefectkSagitta,
kNCornerDefectParams
} |
|
enum | ECounts {
kNElements,
kNDefects,
kNRetries,
kNMaxRtriesExceeded,
kNModulesWithDefects,
kMaxDefectsPerModule,
kNCounts
} |
|
enum | EPosHistType { kDefectModulePos,
kModulesWithDefectsPos,
kNPosHists
} |
|
enum | EPerModuleHistType { kMatrixTypeId,
kDefectModule,
kDefectCell,
kNPerModuleHistTypes
} |
|
|
std::unordered_multimap< unsigned int, unsigned int > | getModuleConnectionMap (const InDetDD::SiDetectorElementCollection &det_ele_coll) const |
| Return the map which defines which modules are connected to the same sensor as a reference module. More...
|
|
bool | isModuleDefect (const EventContext &ctx, unsigned int id_hash) const |
| Alternative method to declare strip modules as defect. More...
|
|
const StripDefectsEmulatorCondAlg & | derived () const |
|
StatusCode | initializeBase (unsigned int n_masks, unsigned int wafer_hash_max) |
|
StatusCode | initializeProbabilities (unsigned int n_masks) |
|
StatusCode | initializeCornerDefects () |
|
StatusCode | checkProbabilities (unsigned int n_probabilities) const |
| Consistency check of module patterns, probabilities. More...
|
|
double | totalProbability (const std::vector< unsigned int > &module_pattern_idx, unsigned int prob_idx) const |
| Compute the total probability using the probabilities associated to the given list of patterns. More...
|
|
void | makeCumulativeProbabilityDist (std::vector< unsigned int > &module_pattern_idx, unsigned int prob_idx, std::vector< double > &cumulative_prob) const |
| Create a cumulative distribution from the referenced set of probabilities. More...
|
|
unsigned int | throwNumberOfDefects (CLHEP::HepRandomEngine *rndmEngine, const std::vector< unsigned int > &module_pattern_idx, unsigned int n_masks, unsigned int n_cells, std::vector< unsigned int > &n_mask_defects) const |
|
void | printSummaryOfDefectGeneration (unsigned int n_masks, unsigned int n_error, unsigned int n_defects_total, const std::vector< std::array< unsigned int, kNCounts > > &counts) const |
|
std::pair< unsigned int, unsigned int > | findHist (unsigned int pattern_i, unsigned int n_rows, unsigned int n_cols) const |
|
void | histogramDefectModule (unsigned int module_pattern_i, unsigned int hist_pattern_i, unsigned int id_hash, const Amg::Vector3D ¢er) const |
|
void | fillPerModuleHistograms (unsigned int module_pattern_i, unsigned int pattern_hist_i, unsigned int matrix_histogram_index, unsigned int matrix_index, unsigned int module_i, unsigned int n_masks, const std::vector< unsigned int > &n_mask_defects, const Amg::Vector3D ¢er) 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< ISCT_ConditionsTool > | m_moduleVetoTool {this,"SCTConditionsTool","","Optional SCT conditions tool to mark modules as defect (alternative to ModulePattern)"} |
|
SG::ReadCondHandleKey< T_DetectorElementCollection > | m_detEleCollKey |
|
SG::WriteCondHandleKey< T_EmulatedDefects > | m_writeKey |
|
Gaudi::Property< std::string > | m_idName |
|
const T_ID * | m_idHelper |
|
ServiceHandle< IAthRNGSvc > | m_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""} |
|
Gaudi::Property< std::vector< std::vector< int > > > | m_modulePattern |
|
Gaudi::Property< std::vector< std::vector< double > > > | m_defectProbability |
|
Gaudi::Property< std::vector< std::vector< double > > > | m_nDefectFractionsPerPattern |
|
Gaudi::Property< std::vector< std::vector< double > > > | m_cornerDefectParamsPerPattern |
|
Gaudi::Property< std::vector< std::vector< double > > > | m_cornerDefectNCornerFractionsPerPattern |
|
std::vector< std::vector< std::vector< float > > > | m_perPatternAndMaskFractions |
|
std::vector< std::vector< float > > | m_perPatternCornerDefectNCornerCummulativeProb |
|
Gaudi::Property< bool > | m_oddRowToggle {this, "OddRowToggle", false} |
|
Gaudi::Property< bool > | m_oddColToggle {this, "OddColToggle", false} |
|
Gaudi::Property< bool > | m_checkerBoardToggle {this, "CheckerBoardDefects", false} |
|
Gaudi::Property< unsigned int > | m_maxAttempts {this, "MaxRandomPositionAttempts", 10} |
|
ServiceHandle< ITHistSvc > | m_histSvc {this,"HistSvc","THistSvc"} |
|
Gaudi::Property< std::string > | m_histogramGroupName {this,"HistogramGroupName","", "Histogram group name or empty to disable histogramming"} |
|
Gaudi::Property< bool > | m_fillHistogramsPerPattern {this, "FillHistogramsPerPattern", false, "If true, histogram per module defects etc. separately per pattern."} |
|
Gaudi::Property< bool > | m_fillEtaPhiHistogramsPerPattern {this, "FillEtaPhiHistogramsPerPattern", false, "If true, histogram per eta, phi amd z, R are filled separately per pattern."} |
|
std::string | m_rngName |
|
std::vector< std::string > | m_groupDefectHistNames |
|
std::vector< unsigned int > | m_maxNGroupDefects |
|
std::mutex | m_histMutex |
|
std::vector< unsigned int > m_matrixTypeId | ATLAS_THREAD_SAFE |
|
std::vector< std::vector< unsigned int > > m_dimPerHist | ATLAS_THREAD_SAFE |
|
std::vector< std::vector< TH2 * > > m_hist | ATLAS_THREAD_SAFE |
|
std::vector< std::vector< std::vector< TH1 * > > > m_groupDefectHists | ATLAS_THREAD_SAFE |
|
std::vector< std::vector< TH2 * > > m_moduleHist | ATLAS_THREAD_SAFE |
|
std::array< std::vector< TH2 * >, kNPosHists > m_defectModuleEtaPhiHist | ATLAS_THREAD_SAFE |
|
std::array< std::vector< TH2 * >, kNPosHists > m_defectModuleEtaLayerHist | ATLAS_THREAD_SAFE |
|
std::atomic< unsigned int > | m_modulesWithoutDefectParameters {} |
|
bool | m_histogrammingEnabled = false |
|
Conditions algorithms for emulating ITK strip defects.
The algorithm mask random strips and modules as defect. This data can be used to reject hits overlapping with these defects.
Definition at line 38 of file StripDefectsEmulatorCondAlg.h.
◆ StoreGateSvc_t
◆ T_DetectorElementCollection
◆ T_EmulatedDefects
◆ T_ID
◆ T_ModuleDesign
◆ T_ModuleHelper
◆ ECornerDefectParams
Enumerator |
---|
kCornerDefectProb | |
kCornerDefectWidthColumnDirectionOffset | |
kCornerDefectWidthColumnDirection | |
kCornerDefectkWidthRowDirectionOffset | |
kCornerDefectkWidthRowDirection | |
kCornerDefectkSagittaOffset | |
kCornerDefectkSagitta | |
kNCornerDefectParams | |
Definition at line 95 of file DefectsEmulatorCondAlgBase.h.
◆ ECounts
Enumerator |
---|
kNElements | |
kNDefects | |
kNRetries | |
kNMaxRtriesExceeded | |
kNModulesWithDefects | |
kMaxDefectsPerModule | |
kNCounts | |
Definition at line 142 of file DefectsEmulatorCondAlgBase.h.
◆ EPerModuleHistType
◆ EPosHistType
◆ EProbabilities
◆ cardinality()
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.
◆ checkProbabilities()
StatusCode InDet::DefectsEmulatorCondAlgBase::checkProbabilities |
( |
unsigned int |
n_probabilities | ) |
const |
|
protectedinherited |
Consistency check of module patterns, probabilities.
Definition at line 159 of file DefectsEmulatorCondAlgBase.cxx.
162 && ModuleIdentifierMatchUtil::verifyElementCount<double>(
m_defectProbability.value(), n_probabilities))) {
168 ATH_MSG_ERROR(
"Order problem in modulePattern : " << ret <<
"?");
170 ret = ModuleIdentifierMatchUtil::verifyElementCount<double>(
m_defectProbability.value(), n_probabilities);
172 ATH_MSG_ERROR(
"Size problem in defectProbability : " << ret <<
" ( n_prob" << n_probabilities <<
")?");
177 && ModuleIdentifierMatchUtil::verifyElementCount<double>(
m_defectProbability.value(), n_probabilities)
178 ? StatusCode::SUCCESS : StatusCode::FAILURE;
◆ 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);
◆ 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.
◆ 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.
◆ 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]
◆ DefectsEmulatorCondAlgBase()
InDet::DefectsEmulatorCondAlgBase::DefectsEmulatorCondAlgBase |
|
inherited |
◆ derived()
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
◆ 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
◆ extraOutputDeps()
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.
◆ fillPerModuleHistograms()
void InDet::DefectsEmulatorCondAlgBase::fillPerModuleHistograms |
( |
unsigned int |
module_pattern_i, |
|
|
unsigned int |
pattern_hist_i, |
|
|
unsigned int |
matrix_histogram_index, |
|
|
unsigned int |
matrix_index, |
|
|
unsigned int |
module_i, |
|
|
unsigned int |
n_masks, |
|
|
const std::vector< unsigned int > & |
n_mask_defects, |
|
|
const Amg::Vector3D & |
center |
|
) |
| const |
|
protectedinherited |
Definition at line 476 of file DefectsEmulatorCondAlgBase.cxx.
487 assert( pattern_hist_i < m_moduleHist.size());
490 unsigned int ids_per_col =
static_cast<unsigned int>(m_moduleHist[pattern_hist_i][
kDefectModule]->GetNbinsX());
491 unsigned int bin_i=m_moduleHist[pattern_hist_i][
kDefectModule]->GetBin( module_i%ids_per_col+1, module_i/ids_per_col+1);
492 unsigned int mask_i=n_masks;
493 for (; --mask_i>0; ) {
494 assert( mask_i < n_mask_defects.size() && mask_i>0);
495 if (!m_groupDefectHists.empty()) {
496 m_groupDefectHists[pattern_hist_i][matrix_histogram_index][mask_i-1]->Fill(n_mask_defects[mask_i]);
499 m_moduleHist[pattern_hist_i][
kDefectCell+mask_i]->SetBinContent(bin_i, n_mask_defects[mask_i]);
502 m_moduleHist[pattern_hist_i][
kDefectCell+mask_i]->SetBinContent(bin_i, n_mask_defects[mask_i]);
503 m_moduleHist[pattern_hist_i][
kMatrixTypeId]->SetBinContent(bin_i, matrix_index+1 );
504 unsigned int n_defects_total =
std::accumulate(n_mask_defects.begin(),n_mask_defects.end(), 0
u);
505 if (n_defects_total>0) {
510 m_defectModuleEtaLayerHist[
kModulesWithDefectsPos][eta_phi_pattern_i]->Fill(center.x(), center.y(),n_defects_total);
◆ filterPassed()
◆ finalize()
StatusCode InDet::DefectsEmulatorCondAlgBase::finalize |
( |
| ) |
|
|
overridevirtualinherited |
◆ findHist()
std::pair< unsigned int, unsigned int > InDet::DefectsEmulatorCondAlgBase::findHist |
( |
unsigned int |
pattern_i, |
|
|
unsigned int |
n_rows, |
|
|
unsigned int |
n_cols |
|
) |
| const |
|
protectedinherited |
Definition at line 267 of file DefectsEmulatorCondAlgBase.cxx.
268 unsigned int key=(n_rows << 16) | n_cols;
269 assert( pattern_i < m_dimPerHist.size());
270 assert( pattern_i < m_hist.size());
271 unsigned int matrix_type_id;
273 std::vector<unsigned int>::const_iterator global_iter =
std::find(m_matrixTypeId.begin(), m_matrixTypeId.end(),
key );
274 if (global_iter != m_matrixTypeId.end()) {
275 matrix_type_id = global_iter - m_matrixTypeId.begin();
278 matrix_type_id =m_matrixTypeId.size();
279 m_matrixTypeId.push_back(
key);
283 std::vector<unsigned int>::const_iterator iter =
std::find(m_dimPerHist[pattern_i].
begin(), m_dimPerHist[pattern_i].
end(),
key );
284 if (iter == m_dimPerHist[pattern_i].
end()) {
286 name <<
"defects_" << pattern_i <<
"_" << (matrix_type_id) <<
"_" << n_rows <<
"_" << n_cols;
288 title <<
"Defects for " << n_rows <<
"(rows) #times " << n_cols <<
" (columns) ID " << (matrix_type_id) <<
", pattern " << pattern_i;
291 m_hist[pattern_i].push_back(
new TH2F(
name.str().c_str(),
title.str().c_str(),
292 n_cols, -0.5, n_cols-0.5,
293 n_rows, -0.5, n_rows-0.5
296 m_hist[pattern_i].back()->GetXaxis()->SetTitle(
"offline column");
297 m_hist[pattern_i].back()->GetYaxis()->SetTitle(
"offline row");
299 throw std::runtime_error(
"Failed to register histogram.");
301 m_dimPerHist[pattern_i].push_back(
key);
303 if (!m_groupDefectHists.empty()) {
304 assert( pattern_i < m_groupDefectHists.size());
306 m_groupDefectHists[pattern_i].emplace_back();
311 hname <<
"n_" <<
group_name <<
"_" << pattern_i <<
"_" << matrix_type_id <<
"_" << n_rows <<
"_" << n_cols;
313 htitle <<
"Number of " <<
group_name <<
" defects for " << n_rows <<
"(rows) #times " << n_cols <<
" (columns) ID "
314 << (matrix_type_id) <<
", pattern " << pattern_i;
318 assert(group_i < m_groupDefectHists[pattern_i].back().
size());
319 m_groupDefectHists[pattern_i].back()[group_i]=
new TH1F(
hname.str().c_str(), htitle.
str().c_str(),
323 m_groupDefectHists[pattern_i].back()[group_i]).isFailure() ) {
324 throw std::runtime_error(
"Failed to register histogram.");
328 return std::make_pair(
static_cast<unsigned int>(m_hist[pattern_i].
size()-1), matrix_type_id);
331 return std::make_pair(
static_cast<unsigned int>(iter-m_dimPerHist[pattern_i].
begin()), matrix_type_id);
◆ getModuleConnectionMap()
Return the map which defines which modules are connected to the same sensor as a reference module.
Definition at line 57 of file StripDefectsEmulatorCondAlg.h.
◆ histogramDefectModule()
void InDet::DefectsEmulatorCondAlgBase::histogramDefectModule |
( |
unsigned int |
module_pattern_i, |
|
|
unsigned int |
hist_pattern_i, |
|
|
unsigned int |
id_hash, |
|
|
const Amg::Vector3D & |
center |
|
) |
| const |
|
protectedinherited |
Definition at line 461 of file DefectsEmulatorCondAlgBase.cxx.
465 assert( hist_pattern_i < m_moduleHist.size() );
466 unsigned int ids_per_col =
static_cast<unsigned int>(m_moduleHist[hist_pattern_i][
kDefectModule]->GetNbinsX());
467 unsigned int bin_i=m_moduleHist[hist_pattern_i][
kDefectModule]->GetBin( id_hash%ids_per_col+1, id_hash/ids_per_col+1);
468 m_moduleHist[hist_pattern_i][
kDefectModule]->SetBinContent(bin_i,1);
472 m_defectModuleEtaPhiHist[
kDefectModulePos][eta_phi_pattern_i]->Fill(center.z(), center.perp());
473 m_defectModuleEtaLayerHist[
kDefectModulePos][eta_phi_pattern_i]->Fill(center.x(), center.y());
◆ IDName()
static std::string InDet::StripDefectsEmulatorCondAlg::IDName |
( |
| ) |
|
|
inlinestaticprotected |
◆ initialize()
StatusCode InDet::StripDefectsEmulatorCondAlg::initialize |
( |
| ) |
|
|
finaloverridevirtual |
◆ initializeBase()
StatusCode InDet::DefectsEmulatorCondAlgBase::initializeBase |
( |
unsigned int |
n_masks, |
|
|
unsigned int |
wafer_hash_max |
|
) |
| |
|
protectedinherited |
Definition at line 21 of file DefectsEmulatorCondAlgBase.cxx.
33 constexpr
unsigned int n_different_matrices_max=6;
34 m_dimPerHist.resize(n_pattern_for_histogramming);
35 m_hist.resize(n_pattern_for_histogramming);
37 m_groupDefectHists.resize(n_pattern_for_histogramming);
39 for (
unsigned int pattern_i=0; pattern_i < n_pattern_for_histogramming; ++pattern_i) {
40 m_dimPerHist[pattern_i].reserve(n_different_matrices_max);
41 m_hist[pattern_i].reserve(n_different_matrices_max);
43 std::vector<std::string> hist_name {
44 "matrix_type_id_per_module;Matrix type ID per module",
45 "defect_module;Module is defect",
46 "defects_per_module;Defect cells per module"};
50 hist_name.push_back(
hname.str());
52 m_moduleHist.resize(n_pattern_for_histogramming);
53 unsigned int max_y_axis = (((wafer_hash_max+99)/100+9)/10)*10;
55 for (
unsigned int pattern_i=0; pattern_i<m_moduleHist.size(); ++pattern_i) {
56 m_moduleHist.at(pattern_i).resize(hist_name.size(),
nullptr);
57 for (
unsigned int hist_i=0; hist_i<hist_name.size(); ++hist_i) {
59 std::string::size_type
pos = hist_name.at(hist_i).find(
";");
61 a_name << hist_name[hist_i].substr(0, (
pos != std::string::npos ?
pos : hist_name[hist_i].
size())) <<
"_" << pattern_i;
63 a_title << hist_name[hist_i].substr((
pos != std::string::npos ?
pos+1 : 0), hist_name[hist_i].size())
64 <<
" ( module pattern " << pattern_i <<
")";
67 m_moduleHist.at(pattern_i).at(hist_i) =
new TH2F(a_name.
str().c_str(), a_title.
str().c_str(),
69 max_y_axis, -0.5, max_y_axis-0.5);
71 m_moduleHist[pattern_i][hist_i]->GetXaxis()->SetTitle(
"ID hash % 100");
72 m_moduleHist[pattern_i][hist_i]->GetYaxis()->SetTitle(
"ID hash / 100");
73 ATH_MSG_VERBOSE(
"Create histogram pattern " << pattern_i <<
" hist " << hist_i <<
" name " << a_name.
str().c_str()
74 <<
" -> " << m_moduleHist[pattern_i][hist_i]->GetName());
76 m_moduleHist[pattern_i][hist_i]).isFailure() ) {
77 return StatusCode::FAILURE;
83 for (
unsigned int pos_i=0; pos_i<m_defectModuleEtaPhiHist.size(); ++pos_i) {
84 m_defectModuleEtaPhiHist.at(pos_i).resize(n_eta_phi_histograms,
nullptr);
85 m_defectModuleEtaLayerHist.at(pos_i).resize(n_eta_phi_histograms,
nullptr);
87 std::array<std::string_view, kNPosHists> pos_hist_name {
89 "modules_with_defects"
91 std::array<std::string_view, kNPosHists> pos_hist_title {
93 "Modules with defects"
95 for (
unsigned pattern_i=0; pattern_i< n_eta_phi_histograms; ++pattern_i) {
96 for (
unsigned int pos_i=0; pos_i<m_defectModuleEtaPhiHist.size(); ++pos_i) {
99 a_name << pos_hist_name.at(pos_i) <<
"_zr" <<
"_" << pattern_i;
101 a_title << pos_hist_title.at(pos_i) <<
" vs global zr" <<
" ( module pattern " << pattern_i <<
")";
104 m_defectModuleEtaPhiHist.at(pos_i).at(pattern_i) =
new TH2F(a_name.
str().c_str(), a_title.
str().c_str(),
110 m_defectModuleEtaPhiHist.at(pos_i).at(pattern_i)).isFailure() ) {
111 return StatusCode::FAILURE;
116 a_name << pos_hist_name.at(pos_i) <<
"_xy" <<
"_" << pattern_i;
118 a_title << pos_hist_title.at(pos_i) <<
" vs global xy" <<
" ( module pattern " << pattern_i <<
")";
121 m_defectModuleEtaLayerHist.at(pos_i).at(pattern_i) =
new TH2F(a_name.
str().c_str(), a_title.
str().c_str(),
127 m_defectModuleEtaLayerHist.at(pos_i).at(pattern_i)).isFailure() ) {
128 return StatusCode::FAILURE;
137 for (
unsigned int mask_i=0; mask_i<n_masks-1; ++mask_i) {
143 ATH_MSG_FATAL(
"m_groupDefectHistNames does not contain a name per mask starting from the second mask "
144 "(the first mask must be the full matrix)");
145 return StatusCode::FAILURE;
148 ATH_MSG_FATAL(
"m_maxNGroupDefects does not contain a upper bin value for number of expected defects "
149 "per mask starting from the second mask (the first mask must be the full matrix)");
150 return StatusCode::FAILURE;
155 return StatusCode::SUCCESS;
◆ initializeCornerDefects()
StatusCode InDet::DefectsEmulatorCondAlgBase::initializeCornerDefects |
( |
| ) |
|
|
protectedinherited |
Definition at line 414 of file DefectsEmulatorCondAlgBase.cxx.
417 ATH_MSG_ERROR(
"Expected exactly one set of corner defect parameters per module pattern but the numbers disagree "
419 return StatusCode::FAILURE;
422 ATH_MSG_ERROR(
"Expected exactly one set of n corner fractions per module pattern but the numbers disagree "
424 return StatusCode::FAILURE;
432 return StatusCode::FAILURE;
435 ATH_MSG_ERROR(
"Too many Fractions for corner defects for pattern " << pattern_i <<
438 return StatusCode::FAILURE;
443 if (std::abs(
scale-1.)>1
e-3) {
445 <<
" corner(s) for pattern " << pattern_i <<
" do not add up to ~1 but " <<
scale);
446 return StatusCode::FAILURE;
452 total += fraction *
scale;
457 return StatusCode::SUCCESS;
◆ initializeProbabilities()
StatusCode InDet::DefectsEmulatorCondAlgBase::initializeProbabilities |
( |
unsigned int |
n_masks | ) |
|
|
protectedinherited |
Definition at line 344 of file DefectsEmulatorCondAlgBase.cxx.
347 ATH_MSG_ERROR(
"The number of fraction lists per pattern does not match the number of module patterns: "
349 return StatusCode::FAILURE;
352 ATH_MSG_ERROR(
"The number of probability lists per pattern does not match the number of module patterns: "
354 return StatusCode::FAILURE;
361 ATH_MSG_ERROR(
"There should be one probability for the module to be defect, one probability for a pixel/strip etc. "
362 "to be defect and one probability for each group to be defect i.e. "
365 return StatusCode::FAILURE;
374 <<
" for pattern " << pattern_i);
375 return StatusCode::FAILURE;
389 ATH_MSG_ERROR(
"Empty fraction list or fractions do not add up to 1: "
392 <<
" for pattern " << pattern_i <<
", mask " << mask_i
394 return StatusCode::FAILURE;
396 ATH_MSG_DEBUG(
"Fractions for pattern " << pattern_i <<
" mask " << mask_i
404 ATH_MSG_DEBUG(
"Probabilities for pattern " << pattern_i <<
" mask " << mask_i
◆ 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.
◆ isClonable()
◆ isModuleDefect()
bool InDet::StripDefectsEmulatorCondAlg::isModuleDefect |
( |
const EventContext & |
ctx, |
|
|
unsigned int |
id_hash |
|
) |
| const |
|
inlineprotected |
Alternative method to declare strip modules as defect.
If the module veto tool is enabled, the tool can be used alternatively to declare strip modules as defect.
Definition at line 63 of file StripDefectsEmulatorCondAlg.h.
◆ makeCumulativeProbabilityDist()
void InDet::DefectsEmulatorCondAlgBase::makeCumulativeProbabilityDist |
( |
std::vector< unsigned int > & |
module_pattern_idx, |
|
|
unsigned int |
prob_idx, |
|
|
std::vector< double > & |
cumulative_prob |
|
) |
| const |
|
inlineprotectedinherited |
Create a cumulative distribution from the referenced set of probabilities.
- Parameters
-
module_pattern_idx | index of patterns for which the associated probabilities are to be considered |
prob_idx | the index of the probability (e.g. module defect probability, single element defect probability) |
cumulative_prob | output vector to be filled with the cumulative_distribution in ascending order Create a cumulative distributions using the specified probabilities associated to each pattern referenced by module_pattern_idx |
Definition at line 130 of file DefectsEmulatorCondAlgBase.h.
133 cumulative_prob.clear();
134 double total_prob=0.f;
135 for (
unsigned int pattern_i : module_pattern_idx) {
138 cumulative_prob.push_back(total_prob);
◆ 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.
◆ printSummaryOfDefectGeneration()
void InDet::DefectsEmulatorCondAlgBase::printSummaryOfDefectGeneration |
( |
unsigned int |
n_masks, |
|
|
unsigned int |
n_error, |
|
|
unsigned int |
n_defects_total, |
|
|
const std::vector< std::array< unsigned int, kNCounts > > & |
counts |
|
) |
| const |
|
protectedinherited |
Definition at line 234 of file DefectsEmulatorCondAlgBase.cxx.
238 assert(counts.size() == n_masks+1 );
239 msg(MSG::INFO) <<
"Total cells: " << counts[0][
kNElements] <<
", module design of wrong type: " << n_error <<
", defects "
240 << n_defects_total <<
".\n";
241 for (
unsigned int mask_i=0; mask_i < counts.size(); ++mask_i) {
260 if (mask_i+1<counts.size()) {
◆ renounce()
◆ renounceArray()
◆ setFilterPassed()
◆ sysExecute()
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.
◆ sysInitialize()
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.
110 if (
sc.isFailure()) {
118 if ( cs.retrieve().isFailure() ) {
120 return StatusCode::SUCCESS;
122 if (cs->regHandle(
this,*
h).isFailure()) {
123 sc = StatusCode::FAILURE;
124 ATH_MSG_ERROR(
"unable to register WriteCondHandle " <<
h->fullKey()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ throwNumberOfDefects()
unsigned int InDet::DefectsEmulatorCondAlgBase::throwNumberOfDefects |
( |
CLHEP::HepRandomEngine * |
rndmEngine, |
|
|
const std::vector< unsigned int > & |
module_pattern_idx, |
|
|
unsigned int |
n_masks, |
|
|
unsigned int |
n_cells, |
|
|
std::vector< unsigned int > & |
n_mask_defects |
|
) |
| const |
|
protectedinherited |
Definition at line 189 of file DefectsEmulatorCondAlgBase.cxx.
195 n_mask_defects.clear();
196 n_mask_defects.resize(n_masks, 0
u);
200 std::vector<bool> has(n_masks,
false);
201 for (
unsigned int mask_i=n_masks; mask_i-->1; ) {
202 for (
unsigned int match_i: module_pattern_idx) {
211 for (
unsigned int mask_i=n_masks; mask_i-->1; ) {
213 float prob = !has.at(mask_i) ? 1. : CLHEP::RandFlat::shoot(rndmEngine,1.);
215 for (
unsigned int match_i: module_pattern_idx) {
219 n_mask_defects[mask_i] = n_mask_defects_idx+1;
224 if (
prob<=0.
f)
break;
228 n_mask_defects[0]=
static_cast<unsigned int>(
std::max(0,
static_cast<int>(
229 CLHEP::RandPoisson::shoot(rndmEngine,
230 n_cells * defect_prob))));
◆ totalProbability()
double InDet::DefectsEmulatorCondAlgBase::totalProbability |
( |
const std::vector< unsigned int > & |
module_pattern_idx, |
|
|
unsigned int |
prob_idx |
|
) |
| const |
|
inlineprotectedinherited |
Compute the total probability using the probabilities associated to the given list of patterns.
- Parameters
-
module_pattern_idx | the index of the patterns |
the | index of the probabilities to be used (e.g. module defect probability, single element defect probability) |
- Returns
- sum of the referenced probabilities.
Definition at line 115 of file DefectsEmulatorCondAlgBase.h.
117 for (
unsigned int pattern_i : module_pattern_idx) {
◆ updateVHKA()
◆ DefectsEmulatorCondAlgImpl< StripDefectsEmulatorCondAlg >
◆ ATLAS_THREAD_SAFE [1/7]
std::vector<unsigned int> m_matrixTypeId InDet::DefectsEmulatorCondAlgBase::ATLAS_THREAD_SAFE |
|
mutableprotectedinherited |
◆ ATLAS_THREAD_SAFE [2/7]
std::vector<std::vector<unsigned int> > m_dimPerHist InDet::DefectsEmulatorCondAlgBase::ATLAS_THREAD_SAFE |
|
mutableprotectedinherited |
◆ ATLAS_THREAD_SAFE [3/7]
std::vector< std::vector< TH2 *> > m_hist InDet::DefectsEmulatorCondAlgBase::ATLAS_THREAD_SAFE |
|
mutableprotectedinherited |
◆ ATLAS_THREAD_SAFE [4/7]
std::vector< std::vector<std::vector< TH1 *> > > m_groupDefectHists InDet::DefectsEmulatorCondAlgBase::ATLAS_THREAD_SAFE |
|
mutableprotectedinherited |
◆ ATLAS_THREAD_SAFE [5/7]
std::vector< std::vector< TH2 *> > m_moduleHist InDet::DefectsEmulatorCondAlgBase::ATLAS_THREAD_SAFE |
|
mutableprotectedinherited |
◆ ATLAS_THREAD_SAFE [6/7]
std::array<std::vector<TH2 *>,kNPosHists> m_defectModuleEtaPhiHist InDet::DefectsEmulatorCondAlgBase::ATLAS_THREAD_SAFE |
|
mutableprotectedinherited |
◆ ATLAS_THREAD_SAFE [7/7]
std::array<std::vector<TH2 *>,kNPosHists> m_defectModuleEtaLayerHist InDet::DefectsEmulatorCondAlgBase::ATLAS_THREAD_SAFE |
|
mutableprotectedinherited |
◆ m_checkerBoardToggle
Gaudi::Property<bool> InDet::DefectsEmulatorCondAlgBase::m_checkerBoardToggle {this, "CheckerBoardDefects", false} |
|
protectedinherited |
◆ m_cornerDefectNCornerFractionsPerPattern
Gaudi::Property<std::vector<std::vector<double> > > InDet::DefectsEmulatorCondAlgBase::m_cornerDefectNCornerFractionsPerPattern |
|
protectedinherited |
Initial value:{this,"NCornerDefectFractionsPerPattern", {},
"List of fractions per pattern for exactly 1 to 4 corner defects under the codition that there is a defect." }
Definition at line 61 of file DefectsEmulatorCondAlgBase.h.
◆ m_cornerDefectParamsPerPattern
Gaudi::Property<std::vector<std::vector<double> > > InDet::DefectsEmulatorCondAlgBase::m_cornerDefectParamsPerPattern |
|
protectedinherited |
Initial value:{this,"CornerDefectParamsPerPattern", {},
"Set of corner defect parameters (probability, x-intersection pos min, max, y-intersection pos min, max, sagitta minm max). "
"per module pattern. " }
Definition at line 57 of file DefectsEmulatorCondAlgBase.h.
◆ m_defectProbability
Gaudi::Property<std::vector<std::vector<double> > > InDet::DefectsEmulatorCondAlgBase::m_defectProbability |
|
protectedinherited |
Initial value:{this,"DefectProbabilities", {},
"Defect probabilities per module pattern: defect module, defect strip." }
Definition at line 50 of file DefectsEmulatorCondAlgBase.h.
◆ m_detEleCollKey
◆ m_detStore
◆ m_evtStore
◆ m_extendedExtraObjects
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_fillEtaPhiHistogramsPerPattern
Gaudi::Property<bool> InDet::DefectsEmulatorCondAlgBase::m_fillEtaPhiHistogramsPerPattern {this, "FillEtaPhiHistogramsPerPattern", false, "If true, histogram per eta, phi amd z, R are filled separately per pattern."} |
|
protectedinherited |
◆ m_fillHistogramsPerPattern
Gaudi::Property<bool> InDet::DefectsEmulatorCondAlgBase::m_fillHistogramsPerPattern {this, "FillHistogramsPerPattern", false, "If true, histogram per module defects etc. separately per pattern."} |
|
protectedinherited |
◆ m_groupDefectHistNames
std::vector<std::string> InDet::DefectsEmulatorCondAlgBase::m_groupDefectHistNames |
|
protectedinherited |
◆ m_histMutex
std::mutex InDet::DefectsEmulatorCondAlgBase::m_histMutex |
|
mutableprotectedinherited |
◆ m_histogramGroupName
Gaudi::Property<std::string> InDet::DefectsEmulatorCondAlgBase::m_histogramGroupName {this,"HistogramGroupName","", "Histogram group name or empty to disable histogramming"} |
|
protectedinherited |
◆ m_histogrammingEnabled
bool InDet::DefectsEmulatorCondAlgBase::m_histogrammingEnabled = false |
|
protectedinherited |
◆ m_histSvc
ServiceHandle<ITHistSvc> InDet::DefectsEmulatorCondAlgBase::m_histSvc {this,"HistSvc","THistSvc"} |
|
protectedinherited |
◆ m_idHelper
◆ m_idName
◆ m_maxAttempts
Gaudi::Property<unsigned int> InDet::DefectsEmulatorCondAlgBase::m_maxAttempts {this, "MaxRandomPositionAttempts", 10} |
|
protectedinherited |
◆ m_maxNGroupDefects
std::vector<unsigned int> InDet::DefectsEmulatorCondAlgBase::m_maxNGroupDefects |
|
protectedinherited |
◆ m_modulePattern
Gaudi::Property<std::vector<std::vector<int> > > InDet::DefectsEmulatorCondAlgBase::m_modulePattern |
|
protectedinherited |
Initial value:{this,"ModulePatterns", {},
"Integer ranges to select: (0-1) barrel/end-cap range, (2-3) layer, (4-5) eta index range, (6-7) phi index range, "
"(8-9) module number of columns or strips, (10) both sides (0,1), (11) all rows (0,1)" }
Definition at line 46 of file DefectsEmulatorCondAlgBase.h.
◆ m_modulesWithoutDefectParameters
std::atomic<unsigned int> InDet::DefectsEmulatorCondAlgBase::m_modulesWithoutDefectParameters {} |
|
mutableprotectedinherited |
◆ m_moduleVetoTool
ToolHandle<ISCT_ConditionsTool> InDet::StripDefectsEmulatorCondAlg::m_moduleVetoTool {this,"SCTConditionsTool","","Optional SCT conditions tool to mark modules as defect (alternative to ModulePattern)"} |
|
protected |
◆ m_nDefectFractionsPerPattern
Gaudi::Property<std::vector<std::vector<double> > > InDet::DefectsEmulatorCondAlgBase::m_nDefectFractionsPerPattern |
|
protectedinherited |
Initial value:{this,"NDefectFractionsPerPattern", {},
"List of fractions per pattern for exactly 1 to n defects under the codition that there is a defect, where -1. marks the"
"end of this lists, before the fractions for the next mask start." }
Definition at line 53 of file DefectsEmulatorCondAlgBase.h.
◆ m_oddColToggle
Gaudi::Property<bool> InDet::DefectsEmulatorCondAlgBase::m_oddColToggle {this, "OddColToggle", false} |
|
protectedinherited |
◆ m_oddRowToggle
Gaudi::Property<bool> InDet::DefectsEmulatorCondAlgBase::m_oddRowToggle {this, "OddRowToggle", false} |
|
protectedinherited |
◆ m_perPatternAndMaskFractions
std::vector<std::vector<std::vector<float> > > InDet::DefectsEmulatorCondAlgBase::m_perPatternAndMaskFractions |
|
protectedinherited |
◆ m_perPatternCornerDefectNCornerCummulativeProb
std::vector<std::vector<float> > InDet::DefectsEmulatorCondAlgBase::m_perPatternCornerDefectNCornerCummulativeProb |
|
protectedinherited |
◆ m_rndmSvc
◆ m_rngName
std::string InDet::DefectsEmulatorCondAlgBase::m_rngName |
|
protectedinherited |
◆ m_varHandleArraysDeclared
◆ m_vhka
◆ m_writeKey
The documentation for this class was generated from the following files:
virtual StatusCode initialize() override
ToolHandle< ISCT_ConditionsTool > m_moduleVetoTool
ServiceHandle< IAthRNGSvc > m_rndmSvc
Gaudi::Property< std::vector< std::vector< double > > > m_nDefectFractionsPerPattern
std::string find(const std::string &s)
return a remapped string
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
StatusCode initializeCornerDefects()
double totalProbability(const std::vector< unsigned int > &module_pattern_idx, unsigned int prob_idx) const
Compute the total probability using the probabilities associated to the given list of patterns.
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)
Gaudi::Property< std::string > m_histogramGroupName
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
std::vector< std::vector< std::vector< float > > > m_perPatternAndMaskFractions
ServiceHandle< ITHistSvc > m_histSvc
Gaudi::Property< bool > m_fillEtaPhiHistogramsPerPattern
#define ATH_MSG_VERBOSE(x)
def TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)
@ u
Enums for curvilinear frames.
virtual void setOwner(IDataHandleHolder *o)=0
An algorithm that can be simultaneously executed in multiple threads.
std::vector< std::vector< float > > m_perPatternCornerDefectNCornerCummulativeProb
virtual const DataObjIDColl & extraOutputDeps() const override
Return the list of extra output dependencies.
Gaudi::Property< std::vector< std::vector< double > > > m_defectProbability
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
::StatusCode StatusCode
StatusCode definition for legacy code.
virtual StatusCode sysExecute(const EventContext &ctx) override
Execute an algorithm.
StatusCode initializeProbabilities(unsigned int n_masks)
bool verifyModulePatternList(const std::vector< std::vector< int > > &arr)
Verify whether a list of module identifier patterns is consistent.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
@ kCornerDefectkWidthRowDirectionOffset
Gaudi::Property< std::vector< std::vector< int > > > m_modulePattern
@ kCornerDefectWidthColumnDirection
Gaudi::Property< std::vector< std::vector< double > > > m_cornerDefectNCornerFractionsPerPattern
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Gaudi::Property< bool > m_fillHistogramsPerPattern
std::unordered_multimap< unsigned int, unsigned int > createModuleConnectionMap(const T_ID &id_helper, const InDetDD::SiDetectorElementCollection &det_ele_coll)
create a map between detector elements and all such elements connected the same sensor
accumulate
Update flags based on parser line args.
StatusCode checkProbabilities(unsigned int n_probabilities) const
Consistency check of module patterns, probabilities.
bool empty() const noexcept
#define ATH_MSG_WARNING(x)
@ kCornerDefectkWidthRowDirection
@ kCornerDefectWidthColumnDirectionOffset
bool m_histogrammingEnabled
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
@ kCornerDefectkSagittaOffset
std::vector< unsigned int > m_maxNGroupDefects
virtual StatusCode sysInitialize() override
Override sysInitialize.
std::atomic< unsigned int > m_modulesWithoutDefectParameters
def TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Gaudi::Property< std::vector< std::vector< double > > > m_cornerDefectParamsPerPattern
std::vector< std::string > m_groupDefectHistNames
const std::string & str() const