From edbf9d8d643c2762e1cc258b694d65e033b70de1 Mon Sep 17 00:00:00 2001
From: Adam Fekete <adam.fekete@kcl.ac.uk>
Date: Mon, 1 Aug 2016 18:27:41 +0100
Subject: [PATCH] converter for data file parser

---
 parser/parser-lammps/LammpsDataParser.py | 70 +++++++++++++++++++++++-
 parser/parser-lammps/LammpsLogParser.py  |  2 +-
 2 files changed, 70 insertions(+), 2 deletions(-)

diff --git a/parser/parser-lammps/LammpsDataParser.py b/parser/parser-lammps/LammpsDataParser.py
index f59aafe..54eefaa 100644
--- a/parser/parser-lammps/LammpsDataParser.py
+++ b/parser/parser-lammps/LammpsDataParser.py
@@ -51,11 +51,12 @@ class LammpsDataParserContext(object):
         section: The cached values and sections that were found in the section that is closed.
     """
 
-    def __init__(self, writeMetaData=True):
+    def __init__(self, converter, writeMetaData=True):
         """Args:
             writeMetaData: Determines if metadata is written or stored in class attributes.
         """
         self.parser = None
+        self.converter = converter
         self.writeMetaData = writeMetaData
 
     def startedParsing(self, fInName, parser):
@@ -1069,6 +1070,22 @@ class LammpsDataParserContext(object):
     ########################################################################################################################
     def readBondsFromData(self, bond_list, bondFunctional):
 
+        toMass     = self.converter.ratioMass
+        toDistance = self.converter.ratioDistance
+        toTime     = self.converter.ratioTime
+        toEnergy   = self.converter.ratioEnergy
+        toVelocity = self.converter.ratioVelocity
+        toForce    = self.converter.ratioForce
+        toTorque   = self.converter.ratioTorque
+        toTemp     = self.converter.ratioTemp
+        toPress    = self.converter.ratioPress
+        toDVisc    = self.converter.ratioDVisc
+        toCharge   = self.converter.ratioCharge
+        toDipole   = self.converter.ratioDipole
+        toEField   = self.converter.ratioEField
+        toDensity  = self.converter.ratioDensity
+
+
         list_of_bonds={}
         for line in bond_list:
 
@@ -1122,6 +1139,24 @@ class LammpsDataParserContext(object):
     ########################################################################################################################
     def readAnglesFromData(self, angle_list, angleFunctional):
 
+        toMass     = self.converter.ratioMass
+        toDistance = self.converter.ratioDistance
+        toTime     = self.converter.ratioTime
+        toEnergy   = self.converter.ratioEnergy
+        toVelocity = self.converter.ratioVelocity
+        toForce    = self.converter.ratioForce
+        toTorque   = self.converter.ratioTorque
+        toTemp     = self.converter.ratioTemp
+        toPress    = self.converter.ratioPress
+        toDVisc    = self.converter.ratioDVisc
+        toCharge   = self.converter.ratioCharge
+        toDipole   = self.converter.ratioDipole
+        toEField   = self.converter.ratioEField
+        toDensity  = self.converter.ratioDensity
+
+        toRadians = 0.0174533  # multiply to convert deg to rad
+
+
         list_of_angles={}
         for line in angle_list:
 
@@ -1191,6 +1226,23 @@ class LammpsDataParserContext(object):
     ########################################################################################################################
     def readDihedralsFromData(self, dihedral_list, dihedralFunctional):
 
+        toMass     = self.converter.ratioMass
+        toDistance = self.converter.ratioDistance
+        toTime     = self.converter.ratioTime
+        toEnergy   = self.converter.ratioEnergy
+        toVelocity = self.converter.ratioVelocity
+        toForce    = self.converter.ratioForce
+        toTorque   = self.converter.ratioTorque
+        toTemp     = self.converter.ratioTemp
+        toPress    = self.converter.ratioPress
+        toDVisc    = self.converter.ratioDVisc
+        toCharge   = self.converter.ratioCharge
+        toDipole   = self.converter.ratioDipole
+        toEField   = self.converter.ratioEField
+        toDensity  = self.converter.ratioDensity
+
+        toRadians = 0.0174533  # multiply to convert deg to rad
+
         list_of_dihedrals={}
         for line in dihedral_list:
 
@@ -1264,6 +1316,22 @@ class LammpsDataParserContext(object):
     ########################################################################################################################
     def readPairCoeffFromData(self, lj_list, updateAtomTypes, pairFunctional):
 
+        toMass     = self.converter.ratioMass
+        toDistance = self.converter.ratioDistance
+        toTime     = self.converter.ratioTime
+        toEnergy   = self.converter.ratioEnergy
+        toVelocity = self.converter.ratioVelocity
+        toForce    = self.converter.ratioForce
+        toTorque   = self.converter.ratioTorque
+        toTemp     = self.converter.ratioTemp
+        toPress    = self.converter.ratioPress
+        toDVisc    = self.converter.ratioDVisc
+        toCharge   = self.converter.ratioCharge
+        toDipole   = self.converter.ratioDipole
+        toEField   = self.converter.ratioEField
+        toDensity  = self.converter.ratioDensity
+
+
         # this currently gather pair coefficients for pairFunctional reported in the list of strings below
 
         supportedLJFunct      = ['lj/cut', 'lj/cut/coul/cut', 'lj/cut/coul/long', 'lj/cut/coul/debye',
diff --git a/parser/parser-lammps/LammpsLogParser.py b/parser/parser-lammps/LammpsLogParser.py
index 547ea1d..1d10038 100644
--- a/parser/parser-lammps/LammpsLogParser.py
+++ b/parser/parser-lammps/LammpsLogParser.py
@@ -430,7 +430,7 @@ class LammpsMainParser(MainHierarchicalParser):
     def compile_data_parser(self):
         """Instantiate superContext and construct parser for external data file.
         """
-        self.dataSuperContext = LammpsDataParser.LammpsDataParserContext(False)
+        self.dataSuperContext = LammpsDataParser.LammpsDataParserContext(converter=self.converter, writeMetaData=False)
         self.dataParser = AncillaryParser(
             fileDescription=LammpsDataParser.build_LammpsDataFileSimpleMatcher(),
             parser=self.parser,
-- 
GitLab