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  static int cnt_=0;
112  ++cnt_;
113  if (algo.rep().numRegistered() == 0) {
114  std::string e;
115  e = "DDalgoPosPart: algorithmic positioning\n";
116  e += "\t[" + algo.name().ns()
117  + ":"
118  + algo.name().name()
119  + "] is not defined!\n";
120  throw cms::Exception("DDException") << e;
121  }
122 
123  LogDebug ("AlgoPos") << "DDCompactView, algo=" << std::endl << algo << std::endl;
124  int inner=0;
125  do {
126  ++inner;
127  DDRotationMatrix * rmp = new DDRotationMatrix(algo.rotation());
128  DDRotation anonymRot = DDanonymousRot(rmp);
129  DDTranslation tr(algo.translation());
130  position(self, parent, algo.label(), tr, anonymRot);
131  algo.next();
132  }
133  while(algo.go());
134 
135 }
136 
138  const DDLogicalPart & parent,
139  std::string copyno,
140  const DDTranslation & trans,
141  const DDRotation & rot,
142  const DDDivision * div)
143 {
144  int cpno = atoi(copyno.c_str());
145  position(self,parent,cpno,trans,rot, div);
146 }
147 
149  const DDLogicalPart & parent,
150  int copyno,
151  const DDTranslation & trans,
152  const DDRotation & rot,
153  const DDDivision * div)
154 {
155  rep_->position( self, parent, copyno, trans, rot, div );
156 }
157 
158 
159 // >>---==========================<()>==========================---<<
160 
161 // UNSTABLE STUFF below ...
163 {
164  rep_->setRoot(root);
165 }
166 
167 void DDCompactView::swap( DDCompactView& repToSwap ) {
168  rep_->swap ( *(repToSwap.rep_) );
169 }
170 
172 
174  // at this point we should have a valid store of DDObjects and we will move these
175  // to the local storage area using swaps with the existing Singleton<Store...>'s
176  // 2010-01-27 memory patch
182 
183  // 2010-01-27 memory patch
184  // not sure this will stay, but for now we want to explicitely lock the global stores.
185  // lock the global stores.
186  DDMaterial::StoreT::instance().setReadOnly(false);
187  DDSolid::StoreT::instance().setReadOnly(false);
188  DDLogicalPart::StoreT::instance().setReadOnly(false);
189  DDSpecifics::StoreT::instance().setReadOnly(false);
190  DDRotation::StoreT::instance().setReadOnly(false);
191 
192 }
193 
#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:21
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:197
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
LimitAlgo * algo
Definition: Combine.cc:60
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