1 /****************************************************************************** 2 3 This source file is part of the Avogadro project. 4 5 Copyright 2018 Kitware, Inc. 6 7 This source code is released under the New BSD License, (the "License"). 8 9 Unless required by applicable law or agreed to in writing, software 10 distributed under the License is distributed on an "AS IS" BASIS, 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 See the License for the specific language governing permissions and 13 limitations under the License. 14 15 ******************************************************************************/ 16 17 #ifndef OPENMMINPUTDIALOG_H 18 #define OPENMMINPUTDIALOG_H 19 20 #include "ui_openmminputdialog.h" 21 22 #include <QHash> 23 #include <QtCore/QSettings> 24 25 class QJsonObject; 26 class QTextEdit; 27 28 namespace Avogadro { 29 namespace QtGui { 30 class Molecule; 31 } 32 33 namespace QtPlugins { 34 class OpenMMInputDialog : public QDialog 35 { 36 Q_OBJECT 37 38 public: 39 explicit OpenMMInputDialog(QWidget* parent = 0, Qt::WindowFlags flag = 0); 40 ~OpenMMInputDialog(); 41 42 void readSettings(QSettings&); 43 void writeSettings(QSettings&) const; 44 45 enum forceFieldType 46 { 47 amber96, 48 amber99sb, 49 amber99sbildn, 50 amber99sbnmr, 51 amber03, 52 amber10 53 }; 54 enum waterModelType 55 { 56 spce, 57 tip3p, 58 tip4pew, 59 tip5p, 60 implicit 61 }; 62 enum nonBondedType 63 { 64 NoCutoff, 65 CutoffNonPeriodic, 66 CutoffPeriodic, 67 Ewald, 68 PME 69 }; 70 enum constraintType 71 { 72 None, 73 HBonds, 74 AllBonds, 75 HAngles 76 }; 77 enum integratorType 78 { 79 Langevin, 80 Verlet, 81 Brownian, 82 VariableLangevin, 83 VariableVerlet 84 }; 85 enum barostatType 86 { 87 NoBarostat, 88 MonteCarlo 89 }; 90 enum platformType 91 { 92 Reference, 93 OpenCL, 94 CPU, 95 CUDA 96 }; 97 enum precisionType 98 { 99 singlePrecision, 100 mixedPrecision, 101 doublePrecision 102 }; 103 void setMolecule(QtGui::Molecule* molecule); 104 105 protected: 106 /** 107 * Reimplemented to update the dialog when it is shown 108 */ 109 void showEvent(QShowEvent* event); 110 111 private: 112 Ui::OpenMMInputDialog ui; 113 QtGui::Molecule* m_molecule; 114 115 // QString m_title; 116 QString m_readData; 117 forceFieldType m_forceFieldType; 118 QString m_title; 119 QString m_savePath; 120 waterModelType m_waterModelType; 121 nonBondedType m_nonBondedType; 122 constraintType m_constraintType; 123 integratorType m_integratorType; 124 barostatType m_barostatType; 125 126 int m_deviceIndex; 127 int m_openclPlatformIndex; 128 int m_rigidWater; 129 double m_temperature; 130 double m_generationTemperature; 131 double m_nonBondedCutoff; 132 double m_timeStep; 133 double m_ewaldTolerance; 134 double m_constraintTolerance; 135 int m_reportInterval; 136 int m_equilibriationSteps; 137 int m_productionSteps; 138 double m_errorTolerance; 139 double m_collisionRate; 140 double m_pressure; 141 int m_barostatInterval; 142 QString m_dumpXYZ; 143 int m_dumpStep; 144 int m_velocityDistRandom; 145 platformType m_platformType; 146 precisionType m_precisionType; 147 int m_thermoInterval; 148 int m_minimize; 149 int m_minimizeSteps; 150 bool m_DCDReporter; 151 bool m_PDBReporter; 152 bool m_stateDataReporter; 153 bool m_stepIndex; 154 bool m_time; 155 bool m_speed; 156 bool m_progress; 157 bool m_potentialEnergy; 158 bool m_kineticEnergy; 159 bool m_totalEnergy; 160 bool m_temperatureCheck; 161 bool m_volume; 162 bool m_density; 163 164 QString m_output; 165 bool m_dirty; 166 bool m_warned; 167 bool readData; 168 169 QTextEdit* m_jobEdit; 170 QTextEdit* m_moleculeEdit; 171 QString m_inputCoordFileName; 172 QString m_topologyFileName; 173 QString m_jobFileName; 174 175 // Generate an input deck as a string 176 QString generateInputDeck(); 177 // Translate enums to strings 178 QString getForceFieldType(forceFieldType t); 179 QString getImplicitSolventType(forceFieldType t); 180 QString getConstraintType(constraintType t); 181 QString getWaterModelType(waterModelType t); 182 QString getNonBondedType(nonBondedType t); 183 QString getIntegratorType(integratorType t); 184 QString getBarostatType(barostatType t); 185 QString getRigidWater(int t); 186 QString getVelocityDistRandom(int t); 187 QString getPlatformType(platformType t); 188 QString getPrecisionType(precisionType t); 189 QString getMinimize(int t); 190 191 // Enable/disable form elements 192 void deckDirty(bool); 193 void addMoleculeDataTab(); 194 195 public Q_SLOTS: 196 void updatePreviewText(); 197 198 private Q_SLOTS: 199 //! Button Slots 200 void textEditModified(); 201 void resetClicked(); 202 void generateClicked(); 203 void enableFormClicked(); 204 205 void setScriptName(); 206 void setInputCoordName(); 207 void setTopologyName(); 208 209 void setForceField(int); 210 void setConstraintType(int); 211 void setWaterModelType(int); 212 void setNonBondedType(int); 213 214 void setIntegratorType(int); 215 void setBarostatType(int); 216 217 void setRigidWater(int); 218 void setTemperature(double); 219 void setGenerationTemperature(double); 220 void setNonBondedCutoff(double); 221 222 void setTimeStep(double); 223 void setEwaldTolerance(double); 224 void setConstraintTolerance(double); 225 void setReportInterval(int); 226 void setEquilibriationSteps(int); 227 void setProductionSteps(int); 228 void setDeviceIndex(int); 229 void setOpenCLPlatformIndex(int); 230 void setErrorTolerance(double); 231 void setCollisionRate(double); 232 void setPressure(double); 233 void setBarostatInterval(int); 234 235 void setVelocityDistRandom(int); 236 void setDCDReporter(bool); 237 void setPDBReporter(bool); 238 void setStateDataReporter(bool); 239 void setStepIndexBoolean(bool); 240 void setTimeBoolean(bool); 241 void setSpeedBoolean(bool); 242 void setProgressBoolean(bool); 243 void setPotentialEnergyBoolean(bool); 244 void setKineticEnergyBoolean(bool); 245 void setTotalEnergyBoolean(bool); 246 void setTemperatureBoolean(bool); 247 void setVolumeBoolean(bool); 248 void setDensityBoolean(bool); 249 void setPlatformType(int); 250 void setPrecisionType(int); 251 void setMinimize(int); 252 void setMinimizeSteps(int); 253 }; 254 } // namespace QtPlugins 255 } // namespace Avogadro 256 257 #endif 258