CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DDCompactView.cc
Go to the documentation of this file.
7 
10 
15 
16 #include <iostream>
17 
18 //DDCompactViewmpl * DDCompactView::global_ = 0;
19 
36 //
38  : rep_(new DDCompactViewImpl(rootnodedata))
39 {
40  // 2010-01-27 I am leaving this here so that we are sure the global stores
41  // are open when a new DDCompactView is being made. Eventually I want to
42  // get rid of the need for this somehow? think about it...
43  DDMaterial::StoreT::instance().setReadOnly(false);
44  DDSolid::StoreT::instance().setReadOnly(false);
45  DDLogicalPart::StoreT::instance().setReadOnly(false);
46  DDSpecifics::StoreT::instance().setReadOnly(false);
47  DDRotation::StoreT::instance().setReadOnly(false);
48 }
49 
51 {
52  if (rep_ != 0) {
53  delete rep_;
54  }
55 }
56 
63 {
64  return rep_->graph();
65 }
66 
68 {
69  return const_cast<graph_type&>(rep_->graph());
70 }
71 
73 {
74  return rep_->root();
75 }
76 
77 
79 {
80  return rep_->walker();
81 }
82 
83 
102 double DDCompactView::weight(const DDLogicalPart & p) const
103 {
104  return rep_->weight(p);
105 }
106 
108  const DDLogicalPart & parent,
109  DDAlgo & algo
110  ) {
111  if (algo.rep().numRegistered() == 0) {
112  std::string e;
113  e = "DDalgoPosPart: algorithmic positioning\n";
114  e += "\t[" + algo.name().ns()
115  + ":"
116  + algo.name().name()
117  + "] is not defined!\n";
118  throw cms::Exception("DDException") << e;
119  }
120 
121  LogDebug ("AlgoPos") << "DDCompactView, algo=" << std::endl << algo << std::endl;
122  int inner=0;
123  do {
124  ++inner;
125  DDRotationMatrix * rmp = new DDRotationMatrix(algo.rotation());
126  DDRotation anonymRot = DDanonymousRot(rmp);
127  DDTranslation tr(algo.translation());
128  position(self, parent, algo.label(), tr, anonymRot);
129  algo.next();
130  }
131  while(algo.go());
132 
133 }
134 
136  const DDLogicalPart & parent,
137  std::string copyno,
138  const DDTranslation & trans,
139  const DDRotation & rot,
140  const DDDivision * div)
141 {
142  int cpno = atoi(copyno.c_str());
143  position(self,parent,cpno,trans,rot, div);
144 }
145 
147  const DDLogicalPart & parent,
148  int copyno,
149  const DDTranslation & trans,
150  const DDRotation & rot,
151  const DDDivision * div)
152 {
153  rep_->position( self, parent, copyno, trans, rot, div );
154 }
155 
156 
157 // >>---==========================<()>==========================---<<
158 
159 // UNSTABLE STUFF below ...
161 {
162  rep_->setRoot(root);
163 }
164 
165 void DDCompactView::swap( DDCompactView& repToSwap ) {
166  rep_->swap ( *(repToSwap.rep_) );
167 }
168 
170 
172  // at this point we should have a valid store of DDObjects and we will move these
173  // to the local storage area using swaps with the existing Singleton<Store...>'s
174  // 2010-01-27 memory patch
180 
181  // 2010-01-27 memory patch
182  // not sure this will stay, but for now we want to explicitely lock the global stores.
183  // lock the global stores.
184  DDMaterial::StoreT::instance().setReadOnly(false);
185  DDSolid::StoreT::instance().setReadOnly(false);
186  DDLogicalPart::StoreT::instance().setReadOnly(false);
187  DDSpecifics::StoreT::instance().setReadOnly(false);
188  DDRotation::StoreT::instance().setReadOnly(false);
189 
190 }
191 
#define LogDebug(id)
const DDI::rep_traits< N, C >::reference rep() const
Definition: DDBase.h:89
void next()
Definition: DDAlgo.cc:102
void position(const DDLogicalPart &self, const DDLogicalPart &parent, int copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div)
const N & name() const
Definition: DDBase.h:82
DDCompactView()
Creates a compact-view.
graphwalker< DDLogicalPart, DDPosData * > walker() const
list parent
Definition: dbtoconf.py:74
DDCompactViewImpl * rep_
void setRoot(const DDLogicalPart &root)
double weight(const DDLogicalPart &p) const
Prototype version of calculating the weight of a detector component.
void algoPosPart(const DDLogicalPart &self, const DDLogicalPart &parent, DDAlgo &algo)
positioning...
const graph_type & graph() const
Provides read-only access to the data structure of the compact-view.
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
const std::string & ns() const
Returns the namespace.
Definition: DDName.cc:101
Definition: DDAlgo.h:17
graph_type & writeableGraph()
bool go() const
Definition: DDAlgo.cc:108
type of data representation of DDCompactView
Definition: DDCompactView.h:77
void setRoot(const DDLogicalPart &root)
don&#39;t use : interface not stable ....
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
DDRotation DDanonymousRot(DDRotationMatrix *rot)
Defines a anonymous rotation or rotation-reflection matrix.
Definition: DDRotation.cc:194
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
static value_type & instance()
DDI::Store< DDName, DDI::Specific * > specStore_
void swap(DDCompactView &)
DDRotationMatrix rotation()
Definition: DDAlgo.cc:81
DDI::Store< DDName, DDI::Solid * > solidStore_
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:88
void swap(DDCompactViewImpl &)
DDI::Store< DDName, DDRotationMatrix * > rotStore_
walker_type walker() const
dont&#39;t use ! Proper implementation missing ...
const DDLogicalPart & root() const
returns the DDLogicalPart representing the root of the geometrical hierarchy
std::string label() const
Definition: DDAlgo.cc:94
const DDLogicalPart & root() const
DDTranslation translation()
Definition: DDAlgo.cc:75
DDI::Store< DDName, DDI::LogicalPart * > lpStore_
double weight(const DDLogicalPart &) const
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
const std::string & name() const
Returns the name.
Definition: DDName.cc:87
DDI::Store< DDName, DDI::Material * > matStore_
const GraphNav & graph() const
string root
initialization
Definition: dbtoconf.py:70