Newer
Older
/*
* seqIDataMgr.cpp
*
* Created on: Mar 18, 2022
* Author: Fulvio Laudisio
*/
#include <pthread.h>
#include <ctime>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include "seqIDataMgr.hpp"
#include "base64.h" // from64tobits
SeqDataMgr * SeqDataMgr::m_pSeqDataMgr = NULL;
SeqDataMgr::SeqDataMgr(Ltcs::IifServiceWorkerInterfacePtr &_iif):
sashaSave(IProperty::Switch, "sasha_save", "enable_save"),
sashaObjName(IProperty::Text, "sasha", "OBJNAME"),
sashaNumSeqs(IProperty::Number, "sasha", "num_seqs"),
sashaSeqNum(IProperty::Number, "sasha", "seq_num"),
// sashaNumCoadds(IProperty::Number, "sasha", "acquire"),
sashaNumCoadds(IProperty::Number, "sasha", "num_coadds"),
sashaNumDrops(IProperty::Number, "sasha", "num_drops"),
sashaNumReads(IProperty::Number, "sasha", "num_reads"),
sashaNumGroups(IProperty::Number, "sasha", "num_groups"),
sashaNumResets(IProperty::Number, "sasha", "num_resets"),
sashaReadout(IProperty::Text, "sasha", "def_readout_region_name"),
sashaReadoutRegion(IProperty::Text, "sasha", "readout_region"),
sashaBlob(IProperty::Unknown, "sasha_save", "save_image"),
sashaLargestFileNumber(IProperty::Number, "sasha_save", "largest_filenum"),
sashaExposeProp(IProperty::Switch, "sasha", "start_acquire"),
sharknirTemperatureDetector(IProperty::Unknown, "sharknir_temp", "sensor"),
sharknirTemperatureColdFinger(IProperty::Unknown, "sharknir_temp", "sensor"),
sharknirTemperatureInnerVessel(IProperty::Unknown, "sharknir_temp", "sensor"),
sharknirTemperatureOuterVessel(IProperty::Unknown, "sharknir_temp", "sensor"),
sashaPressure(IProperty::Unknown, "sharknir_pres1", "sensor"),
sashaStop(IProperty::Switch, "sasha", "stop"),
sashaFrequencyMode(IProperty::Text, "sasha", "def_mode_name"),
sashaEnableCont(IProperty::Switch, "sasha" , "enable_cont" )
{
U6_LLOG(__FUNCTION__);
// m_ptrIc = boost::shared_ptr<indiClient>(new indiClient(*_ptrIoService, m_ptrSharedQueue, "127.0.0.1", "7624"));
// m_ptrIc2 = boost::shared_ptr<indiClient2>(new indiClient2(_ptrIoService, "193.206.241.72", "7624")); // TODO : UNHARDCODE sashaws IP and get it from obs_ctrl-ice.cfg
// m_ptrIc2 = boost::shared_ptr<indiClient2>(new indiClient2(_ptrIoService, _callback_register, "127.0.0.1", "7624"));
// D_LLOG("created pointer to indiClient2 object");
m_iif = _iif;
SeqDataMgr::m_pSeqDataMgr = this;
// sashaBlob.add(IElement("file"));
// sashaBlob.setBLOBEnable(IProperty::Never);
// sashaNumCoadds.add(IElement("value"));
// sashaNumCoadds["value"].setValue<int>(1);
m_sashaProps.insert(std::pair<std::string, IProperty & >("NDIT", sashaNumSeqs));
m_sashaProps.insert(std::pair<std::string, IProperty & >("NDITINDEX", sashaSeqNum));
m_sashaProps.insert(std::pair<std::string, IProperty & >("READOUT", sashaReadout));
m_sashaProps.insert(std::pair<std::string, IProperty & >("READOUTREGION", sashaReadoutRegion));
m_sashaProps.insert(std::pair<std::string, IProperty & >("SAVE", sashaSave));
m_sashaProps.insert(std::pair<std::string, IProperty & >("OBJECTNAME", sashaObjName));
m_sashaProps.insert(std::pair<std::string, IProperty & >("NCOADDS", sashaNumCoadds));
m_sashaProps.insert(std::pair<std::string, IProperty & >("NDROPS", sashaNumDrops));
m_sashaProps.insert(std::pair<std::string, IProperty & >("NGROUPS", sashaNumGroups));
m_sashaProps.insert(std::pair<std::string, IProperty & >("NREADS", sashaNumReads));
m_sashaProps.insert(std::pair<std::string, IProperty & >("NRESETS", sashaNumResets));
m_sashaProps.insert(std::pair<std::string, IProperty & >("EXPOSE", sashaExposeProp));
m_sashaProps.insert(std::pair<std::string, IProperty & >("STOP", sashaStop));
m_sashaProps.insert(std::pair<std::string, IProperty & >("FREQUENCY", sashaFrequencyMode));
m_sashaProps.insert(std::pair<std::string, IProperty & >("CONTINUOUS", sashaEnableCont));
m_sashaProps.insert(std::pair<std::string, IProperty & >("LARGESTFILENUM", sashaLargestFileNumber));
m_sashaProps.insert(std::pair<std::string, IProperty & >("SENSORTEMPDET", sharknirTemperatureDetector));
m_sashaProps.insert(std::pair<std::string, IProperty & >("SENSORTEMPCF", sharknirTemperatureColdFinger));
m_sashaProps.insert(std::pair<std::string, IProperty & >("SENSORTEMPIV", sharknirTemperatureInnerVessel));
m_sashaProps.insert(std::pair<std::string, IProperty & >("SENSORTEMPOV", sharknirTemperatureOuterVessel));
m_sashaProps.insert(std::pair<std::string, IProperty & >("SENSORPRES1", sashaPressure));
m_sashaPropsSet["NDIT"] = true;
m_sashaPropsSet["NDITINDEX"] = true;
m_sashaPropsSet["READOUT"] = true;
m_sashaPropsSet["SAVE"] = true;
m_sashaPropsSet["OBJECTNAME"] = true;
m_sashaPropsSet["NCOADDS"] = true;
m_sashaPropsSet["NDROPS"] = true;
m_sashaPropsSet["NGROUPS"] = true;
m_sashaPropsSet["NREADS"] = true;
m_sashaPropsSet["NRESETS"] = true;
m_sashaPropsSet["EXPOSE"] = true;
m_sashaPropsSet["FREQUENCY"] = true;
m_sashaTiming["Center"] = 2.6751f;
m_sashaTiming["Bottom"] = 1.0719f;
m_sashaTiming["Top"] = 1.0719f;
m_sashaTiming["256x256"] = 0.2745f;
m_sashaTiming["128x128"] = 0.0718f;
m_sashaTiming["1000x1000"] = 4.0481;
m_sashaTiming["coro_stripe"] = 0.1283;
m_sashaTiming["PD_wollaston_stripe_small"] = 0.1701;
m_sashaTiming["PD_wollaston_stripe_large"] = 0.2953;
m_getFitsAbortFlag = 0;
m_bReceivingFitsFile = false;
StartIndiClientThread();
//Flags
m_bFlagChanged = true;
m_bSaveOnlyExposedFiles = true;
m_bSaveIncomingBlob = false;
m_instrumentHeader.init = true;
updateInstrumentHeader();
m_sashaSetup[suc::instrument_mode] = "GEN";
m_sashaSetup["OBJECTNAME"] = "";
m_sashaSetup["NGROUPS"] = "";
m_sashaSetup["NREADS"] = "";
m_sashaSetup["NDROPS"] = "";
m_sashaSetup["NCOADDS"] = "";
m_sashaSetup["NRESETS"] = "";
m_sashaSetup["NDIT"] = "";
m_sashaSetup["SAVE"] = "";
m_sashaSetup["READOUT"] = "";
m_sashaSetup["DIT"] = "";
m_timeoutSetup.push_back("NGROUPS");
m_timeoutSetup.push_back("NGRONREADSUPS");
m_timeoutSetup.push_back("NGRNDROPSOUPS");
m_timeoutSetup.push_back("NCOADDS");
m_timeoutSetup.push_back("NRESETS");
m_rtcKeywords["TTBIASFILE"] = "";
m_rtcKeywords["TTDMFLATFILE"] = "";
}
void SeqDataMgr::StartIndiClientThread()
{
pthread_create(&m_indi_tid, NULL, indi_client_thread, this);
}
SeqDataMgr::~SeqDataMgr()
{
}
#define OCS_FRAME_TIME_FULLIMAGE 4.2783f
#define OCS_FRAME_TIME_CENTER 2.6751f
#define OCS_FRAME_TIME_BOTTOM 1.0719f
#define OCS_FRAME_TIME_TOP 1.0719f
#define OCS_FRAME_TIME_256X256 0.2745f
#define OCS_FRAME_TIME_128X128 0.0718f
#define OCS_FRAME_TIME_1000X1000 4.0481f
#define OCS_FRAME_TIME_COROSTRIPE 0.1283f
#define OCS_FRAME_TIME_WOLLASTONE 0.2953f
#define OCS_NUM_MAX_FRAMES 25
void set_ramp(float exp_time, float frame_time, int num_max_frames, int ncoadds, int &groups, int &reads, int &drops)
{
float r = exp_time / (frame_time * ncoadds);
float eff_frame_time = frame_time * ncoadds;
{
groups = 1;
reads = (int) r;
reads = 1;
drops = 0;
}
else
{
groups = num_max_frames;
reads = 1;
float fpdrops = (exp_time - groups * eff_frame_time) / ((groups - 1) * eff_frame_time);
int floor_drops = (int) fpdrops;
float eff_exp_time = eff_frame_time * (groups * reads + (groups - 1) * floor_drops);
float extra_time = eff_frame_time * (groups - 1);
if(abs(exp_time - eff_exp_time) < abs(exp_time - (eff_exp_time + extra_time)))
Loading
Loading full blame...