Belle II Software  release-05-02-19
SVDIgnoredStripsMap Class Reference

This class provides a list of ignored (=cold, hot or otherwise deffective) strips for the use in SVD data reconstruction. More...

#include <SVDIgnoredStripsMap.h>

Collaboration diagram for SVDIgnoredStripsMap:

Public Types

typedef std::set< unsigned short > IgnoredStripsSet
 A set of ignored strips.
 

Public Member Functions

 SVDIgnoredStripsMap (const std::string &xml_filename)
 Constructor. More...
 
 SVDIgnoredStripsMap ()=delete
 No default constructor.
 
const std::set< unsigned short > & getIgnoredStrips (VxdID id)
 Get the set of ignored strips for a sensor. More...
 
bool stripOK (VxdID id, unsigned short strip)
 Check whether a strip on a given sensor is OK or not. More...
 

Private Attributes

std::unordered_map< unsigned short, IgnoredStripsSetm_Map
 Structure holiding sets of ingored strips for all sensors.
 
IgnoredStripsSet m_lastIgnored
 Set of ingored strips for the most currently queried sensor.
 
VxdID m_lastSensorID
 The most currently queried sensor number.
 

Detailed Description

This class provides a list of ignored (=cold, hot or otherwise deffective) strips for the use in SVD data reconstruction.

The class has non-intrusive behavior, that is, it will not interfere when queries on non-existent sensors are asked.

Definition at line 38 of file SVDIgnoredStripsMap.h.

Constructor & Destructor Documentation

◆ SVDIgnoredStripsMap()

SVDIgnoredStripsMap ( const std::string &  xml_filename)
explicit

Constructor.

Parameters
xml_filenameis the name of the xml file containing the map.

Definition at line 21 of file SVDIgnoredStripsMap.cc.

21  :
22  m_Map(12), m_lastSensorID(0)
23 {
24  // If the xmlFilename is empty, the user apparently doesn't want the map.
25  // So keep low-profile, don't bother.
26  if (xmlFilename == "") {
27  B2INFO("No xml list of ignored strips specified.");
28  return;
29  }
30  // Create an empty property tree object
31 
32  ptree propertyTree;
33 
34  // Load the XML file into the property tree. If reading fails
35  // (cannot open file, parse error), an exception is thrown.
36  string xmlFullPath = FileSystem::findFile(xmlFilename);
37 
38  if (! FileSystem::fileExists(xmlFullPath)) {
39  B2WARNING("The xml filename: " << xmlFilename << endl <<
40  "resolved to: " << xmlFullPath << endl <<
41  "by FileSystem::findFile does not exist." << endl <<
42  "SVD ignored strips map cannot be initialized." << endl
43  );
44  return;
45  }
46 
47  try {
48  read_xml(xmlFullPath, propertyTree);
49  } catch (std::exception const& ex) {
50  B2WARNING("STD excpetion raised during xml parsing " << ex.what() << endl <<
51  "SVD ignored strips map cannot be initialized." << endl);
52  return;
53  } catch (...) {
54  B2WARNING("Unknown excpetion raised during xml parsing "
55  "SVD ignored strips map cannot be initialized." << endl);
56  return;
57  }
58 
59  try {
60  // traverse the xml tree: navigate through the daughters of <SVD>
61  VxdID sensorID;
62  for (ptree::value_type const & layer : propertyTree.get_child("SVD"))
63  if (layer.first == "layer") {
64  sensorID.setLayerNumber(static_cast<unsigned short>(layer.second.get<int>("<xmlattr>.n")));
65  for (ptree::value_type const & ladder : layer.second)
66  if (ladder.first == "ladder") {
67  sensorID.setLadderNumber(static_cast<unsigned short>(ladder.second.get<int>("<xmlattr>.n")));
68  for (ptree::value_type const & sensor : ladder.second)
69  if (sensor.first == "sensor") {
70  sensorID.setSensorNumber(static_cast<unsigned short>(sensor.second.get<int>("<xmlattr>.n")));
71  for (ptree::value_type const & side : sensor.second)
72  if (side.first == "side") {
73  std::string tagSide = side.second.get<std::string>("<xmlattr>.side");
74  sensorID.setSegmentNumber((tagSide == "U" || tagSide == "u") ? 1 : 0);
75  // We have complete VxdID, now we read the list of strips.
76  IgnoredStripsSet strips;
77  for (ptree::value_type const & tag : side.second)
78  if (tag.first == "strip") {
79  strips.insert(tag.second.get<unsigned short>("<xmlattr>.stripNo"));
80  } else if (tag.first == "stripsFromTo") {
81  auto limits = tag.second;
82  unsigned short fromStrip = limits.get<unsigned short>("<xmlattr>.fromStrip");
83  unsigned short toStrip = limits.get<unsigned short>("<xmlattr>.toStrip");
84  for (unsigned short iStrip = fromStrip; iStrip <= toStrip; iStrip++)
85  strips.insert(iStrip);
86  }
87  m_Map.insert(std::pair<unsigned short, IgnoredStripsSet>(sensorID.getID(), strips));
88  } // if side
89  } // if sensor
90  } // if ladder
91  } // if sensor
92  } catch (...) {
93  B2WARNING("Unknown excpetion raised during map initialization! "
94  "SVD ignored strips map may be corrupted." << endl);
95  return;
96  }
97 }

Member Function Documentation

◆ getIgnoredStrips()

const std::set< unsigned short > & getIgnoredStrips ( VxdID  id)

Get the set of ignored strips for a sensor.

Use to save map searches.

Parameters
idVxdID of the required sensor, with segment number 0 for v, 1 for u
Returns
the set of ignored strips, and empty set for non-existent VxdID.

Definition at line 99 of file SVDIgnoredStripsMap.cc.

◆ stripOK()

bool stripOK ( VxdID  id,
unsigned short  strip 
)

Check whether a strip on a given sensor is OK or not.

Parameters
idVxdID of the sensor, with segment number 0 for v, 1 for u
stripStrip number
Returns
true if strip or the id is not found in the list, otherwise false.

Definition at line 115 of file SVDIgnoredStripsMap.cc.


The documentation for this class was generated from the following files:
Belle2::SVDIgnoredStripsMap::IgnoredStripsSet
std::set< unsigned short > IgnoredStripsSet
A set of ignored strips.
Definition: SVDIgnoredStripsMap.h:42
Belle2::VxdID
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:43
Belle2::VxdID::setLayerNumber
void setLayerNumber(baseType layer)
Set the layer id.
Definition: VxdID.h:117
Belle2::VxdID::getID
baseType getID() const
Get the unique id.
Definition: VxdID.h:104
Belle2::VxdID::setSegmentNumber
void setSegmentNumber(baseType segment)
Set the sensor segment.
Definition: VxdID.h:123
Belle2::VxdID::setSensorNumber
void setSensorNumber(baseType sensor)
Set the sensor id.
Definition: VxdID.h:121
Belle2::FileSystem::fileExists
static bool fileExists(const std::string &filename)
Check if the file with given filename exists.
Definition: FileSystem.cc:33
Belle2::SVDIgnoredStripsMap::m_Map
std::unordered_map< unsigned short, IgnoredStripsSet > m_Map
Structure holiding sets of ingored strips for all sensors.
Definition: SVDIgnoredStripsMap.h:69
Belle2::VxdID::setLadderNumber
void setLadderNumber(baseType ladder)
Set the ladder id.
Definition: VxdID.h:119
Belle2::FileSystem::findFile
static std::string findFile(const std::string &path, bool silent=false)
Search for given file or directory in local or central release directory, and return absolute path if...
Definition: FileSystem.cc:147
Belle2::SVDIgnoredStripsMap::m_lastSensorID
VxdID m_lastSensorID
The most currently queried sensor number.
Definition: SVDIgnoredStripsMap.h:75