GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.3 -r1.4
--- PolyhedraBarrelCalorimeterConverter.java 24 Mar 2009 20:06:20 -0000 1.3
+++ PolyhedraBarrelCalorimeterConverter.java 9 Sep 2009 17:31:37 -0000 1.4
@@ -5,11 +5,10 @@
import java.util.Iterator;
-import org.jdom.Element;
import org.jdom.Attribute;
-
-import org.lcsim.detector.IDetectorElement;
+import org.jdom.Element;
import org.lcsim.detector.DetectorElement;
+import org.lcsim.detector.IDetectorElement;
import org.lcsim.detector.ILogicalVolume;
import org.lcsim.detector.IPhysicalVolume;
import org.lcsim.detector.IRotation3D;
@@ -20,10 +19,14 @@
import org.lcsim.detector.RotationPassiveXYZ;
import org.lcsim.detector.Transform3D;
import org.lcsim.detector.Translation3D;
+import org.lcsim.detector.identifier.ExpandedIdentifier;
+import org.lcsim.detector.identifier.IExpandedIdentifier;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.detector.material.IMaterial;
import org.lcsim.detector.material.MaterialStore;
-import org.lcsim.detector.solids.Trd;
import org.lcsim.detector.solids.Box;
-import org.lcsim.detector.material.IMaterial;
+import org.lcsim.detector.solids.Trd;
import org.lcsim.geometry.compact.Detector;
import org.lcsim.geometry.compact.Subdetector;
import org.lcsim.geometry.layer.Layer;
@@ -34,9 +37,7 @@
extends AbstractSubdetectorConverter
{
public void convert(Subdetector subdet, Detector detector)
- {
- System.out.println("PolyhedraBarrelCalorimeterConverter.convert");
-
+ {
// subdetector parameters
int sysId = subdet.getSystemID();
String subdetName = subdet.getName();
@@ -66,9 +67,7 @@
thickness/2);
IMaterial air = MaterialStore.getInstance().get("Air");
ILogicalVolume sectLV = new LogicalVolume(subdetName + "_stave", sectTrd, air);
-
- //
-
+
double stave_thickness = thickness;
int layer_number = 0;
@@ -86,7 +85,8 @@
// Get number of times to repeat this layer.
int repeat;
- try {
+ try
+ {
repeat = (int)layer_element.getAttribute("repeat").getDoubleValue();
}
catch (Exception x)
@@ -107,9 +107,7 @@
// Layer position in Z within the stave.
layer_position_z += layer_thickness / 2;
-
- //System.out.println()
-
+
// Position of layer.
ITranslation3D layer_position = new Translation3D(0,0,layer_position_z);
@@ -166,8 +164,9 @@
slice_position_z += slice_thickness / 2;
++slice_number;
}
-
- IPhysicalVolume layer_physvol = new PhysicalVolume(new Transform3D(layer_position), layer_name, layer_volume, sectLV, layer_number);
+
+ // Layer PhysicalVolume.
+ new PhysicalVolume(new Transform3D(layer_position), layer_name, layer_volume, sectLV, layer_number);
// Increment the layer X dimension.
layer_dim_x += layer_thickness * tan(layerInnerAngle) * 2;
@@ -179,19 +178,18 @@
++layer_number;
}
}
-
- //
-
+
+ // Create DetectorElements for modules.
for (int i=0; i<nsides; i++)
{
- double phi=2*Math.PI*((double)i)/nsides;
- double zc = -phi + Math.PI/2;
-
+ double phi=-(2*Math.PI*((double)i)/nsides-Math.PI/2);
+ double zc=-phi+Math.PI/2;
double x=sectCenter*Math.cos(phi);
double y=sectCenter*Math.sin(phi);
+
ITranslation3D trans = new Translation3D(x,y,0);
IRotation3D rotate = new RotationPassiveXYZ(Math.PI/2, 0, zc);
-
+
ITransform3D transform = new Transform3D(trans,rotate);
String name = subdetName + "_module" + i;
@@ -202,11 +200,12 @@
detector.getDetectorElement().getGeometry().getLogicalVolume(),
i
);
- new DetectorElement(subdet.getName() + "_module"+i,subdet.getDetectorElement(),"/"+name);
+ new DetectorElement(subdet.getName() + "_module"+i,subdet.getDetectorElement(),"/"+name);
}
- // create DetectorElements for sensitive slices
- int sensorNum = 0;
+ IIdentifierHelper helper = cal.getDetectorElement().getIdentifierHelper();
+
+ // Create DetectorElements for sensitive slices.
for (IDetectorElement section : subdet.getDetectorElement().getChildren())
{
int sectNum = section.getGeometry().getPhysicalVolume().getCopyNumber();
@@ -214,17 +213,25 @@
{
for (IPhysicalVolume slice : layer.getLogicalVolume().getDaughters())
{
+ IExpandedIdentifier expId = new ExpandedIdentifier(helper.getIdentifierDictionary().getNumberOfFields());
+
+ expId.setValue(helper.getFieldIndex("system"),sysId);
+ expId.setValue(helper.getFieldIndex("barrel"), 0);
+ expId.setValue(helper.getFieldIndex("module"), section.getGeometry().getPhysicalVolume().getCopyNumber());
+ expId.setValue(helper.getFieldIndex("layer"), layer.getCopyNumber());
+ expId.setValue(helper.getFieldIndex("slice"), slice.getCopyNumber());
+ IIdentifier id = helper.pack(expId);
+
if (slice.isSensitive())
{
new DetectorElement(
- subdetName + "_module" + sectNum + "_layer" + layer.getCopyNumber() + "_sensor" + sensorNum,
+ subdetName + "_module" + sectNum + "_layer" + layer.getCopyNumber() + "_slice" + slice.getCopyNumber(),
section,
- "/" + section.getGeometry().getPhysicalVolume().getName() + "/" + layer.getName() + "/" + slice.getName());
- ++sensorNum;
+ "/" + section.getGeometry().getPhysicalVolume().getName() + "/" + layer.getName() + "/" + slice.getName(),
+ id);
}
}
}
-
}
}