CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DDErrorDetection.h
Go to the documentation of this file.
1 #ifndef DD_DDErrorDetection_h
2 #define DD_DDErrorDetection_h
3 
4 #include <map>
5 #include <set>
6 #include <string>
7 
14 
15 //=================
22 
23 //==================
24 //*********************************************************************************************************************************
25 
26 typedef std::map<std::string, std::set<std::string> > ns_type;
27 typedef std::map<std::string, std::set<DDName> > ns_nm_type;
28 
29 //*********************************************************************************************************************************
30 
31 
32 
33 template<class T> std::ostream & operator<<(std::ostream & o, const std::set<T> & v)
34 {
35  typename std::set<T>::const_iterator it(v.begin()), ed(v.end());
36  for(; it != ed; ++it) {
37  o << it->ddname() << ' ';
38  }
39  return o;
40 }
41 
42 /*
43 ostream & operator<<(ostream & o, const std::set<DDLogicalPart> & v)
44 {
45  std::set<DDLogicalPart>::const_iterator it(v.begin()), ed(v.end());
46  for(; it != ed; ++it) {
47  o << it->ddname().name() << ' ';
48  }
49  return o;
50 }
51 */
52 template<class T> std::ostream & operator<<(std::ostream & o, const std::map<std::string, std::set<T> > & m) {
53  typedef typename std::map<std::string, std::set<T> >::const_iterator c_it;
54  c_it it(m.begin()), ed(m.end());
55  for (; it != ed; ++it) {
56  o << it->first << ": " << it->second;
57  o << std::endl;
58  }
59  return o;
60 }
61 
62 template<class T, class N> std::ostream & operator<<(std::ostream & o, const std::map<N, std::set<T> > & m) {
63  typedef typename std::map<N, std::set<T> >::const_iterator c_it;
64  c_it it(m.begin()), ed(m.end());
65  for (; it != ed; ++it) {
66  o << it->first.ddname() << ": " << it->second;
67  o << std::endl;
68  }
69  return o;
70 }
71 
72 template<typename T>
73 bool findNameSpaces(T dummy, ns_type & m)
74 {
75  bool result=true;
76  typename T::template iterator<T> it,ed;
77  ed.end();
78  for (; it != ed; ++it) {
79  result = it->isDefined().second;
80  if (!result)
81  DDI::Singleton<std::map<std::string,std::set<T> > >::instance()[it->name().ns()].insert(*it);
82  m[it->name().ns()].insert(it->name().name());
83  }
84  return result;
85 }
86 
87 
88 template<typename T>
89 bool findNameSpaces(T dummy, ns_nm_type & m)
90 {
91  bool result=true;
92  typename T::template iterator<T> it,ed;
93  ed.end();
94  for (; it != ed; ++it) {
95  result = it->isDefined().second;
96  if (!result)
97  DDI::Singleton<std::map<std::string,std::set<T> > >::instance()[it->name().ns()].insert(*it);
98  m[it->name().ns()].insert(it->name().name());
99  }
100  return result;
101 }
102 
103 
104 template <class C> const std::map<std::string, std::set<C> > & dd_error_scan(const C &)
105 {
106  typedef std::map<std::string, std::set<C> > error_type;
107  static error_type result_;
108  typename C::template iterator<C> it;
109  typename C::template iterator<C> ed(C::end());
110  for (; it != ed; ++it) {
111  if (!it->isDefined().second) {
112  result_[it->name().ns()].insert(*it);
113  }
114  }
115  return result_;
116 }
117 
119 {
120 public:
121  DDErrorDetection(const DDCompactView& cpv);
123 
124  void scan( const DDCompactView& cpv);
125 
126  void errors();
127 
128  void warnings();
129 
130  const std::map<std::string, std::set<DDLogicalPart> > & lp_cpv(const DDCompactView& cpv);
131  const std::map<DDMaterial, std::set<DDLogicalPart> > & ma_lp();
132  const std::map<DDSolid, std::set<DDLogicalPart> > & so_lp();
133  const std::map<DDSolid, std::set<DDSolid> > & so();
134 
135  void nix();
136 
137  const std::vector<std::pair<std::string,DDName> > & ma();
138 
139  void report(const DDCompactView& cpv, std::ostream & o);
140 
141  bool noErrorsInTheReport(const DDCompactView& cpv);
142 
143  private:
145 
146 };
147 
148 #endif
void scan(const DDCompactView &cpv)
DDI::Singleton< std::map< std::string, std::set< DDLogicalPart > > > lp_err
const std::map< DDSolid, std::set< DDSolid > > & so()
std::map< std::string, std::set< DDName > > ns_nm_type
static PFTauRenderPlugin instance
DDI::Singleton< std::map< std::string, std::set< DDMaterial > > > ma_err
const std::map< DDMaterial, std::set< DDLogicalPart > > & ma_lp()
type of data representation of DDCompactView
Definition: DDCompactView.h:77
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 &)
tuple result
Definition: query.py:137
bool noErrorsInTheReport(const DDCompactView &cpv)
#define end
Definition: vmac.h:38
const std::vector< std::pair< std::string, DDName > > & ma()
const std::map< DDSolid, std::set< DDLogicalPart > > & so_lp()
void report(const DDCompactView &cpv, std::ostream &o)
DDI::Singleton< std::map< std::string, std::set< DDSpecifics > > > sp_err
bool findNameSpaces(T dummy, ns_type &m)
long double T
std::map< std::string, std::set< std::string > > ns_type
DDI::Singleton< std::map< std::string, std::set< DDSolid > > > so_err
DDI::Singleton< std::map< std::string, std::set< DDRotation > > > ro_err
def template
Definition: svgfig.py:520