Author: [log in to unmask]
Date: Sat Mar 14 12:27:39 2015
New Revision: 2451
Log:
Updated the TriggerModule class. It now exclusively uses the hardcoded hardware cluster position mappings instead of the LCSim positions. The LCSim coordinate system is fairly different from the hardware system and makes it impossible to align the behavior of the SSP hardware cuts and the simulated software cuts. The original method remains as a deprecated legacy method for LCSim Cluster objects.
Modified:
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TriggerModule.java
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TriggerModule.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TriggerModule.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/triggerbank/TriggerModule.java Sat Mar 14 12:27:39 2015
@@ -1,11 +1,11 @@
package org.hps.recon.ecal.triggerbank;
-import java.awt.Point;
import java.util.HashMap;
import java.util.Map;
import org.hps.recon.ecal.daqconfig.PairTriggerConfig;
import org.hps.recon.ecal.daqconfig.SinglesTriggerConfig;
+import org.lcsim.event.CalorimeterHit;
import org.lcsim.event.Cluster;
/**
@@ -72,9 +72,6 @@
// Trigger cut settings map.
private final Map<String, Double> cuts = new HashMap<String, Double>(11);
- // Crystal x/y-index to location map.
- private static final Map<Point, double[]> locationMap = new HashMap<Point, double[]>(442);
-
/**
* Creates an <code>SSPTriggerModule</code> that accepts all single
* cluster and cluster pair events.
@@ -361,6 +358,116 @@
}
/**
+ * Gets the size of a cluster.
+ * @param cluster - The cluster for which to obtain the size.
+ * @return Returns the size as an <code>int</code>.
+ */
+ public static final double getClusterHitCount(Cluster cluster) {
+ return cluster.getCalorimeterHits().size();
+ }
+
+ /**
+ * Gets the seed hit from a <code>Cluster</code> object.
+ * @param cluster - The cluster.
+ * @return Returns the seed hit as a <code>CalorimeterHit</code>
+ * object.
+ */
+ public static final CalorimeterHit getClusterSeedHit(Cluster cluster) {
+ if(getClusterHitCount(cluster) > 0) {
+ return cluster.getCalorimeterHits().get(0);
+ } else {
+ throw new NullPointerException("Cluster does not define hits!");
+ }
+ }
+
+ /**
+ * Gets the time-stamp of a cluster.
+ * @param cluster - The cluster for which to obtain the time.
+ * @return Returns the time as a <code>double</code>.
+ */
+ public static final double getClusterTime(Cluster cluster) {
+ return getClusterSeedHit(cluster).getTime();
+ }
+
+ /**
+ * Gets the x-position of a cluster in millimeters in the hardware
+ * coordinate system.
+ * @param cluster - The cluster of which to get the x-position.
+ * @return Returns the cluster x-position.
+ */
+ public static double getClusterX(Cluster cluster) {
+ return getCrystalPosition(getClusterXIndex(cluster), getClusterYIndex(cluster))[0];
+ }
+
+ /**
+ * Gets the x-position of a cluster in millimeters in the hardware
+ * coordinate system.
+ * @param cluster - The cluster of which to get the x-position.
+ * @return Returns the cluster x-position.
+ */
+ public static double getClusterX(SSPCluster cluster) {
+ return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[0];
+ }
+
+ /**
+ * Gets the x-index of a cluster.
+ * @param cluster - The cluster for which to obtain the index.
+ * @return Returns the index as an <code>int</code>.
+ */
+ public static final int getClusterXIndex(Cluster cluster) {
+ return getClusterSeedHit(cluster).getIdentifierFieldValue("ix");
+ }
+
+ /**
+ * Gets the y-position of a cluster in millimeters in the hardware
+ * coordinate system.
+ * @param cluster - The cluster of which to get the y-position.
+ * @return Returns the cluster y-position.
+ */
+ public static double getClusterY(Cluster cluster) {
+ return getCrystalPosition(getClusterXIndex(cluster), getClusterYIndex(cluster))[1];
+ }
+
+ /**
+ * Gets the y-position of a cluster in millimeters in the hardware
+ * coordinate system.
+ * @param cluster - The cluster of which to get the y-position.
+ * @return Returns the cluster y-position.
+ */
+ public static double getClusterY(SSPCluster cluster) {
+ return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[1];
+ }
+
+ /**
+ * Gets the y-index of a cluster.
+ * @param cluster - The cluster for which to obtain the index.
+ * @return Returns the index as an <code>int</code>.
+ */
+ public static final int getClusterYIndex(Cluster cluster) {
+ return getClusterSeedHit(cluster).getIdentifierFieldValue("iy");
+ }
+
+ /**
+ * Gets the z-position of a cluster in millimeters in the hardware
+ * coordinate system.
+ * @param cluster - The cluster of which to get the z-position.
+ * @return Returns the cluster z-position.
+ */
+ public static double getClusterZ(Cluster cluster) {
+ return getCrystalPosition(getClusterXIndex(cluster), getClusterYIndex(cluster))[2];
+ }
+
+ /**
+ * Gets the z-position of a cluster in millimeters in the hardware
+ * coordinate system.
+ * @param cluster - The cluster of which to get the z-position.
+ * @return Returns the cluster z-position.
+ */
+ public static double getClusterZ(SSPCluster cluster) {
+ return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[2];
+ }
+
+ /**
* Gets the value used for the cluster total energy cut.
* @param cluster - The cluster from which the value should be
* derived.
@@ -419,10 +526,10 @@
public static double getValueCoplanarity(Cluster[] clusterPair) {
// Get the variables used by the calculation.
double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
- double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
+ double z[] = { getClusterZ(clusterPair[0]), getClusterZ(clusterPair[1]) };
// Return the calculated value.
- return getValueCoplanarity(x, y);
+ return getValueCoplanarity(x, z);
}
/**
@@ -434,10 +541,29 @@
public static double getValueCoplanarity(SSPCluster[] clusterPair) {
// Get the variables used by the calculation.
double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
- double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
+ double z[] = { getClusterZ(clusterPair[0]), getClusterZ(clusterPair[1]) };
// Return the calculated value.
- return getValueCoplanarity(x, y);
+ return getValueCoplanarity(x, z);
+ }
+
+ /**
+ * Calculates the value used by the coplanarity cut using the LCSim
+ * coordinate system. This method will not match the hardware results.
+ * @param clusterPair - The cluster pair from which the value should
+ * be calculated.
+ * @return Returns the cut value.
+ */
+ @Deprecated
+ public static double getValueCoplanarityLegacy(Cluster[] clusterPair) {
+ // Get the variables used by the calculation.
+ double x[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("ix"),
+ getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("ix") };
+ double y[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("iy"),
+ getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("iy") };
+
+ // Return the calculated value.
+ return getValueCoplanarityLegacy(x, y);
}
/**
@@ -480,10 +606,10 @@
// Get the variables used by the calculation.
double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
- double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
+ double z[] = { getClusterZ(clusterPair[0]), getClusterZ(clusterPair[1]) };
// Perform the calculation.
- return getValueEnergySlope(energy, x, y, energySlopeParamF);
+ return getValueEnergySlope(energy, x, z, energySlopeParamF);
}
/**
@@ -498,10 +624,33 @@
// Get the variables used by the calculation.
double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
double x[] = { getClusterX(clusterPair[0]), getClusterX(clusterPair[1]) };
- double y[] = { getClusterY(clusterPair[0]), getClusterY(clusterPair[1]) };
+ double z[] = { getClusterZ(clusterPair[0]), getClusterZ(clusterPair[1]) };
// Perform the calculation.
- return getValueEnergySlope(energy, x, y, energySlopeParamF);
+ return getValueEnergySlope(energy, x, z, energySlopeParamF);
+ }
+
+ /**
+ * Calculates the value used by the energy slope cut the LCSim
+ * coordinate system. This method will not match the hardware
+ * results.
+ * @param clusterPair - The cluster pair from which the value should
+ * be calculated.
+ * @param energySlopeParamF - The value of the variable F in the
+ * energy slope equation E_low + R_min * F.
+ * @return Returns the energy slope value.
+ */
+ @Deprecated
+ public static double getValueEnergySlopeLegacy(Cluster[] clusterPair, double energySlopeParamF) {
+ // Get the variables used by the calculation.
+ double[] energy = { clusterPair[0].getEnergy(), clusterPair[1].getEnergy() };
+ double x[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("ix"),
+ getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("ix") };
+ double y[] = { getClusterSeedHit(clusterPair[0]).getIdentifierFieldValue("iy"),
+ getClusterSeedHit(clusterPair[1]).getIdentifierFieldValue("iy") };
+
+ // Perform the calculation.
+ return getValueEnergySlopeLegacy(energy, x, y, energySlopeParamF);
}
/**
@@ -717,20 +866,6 @@
return pairTimeCoincidenceCut(getValueTimeCoincidence(clusterPair));
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/**
* Checks whether the argument hit count meets the minimum required
* hit count.
@@ -811,50 +946,37 @@
/**
* Calculates the distance between the origin and a cluster.
* @param x - The cluster's x-position.
- * @param y - The cluster's y-position.
+ * @param z - The cluster's z-position.
* @return Returns displacement of the cluster.
*/
- private static double getClusterDistance(double x, double y) {
- return Math.hypot(x - ORIGIN_X, y);
- }
-
- /**
- * Gets the x-position of a cluster.
- * @param cluster - The cluster of which to get the x-position.
- * @return Returns the cluster x-position.
- */
- private static double getClusterX(Cluster cluster) {
- return getCrystalPosition(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
- cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"))[0];
- }
-
- /**
- * Gets the x-position of a cluster.
- * @param cluster - The cluster of which to get the x-position.
- * @return Returns the cluster x-position.
- */
- private static double getClusterX(SSPCluster cluster) {
- return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[0];
- }
-
- /**
- * Gets the y-position of a cluster.
- * @param cluster - The cluster of which to get the y-position.
- * @return Returns the cluster y-position.
- */
- private static double getClusterY(Cluster cluster) {
- return getCrystalPosition(cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
- cluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"))[1];
- }
-
- /**
- * Gets the y-position of a cluster.
- * @param cluster - The cluster of which to get the y-position.
- * @return Returns the cluster y-position.
- */
- private static double getClusterY(SSPCluster cluster) {
- return getCrystalPosition(cluster.getXIndex(), cluster.getYIndex())[1];
- }
+ private static double getClusterDistance(double x, double z) {
+ return Math.hypot(x, z);
+ }
+
+ /**
+ * Gets the mapped position used by the SSP for a specific crystal.
+ * @param ix - The crystal x-index.
+ * @param iy - The crystal y-index.
+ * @return Returns the crystal position as a <double</code> array
+ * where the coordinates are ordered from the lowest to highest
+ * index as x, y, z.
+ * @throws IndexOutOfBoundsException Occurs if in either of the
+ * cases where <code>ix == 0</code> or <code>|ix| > 23</code> for
+ * the x-index and either of the cases where <code>iy == 0</code>
+ * or <code>|iy| > 5</code> for the y-index.
+ */
+ private static double[] getCrystalPosition(int ix, int iy) throws IndexOutOfBoundsException {
+ // Make sure that the requested crystal is a valid crystal.
+ if(ix == 0 || ix < -23 || ix > 23) {
+ throw new IndexOutOfBoundsException(String.format("Value \"%d\" is invalid for field x-index.", ix));
+ } if(iy == 0 || iy < -5 || iy > 5) {
+ throw new IndexOutOfBoundsException(String.format("Value \"%d\" is invalid for field y-index.", iy));
+ }
+
+ // Return the mapped position.
+ if(ix < 1) { return position[5 - iy][22 - ix]; }
+ else { return position[5 - iy][23 - ix]; }
+ }
/**
* Calculates the value used by the coplanarity cut.
@@ -864,7 +986,29 @@
* second clusters' y-positions.
* @return Returns the cluster pair's coplanarity.
*/
- private static double getValueCoplanarity(double[] x, double y[]) {
+ private static double getValueCoplanarity(double[] x, double z[]) {
+ // Get the cluster angles.
+ int[] clusterAngle = new int[2];
+ for(int i = 0; i < 2; i++) {
+ clusterAngle[i] = (int) Math.round(Math.atan(x[i] / z[i]) * 180.0 / Math.PI);
+ }
+
+ // Calculate the coplanarity cut value.
+ return Math.abs(clusterAngle[1] - clusterAngle[0]);
+ }
+
+ /**
+ * Calculates the value used by the coplanarity cut. This method
+ * is not accurate to the hardware is retained only for legacy
+ * purposes at this time.
+ * @param x - A two-dimensional array consisting of the first and
+ * second clusters' x-positions.
+ * @param y - A two-dimensional array consisting of the first and
+ * second clusters' y-positions.
+ * @return Returns the cluster pair's coplanarity.
+ */
+ @Deprecated
+ private static double getValueCoplanarityLegacy(double[] x, double y[]) {
// Get the cluster angles.
double[] clusterAngle = new double[2];
for(int i = 0; i < 2; i++) {
@@ -893,7 +1037,7 @@
* energy slope equation E_low + R_min * F.
* @return Returns the cut value.
*/
- private static double getValueEnergySlope(double energy[], double x[], double y[], double energySlopeParamF) {
+ private static double getValueEnergySlope(double energy[], double x[], double z[], double energySlopeParamF) {
// Determine which cluster is the lower-energy cluster.
int lei = energy[0] < energy[1] ? 0 : 1;
@@ -902,7 +1046,33 @@
double slopeParamE = energy[lei];
// Get the low energy cluster radial distance.
- double slopeParamR = getClusterDistance(x[lei], y[lei]);
+ double slopeParamR = Math.sqrt((x[lei] * x[lei]) + (z[lei] * z[lei]));
+
+ // Calculate the energy slope.
+ return slopeParamE + slopeParamR * energySlopeParamF;
+ }
+
+ /**
+ * Calculates the value used by the energy slope cut. This version
+ * is superseded by the <code>getValueEnergySlope</code>, which
+ * more accurately mirrors the hardware behavior.
+ * @param clusterPair - The cluster pair from which the value should
+ * be calculated.
+ * @param energySlopeParamF - The value of the variable F in the
+ * energy slope equation E_low + R_min * F.
+ * @return Returns the cut value.
+ */
+ @Deprecated
+ private static double getValueEnergySlopeLegacy(double energy[], double x[], double y[], double energySlopeParamF) {
+ // Determine which cluster is the lower-energy cluster.
+ int lei = energy[0] < energy[1] ? 0 : 1;
+
+ // E + R*F
+ // Get the low energy cluster energy.
+ double slopeParamE = energy[lei];
+
+ // Get the low energy cluster radial distance.
+ double slopeParamR = Math.sqrt((x[lei] * x[lei]) + (y[lei] * y[lei]));
// Calculate the energy slope.
return slopeParamE + slopeParamR * energySlopeParamF;
@@ -1006,483 +1176,200 @@
return (timeDifference <= cuts.get(PAIR_TIME_COINCIDENCE));
}
-
-
-
-
- /**
- * Gets the x/y/z location of a crystal from its x/y-indices.
- * @param ix - The crystal x-index.
- * @param iy - The crystal y-index.
- * @return Returns the crystal's x/y/z position in millimeters as
- * a size-three array of <code>double</code> primitives. Index 0
- * corresponds to x, 1 to y, and 2 to z.
- * @throws IllegalArgumentException Occurs if the values given for
- * <code>ix</code> and <code>iy</code> do not refer to a crystal.
- */
- private static final double[] getCrystalPosition(int ix, int iy) throws IllegalArgumentException {
- // Make sure that the location map is initialized.
- if(locationMap.isEmpty()) { initializeLocationMap(); }
-
- // Get the mapped location.
- double[] location = locationMap.get(new Point(ix, iy));
-
- // If it is null, produce an error.
- if(location == null) {
- throw new IllegalArgumentException(
- String.format("Crystal indices (%3d, %3d) do not map to a valid location.", ix, iy)
- );
- }
-
- // Otherwise, return the location.
- return location;
- }
-
- /**
- * Sets all of the mappings for the crystal index to position map.
- */
- private static final void initializeLocationMap() {
- locationMap.put(new Point( 23, 5), new double[] { -340.003, 97.065, 87.845 });
- locationMap.put(new Point( 22, 5), new double[] { -324.283, 97.450, 87.875 });
- locationMap.put(new Point( 21, 5), new double[] { -308.648, 97.810, 87.900 });
- locationMap.put(new Point( 20, 5), new double[] { -293.093, 98.150, 87.920 });
- locationMap.put(new Point( 19, 5), new double[] { -277.618, 98.470, 87.940 });
- locationMap.put(new Point( 18, 5), new double[] { -262.213, 98.765, 87.965 });
- locationMap.put(new Point( 17, 5), new double[] { -246.878, 99.040, 87.980 });
- locationMap.put(new Point( 16, 5), new double[] { -231.603, 99.290, 87.995 });
- locationMap.put(new Point( 15, 5), new double[] { -216.393, 99.520, 88.010 });
- locationMap.put(new Point( 14, 5), new double[] { -201.228, 99.725, 88.030 });
- locationMap.put(new Point( 13, 5), new double[] { -186.118, 99.905, 88.040 });
- locationMap.put(new Point( 12, 5), new double[] { -171.058, 100.070, 88.050 });
- locationMap.put(new Point( 11, 5), new double[] { -156.038, 100.205, 88.055 });
- locationMap.put(new Point( 10, 5), new double[] { -141.058, 100.325, 88.070 });
- locationMap.put(new Point( 9, 5), new double[] { -126.113, 100.415, 88.075 });
- locationMap.put(new Point( 8, 5), new double[] { -111.198, 100.485, 88.075 });
- locationMap.put(new Point( 7, 5), new double[] { -96.313, 100.530, 88.080 });
- locationMap.put(new Point( 6, 5), new double[] { -81.453, 100.555, 88.085 });
- locationMap.put(new Point( 5, 5), new double[] { -66.608, 100.560, 88.085 });
- locationMap.put(new Point( 4, 5), new double[] { -51.788, 100.540, 88.080 });
- locationMap.put(new Point( 3, 5), new double[] { -36.983, 100.490, 88.075 });
- locationMap.put(new Point( 2, 5), new double[] { -22.183, 100.425, 88.075 });
- locationMap.put(new Point( 1, 5), new double[] { -7.393, 100.335, 88.070 });
- locationMap.put(new Point( -1, 5), new double[] { 7.393, 100.335, 88.070 });
- locationMap.put(new Point( -2, 5), new double[] { 22.183, 100.425, 88.075 });
- locationMap.put(new Point( -3, 5), new double[] { 36.983, 100.490, 88.075 });
- locationMap.put(new Point( -4, 5), new double[] { 51.793, 100.540, 88.080 });
- locationMap.put(new Point( -5, 5), new double[] { 66.613, 100.560, 88.085 });
- locationMap.put(new Point( -6, 5), new double[] { 81.453, 100.555, 88.085 });
- locationMap.put(new Point( -7, 5), new double[] { 96.313, 100.530, 88.080 });
- locationMap.put(new Point( -8, 5), new double[] { 111.198, 100.485, 88.075 });
- locationMap.put(new Point( -9, 5), new double[] { 126.113, 100.415, 88.075 });
- locationMap.put(new Point(-10, 5), new double[] { 141.053, 100.325, 88.070 });
- locationMap.put(new Point(-11, 5), new double[] { 156.038, 100.205, 88.055 });
- locationMap.put(new Point(-12, 5), new double[] { 171.053, 100.070, 88.050 });
- locationMap.put(new Point(-13, 5), new double[] { 186.118, 99.905, 88.040 });
- locationMap.put(new Point(-14, 5), new double[] { 201.228, 99.725, 88.030 });
- locationMap.put(new Point(-15, 5), new double[] { 216.388, 99.520, 88.010 });
- locationMap.put(new Point(-16, 5), new double[] { 231.608, 99.290, 87.995 });
- locationMap.put(new Point(-17, 5), new double[] { 246.878, 99.040, 87.980 });
- locationMap.put(new Point(-18, 5), new double[] { 262.218, 98.765, 87.965 });
- locationMap.put(new Point(-19, 5), new double[] { 277.623, 98.470, 87.940 });
- locationMap.put(new Point(-20, 5), new double[] { 293.098, 98.150, 87.920 });
- locationMap.put(new Point(-21, 5), new double[] { 308.653, 97.810, 87.900 });
- locationMap.put(new Point(-22, 5), new double[] { 324.288, 97.450, 87.875 });
- locationMap.put(new Point(-23, 5), new double[] { 340.008, 97.065, 87.845 });
- locationMap.put(new Point( 23, 4), new double[] { -340.003, 97.040, 72.715 });
- locationMap.put(new Point( 22, 4), new double[] { -324.283, 97.420, 72.735 });
- locationMap.put(new Point( 21, 4), new double[] { -308.648, 97.785, 72.750 });
- locationMap.put(new Point( 20, 4), new double[] { -293.093, 98.125, 72.765 });
- locationMap.put(new Point( 19, 4), new double[] { -277.618, 98.450, 72.785 });
- locationMap.put(new Point( 18, 4), new double[] { -262.213, 98.745, 72.800 });
- locationMap.put(new Point( 17, 4), new double[] { -246.878, 99.015, 72.815 });
- locationMap.put(new Point( 16, 4), new double[] { -231.603, 99.265, 72.825 });
- locationMap.put(new Point( 15, 4), new double[] { -216.388, 99.495, 72.840 });
- locationMap.put(new Point( 14, 4), new double[] { -201.228, 99.700, 72.850 });
- locationMap.put(new Point( 13, 4), new double[] { -186.118, 99.885, 72.860 });
- locationMap.put(new Point( 12, 4), new double[] { -171.058, 100.045, 72.865 });
- locationMap.put(new Point( 11, 4), new double[] { -156.033, 100.185, 72.875 });
- locationMap.put(new Point( 10, 4), new double[] { -141.053, 100.300, 72.880 });
- locationMap.put(new Point( 9, 4), new double[] { -126.108, 100.395, 72.880 });
- locationMap.put(new Point( 8, 4), new double[] { -111.193, 100.460, 72.890 });
- locationMap.put(new Point( 7, 4), new double[] { -96.308, 100.510, 72.890 });
- locationMap.put(new Point( 6, 4), new double[] { -81.448, 100.535, 72.895 });
- locationMap.put(new Point( 5, 4), new double[] { -66.608, 100.535, 72.890 });
- locationMap.put(new Point( 4, 4), new double[] { -51.788, 100.510, 72.890 });
- locationMap.put(new Point( 3, 4), new double[] { -36.978, 100.470, 72.890 });
- locationMap.put(new Point( 2, 4), new double[] { -22.183, 100.405, 72.880 });
- locationMap.put(new Point( 1, 4), new double[] { -7.388, 100.310, 72.880 });
- locationMap.put(new Point( -1, 4), new double[] { 7.393, 100.310, 72.880 });
- locationMap.put(new Point( -2, 4), new double[] { 22.188, 100.405, 72.885 });
- locationMap.put(new Point( -3, 4), new double[] { 36.983, 100.470, 72.890 });
- locationMap.put(new Point( -4, 4), new double[] { 51.793, 100.510, 72.890 });
- locationMap.put(new Point( -5, 4), new double[] { 66.613, 100.535, 72.890 });
- locationMap.put(new Point( -6, 4), new double[] { 81.453, 100.535, 72.895 });
- locationMap.put(new Point( -7, 4), new double[] { 96.313, 100.510, 72.890 });
- locationMap.put(new Point( -8, 4), new double[] { 111.198, 100.460, 72.890 });
- locationMap.put(new Point( -9, 4), new double[] { 126.113, 100.395, 72.880 });
- locationMap.put(new Point(-10, 4), new double[] { 141.063, 100.300, 72.880 });
- locationMap.put(new Point(-11, 4), new double[] { 156.043, 100.185, 72.875 });
- locationMap.put(new Point(-12, 4), new double[] { 171.063, 100.045, 72.865 });
- locationMap.put(new Point(-13, 4), new double[] { 186.123, 99.885, 72.860 });
- locationMap.put(new Point(-14, 4), new double[] { 201.233, 99.700, 72.850 });
- locationMap.put(new Point(-15, 4), new double[] { 216.393, 99.495, 72.840 });
- locationMap.put(new Point(-16, 4), new double[] { 231.608, 99.265, 72.825 });
- locationMap.put(new Point(-17, 4), new double[] { 246.883, 99.015, 72.815 });
- locationMap.put(new Point(-18, 4), new double[] { 262.218, 98.745, 72.800 });
- locationMap.put(new Point(-19, 4), new double[] { 277.623, 98.450, 72.785 });
- locationMap.put(new Point(-20, 4), new double[] { 293.098, 98.125, 72.765 });
- locationMap.put(new Point(-21, 4), new double[] { 308.653, 97.785, 72.750 });
- locationMap.put(new Point(-22, 4), new double[] { 324.288, 97.420, 72.735 });
- locationMap.put(new Point(-23, 4), new double[] { 340.008, 97.040, 72.715 });
- locationMap.put(new Point( 23, 3), new double[] { -340.003, 96.990, 57.600 });
- locationMap.put(new Point( 22, 3), new double[] { -324.283, 97.375, 57.610 });
- locationMap.put(new Point( 21, 3), new double[] { -308.648, 97.740, 57.625 });
- locationMap.put(new Point( 20, 3), new double[] { -293.093, 98.080, 57.630 });
- locationMap.put(new Point( 19, 3), new double[] { -277.618, 98.395, 57.645 });
- locationMap.put(new Point( 18, 3), new double[] { -262.213, 98.700, 57.655 });
- locationMap.put(new Point( 17, 3), new double[] { -246.873, 98.970, 57.660 });
- locationMap.put(new Point( 16, 3), new double[] { -231.603, 99.220, 57.670 });
- locationMap.put(new Point( 15, 3), new double[] { -216.383, 99.450, 57.680 });
- locationMap.put(new Point( 14, 3), new double[] { -201.228, 99.660, 57.685 });
- locationMap.put(new Point( 13, 3), new double[] { -186.113, 99.840, 57.695 });
- locationMap.put(new Point( 12, 3), new double[] { -171.053, 100.005, 57.695 });
- locationMap.put(new Point( 11, 3), new double[] { -156.033, 100.140, 57.700 });
- locationMap.put(new Point( 10, 3), new double[] { -141.053, 100.255, 57.710 });
- locationMap.put(new Point( 9, 3), new double[] { -126.108, 100.345, 57.710 });
- locationMap.put(new Point( 8, 3), new double[] { -111.193, 100.420, 57.710 });
- locationMap.put(new Point( 7, 3), new double[] { -96.308, 100.465, 57.715 });
- locationMap.put(new Point( 6, 3), new double[] { -81.448, 100.490, 57.715 });
- locationMap.put(new Point( 5, 3), new double[] { -66.608, 100.490, 57.715 });
- locationMap.put(new Point( 4, 3), new double[] { -51.788, 100.470, 57.710 });
- locationMap.put(new Point( 3, 3), new double[] { -36.978, 100.425, 57.710 });
- locationMap.put(new Point( 2, 3), new double[] { -22.178, 100.355, 57.710 });
- locationMap.put(new Point( 1, 3), new double[] { -7.388, 100.265, 57.705 });
- locationMap.put(new Point( -1, 3), new double[] { 7.398, 100.265, 57.705 });
- locationMap.put(new Point( -2, 3), new double[] { 22.188, 100.355, 57.710 });
- locationMap.put(new Point( -3, 3), new double[] { 36.988, 100.425, 57.710 });
- locationMap.put(new Point( -4, 3), new double[] { 51.793, 100.470, 57.710 });
- locationMap.put(new Point( -5, 3), new double[] { 66.613, 100.490, 57.715 });
- locationMap.put(new Point( -6, 3), new double[] { 81.458, 100.490, 57.715 });
- locationMap.put(new Point( -7, 3), new double[] { 96.318, 100.465, 57.715 });
- locationMap.put(new Point( -8, 3), new double[] { 111.198, 100.420, 57.710 });
- locationMap.put(new Point( -9, 3), new double[] { 126.118, 100.345, 57.710 });
- locationMap.put(new Point(-10, 3), new double[] { 141.063, 100.255, 57.710 });
- locationMap.put(new Point(-11, 3), new double[] { 156.043, 100.140, 57.700 });
- locationMap.put(new Point(-12, 3), new double[] { 171.063, 100.005, 57.695 });
- locationMap.put(new Point(-13, 3), new double[] { 186.123, 99.840, 57.695 });
- locationMap.put(new Point(-14, 3), new double[] { 201.233, 99.660, 57.685 });
- locationMap.put(new Point(-15, 3), new double[] { 216.393, 99.450, 57.680 });
- locationMap.put(new Point(-16, 3), new double[] { 231.608, 99.220, 57.670 });
- locationMap.put(new Point(-17, 3), new double[] { 246.883, 98.970, 57.660 });
- locationMap.put(new Point(-18, 3), new double[] { 262.218, 98.700, 57.655 });
- locationMap.put(new Point(-19, 3), new double[] { 277.623, 98.395, 57.645 });
- locationMap.put(new Point(-20, 3), new double[] { 293.098, 98.080, 57.630 });
- locationMap.put(new Point(-21, 3), new double[] { 308.653, 97.740, 57.625 });
- locationMap.put(new Point(-22, 3), new double[] { 324.288, 97.375, 57.610 });
- locationMap.put(new Point(-23, 3), new double[] { 340.008, 96.990, 57.600 });
- locationMap.put(new Point( 23, 2), new double[] { -340.003, 96.925, 42.490 });
- locationMap.put(new Point( 22, 2), new double[] { -324.283, 97.305, 42.495 });
- locationMap.put(new Point( 21, 2), new double[] { -308.648, 97.675, 42.505 });
- locationMap.put(new Point( 20, 2), new double[] { -293.093, 98.010, 42.510 });
- locationMap.put(new Point( 19, 2), new double[] { -277.618, 98.330, 42.510 });
- locationMap.put(new Point( 18, 2), new double[] { -262.213, 98.625, 42.515 });
- locationMap.put(new Point( 17, 2), new double[] { -246.873, 98.900, 42.525 });
- locationMap.put(new Point( 16, 2), new double[] { -231.603, 99.155, 42.530 });
- locationMap.put(new Point( 15, 2), new double[] { -216.383, 99.385, 42.535 });
- locationMap.put(new Point( 14, 2), new double[] { -201.223, 99.590, 42.530 });
- locationMap.put(new Point( 13, 2), new double[] { -186.113, 99.775, 42.535 });
- locationMap.put(new Point( 12, 2), new double[] { -171.048, 99.930, 42.540 });
- locationMap.put(new Point( 11, 2), new double[] { -156.033, 100.070, 42.545 });
- locationMap.put(new Point( 10, 2), new double[] { -141.048, 100.185, 42.545 });
- locationMap.put(new Point( 9, 2), new double[] { -126.108, 100.280, 42.550 });
- locationMap.put(new Point( 8, 2), new double[] { -111.193, 100.350, 42.545 });
- locationMap.put(new Point( 7, 2), new double[] { -96.308, 100.400, 42.545 });
- locationMap.put(new Point( 6, 2), new double[] { -81.448, 100.420, 42.550 });
- locationMap.put(new Point( 5, 2), new double[] { -66.608, 100.425, 42.550 });
- locationMap.put(new Point( 4, 2), new double[] { -51.788, 100.405, 42.550 });
- locationMap.put(new Point( 3, 2), new double[] { -36.978, 100.355, 42.545 });
- locationMap.put(new Point( 2, 2), new double[] { -22.178, 100.290, 42.545 });
- locationMap.put(new Point( 1, 2), new double[] { -7.388, 100.200, 42.545 });
- locationMap.put(new Point( -1, 2), new double[] { 7.398, 100.200, 42.545 });
- locationMap.put(new Point( -2, 2), new double[] { 22.188, 100.290, 42.545 });
- locationMap.put(new Point( -3, 2), new double[] { 36.988, 100.355, 42.545 });
- locationMap.put(new Point( -4, 2), new double[] { 51.793, 100.405, 42.550 });
- locationMap.put(new Point( -5, 2), new double[] { 66.613, 100.425, 42.550 });
- locationMap.put(new Point( -6, 2), new double[] { 81.458, 100.420, 42.550 });
- locationMap.put(new Point( -7, 2), new double[] { 96.318, 100.400, 42.545 });
- locationMap.put(new Point( -8, 2), new double[] { 111.198, 100.350, 42.545 });
- locationMap.put(new Point( -9, 2), new double[] { 126.118, 100.280, 42.550 });
- locationMap.put(new Point(-10, 2), new double[] { 141.063, 100.185, 42.545 });
- locationMap.put(new Point(-11, 2), new double[] { 156.043, 100.070, 42.545 });
- locationMap.put(new Point(-12, 2), new double[] { 171.063, 99.930, 42.540 });
- locationMap.put(new Point(-13, 2), new double[] { 186.123, 99.775, 42.535 });
- locationMap.put(new Point(-14, 2), new double[] { 201.233, 99.590, 42.530 });
- locationMap.put(new Point(-15, 2), new double[] { 216.393, 99.385, 42.535 });
- locationMap.put(new Point(-16, 2), new double[] { 231.608, 99.155, 42.530 });
- locationMap.put(new Point(-17, 2), new double[] { 246.883, 98.900, 42.525 });
- locationMap.put(new Point(-18, 2), new double[] { 262.218, 98.625, 42.515 });
- locationMap.put(new Point(-19, 2), new double[] { 277.628, 98.330, 42.510 });
- locationMap.put(new Point(-20, 2), new double[] { 293.098, 98.010, 42.510 });
- locationMap.put(new Point(-21, 2), new double[] { 308.653, 97.675, 42.505 });
- locationMap.put(new Point(-22, 2), new double[] { 324.288, 97.305, 42.495 });
- locationMap.put(new Point(-23, 2), new double[] { 340.008, 96.925, 42.490 });
- locationMap.put(new Point( 23, 1), new double[] { -340.003, 96.830, 27.385 });
- locationMap.put(new Point( 22, 1), new double[] { -324.278, 97.215, 27.385 });
- locationMap.put(new Point( 21, 1), new double[] { -308.648, 97.575, 27.385 });
- locationMap.put(new Point( 20, 1), new double[] { -293.093, 97.915, 27.385 });
- locationMap.put(new Point( 19, 1), new double[] { -277.613, 98.240, 27.385 });
- locationMap.put(new Point( 18, 1), new double[] { -262.213, 98.535, 27.385 });
- locationMap.put(new Point( 17, 1), new double[] { -246.878, 98.810, 27.385 });
- locationMap.put(new Point( 16, 1), new double[] { -231.603, 99.060, 27.385 });
- locationMap.put(new Point( 15, 1), new double[] { -216.383, 99.290, 27.385 });
- locationMap.put(new Point( 14, 1), new double[] { -201.223, 99.495, 27.385 });
- locationMap.put(new Point( 13, 1), new double[] { -186.113, 99.680, 27.385 });
- locationMap.put(new Point( 12, 1), new double[] { -171.048, 99.840, 27.385 });
- locationMap.put(new Point( 11, 1), new double[] { -156.033, 99.980, 27.385 });
- locationMap.put(new Point( 10, 1), new double[] { -141.048, 100.095, 27.385 });
- locationMap.put(new Point( 9, 1), new double[] { -126.103, 100.185, 27.385 });
- locationMap.put(new Point( 8, 1), new double[] { -111.193, 100.255, 27.385 });
- locationMap.put(new Point( 7, 1), new double[] { -96.303, 100.305, 27.385 });
- locationMap.put(new Point( 6, 1), new double[] { -81.448, 100.330, 27.385 });
- locationMap.put(new Point( 5, 1), new double[] { -66.608, 100.330, 27.385 });
- locationMap.put(new Point( 4, 1), new double[] { -51.783, 100.310, 27.385 });
- locationMap.put(new Point( 3, 1), new double[] { -36.973, 100.265, 27.385 });
- locationMap.put(new Point( 2, 1), new double[] { -22.178, 100.200, 27.385 });
- locationMap.put(new Point( 1, 1), new double[] { -7.388, 100.105, 27.385 });
- locationMap.put(new Point( -1, 1), new double[] { 7.403, 100.105, 27.385 });
- locationMap.put(new Point(-11, 1), new double[] { 156.078, 99.980, 27.385 });
- locationMap.put(new Point(-12, 1), new double[] { 171.103, 99.840, 27.385 });
- locationMap.put(new Point(-13, 1), new double[] { 186.168, 99.680, 27.385 });
- locationMap.put(new Point(-14, 1), new double[] { 201.268, 99.495, 27.385 });
- locationMap.put(new Point(-15, 1), new double[] { 216.423, 99.290, 27.385 });
- locationMap.put(new Point(-16, 1), new double[] { 231.638, 99.060, 27.385 });
- locationMap.put(new Point(-17, 1), new double[] { 246.913, 98.810, 27.385 });
- locationMap.put(new Point(-18, 1), new double[] { 262.248, 98.535, 27.385 });
- locationMap.put(new Point(-19, 1), new double[] { 277.658, 98.240, 27.385 });
- locationMap.put(new Point(-20, 1), new double[] { 293.133, 97.920, 27.385 });
- locationMap.put(new Point(-21, 1), new double[] { 308.688, 97.575, 27.385 });
- locationMap.put(new Point(-22, 1), new double[] { 324.323, 97.215, 27.385 });
- locationMap.put(new Point(-23, 1), new double[] { 340.043, 96.830, 27.385 });
- locationMap.put(new Point( 23, -1), new double[] { -339.998, 96.840, -27.330 });
- locationMap.put(new Point( 22, -1), new double[] { -324.278, 97.225, -27.340 });
- locationMap.put(new Point( 21, -1), new double[] { -308.643, 97.585, -27.345 });
- locationMap.put(new Point( 20, -1), new double[] { -293.093, 97.925, -27.350 });
- locationMap.put(new Point( 19, -1), new double[] { -277.613, 98.245, -27.360 });
- locationMap.put(new Point( 18, -1), new double[] { -262.213, 98.545, -27.365 });
- locationMap.put(new Point( 17, -1), new double[] { -246.868, 98.820, -27.365 });
- locationMap.put(new Point( 16, -1), new double[] { -231.598, 99.070, -27.370 });
- locationMap.put(new Point( 15, -1), new double[] { -216.383, 99.300, -27.375 });
- locationMap.put(new Point( 14, -1), new double[] { -201.223, 99.505, -27.380 });
- locationMap.put(new Point( 13, -1), new double[] { -186.113, 99.690, -27.385 });
- locationMap.put(new Point( 12, -1), new double[] { -171.048, 99.850, -27.380 });
- locationMap.put(new Point( 11, -1), new double[] { -156.028, 99.990, -27.385 });
- locationMap.put(new Point( 10, -1), new double[] { -141.048, 100.100, -27.390 });
- locationMap.put(new Point( 9, -1), new double[] { -126.103, 100.195, -27.390 });
- locationMap.put(new Point( 8, -1), new double[] { -111.193, 100.265, -27.395 });
- locationMap.put(new Point( 7, -1), new double[] { -96.303, 100.315, -27.395 });
- locationMap.put(new Point( 6, -1), new double[] { -81.443, 100.340, -27.390 });
- locationMap.put(new Point( 5, -1), new double[] { -66.603, 100.335, -27.390 });
- locationMap.put(new Point( 4, -1), new double[] { -51.783, 100.315, -27.390 });
- locationMap.put(new Point( 3, -1), new double[] { -36.973, 100.275, -27.395 });
- locationMap.put(new Point( 2, -1), new double[] { -22.173, 100.205, -27.390 });
- locationMap.put(new Point( 1, -1), new double[] { -7.383, 100.115, -27.385 });
- locationMap.put(new Point( -1, -1), new double[] { 7.403, 100.115, -27.385 });
- locationMap.put(new Point(-11, -1), new double[] { 156.088, 99.985, -27.385 });
- locationMap.put(new Point(-12, -1), new double[] { 171.103, 99.845, -27.380 });
- locationMap.put(new Point(-13, -1), new double[] { 186.168, 99.680, -27.385 });
- locationMap.put(new Point(-14, -1), new double[] { 201.268, 99.495, -27.380 });
- locationMap.put(new Point(-15, -1), new double[] { 216.428, 99.290, -27.375 });
- locationMap.put(new Point(-16, -1), new double[] { 231.643, 99.060, -27.370 });
- locationMap.put(new Point(-17, -1), new double[] { 246.913, 98.810, -27.365 });
- locationMap.put(new Point(-18, -1), new double[] { 262.258, 98.535, -27.365 });
- locationMap.put(new Point(-19, -1), new double[] { 277.658, 98.240, -27.360 });
- locationMap.put(new Point(-20, -1), new double[] { 293.138, 97.925, -27.350 });
- locationMap.put(new Point(-21, -1), new double[] { 308.688, 97.580, -27.345 });
- locationMap.put(new Point(-22, -1), new double[] { 324.323, 97.215, -27.340 });
- locationMap.put(new Point(-23, -1), new double[] { 340.043, 96.835, -27.330 });
- locationMap.put(new Point( 23, -2), new double[] { -339.998, 96.930, -42.435 });
- locationMap.put(new Point( 22, -2), new double[] { -324.278, 97.315, -42.445 });
- locationMap.put(new Point( 21, -2), new double[] { -308.648, 97.680, -42.455 });
- locationMap.put(new Point( 20, -2), new double[] { -293.093, 98.015, -42.470 });
- locationMap.put(new Point( 19, -2), new double[] { -277.613, 98.340, -42.480 });
- locationMap.put(new Point( 18, -2), new double[] { -262.208, 98.635, -42.490 });
- locationMap.put(new Point( 17, -2), new double[] { -246.873, 98.910, -42.500 });
- locationMap.put(new Point( 16, -2), new double[] { -231.593, 99.160, -42.510 });
- locationMap.put(new Point( 15, -2), new double[] { -216.383, 99.390, -42.515 });
- locationMap.put(new Point( 14, -2), new double[] { -201.223, 99.595, -42.525 });
- locationMap.put(new Point( 13, -2), new double[] { -186.113, 99.780, -42.525 });
- locationMap.put(new Point( 12, -2), new double[] { -171.048, 99.940, -42.535 });
- locationMap.put(new Point( 11, -2), new double[] { -156.028, 100.080, -42.540 });
- locationMap.put(new Point( 10, -2), new double[] { -141.048, 100.195, -42.540 });
- locationMap.put(new Point( 9, -2), new double[] { -126.103, 100.290, -42.545 });
- locationMap.put(new Point( 8, -2), new double[] { -111.193, 100.355, -42.550 });
- locationMap.put(new Point( 7, -2), new double[] { -96.303, 100.405, -42.550 });
- locationMap.put(new Point( 6, -2), new double[] { -81.443, 100.430, -42.550 });
- locationMap.put(new Point( 5, -2), new double[] { -66.608, 100.430, -42.550 });
- locationMap.put(new Point( 4, -2), new double[] { -51.783, 100.405, -42.550 });
- locationMap.put(new Point( 3, -2), new double[] { -36.973, 100.365, -42.550 });
- locationMap.put(new Point( 2, -2), new double[] { -22.178, 100.295, -42.545 });
- locationMap.put(new Point( 1, -2), new double[] { -7.388, 100.205, -42.545 });
- locationMap.put(new Point( -1, -2), new double[] { 7.403, 100.205, -42.545 });
- locationMap.put(new Point( -2, -2), new double[] { 22.193, 100.295, -42.545 });
- locationMap.put(new Point( -3, -2), new double[] { 36.988, 100.365, -42.550 });
- locationMap.put(new Point( -4, -2), new double[] { 51.798, 100.405, -42.550 });
- locationMap.put(new Point( -5, -2), new double[] { 66.623, 100.430, -42.550 });
- locationMap.put(new Point( -6, -2), new double[] { 81.458, 100.430, -42.550 });
- locationMap.put(new Point( -7, -2), new double[] { 96.318, 100.405, -42.550 });
- locationMap.put(new Point( -8, -2), new double[] { 111.208, 100.355, -42.550 });
- locationMap.put(new Point( -9, -2), new double[] { 126.118, 100.290, -42.545 });
- locationMap.put(new Point(-10, -2), new double[] { 141.063, 100.195, -42.540 });
- locationMap.put(new Point(-11, -2), new double[] { 156.043, 100.080, -42.540 });
- locationMap.put(new Point(-12, -2), new double[] { 171.063, 99.940, -42.535 });
- locationMap.put(new Point(-13, -2), new double[] { 186.128, 99.780, -42.525 });
- locationMap.put(new Point(-14, -2), new double[] { 201.238, 99.595, -42.525 });
- locationMap.put(new Point(-15, -2), new double[] { 216.398, 99.390, -42.515 });
- locationMap.put(new Point(-16, -2), new double[] { 231.613, 99.160, -42.510 });
- locationMap.put(new Point(-17, -2), new double[] { 246.888, 98.910, -42.500 });
- locationMap.put(new Point(-18, -2), new double[] { 262.223, 98.635, -42.490 });
- locationMap.put(new Point(-19, -2), new double[] { 277.628, 98.340, -42.480 });
- locationMap.put(new Point(-20, -2), new double[] { 293.108, 98.015, -42.470 });
- locationMap.put(new Point(-21, -2), new double[] { 308.663, 97.680, -42.455 });
- locationMap.put(new Point(-22, -2), new double[] { 324.293, 97.315, -42.445 });
- locationMap.put(new Point(-23, -2), new double[] { 340.013, 96.930, -42.435 });
- locationMap.put(new Point( 23, -3), new double[] { -339.998, 97.000, -57.540 });
- locationMap.put(new Point( 22, -3), new double[] { -324.278, 97.385, -57.560 });
- locationMap.put(new Point( 21, -3), new double[] { -308.648, 97.745, -57.575 });
- locationMap.put(new Point( 20, -3), new double[] { -293.093, 98.090, -57.595 });
- locationMap.put(new Point( 19, -3), new double[] { -277.613, 98.410, -57.610 });
- locationMap.put(new Point( 18, -3), new double[] { -262.208, 98.705, -57.625 });
- locationMap.put(new Point( 17, -3), new double[] { -246.873, 98.975, -57.640 });
- locationMap.put(new Point( 16, -3), new double[] { -231.593, 99.225, -57.655 });
- locationMap.put(new Point( 15, -3), new double[] { -216.383, 99.455, -57.665 });
- locationMap.put(new Point( 14, -3), new double[] { -201.223, 99.665, -57.675 });
- locationMap.put(new Point( 13, -3), new double[] { -186.113, 99.845, -57.685 });
- locationMap.put(new Point( 12, -3), new double[] { -171.048, 100.010, -57.690 });
- locationMap.put(new Point( 11, -3), new double[] { -156.028, 100.145, -57.700 });
- locationMap.put(new Point( 10, -3), new double[] { -141.048, 100.265, -57.705 });
- locationMap.put(new Point( 9, -3), new double[] { -126.103, 100.355, -57.710 });
- locationMap.put(new Point( 8, -3), new double[] { -111.193, 100.425, -57.710 });
- locationMap.put(new Point( 7, -3), new double[] { -96.303, 100.475, -57.720 });
- locationMap.put(new Point( 6, -3), new double[] { -81.443, 100.495, -57.715 });
- locationMap.put(new Point( 5, -3), new double[] { -66.608, 100.500, -57.720 });
- locationMap.put(new Point( 4, -3), new double[] { -51.783, 100.480, -57.715 });
- locationMap.put(new Point( 3, -3), new double[] { -36.973, 100.430, -57.710 });
- locationMap.put(new Point( 2, -3), new double[] { -22.178, 100.365, -57.710 });
- locationMap.put(new Point( 1, -3), new double[] { -7.388, 100.275, -57.705 });
- locationMap.put(new Point( -1, -3), new double[] { 7.403, 100.275, -57.705 });
- locationMap.put(new Point( -2, -3), new double[] { 22.193, 100.365, -57.710 });
- locationMap.put(new Point( -3, -3), new double[] { 36.988, 100.430, -57.710 });
- locationMap.put(new Point( -4, -3), new double[] { 51.798, 100.480, -57.715 });
- locationMap.put(new Point( -5, -3), new double[] { 66.623, 100.500, -57.720 });
- locationMap.put(new Point( -6, -3), new double[] { 81.458, 100.495, -57.715 });
- locationMap.put(new Point( -7, -3), new double[] { 96.318, 100.475, -57.720 });
- locationMap.put(new Point( -8, -3), new double[] { 111.208, 100.425, -57.710 });
- locationMap.put(new Point( -9, -3), new double[] { 126.118, 100.355, -57.710 });
- locationMap.put(new Point(-10, -3), new double[] { 141.063, 100.265, -57.705 });
- locationMap.put(new Point(-11, -3), new double[] { 156.043, 100.145, -57.700 });
- locationMap.put(new Point(-12, -3), new double[] { 171.063, 100.010, -57.690 });
- locationMap.put(new Point(-13, -3), new double[] { 186.128, 99.845, -57.685 });
- locationMap.put(new Point(-14, -3), new double[] { 201.238, 99.665, -57.675 });
- locationMap.put(new Point(-15, -3), new double[] { 216.398, 99.455, -57.665 });
- locationMap.put(new Point(-16, -3), new double[] { 231.613, 99.225, -57.655 });
- locationMap.put(new Point(-17, -3), new double[] { 246.888, 98.975, -57.640 });
- locationMap.put(new Point(-18, -3), new double[] { 262.223, 98.705, -57.625 });
- locationMap.put(new Point(-19, -3), new double[] { 277.628, 98.410, -57.610 });
- locationMap.put(new Point(-20, -3), new double[] { 293.108, 98.090, -57.595 });
- locationMap.put(new Point(-21, -3), new double[] { 308.663, 97.745, -57.575 });
- locationMap.put(new Point(-22, -3), new double[] { 324.293, 97.385, -57.560 });
- locationMap.put(new Point(-23, -3), new double[] { 340.013, 97.000, -57.540 });
- locationMap.put(new Point( 23, -4), new double[] { -339.998, 97.045, -72.655 });
- locationMap.put(new Point( 22, -4), new double[] { -324.278, 97.435, -72.680 });
- locationMap.put(new Point( 21, -4), new double[] { -308.648, 97.795, -72.710 });
- locationMap.put(new Point( 20, -4), new double[] { -293.093, 98.135, -72.730 });
- locationMap.put(new Point( 19, -4), new double[] { -277.613, 98.455, -72.750 });
- locationMap.put(new Point( 18, -4), new double[] { -262.208, 98.750, -72.775 });
- locationMap.put(new Point( 17, -4), new double[] { -246.873, 99.020, -72.795 });
- locationMap.put(new Point( 16, -4), new double[] { -231.593, 99.280, -72.810 });
- locationMap.put(new Point( 15, -4), new double[] { -216.383, 99.505, -72.820 });
- locationMap.put(new Point( 14, -4), new double[] { -201.223, 99.710, -72.840 });
- locationMap.put(new Point( 13, -4), new double[] { -186.113, 99.895, -72.850 });
- locationMap.put(new Point( 12, -4), new double[] { -171.048, 100.055, -72.860 });
- locationMap.put(new Point( 11, -4), new double[] { -156.028, 100.190, -72.870 });
- locationMap.put(new Point( 10, -4), new double[] { -141.048, 100.305, -72.880 });
- locationMap.put(new Point( 9, -4), new double[] { -126.103, 100.400, -72.885 });
- locationMap.put(new Point( 8, -4), new double[] { -111.193, 100.470, -72.890 });
- locationMap.put(new Point( 7, -4), new double[] { -96.303, 100.520, -72.890 });
- locationMap.put(new Point( 6, -4), new double[] { -81.443, 100.540, -72.895 });
- locationMap.put(new Point( 5, -4), new double[] { -66.608, 100.540, -72.895 });
- locationMap.put(new Point( 4, -4), new double[] { -51.783, 100.520, -72.895 });
- locationMap.put(new Point( 3, -4), new double[] { -36.973, 100.480, -72.890 });
- locationMap.put(new Point( 2, -4), new double[] { -22.178, 100.405, -72.885 });
- locationMap.put(new Point( 1, -4), new double[] { -7.388, 100.320, -72.880 });
- locationMap.put(new Point( -1, -4), new double[] { 7.403, 100.320, -72.880 });
- locationMap.put(new Point( -2, -4), new double[] { 22.193, 100.405, -72.885 });
- locationMap.put(new Point( -3, -4), new double[] { 36.988, 100.480, -72.890 });
- locationMap.put(new Point( -4, -4), new double[] { 51.798, 100.520, -72.895 });
- locationMap.put(new Point( -5, -4), new double[] { 66.623, 100.540, -72.895 });
- locationMap.put(new Point( -6, -4), new double[] { 81.458, 100.540, -72.895 });
- locationMap.put(new Point( -7, -4), new double[] { 96.318, 100.520, -72.890 });
- locationMap.put(new Point( -8, -4), new double[] { 111.208, 100.470, -72.890 });
- locationMap.put(new Point( -9, -4), new double[] { 126.118, 100.400, -72.885 });
- locationMap.put(new Point(-10, -4), new double[] { 141.063, 100.305, -72.880 });
- locationMap.put(new Point(-11, -4), new double[] { 156.043, 100.190, -72.870 });
- locationMap.put(new Point(-12, -4), new double[] { 171.063, 100.055, -72.860 });
- locationMap.put(new Point(-13, -4), new double[] { 186.128, 99.895, -72.850 });
- locationMap.put(new Point(-14, -4), new double[] { 201.238, 99.710, -72.840 });
- locationMap.put(new Point(-15, -4), new double[] { 216.398, 99.505, -72.820 });
- locationMap.put(new Point(-16, -4), new double[] { 231.613, 99.280, -72.810 });
- locationMap.put(new Point(-17, -4), new double[] { 246.888, 99.020, -72.795 });
- locationMap.put(new Point(-18, -4), new double[] { 262.223, 98.750, -72.775 });
- locationMap.put(new Point(-19, -4), new double[] { 277.628, 98.455, -72.750 });
- locationMap.put(new Point(-20, -4), new double[] { 293.108, 98.135, -72.730 });
- locationMap.put(new Point(-21, -4), new double[] { 308.663, 97.795, -72.710 });
- locationMap.put(new Point(-22, -4), new double[] { 324.293, 97.435, -72.680 });
- locationMap.put(new Point(-23, -4), new double[] { 340.013, 97.045, -72.655 });
- locationMap.put(new Point( 23, -5), new double[] { -339.998, 97.070, -87.790 });
- locationMap.put(new Point( 22, -5), new double[] { -324.278, 97.460, -87.820 });
- locationMap.put(new Point( 21, -5), new double[] { -308.648, 97.820, -87.850 });
- locationMap.put(new Point( 20, -5), new double[] { -293.093, 98.160, -87.885 });
- locationMap.put(new Point( 19, -5), new double[] { -277.613, 98.480, -87.910 });
- locationMap.put(new Point( 18, -5), new double[] { -262.208, 98.775, -87.935 });
- locationMap.put(new Point( 17, -5), new double[] { -246.873, 99.050, -87.960 });
- locationMap.put(new Point( 16, -5), new double[] { -231.593, 99.300, -87.980 });
- locationMap.put(new Point( 15, -5), new double[] { -216.383, 99.530, -88.000 });
- locationMap.put(new Point( 14, -5), new double[] { -201.223, 99.735, -88.015 });
- locationMap.put(new Point( 13, -5), new double[] { -186.113, 99.920, -88.030 });
- locationMap.put(new Point( 12, -5), new double[] { -171.048, 100.080, -88.045 });
- locationMap.put(new Point( 11, -5), new double[] { -156.028, 100.215, -88.055 });
- locationMap.put(new Point( 10, -5), new double[] { -141.048, 100.335, -88.065 });
- locationMap.put(new Point( 9, -5), new double[] { -126.103, 100.420, -88.070 });
- locationMap.put(new Point( 8, -5), new double[] { -111.193, 100.490, -88.075 });
- locationMap.put(new Point( 7, -5), new double[] { -96.303, 100.540, -88.085 });
- locationMap.put(new Point( 6, -5), new double[] { -81.443, 100.565, -88.085 });
- locationMap.put(new Point( 5, -5), new double[] { -66.608, 100.560, -88.085 });
- locationMap.put(new Point( 4, -5), new double[] { -51.783, 100.540, -88.085 });
- locationMap.put(new Point( 3, -5), new double[] { -36.973, 100.500, -88.080 });
- locationMap.put(new Point( 2, -5), new double[] { -22.178, 100.430, -88.075 });
- locationMap.put(new Point( 1, -5), new double[] { -7.388, 100.340, -88.065 });
- locationMap.put(new Point( -1, -5), new double[] { 7.403, 100.340, -88.070 });
- locationMap.put(new Point( -2, -5), new double[] { 22.193, 100.430, -88.075 });
- locationMap.put(new Point( -3, -5), new double[] { 36.988, 100.500, -88.080 });
- locationMap.put(new Point( -4, -5), new double[] { 51.798, 100.540, -88.085 });
- locationMap.put(new Point( -5, -5), new double[] { 66.623, 100.560, -88.085 });
- locationMap.put(new Point( -6, -5), new double[] { 81.458, 100.565, -88.085 });
- locationMap.put(new Point( -7, -5), new double[] { 96.318, 100.540, -88.085 });
- locationMap.put(new Point( -8, -5), new double[] { 111.208, 100.490, -88.075 });
- locationMap.put(new Point( -9, -5), new double[] { 126.118, 100.420, -88.070 });
- locationMap.put(new Point(-10, -5), new double[] { 141.063, 100.335, -88.065 });
- locationMap.put(new Point(-11, -5), new double[] { 156.043, 100.215, -88.055 });
- locationMap.put(new Point(-12, -5), new double[] { 171.063, 100.080, -88.045 });
- locationMap.put(new Point(-13, -5), new double[] { 186.128, 99.915, -88.030 });
- locationMap.put(new Point(-14, -5), new double[] { 201.238, 99.735, -88.015 });
- locationMap.put(new Point(-15, -5), new double[] { 216.398, 99.530, -88.000 });
- locationMap.put(new Point(-16, -5), new double[] { 231.613, 99.300, -87.980 });
- locationMap.put(new Point(-17, -5), new double[] { 246.888, 99.050, -87.960 });
- locationMap.put(new Point(-18, -5), new double[] { 262.223, 98.775, -87.935 });
- locationMap.put(new Point(-19, -5), new double[] { 277.628, 98.480, -87.910 });
- locationMap.put(new Point(-20, -5), new double[] { 293.108, 98.160, -87.885 });
- locationMap.put(new Point(-21, -5), new double[] { 308.663, 97.820, -87.850 });
- locationMap.put(new Point(-22, -5), new double[] { 324.293, 97.460, -87.820 });
- locationMap.put(new Point(-23, -5), new double[] { 340.013, 97.070, -87.790 });
- }
+ /**
+ * An array of the form <code>position[iy][ix]</code> that contains
+ * the hardware SSP position mappings for each crystal. Note that
+ * ix in the array goes from -22 (representing ix = 23) up to 25
+ * (representing ix = 23) and uses array index x = 0 as a valid
+ * parameter, while ix skips zero.
+ */
+ private static final double[][][] position = {
+ { { -340.003, 97.065, 87.845 }, { -324.283, 97.450, 87.875 }, { -308.648, 97.810, 87.900 },
+ { -293.093, 98.150, 87.920 }, { -277.618, 98.470, 87.940 }, { -262.213, 98.765, 87.965 },
+ { -246.878, 99.040, 87.980 }, { -231.603, 99.290, 87.995 }, { -216.393, 99.520, 88.010 },
+ { -201.228, 99.725, 88.030 }, { -186.118, 99.905, 88.040 }, { -171.058, 100.070, 88.050 },
+ { -156.038, 100.205, 88.055 }, { -141.058, 100.325, 88.070 }, { -126.113, 100.415, 88.075 },
+ { -111.198, 100.485, 88.075 }, { -96.313, 100.530, 88.080 }, { -81.453, 100.555, 88.085 },
+ { -66.608, 100.560, 88.085 }, { -51.788, 100.540, 88.080 }, { -36.983, 100.490, 88.075 },
+ { -22.183, 100.425, 88.075 }, { -7.393, 100.335, 88.070 }, { 7.393, 100.335, 88.070 },
+ { 22.183, 100.425, 88.075 }, { 36.983, 100.490, 88.075 }, { 51.793, 100.540, 88.080 },
+ { 66.613, 100.560, 88.085 }, { 81.453, 100.555, 88.085 }, { 96.313, 100.530, 88.080 },
+ { 111.198, 100.485, 88.075 }, { 126.113, 100.415, 88.075 }, { 141.053, 100.325, 88.070 },
+ { 156.038, 100.205, 88.055 }, { 171.053, 100.070, 88.050 }, { 186.118, 99.905, 88.040 },
+ { 201.228, 99.725, 88.030 }, { 216.388, 99.520, 88.010 }, { 231.608, 99.290, 87.995 },
+ { 246.878, 99.040, 87.980 }, { 262.218, 98.765, 87.965 }, { 277.623, 98.470, 87.940 },
+ { 293.098, 98.150, 87.920 }, { 308.653, 97.810, 87.900 }, { 324.288, 97.450, 87.875 },
+ { 340.008, 97.065, 87.845 }
+ },
+ { { -340.003, 97.040, 72.715 }, { -324.283, 97.420, 72.735 }, { -308.648, 97.785, 72.750 },
+ { -293.093, 98.125, 72.765 }, { -277.618, 98.450, 72.785 }, { -262.213, 98.745, 72.800 },
+ { -246.878, 99.015, 72.815 }, { -231.603, 99.265, 72.825 }, { -216.388, 99.495, 72.840 },
+ { -201.228, 99.700, 72.850 }, { -186.118, 99.885, 72.860 }, { -171.058, 100.045, 72.865 },
+ { -156.033, 100.185, 72.875 }, { -141.053, 100.300, 72.880 }, { -126.108, 100.395, 72.880 },
+ { -111.193, 100.460, 72.890 }, { -96.308, 100.510, 72.890 }, { -81.448, 100.535, 72.895 },
+ { -66.608, 100.535, 72.890 }, { -51.788, 100.510, 72.890 }, { -36.978, 100.470, 72.890 },
+ { -22.183, 100.405, 72.880 }, { -7.388, 100.310, 72.880 }, { 7.393, 100.310, 72.880 },
+ { 22.188, 100.405, 72.885 }, { 36.983, 100.470, 72.890 }, { 51.793, 100.510, 72.890 },
+ { 66.613, 100.535, 72.890 }, { 81.453, 100.535, 72.895 }, { 96.313, 100.510, 72.890 },
+ { 111.198, 100.460, 72.890 }, { 126.113, 100.395, 72.880 }, { 141.063, 100.300, 72.880 },
+ { 156.043, 100.185, 72.875 }, { 171.063, 100.045, 72.865 }, { 186.123, 99.885, 72.860 },
+ { 201.233, 99.700, 72.850 }, { 216.393, 99.495, 72.840 }, { 231.608, 99.265, 72.825 },
+ { 246.883, 99.015, 72.815 }, { 262.218, 98.745, 72.800 }, { 277.623, 98.450, 72.785 },
+ { 293.098, 98.125, 72.765 }, { 308.653, 97.785, 72.750 }, { 324.288, 97.420, 72.735 },
+ { 340.008, 97.040, 72.715 }
+ },
+ { { -340.003, 96.990, 57.600 }, { -324.283, 97.375, 57.610 }, { -308.648, 97.740, 57.625 },
+ { -293.093, 98.080, 57.630 }, { -277.618, 98.395, 57.645 }, { -262.213, 98.700, 57.655 },
+ { -246.873, 98.970, 57.660 }, { -231.603, 99.220, 57.670 }, { -216.383, 99.450, 57.680 },
+ { -201.228, 99.660, 57.685 }, { -186.113, 99.840, 57.695 }, { -171.053, 100.005, 57.695 },
+ { -156.033, 100.140, 57.700 }, { -141.053, 100.255, 57.710 }, { -126.108, 100.345, 57.710 },
+ { -111.193, 100.420, 57.710 }, { -96.308, 100.465, 57.715 }, { -81.448, 100.490, 57.715 },
+ { -66.608, 100.490, 57.715 }, { -51.788, 100.470, 57.710 }, { -36.978, 100.425, 57.710 },
+ { -22.178, 100.355, 57.710 }, { -7.388, 100.265, 57.705 }, { 7.398, 100.265, 57.705 },
+ { 22.188, 100.355, 57.710 }, { 36.988, 100.425, 57.710 }, { 51.793, 100.470, 57.710 },
+ { 66.613, 100.490, 57.715 }, { 81.458, 100.490, 57.715 }, { 96.318, 100.465, 57.715 },
+ { 111.198, 100.420, 57.710 }, { 126.118, 100.345, 57.710 }, { 141.063, 100.255, 57.710 },
+ { 156.043, 100.140, 57.700 }, { 171.063, 100.005, 57.695 }, { 186.123, 99.840, 57.695 },
+ { 201.233, 99.660, 57.685 }, { 216.393, 99.450, 57.680 }, { 231.608, 99.220, 57.670 },
+ { 246.883, 98.970, 57.660 }, { 262.218, 98.700, 57.655 }, { 277.623, 98.395, 57.645 },
+ { 293.098, 98.080, 57.630 }, { 308.653, 97.740, 57.625 }, { 324.288, 97.375, 57.610 },
+ { 340.008, 96.990, 57.600 }
+ },
+ { { -340.003, 96.925, 42.490 }, { -324.283, 97.305, 42.495 }, { -308.648, 97.675, 42.505 },
+ { -293.093, 98.010, 42.510 }, { -277.618, 98.330, 42.510 }, { -262.213, 98.625, 42.515 },
+ { -246.873, 98.900, 42.525 }, { -231.603, 99.155, 42.530 }, { -216.383, 99.385, 42.535 },
+ { -201.223, 99.590, 42.530 }, { -186.113, 99.775, 42.535 }, { -171.048, 99.930, 42.540 },
+ { -156.033, 100.070, 42.545 }, { -141.048, 100.185, 42.545 }, { -126.108, 100.280, 42.550 },
+ { -111.193, 100.350, 42.545 }, { -96.308, 100.400, 42.545 }, { -81.448, 100.420, 42.550 },
+ { -66.608, 100.425, 42.550 }, { -51.788, 100.405, 42.550 }, { -36.978, 100.355, 42.545 },
+ { -22.178, 100.290, 42.545 }, { -7.388, 100.200, 42.545 }, { 7.398, 100.200, 42.545 },
+ { 22.188, 100.290, 42.545 }, { 36.988, 100.355, 42.545 }, { 51.793, 100.405, 42.550 },
+ { 66.613, 100.425, 42.550 }, { 81.458, 100.420, 42.550 }, { 96.318, 100.400, 42.545 },
+ { 111.198, 100.350, 42.545 }, { 126.118, 100.280, 42.550 }, { 141.063, 100.185, 42.545 },
+ { 156.043, 100.070, 42.545 }, { 171.063, 99.930, 42.540 }, { 186.123, 99.775, 42.535 },
+ { 201.233, 99.590, 42.530 }, { 216.393, 99.385, 42.535 }, { 231.608, 99.155, 42.530 },
+ { 246.883, 98.900, 42.525 }, { 262.218, 98.625, 42.515 }, { 277.628, 98.330, 42.510 },
+ { 293.098, 98.010, 42.510 }, { 308.653, 97.675, 42.505 }, { 324.288, 97.305, 42.495 },
+ { 340.008, 96.925, 42.490 }
+ },
+ { { -340.003, 96.830, 27.385 }, { -324.278, 97.215, 27.385 }, { -308.648, 97.575, 27.385 },
+ { -293.093, 97.915, 27.385 }, { -277.613, 98.240, 27.385 }, { -262.213, 98.535, 27.385 },
+ { -246.878, 98.810, 27.385 }, { -231.603, 99.060, 27.385 }, { -216.383, 99.290, 27.385 },
+ { -201.223, 99.495, 27.385 }, { -186.113, 99.680, 27.385 }, { -171.048, 99.840, 27.385 },
+ { -156.033, 99.980, 27.385 }, { -141.048, 100.095, 27.385 }, { -126.103, 100.185, 27.385 },
+ { -111.193, 100.255, 27.385 }, { -96.303, 100.305, 27.385 }, { -81.448, 100.330, 27.385 },
+ { -66.608, 100.330, 27.385 }, { -51.783, 100.310, 27.385 }, { -36.973, 100.265, 27.385 },
+ { -22.178, 100.200, 27.385 }, { -7.388, 100.105, 27.385 }, { 7.403, 100.105, 27.385 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 156.078, 99.980, 27.385 }, { 171.103, 99.840, 27.385 }, { 186.168, 99.680, 27.385 },
+ { 201.268, 99.495, 27.385 }, { 216.423, 99.290, 27.385 }, { 231.638, 99.060, 27.385 },
+ { 246.913, 98.810, 27.385 }, { 262.248, 98.535, 27.385 }, { 277.658, 98.240, 27.385 },
+ { 293.133, 97.920, 27.385 }, { 308.688, 97.575, 27.385 }, { 324.323, 97.215, 27.385 },
+ { 340.043, 96.830, 27.385 }
+ },
+ { { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }
+ },
+ { { -339.998, 96.840, -27.330 }, { -324.278, 97.225, -27.340 }, { -308.643, 97.585, -27.345 },
+ { -293.093, 97.925, -27.350 }, { -277.613, 98.245, -27.360 }, { -262.213, 98.545, -27.365 },
+ { -246.868, 98.820, -27.365 }, { -231.598, 99.070, -27.370 }, { -216.383, 99.300, -27.375 },
+ { -201.223, 99.505, -27.380 }, { -186.113, 99.690, -27.385 }, { -171.048, 99.850, -27.380 },
+ { -156.028, 99.990, -27.385 }, { -141.048, 100.100, -27.390 }, { -126.103, 100.195, -27.390 },
+ { -111.193, 100.265, -27.395 }, { -96.303, 100.315, -27.395 }, { -81.443, 100.340, -27.390 },
+ { -66.603, 100.335, -27.390 }, { -51.783, 100.315, -27.390 }, { -36.973, 100.275, -27.395 },
+ { -22.173, 100.205, -27.390 }, { -7.383, 100.115, -27.385 }, { 7.403, 100.115, -27.385 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 }, { 0.000, 0.000, 0.000 },
+ { 156.088, 99.985, -27.385 }, { 171.103, 99.845, -27.380 }, { 186.168, 99.680, -27.385 },
+ { 201.268, 99.495, -27.380 }, { 216.428, 99.290, -27.375 }, { 231.643, 99.060, -27.370 },
+ { 246.913, 98.810, -27.365 }, { 262.258, 98.535, -27.365 }, { 277.658, 98.240, -27.360 },
+ { 293.138, 97.925, -27.350 }, { 308.688, 97.580, -27.345 }, { 324.323, 97.215, -27.340 },
+ { 340.043, 96.835, -27.330 }
+ },
+ { { -339.998, 96.930, -42.435 }, { -324.278, 97.315, -42.445 }, { -308.648, 97.680, -42.455 },
+ { -293.093, 98.015, -42.470 }, { -277.613, 98.340, -42.480 }, { -262.208, 98.635, -42.490 },
+ { -246.873, 98.910, -42.500 }, { -231.593, 99.160, -42.510 }, { -216.383, 99.390, -42.515 },
+ { -201.223, 99.595, -42.525 }, { -186.113, 99.780, -42.525 }, { -171.048, 99.940, -42.535 },
+ { -156.028, 100.080, -42.540 }, { -141.048, 100.195, -42.540 }, { -126.103, 100.290, -42.545 },
+ { -111.193, 100.355, -42.550 }, { -96.303, 100.405, -42.550 }, { -81.443, 100.430, -42.550 },
+ { -66.608, 100.430, -42.550 }, { -51.783, 100.405, -42.550 }, { -36.973, 100.365, -42.550 },
+ { -22.178, 100.295, -42.545 }, { -7.388, 100.205, -42.545 }, { 7.403, 100.205, -42.545 },
+ { 22.193, 100.295, -42.545 }, { 36.988, 100.365, -42.550 }, { 51.798, 100.405, -42.550 },
+ { 66.623, 100.430, -42.550 }, { 81.458, 100.430, -42.550 }, { 96.318, 100.405, -42.550 },
+ { 111.208, 100.355, -42.550 }, { 126.118, 100.290, -42.545 }, { 141.063, 100.195, -42.540 },
+ { 156.043, 100.080, -42.540 }, { 171.063, 99.940, -42.535 }, { 186.128, 99.780, -42.525 },
+ { 201.238, 99.595, -42.525 }, { 216.398, 99.390, -42.515 }, { 231.613, 99.160, -42.510 },
+ { 246.888, 98.910, -42.500 }, { 262.223, 98.635, -42.490 }, { 277.628, 98.340, -42.480 },
+ { 293.108, 98.015, -42.470 }, { 308.663, 97.680, -42.455 }, { 324.293, 97.315, -42.445 },
+ { 340.013, 96.930, -42.435 }
+ },
+ { { -339.998, 97.000, -57.540 }, { -324.278, 97.385, -57.560 }, { -308.648, 97.745, -57.575 },
+ { -293.093, 98.090, -57.595 }, { -277.613, 98.410, -57.610 }, { -262.208, 98.705, -57.625 },
+ { -246.873, 98.975, -57.640 }, { -231.593, 99.225, -57.655 }, { -216.383, 99.455, -57.665 },
+ { -201.223, 99.665, -57.675 }, { -186.113, 99.845, -57.685 }, { -171.048, 100.010, -57.690 },
+ { -156.028, 100.145, -57.700 }, { -141.048, 100.265, -57.705 }, { -126.103, 100.355, -57.710 },
+ { -111.193, 100.425, -57.710 }, { -96.303, 100.475, -57.720 }, { -81.443, 100.495, -57.715 },
+ { -66.608, 100.500, -57.720 }, { -51.783, 100.480, -57.715 }, { -36.973, 100.430, -57.710 },
+ { -22.178, 100.365, -57.710 }, { -7.388, 100.275, -57.705 }, { 7.403, 100.275, -57.705 },
+ { 22.193, 100.365, -57.710 }, { 36.988, 100.430, -57.710 }, { 51.798, 100.480, -57.715 },
+ { 66.623, 100.500, -57.720 }, { 81.458, 100.495, -57.715 }, { 96.318, 100.475, -57.720 },
+ { 111.208, 100.425, -57.710 }, { 126.118, 100.355, -57.710 }, { 141.063, 100.265, -57.705 },
+ { 156.043, 100.145, -57.700 }, { 171.063, 100.010, -57.690 }, { 186.128, 99.845, -57.685 },
+ { 201.238, 99.665, -57.675 }, { 216.398, 99.455, -57.665 }, { 231.613, 99.225, -57.655 },
+ { 246.888, 98.975, -57.640 }, { 262.223, 98.705, -57.625 }, { 277.628, 98.410, -57.610 },
+ { 293.108, 98.090, -57.595 }, { 308.663, 97.745, -57.575 }, { 324.293, 97.385, -57.560 },
+ { 340.013, 97.000, -57.540 }
+ },
+ { { -339.998, 97.045, -72.655 }, { -324.278, 97.435, -72.680 }, { -308.648, 97.795, -72.710 },
+ { -293.093, 98.135, -72.730 }, { -277.613, 98.455, -72.750 }, { -262.208, 98.750, -72.775 },
+ { -246.873, 99.020, -72.795 }, { -231.593, 99.280, -72.810 }, { -216.383, 99.505, -72.820 },
+ { -201.223, 99.710, -72.840 }, { -186.113, 99.895, -72.850 }, { -171.048, 100.055, -72.860 },
+ { -156.028, 100.190, -72.870 }, { -141.048, 100.305, -72.880 }, { -126.103, 100.400, -72.885 },
+ { -111.193, 100.470, -72.890 }, { -96.303, 100.520, -72.890 }, { -81.443, 100.540, -72.895 },
+ { -66.608, 100.540, -72.895 }, { -51.783, 100.520, -72.895 }, { -36.973, 100.480, -72.890 },
+ { -22.178, 100.405, -72.885 }, { -7.388, 100.320, -72.880 }, { 7.403, 100.320, -72.880 },
+ { 22.193, 100.405, -72.885 }, { 36.988, 100.480, -72.890 }, { 51.798, 100.520, -72.895 },
+ { 66.623, 100.540, -72.895 }, { 81.458, 100.540, -72.895 }, { 96.318, 100.520, -72.890 },
+ { 111.208, 100.470, -72.890 }, { 126.118, 100.400, -72.885 }, { 141.063, 100.305, -72.880 },
+ { 156.043, 100.190, -72.870 }, { 171.063, 100.055, -72.860 }, { 186.128, 99.895, -72.850 },
+ { 201.238, 99.710, -72.840 }, { 216.398, 99.505, -72.820 }, { 231.613, 99.280, -72.810 },
+ { 246.888, 99.020, -72.795 }, { 262.223, 98.750, -72.775 }, { 277.628, 98.455, -72.750 },
+ { 293.108, 98.135, -72.730 }, { 308.663, 97.795, -72.710 }, { 324.293, 97.435, -72.680 },
+ { 340.013, 97.045, -72.655 }
+ },
+ { { -339.998, 97.070, -87.790 }, { -324.278, 97.460, -87.820 }, { -308.648, 97.820, -87.850 },
+ { -293.093, 98.160, -87.885 }, { -277.613, 98.480, -87.910 }, { -262.208, 98.775, -87.935 },
+ { -246.873, 99.050, -87.960 }, { -231.593, 99.300, -87.980 }, { -216.383, 99.530, -88.000 },
+ { -201.223, 99.735, -88.015 }, { -186.113, 99.920, -88.030 }, { -171.048, 100.080, -88.045 },
+ { -156.028, 100.215, -88.055 }, { -141.048, 100.335, -88.065 }, { -126.103, 100.420, -88.070 },
+ { -111.193, 100.490, -88.075 }, { -96.303, 100.540, -88.085 }, { -81.443, 100.565, -88.085 },
+ { -66.608, 100.560, -88.085 }, { -51.783, 100.540, -88.085 }, { -36.973, 100.500, -88.080 },
+ { -22.178, 100.430, -88.075 }, { -7.388, 100.340, -88.065 }, { 7.403, 100.340, -88.070 },
+ { 22.193, 100.430, -88.075 }, { 36.988, 100.500, -88.080 }, { 51.798, 100.540, -88.085 },
+ { 66.623, 100.560, -88.085 }, { 81.458, 100.565, -88.085 }, { 96.318, 100.540, -88.085 },
+ { 111.208, 100.490, -88.075 }, { 126.118, 100.420, -88.070 }, { 141.063, 100.335, -88.065 },
+ { 156.043, 100.215, -88.055 }, { 171.063, 100.080, -88.045 }, { 186.128, 99.915, -88.030 },
+ { 201.238, 99.735, -88.015 }, { 216.398, 99.530, -88.000 }, { 231.613, 99.300, -87.980 },
+ { 246.888, 99.050, -87.960 }, { 262.223, 98.775, -87.935 }, { 277.628, 98.480, -87.910 },
+ { 293.108, 98.160, -87.885 }, { 308.663, 97.820, -87.850 }, { 324.293, 97.460, -87.820 },
+ { 340.013, 97.070, -87.790 }
+ }
+ };
}
|