@@ -13,8 +13,8 TEMPLATE = app | |||
|
13 | 13 | |
|
14 | 14 | INCLUDEPATH += src/QCustomPlot src |
|
15 | 15 | |
|
16 | QMAKE_CXXFLAGS += -fopenmp | |
|
17 | QMAKE_LFLAGS += -fopenmp | |
|
16 | QMAKE_CXXFLAGS += -O5 -fopenmp -march=corei7-avx -mtune=corei7-avx -mavx | |
|
17 | QMAKE_LFLAGS += -O5 -fopenmp -march=corei7-avx -mtune=corei7-avx -mavx | |
|
18 | 18 | |
|
19 | 19 | SOURCES += src/main.cpp\ |
|
20 | 20 | src/mainwindow.cpp \ |
@@ -24,7 +24,7 | |||
|
24 | 24 | |
|
25 | 25 | |
|
26 | 26 | SocExplorerPlot::SocExplorerPlot(QWidget *parent) : |
|
27 | QWidget(parent) | |
|
27 | QWidget(parent), mRubberBand(new QRubberBand(QRubberBand::Rectangle, this)) | |
|
28 | 28 | { |
|
29 | 29 | this->m_plot = new QCustomPlot(this); |
|
30 | 30 | this->m_plot->setInteractions(QCP::iRangeDrag | QCP::iSelectAxes | |
@@ -46,6 +46,11 SocExplorerPlot::SocExplorerPlot(QWidget | |||
|
46 | 46 | |
|
47 | 47 | } |
|
48 | 48 | |
|
49 | SocExplorerPlot::~SocExplorerPlot() | |
|
50 | { | |
|
51 | delete mRubberBand; | |
|
52 | } | |
|
53 | ||
|
49 | 54 | void SocExplorerPlot::show() |
|
50 | 55 | { |
|
51 | 56 | QWidget::show(); |
@@ -379,6 +384,7 void SocExplorerPlot::keyPressEvent(QKey | |||
|
379 | 384 | { |
|
380 | 385 | case Qt::Key_Control: |
|
381 | 386 | this->ctrl_hold = true; |
|
387 | setCursor(Qt::CrossCursor); | |
|
382 | 388 | break; |
|
383 | 389 | case Qt::Key_Shift: |
|
384 | 390 | this->shift_hold = true; |
@@ -448,6 +454,7 void SocExplorerPlot::keyReleaseEvent(QK | |||
|
448 | 454 | QWidget::keyReleaseEvent(event); |
|
449 | 455 | break; |
|
450 | 456 | } |
|
457 | setCursor(Qt::ArrowCursor); | |
|
451 | 458 | } |
|
452 | 459 | |
|
453 | 460 | void SocExplorerPlot::wheelEvent(QWheelEvent * event) |
@@ -458,6 +465,7 void SocExplorerPlot::wheelEvent(QWheelE | |||
|
458 | 465 | { |
|
459 | 466 | if (event->orientation()==Qt::Vertical)//mRangeZoom.testFlag(Qt::Vertical)) |
|
460 | 467 | { |
|
468 | setCursor(Qt::SizeVerCursor); | |
|
461 | 469 | factor = pow(this->m_plot->axisRect()->rangeZoomFactor(Qt::Vertical), wheelSteps); |
|
462 | 470 | zoom(factor,event->pos().y(),Qt::Vertical); |
|
463 | 471 | } |
@@ -468,6 +476,7 void SocExplorerPlot::wheelEvent(QWheelE | |||
|
468 | 476 | { |
|
469 | 477 | if (event->orientation()==Qt::Vertical)//mRangeZoom.testFlag(Qt::Vertical)) |
|
470 | 478 | { |
|
479 | setCursor(Qt::SizeHorCursor); | |
|
471 | 480 | factor = pow(this->m_plot->axisRect()->rangeZoomFactor(Qt::Horizontal), wheelSteps); |
|
472 | 481 | zoom(factor,event->pos().x(),Qt::Horizontal); |
|
473 | 482 | } |
@@ -485,11 +494,22 void SocExplorerPlot::mousePressEvent(QM | |||
|
485 | 494 | { |
|
486 | 495 | if(event->button()==Qt::LeftButton) |
|
487 | 496 | { |
|
497 | if(ctrl_hold) | |
|
498 | { | |
|
499 | setCursor(Qt::CrossCursor); | |
|
500 | mOrigin = event->pos(); | |
|
501 | mRubberBand->setGeometry(QRect(mOrigin, QSize())); | |
|
502 | mRubberBand->show(); | |
|
503 | } | |
|
504 | else | |
|
505 | { | |
|
506 | setCursor(Qt::ClosedHandCursor); | |
|
488 | 507 | mDragStart = event->pos(); |
|
489 | 508 | this->mouse_hold = true; |
|
490 | 509 | DragStartHorzRange = this->m_plot->axisRect()->rangeDragAxis(Qt::Horizontal)->range(); |
|
491 | 510 | DragStartVertRange = this->m_plot->axisRect()->rangeDragAxis(Qt::Vertical)->range(); |
|
492 | 511 | } |
|
512 | } | |
|
493 | 513 | QWidget::mousePressEvent(event); |
|
494 | 514 | } |
|
495 | 515 | |
@@ -499,6 +519,23 void SocExplorerPlot::mouseReleaseEvent( | |||
|
499 | 519 | { |
|
500 | 520 | this->mouse_hold = false; |
|
501 | 521 | } |
|
522 | if (mRubberBand->isVisible()) | |
|
523 | { | |
|
524 | const QRect & zoomRect = mRubberBand->geometry(); | |
|
525 | int xp1, yp1, xp2, yp2; | |
|
526 | zoomRect.getCoords(&xp1, &yp1, &xp2, &yp2); | |
|
527 | double x1 = this->m_plot->xAxis->pixelToCoord(xp1); | |
|
528 | double x2 = this->m_plot->xAxis->pixelToCoord(xp2); | |
|
529 | double y1 = this->m_plot->yAxis->pixelToCoord(yp1); | |
|
530 | double y2 = this->m_plot->yAxis->pixelToCoord(yp2); | |
|
531 | ||
|
532 | this->m_plot->xAxis->setRange(x1, x2); | |
|
533 | this->m_plot->yAxis->setRange(y1, y2); | |
|
534 | ||
|
535 | mRubberBand->hide(); | |
|
536 | this->m_plot->replot(); | |
|
537 | } | |
|
538 | setCursor(Qt::ArrowCursor); | |
|
502 | 539 | QWidget::mouseReleaseEvent(event); |
|
503 | 540 | } |
|
504 | 541 | |
@@ -530,6 +567,10 void SocExplorerPlot::mouseMoveEvent(QMo | |||
|
530 | 567 | Vaxis->setRange(DragStartVertRange.lower+diff, DragStartVertRange.upper+diff); |
|
531 | 568 | this->m_plot->replot(); |
|
532 | 569 | } |
|
570 | if (mRubberBand->isVisible()) | |
|
571 | { | |
|
572 | mRubberBand->setGeometry(QRect(mOrigin, event->pos()).normalized()); | |
|
573 | } | |
|
533 | 574 | QWidget::mouseMoveEvent(event); |
|
534 | 575 | } |
|
535 | 576 |
@@ -25,12 +25,15 | |||
|
25 | 25 | #include <QWidget> |
|
26 | 26 | #include <QGridLayout> |
|
27 | 27 | #include <qcustomplot.h> |
|
28 | #include <QRubberBand> | |
|
29 | #include <QPoint> | |
|
28 | 30 | |
|
29 | 31 | class SocExplorerPlot : public QWidget |
|
30 | 32 | { |
|
31 | 33 | Q_OBJECT |
|
32 | 34 | public: |
|
33 | 35 | explicit SocExplorerPlot(QWidget *parent = 0); |
|
36 | ~SocExplorerPlot(); | |
|
34 | 37 | void setTitle(QString title); |
|
35 | 38 | void setXaxisLabel(QString label); |
|
36 | 39 | void setXaxisRange(double lower, double upper); |
@@ -80,6 +83,9 private: | |||
|
80 | 83 | QCPRange DragStartHorzRange; |
|
81 | 84 | QCPRange DragStartVertRange; |
|
82 | 85 | QPoint mDragStart; |
|
86 | bool mZoomMode; | |
|
87 | QRubberBand * mRubberBand; | |
|
88 | QPoint mOrigin; | |
|
83 | 89 | }; |
|
84 | 90 | |
|
85 | 91 | #endif // SOCEXPLORERPLOT_H |
@@ -103,6 +103,7 void MainWindow::plotFile(const QString | |||
|
103 | 103 | } |
|
104 | 104 | this->progressWidget->show(); |
|
105 | 105 | fileReader.parseFile(File); |
|
106 | this->ui->Plot->setTitle(File); | |
|
106 | 107 | } |
|
107 | 108 | } |
|
108 | 109 | |
@@ -155,10 +156,13 void MainWindow::updateProgress(int thre | |||
|
155 | 156 | { |
|
156 | 157 | if(progressThreadIds[i]==threadId) |
|
157 | 158 | { |
|
159 | if(threadId<this->progress.count()) | |
|
160 | { | |
|
158 | 161 | this->progress.at(threadId)->setValue(percentProgress); |
|
159 | 162 | updated=true; |
|
160 | 163 | } |
|
161 | 164 | } |
|
165 | } | |
|
162 | 166 | if(Q_UNLIKELY(updated==false)) |
|
163 | 167 | { |
|
164 | 168 | for(int i=0;i<OMP_THREADS;i++) |
@@ -28,7 +28,7 | |||
|
28 | 28 | #include <omp.h> |
|
29 | 29 | #include <QTimer> |
|
30 | 30 | #include <QElapsedTimer> |
|
31 | #include <time.h> | |
|
31 | #include <sys/time.h> | |
|
32 | 32 | |
|
33 | 33 | ThemisDataFile::ThemisDataFile(QObject *parent) : QThread(parent) |
|
34 | 34 | { |
@@ -121,9 +121,9 double __decodeTimeFromEpoch(int ofset,u | |||
|
121 | 121 | t.tm_hour=(10*(data[ofset+11] & 0x0F)) + ((data[ofset+12] & 0x0F)); |
|
122 | 122 | t.tm_min=(10*(data[ofset+14] & 0x0F)) + ((data[ofset+15] & 0x0F)); |
|
123 | 123 | t.tm_sec=(10*(data[ofset+17] & 0x0F)) + ((data[ofset+18] & 0x0F)); |
|
124 |
|
|
|
124 | double ms=(100*(data[ofset+20] & 0x0F)) + (10*(data[ofset+21] & 0x0F)) + ((data[ofset+22] & 0x0F)); | |
|
125 | 125 | t_of_day = mktime(&t); |
|
126 | return t_of_day+(ms*0.001); | |
|
126 | return (double)t_of_day+((double)ms*(double)0.001); | |
|
127 | 127 | } |
|
128 | 128 | void ThemisDataFile::run() |
|
129 | 129 | { |
@@ -144,7 +144,6 void ThemisDataFile::run() | |||
|
144 | 144 | int lineCnt = FileSize/58; |
|
145 | 145 | int curLine=0; |
|
146 | 146 | int lastLineUpdate=0; |
|
147 | int threadIndex,numThreads=omp_get_num_threads(); | |
|
148 | 147 | char* fileContent=(char*)malloc(FileSize); |
|
149 | 148 | if(Q_UNLIKELY(fileContent==NULL))return; |
|
150 | 149 | fseek(dataFile, 0L, SEEK_SET); |
@@ -154,18 +153,11 void ThemisDataFile::run() | |||
|
154 | 153 | if(fread(fileContent,1,FileSize,dataFile)) |
|
155 | 154 | { |
|
156 | 155 | line = fileContent; |
|
157 | if(FileSize > 10000000) | |
|
158 | { | |
|
159 | lineCnt/=numThreads; | |
|
160 | } | |
|
161 | 156 | QDateTime date; |
|
162 | 157 | timr.start(); |
|
163 | #pragma omp parallel if ((FileSize > 10000000)) private(date,data1,data2,data3,_x,threadIndex,lastLineUpdate) shared(ch1,ch2,ch3,lineCnt) | |
|
164 | { | |
|
165 | threadIndex = omp_get_thread_num(); | |
|
166 | #pragma omp for | |
|
167 | 158 |
|
|
168 | 159 |
|
|
160 | // _x= i; | |
|
169 | 161 |
|
|
170 | 162 |
|
|
171 | 163 |
|
@@ -173,26 +165,19 void ThemisDataFile::run() | |||
|
173 | 165 |
|
|
174 | 166 |
|
|
175 | 167 |
|
|
176 | #pragma omp critical | |
|
177 | { | |
|
178 | 168 |
|
|
179 | 169 |
|
|
180 | 170 |
|
|
181 | } | |
|
182 | 171 |
|
|
183 | 172 |
|
|
184 | 173 |
|
|
185 | 174 |
|
|
186 | 175 |
|
|
187 |
|
|
|
176 | emit updateProgress(0,test); | |
|
188 | 177 |
|
|
189 | 178 |
|
|
190 | #pragma omp barrier | |
|
179 | free(fileContent); | |
|
191 | 180 |
|
|
192 | free(fileContent); | |
|
193 | ||
|
194 | } | |
|
195 | ||
|
196 | 181 | qDebug()<<timr.elapsed(); |
|
197 | 182 | setlocale(LC_NUMERIC,svglocale); |
|
198 | 183 | emit dataReady(ch1,ch2,ch3); |
General Comments 0
You need to be logged in to leave comments.
Login now