13 #include "CLHEP/Units/GlobalSystemOfUnits.h"
23 #include <Math/RotationZ.h>
24 #include <Math/AxisAngle.h>
43 eval.
set(ns,
"length",
"20.*m");
46 eval.
set(ns,
"corner",
"[length]/4.");
49 DDName worldName(
"world",ns);
51 DDName nitrogenName(
"Nitrogen",
"elements");
52 DDName oxygenName(
"Oxygen",
"elements");
55 eval.
eval(ns,
"[length]/2."),
56 eval.
eval(ns,
"[length]/2."));
71 eval.
eval(ns,
"14.007*g/mole"),
72 eval.
eval(ns,
"0.808*g/cm3") );
76 eval.
eval(ns,
"15.999*g/mole"),
77 eval.
eval(ns,
"1.43*g/cm3") );
115 cout <<
"main::initialize DDL parser" << endl;
118 cout <<
"main::about to set configuration" << endl;
123 eval.
eval(ns,
"[setup:corner]/4."),
124 eval.
eval(ns,
"[setup:corner]/8."),
125 eval.
eval(ns,
"[setup:corner]/4.")
128 eval.
eval(ns,
"[setup:corner]/16."),
129 eval.
eval(ns,
"[setup:corner]/16."),
130 eval.
eval(ns,
"[setup:corner]/16.")
134 DDName(
"Oxygen",
"elements"),
138 DDName(
"Nitrogen",
"elements"),
152 eval.
eval(ns,
"[setup:corner]/16."),
153 eval.
eval(ns,
"[setup:corner]/8.")
156 eval.
eval(ns,
"[setup:corner]*1.25*sin(0.)"),
159 eval.
eval(ns,
"[setup:corner]*1.25*sin(30.*deg)"),
162 eval.
eval(ns,
"[setup:corner]*1.25*sin(60.*deg)"),
165 eval.
eval(ns,
"[setup:corner]*1.25*sin(90.*deg)"),
168 cpv.
position(sensorLP, supportLP, std::string(
"1"), t1, unit);
169 cpv.
position(supportLP, part, std::string(
"1"), t2, unit);
170 cpv.
position(supportLP, part, std::string(
"2"), t3, r30);
171 cpv.
position(supportLP, part, std::string(
"3"), t4, r60);
172 cpv.
position(supportLP, part, std::string(
"4"), t5, r90);
177 cpv.
position(part, ws, std::string(
"1"), t0, rw);
185 os <<
"Starting Regressiontest Output" << endl;
189 cout <<
"main::initialize DDL parser" << endl;
192 cout <<
"main::about to set configuration" << endl;
195 cf.
readConfig(
"DetectorDescription/RegressionTest/test/configuration.xml");
197 cout <<
"main::about to start parsing" << endl;
201 cout <<
"main::completed Parser" << endl;
204 vector<DDTranslation> tvec;
206 std::cout <<
"Before the loop..." << std::endl;
208 ROOT::Math::AxisAngle ra(exv.
rotation());
213 os <<
" " << ra.Axis() << ra.Angle()/deg << endl;
218 vector<DDTranslation>::iterator it = tvec.begin();
219 os << endl <<
"center points of all solids" << endl;
220 for (; it != tvec.end(); ++it) {
221 os << (*it).x() <<
" " << (*it).y() <<
" " << (*it).z() << endl;
228 cout <<
"main:: initialize" << endl;
231 cout <<
"main::initialize DDL parser" << endl;
234 cout <<
"main::about to set configuration" << endl;
237 cf.
readConfig(
"DetectorDescription/RegressionTest/test/configuration.xml");
239 cout <<
"main::about to start parsing" << endl;
243 cout <<
"main::completed Parser" << endl;
245 cout << endl << endl <<
"main::Start checking!" << endl << endl;
250 cout <<
"main::PROBLEM:" << endl
256 std::cout <<
"rot asis\n" << rot << std::endl;
262 cout <<
"phiX=" << x.phi() <<
" or in degrees = "
263 << x.phi()/deg << endl;
264 cout <<
"thetaX=" << x.theta() <<
" or in degrees = "
265 << x.theta()/deg << endl;
266 cout <<
"phiY=" << y.phi() <<
" or in degrees = "
267 << y.phi()/deg << endl;
268 cout <<
"thetaY=" << y.theta() <<
" or in degrees = "
269 << y.theta()/deg << endl;
270 cout <<
"phiZ=" << z.phi() <<
" or in degrees = "
271 << z.phi()/deg << endl;
272 cout <<
"thetaZ=" << z.theta() <<
" or in degrees = "
273 << z.theta()/deg << endl;
275 cout <<
"some factor/equations..." << endl;
276 cout <<
" sin(thetaX()) * cos(phiX()) = "
277 <<
sin(x.theta()) *
cos(x.phi()) << endl;
285 ROOT::Math::AxisAngle aa(
DD3Vector(1.,1.,1.), 20.*deg);
287 cout <<
"DD3Vector was " <<
DD3Vector(1.,1.,1.) <<
" and the rotation was 20*deg around that axis." << endl;
292 cout <<
"(1,0,0, 0,-1,0, 0,0,1)" << endl;
bool next()
set current node to the next node in the expanded tree
const DDRotationMatrix & rotation() const
The absolute rotation of the current node.
int parse(const DDLDocumentProvider &dp)
Parse all files. Return is meaningless.
DDMaterial is used to define and access material information.
Sin< T >::type sin(const T &t)
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
DDName is used to identify DDD entities uniquely.
virtual void set(const std::string &ns, const std::string &name, const std::string &valueExpr)=0
put a new variable named 'namespace:name' into the dictionary of the evaluator
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
type of data representation of DDCompactView
void regressionTest_first()
A DDSolid represents the shape of a part.
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Represents a uniquely identifyable rotation matrix.
void printRot(const DDRotationMatrix &rot)
int addMaterial(const DDMaterial &m, double fm)
adds a material to the mixture proportional to its fraction-mass fm.
static value_type & instance()
void regressionTest_setup()
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
A DD Translation is currently implemented with Root Vector3D.
Cos< T >::type cos(const T &t)
Interface of an Expression Evaluator.
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
static DDSolid box(const DDName &name, double xHalf, double yHalf, double zHalf)
Creates a box with side length 2*xHalf, 2*yHalf, 2*zHalf.
const DDTranslation & translation() const
The absolute translation of the current node.
DDLParser is the main class of Detector Description Language Parser.
virtual double eval(const std::string &ns, const std::string &expr)=0
evaluate an expression expr inside the local namespace
FIPConfiguration reads in the configuration file for the DDParser.
int readConfig(const std::string &filename)
Read in the configuration file.
static DDSolid shapeless(const DDName &name)
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the expanded-view.
Provides an exploded view of the detector (tree-view)
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
const DDMaterial & material(void) const
Returns a reference object of the material this LogicalPart is made of.