From 81d4b13cbdd7b7a4e7344e106be0f69368bf34e3 Mon Sep 17 00:00:00 2001 From: yuntang <123@qq.com> Date: Tue, 20 May 2025 17:30:02 +0800 Subject: [PATCH] 2025-05-20T17:30:02 --- experiment_data/sample_data/~$19-6.xlsx | Bin 165 -> 0 bytes src/AnalysisTool.pro | 2 +- src/data/xlsxhandler.cpp | 7 ++ src/global.h | 2 +- src/main.cpp | 5 + src/ui/analysisoperationrecorder.cpp | 11 +++ src/ui/analysisoperationrecorder.h | 2 + src/ui/centralwidget.cpp | 124 +++++++++++++++++++----- src/ui/centralwidget.h | 12 ++- src/ui/eventhandler.h | 6 -- src/ui/itemmanager.cpp | 71 +++++++++++--- src/ui/itemmanager.h | 20 ++-- src/ui/printpreviewform.cpp | 57 +++++++++-- 13 files changed, 249 insertions(+), 70 deletions(-) delete mode 100644 experiment_data/sample_data/~$19-6.xlsx diff --git a/experiment_data/sample_data/~$19-6.xlsx b/experiment_data/sample_data/~$19-6.xlsx deleted file mode 100644 index d4a5841882f71e1e9259c5c320e2b84832515279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 ZcmZQhOiETD9WXN_G9)o1Gbqpn0s!Zc4-)_Y diff --git a/src/AnalysisTool.pro b/src/AnalysisTool.pro index 04f2bff..02b5263 100644 --- a/src/AnalysisTool.pro +++ b/src/AnalysisTool.pro @@ -9,7 +9,7 @@ CONFIG+=precompile_header PRECOMPILED_HEADER=stable.h # -VERSION = 0.9.8.3 +VERSION = 0.9.9 # 设置目标文件名,包含版本号 TARGET = AnalysisTool_$${VERSION} diff --git a/src/data/xlsxhandler.cpp b/src/data/xlsxhandler.cpp index 95b3eb5..6cbf792 100644 --- a/src/data/xlsxhandler.cpp +++ b/src/data/xlsxhandler.cpp @@ -77,8 +77,14 @@ int XlsxHandler::readFile(const QString filePath, Global::CurveFileData &cfd) readPhaseData(workSheet, dataIndex, phaseTotal); phaseTotalVtr.push_back(phaseTotal); + + // print + logde<<"index:"<cellAt(startLineIndex++, 2)->value().toDouble(); phaseTotal.phase.temp_flow = workSheet->cellAt(startLineIndex++, 2)->value().toDouble(); phaseTotal.phase.constant_temp_time_min = (uint16_t)(workSheet->cellAt(startLineIndex++, 2)->value().toInt()); diff --git a/src/global.h b/src/global.h index d037cc2..0021b5c 100644 --- a/src/global.h +++ b/src/global.h @@ -29,7 +29,7 @@ const QString TemperatureStr("temperature"); const QString RateStr("rate"); // -const double DefaultParamter = 1.0; +const double DefaultParamter = 8.177; // #if 0 diff --git a/src/main.cpp b/src/main.cpp index 9ddeee0..b36579b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,6 +15,8 @@ int main(int argc, char *argv[]) { + + system("chcp 65001"); QTextCodec *codec = QTextCodec::codecForName("UTF-8"); QTextCodec::setCodecForLocale(codec); @@ -22,6 +24,7 @@ int main(int argc, char *argv[]) logde<<"main..."; // ConfigHandler::reader(); + #if 0 logde<<"config,instrument coefficient:" <filePath == objectName) { + it = _analysisOperationVtr.erase(it); + } else { + ++it; + } + } +} + //QVector _fileAnanlysisOperationVtr; } diff --git a/src/ui/analysisoperationrecorder.h b/src/ui/analysisoperationrecorder.h index 44580bd..f894a99 100644 --- a/src/ui/analysisoperationrecorder.h +++ b/src/ui/analysisoperationrecorder.h @@ -37,6 +37,8 @@ extern QVector _analysisOperationVtr; //void addAnalysisOperation(const AnalysisOperation); void removeTheLastAnalysisOperation(); +void removeAnalysisOperationByObjectName(const QString objectName); + } diff --git a/src/ui/centralwidget.cpp b/src/ui/centralwidget.cpp index d644185..14037d8 100644 --- a/src/ui/centralwidget.cpp +++ b/src/ui/centralwidget.cpp @@ -64,6 +64,9 @@ CentralWidget::CentralWidget(QWidget *parent) connect(_eventHandler,&EventHandler::sigDelCurve, this,&CentralWidget::slotDelCurve); + connect(_customPlot, &QCustomPlot::selectionChangedByUser, + this,&CentralWidget::slotSelectionChangedByUser); + setEventHandlerEnable(false); // #if 0 @@ -144,8 +147,6 @@ void CentralWidget::switchAxisMode() _customPlot->yAxis2->setVisible(false); - // logde<<"graph count:"<<_customPlot->plottableCount(); - for (int i = _customPlot->plottableCount() - 1; i >= 0; --i) { QCPAbstractPlottable* plottable = _customPlot->plottable(i); if (auto curve = dynamic_cast(plottable)) { @@ -271,8 +272,6 @@ void CentralWidget::slotRecvAnalysisFileName(const QString &filePath) for(int i = 0;i < cfd.phaseTotalVtr.size();i++){ Global::PhaseTotalInfo& pti = cfd.phaseTotalVtr[i]; - // logde<<"data Vtr size:"<startEndPointPair = PointCalculate::getStartAndEndPoint(); @@ -311,7 +310,7 @@ void CentralWidget::slotRecvAnalysisFileName(const QString &filePath) if(cfd.analysisOperationVtr.size() > 0){ for(AnaOpRecorder::AnalysisOperation& ao :cfd.analysisOperationVtr){ - loadAnalysisData(ao.mode,ao.x1,ao.x2); + loadAnalysisData(ao.mode,ao.x1,ao.x2,filePath); } } // Refresh ui. @@ -335,7 +334,7 @@ void CentralWidget::slotAnalysisSettingApply() } // - loadAnalysisData(_analysisMode,x1,x2); + loadAnalysisData(_analysisMode,x1,x2,_currentCurve->objectName()); if(Global::_mode == Global::Mode::Analysis){ AnalysisOperation ao; @@ -414,7 +413,9 @@ void CentralWidget::slotDelCurve(QCPCurve *curve) return; } + logde<<"deltel curve object name:"<objectName().toStdString(); + deleteCurve(curve->objectName()); } void CentralWidget::slotGetAxisInfo() @@ -479,6 +480,28 @@ void CentralWidget::timerEvent(QTimerEvent *event) #endif } +void CentralWidget::slotSelectionChangedByUser() +{ + // 获取所有被选中的绘图对象 + QList selectedPlottables = _customPlot->selectedPlottables(); + + // 遍历选中的绘图对象 + for (QCPAbstractPlottable* plottable : selectedPlottables) { + // 检查是否是 QCPCurve + if (QCPCurve* curve = dynamic_cast(plottable)) { + qDebug() << "Selected Curve:" << curve->objectName(); + logde<objectName().toStdString(); + _currentCurve = curve; // 更新当前选中的曲线 + } + } + + // 如果没有选中的曲线 + if (selectedPlottables.isEmpty()) { + qDebug() << "No curve selected"; + _currentCurve = nullptr; // 清空当前选中的曲线 + } +} + #if 0 void CentralWidget::contextMenuEvent(QContextMenuEvent *event) { @@ -488,7 +511,7 @@ void CentralWidget::contextMenuEvent(QContextMenuEvent *event) } #endif -void CentralWidget::glassTransitionHandle(const double x1,const double x2) +void CentralWidget::glassTransitionHandle(const double x1,const double x2,const QString objectName) { QPointF point1 = PointCalculate::getClosestPointByX(x1); QPointF point2 = PointCalculate::getClosestPointByX(x2); @@ -523,7 +546,7 @@ void CentralWidget::glassTransitionHandle(const double x1,const double x2) QCPGraph *lineGraph1 = _customPlot->addGraph(); lineGraph1->setData(xVtr, yVtr); - ItemManager::addTemporaryQCPGraph(lineGraph1); + ItemManager::addTemporaryQCPGraph(lineGraph1,objectName); QPen pen; pen.setColor(Qt::darkGreen); @@ -554,7 +577,7 @@ void CentralWidget::glassTransitionHandle(const double x1,const double x2) lineGraph2->setData(xVtr2, yVtr2); lineGraph2->setPen(pen); - ItemManager::addTemporaryQCPGraph(lineGraph2); + ItemManager::addTemporaryQCPGraph(lineGraph2,objectName); _customPlot->replot(); #endif @@ -644,7 +667,7 @@ void CentralWidget::glassTransitionHandle(const double x1,const double x2) lineGraph3->setData(xVtr, yVtr); lineGraph3->setPen(pen); - ItemManager::addTemporaryQCPGraph(lineGraph3); + ItemManager::addTemporaryQCPGraph(lineGraph3,objectName); #endif _customPlot->replot(); @@ -800,7 +823,7 @@ QPointF CentralWidget::getTheCoordinatesOfTheTextBox(const QPointF point) return QPointF(point.x() + distance,point.y()); } -void CentralWidget::drawText(const QPointF point, const QString text) +void CentralWidget::drawText(const QPointF point, const QString text,const QString objectName) { QPointF textBoxPoint = getTheCoordinatesOfTheTextBox(point); @@ -820,7 +843,7 @@ void CentralWidget::drawText(const QPointF point, const QString text) textLabel->position->setTypeX(QCPItemPosition::ptAxisRectRatio); textLabel->position->setTypeY(QCPItemPosition::ptAxisRectRatio); - ItemManager::addTemporaryQCPItemText(textLabel); + ItemManager::addTemporaryQCPItemText(textLabel,objectName); // 创建指向点的线段(QCPItemLine) QCPItemLine *arrow = new QCPItemLine(_customPlot); @@ -829,13 +852,13 @@ void CentralWidget::drawText(const QPointF point, const QString text) arrow->setHead(QCPLineEnding::esSpikeArrow); // 添加箭头 arrow->setPen(QPen(Qt::red, 1)); - ItemManager::addTemporaryQCPItemLine(arrow); + ItemManager::addTemporaryQCPItemLine(arrow,objectName); // 重绘图表以显示文本标签和箭头 _customPlot->replot(); } -void CentralWidget::fillGraph(const double x1, const double x2) +void CentralWidget::fillGraph(const double x1, const double x2,const QString objectName) { double y1 = PointCalculate::getClosestPointByX(x1).y(); double y2 = PointCalculate::getClosestPointByX(x2).y(); @@ -868,8 +891,8 @@ void CentralWidget::fillGraph(const double x1, const double x2) fillGraph->setBrush(QBrush(Qt::green, Qt::SolidPattern)); fillGraph->setChannelFillGraph(mainGraph); - ItemManager::addTemporaryQCPGraph(mainGraph); - ItemManager::addTemporaryQCPGraph(fillGraph); + ItemManager::addTemporaryQCPGraph(mainGraph,objectName); + ItemManager::addTemporaryQCPGraph(fillGraph,objectName); _customPlot->replot(); } @@ -970,7 +993,58 @@ void CentralWidget::clearData(const CentralWidget::ClearDataMode mode) _customPlot->replot(); } -void CentralWidget::loadAnalysisData(const AnalysisMode mode,const double x1,const double x2) +void CentralWidget::deleteCurve(const QString objectName) +{ + _analysisFilePathVtr.removeOne(objectName); + + ItemManager::removeItemsByObjectName(objectName); + + AnalysisOperationRecorder::removeAnalysisOperationByObjectName(objectName); + + // Clear the data of graph. + for (int i = _customPlot->plottableCount() - 1; i >= 0; --i) { + QCPAbstractPlottable* plottable = _customPlot->plottable(i); + if (auto curve = dynamic_cast(plottable)) { + logde<<"clear data,curve object Name:"<objectName().toStdString(); + if(curve->objectName().contains(objectName)){ + _customPlot->removePlottable(curve); + + ItemManager::removeItem(curve); + } + } + } + + // Clear graph on plot. + for (int i = _customPlot->graphCount() - 1; i >= 0; --i) { + QCPGraph *graph = _customPlot->graph(i); + logde<<"clear data,graph object Name:"<objectName().toStdString(); + if(graph && graph->objectName().contains(objectName)){ + _customPlot->removeGraph(graph); + + ItemManager::removeItem(graph); + } + } + + // Delete items. + QList itemsToKeep; + itemsToKeep << _line1 << _line2; + + for (int i = _customPlot->itemCount() - 1; i >= 0; --i) { + QCPAbstractItem *item = _customPlot->item(i); + logde<<"item data,graph object Name:"<objectName().toStdString(); + if(item && !itemsToKeep.contains(item) + && item->objectName().contains(objectName)){ + _customPlot->removeItem(item); + + ItemManager::removeItem(item); + } + } + + _customPlot->replot(); +} + +void CentralWidget::loadAnalysisData( + const AnalysisMode mode,const double x1,const double x2,const QString objectName) { switch (mode) { case AnalysisMode::NumericalLabel: @@ -986,7 +1060,7 @@ void CentralWidget::loadAnalysisData(const AnalysisMode mode,const double x1,con QString str = PointCalculate::textFormatNumbericalLabel(selectPoint); - drawText(selectPoint,str); + drawText(selectPoint,str,objectName); break; } @@ -1009,14 +1083,14 @@ void CentralWidget::loadAnalysisData(const AnalysisMode mode,const double x1,con str = PointCalculate::textFormatEndPoint(point); } - drawText(point,str); + drawText(point,str,objectName); // break; } case AnalysisMode::PeakSynthesisAnalysis: { - fillGraph(x1,x2); + fillGraph(x1,x2,objectName); PointCalculate::setRegionPointX(x1,x2); @@ -1054,14 +1128,14 @@ void CentralWidget::loadAnalysisData(const AnalysisMode mode,const double x1,con peakPointTime, startPointTime, endPointTime); - drawText(peakPoint,str); + drawText(peakPoint,str,objectName); }else{ str = PointCalculate::textFormatPeakPoint(enthalpyValue, peakPoint.x(), startEndPointPair.first.x(), startEndPointPair.second.x()); - drawText(peakPoint,str); + drawText(peakPoint,str,objectName); } // @@ -1069,7 +1143,7 @@ void CentralWidget::loadAnalysisData(const AnalysisMode mode,const double x1,con } case AnalysisMode::GlassTransition: { - glassTransitionHandle(x1,x2); + glassTransitionHandle(x1,x2,objectName); // break; @@ -1085,7 +1159,7 @@ void CentralWidget::loadAnalysisData(const AnalysisMode mode,const double x1,con QPointF point = OnsetTemperaturePointHandle(x1,x2); QString str = QString::number(point.x(),'f',3); - drawText(point,str); + drawText(point,str,objectName); break; } @@ -1097,6 +1171,8 @@ void CentralWidget::loadAnalysisData(const AnalysisMode mode,const double x1,con } } + + void CentralWidget::clearAllData() { clearData(ClearDataMode::All); diff --git a/src/ui/centralwidget.h b/src/ui/centralwidget.h index 23007e3..aae9e36 100644 --- a/src/ui/centralwidget.h +++ b/src/ui/centralwidget.h @@ -71,8 +71,10 @@ public slots: protected: void timerEvent(QTimerEvent* event); +private slots: + void slotSelectionChangedByUser(); private: - void glassTransitionHandle(const double x1,const double x2); + void glassTransitionHandle(const double x1,const double x2,const QString objectName); void quadraticFit(const QVector& points, double& a, double& b, double& c); double derivativeAt(const double a, const double b, const double x); PointCalculate::Line calculateLinearRegression(const QVector& x, @@ -82,16 +84,18 @@ private: void setEventHandlerEnable(const bool); QPointF getTheCoordinatesOfTheTextBox(const QPointF point); - void drawText(const QPointF,const QString); - void fillGraph(const double x1,const double x2); + void drawText(const QPointF,const QString,const QString objectName = ""); + void fillGraph(const double x1,const double x2,const QString objectName); enum ClearDataMode{ All, Undo }; void clearData(const ClearDataMode); + void deleteCurve(const QString); + + void loadAnalysisData(const AnalysisMode mode,const double x1,const double x2,const QString objectName); - void loadAnalysisData(const AnalysisMode mode,const double x1,const double x2); private: AnalysisOperationRecorder::AnalysisMode _analysisMode; LocalCustomPlot *_customPlot; diff --git a/src/ui/eventhandler.h b/src/ui/eventhandler.h index d9e7cff..01711d0 100644 --- a/src/ui/eventhandler.h +++ b/src/ui/eventhandler.h @@ -17,13 +17,8 @@ class EventHandler : public QObject public: EventHandler(QCustomPlot *plot, QCPItemStraightLine *line1, QCPItemStraightLine *line2, QObject *parent); -#if 0 - EventHandler(QCustomPlot *plot, QCPItemStraightLine *line1, QCPItemStraightLine *line2, - QCPGraph*graph,QObject *parent); -#endif ~EventHandler(); -// void setGraph(QCPGraph* g){ _graph = g;} void setEnable(const bool flag){_enableFlag = flag;} enum Mode{ Null, @@ -54,7 +49,6 @@ private: QCustomPlot *_plot; QCPItemStraightLine *_line1,*_line2; QCPItemStraightLine *_draggingLine = nullptr; -// QCPGraph *_graph; QMenu* _menu; QAction* _specificHeatItemAction,*_baseLineAction, *_standardSampleAction,*_sampleAction; diff --git a/src/ui/itemmanager.cpp b/src/ui/itemmanager.cpp index d16561e..4647d76 100644 --- a/src/ui/itemmanager.cpp +++ b/src/ui/itemmanager.cpp @@ -5,38 +5,39 @@ QVector _QCPItemTextVtr; QVector _QCPItemLineVtr; QVector _QCPGraphVtr; -void addTemporaryQCPItemText(QCPItemText *item) +void addTemporaryQCPItemText(QCPItemText *item,const QString objectName) { - item->setObjectName(TemporaryStr); + item->setObjectName(TemporaryStr + Separator + objectName); _QCPItemTextVtr.push_back(item); } -void addTemporaryQCPItemLine(QCPItemLine *item) +void addTemporaryQCPItemLine(QCPItemLine *item,const QString objectName) { - item->setObjectName(TemporaryStr); + item->setObjectName(TemporaryStr + Separator + objectName); _QCPItemLineVtr.push_back(item); } +void addTemporaryQCPGraph(QCPGraph * graph,const QString objectName) +{ + graph->setObjectName(TemporaryStr + Separator + objectName); + _QCPGraphVtr.push_back(graph); +} + void confirm() { for(QCPItemText *item:_QCPItemTextVtr){ - item->setObjectName(ConfirmStr); + objectNameModifyConfirm(item); } for(QCPItemLine *item:_QCPItemLineVtr){ - item->setObjectName(ConfirmStr); + objectNameModifyConfirm(item); } for(QCPGraph *graph:_QCPGraphVtr){ - graph->setObjectName(ConfirmStr); + objectNameModifyConfirm(graph); } } -void addTemporaryQCPGraph(QCPGraph * graph) -{ - graph->setObjectName(TemporaryStr); - _QCPGraphVtr.push_back(graph); -} void removeItem(QObject *obj) { @@ -45,7 +46,7 @@ void removeItem(QObject *obj) if (item == obj) { _QCPItemTextVtr.remove(i); -// return; + // return; } } @@ -53,7 +54,7 @@ void removeItem(QObject *obj) QCPItemLine *item = _QCPItemLineVtr[i]; if (item == obj) { _QCPItemLineVtr.remove(i); -// return; + // return; } } @@ -61,7 +62,7 @@ void removeItem(QObject *obj) QCPGraph *item = _QCPGraphVtr[i]; if (item == obj) { _QCPGraphVtr.remove(i); -// return; + // return; } } @@ -69,5 +70,45 @@ void removeItem(QObject *obj) } +void objectNameModifyConfirm(QObject* obj) { + + QString objectName = obj->objectName(); + + if (objectName.contains(Separator)) { + QStringList parts = objectName.split(Separator); + + if (parts.size() >= 2) { + QString extractedObjectName = parts[1]; + QString newObjectName = ConfirmStr + Separator + extractedObjectName; + + obj->setObjectName(newObjectName); + } + } +} + +void removeItemsByObjectName(const QString objectName) +{ + for (int i = _QCPItemTextVtr.size() - 1; i >= 0; --i) { + QCPItemText *item = _QCPItemTextVtr[i]; + if (item->objectName().contains(objectName)){ + + _QCPItemTextVtr.remove(i); + } + } + + for (int i = _QCPItemLineVtr.size() - 1; i >= 0; --i) { + QCPItemLine *item = _QCPItemLineVtr[i]; + if (item->objectName().contains(objectName)){ + _QCPItemLineVtr.remove(i); + } + } + + for (int i = _QCPGraphVtr.size() - 1; i >= 0; --i) { + QCPGraph *item = _QCPGraphVtr[i]; + if (item->objectName().contains(objectName)){ + _QCPGraphVtr.remove(i); + } + } +} } diff --git a/src/ui/itemmanager.h b/src/ui/itemmanager.h index 2e10344..a4e8ea5 100644 --- a/src/ui/itemmanager.h +++ b/src/ui/itemmanager.h @@ -8,28 +8,22 @@ const QString OriginStr("origin"); const QString ConfirmStr("confirm"); const QString TemporaryStr("temporary"); -const QString Separator("__"); - - -#if 0 -enum ItemAttribute{ - Origin, - Last, - Temporary -}; -#endif +const QString Separator("___"); extern QVector _QCPItemTextVtr; extern QVector _QCPItemLineVtr; extern QVector _QCPGraphVtr; -void addTemporaryQCPItemText(QCPItemText*); -void addTemporaryQCPItemLine(QCPItemLine*); -void addTemporaryQCPGraph(QCPGraph*); +void addTemporaryQCPItemText(QCPItemText*,const QString objectName); +void addTemporaryQCPItemLine(QCPItemLine*,const QString objectName); +void addTemporaryQCPGraph(QCPGraph*,const QString objectName); void removeItem(QObject* obj); +void removeItemsByObjectName(const QString objectName); void confirm(); +void objectNameModifyConfirm(QObject* obj); + } diff --git a/src/ui/printpreviewform.cpp b/src/ui/printpreviewform.cpp index e29c71c..9b554a2 100644 --- a/src/ui/printpreviewform.cpp +++ b/src/ui/printpreviewform.cpp @@ -1,8 +1,10 @@ #include +#include #include "printpreviewform.h" #include "ui_printpreviewform.h" #include "global.h" +#include "logger.h" PrintPreviewForm::PrintPreviewForm(QWidget *parent) : QWidget(parent), @@ -90,7 +92,10 @@ void PrintPreviewForm::slotPaintRequested(QPrinter *printer) QRect fileInfoRect(frameRect.x(),frameRect.y() + imageRect.height(), frameRect.width(),30); painter.drawRect(fileInfoRect); - painter.drawText(fileInfoRect, Qt::AlignLeft|Qt::AlignVCenter, " Hello, World!"); + + QString fileInfoStr = QString(" 设备:差式扫描量热仪 文件名:") + + Global::_curveFileDataVtr.first().fileName; + painter.drawText(fileInfoRect, Qt::AlignLeft|Qt::AlignVCenter, fileInfoStr); // Experiment info. // Only print the first experiment data. @@ -101,7 +106,7 @@ void PrintPreviewForm::slotPaintRequested(QPrinter *printer) Global::ExperimentInfo & exInfo = Global::_curveFileDataVtr.first().ei; QString experimentInfoStr = QString(" 样品名称:%1 \n" - " 样品重量:%2 \n" + " 样品重量:%2 mg\n" " 实验日期:%3 \n" " 实验人员:%4 \n" ) @@ -110,16 +115,56 @@ void PrintPreviewForm::slotPaintRequested(QPrinter *printer) .arg(exInfo.date) .arg(exInfo.experimentor); painter.drawText(experimentRect, Qt::AlignLeft|Qt::AlignVCenter, experimentInfoStr); + // Phase info. QRect phaseInfoRect(experimentRect.x() + experimentRect.width(),experimentRect.y(), frameRect.width() - experimentRect.width(),experimentRect.height()); - QVector& phaseTotalVtr = Global::_curveFileDataVtr.first().phaseTotalVtr; - QVector phaseVtr; + QVector& phaseTotalVtr + = Global::_curveFileDataVtr.first().phaseTotalVtr; + + logde<<"phaseTotalVtr size:"< phaseMap; + for(Global::PhaseTotalInfo& ptInfo:phaseTotalVtr){ - if(ptInfo.) + phaseMap.insert(ptInfo.phaseIndex,ptInfo.phase); + logde<<"cutoff temp:"<