GeomConverter/src/org/lcsim/detector/tracker/silicon
diff -u -r1.4 -r1.5
--- SiTrackerIdentifierHelper.java 2 Jul 2008 21:38:32 -0000 1.4
+++ SiTrackerIdentifierHelper.java 24 Apr 2009 00:11:40 -0000 1.5
@@ -11,7 +11,7 @@
* Decode identifier fields that are specific to the tracking sub-system.
*
* @author Jeremy McCormick
- * @version $Id: SiTrackerIdentifierHelper.java,v 1.4 2008/07/02 21:38:32 jeremy Exp $
+ * @version $Id: SiTrackerIdentifierHelper.java,v 1.5 2009/04/24 00:11:40 tknelson Exp $
*/
public class SiTrackerIdentifierHelper
extends DetectorIdentifierHelper
@@ -19,12 +19,12 @@
int moduleIdx=-1;
int sensorIdx=-1;
int sideIdx=-1;
- int stripIdx=-1;
+ int electrodeIdx=-1;
IIdentifierField moduleField = null;
IIdentifierField sensorField = null;
IIdentifierField sideField = null;
- IIdentifierField stripField = null;
+ IIdentifierField electrodeField = null;
public SiTrackerIdentifierHelper(IDetectorElement subdetector, IIdentifierDictionary iddict, SystemMap sysMap)
{
@@ -33,12 +33,12 @@
moduleIdx = iddict.getFieldIndex("module");
sensorIdx = iddict.getFieldIndex("sensor");
sideIdx = iddict.getFieldIndex("side");
- stripIdx = iddict.getFieldIndex("strip");
+ electrodeIdx = iddict.getFieldIndex("strip");
moduleField = iddict.getField(moduleIdx);
sensorField = iddict.getField(sensorIdx);
sideField = iddict.getField(sideIdx);
- stripField = iddict.getField(stripIdx);
+ electrodeField = iddict.getField(electrodeIdx);
}
/**
@@ -69,12 +69,12 @@
}
/**
- * The strip number.
- * @return The strip number.
+ * The electrode number.
+ * @return The electrode number.
*/
- public int getStripValue(IIdentifier id)
+ public int getElectrodeValue(IIdentifier id)
{
- return stripField.unpack(id);
+ return electrodeField.unpack(id);
}
/**
@@ -105,12 +105,12 @@
}
/**
- * The strip number.
- * @return The strip number.
+ * The electrode number.
+ * @return The electrode number.
*/
- public int getStripValue(IExpandedIdentifier id)
+ public int getElectrodeValue(IExpandedIdentifier id)
{
- return id.getValue(stripIdx);
+ return id.getValue(electrodeIdx);
}
/**
@@ -141,11 +141,11 @@
}
/**
- * Get the strip field index.
+ * Get the electrode field index.
* @return The trip field index.
*/
- public int getStripIndex()
+ public int getElectrodeIndex()
{
- return stripIdx;
+ return electrodeIdx;
}
}
\ No newline at end of file
GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.32 -r1.33
--- SiTrackerEndcapConverter.java 6 Feb 2009 16:35:49 -0000 1.32
+++ SiTrackerEndcapConverter.java 24 Apr 2009 00:11:41 -0000 1.33
@@ -59,7 +59,7 @@
* Converter for SiTrackerEndcap.
*
* @author Jeremy McCormick, Tim Nelson
- * @version $Id: SiTrackerEndcapConverter.java,v 1.32 2009/02/06 16:35:49 jeremy Exp $
+ * @version $Id: SiTrackerEndcapConverter.java,v 1.33 2009/04/24 00:11:41 tknelson Exp $
*/
public class SiTrackerEndcapConverter
@@ -236,19 +236,17 @@
IMaterial material = detector.getTrackingVolume().getLogicalVolume().getMaterial();
String name = subdet.getName() + "_layer" + layern + "_wedge";
+
+ double wedge_margin = 0.0001;
+// double wedge_margin = 2.0;
double dz = (outerR - innerR) / 2;
double dy1, dy2;
dy1 = dy2 = thickness / 2;
double dx1, dx2;
double dphi = Math.PI / nwedges;
- dx1 = innerR * Math.tan(dphi);
- dx2 = outerR * Math.tan(dphi);
-
- // pull corners in by 0.1 microns to eliminate overlaps.
- dx1 -= 0.0001;
- dx2 -= 0.0001;
- dz -= 0.0001;
+ dx1 = innerR * Math.tan(dphi) - wedge_margin/Math.cos(dphi);
+ dx2 = outerR * Math.tan(dphi) - wedge_margin/Math.cos(dphi);
Trd wedgeTrd = new Trd(name,dx1,dx2,dy1,dy2,dz);
@@ -358,7 +356,14 @@
double dy = wedgeTrd.getYHalfLength1();
double deltax = dx2 - dx1;
double side_slope = deltax/(2*dz);
-
+
+ double module_margin = 0.0001;
+// double module_margin = 1.0;
+ double box_margin = module_margin;
+ double side_angle = Math.atan(side_slope);
+ double trap_margin_1 = module_margin*(1.0/Math.cos(side_angle)-Math.sin(side_angle));
+ double trap_margin_2 = module_margin*(1.0/Math.cos(side_angle)+Math.sin(side_angle));
+
List<Double> zcenters = new ArrayList<Double>();
List<Double> zsizes = new ArrayList<Double>();
List<Double> xsizes1 = new ArrayList<Double>();
@@ -446,7 +451,7 @@
String sliceName = "module" + imodule;
- Box sliceBox = new Box(sliceName,xsize_box,dy,zsizes.get(i));
+ Box sliceBox = new Box(sliceName,xsize_box-box_margin,dy,zsizes.get(i)-box_margin);
ILogicalVolume sliceLV = new LogicalVolume(sliceName, sliceBox, sliceMaterial);
@@ -470,7 +475,7 @@
{
String sliceName = "module" + imodule;
- Trd sliceTrd = new Trd(sliceName,xsizes1.get(i),xsizes2.get(i),dy,dy,zsizes.get(i));
+ Trd sliceTrd = new Trd(sliceName,xsizes1.get(i)-trap_margin_1,xsizes2.get(i)-trap_margin_2,dy,dy,zsizes.get(i)-box_margin);
ILogicalVolume sliceLV = new LogicalVolume(sliceName, sliceTrd, sliceMaterial);
@@ -494,20 +499,23 @@
{
double xoffset = xsize_box*nboxes;
-
- double xsize1 = (xsizes1.get(i)-xoffset)/ntraps;
+
+ double average_margin_1 = (box_margin+trap_margin_1)/2;
+ double average_margin_2 = (box_margin+trap_margin_2)/2;
+
+ double xsize1 = (xsizes1.get(i)-xoffset)/ntraps - average_margin_1;
if (xsize1_min == 0.0) xsize1_min = xsize1;
- double xsize2 = (xsizes2.get(i)-xoffset)/ntraps;
+ double xsize2 = (xsizes2.get(i)-xoffset)/ntraps - average_margin_2;
- double xcenter = (xsize1+xsize2)/2 + xoffset;
+ double xcenter = (xsize1+xsize2)/2 + xoffset + box_margin;
double theta = Math.abs(Math.atan(side_slope/2));
for (int ix = -1; ix <=1; ix=ix+2)
{
String sliceName = "module" + imodule;
-
- Trap sliceTrap = new Trap(sliceName,zsizes.get(i),theta*ix,0.0,dy,xsize1,xsize1,0.0,dy,xsize2,xsize2,0.0);
+
+ Trap sliceTrap = new Trap(sliceName,zsizes.get(i)-box_margin,theta*ix,0.0,dy,xsize1,xsize1,0.0,dy,xsize2,xsize2,0.0);
ILogicalVolume sliceLV = new LogicalVolume(sliceName, sliceTrap, sliceMaterial);
@@ -536,8 +544,8 @@
double moduleZ = moduleBox.getZHalfLength();
// pull corners in by 0.5 microns to eliminate overlaps.
- moduleX -= 0.0005;
- moduleZ -= 0.0005;
+// moduleX -= 0.0005;
+// moduleZ -= 0.0005;
for (SiTrackerModuleComponentParameters component : moduleParameters)
{
@@ -572,9 +580,9 @@
double z = trd.getZHalfLength();
// pull corners in by 0.5 microns to eliminate overlaps.
- x1 -= 0.0005;
- x2 -= 0.0005;
- z -= 0.0005;
+// x1 -= 0.0005;
+// x2 -= 0.0005;
+// z -= 0.0005;
double posY = -y1;
@@ -618,11 +626,11 @@
double posY = -y1;
// pull corners in by 0.5 microns to eliminate overlaps.
- x1 -= 0.0005;
- x2 -= 0.0005;
- x3 -= 0.0005;
- x4 -= 0.0005;
- z -= 0.0005;
+// x1 -= 0.0005;
+// x2 -= 0.0005;
+// x3 -= 0.0005;
+// x4 -= 0.0005;
+// z -= 0.0005;
for (SiTrackerModuleComponentParameters component : moduleParameters)
{