4 modified files
GeomConverter/src/org/lcsim/geometry/layer
diff -u -r1.6 -r1.7
--- Layer.java 18 Jul 2005 18:00:04 -0000 1.6
+++ Layer.java 21 Sep 2005 01:37:17 -0000 1.7
@@ -9,48 +9,72 @@
import java.util.List;
import java.util.ArrayList;
+import static java.lang.Math.abs;
+
/**
*
* @author jeremym
*/
-public class Layer {
+public class Layer
+{
- List<LayerSlice> slices;
+ List<LayerSlice> slices;
double preOffset = 0;
public Layer()
{
slices = new ArrayList();
- }
+ }
+
+ public void setPreOffset(double preOffset)
+ {
+ if ( abs(preOffset) < 1E-7 )
+ {
+ preOffset = 0;
+ }
+
+ this.preOffset = preOffset;
+ }
+
+ public double getPreOffset()
+ {
+ return preOffset;
+ }
public void addSlice(LayerSlice s)
{
slices.add(s);
- }
-
+ }
+
public double getThickness()
{
- double wid = 0.;
-
- for ( LayerSlice l : slices) {
+ double wid = 0.;
+
+ for ( LayerSlice l : slices)
+ {
wid += l.getThickness();
}
- wid += preOffset;
-
return wid;
}
+ public double getThicknessWithPreOffset()
+ {
+ return getThickness() + getPreOffset();
+ }
+
public double getThicknessToSensitiveMid()
{
int i = findIndexOfFirstSensitiveSlice();
double thickness = 0.;
- if ( i != -1) {
+ if ( i != -1)
+ {
- for ( int ii = 0; ii < i; ii++) {
+ for ( int ii = 0; ii < i; ii++)
+ {
thickness += slices.get(ii).getThickness();
}
@@ -66,19 +90,23 @@
double thickness = 0.;
- if ( i != -1) {
+ if ( i != -1)
+ {
- for ( int ii = 0; ii < i; ii++) {
+ for ( int ii = 0; ii < i; ii++)
+ {
thickness += slices.get(ii).getThickness();
- }
+ }
}
return thickness;
}
- public LayerSlice getSlice(int idx) {
- if ( idx > ( slices.size() - 1) ) {
- throw new IllegalArgumentException("LayerSlice idx out of range.");
+ public LayerSlice getSlice(int idx)
+ {
+ if ( idx > ( slices.size() - 1) )
+ {
+ throw new IllegalArgumentException("LayerSlice idx out of range.");
}
return slices.get(idx);
@@ -90,19 +118,21 @@
}
public int findIndexOfFirstSensitiveSlice()
- {
- int i = 0;
+ {
+ int i = 0;
boolean fnd = false;
- for ( LayerSlice l : slices ) {
+ for ( LayerSlice l : slices )
+ {
if ( l.isSensitive() )
- {
+ {
fnd = true;
break;
}
i++;
}
- if (!fnd) {
+ if (!fnd)
+ {
i = -1;
}
GeomConverter/src/org/lcsim/geometry/layer
diff -u -r1.6 -r1.7
--- LayerStack.java 18 Jul 2005 18:00:04 -0000 1.6
+++ LayerStack.java 21 Sep 2005 01:37:17 -0000 1.7
@@ -61,7 +61,11 @@
for ( int i = is; i <= ie; i++ )
{
- thick += getLayer(i).getThickness();
+ Layer layer = getLayer(i);
+ thick += getLayer(i).getThicknessWithPreOffset();
+// System.out.println("layer " + i + " thickness = " + layer.getThickness());
+// System.out.println("layer " + i + " offset = " + layer.getPreOffset());
+// System.out.println("layer " + i + " distance = " + thick);
}
return thick;
GeomConverter/src/org/lcsim/geometry/subdetector
diff -u -r1.10 -r1.11
--- DiskTracker.java 24 Aug 2005 07:05:07 -0000 1.10
+++ DiskTracker.java 21 Sep 2005 01:37:17 -0000 1.11
@@ -8,6 +8,7 @@
import hep.graphics.heprep.HepRepInstanceTree;
import hep.graphics.heprep.HepRepType;
import hep.graphics.heprep.HepRepTypeTree;
+import org.lcsim.geometry.layer.LayerStack;
import java.util.Iterator;
import java.util.List;
@@ -62,20 +63,42 @@
innerR = new double[n];
outerR = new double[n];
innerZ = new double[n];
+
thickness = new double[n];
+ LayerStack layerStack = getLayering().getLayerStack();
+ double prevOuterZ = 0;
+ double thisOffset = 0;
for (int i=0; i<n; i++)
{
Element layer = (Element) layers.get(i);
innerR[i] = layer.getAttribute("inner_r").getDoubleValue();
outerR[i] = layer.getAttribute("outer_r").getDoubleValue();
innerZ[i] = layer.getAttribute("inner_z").getDoubleValue();
+
+ /* Base offset for this layer */
+ thisOffset = innerZ[i];
+
+ /* Subtract the previous outerZ to get distance between adjacent layers */
+ thisOffset -= prevOuterZ;
+
+ /* Set next outerZ */
+ prevOuterZ = innerZ[i];
+
+ /* Store the pre-offset into the layer object for distance calcs */
+ layerStack.getLayer(i).setPreOffset(thisOffset);
+
thickness[i] = 0;
for (Iterator iter = layer.getChildren("slice").iterator(); iter.hasNext();)
{
Element slice = (Element) iter.next();
thickness[i] += slice.getAttribute("thickness").getDoubleValue();
}
+
+ /* Incr next outerZ by thickness of this layer */
+ prevOuterZ += thickness[i];
}
+
+ //System.out.println("DiskTracker total thickness=" + getLayering().getThickness());
}
public void appendHepRep(HepRepFactory factory, HepRep heprep)
GeomConverter/src/org/lcsim/geometry/subdetector
diff -u -r1.11 -r1.12
--- MultiLayerTracker.java 24 Aug 2005 07:05:07 -0000 1.11
+++ MultiLayerTracker.java 21 Sep 2005 01:37:17 -0000 1.12
@@ -1,6 +1,5 @@
package org.lcsim.geometry.subdetector;
-import org.lcsim.geometry.subdetector.TrackerIDDecoder;
import java.util.Iterator;
import java.util.List;
import org.jdom.DataConversionException;
@@ -12,6 +11,7 @@
import hep.graphics.heprep.HepRepInstanceTree;
import hep.graphics.heprep.HepRepType;
import hep.graphics.heprep.HepRepTypeTree;
+import org.lcsim.geometry.layer.LayerStack;
/**
*
@@ -20,11 +20,12 @@
*/
public class MultiLayerTracker extends AbstractTracker
{
+ /* FIXME: This is a bad way to store geometry data for each layer. */
private double[] innerR;
private double[] outerZ;
- private double[] thickness;
-
+ /* FIXME: This duplicates functionality provided by the layering engine. */
+ private double[] thickness;
public double[] getInnerR()
{
@@ -48,24 +49,43 @@
}
private void build(Element node) throws DataConversionException
- {
+ {
List layers = node.getChildren("layer");
int n = layers.size();
innerR = new double[n];
outerZ = new double[n];
thickness = new double[n];
+ LayerStack layerStack = getLayering().getLayerStack();
+ double prevOuterR = 0;
+ double thisOffset = 0;
for (int i=0; i<n; i++)
{
Element layer = (Element) layers.get(i);
innerR[i] = layer.getAttribute("inner_r").getDoubleValue();
- outerZ[i] = layer.getAttribute("outer_z").getDoubleValue();
+
+ /* Base offset for this layer */
+ thisOffset = innerR[i];
+
+ /* Subtract the previous outerR to get distance between adjacent layers */
+ thisOffset -= prevOuterR;
+
+ /* Set next outerR */
+ prevOuterR = innerR[i];
+
+ /* Store the pre-offset into the layer object for distance calcs */
+ layerStack.getLayer(i).setPreOffset(thisOffset);
+
thickness[i] = 0;
for (Iterator iter = layer.getChildren("slice").iterator(); iter.hasNext();)
{
Element slice = (Element) iter.next();
thickness[i] += slice.getAttribute("thickness").getDoubleValue();
}
+
+ /* Incr next outerR by thickness of this layer */
+ prevOuterR += thickness[i];
}
+// System.out.println("layering total thickness = " + layerStack.getTotalThickness());
}
public void appendHepRep(HepRepFactory factory, HepRep heprep)
CVSspam 0.2.8