TsneSettings.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "pch.h"
  2. #include "TsneSettings.h"
  3. #include <QLineEdit>
  4. #include <QSlider>
  5. #include <QRegExp>
  6. TsneSettings::TsneSettings(QWidget *parent)
  7. : QWidget(parent)
  8. {
  9. readSettigns();
  10. //Layout
  11. tsneSettings->setContentsMargins(0, 0, 0, 0);
  12. tsneSettings->addWidget(new QLabel("T-SNE Settings:"), 0, 0);
  13. tsneSettings->addWidget(new QLabel(" Perplexity"), 1, 0);
  14. tsneSettings->addWidget(new QLabel(" Lernrate"), 2, 0);
  15. perplexityEdit->setMinimumWidth(80);
  16. perplexityEdit->setMaximumWidth(80);
  17. perplexityEdit->setText(QString::number(perplexity));
  18. tsneSettings->addWidget(perplexityEdit, 1, 1);
  19. perplexitySlider->setSizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Preferred);
  20. perplexitySlider->setValue(perplexity);
  21. perplexitySlider->setMinimum(perplexityMin);
  22. perplexitySlider->setMaximum(perplexityMax);
  23. perplexitySlider->setTickInterval((perplexityMax - perplexityMin + 1) / 10);
  24. perplexitySlider->setTickPosition(QSlider::TickPosition::TicksBelow);
  25. tsneSettings->addWidget(perplexitySlider, 1, 2);
  26. learnrateEdit->setMinimumWidth(80);
  27. learnrateEdit->setMaximumWidth(80);
  28. learnrateEdit->setText(QString::number(learnrate));
  29. tsneSettings->addWidget(learnrateEdit, 2, 1);
  30. learnrateSlider->setValue(learnrate);
  31. learnrateSlider->setMinimum(learnrateMin);
  32. learnrateSlider->setMaximum(learnrateMax);
  33. learnrateSlider->setTickInterval((learnrateMax - learnrateMin + 1) / 10);
  34. learnrateSlider->setTickPosition(QSlider::TickPosition::TicksBelow);
  35. learnrateSlider->setSizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Preferred);
  36. tsneSettings->addWidget(learnrateSlider, 2, 2);
  37. QRegExp rxMinMax("[0-9]+");
  38. QRegExpValidator* validatorMinMax = new QRegExpValidator(rxMinMax, 0);
  39. learnrateEdit->setValidator(validatorMinMax);
  40. perplexityEdit->setValidator(validatorMinMax);
  41. connect(perplexitySlider, &QSlider::valueChanged, this, &TsneSettings::setPerplexity);
  42. connect(learnrateSlider, &QSlider::valueChanged, this, &TsneSettings::setLearnrate);
  43. connect(learnrateEdit, &QLineEdit::editingFinished, this, &TsneSettings::learnrateEditChangeEvent);
  44. connect(perplexityEdit, &QLineEdit::editingFinished, this, &TsneSettings::perplexityEditChangeEvent);
  45. }
  46. TsneSettings::~TsneSettings()
  47. {
  48. writeSettings();
  49. }
  50. void TsneSettings::setPerplexity(int value)
  51. {
  52. if (perplexity == value) return;
  53. perplexity = std::clamp(value, perplexityMin, perplexityMax);
  54. perplexitySlider->setValue(perplexity);
  55. perplexityEdit->setText(QString::number(perplexity));
  56. emit perplexityChanged(perplexity);
  57. }
  58. void TsneSettings::setLearnrate(int value)
  59. {
  60. if (learnrate == value) return;
  61. learnrate = std::clamp(value, learnrateMin, learnrateMax);
  62. learnrateSlider->setValue(learnrate);
  63. learnrateEdit->setText(QString::number(learnrate));
  64. emit learnrateChanged(learnrate);
  65. }
  66. void TsneSettings::readSettigns()
  67. {
  68. //Settings
  69. QSettings settings("settings.ini", QSettings::IniFormat, this);
  70. settings.beginGroup("Tsne");
  71. maxIter = settings.value("maxIter", 750).toInt();
  72. perplexity = settings.value("perplexity", 10).toInt();
  73. perplexityMin = settings.value("perplexity_MIN", 1).toInt();
  74. perplexityMax = settings.value("perplexity_MAX", 50).toInt();
  75. learnrate = settings.value("learnrate", 200).toInt();
  76. learnrateMin = settings.value("learnrate_MIN", 1).toInt();
  77. learnrateMax = settings.value("learnrate_MAX", 1000).toInt();
  78. settings.endGroup();
  79. }
  80. void TsneSettings::writeSettings()
  81. {
  82. //Settings
  83. QSettings settings("settings.ini", QSettings::IniFormat, this);
  84. settings.beginGroup("Tsne");
  85. settings.setValue("maxIter", maxIter);
  86. settings.setValue("perplexity", perplexity);
  87. settings.setValue("perplexity_MIN", perplexityMin);
  88. settings.setValue("perplexity_MAX", perplexityMax);
  89. settings.setValue("learnrate", learnrate);
  90. settings.setValue("learnrate_MIN", learnrateMin);
  91. settings.setValue("learnrate_MAX", learnrateMax);
  92. settings.endGroup();
  93. }
  94. void TsneSettings::learnrateEditChangeEvent()
  95. {
  96. bool success = false;
  97. int value = learnrateEdit->text().toInt(&success);
  98. if (success) {
  99. setLearnrate(value);
  100. }
  101. }
  102. void TsneSettings::perplexityEditChangeEvent()
  103. {
  104. bool success = false;
  105. int value = perplexityEdit->text().toInt(&success);
  106. if (success) {
  107. setPerplexity(value);
  108. }
  109. }