34 xml_h x_pos, x_rot, x_tr;
38 builder.debug = x_dbg != 0;
39 builder.load(x_det,
"include");
40 builder.buildShapes(x_det);
41 builder.buildShapes(x_env);
42 builder.buildVolumes(x_det);
43 builder.buildVolumes(x_env);
46 if ( !x_shp ) x_shp = x_env;
47 if ( x_shp.typeStr() ==
"Assembly" ) {
48 assembly =
Assembly(
"lv"+builder.name);
53 assembly =
Volume(
"lv"+builder.name, solid, mat);
56 assembly.
setAttributes(description,x_det.regionStr(),x_det.limitsStr(),x_det.visStr());
58 if ( x_env.hasAttr(
_U(vis)) )
61 if ( x_env.hasAttr(
_U(region)) )
62 assembly.
setRegion(description, x_env.regionStr());
64 if ( x_env.hasAttr(
_U(limits)) )
65 assembly.
setLimitSet(description, x_env.limitsStr());
67 if ( x_det.hasAttr(
_U(sensitive)) )
68 sens.
setType(x_det.attr<
string>(
_U(sensitive)));
70 builder.detector.
setType(
"compound");
72 if ( x_env.hasAttr(
_U(name)) )
73 assembly->SetName(x_env.nameStr().c_str());
75 builder.placeDaughters(builder.detector, assembly, x_env);
76 builder.placeDaughters(builder.detector, assembly, x_det);
77 x_pos = x_env.
child(
_U(position),
false);
78 x_rot = x_env.
child(
_U(rotation),
false);
79 x_tr = x_env.
child(
_U(transformation),
false);
80 builder.placeDetector(assembly, (x_pos || x_rot || x_tr) ? x_env : x_det);
81 printout(builder.debug ? ALWAYS : DEBUG,
"VolumeBuilder",
82 "+++ Created subdetector instance %s vis:",
83 builder.name.c_str(), x_det.visStr().c_str());
84 return builder.detector;