Commit d29c60f5 authored by Cristina Cocho's avatar Cristina Cocho
Browse files

downgrade of special spectro module

parent aac5f7b6
......@@ -134,13 +134,15 @@ void CountWithSpectro::startCount() {
void CountWithSpectro::startSpectro() {
for (int i = 0; i < numSpectroMeasures(); i++) {
if (commandStatus.isRunning()) {
spectro->startCommand();
spectro->startCommand();
int32 ySize = spectro->yData.getSize(); //be careful, maybe the driver gives us a different size
float64* tempYData = spectro->yData();
for (int32 j = 0; j < ySize; j++) {
m_totalYData[ySize * i + j] = tempYData[j];
int32 ySize = spectro->yData.getSize(); //be careful, maybe the driver gives us a different size
float64* tempYData = spectro->yData();
for (int32 j = 0; j < ySize; j++) {
m_totalYData[ySize * i + j] = tempYData[j];
}
}
}
}
......
......@@ -25,7 +25,7 @@ namespace d22special {
const string D22SampleSequencer::TYPE = "d22_sample_sequencer";
D22SampleSequencer::D22SampleSequencer(const std::string& name) :
d22::SampleSequencer(name) {
::SampleSequencer(name, "") {
registerFunction(TYPE);
setFamily(family::SAMPLE_ENVIRONMENT);
......@@ -42,82 +42,173 @@ D22SampleSequencer::~D22SampleSequencer() {
void D22SampleSequencer::postConfiguration() {
SampleSequencer::postConfiguration();
//Set up measuring mode in spectro controller
// spectroController->mode = QE65000Controller::SEQUENCE;
registerUpdater(sampleChanger->slot, &D22SampleSequencer::updateActualSlot, this);
registerUpdater(count->statusMessage, &D22SampleSequencer::updateStatusMessage, this);
registerUpdater(count->numor, &D22SampleSequencer::updateNumor, this);
registerUpdater(spectroController->integrationTime, &D22SampleSequencer::updateIntegrationTime, this);
registerUpdater(spectroController->scansToAverage, &D22SampleSequencer::updateScansToAverage, this);
}
void D22SampleSequencer::updateActualSlot() {
spectroController->setPlotName(sampleChanger->slot());
actualSlotNumber = sampleChanger->slot();
}
void D22SampleSequencer::execute(const string& command, bool blocking, bool logging) { //necessary?
spectroController->mode = QE65000Controller::SEQUENCE;
void D22SampleSequencer::updateStatusMessage() {
std::string countStatus = count->statusMessage();
if (countStatus == "Idle") {
getSpectro();
SampleSequencer::execute(command, blocking, logging);
//Once the last count is done force to do another spectro measure
if (command == START_COMMAND) {
doLastMeasure();
}
spectroController->mode = QE65000Controller::ALONE;
}
void D22SampleSequencer::updateNumor() {
lastNumor = count->numor();
}
void D22SampleSequencer::updateProperty(ChangeAspect* aChangeAspect) {
void D22SampleSequencer::updateIntegrationTime() {
integrationTime = spectroController->integrationTime();
}
SampleSequencer::updateProgress(aChangeAspect);
void D22SampleSequencer::updateScansToAverage() {
scansToAverage = spectroController->scansToAverage();
}
string propertyName = aChangeAspect->getStringParam();
if (propertyName == "actual_cha") {
int32 actualSlot = any_cast<int32>(m_sampleChanger->getValue(propertyName));
spectroController->setPlotName(actualSlot);
actualSlotNumber = actualSlot;
} else if (propertyName == "status_message") {
std::string countStatus = any_cast<std::string>(m_Count->getValue(propertyName));
if (countStatus == "Idle") {
getSpectro();
}
} else if (propertyName == "numor") {
lastNumor = any_cast<int32>(m_Count->getValue(propertyName));
}
void D22SampleSequencer::start() {
commandStatus.setRunning();
spectroController->mode = QE65000Controller::SEQUENCE;
d22::SampleSequencer::start();
//Once the last count is done force to do another spectro measure
doLastMeasure();
commandStatus.setIdle();
spectroController->mode = QE65000Controller::ALONE;
}
void D22SampleSequencer::stop() {
commandStatus.setWarning();
d22::SampleSequencer::stop();
void D22SampleSequencer::refreshSetValue(string propertyName, const boost::any aValue) throw (CannotSetValue) {
SampleSequencer::refreshSetValue(propertyName, aValue);
}
void D22SampleSequencer::getSpectro() {
//Check the sampleSequencer is running
if (commandStatus.isRunning()) {
spectroController->start();
//Copy data in nexus file (remember it is delayed in one position)
if (actualSlotNumber > 1 && commandStatus.isRunning()) {
int32 numor = any_cast<int32>(count->getValue("numor"));
cout << "appending data to nexus file! (1)" << numor - 1 << endl;
NexusDataFile::appendTo(numor - 1, "NxD22SpecialServerFile.xml", "NxD22SpecialClientFile.xml");
}
spectroController->start();
//Copy data in nexus file (remember it is delayed in one position)
if (actualSlotNumber > 1) {
int32 numor = any_cast<int32>(m_Count->getValue("numor"));
NexusDataFile::appendTo(numor - 1, "NxD22SpecialServerFile.xml", "NxD22SpecialClientFile.xml");
}
}
void D22SampleSequencer::doLastMeasure() {
if (commandStatus.isRunning()) {
//Last measure = move sample (using sampleChanger) + get spectro + save data in nexus file
sampleChanger->start();
spectroController->start();
int32 numor = any_cast<int32>(count->getValue("numor"));
cout << "appending data to nexus file! (2) " << numor << endl;
NexusDataFile::appendTo(numor, "NxD22SpecialServerFile.xml", "NxD22SpecialClientFile.xml");
// cout << "adding new data (theoretically) in data file: " << numor << " value of last numor: " << lastNumor << endl;
}
//Last measure = move sample (using sampleChanger) + get spectro + save data in nexus file
Sender<ClientCommand>::begin();
Sender<ClientCommand>::post(ClientCommand(m_sampleChanger, START_COMMAND));
Sender<ClientCommand>::endIf();
spectroController->start();
int32 numor = any_cast<int32>(m_Count->getValue("numor"));
NexusDataFile::appendTo(numor, "NxD22SpecialServerFile.xml", "NxD22SpecialClientFile.xml");
// cout << "adding new data (theoretically) in data file: " << numor << " value of last numor: " << lastNumor << endl;
}
}
/*
void D22SampleSequencer::postConfiguration() {
SampleSequencer::postConfiguration();
//Set up measuring mode in spectro controller
// spectroController->mode = QE65000Controller::SEQUENCE;
registerUpdater(sampleChanger->slot, &D22SampleSequencer::updateActualSlot, this);
registerUpdater(count->statusMessage, &D22SampleSequencer::updateStatusMessage, this);
registerUpdater(count->numor, &D22SampleSequencer::updateNumor, this);
registerUpdater(spectroController->integrationTime, &D22SampleSequencer::updateIntegrationTime, this);
registerUpdater(spectroController->scansToAverage, &D22SampleSequencer::updateScansToAverage, this);
}
void D22SampleSequencer::updateActualSlot() {
spectroController->setPlotName(sampleChanger->slot());
actualSlotNumber = sampleChanger->slot();
}
void D22SampleSequencer::updateStatusMessage() {
std::string countStatus = count->statusMessage();
if (countStatus == "Idle") {
getSpectro();
}
}
void D22SampleSequencer::updateNumor() {
lastNumor = count->numor();
}
void D22SampleSequencer::updateIntegrationTime() {
integrationTime = spectroController->integrationTime();
}
void D22SampleSequencer::updateScansToAverage() {
scansToAverage = spectroController->scansToAverage();
}
void D22SampleSequencer::start() {
commandStatus.setRunning();
spectroController->mode = QE65000Controller::SEQUENCE;
d22::SampleSequencer::start();
//Once the last count is done force to do another spectro measure
doLastMeasure();
commandStatus.setIdle();
spectroController->mode = QE65000Controller::ALONE;
}
void D22SampleSequencer::stop() {
commandStatus.setWarning();
d22::SampleSequencer::stop();
}
void D22SampleSequencer::getSpectro() {
//Check the sampleSequencer is running
if (commandStatus.isRunning()) {
spectroController->start();
//Copy data in nexus file (remember it is delayed in one position)
if (actualSlotNumber > 1 && commandStatus.isRunning()) {
int32 numor = any_cast<int32>(count->getValue("numor"));
cout << "appending data to nexus file! (1)" << numor - 1 << endl;
NexusDataFile::appendTo(numor - 1, "NxD22SpecialServerFile.xml", "NxD22SpecialClientFile.xml");
}
}
}
void D22SampleSequencer::doLastMeasure() {
if (commandStatus.isRunning()) {
//Last measure = move sample (using sampleChanger) + get spectro + save data in nexus file
sampleChanger->start();
spectroController->start();
int32 numor = any_cast<int32>(count->getValue("numor"));
cout << "appending data to nexus file! (2) " << numor << endl;
NexusDataFile::appendTo(numor, "NxD22SpecialServerFile.xml", "NxD22SpecialClientFile.xml");
// cout << "adding new data (theoretically) in data file: " << numor << " value of last numor: " << lastNumor << endl;
}
}
}*/
......@@ -19,15 +19,17 @@
#ifndef IN16BSAMPLESEQUENCER_H_
#define IN16BSAMPLESEQUENCER_H_
#include "controllers/lss/d22/sampleControl/SampleSequencer.h"
#include "InstrumentAbstraction/Lss/SampleSequencer.h"
#include "controllers/spectrometer/QE65000Controller.h"
using namespace spectrometer;
using namespace d22;
//using namespace d22;
namespace d22special {
class D22SampleSequencer : public d22::SampleSequencer {
class D22SampleSequencer : public ::SampleSequencer {
public:
......@@ -45,14 +47,23 @@ public:
virtual void postConfiguration();
virtual void start();
virtual void stop();
virtual void execute(const string& command, bool blocking, bool logging = false);
virtual void updateProperty(ChangeAspect* aChangeAspect);
virtual void refreshSetValue(string propertyName, const boost::any aValue) throw (CannotSetValue);
//new things here!
// virtual void start();
// virtual void stop();
virtual void updateActualSlot();
virtual void updateStatusMessage();
virtual void updateNumor();
virtual void updateIntegrationTime();
virtual void updateScansToAverage();
// virtual void updateActualSlot();
// virtual void updateStatusMessage();
// virtual void updateNumor();
// virtual void updateIntegrationTime();
// virtual void updateScansToAverage();
private:
......
<module name="d22special">
<include path="$(NOMAD_HOME)/../NomadModules/src"/>
<include path="$(NOMAD_HOME)/../NomadModules/src"/>
<controller class="d22special::D22SampleSequencer"/>
<controller class="d22special::CountWithSpectro"/>
</module>
\ No newline at end of file
<plugin>
<controller type="count_with_spectro" role="count_with_spectro1" />
<text role="count_with_spectro1" property="count_time" prefix="count_with_spectro.countTime"/>
<radio role="count_with_spectro1" property="time_type" valuesAndLabels="count_with_spectro.h,count_with_spectro.m,count_with_spectro.s" spaceBefore="false" />
<text role="count_with_spectro1" property="integration_time" prefix="count_with_spectro.integration_timePrefix" suffix="count_with_spectro.integration_timeSuffix"/>
<text role="count_with_spectro1" property="num_spectro" prefix="count_with_spectro.numSpectro"/>
</plugin>
\ No newline at end of file
......@@ -2,5 +2,6 @@
<image key="COUNT"/>
<settings view="count_with_spectroView.xml"/>
<command view="count_with_spectroCommandView.xml"/>
</controller_plugin_config>
\ No newline at end of file
d22_sample_sequencer.changer_numberPrefix=Changer #
d22_sample_sequencer.wanted_slotLabel=Wanted number of positions
d22_sample_sequencer.maxSlotLabel= Max Slots
d22_sample_sequencer.totalTimeLabel=Total Time
d22_sample_sequencer.integration_time=Time
d22_sample_sequencer.integration_timeSuffix=~mus
d22_sample_sequencer.scan_average=Scans to average
# Groups
d22_sample_sequencer.acquisitionGroup=Acquisition
d22_sample_sequencer.changer_numberPrefix=Changer name
d22_sample_sequencer.slotPrefix=Slot
d22_sample_sequencer.acquisitionTimePrefix=Duration
d22_sample_sequencer.titlePrefix=Run Title
d22_sample_sequencer.transmissionPrefix=Transmission
d22_sample_sequencer.thicknessPrefix=Thickness
d22_sample_sequencer.shortSlotPrefix=Slot
d22_sample_sequencer.shortAcquisitionTimePrefix=Time
d22_sample_sequencer.shortTitlePrefix=Title
d22_sample_sequencer.shortTransmissionPrefix=Trans
d22_sample_sequencer.shortThicknessPrefix=Thick
d22_sample_sequencer.samplechangerGroup=Sample Changer
d22_sample_sequencer.spectroGroup=Spectro
d22_sample_sequencer.acquisitionGroup=Acquisition
d22_sample_sequencer.slotLabel=Used Slots
d22_sample_sequencer.maxSlotLabel=Max Slots
d22_sample_sequencer.totalTimeLabel=Total Time
d22_sample_sequencer.changer_numberPrefix=Changer #
d22_sample_sequencer.wanted_nbpositionLabel=Wanted number of positions
# Radio buttons h/m/s
d22_sample_sequencer.hValue=h
......@@ -25,4 +31,30 @@ d22_sample_sequencer.timeLabel=Time
d22_sample_sequencer.timeImage=MODE_TIME
d22_sample_sequencer.countsImage=MODE_COUNTS
d22_sample_sequencer.countsValue=counts
d22_sample_sequencer.countsLabel=Monitor
\ No newline at end of file
d22_sample_sequencer.countsLabel=Monitor
#values and labels
d22_sample_sequencer.changer1Value=1
d22_sample_sequencer.changer1Label=Changer#1
d22_sample_sequencer.changer2Value=2
d22_sample_sequencer.changer2Label=Changer#2
d22_sample_sequencer.changer3Value=3
d22_sample_sequencer.changer3Label=Changer#3
d22_sample_sequencer.changer4Value=4
d22_sample_sequencer.changer4Label=Changer#4
d22_sample_sequencer.changer5Value=5
d22_sample_sequencer.changer5Label=Changer#5
d22_sample_sequencer.changer6Value=6
d22_sample_sequencer.changer6Label=Changer#6
d22_sample_sequencer.changer7Value=7
d22_sample_sequencer.changer7Label=Changer#7
d22_sample_sequencer.setFollowingValuesMessage=Set following values to current one
d22_sample_sequencer.incrementFollowingValuesMessage=Autofill following incrementally
d22_sample_sequencer.spectroGroup=Spectro
d22_sample_sequencer.integration_time=Time
d22_sample_sequencer.integration_timeSuffix=~mus
d22_sample_sequencer.scan_average=Scans to average
......@@ -2,58 +2,63 @@
<controller type="d22_sample_sequencer">
<property name="max_slot" type="int32">
</property>
<property name="mode" type="string">
<property name="integration_time" type="int32" max_length="10">
</property>
<property name="time_type" type="string">
<property name="scan_average" type="int32" max_length="2">
<strictly_positive/>
</property>
<property name="total_time" type="float64">
<property name="wanted_nbposition" type="Long" max_length="3">
<property_range min_property="min_slot" max_property="max_slot"/>
</property>
<property name="actual_changer" type="int32">
<property name="n_property" type="Long">
</property>
<property name="wanted_changer" type="int32">
<property name="min_slot" type="Long">
</property>
<property name="changer_num" type="int32">
<property name="max_slot" type="Long">
</property>
<property name="actual_slot" type="int32">
<property name="mode" type="String">
</property>
<property name="wanted_slot" type="int32" max_length="3">
<property name="changer_number" type="Long">
<strictly_positive/>
</property>
<property name="integration_time" type="int32" max_length="10">
<property name="time_type" type="String">
</property>
<property name="scan_average" type="int32" max_length="2">
<property name="total_time" type="Double" max_length="8">
<decimal_format nb_decimal_places="2"/>
</property>
<dynamic_property name="changer_values" size_property="changer_num" type="int32">
</dynamic_property>
<dynamic_property name="changer_labels" size_property="changer_num" type="String">
<dynamic_property name="wanted_sample_position" size_property="n_property" type="Long" max_length="3">
<property_range min_property="min_slot" max_property="max_slot"/>
<strictly_positive/>
</dynamic_property>
<dynamic_property size_property="wanted_slot" name="sample_position" type="int32" max_length="3">
<dynamic_property name="wanted_acquisition_time" size_property="n_property" type="Double" max_length="8">
<decimal_format nb_decimal_places="2"/>
<positive/> <!-- Isabelle Grillo said that counting 0 second can be very useful... -->
</dynamic_property>
<dynamic_property size_property="wanted_slot" name="acquisition_time" type="float64" max_length="8">
<dynamic_property name="wanted_acquisition_title" size_property="n_property" type="String" max_length="30">
</dynamic_property>
<dynamic_property size_property="wanted_slot" name="transmission" type="float64" max_length="6">
<dynamic_property name="thickness" size_property="n_property" type="Double" max_length="6">
<decimal_format nb_decimal_places="2"/>
<strictly_positive/>
</dynamic_property>
<dynamic_property size_property="wanted_slot" name="thickness" type="float64" max_length="6">
<dynamic_property name="transmission" size_property="n_property" type="Double" max_length="6">
<decimal_format nb_decimal_places="2"/>
</dynamic_property>
<dynamic_property size_property="wanted_slot" name="acquisition_title" type="string" max_length="30">
<dynamic_property name="show" type="Boolean">
</dynamic_property>
</controller>
<plugin>
<controller type="d22_sample_sequencer" role="d22_sample_sequencer1" />
<controller type="d22_sample_sequencer" role="d22_sample_sequencer1"/>
<property role="d22_sample_sequencer1" property="min_slot" save_value="true"/>
<property role="d22_sample_sequencer1" property="max_slot" save_value="true"/>
<group title="d22_sample_sequencer.acquisitionGroup">
<image_button role="d22_sample_sequencer1" property="mode" valuesAndImages="d22_sample_sequencer.time,d22_sample_sequencer.counts" />
<property_switcher role="d22_sample_sequencer1" property="mode" switcher_key="acquisitionModeSwitcher" />
<image_button role="d22_sample_sequencer1" property="mode" valuesAndImages="d22_sample_sequencer.time,d22_sample_sequencer.counts"/>
<property_switcher role="d22_sample_sequencer1" property="mode" switcher_key="acquisitionModeSwitcher"/>
<switchable_composite switch_values="time" switcher_key="acquisitionModeSwitcher">
<radio role="d22_sample_sequencer1" property="time_type" valuesAndLabels="d22_sample_sequencer.h,d22_sample_sequencer.m,d22_sample_sequencer.s" spaceBefore="false" />
<radio role="d22_sample_sequencer1" property="time_type" valuesAndLabels="d22_sample_sequencer.h,d22_sample_sequencer.m,d22_sample_sequencer.s" spaceBefore="false"/>
</switchable_composite>
</group>
<newLine />
<newLine/>
<group title="d22_sample_sequencer.samplechangerGroup">
<property_combo role="d22_sample_sequencer1" property="wanted_changer" prefix="d22_sample_sequencer.changer_numberPrefix" />
<label role="d22_sample_sequencer1" prefix="d22_sample_sequencer.maxSlotLabel" property="max_slot" />
<newLine />
<text role="d22_sample_sequencer1" prefix="d22_sample_sequencer.wanted_slotLabel" property="wanted_slot" />
<combo role="d22_sample_sequencer1" property="changer_number" valuesAndLabels="d22_sample_sequencer.changer1,d22_sample_sequencer.changer2,d22_sample_sequencer.changer3,d22_sample_sequencer.changer4,d22_sample_sequencer.changer5,d22_sample_sequencer.changer6,d22_sample_sequencer.changer7" prefix="d22_sample_sequencer.changer_numberPrefix" key="changerNumberCombo"/>
<label role="d22_sample_sequencer1" prefix="d22_sample_sequencer.maxSlotLabel" property="max_slot" save_value="true"/>
<newLine/>
<text role="d22_sample_sequencer1" prefix="d22_sample_sequencer.wanted_nbpositionLabel" property="wanted_nbposition"/>
</group>
<group title="d22_sample_sequencer.spectroGroup">
<text role="d22_sample_sequencer1" prefix="d22_sample_sequencer.integration_time" property="integration_time" suffix="d22_sample_sequencer.integration_timeSuffix"/>
<text role="d22_sample_sequencer1" prefix="d22_sample_sequencer.scan_average" property="scan_average" />
<text role="d22_sample_sequencer1" prefix="d22_sample_sequencer.integration_time" property="integration_time" suffix="d22_sample_sequencer.integration_timeSuffix"/>
<text role="d22_sample_sequencer1" prefix="d22_sample_sequencer.scan_average" property="scan_average" />
</group>
<newLine />
<newLine/>
<table_composite nbColumns="10" border="true">
<simple_label prefix="Slot" font_size="10" font_style="BOLD" horizontal_span="2" hAlignment="center" />
<simple_label prefix="Duration" font_size="10" font_style="BOLD" horizontal_span="2" hAlignment="center" />
<simple_label prefix="Run Title" font_size="10" font_style="BOLD" horizontal_span="2" hAlignment="center" />
<simple_label prefix="Transmission" font_size="10" font_style="BOLD" horizontal_span="2" hAlignment="center" />
<simple_label prefix="thickness" font_size="10" font_style="BOLD" horizontal_span="2" hAlignment="center" />
<dynamic_composite role="d22_sample_sequencer1" properties="sample_position,acquisition_time,transmission,thickness,acquisition_title,copyPositionButton,copyTimeButton,copyTitleButton,copyTransmissionButton,copyThicknessButton">
<simple_image key="copyPositionButton" prefix="ARROW_DOWN" height="20" />
<text role="d22_sample_sequencer1" property="sample_position" font_size="10"/>
<simple_image key="copyTimeButton" prefix="ARROW_DOWN" height="20" />
<text role="d22_sample_sequencer1" property="acquisition_time" font_size="10" />
<simple_image key="copyTitleButton" prefix="ARROW_DOWN" height="20" />
<text role="d22_sample_sequencer1" property="acquisition_title" font_size="10" />
<simple_image key="copyTransmissionButton" prefix="ARROW_DOWN" height="20" />
<text role="d22_sample_sequencer1" property="transmission" font_size="10" />
<simple_image key="copyThicknessButton" prefix="ARROW_DOWN" height="20" />
<text role="d22_sample_sequencer1" property="thickness" font_size="10" />
</dynamic_composite>
<simple_label prefix="d22_sample_sequencer.slotPrefix" font_size="10" font_style="BOLD" horizontal_span="2" hAlignment="center"/>
<simple_label prefix="d22_sample_sequencer.acquisitionTimePrefix" font_size="10" font_style="BOLD" horizontal_span="2" hAlignment="center"/>
<simple_label prefix="d22_sample_sequencer.titlePrefix" font_size="10" font_style="BOLD" horizontal_span="2" hAlignment="center"/>
<simple_label prefix="d22_sample_sequencer.transmissionPrefix" font_size="10" font_style="BOLD" horizontal_span="2" hAlignment="center"/>
<simple_label prefix="d22_sample_sequencer.thicknessPrefix" font_size="10" font_style="BOLD" horizontal_span="2" hAlignment="center"/>
<dynamic_composite role="d22_sample_sequencer1" properties="wanted_sample_position,wanted_acquisition_time,wanted_acquisition_title,transmission,thickness,show,copyPositionButton,copyTimeButton,copyTitleButton,copyTransmissionButton,copyThicknessButton,title">
<property_switcher role="d22_sample_sequencer1" property="show" switcher_key="show"/>
<switchable_composite switcher_key="show" switch_values="true">
<simple_image key="copyPositionButton" prefix="ARROW_DOWN" height="10"/>
</switchable_composite>
<switchable_composite switcher_key="show" switch_values="true">
<text role="d22_sample_sequencer1" property="wanted_sample_position" font_size="10"/>
</switchable_composite>
<switchable_composite switcher_key="show" switch_values="true">
<simple_image key="copyTimeButton" prefix="ARROW_DOWN" height="10"/>
</switchable_composite>
<switchable_composite switcher_key="show" switch_values="true">
<text role="d22_sample_sequencer1" property="wanted_acquisition_time" font_size="10"/>
</switchable_composite>
<switchable_composite switcher_key="show" switch_values="true">
<simple_image key="copyTitleButton" prefix="ARROW_DOWN" height="10"/>
</switchable_composite>
<switchable_composite switcher_key="show" switch_values="true">
<text role="d22_sample_sequencer1" property="wanted_acquisition_title" font_size="10" key="title"/>
</switchable_composite>
<switchable_composite switcher_key="show" switch_values="true">
<simple_image key="copyTransmissionButton" prefix="ARROW_DOWN" height="10"/>
</switchable_composite>
<switchable_composite switcher_key="show" switch_values="true">