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)
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]))
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)
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
def targets(bench): return targetUtils.generateRandomTargets(2, bench)