1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414
|
/* -------------------------------------------------------------------------- *
* MMB (MacroMoleculeBuilder) *
* -------------------------------------------------------------------------- *
* *
* Copyright (c) 2011-12 by the Author. *
* Author: Samuel Flores *
* Alex Tek *
* *
* See RNABuilder.cpp for the copyright and usage agreement. *
* -------------------------------------------------------------------------- */
#ifndef ParameterReader_H_
#define ParameterReader_H_
#include <cstdio>
#include <string>
#include <iostream>
#include <vector>
#include "AtomSpringContainer.h"
#include "ContactContainer.h"
#include "ConstraintContainer.h"
#include "DensityMap.h"
#include "WaterDroplet.h"
#include "MonoAtoms.h"
#include "SimTKmolmodel.h"
#include "BaseInteractionParameterReader.h"
#include "BiopolymerClass.h"
#include "ResidueStretchContainer.h"
#include "BasePairContainer.h"
#include "MobilizerContainer.h"
#include "DisplacementContainer.h"
#include "Utils.h"
#include "DensityContainer.h"
#include "MoleculeContainer.h"
#include "Spiral.h"
#ifdef MMB_NTC_ENABLED
#include "NtC_Class_Container.h"
#include "NTC_FORCE_CLASS.h"
#include "NTC_PARAMETER_READER.h"
#endif // MMB_NTC_ENABLED
// Here is where we define GetCurrentDir , an OS dependent function to retrieve the current working directory.
#ifdef _WINDOWS
#include <direct.h>
#define GetCurrentDir _getcwd
#else
#include <unistd.h>
#define GetCurrentDir getcwd
#endif
//using std::cout;
//using std::endl;
//using namespace SimTK;
//using namespace std ;
//static double myAtoF(map<const String,double> myUserVariables,const char* value );
class MMB_EXPORT ParameterReader {
private:
ParameterReader(const ParameterReader &);
ParameterReader & operator = (const ParameterReader &);
public:
ParameterReader();
vector<CovalentBondClass> additionalCovalentBondVector;
vector<IncludeIntraChainInterface> includeIntraChainInterfaceVector;
BasePairContainer basePairContainer;
map<const ChainResidueIndex, BasePairPartner,twoIndexCmp> basePairPartners;
// variables previously declared and initialized in Repel.h:
bool addAllAtomSterics;
bool addAllHeavyAtomSterics;
bool addBackboneOxygenForces;
bool addProteinBackboneSterics;
bool addRNABackboneSterics;
bool addSelectedAtoms;
bool addTestSpring;
bool useCIFFileFormat;
std::vector< std::pair < std::string, std::string > > trajectoryFileRemarks;
std::vector< std::pair < std::string, std::string > > lastFileRemarks;
bool gemmi_isFirstInStage;
bool alignmentForcesIsGapped;
double alignmentForcesGapPenalty;
double alignmentForcesMatchScore;
double alignmentForcesMismatchScore;
String alignmentForcesScoringScheme;
double alignmentForcesDeadLengthFraction;
double alignmentForcesDeadLength;
double alignmentForcesDeadLengthIsFractionOfInitialLength;
double alignmentForcesForceConstant;
bool applyC1pSprings;
vector <BiopolymerModification> biopolymerModificationVector;
int calcBaseBodyFramesAtEveryTimeStep;
bool calcEnergy ;
double totalEnergy;
double potentialEnergy;
double kineticEnergy;
bool checkSatisfied ;
//bool constrainRigidSegments;
double constraintTolerance;
bool computeTotalCurvatureSquared;
InterfaceContainer contactInterfaceContainer;
bool guessCoordinates;
double cutoffRadius ;
double cutoffAngle ;
double densityAtomFraction;
double densityNoiseTemperature;
double densityNoiseScale ;
//String densityFileName;
String electroDensityFileName;
//double densityForceConstant;
bool densityFitPhosphates;
bool densityNoiseComputeAutocorrelation;
bool densityReportAtEachAtomPosition;
double electroDensityForceConstant;
//bool densityMapActivate;
double excludedVolumeStiffness;
//String firstResidueMobilizerType;
int firstStage;
double fitDefaultTolerance;
double globalAmberImproperTorsionScaleFactor;
double globalBondBendScaleFactor ;
double globalBondStretchScaleFactor ;
double globalBondTorsionScaleFactor ;
double globalCoulombScaleFactor;
double globalGbsaScaleFactor ;
double globalVdwScaleFactor;
double hardSphereStiffnessMultiplier ;
String inQVectorFileName;
double initialSeparation;
double integratorAccuracy;
double integratorStepSize;
String integratorType;
double kbBackboneTorsionGlobalScaleFactor;
int lastStage;
String leontisWesthofInFileName;
bool loadTinkerParameterFile;
String outQVectorFileName;
String magnesiumIonChainId;
double magnesiumIonRadius ;
int matchDefaultSkipTopLevelTransform;
bool matchHydrogenAtomLocations;
bool matchPurineN1AtomLocations;
bool matchProteinCarboxylOxygenLocations;
bool matchExact;
bool matchIdealized;
bool matchOptimize;
double matchingMinimizerTolerance;
int numReportingIntervals ;
int minimize;
int monteCarloRun;
double monteCarloTemperature;
double monteCarloTemperatureIncrement;
double nastGlobalBondTorsionScaleFactor;
double noseHooverTime;
int numMagnesiumIons;
String outMonteCarloFileName ;
String outTrajectoryFileName ;
//bool physicsWhereYouWantIt;
float physicsRadius;
bool piecewiseRigidify;
double planarityThreshold; // threshold for considering a bond center to be planar, in rads.
String potentialType;
bool prioritize ;
bool proteinCapping;
bool useNACappingHydroxyls;
double excludedVolumeRadius;
int readInQVector ;
bool readPreviousFrameFile ;
int readMagnesiumPositionsFromFile;
bool removeDensityForcesFromRigidStretches;
bool removeRigidBodyMomentum;
double removeMomentumPeriod;
double reportingInterval ;
double restrainingForceConstant;
double restrainingTorqueConstant;
bool rigidifyFormedHelices;
int rigidifyTermini;
int satisfiedBasePairs ;
int unSatisfiedBasePairs ;
double scrubberPeriod ;
bool safeParameters;
int setChiBondMobility;
int setDefaultStructurePredictionParameters;
int setDefaultThreadingParameters;
bool setForceAndStericScrubber ;
bool setForceScrubber ;
bool setHelicalStacking;
bool setInitialVelocities;
bool setLoopBondMobility;//minimize;
bool setOverallBondMobility;
bool setRemoveBasePairsInRigidStretch;
bool setRemoveBasePairsAcrossRigidStretches;
bool setRepulsiveForce ;
bool setTemperature;
double smallGroupInertiaMultiplier;
Spiral spiral; // This is the helical spiral object, used to fit DNA to icosahedral virus capsids. Defined in Spiral.h
// These should no longer be needed:
//Vec3 sphericalHelixCenter ;
//double sphericalHelixRadius ;
//double sphericalHelixStartTheta;
//double sphericalHelixPhiOffset ;
//double sphericalHelixInterStrandDistance;
bool stackAllHelicalResidues ;
String thermostatType;
String tinkerParameterFileName;
double twoTransformForceMultiplier;
bool useFixedStepSize;
bool useMultithreadedComputation;
bool useOpenMMAcceleration;
double vanderWallSphereRadius;
double velocityRescalingInterval;
bool verbose;
int vmdOutput;
bool waterDropletMake;
double waterDropletRadius;//Angstroms
double waterDropletX; //Angstroms
double waterDropletY; //Angstroms
double waterDropletZ; //Angstroms
double waterInertiaMultiplier;
bool weldToGround;
double wkdpGlobalBondTorsionScaleFactor;
bool writeCoordinates;
bool writeDoublePrecisionTrajectories;
bool writeFrameFile ;
bool writeLastFrameFile ;
String workingDirectory ;
bool detectConvergence;
bool converged;
int convergenceTimeout;
double convergenceEpsilon;
BondMobility::Mobility helixBondMobility;
BondMobility::Mobility loopBondMobility;
BondMobility::Mobility overallBondMobility;
BondMobility::Mobility chiBondMobility;
Vector qVector;
String lastFrameFileName ;
String previousFrameFileName ;
LeontisWesthofClass myLeontisWesthofClass;
int enforceParallelness ;
// end of variables improted from Repel.h
String sequence;
String proteinSequence;
String coarseNucleicAcidSequence;
int numFirstResidues ;
int numResetBases ;
int numProteinFirstResidues ;
int numProteinChains;
int numTemperatures;
int numGlobalCoulombScaleFactors;
int numGlobalVdwScaleFactors;
double temperature ;
double dutyCycle ;
int periodicallyUpdateParameters;
int currentStage;
int priority;
vector<int> residueNumber;
map<const ChainResidueIndex, int,twoIndexCmp> residueNumberTwo;
LeontisWesthofClass _leontisWesthofClass;
#ifdef MMB_NTC_ENABLED
NTC_Classes ntc_classes;
NTC_PAR_Class ntc_par_class;
NTC_FORCE_Class ntc_force_class;
NTC_Class_Container ntc_class_container;
double NtCForceScaleFactor;
#endif // MMB_NTC_ENABLED
BiopolymerClass mybiopolymerclass;
mutable map<const String,double> userVariables;
DensityMap myDensityMap;
DensityMap myElectroDensityMap;
MobilizerContainer mobilizerContainer;
PhysicsContainer physicsContainer;
ConstraintToGroundContainer constraintToGroundContainer;
DisplacementContainer displacementContainer;
AtomSpringContainer atomSpringContainer;
AtomSpring dummyAtomSpring; // This is a temporary atomSpring which keeps getting its properties modified by the user prior to being added to AtomSpringContainer. The atomSpringContainer version is not a dummy, it is a real AtomSpring which will be applied. AtomSpring has a default constructor, so it should not be necessary to initialize.
BiopolymerClassContainer myBiopolymerClassContainer;
MoleculeClassContainer moleculeClassContainer;
WaterDropletContainer waterDropletContainer;
map<const String,String> proteinSequences;
map<const String,String> coarseNucleicAcidSequences;
map<const String, int> numRigidSegments ; // scf remove, phased out
map<const String,int>::iterator firstResidueNumbersIterator;
//void addRingClosingBond(const String chainID, ResidueID residueID1, String atomName1,String bondCenterName1, ResidueID residueID2, String atomName2,String bondCenterName2);
void addC1pSprings (LeontisWesthofClass myLeontisWesthofClass);
void applyAtomSprings (SimbodyMatterSubsystem & matter, GeneralForceSubsystem & forces, State & state);
void configureDumm( DuMMForceFieldSubsystem & dumm);
/*
static bool aToBool( const char* value );
static bool aToBool( const String& name, const char* value );
*/
//static bool compareUpper( const String& param, const char* symbol );
vector<BasePair> baseOperationVector;
ContactContainer contactContainer;
DensityContainer densityContainer;
DensityContainer electroDensityContainer;
vector<SingleBondMobility> singleBondMobilityVector;
vector<BasePairPartner> basePairPartnerVector;
//vector<IncludeAllNonBondAtomsInResidue> includeAllNonBondAtomsInResidueVector;
vector<AllResiduesWithin> includeAllResiduesWithinVector;
vector<IncludeNonBondAtomInBiopolymerStruct> includeNonBondAtomInBiopolymerVector;
vector <WaterDropletAboutResidueStruct> waterDropletAboutResidueVector;
vector<MobilizerDomainsInterface> mobilizerDomainsInterfaceVector;
void removeBasePairsInRigidStretch ();
void removeBasePairsAcrossRigidStretches ();
void printAllSettings ( ostream & myOstream = std::cout, String remarkString = "") ;
void printAllSettingsToMMCIF ( std::vector< std::pair < std::string, std::string > > &remarksVec ) ;
void removeNonPriorityBasePairs (int priorityLevel);
//int getFirstResidueNumbers(const String myChainId) const ;
// int getProteinFirstResidueNumbers(const String myProteinChainId) const ;
//int getBasePriority(int baseResidueNumber,String baseChain, String basePairingEdge) const ;
// int getNumBasePairs() const;
void updateBasePair(int index,
String ch1, int res1, String edge1,
String ch2, int res2, String edge2,
String orient);
void updateMobilizerStretch(int index,
String chainId,
int startRes,
int endRes,
String bondMobility);
void addAllResiduesWithin(String chainID, int resID, double radius);
void updateAllResiduesWithin(int index, String chainID, int resID, double radius);
void deleteAllResiduesWithin(int index);
void updateIncludeAllNonBondAtomsInResidue(int index, const String & chainID, int resID);
void deleteIncludeAllNonBondAtomsInResidue(int index);
//int calcHighestPriority();
//int calcLowestBondingResidue(const String myChainId) ;
//int calcHighestBondingResidue(const String myChainId);
void setLeontisWesthofBondRowIndex();
void parameterStringInterpreter(const String & paramstr);
void parameterStringInterpreter(const ParameterStringClass & parameterStringClass,
const int readStage = 0,
const bool readAtOneStageOnly = false,
const bool readOnlyUntilStage = false,
const bool readExcept = false);
void initializeFromFileOnly(const char * parameterFileName = "./commands.dat" ) ;
void setFirstAndLastStageAndUseCifFiles(const char * parameterFileName = "./commands.dat" ) ;
//void setFirstAndLastStage(const char * parameterFileName = "./commands.dat" ) ;
void loadSequencesFromPdb(const char * pdbFileName, const string & chainsPrefix = "", const bool tempRenumberPdbResidues = 0 );
//void printRigidSegments();
// void printBasePairs();
// void printBaseAssignments();
void postInitialize();
void clearContainers();
void clearBiopolymers();
void clearForces();
void clearConstraints();
void initializeDefaults(const char * leontisWesthofInFileName = "./parameters.csv" );
void initialize(const char * parameterFileName = "./commands.dat" );
MonoAtomsContainer myMonoAtomsContainer;
private:
//variables for internal use only:
int r;
int ti;
int gcsfi;
int gvsfi;
int d;
char * s;
//int numChains ;
//int numProteinChains ;
//int prioritize ;
//temperature = 300;
//outQVectorFileName;
//firstStage = 1;
//lastStage = 0;// calcHighestPriority();
//dutyCycle = 1;
//priority = 0; // this will be set in removeNonPriorityBasePairs
};
// String getResidueName(String chainId,int myResidueNumber,ParameterReader & tempParameterReader, vector<Biopolymer> & tempChain);
#endif
|