diff --git a/DDCore/include/XML/XMLChildValue.h b/DDCore/include/XML/XMLChildValue.h index d204fe08ac936a27ac5756a3ddd7fc5430774cda..84e27066cfb2b2e8162a71279eac1571ba29db7d 100644 --- a/DDCore/include/XML/XMLChildValue.h +++ b/DDCore/include/XML/XMLChildValue.h @@ -11,8 +11,8 @@ // //========================================================================== -#ifndef DD4HEP_XMLCHILDVALUE_H -#define DD4HEP_XMLCHILDVALUE_H +#ifndef DD4HEP_XML_XMLCHILDVALUE_H +#define DD4HEP_XML_XMLCHILDVALUE_H // Framework include files #include "XML/XMLTags.h" @@ -23,350 +23,8 @@ namespace DD4hep { /// Namespace for the AIDA detector description toolkit supporting XML utilities namespace XML { - /// XML Handle to xml elements with predefined child access - /** - * Helper class to access any field in a xml tag in a - * very easy way. - * - You may assign any xml handle to a childvalue object - * - Any child with the name and the value attribute set may then be accessed - * by it's natural way. All possible child names are - * reflected by the object's member functions. - * - * IMPORTANT NOTE: - * to be understood, the child elements MUST have structure like: - * <inner_r value="76*cm" ....other attributes...../> - * Other attributes may e.g. be a comment describing the variable. - * The 'other attributes' are ignored. The 'value' attribute - * is mandatory. - * - * - If an child is requested and not present, a exception - * is thrown. - * - Functions, which accept a default value do NOT throw - * an exception if the child is not present. These - * rather return the default value. - * - If a often used function is not present - the - * implementation thereof is simple. - * - * Such helper classes may be defined locally by any user - * since XML element handles may easily be transferred. - * Run-time exceptions occur however, if non-exiting child elements - * are accessed. - * - * \author M.Frank - * \version 1.0 - * \ingroup DD4HEP_XML - */ - struct ChildValue: public Element { - /// Default constructor - ChildValue() - : Element(Handle_t(0)) { - } - /// Constructor from Handle - ChildValue(Handle_t e) - : Element(e) { - } - /// Constructor from Element - ChildValue(const Element& e) - : Element(e) { - } - - /// Access parameters: id - int id() const; - /// Access parameters: id, if not present returns default - int id(int default_value) const; - - /// Access parameters: type - int type() const; - /// Access rotation constants: combineHits - bool combineHits() const; - - /// Access rotation constants: angle - double angle() const; - /// Access rotation constants: angle - double alpha() const; - /// Access rotation constants: angle - double beta() const; - /// Access rotation constants: angle - double gamma() const; - /// Access rotation constants: angle - double delta() const; - /// Access rotation constants: angle - double epsilon() const; - /// Access rotation constants: theta - double theta() const; - /// Access rotation constants: thetaBins - int thetaBins() const; - - /// Access rotation constants: phi - double phi() const; - /// Access rotation constants: phiBins - int phiBins() const; - /// Access rotation constants: phi0 - double phi0() const; - /// Access parameters: phi0, if not present returns default - double phi0(double default_value) const; - /// Access rotation constants: phi0_offset - double phi0_offset() const; - /// Access parameters: phi0_offset, if not present returns default - double phi0_offset(double default_value) const; - /// Access rotation constants: phi1 - double phi1() const; - /// Access parameters: phi1, if not present returns default - double phi1(double default_value) const; - /// Access rotation constants: psi - double psi() const; - - /// Access Tube parameters: zhalf - double zhalf() const; - /// Access Tube parameters: deltaphi - double deltaphi() const; - - /// Access parameters: b - double b() const; - /// Access parameters: B - double B() const; - /// Access parameters: g - double g() const; - /// Access parameters: G - double G() const; - - /// Access parameters: r - double r() const; - /// Access parameters: r, if not present returns default - double r(double default_value) const; - /// Access parameters: R - double R() const; - /// Access parameters: dr - double dr() const; - /// Access parameters: r0 - double r0() const; - /// Access parameters: dr, if not present returns default - double dr(double default_value) const; - /// Access min/max parameters: rmin - double rmin() const; - /// Access min/max parameters: rmax - double rmax() const; - /// Access min/max parameters: rmin1 - double rmin1() const; - /// Access min/max parameters: rmax1 - double rmax1() const; - /// Access min/max parameters: rmin2 - double rmin2() const; - /// Access min/max parameters: rmax2 - double rmax2() const; - /// Access parameters: radius - double radius() const; - /// Access attribute values: distance - double distance() const; - /// Access attribute values: outer_radius - double outer_radius() const; - /// Access attribute values: outer_r - double outer_r() const; - /// Access attribute values: inner_radius - double inner_radius() const; - /// Access attribute values: inner_r - double inner_r() const; - - /// Access parameters: x - double x() const; - /// Access parameters: x, if not present returns default - double x(double default_val) const; - /// Access parameters: X - double X() const; - /// Access parameters: x0 - double x0() const; - /// Access parameters: x1 - double x1() const; - /// Access parameters: x2 - double x2() const; - /// Access parameters: dx - double dx() const; - /// Access parameters: dx, if not present returns default - double dx(double default_value) const; - /// Access min/max parameters: xmax - double xmin() const; - /// Access min/max parameters: xmax - double xmax() const; - /// Access min/max parameters: x_offset - double x_offset() const; - /// Access min/max parameters: dim_x - double dim_x() const; - - /// Access parameters: y - double y() const; - /// Access parameters: y, if not present returns default - double y(double default_val) const; - /// Access parameters: Y - double Y() const; - /// Access parameters: y0 - double y0() const; - /// Access parameters: y1 - double y1() const; - /// Access parameters: y2 - double y2() const; - /// Access parameters: dy - double dy() const; - /// Access parameters: dz, if not present returns default - double dy(double default_value) const; - /// Access min/max parameters: ymax - double ymin() const; - /// Access min/max parameters: ymax - double ymax() const; - /// Access min/max parameters: y_offset - double y_offset() const; - /// Access min/max parameters: dim_y - double dim_y() const; - - /// Access parameters: z - double z() const; - /// Access parameters: z, if not present returns default - double z(double default_val) const; - /// Access parameters: Z - double Z() const; - /// Access parameters: z0 - double z0() const; - /// Access parameters: z1 - double z1() const; - /// Access parameters: z2 - double z2() const; - /// Access parameters: dz - double dz() const; - /// Access parameters: dz, if not present returns default - double dz(double default_value) const; - /// Access min/max parameters: zmax - double zmin() const; - /// Access min/max parameters: zmax - double zmax() const; - /// Access attribute values: outer_z - double outer_z() const; - /// Access attribute values: inner_z - double inner_z() const; - /// Access min/max parameters: z_offset - double z_offset() const; - /// Access min/max parameters: dim_z - double dim_z() const; - - /// Access attribute values: length - double length() const; - /// Access attribute values: width - double width() const; - /// Access attribute values: height - double height() const; - /// Access attribute values: depth - double depth() const; - /// Access attribute values: thickness - double thickness() const; - - /// Access attribute values: z_length - double z_length() const; - /// Access attribute values: gap - double gap() const; - /// Access attribute values: r_size - double r_size() const; - /// Access attribute values: phi_size_max - double phi_size_max() const; - /// Access attribute values: reflect - bool reflect() const; - /// Access attribute values: reflect - bool reflect(bool default_value) const; - /// Access attribute values: crossing_angle - double crossing_angle() const; - /// Access attribute values: repeat - int repeat() const; - - /// Access attribute values: outgoing_r - double outgoing_r() const; - /// Access attribute values: incoming_r - double incoming_r() const; - /// Access attribute values: offset - double offset() const; - /// Access attribute values: offset - double offset(double default_value) const; - /// Access attribute values: number - int number() const; - - /// Access attribute values: nmodules - int nmodules() const; - /// Access attribute values: nModules - int nModules() const; - /// Access attribute values: RowID - int RowID() const; - /// Access attribute values: moduleHeight - double moduleHeight() const; - /// Access attribute values: moduleWidth - double moduleWidth() const; - /// Access attribute values: modulePitch - double modulePitch() const; - /// Access attribute values: modulePosX - double modulePosX() const; - /// Access attribute values: modulePosY - double modulePosY() const; - - /// Access attribute values: nPads - int nPads() const; - /// Access attribute values: rowPitch - double rowPitch() const; - /// Access attribute values: padPitch - double padPitch() const; - /// Access attribute values: rowHeight - double rowHeight() const; - /// Access attribute values: padType - std::string padType() const; - - /// Access attribute values: numsides - int numsides() const; - /// Access attribute values: nsides - int nsides() const; - /// Access attribute values: nsides_inner - int nsides_inner() const; - /// Access attribute values: nsides_outer - int nsides_outer() const; - - /// Access attribute values: phi_tilt - double phi_tilt() const; - /// Access attribute values: nphi - int nphi() const; - /// Access attribute values: rc - double rc() const; - - /// Access attribute values: zstart - double zstart() const; - /// Access attribute values: nz - int nz() const; - - /// Access attribute values: start - double start() const; - /// Access attribute values: end - double end() const; - /// Access attribute values: inner_field - double inner_field() const; - /// Access attribute values: outer_field - double outer_field() const; - - /// Access attribute values: visible - bool visible() const; - /// Access attribute values: show_daughters - bool show_daughters() const; - - /// Access "name" attribute as STL string - std::string nameStr() const; - /// Access "ref" attribute as a string - std::string refStr() const; - /// Access "type" attribute as STL string - std::string typeStr() const; - /// Access "value" attribute as STL string - std::string valueStr() const; - /// Access "module" attribute as STL string - std::string moduleStr() const; - /// Access "readout" attribute as STL string - std::string readoutStr() const; - /// Access vis attribute as STL string. If not present empty return empty string - std::string visStr() const; - /// Access region attribute as STL string. If not present empty return empty string - std::string regionStr() const; - /// Access limits attribute as STL string. If not present empty return empty string - std::string limitsStr() const; - }; - } /* End namespace XML */ -} /* End namespace DD4hep */ -#endif /* DD4HEP_XMLCHILDVALUE_H */ +#include "XML/detail/ChildValue.h" + + } /* End namespace XML */ +} /* End namespace DD4hep */ +#endif /* DD4HEP_XML_XMLCHILDVALUE_H */ diff --git a/DDCore/src/JSON/Detector.cpp b/DDCore/include/XML/XMLChildValue.inl similarity index 55% rename from DDCore/src/JSON/Detector.cpp rename to DDCore/include/XML/XMLChildValue.inl index 8216e7b7ea7b87e9acf907cc9babee0abe4ad8bb..201a90eb148ab62113e472bfcccc0e25647d5603 100644 --- a/DDCore/src/JSON/Detector.cpp +++ b/DDCore/include/XML/XMLChildValue.inl @@ -11,9 +11,20 @@ // //========================================================================== +#ifndef DD4HEP_XML_XMLCHILDVALUE_INL +#define DD4HEP_XML_XMLCHILDVALUE_INL + // Framework include files -#include "JSON/Detector.h" +#include "XML/XMLChildValue.h" + +/// Namespace for the AIDA detector description toolkit +namespace DD4hep { -using namespace DD4hep::JSON; -#include "XML/detail/Detector.imp" + /// Namespace for the AIDA detector description toolkit supporting XML utilities + namespace XML { +#include "XML/detail/ChildValue.inl" + + } /* End namespace XML */ +} /* End namespace DD4hep */ +#endif /* DD4HEP_XML_XMLCHILDVALUE_INL */ diff --git a/DDCore/include/XML/detail/ChildValue.h b/DDCore/include/XML/detail/ChildValue.h new file mode 100644 index 0000000000000000000000000000000000000000..e7ae23ad504a4019bb96eb2b12dd7c6bef8edce6 --- /dev/null +++ b/DDCore/include/XML/detail/ChildValue.h @@ -0,0 +1,365 @@ +//========================================================================== +// AIDA Detector description implementation for LCD +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== + +/** + * Note: Do NEVER include this file directly! + * + * Use the specific include files in the XML or JSON directory! + * Also NO header guards! + */ + + +/// XML Handle to xml elements with predefined child access +/** + * Helper class to access any field in a xml tag in a + * very easy way. + * - You may assign any xml handle to a childvalue object + * - Any child with the name and the value attribute set may then be accessed + * by it's natural way. All possible child names are + * reflected by the object's member functions. + * + * IMPORTANT NOTE: + * to be understood, the child elements MUST have structure like: + * <inner_r value="76*cm" ....other attributes...../> + * Other attributes may e.g. be a comment describing the variable. + * The 'other attributes' are ignored. The 'value' attribute + * is mandatory. + * + * - If an child is requested and not present, a exception + * is thrown. + * - Functions, which accept a default value do NOT throw + * an exception if the child is not present. These + * rather return the default value. + * - If a often used function is not present - the + * implementation thereof is simple. + * + * Such helper classes may be defined locally by any user + * since XML element handles may easily be transferred. + * Run-time exceptions occur however, if non-exiting child elements + * are accessed. + * + * \author M.Frank + * \version 1.0 + * \ingroup DD4HEP_XML + */ +struct ChildValue: public Element { + /// Default constructor + ChildValue() + : Element(Handle_t(0)) { + } + /// Constructor from Handle + ChildValue(Handle_t e) + : Element(e) { + } + /// Constructor from Element + ChildValue(const Element& e) + : Element(e) { + } + + /// Access parameters: id + int id() const; + /// Access parameters: id, if not present returns default + int id(int default_value) const; + + /// Access parameters: type + int type() const; + /// Access rotation constants: combineHits + bool combineHits() const; + + /// Access rotation constants: angle + double angle() const; + /// Access rotation constants: angle + double alpha() const; + /// Access rotation constants: angle + double beta() const; + /// Access rotation constants: angle + double gamma() const; + /// Access rotation constants: angle + double delta() const; + /// Access rotation constants: angle + double epsilon() const; + /// Access rotation constants: theta + double theta() const; + /// Access rotation constants: thetaBins + int thetaBins() const; + + /// Access rotation constants: phi + double phi() const; + /// Access rotation constants: phiBins + int phiBins() const; + /// Access rotation constants: phi0 + double phi0() const; + /// Access parameters: phi0, if not present returns default + double phi0(double default_value) const; + /// Access rotation constants: phi0_offset + double phi0_offset() const; + /// Access parameters: phi0_offset, if not present returns default + double phi0_offset(double default_value) const; + /// Access rotation constants: phi1 + double phi1() const; + /// Access parameters: phi1, if not present returns default + double phi1(double default_value) const; + /// Access rotation constants: psi + double psi() const; + + /// Access Tube parameters: zhalf + double zhalf() const; + /// Access Tube parameters: deltaphi + double deltaphi() const; + + /// Access parameters: b + double b() const; + /// Access parameters: B + double B() const; + /// Access parameters: g + double g() const; + /// Access parameters: G + double G() const; + + /// Access parameters: r + double r() const; + /// Access parameters: r, if not present returns default + double r(double default_value) const; + /// Access parameters: R + double R() const; + /// Access parameters: dr + double dr() const; + /// Access parameters: r0 + double r0() const; + /// Access parameters: dr, if not present returns default + double dr(double default_value) const; + /// Access min/max parameters: rmin + double rmin() const; + /// Access min/max parameters: rmax + double rmax() const; + /// Access min/max parameters: rmin1 + double rmin1() const; + /// Access min/max parameters: rmax1 + double rmax1() const; + /// Access min/max parameters: rmin2 + double rmin2() const; + /// Access min/max parameters: rmax2 + double rmax2() const; + /// Access parameters: radius + double radius() const; + /// Access attribute values: distance + double distance() const; + /// Access attribute values: outer_radius + double outer_radius() const; + /// Access attribute values: outer_r + double outer_r() const; + /// Access attribute values: inner_radius + double inner_radius() const; + /// Access attribute values: inner_r + double inner_r() const; + + /// Access parameters: x + double x() const; + /// Access parameters: x, if not present returns default + double x(double default_val) const; + /// Access parameters: X + double X() const; + /// Access parameters: x0 + double x0() const; + /// Access parameters: x1 + double x1() const; + /// Access parameters: x2 + double x2() const; + /// Access parameters: dx + double dx() const; + /// Access parameters: dx, if not present returns default + double dx(double default_value) const; + /// Access min/max parameters: xmax + double xmin() const; + /// Access min/max parameters: xmax + double xmax() const; + /// Access min/max parameters: x_offset + double x_offset() const; + /// Access min/max parameters: dim_x + double dim_x() const; + + /// Access parameters: y + double y() const; + /// Access parameters: y, if not present returns default + double y(double default_val) const; + /// Access parameters: Y + double Y() const; + /// Access parameters: y0 + double y0() const; + /// Access parameters: y1 + double y1() const; + /// Access parameters: y2 + double y2() const; + /// Access parameters: dy + double dy() const; + /// Access parameters: dz, if not present returns default + double dy(double default_value) const; + /// Access min/max parameters: ymax + double ymin() const; + /// Access min/max parameters: ymax + double ymax() const; + /// Access min/max parameters: y_offset + double y_offset() const; + /// Access min/max parameters: dim_y + double dim_y() const; + + /// Access parameters: z + double z() const; + /// Access parameters: z, if not present returns default + double z(double default_val) const; + /// Access parameters: Z + double Z() const; + /// Access parameters: z0 + double z0() const; + /// Access parameters: z1 + double z1() const; + /// Access parameters: z2 + double z2() const; + /// Access parameters: dz + double dz() const; + /// Access parameters: dz, if not present returns default + double dz(double default_value) const; + /// Access min/max parameters: zmax + double zmin() const; + /// Access min/max parameters: zmax + double zmax() const; + /// Access attribute values: outer_z + double outer_z() const; + /// Access attribute values: inner_z + double inner_z() const; + /// Access min/max parameters: z_offset + double z_offset() const; + /// Access min/max parameters: dim_z + double dim_z() const; + + /// Access attribute values: length + double length() const; + /// Access attribute values: width + double width() const; + /// Access attribute values: height + double height() const; + /// Access attribute values: depth + double depth() const; + /// Access attribute values: thickness + double thickness() const; + + /// Access attribute values: z_length + double z_length() const; + /// Access attribute values: gap + double gap() const; + /// Access attribute values: r_size + double r_size() const; + /// Access attribute values: phi_size_max + double phi_size_max() const; + /// Access attribute values: reflect + bool reflect() const; + /// Access attribute values: reflect + bool reflect(bool default_value) const; + /// Access attribute values: crossing_angle + double crossing_angle() const; + /// Access attribute values: repeat + int repeat() const; + + /// Access attribute values: outgoing_r + double outgoing_r() const; + /// Access attribute values: incoming_r + double incoming_r() const; + /// Access attribute values: offset + double offset() const; + /// Access attribute values: offset + double offset(double default_value) const; + /// Access attribute values: number + int number() const; + + /// Access attribute values: nmodules + int nmodules() const; + /// Access attribute values: nModules + int nModules() const; + /// Access attribute values: RowID + int RowID() const; + /// Access attribute values: moduleHeight + double moduleHeight() const; + /// Access attribute values: moduleWidth + double moduleWidth() const; + /// Access attribute values: modulePitch + double modulePitch() const; + /// Access attribute values: modulePosX + double modulePosX() const; + /// Access attribute values: modulePosY + double modulePosY() const; + + /// Access attribute values: nPads + int nPads() const; + /// Access attribute values: rowPitch + double rowPitch() const; + /// Access attribute values: padPitch + double padPitch() const; + /// Access attribute values: rowHeight + double rowHeight() const; + /// Access attribute values: padType + std::string padType() const; + + /// Access attribute values: numsides + int numsides() const; + /// Access attribute values: nsides + int nsides() const; + /// Access attribute values: nsides_inner + int nsides_inner() const; + /// Access attribute values: nsides_outer + int nsides_outer() const; + + /// Access attribute values: phi_tilt + double phi_tilt() const; + /// Access attribute values: nphi + int nphi() const; + /// Access attribute values: rc + double rc() const; + + /// Access attribute values: zstart + double zstart() const; + /// Access attribute values: nz + int nz() const; + + /// Access attribute values: start + double start() const; + /// Access attribute values: end + double end() const; + /// Access attribute values: inner_field + double inner_field() const; + /// Access attribute values: outer_field + double outer_field() const; + + /// Access attribute values: visible + bool visible() const; + /// Access attribute values: show_daughters + bool show_daughters() const; + + /// Access "name" attribute as STL string + std::string nameStr() const; + /// Access "ref" attribute as a string + std::string refStr() const; + /// Access "type" attribute as STL string + std::string typeStr() const; + /// Access "value" attribute as STL string + std::string valueStr() const; + /// Access "module" attribute as STL string + std::string moduleStr() const; + /// Access "readout" attribute as STL string + std::string readoutStr() const; + /// Access vis attribute as STL string. If not present empty return empty string + std::string visStr() const; + /// Access region attribute as STL string. If not present empty return empty string + std::string regionStr() const; + /// Access limits attribute as STL string. If not present empty return empty string + std::string limitsStr() const; +}; diff --git a/DDCore/include/XML/detail/ChildValue.imp b/DDCore/include/XML/detail/ChildValue.imp new file mode 100644 index 0000000000000000000000000000000000000000..8d96518fd130d50a354d621b1e661489abf70d25 --- /dev/null +++ b/DDCore/include/XML/detail/ChildValue.imp @@ -0,0 +1,195 @@ +//========================================================================== +// AIDA Detector description implementation for LCD +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== + +XML_CHILDVALUE_ACCESSOR(int, id) +XML_CHILDVALUE_ACCESSOR_INT(id) +XML_CHILDVALUE_ACCESSOR(bool, combineHits) + +XML_CHILDVALUE_ACCESSOR(double, x) +XML_CHILDVALUE_ACCESSOR_DOUBLE(x) +XML_CHILDVALUE_ACCESSOR(double, X) +XML_CHILDVALUE_ACCESSOR(double, dx) +XML_CHILDVALUE_ACCESSOR_DOUBLE(dx) +XML_CHILDVALUE_ACCESSOR(double, x0) +XML_CHILDVALUE_ACCESSOR(double, x1) +XML_CHILDVALUE_ACCESSOR(double, x2) +XML_CHILDVALUE_ACCESSOR(double, xmin) +XML_CHILDVALUE_ACCESSOR(double, xmax) +XML_CHILDVALUE_ACCESSOR(double, x_offset) +XML_CHILDVALUE_ACCESSOR(double, dim_x) + +XML_CHILDVALUE_ACCESSOR(double, y) +XML_CHILDVALUE_ACCESSOR_DOUBLE(y) +XML_CHILDVALUE_ACCESSOR(double, Y) +XML_CHILDVALUE_ACCESSOR(double, dy) +XML_CHILDVALUE_ACCESSOR_DOUBLE(dy) +XML_CHILDVALUE_ACCESSOR(double, y0) +XML_CHILDVALUE_ACCESSOR(double, y1) +XML_CHILDVALUE_ACCESSOR(double, y2) +XML_CHILDVALUE_ACCESSOR(double, ymin) +XML_CHILDVALUE_ACCESSOR(double, ymax) +XML_CHILDVALUE_ACCESSOR(double, y_offset) +XML_CHILDVALUE_ACCESSOR(double, dim_y) + +XML_CHILDVALUE_ACCESSOR(double, z) +XML_CHILDVALUE_ACCESSOR_DOUBLE(z) +XML_CHILDVALUE_ACCESSOR(double, Z) +XML_CHILDVALUE_ACCESSOR(double, dz) +XML_CHILDVALUE_ACCESSOR_DOUBLE(dz) +XML_CHILDVALUE_ACCESSOR(double, z0) +XML_CHILDVALUE_ACCESSOR(double, z1) +XML_CHILDVALUE_ACCESSOR(double, z2) +XML_CHILDVALUE_ACCESSOR(double, zmin) +XML_CHILDVALUE_ACCESSOR(double, zmax) +XML_CHILDVALUE_ACCESSOR(double, z_offset) +XML_CHILDVALUE_ACCESSOR(double, dim_z) +XML_CHILDVALUE_ACCESSOR(double, outer_z) +XML_CHILDVALUE_ACCESSOR(double, inner_z) + +XML_CHILDVALUE_ACCESSOR(double, b) +XML_CHILDVALUE_ACCESSOR(double, g) +XML_CHILDVALUE_ACCESSOR(double, B) +XML_CHILDVALUE_ACCESSOR(double, G) +XML_CHILDVALUE_ACCESSOR(double, r) +XML_CHILDVALUE_ACCESSOR_DOUBLE(r) +XML_CHILDVALUE_ACCESSOR(double, R) +XML_CHILDVALUE_ACCESSOR(double, dr) +XML_CHILDVALUE_ACCESSOR(double, rmin) +XML_CHILDVALUE_ACCESSOR(double, rmax) +XML_CHILDVALUE_ACCESSOR(double, rmin1) +XML_CHILDVALUE_ACCESSOR(double, rmax1) +XML_CHILDVALUE_ACCESSOR(double, rmin2) +XML_CHILDVALUE_ACCESSOR(double, rmax2) +XML_CHILDVALUE_ACCESSOR(double, radius) +XML_CHILDVALUE_ACCESSOR(double, outer_r) +XML_CHILDVALUE_ACCESSOR(double, distance) +XML_CHILDVALUE_ACCESSOR(double, outer_radius) +XML_CHILDVALUE_ACCESSOR(double, inner_r) +XML_CHILDVALUE_ACCESSOR(double, inner_radius) + +XML_CHILDVALUE_ACCESSOR(double, angle) +XML_CHILDVALUE_ACCESSOR(double, alpha) +XML_CHILDVALUE_ACCESSOR(double, beta) +XML_CHILDVALUE_ACCESSOR(double, gamma) +XML_CHILDVALUE_ACCESSOR(double, delta) +XML_CHILDVALUE_ACCESSOR(double, epsilon) +XML_CHILDVALUE_ACCESSOR(double, theta) +XML_CHILDVALUE_ACCESSOR(int, thetaBins) +XML_CHILDVALUE_ACCESSOR(double, psi) +XML_CHILDVALUE_ACCESSOR(double, phi) +XML_CHILDVALUE_ACCESSOR(int, phiBins) +XML_CHILDVALUE_ACCESSOR(double, phi0) +XML_CHILDVALUE_ACCESSOR(double, phi0_offset) +XML_CHILDVALUE_ACCESSOR_DOUBLE(phi0) +XML_CHILDVALUE_ACCESSOR(double, phi1) +XML_CHILDVALUE_ACCESSOR_DOUBLE(phi1) +XML_CHILDVALUE_ACCESSOR(double, deltaphi) + +XML_CHILDVALUE_ACCESSOR(double, length) +XML_CHILDVALUE_ACCESSOR(double, width) +XML_CHILDVALUE_ACCESSOR(double, height) +XML_CHILDVALUE_ACCESSOR(double, depth) +XML_CHILDVALUE_ACCESSOR(double, offset) +XML_CHILDVALUE_ACCESSOR_DOUBLE(offset) +XML_CHILDVALUE_ACCESSOR(double, crossing_angle) +XML_CHILDVALUE_ACCESSOR(double, incoming_r) +XML_CHILDVALUE_ACCESSOR(double, outgoing_r) +XML_CHILDVALUE_ACCESSOR(double, phi_size_max) +XML_CHILDVALUE_ACCESSOR(double, r_size) + +XML_CHILDVALUE_ACCESSOR(double, gap) +XML_CHILDVALUE_ACCESSOR(double, z_length) +XML_CHILDVALUE_ACCESSOR(double, zhalf) +XML_CHILDVALUE_ACCESSOR(double, phi_tilt) +XML_CHILDVALUE_ACCESSOR(int, nphi) +XML_CHILDVALUE_ACCESSOR(double, rc) +XML_CHILDVALUE_ACCESSOR(int, nz) +XML_CHILDVALUE_ACCESSOR(double, zstart) +XML_CHILDVALUE_ACCESSOR(double, start) +XML_CHILDVALUE_ACCESSOR(double, end) +XML_CHILDVALUE_ACCESSOR(double, thickness) +XML_CHILDVALUE_ACCESSOR(int, numsides) +XML_CHILDVALUE_ACCESSOR(int, nsides) +XML_CHILDVALUE_ACCESSOR(int, nsides_inner) +XML_CHILDVALUE_ACCESSOR(int, nsides_outer) +XML_CHILDVALUE_ACCESSOR(int, number) +XML_CHILDVALUE_ACCESSOR(int, repeat) +XML_CHILDVALUE_ACCESSOR(bool, reflect) +XML_CHILDVALUE_ACCESSOR_BOOL(reflect) + +XML_CHILDVALUE_ACCESSOR(int, nmodules) +XML_CHILDVALUE_ACCESSOR(int, nModules) +XML_CHILDVALUE_ACCESSOR(int, RowID) +XML_CHILDVALUE_ACCESSOR(int, nPads) +XML_CHILDVALUE_ACCESSOR(double, moduleHeight) +XML_CHILDVALUE_ACCESSOR(double, moduleWidth) +XML_CHILDVALUE_ACCESSOR(double, modulePosX) +XML_CHILDVALUE_ACCESSOR(double, modulePosY) +XML_CHILDVALUE_ACCESSOR(double, modulePitch) +XML_CHILDVALUE_ACCESSOR(double, rowPitch) +XML_CHILDVALUE_ACCESSOR(double, padPitch) +XML_CHILDVALUE_ACCESSOR(double, rowHeight) +XML_CHILDVALUE_ACCESSOR(double, inner_field) +XML_CHILDVALUE_ACCESSOR(double, outer_field) +XML_CHILDVALUE_ACCESSOR(int, type) + +XML_CHILDVALUE_ACCESSOR(bool, visible) +XML_CHILDVALUE_ACCESSOR(bool, show_daughters) +#if 0 +XML_CHILDVALUE_ACCESSOR(double,) +XML_CHILDVALUE_ACCESSOR(double,) +XML_CHILDVALUE_ACCESSOR(double,) +XML_CHILDVALUE_ACCESSOR(double,) +#endif + + +std::string ChildValue::padType() const { + return XML_CHILDVALUE_childValue(pads,std::string); +} + +std::string ChildValue::nameStr() const { + return XML_CHILDVALUE_childValue(name,std::string); +} + +std::string ChildValue::refStr() const { + return XML_CHILDVALUE_childValue(ref,std::string); +} + +std::string ChildValue::typeStr() const { + return XML_CHILDVALUE_childValue(type,std::string); +} + +/// Access "value" attribute as STL std::string +std::string ChildValue::valueStr() const { + return XML_CHILDVALUE_childValue(value,std::string); +} + +std::string ChildValue::regionStr() const { + XML_CHILDVALUE_childValueDefault(region,std::string,std::string()); +} + +std::string ChildValue::limitsStr() const { + XML_CHILDVALUE_childValueDefault(limits,std::string,std::string()); +} + +std::string ChildValue::visStr() const { + XML_CHILDVALUE_childValueDefault(vis,std::string,std::string()); +} + +std::string ChildValue::readoutStr() const { + XML_CHILDVALUE_childValueDefault(readout,std::string,std::string()); +} + +std::string ChildValue::moduleStr() const { + XML_CHILDVALUE_childValueDefault(module,std::string,std::string()); +} diff --git a/DDCore/include/XML/detail/ChildValue.inl b/DDCore/include/XML/detail/ChildValue.inl new file mode 100644 index 0000000000000000000000000000000000000000..2c674ddbd50578bc12f6617da5490ca8f3d41e51 --- /dev/null +++ b/DDCore/include/XML/detail/ChildValue.inl @@ -0,0 +1,43 @@ +//========================================================================== +// AIDA Detector description implementation for LCD +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== + + +/** + * Note: Do NEVER include this file directly! + * + * Use the specific include files in the XML or JSON directory! + * Also NO header guards! + */ + + +#define XML_CHILDVALUE_childValue(name,type) m_element.child(Unicode_##name).attr<type>(_DD4hep_Unicode_Item(value)) + +#define XML_CHILDVALUE_childValueDefault(name,type,def) \ + Handle_t __h = m_element.child(Unicode_##name,false); \ + if ( __h.ptr() && __h.hasAttr(_DD4hep_Unicode_Item(value)) ) return __h.attr < type > (_DD4hep_Unicode_Item(value)); \ + return def; + +#define XML_CHILDVALUE_ACCESSOR(type,name) \ + type ChildValue::name() const { return XML_CHILDVALUE_childValue(name,type); } + +#define XML_CHILDVALUE_ACCESSOR_DEFAULT(name,type,dressing) \ + type ChildValue::name(type default_val) const { \ + Handle_t __h = m_element.child(Unicode_##name,false); \ + if ( __h.ptr() ) { \ + const XmlChar* val = __h.attr_value_nothrow(_DD4hep_Unicode_Item(value)); \ + return val ? dressing(val) : default_val; } \ + return default_val; } + +#define XML_CHILDVALUE_ACCESSOR_DOUBLE(name) XML_CHILDVALUE_ACCESSOR_DEFAULT(name,double,_toDouble) +#define XML_CHILDVALUE_ACCESSOR_INT(name) XML_CHILDVALUE_ACCESSOR_DEFAULT(name,int,_toInt) +#define XML_CHILDVALUE_ACCESSOR_BOOL(name) XML_CHILDVALUE_ACCESSOR_DEFAULT(name,bool,_toBool) diff --git a/DDCore/src/JSON/Dimension.cpp b/DDCore/src/JSON/Helpers.cpp similarity index 87% rename from DDCore/src/JSON/Dimension.cpp rename to DDCore/src/JSON/Helpers.cpp index 356f1277c376e25be741631c03b1808ee8462273..d6f197354a991e999405b2e24dad1bbecffb2f22 100644 --- a/DDCore/src/JSON/Dimension.cpp +++ b/DDCore/src/JSON/Helpers.cpp @@ -12,6 +12,11 @@ //========================================================================== // Framework include files +#include "JSON/Detector.h" #include "JSON/Dimension.inl" + +using namespace DD4hep::JSON; + // Instantiate here the concrete implementations #include "XML/detail/Dimension.imp" +#include "XML/detail/Detector.imp" diff --git a/DDCore/src/XML/XMLChildValue.cpp b/DDCore/src/XML/XMLChildValue.cpp deleted file mode 100644 index a7f09060875d2a1926982c2a092925d23d00e796..0000000000000000000000000000000000000000 --- a/DDCore/src/XML/XMLChildValue.cpp +++ /dev/null @@ -1,221 +0,0 @@ -//========================================================================== -// AIDA Detector description implementation for LCD -//-------------------------------------------------------------------------- -// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) -// All rights reserved. -// -// For the licensing terms see $DD4hepINSTALL/LICENSE. -// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. -// -// Author : M.Frank -// -//========================================================================== - -// Framework include files -#include "XML/XMLChildValue.h" - -using namespace std; -using namespace DD4hep::XML; - -#define childValue(name,type) m_element.child(Unicode_##name).attr<type>(Unicode_value) - -#define childValueDefault(name,type,def) \ - Handle_t __h = m_element.child(Unicode_##name,false); \ - if ( __h.ptr() && __h.hasAttr(Unicode_value) ) return __h.attr < type > (Unicode_value); \ - return def; - -#define XML_ATTR_ACCESSOR(type,name) type ChildValue::name() const { return childValue(name,type); } -#define XML_ATTR_ACCESSOR_DEFAULT(name,type,dressing) \ - type ChildValue::name(type default_val) const { \ - Handle_t __h = m_element.child(Unicode_##name,false); \ - if ( __h.ptr() ) { \ - const XmlChar* val = __h.attr_value_nothrow(Unicode_value); \ - return val ? dressing(val) : default_val; } \ - return default_val; } - -#define XML_ATTR_ACCESSOR_DOUBLE(name) XML_ATTR_ACCESSOR_DEFAULT(name,double,_toDouble) -#define XML_ATTR_ACCESSOR_INT(name) XML_ATTR_ACCESSOR_DEFAULT(name,int,_toInt) -#define XML_ATTR_ACCESSOR_BOOL(name) XML_ATTR_ACCESSOR_DEFAULT(name,bool,_toBool) - -XML_ATTR_ACCESSOR(int, id) -XML_ATTR_ACCESSOR_INT(id) -XML_ATTR_ACCESSOR(bool, combineHits) - -XML_ATTR_ACCESSOR(double, x) -XML_ATTR_ACCESSOR_DOUBLE(x) -XML_ATTR_ACCESSOR(double, X) -XML_ATTR_ACCESSOR(double, dx) -XML_ATTR_ACCESSOR_DOUBLE(dx) -XML_ATTR_ACCESSOR(double, x0) -XML_ATTR_ACCESSOR(double, x1) -XML_ATTR_ACCESSOR(double, x2) -XML_ATTR_ACCESSOR(double, xmin) -XML_ATTR_ACCESSOR(double, xmax) -XML_ATTR_ACCESSOR(double, x_offset) -XML_ATTR_ACCESSOR(double, dim_x) - -XML_ATTR_ACCESSOR(double, y) -XML_ATTR_ACCESSOR_DOUBLE(y) -XML_ATTR_ACCESSOR(double, Y) -XML_ATTR_ACCESSOR(double, dy) -XML_ATTR_ACCESSOR_DOUBLE(dy) -XML_ATTR_ACCESSOR(double, y0) -XML_ATTR_ACCESSOR(double, y1) -XML_ATTR_ACCESSOR(double, y2) -XML_ATTR_ACCESSOR(double, ymin) -XML_ATTR_ACCESSOR(double, ymax) -XML_ATTR_ACCESSOR(double, y_offset) -XML_ATTR_ACCESSOR(double, dim_y) - -XML_ATTR_ACCESSOR(double, z) -XML_ATTR_ACCESSOR_DOUBLE(z) -XML_ATTR_ACCESSOR(double, Z) -XML_ATTR_ACCESSOR(double, dz) -XML_ATTR_ACCESSOR_DOUBLE(dz) -XML_ATTR_ACCESSOR(double, z0) -XML_ATTR_ACCESSOR(double, z1) -XML_ATTR_ACCESSOR(double, z2) -XML_ATTR_ACCESSOR(double, zmin) -XML_ATTR_ACCESSOR(double, zmax) -XML_ATTR_ACCESSOR(double, z_offset) -XML_ATTR_ACCESSOR(double, dim_z) -XML_ATTR_ACCESSOR(double, outer_z) -XML_ATTR_ACCESSOR(double, inner_z) - -XML_ATTR_ACCESSOR(double, b) -XML_ATTR_ACCESSOR(double, g) -XML_ATTR_ACCESSOR(double, B) -XML_ATTR_ACCESSOR(double, G) -XML_ATTR_ACCESSOR(double, r) -XML_ATTR_ACCESSOR_DOUBLE(r) -XML_ATTR_ACCESSOR(double, R) -XML_ATTR_ACCESSOR(double, dr) -XML_ATTR_ACCESSOR(double, rmin) -XML_ATTR_ACCESSOR(double, rmax) -XML_ATTR_ACCESSOR(double, rmin1) -XML_ATTR_ACCESSOR(double, rmax1) -XML_ATTR_ACCESSOR(double, rmin2) -XML_ATTR_ACCESSOR(double, rmax2) -XML_ATTR_ACCESSOR(double, radius) -XML_ATTR_ACCESSOR(double, outer_r) -XML_ATTR_ACCESSOR(double, distance) -XML_ATTR_ACCESSOR(double, outer_radius) -XML_ATTR_ACCESSOR(double, inner_r) -XML_ATTR_ACCESSOR(double, inner_radius) - -XML_ATTR_ACCESSOR(double, angle) -XML_ATTR_ACCESSOR(double, alpha) -XML_ATTR_ACCESSOR(double, beta) -XML_ATTR_ACCESSOR(double, gamma) -XML_ATTR_ACCESSOR(double, delta) -XML_ATTR_ACCESSOR(double, epsilon) -XML_ATTR_ACCESSOR(double, theta) -XML_ATTR_ACCESSOR(int, thetaBins) -XML_ATTR_ACCESSOR(double, psi) -XML_ATTR_ACCESSOR(double, phi) -XML_ATTR_ACCESSOR(int, phiBins) -XML_ATTR_ACCESSOR(double, phi0) -XML_ATTR_ACCESSOR(double, phi0_offset) -XML_ATTR_ACCESSOR_DOUBLE(phi0) -XML_ATTR_ACCESSOR(double, phi1) -XML_ATTR_ACCESSOR_DOUBLE(phi1) -XML_ATTR_ACCESSOR(double, deltaphi) - -XML_ATTR_ACCESSOR(double, length) -XML_ATTR_ACCESSOR(double, width) -XML_ATTR_ACCESSOR(double, height) -XML_ATTR_ACCESSOR(double, depth) -XML_ATTR_ACCESSOR(double, offset) -XML_ATTR_ACCESSOR_DOUBLE(offset) -XML_ATTR_ACCESSOR(double, crossing_angle) -XML_ATTR_ACCESSOR(double, incoming_r) -XML_ATTR_ACCESSOR(double, outgoing_r) -XML_ATTR_ACCESSOR(double, phi_size_max) -XML_ATTR_ACCESSOR(double, r_size) - -XML_ATTR_ACCESSOR(double, gap) -XML_ATTR_ACCESSOR(double, z_length) -XML_ATTR_ACCESSOR(double, zhalf) -XML_ATTR_ACCESSOR(double, phi_tilt) -XML_ATTR_ACCESSOR(int, nphi) -XML_ATTR_ACCESSOR(double, rc) -XML_ATTR_ACCESSOR(int, nz) -XML_ATTR_ACCESSOR(double, zstart) -XML_ATTR_ACCESSOR(double, start) -XML_ATTR_ACCESSOR(double, end) -XML_ATTR_ACCESSOR(double, thickness) -XML_ATTR_ACCESSOR(int, numsides) -XML_ATTR_ACCESSOR(int, nsides) -XML_ATTR_ACCESSOR(int, nsides_inner) -XML_ATTR_ACCESSOR(int, nsides_outer) -XML_ATTR_ACCESSOR(int, number) -XML_ATTR_ACCESSOR(int, repeat) -XML_ATTR_ACCESSOR(bool, reflect) -XML_ATTR_ACCESSOR_BOOL(reflect) - -XML_ATTR_ACCESSOR(int, nmodules) -XML_ATTR_ACCESSOR(int, nModules) -XML_ATTR_ACCESSOR(int, RowID) -XML_ATTR_ACCESSOR(int, nPads) -XML_ATTR_ACCESSOR(double, moduleHeight) -XML_ATTR_ACCESSOR(double, moduleWidth) -XML_ATTR_ACCESSOR(double, modulePosX) -XML_ATTR_ACCESSOR(double, modulePosY) -XML_ATTR_ACCESSOR(double, modulePitch) -XML_ATTR_ACCESSOR(double, rowPitch) -XML_ATTR_ACCESSOR(double, padPitch) -XML_ATTR_ACCESSOR(double, rowHeight) -XML_ATTR_ACCESSOR(double, inner_field) -XML_ATTR_ACCESSOR(double, outer_field) -XML_ATTR_ACCESSOR(int, type) - -XML_ATTR_ACCESSOR(bool, visible) -XML_ATTR_ACCESSOR(bool, show_daughters) -#if 0 -XML_ATTR_ACCESSOR(double,) -XML_ATTR_ACCESSOR(double,) -XML_ATTR_ACCESSOR(double,) -XML_ATTR_ACCESSOR(double,) -#endif - - -string ChildValue::padType() const { - return childValue(pads,string); -} - -string ChildValue::nameStr() const { - return childValue(name,string); -} - -string ChildValue::refStr() const { - return childValue(ref,string); -} - -string ChildValue::typeStr() const { - return childValue(type,string); -} - -/// Access "value" attribute as STL string -std::string ChildValue::valueStr() const { - return childValue(value,string); -} - -string ChildValue::regionStr() const { - childValueDefault(region,string,string()); -} - -string ChildValue::limitsStr() const { - childValueDefault(limits,string,string()); -} - -string ChildValue::visStr() const { - childValueDefault(vis,string,string()); -} - -string ChildValue::readoutStr() const { - childValueDefault(readout,string,string()); -} - -string ChildValue::moduleStr() const { - childValueDefault(module,string,string()); -} diff --git a/DDCore/src/XML/XMLDimension.cpp b/DDCore/src/XML/XMLDimension.cpp deleted file mode 100644 index c02dfd9f80b2ec2d8f861f2f3b19023148b3e2d6..0000000000000000000000000000000000000000 --- a/DDCore/src/XML/XMLDimension.cpp +++ /dev/null @@ -1,18 +0,0 @@ -//========================================================================== -// AIDA Detector description implementation for LCD -//-------------------------------------------------------------------------- -// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) -// All rights reserved. -// -// For the licensing terms see $DD4hepINSTALL/LICENSE. -// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. -// -// Author : M.Frank -// -//========================================================================== - -// Framework include files -#include "XML/XMLDimension.inl" - -// Instantiate here the concrete implementations -#include "XML/detail/Dimension.imp" diff --git a/DDCore/src/XML/XMLDetector.cpp b/DDCore/src/XML/XMLHelpers.cpp similarity index 82% rename from DDCore/src/XML/XMLDetector.cpp rename to DDCore/src/XML/XMLHelpers.cpp index 339b624ae93338bbef0367f95cd3556ba5d0e13f..387911b463e50da5daf553e2b8f3ccfc092be782 100644 --- a/DDCore/src/XML/XMLDetector.cpp +++ b/DDCore/src/XML/XMLHelpers.cpp @@ -13,6 +13,10 @@ // Framework include files #include "XML/XMLDetector.h" +#include "XML/XMLDimension.inl" +#include "XML/XMLChildValue.inl" using namespace DD4hep::XML; #include "XML/detail/Detector.imp" +#include "XML/detail/Dimension.imp" +#include "XML/detail/ChildValue.imp"