diff --git a/DDCore/src/plugins/ShapePlugins.cpp b/DDCore/src/plugins/ShapePlugins.cpp index a620ad18752e5d563ae345eab7b0dfa137a502fd..871e70af96eddec9a9f233ee182257a58a5ff9ef 100644 --- a/DDCore/src/plugins/ShapePlugins.cpp +++ b/DDCore/src/plugins/ShapePlugins.cpp @@ -102,8 +102,9 @@ static Handle<TObject> create_Tube(Detector&, xml_h element) { Solid solid; xml_dim_t e(element); xml_attr_t aphi = element.attr_nothrow(_U(phi1)); - if ( aphi ) { - double phi1 = e.phi1(); + xml_attr_t bphi = element.attr_nothrow(_U(phi2)); + if ( aphi || bphi ) { + double phi1 = e.phi1(0.0); double phi2 = e.phi2(2*M_PI); solid = Tube(e.rmin(0.0),e.rmax(),e.dz(0.0),phi1, phi2); } @@ -231,9 +232,23 @@ DECLARE_XML_SHAPE(Trapezoid__shape_constructor,create_Trd2) DECLARE_XML_SHAPE(Trd2__shape_constructor,create_Trd2) static Handle<TObject> create_Torus(Detector&, xml_h element) { - xml_dim_t e(element); - double startphi = e.hasAttr(_U(phi)) ? e.phi() : e.startphi(M_PI); - Solid solid = Torus(e.r(), e.rmin(), e.rmax(), phi, e.deltaphi(2.*M_PI)); + Solid solid; + xml_dim_t e(element); + xml_attr_t aphi = element.attr_nothrow(_U(phi1)); + xml_attr_t bphi = element.attr_nothrow(_U(phi2)); + if ( aphi || bphi ) { + double phi1 = e.phi1(0.0); + double phi2 = e.phi2(2*M_PI); + /// Old naming: angles from [phi1,phi2] + solid = Torus(e.r(), e.rmin(0.0), e.rmax(), phi1, phi2); + } + else { + double start_phi = e.startphi(0.0); + double delta_phi = e.deltaphi(2*M_PI); + while ( start_phi > 2.0*M_PI ) start_phi -= 2.0*M_PI; + /// New naming: angles from [startphi,startphi+deltaphi] + solid = Torus(e.r(), e.rmin(0.0), e.rmax(), start_phi, start_phi+delta_phi); + } if ( e.hasAttr(_U(name)) ) solid->SetName(e.attr<string>(_U(name)).c_str()); return solid; }