GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.24 -r1.25
--- DiskTrackerConverter.java 30 Nov 2010 00:16:27 -0000 1.24
+++ DiskTrackerConverter.java 9 Feb 2011 01:28:15 -0000 1.25
@@ -3,6 +3,7 @@
import org.lcsim.detector.DetectorElement;
import org.lcsim.detector.DetectorIdentifierHelper;
import org.lcsim.detector.ILogicalVolume;
+import org.lcsim.detector.IPhysicalVolume;
import org.lcsim.detector.IRotation3D;
import org.lcsim.detector.LogicalVolume;
import org.lcsim.detector.PhysicalVolume;
@@ -17,7 +18,6 @@
import org.lcsim.detector.material.IMaterial;
import org.lcsim.detector.material.MaterialStore;
import org.lcsim.detector.solids.Tube;
-import org.lcsim.geometry.IDDecoder;
import org.lcsim.geometry.compact.Detector;
import org.lcsim.geometry.compact.Subdetector;
import org.lcsim.geometry.layer.Layer;
@@ -33,10 +33,10 @@
*/
public class DiskTrackerConverter extends AbstractSubdetectorConverter implements ISubdetectorConverter
{
- public void convert( Subdetector subdet, Detector detector )
+ public void convert(Subdetector subdet, Detector detector)
{
ILogicalVolume mother = null;
- if ( subdet.isInsideTrackingVolume() )
+ if (subdet.isInsideTrackingVolume())
{
mother = detector.getTrackingVolume().getLogicalVolume();
}
@@ -45,165 +45,192 @@
mother = detector.getWorldVolume().getLogicalVolume();
}
- DiskTracker tracker = ( DiskTracker ) subdet;
+ DiskTracker tracker = (DiskTracker)subdet;
// Some DiskTracker subdetectors are used for support material
- // so need to make sure IDDecoder is not null before using it.
- int systemNumber = tracker.getSystemID();
- /*
- * = -1;
- */
-
- IDDecoder decoder = null;
- try
- {
- decoder = tracker.getIDDecoder();
- }
- catch ( NullPointerException x )
+ // so need to make sure Readout is not null before using it.
+ int systemNumber = 0;
+ DetectorIdentifierHelper helper = null;
+ if (subdet.getReadout() != null)
+ {
+ systemNumber = tracker.getSystemID();
+ helper = (DetectorIdentifierHelper)tracker.getDetectorElement().getIdentifierHelper();
+ }
+
+ // Get the Subdetector name.
+ String subdetName = tracker.getName();
+
+ // Create the two endcap containers.
+ DetectorElement endcapPos = new DetectorElement(subdetName + "_positive", tracker.getDetectorElement());
+ DetectorElement endcapNeg = null;
+ if (tracker.getReflect())
{
+ endcapNeg = new DetectorElement(subdetName + "_negative", tracker.getDetectorElement());
}
- DetectorIdentifierHelper helper = ( DetectorIdentifierHelper ) tracker.getDetectorElement()
- .getIdentifierHelper();
+ // Rotation for reflection.
+ IRotation3D reflect = new RotationPassiveXYZ(0, Math.PI, 0);
+ // Loop over the layers.
+ //int sensorNum = 0;
Layering layering = tracker.getLayering();
- String name = tracker.getName();
-
- DetectorElement endcapPos = null;
- DetectorElement endcapNeg = null;
- if ( decoder != null )
- {
- endcapPos = new DetectorElement( name + "_positive", tracker.getDetectorElement() );
-
- if ( tracker.getReflect() )
+ for (int i = 0; i < layering.getNumberOfLayers(); i++ )
+ {
+ // Layer parameters.
+ Layer layer = layering.getLayer(i);
+ double layerInnerRadius = tracker.getInnerR()[i];
+ double layerOuterRadius = tracker.getOuterR()[i];
+ double layerInnerZ = tracker.getInnerZ()[i];
+
+ // Layer names.
+ String layerName = subdetName + "_layer" + i;
+ String posLayerName = layerName + "_pos";
+ String negLayerName = layerName + "_neg";
+
+ // Create layer solid and LogicalVolume.
+ Tube layerTube =
+ new Tube(layerName, layerInnerRadius, layerOuterRadius, layer.getThickness() / 2);
+ LogicalVolume layerLV =
+ new LogicalVolume(layerName + "_volume", layerTube, detector.getDetectorElement().getGeometry()
+ .getLogicalVolume().getMaterial());
+
+ // Positive and negative PhysicalVolumes.
+ IPhysicalVolume posLayerPV =
+ new PhysicalVolume(
+ new Transform3D(new Translation3D(0, 0, layerInnerZ + layer.getThickness() / 2)),
+ posLayerName, layerLV, mother, i);
+ IPhysicalVolume negLayerPV = null;
+ if (tracker.getReflect())
{
- endcapNeg = new DetectorElement( name + "_negative", tracker.getDetectorElement() );
+ negLayerPV = new PhysicalVolume(new Transform3D(new Translation3D(0., 0., -layerInnerZ - layer.getThickness() / 2),
+ reflect), negLayerName, layerLV, mother, i);
+
}
- }
-
- IRotation3D reflect = new RotationPassiveXYZ( 0, Math.PI, 0 );
-
- int sensorNum = 0;
-
- for ( int i = 0; i < layering.getNumberOfLayers(); i++ )
- {
- Layer layer = layering.getLayer( i );
-
- double layerInnerRadius = tracker.getInnerR()[ i ];
- double layerOuterRadius = tracker.getOuterR()[ i ];
- double layerInnerZ = tracker.getInnerZ()[ i ];
-
- // System.out.println("thick="+layer.getThickness());
-
- Tube layerTube = new Tube( name + "_layer" + i,
- layerInnerRadius,
- layerOuterRadius,
- layer.getThickness() / 2 );
-
- LogicalVolume layerLV = new LogicalVolume( name + "_layer" + i, layerTube, detector.getDetectorElement()
- .getGeometry().getLogicalVolume().getMaterial() );
-
- // Layer in positive z.
- new PhysicalVolume( new Transform3D( new Translation3D( 0, 0, layerInnerZ + layer.getThickness() / 2 ) ),
- name + "_positive_layer" + i,
- layerLV,
- mother,
- i );
-
- // Reflected layer in negative z.
- if ( tracker.getReflect() )
+
+ // Create the layer paths.
+ String posLayerPath = "/";
+ String negLayerPath = "/";
+ if (subdet.isInsideTrackingVolume())
+ {
+ posLayerPath += detector.getTrackingVolume().getName() + "/";
+ negLayerPath += detector.getTrackingVolume().getName() + "/";
+ }
+ posLayerPath += posLayerPV.getName();
+ negLayerPath += negLayerPV.getName();
+
+ // Create the layer DetectorElements.
+ new DetectorElement(posLayerPV.getName(), endcapPos, posLayerPath);
+ if (negLayerPV != null)
{
- new PhysicalVolume( new Transform3D( new Translation3D( 0., 0., -layerInnerZ - layer.getThickness() / 2 ),
- reflect ),
- name + "_negative_layer" + i,
- layerLV,
- mother,
- i );
+ new DetectorElement(negLayerPV.getName(), endcapPos, negLayerPath);
}
+ // Loop over the slices.
double sliceZ = -layer.getThickness() / 2;
- for ( int j = 0; j < layer.getNumberOfSlices(); j++ )
+ for (int j = 0; j < layer.getNumberOfSlices(); j++ )
{
- // System.out.println("sliceZ="+sliceZ);
- LayerSlice slice = layer.getSlice( j );
+ // Get slice parameters.
+ LayerSlice slice = layer.getSlice(j);
double sliceThickness = slice.getThickness();
- IMaterial sliceMaterial = MaterialStore.getInstance().get( slice.getMaterial().getName() );
-
- Tube sliceTube = new Tube( name + "_layer" + i + "_slice" + j,
- layerInnerRadius,
- layerOuterRadius,
- sliceThickness / 2 );
-
- LogicalVolume sliceLV = new LogicalVolume( name + "_layer" + i + "_slice" + j, sliceTube, sliceMaterial );
+ IMaterial sliceMaterial = MaterialStore.getInstance().get(slice.getMaterial().getName());
+ String sliceName = layerName + "_slice" + j;
+ // Create the solid and LogicalVolume.
+ Tube sliceTube =
+ new Tube(sliceName + "_tube", layerInnerRadius, layerOuterRadius,
+ sliceThickness / 2);
+ LogicalVolume sliceLV = new LogicalVolume(sliceName + "_volume", sliceTube, sliceMaterial);
+
+ // Increment to correct slice Z for this placement.
sliceZ += sliceThickness / 2;
- PhysicalVolume slicePV = new PhysicalVolume( new Transform3D( new Translation3D( 0, 0, sliceZ ) ),
- "slice" + j,
- sliceLV,
- layerLV,
- j );
+ // Create the positive slice PhysicalVolume. Only one placement is necessary because
+ // the negative and positive layers use the same LogicalVolume.
+ PhysicalVolume slicePV =
+ new PhysicalVolume(new Transform3D(new Translation3D(0, 0, sliceZ)), sliceName, sliceLV, layerLV, j);
+ // Increment slice Z for next placement.
sliceZ += sliceThickness / 2;
- if ( slice.isSensitive() && decoder != null )
+ // Create Identifiers if this is a sensor.
+ IIdentifier posId = null;
+ IIdentifier negId = null;
+ if (slice.isSensitive())
{
- slicePV.setSensitive( true );
- String path = "/tracking_region/" + name + "_positive_layer" + i + "/slice" + j;
- IIdentifier posId = makeIdentifier( helper, systemNumber, helper.getEndcapPositiveValue(), i, j );
-
- new DetectorElement( name + "_positive_layer" + i + "_sensor" + sensorNum, endcapPos, path, posId );
-
- if ( tracker.getReflect() )
- {
- path = "/tracking_region/" + name + "_negative_layer" + i + "/slice" + j;
- IIdentifier negId = makeIdentifier( helper, systemNumber, helper.getEndcapNegativeValue(), i, j );
-
- new DetectorElement( name + "_negative_layer" + i + "_sensor" + sensorNum,
- endcapNeg,
- path,
- negId );
- }
-
- ++sensorNum;
+ slicePV.setSensitive(true);
+ posId = makeIdentifier(helper, systemNumber, helper.getEndcapPositiveValue(), i, j);
+ negId = makeIdentifier(helper, systemNumber, helper.getEndcapNegativeValue(), i, j);
+ }
+
+ // Create the DetectorElement paths for the slices.
+ String posPath = posLayerPath + "/" + sliceName;
+ String negPath = negLayerPath + "/" + sliceName;
+
+ // Make DetectorElements.
+ new DetectorElement(sliceName + "_pos", endcapPos, posPath, posId);
+ if (tracker.getReflect())
+ {
+ new DetectorElement(sliceName + "_neg", endcapNeg, negPath, negId);
}
+
+ // Increment sensor number if slice was sensitive.
+ //if (slice.isSensitive())
+ //{
+ // ++sensorNum;
+ //}
}
}
}
- static IIdentifier makeIdentifier( IIdentifierHelper helper, int systemNumber, int barrel, int layer, int slice )
+ static IIdentifier makeIdentifier(IIdentifierHelper helper, int systemNumber, int barrel, int layer, int slice)
+ {
+ ExpandedIdentifier id = new ExpandedIdentifier(helper.getIdentifierDictionary().getNumberOfFields());
+ try
+ {
+ id.setValue(helper.getFieldIndex("system"), systemNumber);
+ id.setValue(helper.getFieldIndex("barrel"), barrel);
+ id.setValue(helper.getFieldIndex("layer"), layer);
+ if (helper.hasField("slice"))
+ id.setValue(helper.getFieldIndex("slice"), slice);
+ return helper.pack(id);
+ }
+ catch (Exception x)
+ {
+ throw new RuntimeException(x);
+ }
+ }
+
+ static IIdentifier makeLayerIdentifier(IIdentifierHelper helper, int systemNumber, int barrel, int layer)
{
- ExpandedIdentifier id = new ExpandedIdentifier( helper.getIdentifierDictionary().getNumberOfFields() );
+ ExpandedIdentifier id = new ExpandedIdentifier(helper.getIdentifierDictionary().getNumberOfFields());
try
{
- id.setValue( helper.getFieldIndex( "system" ), systemNumber );
- id.setValue( helper.getFieldIndex( "barrel" ), barrel );
- id.setValue( helper.getFieldIndex( "layer" ), layer );
- if ( helper.hasField( "slice" ) )
- id.setValue( helper.getFieldIndex( "slice" ), slice );
- return helper.pack( id );
+ id.setValue(helper.getFieldIndex("system"), systemNumber);
+ id.setValue(helper.getFieldIndex("barrel"), barrel);
+ id.setValue(helper.getFieldIndex("layer"), layer);
+ return helper.pack(id);
}
- catch ( Exception x )
+ catch (Exception x)
{
- throw new RuntimeException( x );
+ throw new RuntimeException(x);
}
}
- public void makeIdentifierContext( Subdetector subdet )
+ public void makeIdentifierContext(Subdetector subdet)
{
IIdentifierDictionary iddict = subdet.getDetectorElement().getIdentifierHelper().getIdentifierDictionary();
- int systemIndex = iddict.getFieldIndex( "system" );
- int barrelIndex = iddict.getFieldIndex( "barrel" );
- int layerIndex = iddict.getFieldIndex( "layer" );
-
- IdentifierContext systemContext = new IdentifierContext( new int[] { systemIndex } );
- IdentifierContext subdetContext = new IdentifierContext( new int[] { systemIndex, barrelIndex } );
- IdentifierContext layerContext = new IdentifierContext( new int[] { systemIndex, barrelIndex, layerIndex } );
-
- iddict.addIdentifierContext( "system", systemContext );
- iddict.addIdentifierContext( "subdetector", subdetContext );
- iddict.addIdentifierContext( "layer", layerContext );
+ int systemIndex = iddict.getFieldIndex("system");
+ int barrelIndex = iddict.getFieldIndex("barrel");
+ int layerIndex = iddict.getFieldIndex("layer");
+
+ IdentifierContext systemContext = new IdentifierContext(new int[]{systemIndex});
+ IdentifierContext subdetContext = new IdentifierContext(new int[]{systemIndex,barrelIndex});
+ IdentifierContext layerContext = new IdentifierContext(new int[]{systemIndex,barrelIndex,layerIndex});
+
+ iddict.addIdentifierContext("system", systemContext);
+ iddict.addIdentifierContext("subdetector", subdetContext);
+ iddict.addIdentifierContext("layer", layerContext);
}
public Class getSubdetectorType()
GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.18 -r1.19
--- MultiLayerTrackerConverter.java 26 Jan 2011 01:10:40 -0000 1.18
+++ MultiLayerTrackerConverter.java 9 Feb 2011 01:28:15 -0000 1.19
@@ -2,13 +2,12 @@
import org.lcsim.detector.DetectorElement;
import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.ILogicalVolume;
+import org.lcsim.detector.IPhysicalVolume;
import org.lcsim.detector.LogicalVolume;
import org.lcsim.detector.PhysicalVolume;
import org.lcsim.detector.identifier.ExpandedIdentifier;
import org.lcsim.detector.identifier.IIdentifier;
import org.lcsim.detector.identifier.IIdentifierDictionary;
-import org.lcsim.detector.identifier.IdentifierContext;
import org.lcsim.detector.identifier.IdentifierDictionaryManager;
import org.lcsim.detector.identifier.IdentifierUtil;
import org.lcsim.detector.material.IMaterial;
@@ -31,91 +30,84 @@
{
public void convert(Subdetector subdet, Detector detector)
{
- ILogicalVolume mother = null;
+ IPhysicalVolume mother = null;
if (subdet.isInsideTrackingVolume())
{
- mother = detector.getTrackingVolume().getLogicalVolume();
+ mother = detector.getTrackingVolume();
}
else
{
- mother = detector.getWorldVolume().getLogicalVolume();
+ mother = detector.getWorldVolume();
}
MultiLayerTracker tracker = (MultiLayerTracker)subdet;
-
Layering layering = tracker.getLayering();
+ String subdetName = tracker.getName();
- String name = tracker.getName();
-
- int layerNumber = 0;
+ // int layerNumber = 0;
for (int i = 0; i < tracker.getLayering().getNumberOfLayers(); i++ )
{
+ String layerName = subdetName + "_layer" + i;
Layer layer = layering.getLayer(i);
- double layerInnerR = tracker.getInnerR()[ i ];
- double layerOuterZ = tracker.getOuterZ()[ i ];
+ double layerInnerR = tracker.getInnerR()[i];
+ double layerOuterZ = tracker.getOuterZ()[i];
double layerThickness = layer.getThickness();
- Tube layerTube = new Tube(name + "_layer" + i + "_tube", layerInnerR, layerInnerR + layerThickness, layerOuterZ);
-
+ Tube layerTube = new Tube(layerName + "_tube", layerInnerR, layerInnerR + layerThickness, layerOuterZ);
IMaterial layerMaterial = detector.getDetectorElement().getGeometry().getLogicalVolume().getMaterial();
-
- LogicalVolume layerLV = new LogicalVolume(name + "_layer" + i, layerTube, layerMaterial);
-
- new PhysicalVolume(null, name + "_layer" + i, layerLV, mother, i);
-
+ LogicalVolume layerLV = new LogicalVolume(layerName, layerTube, layerMaterial);
+ new PhysicalVolume(null, layerName, layerLV, mother.getLogicalVolume(), i);
double sliceInnerR = layerInnerR;
-
+
// Make layer name and path to geometry.
- String layerName = name + "_layer" + i;
String layerPath = "";
if (subdet.isInsideTrackingVolume())
{
- layerPath += "/tracking_region";
+ layerPath += "/" + mother.getName();
}
- layerPath += "/" + layerName;
-
- // Make the layer DetectorElement. (no id)
+ layerPath += "/" + layerName;
+
+ //System.out.println("MultiLayerTracker: " + layerPath);
+
+ // Make the layer DetectorElement. (no id)
IDetectorElement layerDe = new DetectorElement(layerName, tracker.getDetectorElement(), layerPath);
-
+
for (int j = 0; j < layer.getNumberOfSlices(); j++ )
{
LayerSlice slice = layer.getSlice(j);
-
double sliceThickness = slice.getThickness();
+ String sliceName = subdetName + "layer" + i + "_slice" + j;
- Tube sliceTube = new Tube(name + "layer" + i + "_slice" + j + "_tube", sliceInnerR, sliceInnerR + sliceThickness, layerOuterZ);
-
+ Tube sliceTube = new Tube(sliceName + "_tube", sliceInnerR, sliceInnerR + sliceThickness, layerOuterZ);
IMaterial sliceMaterial = MaterialStore.getInstance().get(slice.getMaterial().getName());
+ LogicalVolume sliceLV = new LogicalVolume(sliceName, sliceTube, sliceMaterial);
+ PhysicalVolume slicePV = new PhysicalVolume(null, sliceName, sliceLV, layerLV, j);
- LogicalVolume sliceLV = new LogicalVolume(name + "layer" + i + "_slice" + j, sliceTube, sliceMaterial);
-
- PhysicalVolume slicePV = new PhysicalVolume(null, "slice" + j, sliceLV, layerLV, j);
-
+ // Create ID for sensors.
+ IIdentifier id = null;
if (slice.isSensitive())
{
slicePV.setSensitive(true);
- String path = "/tracking_region/" + name + "_layer" + i + "/slice" + j;
-
- ExpandedIdentifier expid = makeExpandedIdentifier(subdet.getIDDecoder(), tracker.getIDDecoder().getSystemNumber(), i);
-
- IIdentifierDictionary iddict = IdentifierDictionaryManager.getInstance().getIdentifierDictionary(subdet.getReadout().getName());
- IIdentifier id = IdentifierUtil.pack(iddict, expid);
-
- new DetectorElement(name + "_layer" + layerNumber, layerDe, path, id);
-
- ++layerNumber;
+ ExpandedIdentifier expid =
+ makeExpandedIdentifier(subdet.getIDDecoder(), tracker.getIDDecoder().getSystemNumber(), i);
+ IIdentifierDictionary iddict =
+ IdentifierDictionaryManager.getInstance().getIdentifierDictionary(
+ subdet.getReadout().getName());
+ id = IdentifierUtil.pack(iddict, expid);
}
+ String slicePath = layerPath + "/" + slicePV.getName();
+ new DetectorElement(sliceName, layerDe, slicePath, id);
+
sliceInnerR += sliceThickness;
}
}
}
- static ExpandedIdentifier makeExpandedIdentifier(IDDecoder decoder, int systemNumber, int layer)
+ private static ExpandedIdentifier makeExpandedIdentifier(IDDecoder decoder, int systemNumber, int layer)
{
ExpandedIdentifier id = new ExpandedIdentifier();
- // int extras=0;
for (int i = 0; i < decoder.getFieldCount(); i++ )
{
String fieldName = decoder.getFieldName(i);
GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.9 -r1.10
--- SiTrackerEndcap2Converter.java 30 Nov 2010 00:16:27 -0000 1.9
+++ SiTrackerEndcap2Converter.java 9 Feb 2011 01:28:15 -0000 1.10
@@ -36,151 +36,149 @@
import org.lcsim.geometry.subdetector.SiTrackerEndcap2;
/**
- * An LCDD converter for a Silicon endcap tracker model based on Bill Cooper's design from
- * <a href="http://ilcagenda.linearcollider.org/materialDisplay.py?contribId=58&sessionId=1&materialId=slides&confId=2784"
+ * An LCDD converter for a Silicon endcap tracker model based on Bill Cooper's design from <a href=
+ * "http://ilcagenda.linearcollider.org/materialDisplay.py?contribId=58&sessionId=1&materialId=slides&confId=2784"
* >Boulder SiD Workshop 2008</a>.
*
* @author jeremym
*/
public class SiTrackerEndcap2Converter extends AbstractSubdetectorConverter implements ISubdetectorConverter
{
- Map< String, SiTrackerModuleParameters > moduleParameters = new HashMap< String, SiTrackerModuleParameters >();
- Map< String, LogicalVolume > modules = new HashMap< String, LogicalVolume >();
+ Map<String, SiTrackerModuleParameters> moduleParameters = new HashMap<String, SiTrackerModuleParameters>();
+ Map<String, LogicalVolume> modules = new HashMap<String, LogicalVolume>();
IMaterial vacuum;
- public IIdentifierHelper makeIdentifierHelper( Subdetector subdetector, SystemMap systemMap )
+ public IIdentifierHelper makeIdentifierHelper(Subdetector subdetector, SystemMap systemMap)
{
- return new SiTrackerIdentifierHelper( subdetector.getDetectorElement(),
- makeIdentifierDictionary( subdetector ),
- systemMap );
+ return new SiTrackerIdentifierHelper(subdetector.getDetectorElement(), makeIdentifierDictionary(subdetector),
+ systemMap);
}
- public void convert( Subdetector subdet, Detector detector )
+ public void convert(Subdetector subdet, Detector detector)
{
try
{
Element node = subdet.getNode();
- String subdetName = node.getAttributeValue( "name" );
- vacuum = MaterialStore.getInstance().get( "Air" );
+ String subdetName = node.getAttributeValue("name");
+ vacuum = MaterialStore.getInstance().get("Air");
boolean reflect;
- if ( node.getAttribute( "reflect" ) != null )
- reflect = node.getAttribute( "reflect" ).getBooleanValue();
+ if (node.getAttribute("reflect") != null)
+ reflect = node.getAttribute("reflect").getBooleanValue();
else
reflect = true;
IDetectorElement subdetDetElem = subdet.getDetectorElement();
- DetectorIdentifierHelper helper = ( DetectorIdentifierHelper ) subdetDetElem.getIdentifierHelper();
+ DetectorIdentifierHelper helper = (DetectorIdentifierHelper)subdetDetElem.getIdentifierHelper();
int nfields = helper.getIdentifierDictionary().getNumberOfFields();
IDetectorElement endcapPos = null;
IDetectorElement endcapNeg = null;
try
{
// Positive endcap DE
- IExpandedIdentifier endcapPosId = new ExpandedIdentifier( nfields );
- endcapPosId.setValue( helper.getFieldIndex( "system" ), subdet.getSystemID() );
- endcapPosId.setValue( helper.getFieldIndex( "barrel" ), helper.getEndcapPositiveValue() );
- endcapPos = new DetectorElement( subdet.getName() + "_positive", subdetDetElem );
- endcapPos.setIdentifier( helper.pack( endcapPosId ) );
+ IExpandedIdentifier endcapPosId = new ExpandedIdentifier(nfields);
+ endcapPosId.setValue(helper.getFieldIndex("system"), subdet.getSystemID());
+ endcapPosId.setValue(helper.getFieldIndex("barrel"), helper.getEndcapPositiveValue());
+ endcapPos = new DetectorElement(subdet.getName() + "_positive", subdetDetElem);
+ endcapPos.setIdentifier(helper.pack(endcapPosId));
// Negative endcap DE.
- if ( reflect )
+ if (reflect)
{
- IExpandedIdentifier endcapNegId = new ExpandedIdentifier( nfields );
- endcapNegId.setValue( helper.getFieldIndex( "system" ), subdet.getSystemID() );
- endcapNegId.setValue( helper.getFieldIndex( "barrel" ), helper.getEndcapNegativeValue() );
- endcapNeg = new DetectorElement( subdet.getName() + "_negative", subdetDetElem );
- endcapNeg.setIdentifier( helper.pack( endcapNegId ) );
+ IExpandedIdentifier endcapNegId = new ExpandedIdentifier(nfields);
+ endcapNegId.setValue(helper.getFieldIndex("system"), subdet.getSystemID());
+ endcapNegId.setValue(helper.getFieldIndex("barrel"), helper.getEndcapNegativeValue());
+ endcapNeg = new DetectorElement(subdet.getName() + "_negative", subdetDetElem);
+ endcapNeg.setIdentifier(helper.pack(endcapNegId));
}
}
- catch ( Exception x )
+ catch (Exception x)
{
- throw new RuntimeException( x );
+ throw new RuntimeException(x);
}
- for ( Iterator i = node.getChildren( "module" ).iterator(); i.hasNext(); )
+ for (Iterator i = node.getChildren("module").iterator(); i.hasNext();)
{
- Element module = ( Element ) i.next();
- String moduleName = module.getAttributeValue( "name" );
- moduleParameters.put( moduleName, new SiTrackerModuleParameters( module ) );
- modules.put( moduleName, makeModule( moduleParameters.get( moduleName ) ) );
+ Element module = (Element)i.next();
+ String moduleName = module.getAttributeValue("name");
+ moduleParameters.put(moduleName, new SiTrackerModuleParameters(module));
+ modules.put(moduleName, makeModule(moduleParameters.get(moduleName)));
}
- for ( Iterator i = node.getChildren( "layer" ).iterator(); i.hasNext(); )
+ for (Iterator i = node.getChildren("layer").iterator(); i.hasNext();)
{
- Element layerElement = ( Element ) i.next();
+ Element layerElement = (Element)i.next();
- int layerId = layerElement.getAttribute( "id" ).getIntValue();
+ int layerId = layerElement.getAttribute("id").getIntValue();
// Positive endcap layer.
- IExpandedIdentifier layerPosId = new ExpandedIdentifier( nfields );
- layerPosId.setValue( helper.getFieldIndex( "system" ), subdet.getSystemID() );
- layerPosId.setValue( helper.getFieldIndex( "barrel" ), helper.getEndcapPositiveValue() );
- layerPosId.setValue( helper.getFieldIndex( "layer" ), layerId );
- IDetectorElement layerPos = new DetectorElement( endcapPos.getName() + "_layer" + layerId,
- endcapPos,
- helper.pack( layerPosId ) );
+ IExpandedIdentifier layerPosId = new ExpandedIdentifier(nfields);
+ layerPosId.setValue(helper.getFieldIndex("system"), subdet.getSystemID());
+ layerPosId.setValue(helper.getFieldIndex("barrel"), helper.getEndcapPositiveValue());
+ layerPosId.setValue(helper.getFieldIndex("layer"), layerId);
+ IDetectorElement layerPos =
+ new DetectorElement(endcapPos.getName() + "_layer" + layerId, endcapPos, helper
+ .pack(layerPosId));
// Negative endcap layer.
IDetectorElement layerNeg = null;
- if ( reflect )
+ if (reflect)
{
- IExpandedIdentifier layerNegId = new ExpandedIdentifier( nfields );
- layerNegId.setValue( helper.getFieldIndex( "system" ), subdet.getSystemID() );
- layerNegId.setValue( helper.getFieldIndex( "barrel" ), helper.getEndcapNegativeValue() );
- layerNegId.setValue( helper.getFieldIndex( "layer" ), layerId );
- layerNeg = new DetectorElement( endcapNeg.getName() + "_layer" + layerId, endcapNeg, helper
- .pack( layerNegId ) );
+ IExpandedIdentifier layerNegId = new ExpandedIdentifier(nfields);
+ layerNegId.setValue(helper.getFieldIndex("system"), subdet.getSystemID());
+ layerNegId.setValue(helper.getFieldIndex("barrel"), helper.getEndcapNegativeValue());
+ layerNegId.setValue(helper.getFieldIndex("layer"), layerId);
+ layerNeg =
+ new DetectorElement(endcapNeg.getName() + "_layer" + layerId, endcapNeg, helper
+ .pack(layerNegId));
}
int moduleNumber = 0;
- for ( Iterator j = layerElement.getChildren( "ring" ).iterator(); j.hasNext(); )
+ for (Iterator j = layerElement.getChildren("ring").iterator(); j.hasNext();)
{
- Element ringElement = ( Element ) j.next();
- double r = ringElement.getAttribute( "r" ).getDoubleValue();
+ Element ringElement = (Element)j.next();
+ double r = ringElement.getAttribute("r").getDoubleValue();
double phi0 = 0;
- if ( ringElement.getAttribute( "phi0" ) != null )
+ if (ringElement.getAttribute("phi0") != null)
{
- phi0 = ringElement.getAttribute( "phi0" ).getDoubleValue();
+ phi0 = ringElement.getAttribute("phi0").getDoubleValue();
}
- double zstart = ringElement.getAttribute( "zstart" ).getDoubleValue();
- double dz = Math.abs( ringElement.getAttribute( "dz" ).getDoubleValue() );
- int nmodules = ringElement.getAttribute( "nmodules" ).getIntValue();
- String module = ringElement.getAttributeValue( "module" );
- LogicalVolume moduleVolume = modules.get( module );
- if ( moduleVolume == null )
- throw new RuntimeException( "Module " + module + " was not found." );
- double iphi = ( 2 * Math.PI ) / nmodules;
+ double zstart = ringElement.getAttribute("zstart").getDoubleValue();
+ double dz = Math.abs(ringElement.getAttribute("dz").getDoubleValue());
+ int nmodules = ringElement.getAttribute("nmodules").getIntValue();
+ String module = ringElement.getAttributeValue("module");
+ LogicalVolume moduleVolume = modules.get(module);
+ if (moduleVolume == null)
+ throw new RuntimeException("Module " + module + " was not found.");
+ double iphi = (2 * Math.PI) / nmodules;
double phi = phi0;
- for ( int k = 0; k < nmodules; k++ )
+ for (int k = 0; k < nmodules; k++ )
{
String moduleBaseName = subdetName + "_layer" + layerId + "_module" + moduleNumber;
- double x = r * Math.cos( phi );
- double y = r * Math.sin( phi );
+ double x = r * Math.cos(phi);
+ double y = r * Math.sin(phi);
// Positive endcap module.
- Translation3D p = new Translation3D( x, y, zstart + dz );
- RotationGeant rot = new RotationGeant( -Math.PI / 2, -Math.PI / 2 - phi, 0 );
- new PhysicalVolume( new Transform3D( p, rot ), moduleBaseName, moduleVolume, detector
- .getTrackingVolume().getLogicalVolume(), k );
+ Translation3D p = new Translation3D(x, y, zstart + dz);
+ RotationGeant rot = new RotationGeant(-Math.PI / 2, -Math.PI / 2 - phi, 0);
+ new PhysicalVolume(new Transform3D(p, rot), moduleBaseName, moduleVolume, detector
+ .getTrackingVolume().getLogicalVolume(), k);
String path = "/" + detector.getTrackingVolume().getName() + "/" + moduleBaseName;
- IDetectorElement modulePos = new SiTrackerModule( moduleBaseName, layerPos, path, moduleNumber );
+ IDetectorElement modulePos = new SiTrackerModule(moduleBaseName, layerPos, path, moduleNumber);
// Negative endcap module.
- if ( reflect )
+ if (reflect)
{
- Translation3D pr = new Translation3D( x, y, -zstart - dz );
- RotationGeant rotr = new RotationGeant( -Math.PI / 2, -Math.PI / 2 - phi, Math.PI );
+ Translation3D pr = new Translation3D(x, y, -zstart - dz);
+ RotationGeant rotr = new RotationGeant(-Math.PI / 2, -Math.PI / 2 - phi, Math.PI);
- String path2 = "/" + detector.getTrackingVolume().getName() + "/" + moduleBaseName + "_reflected";
- new PhysicalVolume( new Transform3D( pr, rotr ),
- moduleBaseName + "_reflected",
- moduleVolume,
- detector.getTrackingVolume().getLogicalVolume(),
- k );
- new SiTrackerModule( moduleBaseName + "_reflected", layerNeg, path2, moduleNumber );
+ String path2 =
+ "/" + detector.getTrackingVolume().getName() + "/" + moduleBaseName + "_reflected";
+ new PhysicalVolume(new Transform3D(pr, rotr), moduleBaseName + "_reflected", moduleVolume,
+ detector.getTrackingVolume().getLogicalVolume(), k);
+ new SiTrackerModule(moduleBaseName + "_reflected", layerNeg, path2, moduleNumber);
}
dz = -dz;
@@ -190,32 +188,32 @@
}
}
}
- catch ( JDOMException except )
+ catch (JDOMException except)
{
- throw new RuntimeException( except );
+ throw new RuntimeException(except);
}
// Create DetectorElements for the sensors.
- setupSensorDetectorElements( subdet );
+ setupSensorDetectorElements(subdet);
}
- private LogicalVolume makeModule( SiTrackerModuleParameters params )
+ private LogicalVolume makeModule(SiTrackerModuleParameters params)
{
double thickness = params.getThickness();
double dx1, dx2, dy1, dy2, dz;
dy1 = dy2 = thickness / 2;
- dx1 = params.getDimension( 0 );
- dx2 = params.getDimension( 1 );
- dz = params.getDimension( 2 );
- Trd envelope = new Trd( params.getName() + "Trd", dx1, dx2, dy1, dy2, dz );
- LogicalVolume volume = new LogicalVolume( params.getName() + "Volume", envelope, vacuum );
- makeModuleComponents( volume, params );
+ dx1 = params.getDimension(0);
+ dx2 = params.getDimension(1);
+ dz = params.getDimension(2);
+ Trd envelope = new Trd(params.getName() + "Trd", dx1, dx2, dy1, dy2, dz);
+ LogicalVolume volume = new LogicalVolume(params.getName() + "Volume", envelope, vacuum);
+ makeModuleComponents(volume, params);
return volume;
}
- private void makeModuleComponents( LogicalVolume moduleVolume, SiTrackerModuleParameters moduleParameters )
+ private void makeModuleComponents(LogicalVolume moduleVolume, SiTrackerModuleParameters moduleParameters)
{
- Trd trd = ( Trd ) moduleVolume.getSolid();
+ Trd trd = (Trd)moduleVolume.getSolid();
double x1 = trd.getXHalfLength1();
double x2 = trd.getXHalfLength2();
@@ -227,14 +225,15 @@
String moduleName = moduleVolume.getName();
int sensor = 0;
- for ( SiTrackerModuleComponentParameters component : moduleParameters )
+ for (SiTrackerModuleComponentParameters component : moduleParameters)
{
double thickness = component.getThickness();
- IMaterial material = MaterialStore.getInstance().get( component.getMaterialName() );
- if ( material == null )
+ IMaterial material = MaterialStore.getInstance().get(component.getMaterialName());
+ if (material == null)
{
- throw new RuntimeException( "The material " + component.getMaterialName() + " does not exist in the materials database." );
+ throw new RuntimeException("The material " + component.getMaterialName()
+ + " does not exist in the materials database.");
}
boolean sensitive = component.isSensitive();
int componentNumber = component.getComponentNumber();
@@ -243,137 +242,115 @@
String componentName = moduleName + "_component" + componentNumber;
- Trd sliceTrd = new Trd( componentName + "_trd", x1, x2, thickness / 2, thickness / 2, z );
+ Trd sliceTrd = new Trd(componentName + "_trd", x1, x2, thickness / 2, thickness / 2, z);
- LogicalVolume volume = new LogicalVolume( componentName, sliceTrd, material );
+ LogicalVolume volume = new LogicalVolume(componentName, sliceTrd, material);
double zrot = 0;
- if ( sensitive )
+ if (sensitive)
{
- if ( sensor > 1 )
+ if (sensor > 1)
{
- throw new RuntimeException( "Exceeded maximum of 2 sensors per module." );
+ throw new RuntimeException("Exceeded maximum of 2 sensors per module.");
}
// Flip 180 deg for 1st sensor.
- if ( sensor == 0 )
+ if (sensor == 0)
{
zrot = Math.PI;
}
++sensor;
}
- Translation3D position = new Translation3D( 0., posY, 0 );
- RotationGeant rotation = new RotationGeant( 0, 0, zrot );
- PhysicalVolume pv = new PhysicalVolume( new Transform3D( position, rotation ),
- componentName,
- volume,
- moduleVolume,
- componentNumber );
- pv.setSensitive( sensitive );
+ Translation3D position = new Translation3D(0., posY, 0);
+ RotationGeant rotation = new RotationGeant(0, 0, zrot);
+ PhysicalVolume pv =
+ new PhysicalVolume(new Transform3D(position, rotation), componentName, volume, moduleVolume,
+ componentNumber);
+ pv.setSensitive(sensitive);
posY += thickness / 2;
}
}
- private void setupSensorDetectorElements( Subdetector subdet )
+ private void setupSensorDetectorElements(Subdetector subdet)
{
- SiTrackerIdentifierHelper helper = ( SiTrackerIdentifierHelper ) subdet.getDetectorElement()
- .getIdentifierHelper();
+ SiTrackerIdentifierHelper helper = (SiTrackerIdentifierHelper)subdet.getDetectorElement().getIdentifierHelper();
- for ( IDetectorElement endcap : subdet.getDetectorElement().getChildren() )
+ for (IDetectorElement endcap : subdet.getDetectorElement().getChildren())
{
- for ( IDetectorElement layer : endcap.getChildren() )
+ for (IDetectorElement layer : endcap.getChildren())
{
- for ( IDetectorElement module : layer.getChildren() )
+ for (IDetectorElement module : layer.getChildren())
{
IPhysicalVolume modulePhysVol = module.getGeometry().getPhysicalVolume();
IPhysicalVolumePath modulePath = module.getGeometry().getPath();
int sensorId = 0;
- for ( IPhysicalVolume pv : modulePhysVol.getLogicalVolume().getDaughters() )
+ for (IPhysicalVolume pv : modulePhysVol.getLogicalVolume().getDaughters())
{
- if ( pv.isSensitive() )
+ if (pv.isSensitive())
{
- IIdentifierDictionary iddict = subdet.getDetectorElement().getIdentifierHelper()
- .getIdentifierDictionary();
+ IIdentifierDictionary iddict =
+ subdet.getDetectorElement().getIdentifierHelper().getIdentifierDictionary();
- ExpandedIdentifier expId = new ExpandedIdentifier( iddict.getNumberOfFields() );
- expId.setValue( iddict.getFieldIndex( "system" ), subdet.getSystemID() );
+ ExpandedIdentifier expId = new ExpandedIdentifier(iddict.getNumberOfFields());
+ expId.setValue(iddict.getFieldIndex("system"), subdet.getSystemID());
- if ( helper.isEndcapPositive( endcap.getIdentifier() ) )
+ if (helper.isEndcapPositive(endcap.getIdentifier()))
{
- expId.setValue( iddict.getFieldIndex( "barrel" ), helper.getEndcapPositiveValue() );
+ expId.setValue(iddict.getFieldIndex("barrel"), helper.getEndcapPositiveValue());
}
- else if ( helper.isEndcapNegative( endcap.getIdentifier() ) )
+ else if (helper.isEndcapNegative(endcap.getIdentifier()))
{
- expId.setValue( iddict.getFieldIndex( "barrel" ), helper.getEndcapNegativeValue() );
+ expId.setValue(iddict.getFieldIndex("barrel"), helper.getEndcapNegativeValue());
}
else
{
- throw new RuntimeException( endcap.getName() + " is not a positive or negative endcap!" );
+ throw new RuntimeException(endcap.getName() + " is not a positive or negative endcap!");
}
- expId.setValue( iddict.getFieldIndex( "layer" ), layer.getIdentifierHelper().getValue(
- layer.getIdentifier(),
- "layer" ) );
- expId.setValue( iddict.getFieldIndex( "module" ), ( ( SiTrackerModule ) module )
- .getModuleId() );
- expId.setValue( iddict.getFieldIndex( "sensor" ), sensorId );
+ expId.setValue(iddict.getFieldIndex("layer"), layer.getIdentifierHelper().getValue(
+ layer.getIdentifier(), "layer"));
+ expId.setValue(iddict.getFieldIndex("module"), ((SiTrackerModule)module).getModuleId());
+ expId.setValue(iddict.getFieldIndex("sensor"), sensorId);
- IIdentifier id = IdentifierUtil.pack( iddict, expId );
+ IIdentifier id = IdentifierUtil.pack(iddict, expId);
String sensorPath = modulePath.toString() + "/" + pv.getName();
String sensorName = module.getName() + "_sensor" + sensorId;
- SiSensor sensor = new SiSensor( sensorId, sensorName, module, sensorPath, id );
+ SiSensor sensor = new SiSensor(sensorId, sensorName, module, sensorPath, id);
// Set up SiStrips for the sensors
/*
- * Trd sensor_solid =
- * (Trd)sensor.getGeometry().getLogicalVolume().getSolid();
+ * Trd sensor_solid = (Trd)sensor.getGeometry().getLogicalVolume().getSolid();
*
- * Polygon3D n_side = sensor_solid.getFacesNormalTo(new
- * BasicHep3Vector(0,-1,0)).get(0); Polygon3D p_side =
- * sensor_solid.getFacesNormalTo(new
- * BasicHep3Vector(0,1,0)).get(0);
+ * Polygon3D n_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,-1,0)).get(0);
+ * Polygon3D p_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,1,0)).get(0);
*
- * //System.out.println("Plane of p_side polygon has... ");
- * //System
- * .out.println(" normal: "+p_side
- * .getNormal());
- * //System.out.println(" distance: "
- * +p_side.getDistance()); //for (Point3D point :
- * p_side.getVertices()) //{ //
- * System.out.println(" Vertex: "+point); //}
+ * //System.out.println("Plane of p_side polygon has... "); //System
+ * .out.println(" normal: "+p_side .getNormal());
+ * //System.out.println(" distance: " +p_side.getDistance()); //for
+ * (Point3D point : p_side.getVertices()) //{ // System.out.println(" Vertex: "+point);
+ * //}
*
- * //System.out.println("Plane of n_side polygon has... ");
- * //System
- * .out.println(" normal: "+n_side
- * .getNormal());
- * //System.out.println(" distance: "
- * +n_side.getDistance());
+ * //System.out.println("Plane of n_side polygon has... "); //System
+ * .out.println(" normal: "+n_side .getNormal());
+ * //System.out.println(" distance: " +n_side.getDistance());
*
- * // Bias the sensor
- * sensor.setBiasSurface(ChargeCarrier.HOLE,p_side);
+ * // Bias the sensor sensor.setBiasSurface(ChargeCarrier.HOLE,p_side);
* sensor.setBiasSurface(ChargeCarrier.ELECTRON,n_side);
*
- * double strip_angle =
- * Math.atan2(sensor_solid.getXHalfLength2() -
- * sensor_solid.getXHalfLength1(),
- * sensor_solid.getZHalfLength() * 2);
+ * double strip_angle = Math.atan2(sensor_solid.getXHalfLength2() -
+ * sensor_solid.getXHalfLength1(), sensor_solid.getZHalfLength() * 2);
*
* ITranslation3D electrodes_position = new
- * Translation3D(VecOp.mult(-p_side.getDistance(),new
- * BasicHep3Vector(0,0,1))); // translate to outside of
- * polygon IRotation3D electrodes_rotation = new
- * RotationPassiveXYZ(-Math.PI/2,0,strip_angle); Transform3D
- * electrodes_transform = new Transform3D(electrodes_position,
- * electrodes_rotation);
+ * Translation3D(VecOp.mult(-p_side.getDistance(),new BasicHep3Vector(0,0,1))); // translate
+ * to outside of polygon IRotation3D electrodes_rotation = new
+ * RotationPassiveXYZ(-Math.PI/2,0,strip_angle); Transform3D electrodes_transform = new
+ * Transform3D(electrodes_position, electrodes_rotation);
*
- * // Free calculation of readout electrodes, sense electrodes
- * determined thereon SiSensorElectrodes readout_electrodes =
- * new
- * SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform
- * ); SiSensorElectrodes sense_electrodes = new
- * SiStrips(ChargeCarrier
- * .HOLE,0.025,(readout_electrodes.getNCells
+ * // Free calculation of readout electrodes, sense electrodes determined thereon
+ * SiSensorElectrodes readout_electrodes = new
+ * SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform ); SiSensorElectrodes
+ * sense_electrodes = new SiStrips(ChargeCarrier .HOLE,0.025,(readout_electrodes.getNCells
* ()*2-1),sensor,electrodes_transform);
*
* sensor.setSenseElectrodes(sense_electrodes);