7 #include "CLHEP/Units/GlobalSystemOfUnits.h" 8 #include "CLHEP/Units/SystemOfUnits.h" 24 #include "Math/GenVector/AxisAngle.h" 25 #include "Math/GenVector/Cartesian3D.h" 26 #include "Math/GenVector/DisplacementVector3D.h" 27 #include "Math/GenVector/Rotation3D.h" 28 #include "Math/GenVector/RotationZ.h" 49 eval.
set(ns,
"length",
"20.*m");
52 eval.
set(ns,
"corner",
"[length]/4.");
55 DDName worldName(
"world",ns);
57 DDName nitrogenName(
"Nitrogen",
"elements");
58 DDName oxygenName(
"Oxygen",
"elements");
61 eval.
eval(ns,
"[length]/2."),
62 eval.
eval(ns,
"[length]/2."));
77 eval.
eval(ns,
"14.007*g/mole"),
78 eval.
eval(ns,
"0.808*g/cm3") );
82 eval.
eval(ns,
"15.999*g/mole"),
83 eval.
eval(ns,
"1.43*g/cm3") );
120 cout <<
"main::initialize DDL parser" << endl;
123 cout <<
"main::about to set configuration" << endl;
128 eval.
eval(ns,
"[setup:corner]/4."),
129 eval.
eval(ns,
"[setup:corner]/8."),
130 eval.
eval(ns,
"[setup:corner]/4.")
133 eval.
eval(ns,
"[setup:corner]/16."),
134 eval.
eval(ns,
"[setup:corner]/16."),
135 eval.
eval(ns,
"[setup:corner]/16.")
139 DDName(
"Oxygen",
"elements"),
143 DDName(
"Nitrogen",
"elements"),
157 eval.
eval(ns,
"[setup:corner]/16."),
158 eval.
eval(ns,
"[setup:corner]/8.")
161 eval.
eval(ns,
"[setup:corner]*1.25*sin(0.)"),
164 eval.
eval(ns,
"[setup:corner]*1.25*sin(30.*deg)"),
167 eval.
eval(ns,
"[setup:corner]*1.25*sin(60.*deg)"),
170 eval.
eval(ns,
"[setup:corner]*1.25*sin(90.*deg)"),
190 os <<
"Starting Regressiontest Output" << endl;
193 cout <<
"main::initialize DDL parser" << endl;
196 cout <<
"main::about to set configuration" << endl;
198 cf.
readConfig(
"DetectorDescription/RegressionTest/test/configuration.xml");
200 cout <<
"main::about to start parsing" << endl;
204 cout <<
"main::completed Parser" << endl;
207 vector<DDTranslation> tvec;
209 std::cout <<
"Before the loop..." << std::endl;
211 ROOT::Math::AxisAngle ra(exv.
rotation());
216 os <<
" " << ra.Axis() << ra.Angle()/deg << endl;
221 vector<DDTranslation>::iterator it = tvec.begin();
222 os << endl <<
"center points of all solids" << endl;
223 for (; it != tvec.end(); ++it) {
224 os << (*it).x() <<
" " << (*it).y() <<
" " << (*it).z() << endl;
231 cout <<
"main:: initialize" << endl;
233 cout <<
"main::initialize DDL parser" << endl;
236 cout <<
"main::about to set configuration" << endl;
239 cf.
readConfig(
"DetectorDescription/RegressionTest/test/configuration.xml");
241 cout <<
"main::about to start parsing" << endl;
245 cout <<
"main::completed Parser" << endl;
247 cout << endl << endl <<
"main::Start checking!" << endl << endl;
252 cout <<
"main::PROBLEM:" << endl
258 std::cout <<
"rot asis\n" << rot << std::endl;
260 rot.GetComponents(x,y,z);
265 cout <<
"phiX=" << x.phi() <<
" or in degrees = " 266 << x.phi()/deg << endl;
267 cout <<
"thetaX=" << x.theta() <<
" or in degrees = " 268 << x.theta()/deg << endl;
269 cout <<
"phiY=" << y.phi() <<
" or in degrees = " 270 << y.phi()/deg << endl;
271 cout <<
"thetaY=" << y.theta() <<
" or in degrees = " 272 << y.theta()/deg << endl;
273 cout <<
"phiZ=" << z.phi() <<
" or in degrees = " 274 << z.phi()/deg << endl;
275 cout <<
"thetaZ=" << z.theta() <<
" or in degrees = " 276 << z.theta()/deg << endl;
278 cout <<
"some factor/equations..." << endl;
279 cout <<
" sin(thetaX()) * cos(phiX()) = " 280 <<
sin(x.theta()) *
cos(x.phi()) << endl;
287 ROOT::Math::AxisAngle aa(
DD3Vector(1.,1.,1.), 20.*deg);
289 cout <<
"DD3Vector was " <<
DD3Vector(1.,1.,1.) <<
" and the rotation was 20*deg around that axis." << endl;
294 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.
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.
T x() const
Cartesian x coordinate.
static value_type & instance()
void regressionTest_setup()
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
A DD Translation is currently implemented with Root Vector3D.
auto const T2 &decltype(t1.eta()) t2
Cos< T >::type cos(const T &t)
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.
FIPConfiguration reads in the configuration file for the DDParser.
void output(string filename)
int readConfig(const std::string &filename)
Read in the configuration file.
static DDSolid shapeless(const DDName &name)
void set(const std::string &ns, const std::string &name, const std::string &exprValue)
double eval(const std::string &ns, const std::string &expr)
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.