diff --git a/examples/ClientTests/compact/MiniTelGenerate.xml b/examples/ClientTests/compact/MiniTelGenerate.xml index 4283312aa7d7ee8b814d7f515da5511e4aa0be96..8380e14275f89da30071f7c63e64f12303e96417 100644 --- a/examples/ClientTests/compact/MiniTelGenerate.xml +++ b/examples/ClientTests/compact/MiniTelGenerate.xml @@ -46,39 +46,39 @@ <detector name="Minitel1" type="MiniTelPixel" material="Silicon" vis="DetVis" id ="1" sensitive="true" readout="Minitel1Hits" limits="minitel_limits_1" region="minitel_region_1"> <dimensions z="1*mm" y="10*cm" x="10*cm" /> <module name="pixel" type="MiniTelPixel" material="Silicon" x="6*mm" y="6*mm" z="1*mm" vis="ModVis1" alpha="-2.*radian" beta="-2.*radian" gamma="-0.*radian" /> - <side_position z="30*mm" y="0*cm" x="0*cm" /> + <side_position z="50*mm" y="0*cm" x="0*cm" /> + <module_position z="-40*mm" y="0*cm" x="0*cm" /> + <module_position z="-30*mm" y="0*cm" x="0*cm" /> + <module_position z="-20*mm" y="0*cm" x="0*cm" /> + <module_position z="-10*mm" y="0*cm" x="0*cm" /> + <module_position z="0*mm" y="0*cm" x="0*cm" /> <module_position z="10*mm" y="0*cm" x="0*cm" /> <module_position z="20*mm" y="0*cm" x="0*cm" /> <module_position z="30*mm" y="0*cm" x="0*cm" /> <module_position z="40*mm" y="0*cm" x="0*cm" /> - <module_position z="50*mm" y="0*cm" x="0*cm" /> - <module_position z="60*mm" y="0*cm" x="0*cm" /> - <module_position z="70*mm" y="0*cm" x="0*cm" /> - <module_position z="80*mm" y="0*cm" x="0*cm" /> - <module_position z="90*mm" y="0*cm" x="0*cm" /> <reflect/> </detector> <detector name="Minitel2" type="MiniTelPixel" material="Silicon" vis="DetVis" id ="2" sensitive="true" readout="Minitel2Hits" limits="minitel_limits_1" region="minitel_region_1"> <dimensions z="2*mm" y="15*cm" x="15*cm" /> <module name="pixel" type="MiniTelPixel" material="Silicon" x="6*mm" y="6*mm" z="1*mm" vis="ModVis2" alpha="-2.*radian" beta="-2.*radian" gamma="-0.*radian" /> <side_position z="130*mm" y="0*cm" x="0*cm" /> + <module_position z="-30*mm" y="0*cm" x="0*cm" /> + <module_position z="-20*mm" y="0*cm" x="0*cm" /> + <module_position z="-10*mm" y="0*cm" x="0*cm" /> <module_position z="10*mm" y="0*cm" x="0*cm" /> <module_position z="20*mm" y="0*cm" x="0*cm" /> <module_position z="30*mm" y="0*cm" x="0*cm" /> - <module_position z="40*mm" y="0*cm" x="0*cm" /> - <module_position z="50*mm" y="0*cm" x="0*cm" /> - <module_position z="60*mm" y="0*cm" x="0*cm" /> <reflect/> </detector> <detector name="Minitel3" type="MiniTelPixel" material="Silicon" vis="DetVis" id ="3" sensitive="true" readout="Minitel3Hits" limits="minitel_limits_1" region="minitel_region_1"> <dimensions z="4*mm" y="20*cm" x="20*cm" /> <module name="pixel" type="MiniTelPixel" material="Silicon" x="6*mm" y="6*mm" z="1*mm" vis="ModVis3" alpha="-2.*radian" beta="-2.*radian" gamma="-0.*radian" /> <side_position z="200*mm" y="0*cm" x="0*cm" /> + <module_position z="-20*mm" y="0*cm" x="0*cm" /> + <module_position z="-10*mm" y="0*cm" x="0*cm" /> + <module_position z="0*mm" y="0*cm" x="0*cm" /> <module_position z="10*mm" y="0*cm" x="0*cm" /> <module_position z="20*mm" y="0*cm" x="0*cm" /> - <module_position z="30*mm" y="0*cm" x="0*cm" /> - <module_position z="40*mm" y="0*cm" x="0*cm" /> - <module_position z="50*mm" y="0*cm" x="0*cm" /> <reflect/> </detector> </detectors> diff --git a/examples/ClientTests/src/MiniTel.cpp b/examples/ClientTests/src/MiniTel.cpp index 4bbdbf12f9dfef0cbb34c15af5012855d839b756..b91a018452cfc773879e2429bcbebeab345f3485 100644 --- a/examples/ClientTests/src/MiniTel.cpp +++ b/examples/ClientTests/src/MiniTel.cpp @@ -68,7 +68,8 @@ static Ref_t create_detector(Detector &description, xml_h e, SensitiveDetector s assembly.setVisAttributes(description.visAttributes(x_det.visStr())); - Volume sensor_vol(det_name, Box(det_dim.x(),det_dim.y(),det_dim.z()), mat); + Box sensor_box(Box(det_dim.x(),det_dim.y(),det_dim.z())); + Volume sensor_vol(det_name, sensor_box, mat); sensor_vol.setVisAttributes(description.visAttributes(det_mod.visStr())); sensor_vol.setLimitSet(description, x_det.limitsStr()); sensor_vol.setRegion(description, x_det.regionStr()); @@ -76,19 +77,42 @@ static Ref_t create_detector(Detector &description, xml_h e, SensitiveDetector s if ( x_det.isSensitive() ) { sens.setType("tracker"); } - int count = 0; PlacedVolume pv; DetElement side_det; - Assembly side_vol; + double epsilon = 1e-10; Position side_pos(0,0,30*dd4hep::mm); + Position env_dim_min(sensor_box.x()+epsilon, sensor_box.y()+epsilon, +100000.0); + Position env_dim_max(sensor_box.x()+epsilon, sensor_box.y()+epsilon, -100000.0); + + for( xml_coll_t m(x_det, _U(module_position)); m; m++ ) { + xml_comp_t x_pos = m; + if ( x_pos.z() > env_dim_max.z() ) { + env_dim_max.SetZ(x_pos.z()); + printout(ALWAYS,"","z_max = %f",x_pos.z()); + } + if ( x_pos.z() < env_dim_min.z() ) { + env_dim_min.SetZ(x_pos.z()); + printout(ALWAYS,"","z_min = %f",x_pos.z()); + } + } + Volume side_vol; + if ( x_det.hasChild(_U(assembly)) ) { + side_vol = Assembly("side_0"); + } + else { + Box side_box(env_dim_max.x(), env_dim_max.y(), (env_dim_max.z()-env_dim_min.z())/2.0+sensor_box.z() + epsilon); + printout(ALWAYS,"","Box = %f",side_box.z()); + side_vol = Volume("side_0", side_box, description.air()); + } side_det = DetElement(sdet,"side_0", x_det.id()); - side_vol = Assembly("side_0"); if ( x_det.hasChild(_U(side_position)) ) { xml_comp_t x_pos = x_det.child(_U(side_position)); side_pos = Position(x_pos.x(0), x_pos.y(0), x_pos.z(3*dd4hep::cm)); + printout(ALWAYS,"","side_pos = %f",side_pos.z()); } + pv = assembly.placeVolume(side_vol, side_pos); pv.addPhysVolID("side",0); side_det.setPlacement(pv);