diff --git a/examples/SimpleDetector/compact/Simple_CLIC.xml b/examples/SimpleDetector/compact/Simple_CLIC.xml index eeeff58ccdff36e5d534f43788a1bd81772d4fa0..8202df80cdbc16c43c0c11a824eabafd898bd0ec 100644 --- a/examples/SimpleDetector/compact/Simple_CLIC.xml +++ b/examples/SimpleDetector/compact/Simple_CLIC.xml @@ -58,55 +58,60 @@ <detectors> <comment>Trackers</comment> - <detector name="VXD" type="ZPlanarTracker" vis="VXDVis" id="1" limits="Tracker_limits" readout="VXDCollection" insideTrackingVolume="true"> + <detector name="AirTube" type="AirTube" vis="VXDVis" id="42" insideTrackingVolume="true"> + <dimensions rmin="10.*mm" rmax="11.*mm" zhalf="6.250000000e+01*mm"/> + </detector> + <detector name="VXD" type="ZPlanarTracker" vis="VXDVis" id="1" limits="Tracker_limits" readout="VXDCollection" insideTrackingVolume="true"> <layer nLadders="10" phi0="-1.570796327e+00*rad" id="0"> - <ladder distance="1.600000000e+01*mm" thickness="1.000000000e+00*mm" width="1.150000000e+01*mm" length="6.250000000e+01*mm" offset="-3.406041308e+00*mm" material="CarbonFiber" /> + <!-- <ladder distance="1.600000000e+01*mm" thickness="1.000000000e+00*mm" width="1.050000000e+01*mm" length="6.250000000e+01*mm" offset="-3.406041308e+00*mm" material="Lead" /> --> + <ladder distance="1.600000000e+01*mm" thickness="1.000000000e+00*mm" width="1.050000000e+01*mm" length="6.250000000e+01*mm" offset="-3.406041308e+00*mm" material="CarbonFiber" /> <sensitive distance="1.595000000e+01*mm" thickness="5.000000000e-02*mm" width="1.100000000e+01*mm" length="6.250000000e+01*mm" offset="-3.156041308e+00*mm" material="G4_Si"/> </layer> <layer nLadders="10" phi0="-1.570796327e+00*rad" id="1"> - <ladder distance="1.700000000e+01*mm" thickness="1.000000000e+00*mm" width="1.150000000e+01*mm" length="6.250000000e+01*mm" offset="-3.406041308e+00*mm" material="CarbonFiber" /> + <!-- <ladder distance="1.700000000e+01*mm" thickness="1.000000000e+00*mm" width="1.0500000000e+01*mm" length="6.250000000e+01*mm" offset="-3.406041308e+00*mm" material="Lead" /> --> + <ladder distance="1.700000000e+01*mm" thickness="1.000000000e+00*mm" width="1.0500000000e+01*mm" length="6.250000000e+01*mm" offset="-3.406041308e+00*mm" material="CarbonFiber" /> <sensitive distance="1.800000000e+01*mm" thickness="5.000000000e-02*mm" width="1.100000000e+01*mm" length="6.250000000e+01*mm" offset="-3.156041308e+00*mm" material="G4_Si"/> </layer> <layer nLadders="11" phi0="-1.570796327e+00*rad" id="2"> - <ladder distance="3.700000000e+01*mm" thickness="1.000000000e+00*mm" width="2.250000000e+01*mm" length="1.250000000e+02*mm" offset="-3.502631742e+00*mm" material="CarbonFiber" /> + <ladder distance="3.700000000e+01*mm" thickness="1.000000000e+00*mm" width="2.150000000e+01*mm" length="1.250000000e+02*mm" offset="-3.502631742e+00*mm" material="CarbonFiber" /> <sensitive distance="3.695000000e+01*mm" thickness="5.000000000e-02*mm" width="2.200000000e+01*mm" length="1.250000000e+02*mm" offset="-3.252631742e+00*mm" material="G4_Si"/> </layer> <layer nLadders="11" phi0="-1.570796327e+00*rad" id="3"> - <ladder distance="3.800000000e+01*mm" thickness="1.000000000e+00*mm" width="2.250000000e+01*mm" length="1.250000000e+02*mm" offset="-3.502631742e+00*mm" material="CarbonFiber" /> + <ladder distance="3.800000000e+01*mm" thickness="1.000000000e+00*mm" width="2.150000000e+01*mm" length="1.250000000e+02*mm" offset="-3.502631742e+00*mm" material="CarbonFiber" /> <sensitive distance="3.900000000e+01*mm" thickness="5.000000000e-02*mm" width="2.200000000e+01*mm" length="1.250000000e+02*mm" offset="-3.252631742e+00*mm" material="G4_Si"/> </layer> <layer nLadders="17" phi0="-1.570796327e+00*rad" id="4"> - <ladder distance="5.800000000e+01*mm" thickness="1.000000000e+00*mm" width="2.250000000e+01*mm" length="1.250000000e+02*mm" offset="-5.128151357e+00*mm" material="CarbonFiber" /> + <ladder distance="5.800000000e+01*mm" thickness="1.000000000e+00*mm" width="2.150000000e+01*mm" length="1.250000000e+02*mm" offset="-5.128151357e+00*mm" material="CarbonFiber" /> <sensitive distance="5.795000000e+01*mm" thickness="5.000000000e-02*mm" width="2.200000000e+01*mm" length="1.250000000e+02*mm" offset="-4.878151357e+00*mm" material="G4_Si"/> </layer> <layer nLadders="17" phi0="-1.570796327e+00*rad" id="5"> - <ladder distance="5.900000000e+01*mm" thickness="1.000000000e+00*mm" width="2.250000000e+01*mm" length="1.250000000e+02*mm" offset="-5.128151357e+00*mm" material="CarbonFiber" /> + <ladder distance="5.900000000e+01*mm" thickness="1.000000000e+00*mm" width="2.150000000e+01*mm" length="1.250000000e+02*mm" offset="-5.128151357e+00*mm" material="CarbonFiber" /> <sensitive distance="6.000000000e+01*mm" thickness="5.000000000e-02*mm" width="2.200000000e+01*mm" length="1.250000000e+02*mm" offset="-4.878151357e+00*mm" material="G4_Si"/> </layer> </detector> <detector name="SIT" type="ZPlanarTracker" vis="SITVis" id="2" limits="Tracker_limits" readout="SITCollection" insideTrackingVolume="true"> - <layer nLadders="14" phi0="0.0" id="0"> - <ladder distance="228.975*mm" thickness="1.0*mm" width="104.524099097*mm" length="430.0*mm" offset="0.0*mm" material="CarbonFiber" /> - <sensitive distance="229.975*mm" thickness="0.05*mm" width="104.980586046*mm" length="430.0*mm" offset="0.0*mm" material="G4_Si"/> - </layer> - <layer nLadders="33" phi0="0.0" id="1"> - <ladder distance="533.975*mm" thickness="1.0*mm" width="101.976860567*mm" length="742.0*mm" offset="0.0*mm" material="CarbonFiber" /> - <sensitive distance="534.975*mm" thickness="0.05*mm" width="102.167837412*mm" length="742.0*mm" offset="0.0*mm" material="G4_Si"/> - </layer> - <layer nLadders="52" phi0="0.0" id="2"> - <ladder distance="838.975*mm" thickness="1.0*mm" width="101.497276026*mm" length="1053.0*mm" offset="0.0*mm" material="CarbonFiber" /> - <sensitive distance="839.975*mm" thickness="0.05*mm" width="101.618253738*mm" length="1053.0*mm" offset="0.0*mm" material="G4_Si"/> - </layer> - <layer nLadders="71" phi0="0.0" id="3"> - <ladder distance="1143.975*mm" thickness="1.0*mm" width="101.302838172*mm" length="1365.0*mm" offset="0.0*mm" material="CarbonFiber" /> - <sensitive distance="1144.975*mm" thickness="0.05*mm" width="101.391391539*mm" length="1365.0*mm" offset="0.0*mm" material="G4_Si"/> - </layer> - <layer nLadders="91" phi0="0.0" id="4"> - <ladder distance="1448.975*mm" thickness="1.0*mm" width="100.085681927*mm" length="1676.0*mm" offset="0.0*mm" material="CarbonFiber" /> - <sensitive distance="1449.975*mm" thickness="0.05*mm" width="100.154755363*mm" length="1676.0*mm" offset="0.0*mm" material="G4_Si"/> - </layer> + <layer nLadders="14" phi0="0.0" id="0"> + <ladder distance="228.975*mm" thickness="1.0*mm" width="104.524099097*mm" length="430.0*mm" offset="0.0*mm" material="CarbonFiber" /> + <sensitive distance="229.975*mm" thickness="0.05*mm" width="104.980586046*mm" length="430.0*mm" offset="0.0*mm" material="G4_Si"/> + </layer> + <layer nLadders="33" phi0="0.0" id="1"> + <ladder distance="533.975*mm" thickness="1.0*mm" width="101.976860567*mm" length="742.0*mm" offset="0.0*mm" material="CarbonFiber" /> + <sensitive distance="534.975*mm" thickness="0.05*mm" width="102.167837412*mm" length="742.0*mm" offset="0.0*mm" material="G4_Si"/> + </layer> + <layer nLadders="52" phi0="0.0" id="2"> + <ladder distance="838.975*mm" thickness="1.0*mm" width="101.497276026*mm" length="1053.0*mm" offset="0.0*mm" material="CarbonFiber" /> + <sensitive distance="839.975*mm" thickness="0.05*mm" width="101.618253738*mm" length="1053.0*mm" offset="0.0*mm" material="G4_Si"/> + </layer> + <layer nLadders="71" phi0="0.0" id="3"> + <ladder distance="1143.975*mm" thickness="1.0*mm" width="101.302838172*mm" length="1365.0*mm" offset="0.0*mm" material="CarbonFiber" /> + <sensitive distance="1144.975*mm" thickness="0.05*mm" width="101.391391539*mm" length="1365.0*mm" offset="0.0*mm" material="G4_Si"/> + </layer> + <layer nLadders="91" phi0="0.0" id="4"> + <ladder distance="1448.975*mm" thickness="1.0*mm" width="100.085681927*mm" length="1676.0*mm" offset="0.0*mm" material="CarbonFiber" /> + <sensitive distance="1449.975*mm" thickness="0.05*mm" width="100.154755363*mm" length="1676.0*mm" offset="0.0*mm" material="G4_Si"/> + </layer> </detector> </detectors> diff --git a/examples/SimpleDetector/src/AirTube_geo.cpp b/examples/SimpleDetector/src/AirTube_geo.cpp new file mode 100644 index 0000000000000000000000000000000000000000..980f9053305495d7d186538eb88d307db49cd610 --- /dev/null +++ b/examples/SimpleDetector/src/AirTube_geo.cpp @@ -0,0 +1,66 @@ +// $Id: $ +//==================================================================== +// // Simple tube filled with air +// // used for tracking purposes ... +// +//-------------------------------------------------------------------- +// +// Author : F.Gaede +// +//==================================================================== +#include "DD4hep/DetFactoryHelper.h" + +#include "DDRec/Surface.h" +#include "DDRec/DetectorData.h" + + +using namespace DD4hep; +using namespace DD4hep::Geometry; +using namespace DD4hep::DDRec ; +using namespace DDSurfaces ; + +static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens) { + + xml_det_t x_det = e; + std::string name = x_det.nameStr(); + + DetElement airTube( name, x_det.id() ) ; + + PlacedVolume pv; + + // ----- read xml ---------------------- + + xml_dim_t dim = x_det.dimensions(); + + double inner_r = dim.rmin() ; + double outer_r = dim.rmax() ; + double z_half = dim.zhalf() ; + double tube_thick = outer_r - inner_r ; + + //-------------------------------------- + + Tube tubeSolid (inner_r, outer_r, z_half ) ; + + Volume tube_vol( name+"_inner_cylinder_air", tubeSolid , lcdd.material("Air") ) ; + + Vector3D ocyl( inner_r + 0.5*tube_thick , 0. , 0. ) ; + + VolCylinder cylSurf( tube_vol , SurfaceType( SurfaceType::Helper ) , 0.5*tube_thick , 0.5*tube_thick , ocyl ) ; + + volSurfaceList( airTube )->push_back( cylSurf ) ; + + + //-------------------------------------- + + Volume mother = lcdd.pickMotherVolume( airTube ) ; + + pv = mother.placeVolume( tube_vol ) ; + + pv.addPhysVolID( "system", x_det.id() ) ; + + airTube.setPlacement( pv ); + + return airTube; +} + +DECLARE_DETELEMENT( AirTube,create_element); diff --git a/examples/SimpleDetector/src/ZPlanarTracker_geo.cpp b/examples/SimpleDetector/src/ZPlanarTracker_geo.cpp index 0fe1bea9535d20e3b615aaecdc7f7358d210e0fe..84f5e640f4a4e793b0aa575e2b95b34bf7946767 100644 --- a/examples/SimpleDetector/src/ZPlanarTracker_geo.cpp +++ b/examples/SimpleDetector/src/ZPlanarTracker_geo.cpp @@ -35,6 +35,10 @@ static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens) { DDRec::ZPlanarData* zPlanarData = new DDRec::ZPlanarData ; + + double minRadius = 1e99 ; + double minZhalf = 1e99 ; + //========= loop over layer elements in xml ====================================== for(xml_coll_t c(e, _U(layer) ); c; ++c) { @@ -88,6 +92,11 @@ static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens) { double phi0 = x_layer.phi0() ; + if( sens_distance < minRadius ) minRadius = sens_distance ; + if( supp_distance < minRadius ) minRadius = supp_distance ; + if( sens_zhalf < minZhalf ) minZhalf = sens_zhalf ; + if( supp_zhalf < minZhalf ) minZhalf = supp_zhalf ; + //----------------------------------- // store the data in an extension to be used for reconstruction DDRec::ZPlanarData::LayerLayout thisLayer ; @@ -190,6 +199,7 @@ static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens) { } + // tracker.setVisAttributes(lcdd, x_det.visStr(),laddervol); @@ -198,6 +208,28 @@ static Ref_t create_element(LCDD& lcdd, xml_h e, SensitiveDetector sens) { } +#if 0 //-------- add an inscribing cylinder of air for tracking purposes ----------------- + // this screw up the geometry and the material scan does not work anymore !!!!!????? + + double tube_thick = 1.0 * dd4hep::mm ; + double inner_r = minRadius - 1.1 * tube_thick ; + double outer_r = inner_r + tube_thick ; + double z_half = minZhalf ; + + Tube tubeSolid (inner_r, outer_r, z_half ) ; + Volume tube_vol( name+"_inner_cylinder_air", tubeSolid , lcdd.material("Air") ) ; + + assembly.placeVolume( tube_vol , Transform3D() ) ; + + Vector3D ocyl( inner_r + 0.5*tube_thick , 0. , 0. ) ; + + VolCylinder cylSurf( tube_vol , SurfaceType( SurfaceType::Helper ) , 0.5*tube_thick , 0.5*tube_thick , ocyl ) ; + + volSurfaceList( tracker )->push_back( cylSurf ) ; + +#endif //---------------------------------------------------------------------------------- + + tracker.addExtension< DDRec::ZPlanarData >( zPlanarData ) ;