Skip to content
Snippets Groups Projects
Commit 03b0cf75 authored by Whitney Armstrong's avatar Whitney Armstrong
Browse files

modified: compact/definitions.xml

	modified:   compact/solenoid.xml
	new file:   src/ref_DiskTracker_geo.cpp
parent a1498f68
No related branches found
No related tags found
2 merge requests!38Removed redundant code from ci_GEM,!28Draft: Resolve "Implement ci_HCAL"
Pipeline #8125 failed
...@@ -415,8 +415,8 @@ ...@@ -415,8 +415,8 @@
<constant name="EcalEndcapN_zmin" value="CentralTracking_length/2.0 + BackwardPIDLength"/> <constant name="EcalEndcapN_zmin" value="CentralTracking_length/2.0 + BackwardPIDLength"/>
<constant name="EcalBarrel_offset" value="(EcalEndcapP_zmin-EcalEndcapN_zmin)/2.0"/> <constant name="EcalBarrel_offset" value="(EcalEndcapP_zmin-EcalEndcapN_zmin)/2.0"/>
<constant name="EndcapP_TotalCalThickness" value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - (EcalEndcapP_zmin + 10.0 * mm)"/> <constant name="EndcapP_TotalCalThickness" value="(SolenoidYokeEndcapP_zmin - 10.0 * mm) - (EcalEndcapP_zmin + 10.0 * mm)"/>
<constant name="EndcapN_TotalCalThickness" value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - (EcalEndcapN_zmin + 10.0 * mm)"/> <constant name="EndcapN_TotalCalThickness" value="(SolenoidYokeEndcapN_zmin - 10.0 * mm) - (EcalEndcapN_zmin + 10.0 * mm)"/>
<constant name="EndcapP_CalDivide" value="0.5"/> <comment> 0.5 means Ecal and Hcal have the same thickness </comment> <constant name="EndcapP_CalDivide" value="0.5"/> <comment> 0.5 means Ecal and Hcal have the same thickness </comment>
<constant name="EndcapN_CalDivide" value="0.5"/> <comment> 0.5 means Ecal and Hcal have the same thickness </comment> <constant name="EndcapN_CalDivide" value="0.5"/> <comment> 0.5 means Ecal and Hcal have the same thickness </comment>
......
...@@ -48,10 +48,11 @@ ...@@ -48,10 +48,11 @@
<detector <detector
id="SolenoidSupport_ID" id="SolenoidSupport_ID"
name="SolenoidCoilEnds" name="SolenoidCoilEnds"
type="DD4hep_DiskTracker" type="ref_SolenoidEndcap"
insideTrackingVolume="false" insideTrackingVolume="false"
reflect="true" reflect="true"
vis="SolenoidCryostatVis"> vis="SolenoidCryostatVis">
<position x="0" y="0" z="Solenoid_offset"/>
<layer id="1" <layer id="1"
inner_z="SolenoidCoil_zmax" inner_z="SolenoidCoil_zmax"
inner_r="SolenoidCoilConductor_rmin" inner_r="SolenoidCoilConductor_rmin"
...@@ -71,10 +72,11 @@ ...@@ -71,10 +72,11 @@
<detector <detector
id="SolenoidYoke_ID" id="SolenoidYoke_ID"
name="SolenoidYokeEndcaps" name="SolenoidYokeEndcaps"
type="DD4hep_DiskTracker" type="ref_SolenoidEndcap"
insideTrackingVolume="false" insideTrackingVolume="false"
reflect="true" reflect="true"
vis="SolenoidYokeVis"> vis="SolenoidYokeVis">
<position x="0" y="0" z="Solenoid_offset"/>
<layer id="1" <layer id="1"
vis="PurpleVis" vis="PurpleVis"
inner_z="SolenoidBarrel_zmax + SolenoidEndPlateGapThickness" inner_z="SolenoidBarrel_zmax + SolenoidEndPlateGapThickness"
......
//==========================================================================
// AIDA Detector description implementation
//--------------------------------------------------------------------------
// 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
//
//==========================================================================
//
// Specialized generic detector constructor
//
//==========================================================================
#include "DD4hep/DetFactoryHelper.h"
using namespace std;
using namespace dd4hep;
using namespace dd4hep::detail;
static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector sens) {
xml_det_t x_det = e;
Material air = description.air();
string det_name = x_det.nameStr();
bool reflect = x_det.reflect();
DetElement sdet(det_name,x_det.id());
Assembly assembly(det_name);
PlacedVolume pv;
int l_num = 0;
xml::Component pos = x_det.position();
for(xml_coll_t i(x_det,_U(layer)); i; ++i, ++l_num) {
xml_comp_t x_layer = i;
string l_nam = det_name+_toString(l_num,"_layer%d");
double zmin = x_layer.inner_z();
double rmin = x_layer.inner_r();
double rmax = x_layer.outer_r();
double z = zmin, layerWidth = 0.;
int s_num = 0;
for(xml_coll_t j(x_layer,_U(slice)); j; ++j) {
double thickness = xml_comp_t(j).thickness();
layerWidth += thickness;
}
Tube l_tub(rmin,rmax,layerWidth,2*M_PI);
Volume l_vol(l_nam,l_tub,air);
l_vol.setVisAttributes(description,x_layer.visStr());
for(xml_coll_t j(x_layer,_U(slice)); j; ++j, ++s_num) {
xml_comp_t x_slice = j;
double thick = x_slice.thickness();
Material mat = description.material(x_slice.materialStr());
string s_nam = l_nam+_toString(s_num,"_slice%d");
Volume s_vol(s_nam, Tube(rmin,rmax,thick), mat);
if ( x_slice.isSensitive() ) {
sens.setType("tracker");
s_vol.setSensitiveDetector(sens);
}
s_vol.setAttributes(description,x_slice.regionStr(),x_slice.limitsStr(),x_slice.visStr());
pv = l_vol.placeVolume(s_vol,Position(0,0,z-zmin-layerWidth/2+thick/2));
pv.addPhysVolID("slice",s_num);
}
DetElement layer(sdet,l_nam+"_pos",l_num);
pv = assembly.placeVolume(l_vol,Position(0,0,zmin+layerWidth/2.));
pv.addPhysVolID("layer",l_num);
pv.addPhysVolID("barrel",1);
layer.setPlacement(pv);
if ( reflect ) {
pv = assembly.placeVolume(l_vol,Transform3D(RotationY(M_PI),Position(0,0,-zmin-layerWidth/2)));
pv.addPhysVolID("layer",l_num);
pv.addPhysVolID("barrel",2);
DetElement layerR = layer.clone(l_nam+"_neg");
sdet.add(layerR.setPlacement(pv));
}
}
if ( x_det.hasAttr(_U(combineHits)) ) {
sdet.setCombineHits(x_det.attr<bool>(_U(combineHits)),sens);
}
pv = description.pickMotherVolume(sdet).placeVolume(assembly,Position(pos.x(),pos.y(),pos.z()));
pv.addPhysVolID("system", x_det.id()); // Set the subdetector system ID.
sdet.setPlacement(pv);
return sdet;
}
DECLARE_DETELEMENT(ref_DiskTracker,create_detector)
DECLARE_DETELEMENT(ref_SolenoidEndcap,create_detector)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment