CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Types | Private Member Functions
DTGeometryParsFromDD Class Reference

#include <DTGeometryParsFromDD.h>

Public Types

enum  DTDetTag { DTChamberTag, DTSuperLayerTag, DTLayerTag }
 

Public Member Functions

void build (const DDCompactView *cview, const MuonDDDConstants &muonConstants, RecoIdealGeometry &rig)
 
 DTGeometryParsFromDD ()
 Constructor. More...
 
virtual ~DTGeometryParsFromDD ()
 Destructor. More...
 

Private Types

typedef std::pair< std::vector
< double >, std::vector
< double > > 
PosRotPair
 

Private Member Functions

void buildGeometry (DDFilteredView &fv, const MuonDDDConstants &muonConstants, RecoIdealGeometry &rig) const
 
std::vector< double > extractParameters (DDFilteredView &fv) const
 get parameter also for boolean solid. More...
 
void insertChamber (DDFilteredView &fv, const std::string &type, const MuonDDDConstants &muonConstants, RecoIdealGeometry &rig) const
 create the chamber More...
 
void insertLayer (DDFilteredView &fv, const std::string &type, const MuonDDDConstants &muonConstants, RecoIdealGeometry &rig) const
 create the layer More...
 
void insertSuperLayer (DDFilteredView &fv, const std::string &type, const MuonDDDConstants &muonConstants, RecoIdealGeometry &rig) const
 create the SL More...
 
PosRotPair plane (const DDFilteredView &fv) const
 

Detailed Description

Build the DTGeometry from the DDD description.

Date:
2009/01/16 11:11:47
Revision:
1.1
Author
Stefano Lacaprara lacap.nosp@m.rara.nosp@m.@pd.i.nosp@m.nfn..nosp@m.it INFN LNL

Definition at line 27 of file DTGeometryParsFromDD.h.

Member Typedef Documentation

typedef std::pair<std::vector<double>, std::vector<double> > DTGeometryParsFromDD::PosRotPair
private

Definition at line 63 of file DTGeometryParsFromDD.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

DTGeometryParsFromDD::DTGeometryParsFromDD ( )

Constructor.

Definition at line 34 of file DTGeometryParsFromDD.cc.

34 {}
DTGeometryParsFromDD::~DTGeometryParsFromDD ( )
virtual

Destructor.

Definition at line 36 of file DTGeometryParsFromDD.cc.

36 {}

Member Function Documentation

void DTGeometryParsFromDD::build ( const DDCompactView cview,
const MuonDDDConstants muonConstants,
RecoIdealGeometry rig 
)

Definition at line 39 of file DTGeometryParsFromDD.cc.

References DDFilteredView::addFilter(), DDSpecificsFilter::AND, alcazmumu_cfi::filter, DDSpecificsFilter::matches, DDSpecificsFilter::setCriteria(), and relativeConstraints::value.

Referenced by DTRecoIdealDBLoader::beginRun().

41  {
42  // cout << "DTGeometryParsFromDD::build" << endl;
43  // static const string t0 = "DTGeometryParsFromDD::build";
44  // TimeMe timer(t0,true);
45 
46  std::string attribute = "MuStructure";
47  std::string value = "MuonBarrelDT";
48  DDValue val(attribute, value, 0.0);
49 
50  // Asking only for the Muon DTs
52  filter.setCriteria(val, // name & value of a variable
55  true, // compare strings otherwise doubles
56  true // use merged-specifics or simple-specifics
57  );
58  DDFilteredView fview(*cview);
59  fview.addFilter(filter);
60  buildGeometry(fview, muonConstants, rig);
61  //cout << "RecoIdealGeometry " << rig.size() << endl;
62 }
void buildGeometry(DDFilteredView &fv, const MuonDDDConstants &muonConstants, RecoIdealGeometry &rig) const
void setCriteria(const DDValue &nameVal, comp_op, log_op l=AND, bool asString=true, bool merged=true)
Definition: DDFilter.cc:285
The DDGenericFilter is a runtime-parametrized Filter looking on DDSpecifcs.
Definition: DDFilter.h:37
void DTGeometryParsFromDD::buildGeometry ( DDFilteredView fv,
const MuonDDDConstants muonConstants,
RecoIdealGeometry rig 
) const
private

Definition at line 65 of file DTGeometryParsFromDD.cc.

References DDfetch(), DDFilteredView::firstChild(), DDFilteredView::mergedSpecifics(), DDFilteredView::nextSibling(), DDFilteredView::parent(), and DDValue::strings().

67  {
68  // static const string t0 = "DTGeometryParsFromDD::buildGeometry";
69  // TimeMe timer(t0,true);
70 
71  bool doChamber = fv.firstChild();
72 
73  // Loop on chambers
74  int ChamCounter=0;
75  while (doChamber){
76  ChamCounter++;
77  DDValue val("Type");
78  const DDsvalues_type params(fv.mergedSpecifics());
79  string type;
80  if (DDfetch(&params,val)) type = val.strings()[0];
81  // FIXME
82  val=DDValue("FEPos");
83  string FEPos;
84  if (DDfetch(&params,val)) FEPos = val.strings()[0];
85  insertChamber(fv,type, muonConstants,rig);
86 
87  // Loop on SLs
88  bool doSL = fv.firstChild();
89  int SLCounter=0;
90  while (doSL) {
91  SLCounter++;
92  insertSuperLayer(fv, type, muonConstants,rig);
93 
94  bool doL = fv.firstChild();
95  int LCounter=0;
96  // Loop on SLs
97  while (doL) {
98  LCounter++;
99  insertLayer(fv, type, muonConstants, rig);
100 
101  // fv.parent();
102  doL = fv.nextSibling(); // go to next layer
103  } // layers
104 
105  fv.parent();
106  doSL = fv.nextSibling(); // go to next SL
107  } // sls
108 
109  fv.parent();
110  doChamber = fv.nextSibling(); // go to next chamber
111  } // chambers
112 }
type
Definition: HCALResponse.h:22
bool parent()
set the current node to the parent node ...
bool nextSibling()
set the current node to the next sibling ...
void insertChamber(DDFilteredView &fv, const std::string &type, const MuonDDDConstants &muonConstants, RecoIdealGeometry &rig) const
create the chamber
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
Definition: DDsvalues.cc:102
void insertLayer(DDFilteredView &fv, const std::string &type, const MuonDDDConstants &muonConstants, RecoIdealGeometry &rig) const
create the layer
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
std::maps an index to a DDValue. The index corresponds to the index assigned to the name of the std::...
Definition: DDsvalues.h:19
DDsvalues_type mergedSpecifics() const
bool firstChild()
set the current node to the first child ...
void insertSuperLayer(DDFilteredView &fv, const std::string &type, const MuonDDDConstants &muonConstants, RecoIdealGeometry &rig) const
create the SL
vector< double > DTGeometryParsFromDD::extractParameters ( DDFilteredView fv) const
private

get parameter also for boolean solid.

Definition at line 203 of file DTGeometryParsFromDD.cc.

References funct::A, ddbox, DDFilteredView::logicalPart(), DDSolid::parameters(), DDSolid::shape(), DDLogicalPart::solid(), and DDBooleanSolid::solidA().

203  {
204  vector<double> par;
205  if (fv.logicalPart().solid().shape() != ddbox) {
206  DDBooleanSolid bs(fv.logicalPart().solid());
207  DDSolid A = bs.solidA();
208  while (A.shape() != ddbox) {
209  DDBooleanSolid bs(A);
210  A = bs.solidA();
211  }
212  par=A.parameters();
213  } else {
214  par = fv.logicalPart().solid().parameters();
215  }
216  return par;
217 }
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
Definition: DDSolid.cc:150
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the filtered-view.
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
A DDSolid represents the shape of a part.
Definition: DDSolid.h:35
DDSolidShape shape(void) const
The type of the solid.
Definition: DDSolid.cc:144
void DTGeometryParsFromDD::insertChamber ( DDFilteredView fv,
const std::string &  type,
const MuonDDDConstants muonConstants,
RecoIdealGeometry rig 
) const
private

create the chamber

SL the definition of length, width, thickness depends on the local reference frame of the Det

Definition at line 114 of file DTGeometryParsFromDD.cc.

References evf::soaputils::extractParameters(), DDFilteredView::geoHistory(), MuonDDDNumbering::geoHistoryToBaseNumber(), DTNumberingScheme::getDetId(), RecoIdealGeometry::insert(), and findQualityFiles::size.

117  {
118  MuonDDDNumbering mdddnum (muonConstants);
119  DTNumberingScheme dtnum (muonConstants);
120  int rawid = dtnum.getDetId(mdddnum.geoHistoryToBaseNumber(fv.geoHistory()));
121  DTChamberId detId(rawid);
122  //cout << "inserting Chamber " << detId << endl;
123 
124  // Chamber specific parameter (size)
125  vector<double> par;
126  par.push_back(DTChamberTag);
127  vector<double> size= extractParameters(fv);
128  par.insert(par.end(), size.begin(), size.end());
129 
131  // width is along local X
132  // length is along local Y
133  // thickness is long local Z
134 
135  PosRotPair posRot(plane(fv));
136 
137  rig.insert(rawid, posRot.first, posRot.second, par);
138 }
bool insert(DetId id, const std::vector< double > &trans, const std::vector< double > &rot, const std::vector< double > &pars)
const DDGeoHistory & geoHistory() const
The list of ancestors up to the root-node of the current node.
std::vector< double > extractParameters(DDFilteredView &fv) const
get parameter also for boolean solid.
std::pair< std::vector< double >, std::vector< double > > PosRotPair
tuple size
Write out results.
PosRotPair plane(const DDFilteredView &fv) const
void DTGeometryParsFromDD::insertLayer ( DDFilteredView fv,
const std::string &  type,
const MuonDDDConstants muonConstants,
RecoIdealGeometry rig 
) const
private

create the layer

Definition at line 163 of file DTGeometryParsFromDD.cc.

References DDFilteredView::copyno(), evf::soaputils::extractParameters(), DDFilteredView::firstChild(), DDFilteredView::geoHistory(), MuonDDDNumbering::geoHistoryToBaseNumber(), DTNumberingScheme::getDetId(), RecoIdealGeometry::insert(), DDFilteredView::nextSibling(), DDFilteredView::parent(), and findQualityFiles::size.

166  {
167 
168  MuonDDDNumbering mdddnum(muonConstants);
169  DTNumberingScheme dtnum(muonConstants);
170  int rawid = dtnum.getDetId(mdddnum.geoHistoryToBaseNumber(fv.geoHistory()));
171  DTLayerId layId(rawid);
172  //cout << "inserting Layer " << layId << endl;
173 
174  // Layer specific parameter (size)
175  vector<double> par;
176  par.push_back(DTLayerTag);
177  vector<double> size= extractParameters(fv);
178  par.insert(par.end(), size.begin(), size.end());
179 
180  // Loop on wires
181  bool doWire = fv.firstChild();
182  int WCounter=0;
183  int firstWire=fv.copyno();
184  //float wireLength = par[1]/cm;
185  while (doWire) {
186  WCounter++;
187  doWire = fv.nextSibling(); // next wire
188  }
189  vector<double> sensSize= extractParameters(fv);
190  //int lastWire=fv.copyno();
191  par.push_back(firstWire);
192  par.push_back(WCounter);
193  par.push_back(sensSize[1]);
194  fv.parent();
195 
196  PosRotPair posRot(plane(fv));
197 
198  rig.insert(layId, posRot.first, posRot.second, par);
199 
200 }
bool parent()
set the current node to the parent node ...
bool nextSibling()
set the current node to the next sibling ...
bool insert(DetId id, const std::vector< double > &trans, const std::vector< double > &rot, const std::vector< double > &pars)
const DDGeoHistory & geoHistory() const
The list of ancestors up to the root-node of the current node.
int copyno() const
Copy number associated with the current node.
std::vector< double > extractParameters(DDFilteredView &fv) const
get parameter also for boolean solid.
std::pair< std::vector< double >, std::vector< double > > PosRotPair
bool firstChild()
set the current node to the first child ...
tuple size
Write out results.
PosRotPair plane(const DDFilteredView &fv) const
void DTGeometryParsFromDD::insertSuperLayer ( DDFilteredView fv,
const std::string &  type,
const MuonDDDConstants muonConstants,
RecoIdealGeometry rig 
) const
private

create the SL

Definition at line 140 of file DTGeometryParsFromDD.cc.

References evf::soaputils::extractParameters(), DDFilteredView::geoHistory(), MuonDDDNumbering::geoHistoryToBaseNumber(), DTNumberingScheme::getDetId(), RecoIdealGeometry::insert(), and findQualityFiles::size.

143  {
144 
145  MuonDDDNumbering mdddnum(muonConstants);
146  DTNumberingScheme dtnum(muonConstants);
147  int rawid = dtnum.getDetId(mdddnum.geoHistoryToBaseNumber(fv.geoHistory()));
148  DTSuperLayerId slId(rawid);
149  //cout << "inserting SuperLayer " << slId << endl;
150 
151  // Slayer specific parameter (size)
152  vector<double> par;
153  par.push_back(DTSuperLayerTag);
154  vector<double> size= extractParameters(fv);
155  par.insert(par.end(), size.begin(), size.end());
156 
157  // Ok this is the slayer position...
158  PosRotPair posRot(plane(fv));
159 
160  rig.insert(slId, posRot.first, posRot.second, par);
161 }
bool insert(DetId id, const std::vector< double > &trans, const std::vector< double > &rot, const std::vector< double > &pars)
const DDGeoHistory & geoHistory() const
The list of ancestors up to the root-node of the current node.
std::vector< double > extractParameters(DDFilteredView &fv) const
get parameter also for boolean solid.
std::pair< std::vector< double >, std::vector< double > > PosRotPair
tuple size
Write out results.
PosRotPair plane(const DDFilteredView &fv) const
DTGeometryParsFromDD::PosRotPair DTGeometryParsFromDD::plane ( const DDFilteredView fv) const
private

Definition at line 220 of file DTGeometryParsFromDD.cc.

References idealTransformation::rotation, DDFilteredView::rotation(), DDFilteredView::translation(), vdt::x, detailsBasic3DVector::y, and detailsBasic3DVector::z.

220  {
221  // extract the position
222  const DDTranslation & trans(fv.translation());
223 
224  std::vector<double> gtran( 3 );
225  gtran[0] = (float) 1.0 * (trans.x() / cm);
226  gtran[1] = (float) 1.0 * (trans.y() / cm);
227  gtran[2] = (float) 1.0 * (trans.z() / cm);
228 
229  // now the rotation
230  // DDRotationMatrix tmp = fv.rotation();
231  // === DDD uses 'active' rotations - see CLHEP user guide ===
232  // ORCA uses 'passive' rotation.
233  // 'active' and 'passive' rotations are inverse to each other
234  // DDRotationMatrix tmp = fv.rotation();
235  DDRotationMatrix rotation = fv.rotation();//REMOVED .Inverse();
236  DD3Vector x, y, z;
237  rotation.GetComponents(x,y,z);
238 // std::cout << "INVERSE rotation by its own operator: "<< fv.rotation() << std::endl;
239 // std::cout << "INVERSE rotation manually: "
240 // << x.X() << ", " << x.Y() << ", " << x.Z() << std::endl
241 // << y.X() << ", " << y.Y() << ", " << y.Z() << std::endl
242 // << z.X() << ", " << z.Y() << ", " << z.Z() << std::endl;
243 
244  std::vector<double> grmat( 9 );
245  grmat[0] = (float) 1.0 * x.X();
246  grmat[1] = (float) 1.0 * x.Y();
247  grmat[2] = (float) 1.0 * x.Z();
248 
249  grmat[3] = (float) 1.0 * y.X();
250  grmat[4] = (float) 1.0 * y.Y();
251  grmat[5] = (float) 1.0 * y.Z();
252 
253  grmat[6] = (float) 1.0 * z.X();
254  grmat[7] = (float) 1.0 * z.Y();
255  grmat[8] = (float) 1.0 * z.Z();
256 
257 // std::cout << "rotation by its own operator: "<< tmp << std::endl;
258 // DD3Vector tx, ty,tz;
259 // tmp.GetComponents(tx, ty, tz);
260 // std::cout << "rotation manually: "
261 // << tx.X() << ", " << tx.Y() << ", " << tx.Z() << std::endl
262 // << ty.X() << ", " << ty.Y() << ", " << ty.Z() << std::endl
263 // << tz.X() << ", " << tz.Y() << ", " << tz.Z() << std::endl;
264 
265  return pair<std::vector<double>, std::vector<double> >(gtran, grmat);
266 }
const DDRotationMatrix & rotation() const
The absolute rotation of the current node.
double double double z
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
A DD Translation is currently implemented with Root Vector3D.
Definition: DDTranslation.h:6
const DDTranslation & translation() const
The absolute translation of the current node.
x
Definition: VDTMath.h:216
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.