mirror of
https://gitlab.com/pholy/OSCAR-code.git
synced 2025-04-16 18:50:46 +00:00
ResMed Obstructive, Hypopnea & Central Stuff
This commit is contained in:
parent
b88ac87548
commit
03dd533697
@ -67,6 +67,9 @@ void WaveData::Reload(Day *day)
|
|||||||
//double t1=MAX(fabs(min_y),fabs(max_y));
|
//double t1=MAX(fabs(min_y),fabs(max_y));
|
||||||
// Get clever here..
|
// Get clever here..
|
||||||
if (max_y>128) {
|
if (max_y>128) {
|
||||||
|
double j=MAX(max_y,fabs(min_y));
|
||||||
|
min_y=-j;
|
||||||
|
max_y=j;
|
||||||
} else if (max_y>90) {
|
} else if (max_y>90) {
|
||||||
max_y=120;
|
max_y=120;
|
||||||
min_y=-120;
|
min_y=-120;
|
||||||
|
@ -267,16 +267,102 @@ bool ResmedLoader::Open(QString & path,Profile *profile)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
//bool ResmedLoader::ParseTAL(Machine *mach,Session *sess,EDFParser &edf,int pos)
|
||||||
|
|
||||||
bool ResmedLoader::LoadEVE(Machine *mach,Session *sess,EDFParser &edf)
|
bool ResmedLoader::LoadEVE(Machine *mach,Session *sess,EDFParser &edf)
|
||||||
{
|
{
|
||||||
QString t;
|
QString t;
|
||||||
for (int s=0;s<edf.GetNumSignals();s++) {
|
for (int s=0;s<edf.GetNumSignals();s++) {
|
||||||
long recs=edf.edfsignals[s]->nr*edf.GetNumDataRecords();
|
long recs=edf.edfsignals[s]->nr*edf.GetNumDataRecords()*2;
|
||||||
double duration=edf.GetNumDataRecords()*edf.GetDuration();
|
double totaldur=edf.GetNumDataRecords()*edf.GetDuration();
|
||||||
duration/=3600.0;
|
totaldur/=3600.0;
|
||||||
t.sprintf("EVE: %li %.2f",recs,duration);
|
t.sprintf("EVE: %li %.2f",recs,totaldur);
|
||||||
qDebug((edf.edfsignals[s]->label+" "+t).toLatin1());
|
qDebug((edf.edfsignals[s]->label+" "+t).toLatin1());
|
||||||
char * data=(char *)edf.edfsignals[s]->data;
|
char * data=(char *)edf.edfsignals[s]->data;
|
||||||
|
long pos=0;
|
||||||
|
QDateTime tt=edf.startdate;
|
||||||
|
bool sign;
|
||||||
|
double d;
|
||||||
|
bool ok;
|
||||||
|
double duration=0;
|
||||||
|
char c;
|
||||||
|
while (pos<recs) {
|
||||||
|
c=data[pos];
|
||||||
|
if ((c!='+') && (c!='-'))
|
||||||
|
break;
|
||||||
|
if (data[pos++]=='+') sign=true; else sign=false;
|
||||||
|
t="";
|
||||||
|
c=data[pos];
|
||||||
|
do {
|
||||||
|
t+=c;
|
||||||
|
pos++;
|
||||||
|
c=data[pos];
|
||||||
|
} while ((c!=20) && (c!=21)); // start code
|
||||||
|
d=t.toDouble(&ok);
|
||||||
|
if (!ok) {
|
||||||
|
qDebug(("Faulty EDF EVE file"+edf.filename).toLatin1());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!sign) d=-d;
|
||||||
|
|
||||||
|
tt=edf.startdate.addMSecs(d*1000.0);
|
||||||
|
duration=0;
|
||||||
|
// First entry
|
||||||
|
|
||||||
|
if (data[pos]==21) {
|
||||||
|
pos++;
|
||||||
|
// get duration.
|
||||||
|
t="";
|
||||||
|
do {
|
||||||
|
t+=data[pos];
|
||||||
|
pos++;
|
||||||
|
} while ((data[pos]!=20) && (pos<recs)); // start code
|
||||||
|
duration=t.toDouble(&ok);
|
||||||
|
if (!ok) {
|
||||||
|
qDebug(("Faulty EDF EVE file (at %li) "+edf.filename).toLatin1(),pos);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while ((data[pos]==20) && (pos<recs)) {
|
||||||
|
t="";
|
||||||
|
pos++;
|
||||||
|
if (data[pos]==0)
|
||||||
|
break;
|
||||||
|
if (data[pos]==20) {
|
||||||
|
pos++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
t+=tolower(data[pos++]);
|
||||||
|
} while ((data[pos]!=20) && (pos<recs)); // start code
|
||||||
|
if (!t.isEmpty()) {
|
||||||
|
EventDataType fields[3];
|
||||||
|
MachineCode code=MC_UNKNOWN;
|
||||||
|
if (t=="obstructive apnea") code=CPAP_Obstructive;
|
||||||
|
else if (t=="hypopnea") code=CPAP_Hypopnea;
|
||||||
|
else if (t=="central apnea") code=CPAP_ClearAirway;
|
||||||
|
if (code!=MC_UNKNOWN) {
|
||||||
|
fields[0]=duration;
|
||||||
|
Event *e=new Event(tt,code,fields,1);
|
||||||
|
sess->AddEvent(e);
|
||||||
|
} else {
|
||||||
|
if (t!="recording starts") {
|
||||||
|
qDebug(("Unknown ResMed annotation field: "+t).toLatin1());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qDebug((tt.toString("yyyy-MM-dd HH:mm:ss")+t).toLatin1());
|
||||||
|
}
|
||||||
|
if (pos>=recs) {
|
||||||
|
qDebug(("Short EDF EVE file"+edf.filename).toLatin1());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// pos++;
|
||||||
|
}
|
||||||
|
while ((data[pos]==0) && pos<recs) pos++;
|
||||||
|
if (pos>=recs) break;
|
||||||
|
}
|
||||||
|
// qDebug(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool ResmedLoader::LoadBRP(Machine *mach,Session *sess,EDFParser &edf)
|
bool ResmedLoader::LoadBRP(Machine *mach,Session *sess,EDFParser &edf)
|
||||||
@ -288,6 +374,10 @@ bool ResmedLoader::LoadBRP(Machine *mach,Session *sess,EDFParser &edf)
|
|||||||
MachineCode code;
|
MachineCode code;
|
||||||
if (edf.edfsignals[s]->label=="Flow") code=CPAP_FlowRate;
|
if (edf.edfsignals[s]->label=="Flow") code=CPAP_FlowRate;
|
||||||
else if (edf.edfsignals[s]->label=="Mask Pres") code=CPAP_MaskPressure;
|
else if (edf.edfsignals[s]->label=="Mask Pres") code=CPAP_MaskPressure;
|
||||||
|
else {
|
||||||
|
qDebug(("Unknown Signal "+edf.edfsignals[s]->label).toLatin1());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
sess->set_first(edf.startdate);
|
sess->set_first(edf.startdate);
|
||||||
QDateTime e=edf.startdate.addSecs(duration);
|
QDateTime e=edf.startdate.addSecs(duration);
|
||||||
sess->set_last(e);
|
sess->set_last(e);
|
||||||
@ -302,9 +392,14 @@ bool ResmedLoader::LoadBRP(Machine *mach,Session *sess,EDFParser &edf)
|
|||||||
}
|
}
|
||||||
bool ResmedLoader::LoadSAD(Machine *mach,Session *sess,EDFParser &edf)
|
bool ResmedLoader::LoadSAD(Machine *mach,Session *sess,EDFParser &edf)
|
||||||
{
|
{
|
||||||
|
// Oximeter bull crap..
|
||||||
}
|
}
|
||||||
bool ResmedLoader::LoadPLD(Machine *mach,Session *sess,EDFParser &edf)
|
bool ResmedLoader::LoadPLD(Machine *mach,Session *sess,EDFParser &edf)
|
||||||
{
|
{
|
||||||
|
QString t;
|
||||||
|
for (int s=0;s<edf.GetNumSignals();s++) {
|
||||||
|
qDebug(("Unknown Signal "+edf.edfsignals[s]->label).toLatin1());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResInitModelMap()
|
void ResInitModelMap()
|
||||||
|
@ -31,7 +31,9 @@ typedef int ChannelCode;
|
|||||||
enum MachineCode//:qint16
|
enum MachineCode//:qint16
|
||||||
{
|
{
|
||||||
// General Event Codes
|
// General Event Codes
|
||||||
CPAP_Obstructive=0, CPAP_Hypopnea, CPAP_ClearAirway, CPAP_RERA, CPAP_VSnore, CPAP_FlowLimit,
|
MC_UNKNOWN=0,
|
||||||
|
|
||||||
|
CPAP_Obstructive, CPAP_Hypopnea, CPAP_ClearAirway, CPAP_RERA, CPAP_VSnore, CPAP_FlowLimit,
|
||||||
CPAP_Leak, CPAP_Pressure, CPAP_EAP, CPAP_IAP, CPAP_CSR, CPAP_FlowRate, CPAP_MaskPressure,
|
CPAP_Leak, CPAP_Pressure, CPAP_EAP, CPAP_IAP, CPAP_CSR, CPAP_FlowRate, CPAP_MaskPressure,
|
||||||
CPAP_BreathsPerMinute,
|
CPAP_BreathsPerMinute,
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user