1
0
mirror of https://gitlab.com/pholy/OSCAR-code.git synced 2025-04-13 17:20:51 +00:00

Logger Tweaks, SummaryChart stuff

This commit is contained in:
Mark Watkins 2011-09-19 00:43:15 +10:00
parent 6b833cd886
commit e02477cafd
5 changed files with 32 additions and 52 deletions

View File

@ -236,7 +236,7 @@ gToolTip::gToolTip(gGraphView * graphview)
m_pos.setX(0); m_pos.setX(0);
m_pos.setY(0); m_pos.setY(0);
m_visible=false; m_visible=false;
m_spacer=5; // pixels around text area m_spacer=2; // pixels around text area
timer=new QTimer(graphview); timer=new QTimer(graphview);
connect(timer,SIGNAL(timeout()),SLOT(timerDone())); connect(timer,SIGNAL(timeout()),SLOT(timerDone()));
} }
@ -257,7 +257,7 @@ void gToolTip::display(QString text, int x, int y, int timeout)
GetTextExtent(m_text,tw,th); GetTextExtent(m_text,tw,th);
tw+=m_spacer*2; tw+=m_spacer*2;
th+=m_spacer*2; th+=m_spacer*2;
th*=2; //th*=2;
if (timer->isActive()) { if (timer->isActive()) {
timer->stop(); timer->stop();
} }
@ -298,7 +298,7 @@ void gToolTip::paint() //actually paints it.
painter.setFont(*defaultfont); painter.setFont(*defaultfont);
rect=painter.boundingRect(rect,Qt::AlignCenter,m_text); rect=painter.boundingRect(rect,Qt::AlignCenter,m_text);
rect.setLeft(rect.x()-m_spacer); rect.setLeft(rect.x()-m_spacer);
rect.setTop(rect.y()-rect.height()/1.33); rect.setTop(rect.y()-rect.height()/2);
rect.setWidth(rect.width()+m_spacer*2); rect.setWidth(rect.width()+m_spacer*2);
//rect.setHeight(rect.height()); //rect.setHeight(rect.height());
QBrush brush(QColor(255,255,128,200)); QBrush brush(QColor(255,255,128,200));

View File

@ -347,14 +347,25 @@ void SummaryChart::paint(gGraph & w,int left, int top, int width, int height)
//lines->add(px,py,px+20,py,m_colors[j]); //lines->add(px,py,px+20,py,m_colors[j]);
//lines->add(px,py+1,px+20,py+1,m_colors[j]); //lines->add(px,py+1,px+20,py+1,m_colors[j]);
} }
a="";
if (m_graphtype==GT_BAR) { if (m_graphtype==GT_BAR) {
if (m_type.size()>1) {
float val=total_val/float(total_days);
a=m_label+"="+QString::number(val,'f',2)+" ";
GetTextExtent(a,x,y);
px-=20+x;
w.renderText(a,px+24,py+5);
//
}
}
a="";
/*if (m_graphtype==GT_BAR) {
if (m_type.size()>1) { if (m_type.size()>1) {
float val=total_val/float(total_days); float val=total_val/float(total_days);
a+=m_label+"="+QString::number(val,'f',2)+" "; a+=m_label+"="+QString::number(val,'f',2)+" ";
// //
} }
} }*/
a+="Days="+QString::number(totalcounts[0],'f',0); a+="Days="+QString::number(totalcounts[0],'f',0);
GetTextExtent(a,x,y); GetTextExtent(a,x,y);
px-=30+x; px-=30+x;

View File

@ -517,7 +517,6 @@ bool ResmedLoader::LoadEVE(Session *sess,EDFParser &edf)
t+=tolower(data[pos++]); t+=tolower(data[pos++]);
} while ((data[pos]!=20) && (pos<recs)); // start code } while ((data[pos]!=20) && (pos<recs)); // start code
if (!t.isEmpty()) { if (!t.isEmpty()) {
//code=MC_UNKNOWN;
if (t=="obstructive apnea") { if (t=="obstructive apnea") {
if (!EL[0]) { if (!EL[0]) {
if (!(EL[0]=sess->AddEventList(CPAP_Obstructive,EVL_Event))) return false; if (!(EL[0]=sess->AddEventList(CPAP_Obstructive,EVL_Event))) return false;
@ -584,7 +583,6 @@ bool ResmedLoader::LoadBRP(Session *sess,EDFParser &edf)
continue; continue;
} }
double rate=double(duration)/double(recs); double rate=double(duration)/double(recs);
//es.gain=1;
EventList *a=sess->AddEventList(code,EVL_Waveform,es.gain,es.offset,0,0,rate); EventList *a=sess->AddEventList(code,EVL_Waveform,es.gain,es.offset,0,0,rate);
a->setDimension(es.physical_dimension); a->setDimension(es.physical_dimension);
a->AddWaveform(edf.startdate,es.data,recs,duration); a->AddWaveform(edf.startdate,es.data,recs,duration);
@ -602,7 +600,6 @@ EventList * ResmedLoader::ToTimeDelta(Session *sess,EDFParser &edf, EDFSignal &
double tt=edf.startdate; double tt=edf.startdate;
//sess->UpdateFirst(tt); //sess->UpdateFirst(tt);
EventDataType c,last; EventDataType c,last;
//if (gain==0) gain=1;
EventList *el=sess->AddEventList(code,EVL_Event,es.gain,es.offset,min,max); EventList *el=sess->AddEventList(code,EVL_Event,es.gain,es.offset,min,max);
int startpos=0; int startpos=0;
@ -644,10 +641,8 @@ bool ResmedLoader::LoadSAD(Session *sess,EDFParser &edf)
ChannelID code; ChannelID code;
if (edf.edfsignals[s]->label=="Pulse") { if (edf.edfsignals[s]->label=="Pulse") {
code=OXI_Pulse; code=OXI_Pulse;
//sess->machine()->registerChannel(code);
} else if (edf.edfsignals[s]->label=="SpO2") { } else if (edf.edfsignals[s]->label=="SpO2") {
code=OXI_SPO2; code=OXI_SPO2;
//sess->machine()->registerChannel(code);
} else { } else {
qDebug() << "Unobserved ResMed SAD Signal " << edf.edfsignals[s]->label; qDebug() << "Unobserved ResMed SAD Signal " << edf.edfsignals[s]->label;
continue; continue;
@ -694,43 +689,23 @@ bool ResmedLoader::LoadPLD(Session *sess,EDFParser &edf)
//qDebug() << "EVE:" << es.digital_maximum << es.digital_minimum << es.physical_maximum << es.physical_minimum << es.gain; //qDebug() << "EVE:" << es.digital_maximum << es.digital_minimum << es.physical_maximum << es.physical_minimum << es.gain;
if (es.label=="Snore Index") { if (es.label=="Snore Index") {
code=CPAP_Snore; code=CPAP_Snore;
//EventList *a=new EventList(code,EVL_Waveform,es.gain,es.offset,es.physical_minimum,es.physical_maximum,rate);
//sess->eventlist[code].push_back(a);
//a->AddWaveform(edf.startdate,es.data,recs,duration);
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0); a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
//a->setMax(1);
//a->setMin(0);
} else if (es.label=="Therapy Pres") { } else if (es.label=="Therapy Pres") {
code=CPAP_Pressure; //TherapyPressure; code=CPAP_Pressure; //TherapyPressure;
//sess->settings[CPAP_Mode]=MODE_APAP;
//EventList *a=new EventList(code,EVL_Waveform,es.gain,es.offset,es.physical_minimum,es.physical_maximum,rate);
//sess->eventlist[code].push_back(a);
//a->AddWaveform(edf.startdate,es.data,recs,duration);
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0); a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
} else if (es.label=="Insp Pressure") { } else if (es.label=="Insp Pressure") {
code=CPAP_IPAP; //TherapyPressure; code=CPAP_IPAP; //TherapyPressure;
sess->settings[CPAP_Mode]=MODE_BIPAP; sess->settings[CPAP_Mode]=MODE_BIPAP;
//EventList *a=new EventList(code,EVL_Waveform,es.gain,es.offset,es.physical_minimum,es.physical_maximum,rate);
//sess->eventlist[code].push_back(a);
//a->AddWaveform(edf.startdate,es.data,recs,duration);
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0); a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
} else if (es.label=="MV") { } else if (es.label=="MV") {
code=CPAP_MinuteVent; code=CPAP_MinuteVent;
//EventList *a=new EventList(code,EVL_Waveform,es.gain,es.offset,es.physical_minimum,es.physical_maximum,rate);
//sess->eventlist[code].push_back(a);
//a->AddWaveform(edf.startdate,es.data,recs,duration);
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0); a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
} else if (es.label=="RR") { } else if (es.label=="RR") {
code=CPAP_RespRate; code=CPAP_RespRate;
a=sess->AddEventList(code,EVL_Waveform,es.gain,es.offset,0,0,rate); a=sess->AddEventList(code,EVL_Waveform,es.gain,es.offset,0,0,rate);
a->AddWaveform(edf.startdate,es.data,recs,duration); a->AddWaveform(edf.startdate,es.data,recs,duration);
//ToTimeDelta(sess,edf,es, code,recs,duration);
} else if (es.label=="Vt") { } else if (es.label=="Vt") {
code=CPAP_TidalVolume; code=CPAP_TidalVolume;
//EventList *a=new EventList(code,EVL_Waveform,es.gain,es.offset,es.physical_minimum,es.physical_maximum,rate);
//sess->eventlist[code].push_back(a);
//a->AddWaveform(edf.startdate,es.data,recs,duration);
es.physical_maximum=es.physical_minimum=0; es.physical_maximum=es.physical_minimum=0;
es.gain*=1000.0; es.gain*=1000.0;
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0); a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
@ -738,20 +713,12 @@ 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";
//es.gain=1;//10.0;
//es.offset=-0.5;
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0); a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
//a->setMax(1);
//a->setMin(0);
} else if (es.label=="FFL Index") { } else if (es.label=="FFL Index") {
code=CPAP_FLG; code=CPAP_FLG;
//es.gain=1;//10.0;
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0); a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
//a->setMax(1);
//a->setMin(0);
} else if (es.label.startsWith("Mask Pres")) { } else if (es.label.startsWith("Mask Pres")) {
code=CPAP_MaskPressure; code=CPAP_MaskPressure;
//es.gain=1;
a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0); a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
} else if (es.label.startsWith("Exp Press")) { } else if (es.label.startsWith("Exp Press")) {
code=CPAP_EPAP;//ExpiratoryPressure; code=CPAP_EPAP;//ExpiratoryPressure;
@ -787,7 +754,6 @@ bool ResmedLoader::LoadPLD(Session *sess,EDFParser &edf)
a=NULL; a=NULL;
} }
if (a) { if (a) {
//sess->machine()->registerChannel(code);
sess->setMin(code,a->min()); sess->setMin(code,a->min());
sess->setMax(code,a->max()); sess->setMax(code,a->max());
a->setDimension(es.physical_dimension); a->setDimension(es.physical_dimension);

View File

@ -32,27 +32,24 @@ QStatusBar *qstatusbar;
void MainWindow::Log(QString s) void MainWindow::Log(QString s)
{ {
static QMutex loglock,strlock;
static int start=QDateTime::currentDateTime().toTime_t();
static QStringList slist;
// if (!loglock.tryLock()) { // if (!loglock.tryLock()) {
// return; // return;
// } // }
loglock.lock();
strlock.lock(); strlock.lock();
QString tmp=QString("%1: %2").arg(QDateTime::currentDateTime().toTime_t()-start,5,10,QChar('0')).arg(s); QString tmp=QString("%1: %2").arg(logtime.elapsed(),5,10,QChar('0')).arg(s);
slist.append(tmp); //QStringList appears not to be threadsafe logbuffer.append(tmp); //QStringList appears not to be threadsafe
strlock.unlock(); strlock.unlock();
strlock.lock(); strlock.lock();
for (int i=0;i<slist.size();i++) // only do this in the main thread?
ui->logText->appendPlainText(slist[i]); for (int i=0;i<logbuffer.size();i++)
slist.clear(); ui->logText->appendPlainText(logbuffer[i]);
logbuffer.clear();
strlock.unlock(); strlock.unlock();
loglock.unlock(); //loglock.unlock();
} }
@ -61,6 +58,7 @@ MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), QMainWindow(parent),
ui(new Ui::MainWindow) ui(new Ui::MainWindow)
{ {
logtime.start();
ui->setupUi(this); ui->setupUi(this);
this->setWindowTitle(tr("SleepyHead")+QString(" v%1.%2.%3").arg(major_version).arg(minor_version).arg(revision_number)); this->setWindowTitle(tr("SleepyHead")+QString(" v%1.%2.%3").arg(major_version).arg(minor_version).arg(revision_number));
ui->tabWidget->setCurrentIndex(0); ui->tabWidget->setCurrentIndex(0);

View File

@ -104,6 +104,11 @@ private:
bool first_load; bool first_load;
Profile *profile; Profile *profile;
QNetworkAccessManager *netmanager; QNetworkAccessManager *netmanager;
QMutex loglock,strlock;
QStringList logbuffer;
QTime logtime;
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H