コード例 #1
0
    def test_generateRandomTargets_method(self, bench):
        # Generate the targets
        density = 5
        targets = targetUtils.generateRandomTargets(density, bench)

        # Check that the targets fall within the bench
        distances = np.abs(targets.positions - bench.center)
        assert np.all(distances <= bench.radius)

        # Check that we get the expected density at different test radii
        testRadii = bench.radius * np.linspace(0.2, 1, 9)
        testTargets = np.sum(distances < testRadii[:, np.newaxis], axis=1)
        testDensities = testTargets * (np.mean(bench.cobras.rMax**2) /
                                       testRadii**2)
        assert np.all(np.abs(testDensities - density) < 0.2 * density)
コード例 #2
0
    def test_calculateAccessibleTargets_method(self, bench, testParameters):
        # Extract the test parameters
        randomTargetDistribution, targetDensity, useKDTree = testParameters

        # Create the targets
        if randomTargetDistribution:
            targets = targetUtils.generateRandomTargets(targetDensity, bench)
        else:
            targets = targetUtils.generateOneTargetPerCobra(bench)

        # Create a dummy TargetSelector
        selector = TargetSelectorSubclass(bench, targets)

        # Construct the KD tree if requested
        if useKDTree:
            selector.constructKDTree()

        # Calculate the accessible targets for each cobra
        selector.calculateAccessibleTargets()

        # Check that the targets fall inside the cobras patrol areas
        cobraCenters = bench.cobras.centers
        indices = selector.accessibleTargetIndices
        positions = targets.positions[indices]
        distances = np.abs(cobraCenters[:, np.newaxis] - positions)
        validTargets = indices != NULL_TARGET_INDEX
        assert np.all(
            (distances < bench.cobras.rMax[:, np.newaxis])[validTargets])
        assert np.all(
            (distances > bench.cobras.rMin[:, np.newaxis])[validTargets])

        # Check that the accessible targets are ordered by distance
        for i in range(bench.cobras.nCobras):
            indices = selector.accessibleTargetIndices[i]
            distances = selector.accessibleTargetDistances[i]
            validTargets = indices != NULL_TARGET_INDEX
            nTargets = np.sum(validTargets)
            assert np.all(
                distances[:nTargets] == np.sort(distances[validTargets]))
コード例 #3
0
ファイル: demo3.py プロジェクト: Subaru-PFS/ics_cobraOps
    calibrationProduct.L2[~tooLongLinkLengths])
print("Cobras with too long link lenghts: %i" % np.sum(tooLongLinkLengths))

# Load the black dots calibration file
calibrationFileName = os.path.join(
    os.environ["PFS_INSTDATA_DIR"],"data/pfi/dot", "black_dots_mm.csv")
blackDotsCalibrationProduct = BlackDotsCalibrationProduct(calibrationFileName)

# Create the bench instance
bench = Bench(layout="calibration", calibrationProduct=calibrationProduct,
              blackDotsCalibrationProduct=blackDotsCalibrationProduct)
print("Number of cobras:", bench.cobras.nCobras)

# Generate the targets
targetDensity = 1.5
targets = targetUtils.generateRandomTargets(targetDensity, bench)
print("Number of simulated targets:", targets.nTargets)

# Select the targets
selector = DistanceTargetSelector(bench, targets)
selector.run()
selectedTargets = selector.getSelectedTargets()

# Simulate an observation
start = time.time()
simulator = CollisionSimulator2(bench, cobraCoach, selectedTargets)
simulator.run()
print("Number of cobras involved in collisions:", simulator.nCollisions)
print("Number of cobras unaffected by end collisions: ",
      simulator.nCollisions - simulator.nEndPointCollisions)
print("Total simulation time (s):", time.time() - start)
コード例 #4
0
endCollisionsArray = np.zeros(len(maxDistanceArray))

# Load the cobras calibration product
calibrationProduct = CobrasCalibrationProduct(
    "updatedMotorMapsFromThisRun2.xml")

# Calculate the collisions for each maxDist-density combination
for i in range(len(maxDistanceArray)):
    print("TargetDensity", targetDensityArray[i], "MaxDistance",
          maxDistanceArray[i])

    # Create the bench instance
    bench = Bench(layout="full", calibrationProduct=calibrationProduct)

    # Create a random sample of targets
    targets = targetUtils.generateRandomTargets(targetDensityArray[i], bench)

    # Select the targets
    selector = DistanceTargetSelector(bench, targets)
    selector.run(maximumDistance=maxDistanceArray[i],
                 solveCollisions=solveCollisions)
    selectedTargets = selector.getSelectedTargets()

    # Simulate an observation
    simulator = CollisionSimulator(bench, selectedTargets)
    simulator.run()

    # Fill the statistics arrays
    unassignedCobrasArray[i] = np.sum(simulator.assignedCobras == False)
    collisionsArray[i] = simulator.nCollisions
    endCollisionsArray[i] = simulator.nEndPointCollisions
コード例 #5
0
def targets(bench):
    return targetUtils.generateRandomTargets(2, bench)