Skip to content
Snippets Groups Projects
Commit c797aefc authored by Abdelali Elaazzouzi's avatar Abdelali Elaazzouzi
Browse files

New controller for Camera Acquisition

parent 356d976c
No related branches found
No related tags found
No related merge requests found
/*
* Nomad Instrument Control Software
*
* Copyright 2011 Institut Laue-Langevin
*
* Licensed under the EUPL, Version 1.1 only (the "License");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://joinup.ec.europa.eu/software/page/eupl
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
*/
#include "CameraSetting.h"
#include "controllers/common/family/Families.h"
#include <boost/lexical_cast.hpp>
using namespace boost;
namespace camera {
const std::string CameraSetting::TYPE = "Camerasetting";
const std::string CameraSetting:: BINNING[5] = {"NONE", "2048*2048","1024*1024","NONE","512*512"};
const std::string CameraSetting:: MODE[5] = {"ND", "Single","ND","Multi","ND"};
CameraSetting::CameraSetting(const string& name) :
ExperimentController(name), controller::Start(this) {
setFamily(family::ACQUISITION, family::SETTING);
binning.init(this, SAVE , "actualBinning", "wantedBinning");
hflip.init(this, SAVE, "hflip");
vflip.init(this, SAVE, "vflip");
rotate.init(this, SAVE, "rotate");
mode.init(this, SAVE, "actualmode", "wantedmode");
nbKine.init(this, SAVE, "nbKine");
kineTime.init(this, SAVE, "kineTime");
stringbinning.init(this, NOSAVE| SPY, "actualstringbin", "wantedstringbin", "Binn");
stringmode.init(this, NOSAVE| SPY, "actualstringmode", "wantedstringmode", "Frame");
temperature.init(this, SAVE| SPY, "actualtemp", "wantedtemp", "Temp");
temperature.setUnit("~degree");
m_CamDriver.init(this, "cammeraDriver");
detectorController.init(this, "detectorController");
detectorElement.init(this, "detectorElement");
registerFunction(TYPE);
}
CameraSetting::~CameraSetting() {
}
void CameraSetting::postConfiguration() {
binning=m_CamDriver->bind();
mode=m_CamDriver->acqmode();
temperature=m_CamDriver->actualTemperature();
stringbinning=BINNING[binning()];
stringmode=MODE[mode()];
registerRefresher(binning, &CameraSetting::refreshBinning, this);
registerRefresher(mode, &CameraSetting::refreshMode, this);
registerUpdater(m_CamDriver->bind, &CameraSetting::updateBinning, this);
registerUpdater(m_CamDriver->acqmode, &CameraSetting::updateMode, this);
registerUpdater(m_CamDriver->actualTemperature, &CameraSetting::updateTemperature, this);
}
void CameraSetting::start() {
int value=binning.setpoint();
m_CamDriver->bind = value;
m_CamDriver->acqmode=mode.setpoint();
m_CamDriver->hflip = hflip();
m_CamDriver->vflip = vflip();
m_CamDriver->nbSlicesAcq = nbKine();
//m_CamDriver->time = kineTime();
if (value!=0){
detectorController->detSize=(MAX_XSIZE/value *MAX_YSIZE/value);
//detectorController->detSize=(MAX_XSIZE *MAX_YSIZE);
detectorElement->xSize=(MAX_XSIZE/value);
detectorElement->ySize=(MAX_YSIZE/value);
}
if (mode()==3){
if (value!=0){
detectorElement->wSize=nbKine();
detectorController->detSize=(MAX_XSIZE/value *MAX_YSIZE/value)*nbKine();
detectorController->wSize=nbKine();
}
}
m_CamDriver->execute("writeParam");
}
void CameraSetting::refreshBinning(int32 value) {
}
void CameraSetting::refreshMode(int32 value) {
}
void CameraSetting::updateBinning() {
binning=m_CamDriver->bind();
stringbinning=BINNING[binning()];
}
void CameraSetting::updateTemperature() {
temperature=m_CamDriver->actualTemperature();
}
void CameraSetting::updateMode() {
mode=m_CamDriver->acqmode();
stringmode=MODE[mode()];
}
}
/*
* Nomad Instrument Control Software
*
* Copyright 2011 Institut Laue-Langevin
*
* Licensed under the EUPL, Version 1.1 only (the "License");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://joinup.ec.europa.eu/software/page/eupl
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
*/
/*!
* \brief Class described the camera setting
* \author elaazzouzi
* \date 02-11-2016
*/
#ifndef CameraSETTING_H
#define CameraSETTING_H
#include "controllers/common/acquisition/detector/DetectorElement.h"
#include "controllers/common/acquisition/detector/DetectorController.h"
#include "drivers/andor/ikon/IKonDriver.h"
namespace camera {
/**
* Class providing the Camera parameters.
*/
class CameraSetting : public ExperimentController, public controller::Start {
public:
//! Type of controller
static const std::string TYPE;
static const string BINNING[5];
static const string MODE[5];
/**
* Constructor.
*/
CameraSetting(const std::string& name);
/**
* Destructor.
*/
virtual ~CameraSetting();
/**
* Configuration after controller assignments.
*/
virtual void postConfiguration();
/**
* Start command.
*/
virtual void start();
/**
* Refreshes binning.
*/
void refreshBinning(int32 value);
void refreshMode(int32 value);
void updateBinning();
void updateMode();
void updateTemperature();
Property<int32> hflip;
Property<int32> vflip;
Property<int32> rotate;
Property<int32, SETPOINT> mode;
Property<float64> kineTime;
Property<int32> nbKine;
Property<int32, SETPOINT> temperature;
Property<string, SETPOINT> stringbinning;
Property<string, SETPOINT> stringmode;
Property<int32, SETPOINT> binning;
DriverPtr<ikon::IKonDriver> m_CamDriver;
ControllerPtr<acquisition::DetectorElement> detectorElement;
ControllerPtr<acquisition::DetectorController> detectorController;
#define MAX_XSIZE 2048
#define MAX_YSIZE 2048
#define MAX_TOTALSIZE 4194304
};
}
#endif
<module name="camera">
<controller class="camera::CameraSetting"/>
<include path="$(NOMAD_HOME)/../NomadModules/src"/>
</module>
Camerasetting.setup=Setup
Camerasetting.actual=Actual
Camerasetting.divisors=Divisors
Camerasetting.wanted_time=Time
Camerasetting.actual_time=Time
Camerasetting.wanted_kine=Nb Frame
Camerasetting.bind=Binning
# Mode combo
Camerasetting.2048Label=2048*2048
Camerasetting.2048Value=1
Camerasetting.1024Label=1024*1024
Camerasetting.1024Value=2
Camerasetting.512Label=512*512
Camerasetting.512Value=4
Camerasetting.orientation=Orientation
# Mode check
Camerasetting.hflipPrefix=H Flip
Camerasetting.hflipCheckedValue=1
Camerasetting.hflipUncheckedValue=0
Camerasetting.vflipPrefix=V Flip
Camerasetting.vflipCheckedValue=1
Camerasetting.vflipUncheckedValue=0
Camerasetting.rotatePrefix=Rotation
Camerasetting.bindPrefix=Binning
Camerasetting.CW90Label=CW 90
Camerasetting.CW90Value=1
Camerasetting.CCW90Label=CCW 90
Camerasetting.CCW90Value=2
Camerasetting.NoneLabel=None
Camerasetting.NoneValue=0
Camerasetting.modePrefix=Mode
Camerasetting.kine= Frame
Camerasetting.CountLabel=Single
Camerasetting.CountValue=1
Camerasetting.KineLabel=Multi
Camerasetting.KineValue=3
Camerasetting.wanted_temperature=Wanted Temp
Camerasetting.actual_temperature=Actual Temp
<plugin>
<controller type="Camerasetting" role="Camerasetting1" />
<property_switcher role="Camerasetting1" property="wantedmode"
switcher_key="modeSwitcher" />
<number_of_lines nb_lines="2" />
<combo role="Camerasetting1" property="wantedBinning" prefix="Camerasetting.bindPrefix"
valuesAndLabels="Camerasetting.2048,Camerasetting.1024,Camerasetting.512" />
<combo role="Camerasetting1" property="wantedmode" prefix="Camerasetting.modePrefix"
valuesAndLabels="Camerasetting.Count,Camerasetting.Kine" />
<switchable_composite switcher_key="modeSwitcher"
switch_values="3">
<text role="Camerasetting1" property="nbKine" prefix="Camerasetting.wanted_kine" />
</switchable_composite>
</plugin>
<controller_plugin_config type="Camerasetting">
<image key="HARDWARE_MMODULE"/>
<settings view="CamerasettingView.xml"/>
<command view="CamerasettingCommandView.xml"/>
</controller_plugin_config>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<controller type="Camerasetting">
<property name="wantedBinning" type="long">
</property>
<property name="actualBinning" type="long">
</property>
<property name="hflip" type="long">
</property>
<property name="vflip" type="long">
</property>
<property name="rotate" type="long">
</property>
<property name="actualmode" type="long">
</property>
<property name="wantedmode" type="long">
</property>
<property name="nbKine" type="long">
</property>
<property name="temperature" type="long">
</property>
<property name="kineTime" type="double">
</property>
</controller>
<plugin>
<controller type="Camerasetting" role="Camerasetting1" />
<property_switcher role="Camerasetting1" property="wantedmode" switcher_key="modeSwitcher"/>
<newLine />
<table_composite nbColumns="3">
<group title="Camerasetting.bind">
<combo role="Camerasetting1" property="wantedBinning"
prefix="Camerasetting.bindPrefix" valuesAndLabels="Camerasetting.2048,Camerasetting.1024,Camerasetting.512" />
<newLine />
</group>
<newLine />
<group title="Camerasetting.orientation">
<check role="Camerasetting1" property="hflip"
prefix="Camerasetting.hflipPrefix" checkBoxValues="Camerasetting.hflip" />
<newLine />
<check role="Camerasetting1" property="vflip"
prefix="Camerasetting.vflipPrefix" checkBoxValues="Camerasetting.vflip" />
<newLine />
<combo role="Camerasetting1" property="rotate"
prefix="Camerasetting.rotatePrefix" valuesAndLabels="Camerasetting.None,Camerasetting.CW90,Camerasetting.CCW90" />
</group>
<newLine />
<group title="Camerasetting.kine">
<combo role="Camerasetting1" property="wantedmode"
prefix="Camerasetting.modePrefix" valuesAndLabels="Camerasetting.Count,Camerasetting.Kine" />
<newLine />
<switchable_composite switcher_key="modeSwitcher" switch_values="3">
<text role="Camerasetting1" property="nbKine" prefix="Camerasetting.wanted_kine" />
</switchable_composite>
</group>
</table_composite>
</plugin>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment