13 #include "DD4hep/Detector.h"
14 #include "DD4hep/Factories.h"
15 #include "DD4hep/DD4hepUnits.h"
23 #include "gearimpl/TPCParametersImpl.h"
24 #include "gearimpl/FixedPadSizeDiskLayout.h"
25 #include "gearimpl/ZPlanarParametersImpl.h"
26 #include "gearimpl/FTDParametersImpl.h"
27 #include "gearimpl/CalorimeterParametersImpl.h"
34 using namespace detail ;
55 DetElement vxdDE = description.detector(
"VertexBarrel") ;
60 int vxdType = gear::ZPlanarParameters::CMOS ;
61 gear::ZPlanarParametersImpl* gearVXD =
new gear::ZPlanarParametersImpl( vxdType, vxd->rInnerShell/dd4hep::mm, vxd->rOuterShell/dd4hep::mm,
62 vxd->zHalfShell/dd4hep::mm , vxd->gapShell/dd4hep::mm , 0. ) ;
65 for(
unsigned i=0,n=vxd->layers.size() ; i<n; ++i){
68 const rec::ZPlanarData::LayerLayout& l = vxd->layers[i] ;
71 gearVXD->addLayer( l.ladderNumber, l.phi0,
72 l.distanceSupport/dd4hep::mm, l.offsetSupport/dd4hep::mm, l.thicknessSupport/dd4hep::mm, l.zHalfSupport/dd4hep::mm, l.widthSupport/dd4hep::mm, 0. ,
73 l.distanceSensitive/dd4hep::mm, l.offsetSensitive/dd4hep::mm, l.thicknessSensitive/dd4hep::mm, l.zHalfSensitive/dd4hep::mm, l.widthSensitive/dd4hep::mm, 0. ) ;
82 handle->
addMaterial(
"VXDSupportMaterial", 2.075865162e+01, 1.039383117e+01, 2.765900000e+02, 1.014262421e+03, 3.341388059e+03) ;
117 DetElement sitDE = description.detector(
"InnerTrackerBarrel") ;
122 int sitType = gear::ZPlanarParameters::CCD ;
124 gear::ZPlanarParametersImpl* gearSIT =
new gear::ZPlanarParametersImpl( sitType, sit->rInnerShell/dd4hep::mm, sit->rOuterShell/dd4hep::mm,
125 sit->zHalfShell/dd4hep::mm , sit->gapShell/dd4hep::mm , 0. ) ;
129 for(
unsigned i=0,n=sit->layers.size() ; i<n; ++i){
131 const rec::ZPlanarData::LayerLayout& l = sit->layers[i] ;
134 gearSIT->addLayer( l.ladderNumber, l.phi0,
135 l.distanceSupport/dd4hep::mm, l.offsetSupport/dd4hep::mm, l. thicknessSupport/dd4hep::mm, l.zHalfSupport/dd4hep::mm, l.widthSupport/dd4hep::mm, 0. ,
136 l.distanceSensitive/dd4hep::mm, l.offsetSensitive/dd4hep::mm, l. thicknessSensitive/dd4hep::mm, l.zHalfSensitive/dd4hep::mm, l.widthSensitive/dd4hep::mm, 0. ) ;
139 n_sensors_per_ladder.
push_back( l.sensorsPerLadder);
142 gearSIT->setDoubleVal(
"strip_width_mm" , sit->widthStrip / dd4hep::mm ) ;
143 gearSIT->setDoubleVal(
"strip_length_mm" , sit->lengthStrip/ dd4hep::mm ) ;
144 gearSIT->setDoubleVal(
"strip_pitch_mm" , sit->pitchStrip / dd4hep::mm ) ;
145 gearSIT->setDoubleVal(
"strip_angle_deg" , sit->angleStrip / dd4hep::deg ) ;
148 gearSIT->setIntVals(
"n_sensors_per_ladder",n_sensors_per_ladder);
160 DetElement setDE = description.detector(
"OuterTrackerBarrel") ;
165 int setType = gear::ZPlanarParameters::CCD ;
166 gear::ZPlanarParametersImpl* gearSET =
new gear::ZPlanarParametersImpl( setType, set->rInnerShell/dd4hep::mm, set->rOuterShell/dd4hep::mm,
167 set->zHalfShell/dd4hep::mm , set->gapShell/dd4hep::mm , 0. ) ;
171 for(
unsigned i=0,n=set->layers.size() ; i<n; ++i){
173 const rec::ZPlanarData::LayerLayout& l = set->layers[i] ;
176 gearSET->addLayer( l.ladderNumber, l.phi0,
177 l.distanceSupport/dd4hep::mm, l.offsetSupport/dd4hep::mm, l. thicknessSupport/dd4hep::mm, l.zHalfSupport/dd4hep::mm, l.widthSupport/dd4hep::mm, 0. ,
178 l.distanceSensitive/dd4hep::mm, l.offsetSensitive/dd4hep::mm, l. thicknessSensitive/dd4hep::mm, l.zHalfSensitive/dd4hep::mm, l.widthSensitive/dd4hep::mm, 0. ) ;
181 n_sensors_per_ladder.
push_back( l.sensorsPerLadder);
184 gearSET->setDoubleVal(
"strip_width_mm" , set->widthStrip / dd4hep::mm ) ;
185 gearSET->setDoubleVal(
"strip_length_mm" , set->lengthStrip/ dd4hep::mm ) ;
186 gearSET->setDoubleVal(
"strip_pitch_mm" , set->pitchStrip / dd4hep::mm ) ;
187 gearSET->setDoubleVal(
"strip_angle_deg" , set->angleStrip / dd4hep::deg ) ;
190 gearSET->setIntVals(
"n_sensors_per_ladder",n_sensors_per_ladder);
202 DetElement iteDE = description.detector(
"InnerTrackerEndcap") ;
206 gear::GearParametersImpl* gearFTD =
new gear::GearParametersImpl();
214 for(
unsigned i=0,n=iteData->layers.size() ; i<n; ++i){
216 const rec::ZDiskPetalsData::LayerLayout& l = iteData->layers[i] ;
218 thicknesses.
push_back(l.thicknessSupport/ dd4hep::mm);
219 innerRadii.
push_back( l.distanceSensitive/ dd4hep::mm);
220 outerRadii.
push_back( (l.distanceSensitive + l.lengthSensitive)/ dd4hep::mm);
221 zPositions.
push_back( l.zPosition/ dd4hep::mm);
229 DetElement oteDE = description.detector(
"OuterTrackerEndcap") ;
233 for(
unsigned i=0,n=oteData->layers.size() ; i<n; ++i){
235 const rec::ZDiskPetalsData::LayerLayout& l = oteData->layers[i] ;
237 thicknesses.
push_back(l.thicknessSupport/ dd4hep::mm);
238 innerRadii.
push_back( l.distanceSensitive/ dd4hep::mm);
239 outerRadii.
push_back( (l.distanceSensitive + l.lengthSensitive)/ dd4hep::mm);
240 zPositions.
push_back( l.zPosition/ dd4hep::mm);
247 gearFTD->setDoubleVals(
"FTDDiskSupportThickness" , thicknesses) ;
248 gearFTD->setDoubleVals(
"FTDInnerRadius" , innerRadii) ;
249 gearFTD->setDoubleVals(
"FTDOuterRadius" , outerRadii ) ;
250 gearFTD->setDoubleVals(
"FTDZCoordinate" ,zPositions) ;
264 DetElement coilDE = description.detector(
"Solenoid") ;
266 gear::GearParametersImpl* gearCOIL =
new gear::GearParametersImpl();
268 Tube coilTube = Tube( coilDE.volume().solid() ) ;
270 gearCOIL->setDoubleVal(
"Coil_cryostat_inner_radius" , coilTube->GetRmin()/ dd4hep::mm ) ;
271 gearCOIL->setDoubleVal(
"Coil_cryostat_outer_radius" , coilTube->GetRmax()/ dd4hep::mm ) ;
272 gearCOIL->setDoubleVal(
"Coil_cryostat_half_z" , coilTube->GetDZ()/ dd4hep::mm ) ;
283 DetElement tubeDE = description.detector(
"Tube") ;
287 gear::GearParametersImpl* gearTUBE =
new gear::GearParametersImpl();
289 tube->isSymmetricInZ = true ;
291 unsigned n = tube->sections.size() ;
297 for(
unsigned i=0 ; i<n ; ++i){
299 const ConicalSupportData::Section& s = tube->sections[i] ;
301 rInner[i] = s.rInner/ dd4hep::mm ;
302 rOuter[i] = s.rOuter/ dd4hep::mm ;
303 zStart[i] = s.zPos / dd4hep::mm ;
308 gearTUBE->setDoubleVals(
"RInner" , rInner ) ;
309 gearTUBE->setDoubleVals(
"ROuter" , rOuter ) ;
310 gearTUBE->setDoubleVals(
"Z" , zStart ) ;
326 caloMap[
"HCalBarrel"] =
"HcalBarrelParameters" ;
327 caloMap[
"ECalBarrel"] =
"EcalBarrelParameters" ;
328 caloMap[
"ECalEndcap"] =
"EcalEndcapParameters" ;
329 caloMap[
"ECalPlug"] =
"EcalPlugParameters" ;
330 caloMap[
"YokeBarrel"] =
"YokeBarrelParameters" ;
331 caloMap[
"YokeEndcap"] =
"YokeEndcapParameters" ;
332 caloMap[
"YokePlug"] =
"YokePlugParameters" ;
333 caloMap[
"HCalBarrel"] =
"HcalBarrelParameters" ;
334 caloMap[
"HCalEndcap"] =
"HcalEndcapParameters" ;
335 caloMap[
"HCalRing"] =
"HcalRingParameters" ;
336 caloMap[
"LumiCal"] =
"LcalParameters" ;
338 caloMap[
"BeamCal"] =
"BeamCalParameters" ;
346 DetElement caloDE = description.detector( it->first ) ;
350 gear::CalorimeterParametersImpl* gearCalo =
351 ( calo->layoutType == LayeredCalorimeterData::BarrelLayout ?
352 new gear::CalorimeterParametersImpl( calo->extent[0]/dd4hep::mm, calo->extent[3]/dd4hep::mm, calo->inner_symmetry, calo->inner_phi0 ) :
354 new gear::CalorimeterParametersImpl( calo->extent[0]/dd4hep::mm, calo->extent[1]/dd4hep::mm, calo->extent[2]/dd4hep::mm, calo->outer_symmetry, calo->outer_phi0 ) ) ;
357 for(
unsigned i=0, nL = calo->layers.size() ; i <nL ; ++i ){
359 LayeredCalorimeterData::Layer& l = calo->layers[i] ;
367 gearCalo->layerLayout().positionLayer( l.distance/dd4hep::mm, (l.inner_thickness+l.sensitive_thickness/2.)/dd4hep::mm ,
368 l.cellSize0/dd4hep::mm, l.cellSize1/dd4hep::mm, (l.inner_thickness-l.sensitive_thickness/2.)/dd4hep::mm ) ;
369 }
else if ( i == nL -1 ) {
372 gearCalo->layerLayout().addLayer((l.inner_thickness+l.outer_thickness+calo->layers[i-1].outer_thickness-calo->layers[i-1].sensitive_thickness/2.)/dd4hep::mm ,
373 l.cellSize0/dd4hep::mm, l.cellSize1/dd4hep::mm, (l.inner_thickness+l.outer_thickness-l.sensitive_thickness+calo->layers[i-1].outer_thickness-calo->layers[i-1].sensitive_thickness/2.)/dd4hep::mm) ;
376 gearCalo->layerLayout().addLayer((l.inner_thickness+l.sensitive_thickness/2.+calo->layers[i-1].outer_thickness-calo->layers[i-1].sensitive_thickness/2.)/dd4hep::mm ,
377 l.cellSize0/dd4hep::mm, l.cellSize1/dd4hep::mm, (l.inner_thickness-l.sensitive_thickness/2.+calo->layers[i-1].outer_thickness-calo->layers[i-1].sensitive_thickness/2.)/dd4hep::mm) ;
382 if( it->first ==
"HCalBarrel" ){
384 gearCalo->setIntVal(
"Hcal_outer_polygon_order" , calo->outer_symmetry ) ;
385 gearCalo->setDoubleVal(
"Hcal_outer_polygon_phi0" , calo->outer_phi0 ) ;
void addMaterial(const std::string nam, double A, double Z, double density, double radLen, double intLen)
add a SimpleMaterial object
Simple wrapper class for objects of type GearParametersImpl that can be added to DetElements with the...
static long createGearForCLIC(Detector &description, int, char **)
Plugin that creates Gear objects for DetElements and attaches them as extensions. ...
Wrapper class for adding structs or pods as extensions to DetElements.