-
Notifications
You must be signed in to change notification settings - Fork 1
How to Use
Xavier MD edited this page Jun 25, 2026
·
2 revisions
import sys
from PyQt6.QtWidgets import QApplication
from micecraft.devices.gate.Gate import Gate, GateOrder
from micecraft.devices.waterpump.WaterPump import WaterPump
from micecraft.devices.touchscreen.TouchScreen import TouchScreen
from micecraft.devices.roomSensor.RoomSensorDigest import RoomSensorDigest
from micecraft.soft.camera_recorder.CameraRecorder import CameraRecorder
from micecraft.examples.experiments.visualdiscrimination.experiment import (
Criteria,
Phase,
Room,
TSImage,
VisualDiscriminationExperiment,
)
from micecraft.examples.experiments.visualdiscrimination.interface import (
excepthook,
VisualRoom,
VisualDiscriminationInterface,
)
# ================ EXPERIMENT PARAMETERS ================
def define_experiment_parameters():
# Images
# ----------------
images_to_attribute = [TSImage.PLANE, TSImage.FLOWER]
# Phases creation
# ----------------
Phase.ALL = []
Phase(
"BLACK_WHITE",
1,
Criteria(min_rewards=10, min_trials=50),
force_correct_image=TSImage.LIGHT,
)
Phase("FLOWER_PLANE", 2, Criteria(accuracy=(0.8, 50)))
Phase("REVERSAL", 3, Criteria(accuracy=(0.8, 50)), use_opposite=True)
Phase("END", 4, Criteria(), force_correct_image=TSImage.DARK)
# Room creation
# ----------------
Room.ALL = []
wp_alpha = WaterPump(comPort="COM22")
ts_alpha = TouchScreen(comPort="COM20")
gate_alpha = Gate(
COM_Servo="COM36",
COM_Arduino="COM30",
COM_RFID="COM27",
weightFactor=0.6,
mouseAverageWeight=25,
)
gate_alpha.setOrder(
GateOrder.ONLY_ONE_ANIMAL_IN_B,
options=["no rfid check on return"],
)
Room(
name="rA",
gate=gate_alpha,
touchscreen=ts_alpha,
waterpump=wp_alpha,
)
# Global recording
# ----------------
cam_recorder = CameraRecorder(
deviceNumber=0, bufferDurationS=50, showStream=True
) # for saving videos
sensors = RoomSensorDigest(
comPort="COM25", delayS=5 * 60
) # get environment data every 5 minutes
# RETURN
# ----------------
return images_to_attribute, sensors, cam_recorder
def construct_app_visual(interface: VisualDiscriminationInterface):
"""Construct the visual representation of the experiment."""
# get room names from the experiment in order of creation
room_names = [room.name for room in interface.experiment.get_all_rooms()]
VisualRoom(
parent=interface,
name=str(room_names[0]),
gate_pos=(2, 0),
gate_touchscreen_direction="right",
)
interface.init_house(house_size=(2, 1))
interface.init_rooms()
interface.resize(1000, 400)
interface.setWindowTitle("MiceCraft - Visual Discrimination Example")
if __name__ == "__main__":
print("*** Start of program ***")
experiment_parameters = define_experiment_parameters()
sys.excepthook = excepthook
app = QApplication([])
interface = VisualDiscriminationInterface()
app.aboutToQuit.connect(interface.shutdown)
experiment = VisualDiscriminationExperiment(*experiment_parameters)
interface.set_experiment(experiment)
construct_app_visual(interface)
interface.start()
interface.show()
sys.exit(app.exec())
print("*** End of program ***")TODO
MiceCraft Documentation
Official Website: micecraft.org
Official Discord: Discord