Exemple #1
0
 def setUp(self):
     self.config_dir = tmp_dir("config_dir")
     self.process = Process("proc")
     self.o = ProcessController("MyMRI", self.prefix, self.config_dir.value)
     self.process.add_controller(self.o)
     self.process.start()
     self.b = self.process.block_view("MyMRI")
 def setUp(self):
     self.p = Process("proc")
     self.config_dir = tmp_dir("config_dir")
     for c in detector_block("mri", config_dir=self.config_dir.value):
         self.p.add_controller(c)
     self.p.start()
     self.b = self.p.block_view("mri")
     self.tmpdir = tempfile.mkdtemp()
 def setUp(self):
     self.process = Process("Process")
     self.context = Context(self.process)
     self.child = self.create_child_block(hdf_writer_block,
                                          self.process,
                                          mri="BLOCK:HDF5",
                                          prefix="prefix")
     self.config_dir = tmp_dir("config_dir")
     self.process.start()
 def setUp(self):
     self.p = Process("proc")
     self.config_dir = tmp_dir("config_dir")
     for c in motion_block("mri", config_dir=self.config_dir.value):
         self.p.add_controller(c)
     self.p.start()
     self.b = self.p.block_view("mri")
     self.bx = self.p.block_view("mri:COUNTERX")
     self.by = self.p.block_view("mri:COUNTERY")
Exemple #5
0
 def setUp(self):
     self.o = UnrollingPart(name="Unroll",
                            mri="mri",
                            initial_visibility=True)
     self.process = Process("proc")
     self.process.start()
     self.addCleanup(self.process.stop, 2)
     self.config_dir = tmp_dir("config_dir")
     c = RunnableController("mri", self.config_dir.value)
     c.add_part(self.o)
     self.process.add_controller(c)
     self.b = c.block_view()
Exemple #6
0
    def setUp(self):
        try:
            os.mkdir("/tmp/prod")
        except OSError:
            pass
        self.testArea = "/tmp/prod/testpath-" + floor(time.time()).__repr__()[:-2]
        os.mkdir(self.testArea)
        self.cwd = os.getcwd()

        # Create temporary config directory for ProcessController
        config_dir = tmp_dir("config_dir")
        self.obj = ProcessController("", "", config_dir.value)
Exemple #7
0
    def setUp(self):
        self.process = Process("Process")
        self.context = Context(self.process)

        # Create a fake PandA with a pulse block
        self.panda = ManagerController("PANDA", "/tmp")
        controller = BasicController("PANDA:PULSE3")
        self.pulse_part = PulsePart("part")
        controller.add_part(self.pulse_part)
        self.process.add_controller(controller)
        self.panda.add_part(
            ChildPart("PULSE3",
                      "PANDA:PULSE3",
                      initial_visibility=True,
                      stateful=False))
        self.process.add_controller(self.panda)

        # And the detector
        self.config_dir = tmp_dir("config_dir")
        for c in detector_block("DET", config_dir=self.config_dir.value):
            self.process.add_controller(c)

        # Make the child block holding panda and pmac mri
        self.child = self.create_child_block(
            panda_pulse_trigger_block,
            self.process,
            mri="SCAN:PULSE",
            panda="PANDA",
            detector="DET",
        )

        # And our part under test
        self.o = PandAPulseTriggerPart("detTrigger", "SCAN:PULSE")

        # Add in a scan block
        self.scan = RunnableController("SCAN", "/tmp")
        self.scan.add_part(DetectorChildPart("det", "DET", True))
        self.scan.add_part(self.o)
        self.process.add_controller(self.scan)

        # Now start the process off and tell the panda which sequencer tables
        # to use
        self.process.start()
        exports = ExportTable.from_rows([
            ("PULSE3.width", "detTriggerWidth"),
            ("PULSE3.step", "detTriggerStep"),
            ("PULSE3.delay", "detTriggerDelay"),
            ("PULSE3.pulses", "detTriggerPulses"),
        ])
        self.panda.set_exports(exports)
        self.tmpdir = tempfile.mkdtemp()
Exemple #8
0
 def setUp(self):
     self.process = Process("proc")
     self.config_dir = tmp_dir("config_dir")
     for controller in motion_block(
             mri="TESTMOTION",
             config_dir=self.config_dir.value) + pva_server_block(
                 mri="PVA-SERVER"):
         self.process.add_controller(controller)
     self.process.start()
     self.process2 = Process("proc2")
     for controller in pva_client_block(mri="PVA-CLIENT") + proxy_block(
             mri="TESTMOTION", comms="PVA-CLIENT"):
         self.process2.add_controller(controller)
     self.process2.start()
 def setUp(self):
     self.p = Process("proc")
     self.config_dir = tmp_dir("config_dir")
     for c in (
             detector_block("DETECTOR", config_dir=self.config_dir.value) +
             motion_block("MOTION", config_dir=self.config_dir.value) +
             scan_1det_block("SCANMRI", config_dir=self.config_dir.value)):
         self.p.add_controller(c)
     self.pub = PublishController("PUB")
     self.p.add_controller(self.pub)
     self.p.start()
     self.b = self.p.block_view("SCANMRI")
     self.bd = self.p.block_view("DETECTOR")
     self.tmpdir = tempfile.mkdtemp()
Exemple #10
0
 def setUp(self, mock_client):
     self.process = Process()
     self.config_dir = tmp_dir("config_dir")
     self.o = PandAManagerController(mri="P",
                                     config_dir=self.config_dir.value,
                                     poll_period=1000)
     self.client = self.o._client
     self.client.started = False
     blocks_data = OrderedDict()
     fields = OrderedDict()
     fields["INP"] = FieldData("pos_mux", "", "Input A",
                               ["ZERO", "COUNTER.OUT"])
     fields["START"] = FieldData("param", "", "Start position", [])
     fields["STEP"] = FieldData("param", "", "Step position", [])
     fields["OUT"] = FieldData("bit_out", "", "Output", [])
     blocks_data["PCOMP"] = BlockData(1, "Position Compare", fields)
     fields = OrderedDict()
     fields["INP"] = FieldData("bit_mux", "", "Input",
                               ["ZERO", "TTLIN.VAL"])
     fields["START"] = FieldData("param", "pos", "Start position", [])
     fields["OUT"] = FieldData("pos_out", "", "Output", ["No", "Capture"])
     blocks_data["COUNTER"] = BlockData(1, "", fields)
     fields = OrderedDict()
     fields["VAL"] = FieldData("bit_out", "", "Output", [])
     blocks_data["TTLIN"] = BlockData(2, "", fields)
     blocks_data["PCAP"] = BlockData(1, "", {})
     self.client.get_blocks_data.return_value = blocks_data
     changes = [
         ["PCOMP.INP", "ZERO"],
         ["PCOMP.STEP", "0"],
         ["PCOMP.START", "0"],
         ["PCOMP.OUT", "0"],
         ["COUNTER.INP", "ZERO"],
         ["COUNTER.INP.DELAY", "0"],
         ["COUNTER.OUT", "0"],
         ["COUNTER.OUT.SCALE", "1"],
         ["COUNTER.OUT.OFFSET", "0"],
         ["COUNTER.OUT.UNITS", ""],
         ["TTLIN1.VAL", "0"],
         ["TTLIN2.VAL", "0"],
     ]
     self.client.get_changes.return_value = changes
     pcap_bit_fields = {
         "PCAP.BITS0.CAPTURE":
         ["TTLIN1.VAL", "TTLIN2.VAL", "PCOMP.OUT", ""]
     }
     self.client.get_pcap_bits_fields.return_value = pcap_bit_fields
     self.process.add_controller(self.o)
     self.process.start()
Exemple #11
0
 def setUp(self):
     self.process = Process("proc")
     self.config_dir = tmp_dir("config_dir")
     for controller in detector_block(
             mri="TESTDET",
             config_dir=self.config_dir.value) + pva_server_block(
                 mri="PVA-SERVER"):
         self.process.add_controller(controller)
     self.process.start()
     self.process2 = Process("proc2")
     for controller in pva_client_block(mri="PVA-CLIENT") + proxy_block(
             mri="TESTDET", comms="PVA-CLIENT"):
         self.process2.add_controller(controller)
     self.process2.start()
     self.tmpdir = tempfile.mkdtemp()
Exemple #12
0
    def setUp(self):
        self.p = Process("process1")

        self.p1, self.c1 = self.makeChildBlock("child1")
        self.p2, self.c2 = self.makeChildBlock("child2")
        self.p3, self.c3 = self.makeChildBlock("child3")
        self.c1._block.sinkportConnector.set_value("Connector3")
        self.c2._block.sinkportConnector.set_value("Connector1")
        self.c3._block.sinkportConnector.set_value("Connector2")

        # create a root block for the child blocks to reside in
        self.config_dir = tmp_dir("config_dir")
        self.c = ManagerController(mri="mainBlock", config_dir=self.config_dir.value)
        for part in [self.p1, self.p2, self.p3]:
            self.c.add_part(part)
        self.p.add_controller(self.c)

        # Start the process
        # check that do_initial_reset works asynchronously
        assert self.c.state.value == sm.DISABLED
        self.p.start()
        assert self.c.state.value == sm.READY
    def setUp(self):
        self.process = Process("Process")
        self.context = Context(self.process)
        self.config_dir = tmp_dir("config_dir")
        pmac_block = make_block_creator(__file__,
                                        "test_pmac_manager_block.yaml")
        self.child = self.create_child_block(
            pmac_block,
            self.process,
            mri_prefix="PMAC",
            config_dir=self.config_dir.value,
        )
        # These are the child blocks we are interested in
        self.child_x = self.process.get_controller("BL45P-ML-STAGE-01:X")
        # self.child_y = self.process.get_controller(
        #    "BL45P-ML-STAGE-01:Y")
        self.child_cs1 = self.process.get_controller("PMAC:CS1")
        self.child_traj = self.process.get_controller("PMAC:TRAJ")
        self.child_status = self.process.get_controller("PMAC:STATUS")

        # CS1 needs to have the right port otherwise we will error
        self.set_attributes(self.child_cs1, port="CS1")
        self.move_time = 0.5
        self.o = BeamSelectorPart(
            name="beamSelector",
            mri="PMAC",
            selector_axis="x",
            imaging_angle=0,
            diffraction_angle=0.5,
            imaging_detector="imagingDetector",
            diffraction_detector="diffDetector",
            move_time=self.move_time,
        )
        self.context.set_notify_dispatch_request(
            self.o.notify_dispatch_request)
        self.process.start()

        pass
    def setUp(self):
        self.p = Process("process1")

        # create a child to client
        self.c_child = StatefulController("childBlock")
        self.c_part = MyPart("cp1")
        self.c_child.add_part(self.c_part)
        self.p.add_controller(self.c_child)

        # Create temporary config directory for ProcessController
        self.config_dir = tmp_dir("config_dir")
        self.main_block_name = "mainBlock"
        self.c = ManagerController("mainBlock",
                                   config_dir=self.config_dir.value)
        self.c.add_part(MyPart("part1"))
        self.c.add_part(
            ChildPart("part2", mri="childBlock", initial_visibility=True))
        self.p.add_controller(self.c)
        self.b = self.p.block_view("mainBlock")

        # check that do_initial_reset works asynchronously
        assert self.c.state.value == "Disabled"
        self.p.start()
        assert self.c.state.value == "Ready"
    def setUp(self):

        self.process = Process("Process")
        self.context = Context(self.process)

        # Create a fake PandA
        self.panda = ManagerController("PANDA", "/tmp", use_git=False)
        self.busses = PositionsPart("busses")
        self.panda.add_part(self.busses)
        self.process.add_controller(self.panda)

        # TODO: Add axes to the positions table

        # And the PMAC
        pmac_block = make_block_creator(
            os.path.join(os.path.dirname(__file__), "..", "test_pmac", "blah"),
            "test_pmac_manager_block.yaml",
        )
        self.config_dir = tmp_dir("config_dir")
        self.pmac = self.create_child_block(
            pmac_block,
            self.process,
            mri_prefix="PMAC",
            config_dir=self.config_dir.value,
        )
        # These are the motors we are interested in
        self.child_x = self.process.get_controller("BL45P-ML-STAGE-01:X")
        self.child_y = self.process.get_controller("BL45P-ML-STAGE-01:Y")
        # Set up port and kinematics on CS1
        self.child_cs1 = self.process.get_controller("PMAC:CS1")
        self.set_attributes(self.child_cs1, port="CS1")
        self.set_attributes(self.child_cs1, qVariables="Q22=12345 Q23=999")
        self.set_attributes(self.child_cs1,
                            forwardKinematic="Q1=P1+10 Q5=Q22+4 Q7=8+4 RET ")
        # Set up variables on CS1
        self.child_status = self.process.get_controller("PMAC:STATUS")
        self.set_attributes(self.child_status, iVariables="I12=3")
        self.set_attributes(self.child_status, pVariables="")
        self.set_attributes(self.child_status, mVariables="M45=1 M42=561")

        # Make the child block holding panda and pmac mri
        self.child = self.create_child_block(
            panda_kinematicssavu_block,
            self.process,
            mri="SCAN:KINSAV",
            panda="PANDA",
            pmac="PMAC",
        )

        self.o = KinematicsSavuPart(name="kinsav",
                                    mri="SCAN:KINSAV",
                                    cs_port="CS1",
                                    cs_mri_suffix="CS1")
        self.context.set_notify_dispatch_request(
            self.o.notify_dispatch_request)
        self.process.start()
        self.set_attributes(self.pmac)

        self.completed_steps = 0
        # goal for these is 3000, 2000, True
        cols, rows, alternate = 3000, 2000, False
        self.steps_to_do = cols * rows
        xs = LineGenerator("x", "mm", 0.0, 0.1, cols, alternate=alternate)
        ys = LineGenerator("y", "mm", 0.0, 0.1, rows)
        self.generator = CompoundGenerator([ys, xs], [], [], 0.1)
        self.generator.prepare()
Exemple #16
0
 def test_tmp_dir(self):
     d = tmp_dir("config")
     assert d.name == "config"
     assert d.value.startswith("/tmp")
     assert os.path.isdir(d.value)
     os.rmdir(d.value)
    def setUp(self):
        self.process = Process("Process")
        self.context = Context(self.process)

        # Create a fake PandA
        self.panda = ManagerController("PANDA", "/tmp", use_git=False)
        self.busses = PositionsPart("busses")
        self.panda.add_part(self.busses)

        # Make 2 sequencers we can prod
        self.seq_parts = {}
        for i in (1, 2):
            controller = BasicController("PANDA:SEQ%d" % i)
            self.seq_parts[i] = SequencerPart("part")
            controller.add_part(self.seq_parts[i])
            self.process.add_controller(controller)
            self.panda.add_part(
                ChildPart(
                    "SEQ%d" % i,
                    "PANDA:SEQ%d" % i,
                    initial_visibility=True,
                    stateful=False,
                ))
        self.child_seq1 = self.process.get_controller("PANDA:SEQ1")
        self.child_seq2 = self.process.get_controller("PANDA:SEQ2")

        # And an srgate
        controller = BasicController("PANDA:SRGATE1")
        self.gate_part = GatePart("part")
        controller.add_part(self.gate_part)
        self.process.add_controller(controller)
        self.panda.add_part(
            ChildPart("SRGATE1",
                      "PANDA:SRGATE1",
                      initial_visibility=True,
                      stateful=False))
        self.process.add_controller(self.panda)

        # And the PMAC
        pmac_block = make_block_creator(
            os.path.join(os.path.dirname(__file__), "..", "test_pmac", "blah"),
            "test_pmac_manager_block.yaml",
        )
        self.config_dir = tmp_dir("config_dir")
        self.pmac = self.create_child_block(
            pmac_block,
            self.process,
            mri_prefix="PMAC",
            config_dir=self.config_dir.value,
        )
        # These are the motors we are interested in
        self.child_x = self.process.get_controller("BL45P-ML-STAGE-01:X")
        self.child_y = self.process.get_controller("BL45P-ML-STAGE-01:Y")
        self.child_cs1 = self.process.get_controller("PMAC:CS1")
        # CS1 needs to have the right port otherwise we will error
        self.set_attributes(self.child_cs1, port="CS1")

        # Make the child block holding panda and pmac mri
        self.child = self.create_child_block(
            panda_seq_trigger_block,
            self.process,
            mri="SCAN:PCOMP",
            panda="PANDA",
            pmac="PMAC",
        )

        # And our part under test
        self.o = PandASeqTriggerPart("pcomp", "SCAN:PCOMP")

        # Now start the process off and tell the panda which sequencer tables
        # to use
        self.process.start()
        exports = ExportTable.from_rows([
            ("SEQ1.table", "seqTableA"),
            ("SEQ2.table", "seqTableB"),
            ("SRGATE1.forceSet", "seqSetEnable"),
            ("SRGATE1.forceReset", "seqReset"),
        ])
        self.panda.set_exports(exports)