/**
 * \brief Get a guider port by name
 */
GuiderPortPtr	SxCameraLocator::getGuiderPort0(const DeviceName& name) {
	DeviceName	cameraname(DeviceName::Camera, name);
	cameraname.pop_back();
	debug(LOG_DEBUG, DEBUG_LOG, 0, "looking for guider port of camera %s",
		cameraname.toString().c_str());
	CameraPtr	camera = this->getCamera(cameraname);
	if (!camera->hasGuiderPort()) {
		debug(LOG_ERR, DEBUG_LOG, 0, "camera has no guider port");
		throw NotFound("camera does not have guider port");
	}
	return camera->getGuiderPort();
}
Mock1Camera::Mock1Camera(int _id) : astro::camera::Camera(cameraname(_id)), id(_id) {

	CcdInfo	ccd0(DeviceName(name(), DeviceName::Ccd, "primary ccd"),
		ImageSize(1024, 768), 0);
	ccd0.addMode(Binning(1,1));
	ccd0.pixelwidth(0.00001);
	ccd0.pixelheight(0.00001);
	ccdinfo.push_back(ccd0);

	CcdInfo	ccd1(DeviceName(name(), DeviceName::Ccd, "secondary ccd"),
		ImageSize(640, 480), 1);
	ccd1.addMode(Binning(1,1));
	ccd1.pixelwidth(0.00001);
	ccd1.pixelheight(0.00001);
	ccdinfo.push_back(ccd1);

	debug(LOG_DEBUG, DEBUG_LOG, 0, "mock1 has %d ccds", this->nCcds());
}
SimCamera::SimCamera() : Camera(cameraname("guidesim")) {
	DeviceName	ccdname(name(), DeviceName::Ccd, "primary ccd");
	CcdInfo	ccd0(ccdname, ImageSize(640, 480));
	ccd0.addMode(Binning(1, 1));
	ccdinfo.push_back(ccd0);

	// initial star position
	x = 320;
	y = 240;

	// movement definition
	vx = 0.1;
	vy = 0.2;
	delta = 10;
	ra.clear();
	dec.clear();
	ra.alpha = 1;
	dec.alpha = ra.alpha + M_PI / 2;

	// neither movement nor exposures are active
	exposurestart = -1;
	lastexposure = Timer::gettime();
}