130 likes | 293 Views
Describing ATLAS Detector with AGDD. Mercedes Paniccia University of Rome “La Sapienza”. Offline Software Design. Simulation. Detector Description Database. Reconstruction. Test. ATLAS Muon System. ATLAS offline software for the Muon Spectometer
E N D
Describing ATLAS Detector with AGDD Mercedes Paniccia University of Rome “La Sapienza” CERN Summer Student 2002
Offline Software Design Simulation Detector Description Database Reconstruction Test
ATLAS Muon System ATLAS offline software for the Muon Spectometer obtains detector description data from two ASCII databases: ATLAS Muon Data Base ATLAS Generic Detector 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 Applications Detector Specific AGDD C++ interface expand() method Generic AGDD
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++ interface void 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( ) method void 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>