CERN Summer Student 2002
Describing ATLAS Detector with AGDD
Mercedes PanicciaUniversity of Rome “La Sapienza”
DetectorDescriptionDatabase
Simulation
Reconstruction
Offline SoftwareDesign
Test
ATLAS Muon System
ATLAS offline software for the Muon Spectometerobtains detector description data from two ASCIIdatabases:
ATLASMuonDataBase
ATLASGenericDetector
Description
ATLAS Muon Data Base Formatted ASCII file Basic parameters for the geometry:
active material & inert matter Algorithms to build geometrical structures embedded
in the application programs
********* End-cap Toroid ***************************************************
M ENC 2 | ENC Description version
4 ! *** CRYOSTAT ****************** Matter identifier
783.00 1283.00 90.50 ! Z_min, Z_max, R_min
3.00 8.00 8.50 ! T_Thickness(Rmax), Z_Thickness, R_Thickness(Rmin)
430.00 535.00 70.00 60.00 ! Tecma1, Tecma2, Secma1, Secma2
290.00 10.00 8.00 0.00 ! Stay Tube : T_Position, Radius, D_Radius, D_Phi
9 ! Nectu
MuonAGDD Package Extend AGDD language for detector
specific elements
Detector SpecificAGDD
GenericAGDD
C++ interface
expand() method
Applications
Compact XML <!--Toroid definition ***************************
-->
<compact name="ENC_CRYO_STAYTUBE">
<ENC_Cryostat_StayTube T_Position="2900.0" Radius="100.0"
D_Radius="80.0" D_Phi="0.0" Nectu="9"
unit_length="mm" />
</compact>
<compact name="ENC_CRYO">
<ENC_Cryostat T_Thickness="30.0" Z_Thickness="80.0" R_Thickness="85.0"
Tecma1="4300.0" Tecma2="5350.0" Secma1="700.0" Secma2="600.0"
StayTube_Desc="ENC_CRYO_STAYTUBE"
unit_length="mm" />
</compact>
C++ interfacevoid ENC_Cryostat::get_attributes(){ AGDD* agdd; agdd = AGDD_Factory::Xerces_instance().get_detector_description(); m_z_thickness = getDoubleAttValue("Z_Thickness"); m_t_thickness = getDoubleAttValue("T_Thickness"); m_r_thickness = getDoubleAttValue("R_Thickness"); m_out_rad1 = getDoubleAttValue("Tecma1"); m_out_rad2 = getDoubleAttValue("Tecma2"); m_out_segm1 = getDoubleAttValue("Secma1"); m_out_segm2 = getDoubleAttValue("Secma2"); m_unit_length = getDoubleAttValue("unit_length");
m_cryostat_staytube = dynamic_cast<ENC_Cryostat_StayTube*>( getCompactAttValue("StayTube_Desc", agdd)); assert(m_cryostat_staytube);
cout <<"Finished getting Cryostat attributes!" << endl; }
expand( ) methodvoid ENC_Toroid::expandCryostat(double Tor_Length,double Tor_Inner_Radius){ cout << "Expanding the Cryostat--" << endl; . . AGDD_Tube* Inner_tube = new AGDD_Tube; m_expandedVolumes.push_back(Inner_tube); Inner_tube->setName("ENC_CRYO_Inner_tube"); Inner_tube->m_total_length = Tor_Length - 2*Cryostat()->Z_Thickness(); Inner_tube->m_inner_radius = Tor_Inner_Radius; Inner_tube->m_outer_radius = Tor_Inner_Radius + Cryostat()->R_Thickness(); Inner_tube->m_starting_angle = -2*Cryostat()->alpha2(); Inner_tube->m_angle = 45; Inner_tube->m_material_name = "Aluminum";
AGDD_Tube* Stay_tube = new AGDD_Tube; m_expandedVolumes.push_back(Stay_tube); Stay_tube->setName("ENC_CRYO_Stay_tube"); Stay_tube->m_total_length = Tor_Length - 2*Cryostat()->Z_Thickness(); Stay_tube->m_inner_radius = Cryostat()->Cryostat_StayTube()->Inner_Rad() ……… Stay_tube->m_outer_radius = Cryostat()->Cryostat_StayTube()->Outer_Rad() …….. Stay_tube->m_material_name = "Aluminum";
Expanded XML <tubs name="ENC_CRYO_Inner_tube" material="Aluminum" Rio_Z="905 990 4840"
profile="-26.5078 45" />
<tubs name="ENC_CRYO_Stay_tube" material="Aluminum" Rio_Z="104.433 130.541 4840" />
.
.
.
.
<composition name="ENC_CRYO" >
<posXYZ volume="ENC_CRYO_Inner_tube" />
<posRPhiZ volume="ENC_CRYO_Stay_tube" R_Phi_Z="2900 9.24611 0" />
<posXYZ volume="ENC_CRYO_Outer_surf" />
<posXYZ volume="ENC_CRYO_Side" />
</composition>
ATLAS Barrel Toroid
ATLAS Endcap Toroid
ATLAS Feet