CMS 3D CMS Logo

DDErrorDetection.h
Go to the documentation of this file.
1 #ifndef DETECTOR_DESCRIPTION_DD_ERROR_DETECTION_H
2 #define DETECTOR_DESCRIPTION_DD_ERROR_DETECTION_H
3 
5 #include <map>
6 #include <ostream>
7 #include <set>
8 #include <string>
9 #include <utility>
10 #include <vector>
11 
18 
19 class DDCompactView;
20 class DDLogicalPart;
21 class DDMaterial;
22 class DDName;
23 class DDRotation;
24 class DDSolid;
25 class DDSpecifics;
26 
32 
33 using ns_type = std::map<std::string, std::set<std::string>>;
34 using ns_nm_type = std::map<std::string, std::set<DDName>>;
35 
36 template<class T> std::ostream & operator<<( std::ostream & o, const std::set<T> & v )
37 {
38  typename std::set<T>::const_iterator it( v.begin()), ed( v.end());
39  for(; it != ed; ++it) {
40  o << it->ddname() << ' ';
41  }
42  return o;
43 }
44 
45 template<class T> std::ostream & operator<<( std::ostream & o, const std::map<std::string, std::set<T> > & m ) {
46  typedef typename std::map<std::string, std::set<T> >::const_iterator c_it;
47  c_it it(m.begin()), ed(m.end());
48  for (; it != ed; ++it) {
49  o << it->first << ": " << it->second;
50  o << std::endl;
51  }
52  return o;
53 }
54 
55 template<class T, class N> std::ostream & operator<<(std::ostream & o, const std::map<N, std::set<T> > & m) {
56  typedef typename std::map<N, std::set<T> >::const_iterator c_it;
57  c_it it(m.begin()), ed(m.end());
58  for (; it != ed; ++it) {
59  o << it->first.ddname() << ": " << it->second;
60  o << std::endl;
61  }
62  return o;
63 }
64 
65 template<typename T>
67 {
68  bool result=true;
69  typename T::template iterator<T> it,ed;
70  ed.end();
71  for (; it != ed; ++it) {
72  result = it->isDefined().second;
73  if (!result)
74  DDI::Singleton<std::map<std::string,std::set<T> > >::instance()[it->name().ns()].insert(*it);
75  m[it->name().ns()].insert(it->name().name());
76  }
77  return result;
78 }
79 
80 
81 template<typename T>
83 {
84  bool result=true;
85  typename T::template iterator<T> it,ed;
86  ed.end();
87  for (; it != ed; ++it) {
88  result = it->isDefined().second;
89  if (!result)
90  DDI::Singleton<std::map<std::string,std::set<T> > >::instance()[it->name().ns()].insert(*it);
91  m[it->name().ns()].insert(it->name().name());
92  }
93  return result;
94 }
95 
96 
97 template <class C> const std::map<std::string, std::set<C> > & dd_error_scan(const C &)
98 {
99  typedef std::map<std::string, std::set<C> > error_type;
100  static error_type result_;
101  typename C::template iterator<C> it;
102  typename C::template iterator<C> ed(C::end());
103  for (; it != ed; ++it) {
104  if (!it->isDefined().second) {
105  result_[it->name().ns()].insert(*it);
106  }
107  }
108  return result_;
109 }
110 
112 {
113 public:
114  DDErrorDetection(const DDCompactView& cpv);
116 
117  void scan( const DDCompactView& cpv);
118 
119  void errors();
120 
121  void warnings();
122 
123  const std::map<std::string, std::set<DDLogicalPart> > & lp_cpv(const DDCompactView& cpv);
124  const std::map<DDMaterial, std::set<DDLogicalPart> > & ma_lp();
125  const std::map<DDSolid, std::set<DDLogicalPart> > & so_lp();
126  const std::map<DDSolid, std::set<DDSolid> > & so();
127 
128  void nix();
129 
130  const std::vector<std::pair<std::string,std::string> > & ma();
131 
132  void report(const DDCompactView& cpv, std::ostream & o);
133 
134  bool noErrorsInTheReport(const DDCompactView& cpv);
135 
136  private:
138 
139 };
140 
141 #endif
void scan(const DDCompactView &cpv)
const std::map< DDSolid, std::set< DDSolid > > & so()
static PFTauRenderPlugin instance
const std::vector< std::pair< std::string, std::string > > & ma()
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:43
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:15
const std::map< DDMaterial, std::set< DDLogicalPart > > & ma_lp()
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:80
A DDSolid represents the shape of a part.
Definition: DDSolid.h:39
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:68
std::map< std::string, std::set< DDName >> ns_nm_type
std::map< std::string, std::set< std::string >> ns_type
const std::map< std::string, std::set< DDLogicalPart > > & lp_cpv(const DDCompactView &cpv)
const std::map< std::string, std::set< C > > & dd_error_scan(const C &)
bool noErrorsInTheReport(const DDCompactView &cpv)
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:93
def template(fileName, svg, replaceme="REPLACEME")
Definition: svgfig.py:521
#define end
Definition: vmac.h:39
const std::map< DDSolid, std::set< DDLogicalPart > > & so_lp()
void report(const DDCompactView &cpv, std::ostream &o)
bool findNameSpaces(T dummy, ns_type &m)
long double T
Interface to attach user specific data to nodes in the expanded-view.
Definition: DDSpecifics.h:41