mirror of
https://gitlab.com/pholy/OSCAR-code.git
synced 2025-04-17 19:20:46 +00:00
Fix RespRate calcs from running on ResMed
This commit is contained in:
parent
8d7e6f785a
commit
955671b023
@ -242,6 +242,7 @@ int filterFlow(EventList *in, EventList *out, EventList *tv, EventList *mv, doub
|
|||||||
int calcRespRate(Session *session)
|
int calcRespRate(Session *session)
|
||||||
{
|
{
|
||||||
if (session->machine()->GetType()!=MT_CPAP) return 0;
|
if (session->machine()->GetType()!=MT_CPAP) return 0;
|
||||||
|
if (session->machine()->GetClass()!="PRS1") return 0;
|
||||||
if (session->eventlist.contains(CPAP_RespRate)) return 0; // already exists?
|
if (session->eventlist.contains(CPAP_RespRate)) return 0; // already exists?
|
||||||
|
|
||||||
if (!session->eventlist.contains(CPAP_FlowRate)) return 0; //need flow waveform
|
if (!session->eventlist.contains(CPAP_FlowRate)) return 0; //need flow waveform
|
||||||
|
@ -627,7 +627,7 @@ bool ResmedLoader::LoadBRP(Session *sess,EDFParser &edf)
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
EventList * ResmedLoader::ToTimeDelta(Session *sess,EDFParser &edf, EDFSignal & es, ChannelID code, long recs, qint64 duration,EventDataType min,EventDataType max)
|
EventList * ResmedLoader::ToTimeDelta(Session *sess,EDFParser &edf, EDFSignal & es, ChannelID code, long recs, qint64 duration,EventDataType min,EventDataType max,bool square)
|
||||||
{
|
{
|
||||||
bool first=true;
|
bool first=true;
|
||||||
double rate=(duration/recs); // milliseconds per record
|
double rate=(duration/recs); // milliseconds per record
|
||||||
@ -650,6 +650,7 @@ EventList * ResmedLoader::ToTimeDelta(Session *sess,EDFParser &edf, EDFSignal &
|
|||||||
first=false;
|
first=false;
|
||||||
} else {
|
} else {
|
||||||
if (last!=c) {
|
if (last!=c) {
|
||||||
|
if (square) el->AddEvent(tt,last); // square waves look better on some charts.
|
||||||
el->AddEvent(tt,c);
|
el->AddEvent(tt,c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -747,7 +748,7 @@ bool ResmedLoader::LoadPLD(Session *sess,EDFParser &edf)
|
|||||||
code=CPAP_Leak;
|
code=CPAP_Leak;
|
||||||
es.gain*=60;
|
es.gain*=60;
|
||||||
es.physical_dimension="L/M";
|
es.physical_dimension="L/M";
|
||||||
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
|
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0,true);
|
||||||
} else if (es.label=="FFL Index") {
|
} else if (es.label=="FFL Index") {
|
||||||
code=CPAP_FLG;
|
code=CPAP_FLG;
|
||||||
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
|
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
|
||||||
|
@ -108,7 +108,7 @@ public:
|
|||||||
|
|
||||||
virtual int Version() { return resmed_data_version; }
|
virtual int Version() { return resmed_data_version; }
|
||||||
virtual const QString & ClassName() { return resmed_class_name; }
|
virtual const QString & ClassName() { return resmed_class_name; }
|
||||||
EventList * ToTimeDelta(Session *sess,EDFParser &edf, EDFSignal & es, ChannelID code, long recs,qint64 duration,EventDataType min=0,EventDataType max=0);
|
EventList * ToTimeDelta(Session *sess,EDFParser &edf, EDFSignal & es, ChannelID code, long recs,qint64 duration,EventDataType min=0,EventDataType max=0,bool square=false);
|
||||||
|
|
||||||
Machine *CreateMachine(QString serial,Profile *profile);
|
Machine *CreateMachine(QString serial,Profile *profile);
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@ qint64 timezoneOffset() {
|
|||||||
return _TZ_offset;
|
return _TZ_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Machine Base-Class implmementation
|
// Machine Base-Class implmementation
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -225,7 +226,6 @@ bool Machine::Purge(int secret)
|
|||||||
} else could_not_kill++;
|
} else could_not_kill++;
|
||||||
|
|
||||||
}
|
}
|
||||||
dir.remove(path+"/channels.dat");
|
|
||||||
if (could_not_kill>0) {
|
if (could_not_kill>0) {
|
||||||
// qWarning() << "Could not purge path\n" << path << "\n\n" << could_not_kill << " file(s) remain.. Suggest manually deleting this path\n";
|
// qWarning() << "Could not purge path\n" << path << "\n\n" << could_not_kill << " file(s) remain.. Suggest manually deleting this path\n";
|
||||||
// return false;
|
// return false;
|
||||||
@ -247,30 +247,6 @@ bool Machine::Load()
|
|||||||
if (!dir.exists() || !dir.isReadable())
|
if (!dir.exists() || !dir.isReadable())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* QString fn=path+"/channels.dat";
|
|
||||||
QFile cf(fn);
|
|
||||||
cf.open(QIODevice::ReadOnly);
|
|
||||||
QDataStream in(&cf);
|
|
||||||
in.setVersion(QDataStream::Qt_4_6);
|
|
||||||
in.setByteOrder(QDataStream::LittleEndian);
|
|
||||||
|
|
||||||
quint32 tmp;
|
|
||||||
in >> tmp;
|
|
||||||
if (magic!=tmp) {
|
|
||||||
qDebug() << "Machine Channel file format is wrong" << fn;
|
|
||||||
}
|
|
||||||
in >> tmp;
|
|
||||||
if (tmp!=channel_version) {
|
|
||||||
qDebug() << "Machine Channel file format is wrong" << fn;
|
|
||||||
}
|
|
||||||
qint32 tmp2;
|
|
||||||
in >> tmp2;
|
|
||||||
if (tmp2!=m_id) {
|
|
||||||
qDebug() << "Machine Channel file format is wrong" << fn;
|
|
||||||
}
|
|
||||||
in >> m_channels;
|
|
||||||
cf.close(); */
|
|
||||||
|
|
||||||
dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
|
dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
|
||||||
dir.setSorting(QDir::Name);
|
dir.setSorting(QDir::Name);
|
||||||
|
|
||||||
@ -369,7 +345,6 @@ bool Machine::Save()
|
|||||||
thread[i]->start();
|
thread[i]->start();
|
||||||
}
|
}
|
||||||
while (!savelistSem->tryAcquire(threads,250)) {
|
while (!savelistSem->tryAcquire(threads,250)) {
|
||||||
//qDebug() << savelistSem->available();
|
|
||||||
if (qprogress) {
|
if (qprogress) {
|
||||||
// qprogress->setValue(66.0+(float(savelistCnt)/float(savelistSize)*33.0));
|
// qprogress->setValue(66.0+(float(savelistCnt)/float(savelistSize)*33.0));
|
||||||
QApplication::processEvents();
|
QApplication::processEvents();
|
||||||
|
@ -45,12 +45,12 @@ signals:
|
|||||||
void UpdateProgress(int i);
|
void UpdateProgress(int i);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Machine
|
class Machine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Machine(Profile *p,MachineID id=0);
|
Machine(Profile *p,MachineID id=0);
|
||||||
virtual ~Machine();
|
virtual ~Machine();
|
||||||
// virtual bool Open(QString path){};
|
|
||||||
|
|
||||||
bool Load();
|
bool Load();
|
||||||
bool Save();
|
bool Save();
|
||||||
@ -61,38 +61,25 @@ public:
|
|||||||
QHash<SessionID,Session *> sessionlist;
|
QHash<SessionID,Session *> sessionlist;
|
||||||
QHash<QString,QString> properties;
|
QHash<QString,QString> properties;
|
||||||
|
|
||||||
|
Session * SessionExists(SessionID session);
|
||||||
|
Day *AddSession(Session *s,Profile *p);
|
||||||
|
|
||||||
|
void SetClass(QString t) { m_class=t; }
|
||||||
|
void SetType(MachineType t) { m_type=t; }
|
||||||
|
const QString & GetClass() { return m_class; }
|
||||||
|
const MachineType & GetType() { return m_type; }
|
||||||
|
inline QString hexid() { return QString().sprintf("%08lx",m_id); }
|
||||||
|
SessionID CreateSessionID() { return highest_sessionid+1; }
|
||||||
|
const MachineID & id() { return m_id; }
|
||||||
|
const QDate & FirstDay() { return firstday; }
|
||||||
|
const QDate & LastDay() { return lastday; }
|
||||||
|
|
||||||
Session *popSaveList();
|
Session *popSaveList();
|
||||||
QList<Session *> m_savelist;
|
QList<Session *> m_savelist;
|
||||||
volatile int savelistCnt;
|
volatile int savelistCnt;
|
||||||
int savelistSize;
|
int savelistSize;
|
||||||
QMutex savelistMutex;
|
QMutex savelistMutex;
|
||||||
QSemaphore *savelistSem;
|
QSemaphore *savelistSem;
|
||||||
Session * SessionExists(SessionID session);
|
|
||||||
Day *AddSession(Session *s,Profile *p);
|
|
||||||
|
|
||||||
void SetClass(QString t) {
|
|
||||||
m_class=t;
|
|
||||||
}
|
|
||||||
void SetType(MachineType t) {
|
|
||||||
m_type=t;
|
|
||||||
}
|
|
||||||
const QString & GetClass() {
|
|
||||||
return m_class;
|
|
||||||
}
|
|
||||||
const MachineType & GetType() {
|
|
||||||
return m_type;
|
|
||||||
}
|
|
||||||
const QString hexid() {
|
|
||||||
QString s;
|
|
||||||
s.sprintf("%08lx",m_id);
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
SessionID CreateSessionID() { return highest_sessionid+1; }
|
|
||||||
const MachineID & id() { return m_id; }
|
|
||||||
const QDate & FirstDay() { return firstday; }
|
|
||||||
const QDate & LastDay() { return lastday; }
|
|
||||||
//bool hasChannel(QString id) { return m_channels.contains(id) && m_channels[id]; }
|
|
||||||
//void registerChannel(QString id,bool b=true) { m_channels[id]=b; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QDate firstday,lastday;
|
QDate firstday,lastday;
|
||||||
@ -104,7 +91,6 @@ protected:
|
|||||||
Profile *profile;
|
Profile *profile;
|
||||||
bool changed;
|
bool changed;
|
||||||
bool firstsession;
|
bool firstsession;
|
||||||
//QHash<QString,bool> m_channels;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class CPAP:public Machine
|
class CPAP:public Machine
|
||||||
|
@ -998,7 +998,7 @@ void Daily::Unload(QDate date)
|
|||||||
journal->settings[Journal_Notes]=jhtml;
|
journal->settings[Journal_Notes]=jhtml;
|
||||||
journal->SetChanged(true);
|
journal->SetChanged(true);
|
||||||
}
|
}
|
||||||
double w=ui->weightSpinBox->value();
|
//double w=ui->weightSpinBox->value();
|
||||||
if (journal->settings.contains("Weight") && ui->weightSpinBox->value()==0) {
|
if (journal->settings.contains("Weight") && ui->weightSpinBox->value()==0) {
|
||||||
journal->settings.erase(journal->settings.find("Weight"));
|
journal->settings.erase(journal->settings.find("Weight"));
|
||||||
if (journal->settings.contains("BMI")) {
|
if (journal->settings.contains("BMI")) {
|
||||||
|
@ -251,7 +251,7 @@ void MainWindow::on_action_Import_Data_triggered()
|
|||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool addnew=false;
|
//bool addnew=false;
|
||||||
QString newdir;
|
QString newdir;
|
||||||
|
|
||||||
bool asknew=false;
|
bool asknew=false;
|
||||||
@ -287,7 +287,7 @@ void MainWindow::on_action_Import_Data_triggered()
|
|||||||
QString newdir=w.selectedFiles().at(i);
|
QString newdir=w.selectedFiles().at(i);
|
||||||
if (!importFrom.contains(newdir)) {
|
if (!importFrom.contains(newdir)) {
|
||||||
importFrom.append(newdir);
|
importFrom.append(newdir);
|
||||||
addnew=true;
|
//addnew=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -946,6 +946,7 @@ void Oximetry::on_SerialPortsCombo_activated(const QString &arg1)
|
|||||||
|
|
||||||
void Oximetry::live_stopped(Session * session)
|
void Oximetry::live_stopped(Session * session)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(session);
|
||||||
mainwin->Notify("Oximetry live recording has been terminated due to timeout");
|
mainwin->Notify("Oximetry live recording has been terminated due to timeout");
|
||||||
//qDebug () << "Live Stopped";
|
//qDebug () << "Live Stopped";
|
||||||
on_RunButton_toggled(false);
|
on_RunButton_toggled(false);
|
||||||
@ -1477,7 +1478,7 @@ void Oximetry::on_dateEdit_dateTimeChanged(const QDateTime &date)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
qint64 first=session->first();
|
qint64 first=session->first();
|
||||||
qint64 last=session->last();
|
//qint64 last=session->last();
|
||||||
qint64 tt=qint64(date.toTime_t())*1000L;
|
qint64 tt=qint64(date.toTime_t())*1000L;
|
||||||
qint64 offset=tt-first;
|
qint64 offset=tt-first;
|
||||||
|
|
||||||
|
@ -274,7 +274,7 @@ PreferencesDialog::PreferencesDialog(QWidget *parent,Profile * _profile) :
|
|||||||
|
|
||||||
PreferencesDialog::~PreferencesDialog()
|
PreferencesDialog::~PreferencesDialog()
|
||||||
{
|
{
|
||||||
disconnect(graphModel,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(on_graphModel_changed(QStandardItem*)));
|
disconnect(graphModel,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(graphModel_changed(QStandardItem*)));
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -555,7 +555,7 @@ bool MySortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex
|
|||||||
return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
|
return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreferencesDialog::on_graphModel_changed(QStandardItem * item)
|
void PreferencesDialog::graphModel_changed(QStandardItem * item)
|
||||||
{
|
{
|
||||||
QModelIndex index=item->index();
|
QModelIndex index=item->index();
|
||||||
|
|
||||||
@ -564,7 +564,7 @@ void PreferencesDialog::on_graphModel_changed(QStandardItem * item)
|
|||||||
|
|
||||||
const QModelIndex & row=index.sibling(index.row(),0);
|
const QModelIndex & row=index.sibling(index.row(),0);
|
||||||
bool checked=row.data(Qt::CheckStateRole)!=0;
|
bool checked=row.data(Qt::CheckStateRole)!=0;
|
||||||
QString name=row.data().toString();
|
//QString name=row.data().toString();
|
||||||
|
|
||||||
int group=row.data(Qt::UserRole+1).toInt();
|
int group=row.data(Qt::UserRole+1).toInt();
|
||||||
int id=row.data(Qt::UserRole+2).toInt();
|
int id=row.data(Qt::UserRole+2).toInt();
|
||||||
@ -632,7 +632,7 @@ void PreferencesDialog::resetGraphModel()
|
|||||||
|
|
||||||
graphModel->appendRow(daily);
|
graphModel->appendRow(daily);
|
||||||
graphModel->appendRow(overview);
|
graphModel->appendRow(overview);
|
||||||
connect(graphModel,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(on_graphModel_changed(QStandardItem*)));
|
connect(graphModel,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(graphModel_changed(QStandardItem*)));
|
||||||
|
|
||||||
ui->graphView->setAlternatingRowColors(true);
|
ui->graphView->setAlternatingRowColors(true);
|
||||||
|
|
||||||
@ -753,10 +753,10 @@ void PreferencesDialog::on_resetGraphButton_clicked()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PreferencesDialog::on_genOpWidget_itemActivated(QListWidgetItem *item)
|
/*void PreferencesDialog::on_genOpWidget_itemActivated(QListWidgetItem *item)
|
||||||
{
|
{
|
||||||
item->setCheckState(item->checkState()==Qt::Checked ? Qt::Unchecked : Qt::Checked);
|
item->setCheckState(item->checkState()==Qt::Checked ? Qt::Unchecked : Qt::Checked);
|
||||||
}
|
} */
|
||||||
|
|
||||||
|
|
||||||
void PreferencesDialog::on_maskTypeCombo_activated(int index)
|
void PreferencesDialog::on_maskTypeCombo_activated(int index)
|
||||||
|
@ -61,11 +61,11 @@ private slots:
|
|||||||
|
|
||||||
void on_graphFilter_textChanged(const QString &arg1);
|
void on_graphFilter_textChanged(const QString &arg1);
|
||||||
|
|
||||||
void on_graphModel_changed(QStandardItem * item);
|
void graphModel_changed(QStandardItem * item);
|
||||||
|
|
||||||
void on_resetGraphButton_clicked();
|
void on_resetGraphButton_clicked();
|
||||||
|
|
||||||
void on_genOpWidget_itemActivated(QListWidgetItem *item);
|
//void on_genOpWidget_itemActivated(QListWidgetItem *item);
|
||||||
|
|
||||||
void on_maskTypeCombo_activated(int index);
|
void on_maskTypeCombo_activated(int index);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user