File: ParameterReader.h

package info (click to toggle)
macromoleculebuilder 4.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 118,996 kB
  • sloc: cpp: 23,722; python: 5,098; ansic: 2,101; awk: 145; perl: 144; makefile: 40; sh: 38
file content (414 lines) | stat: -rw-r--r-- 15,557 bytes parent folder | download
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