diff --git a/lib/poems/POEMSChain.h b/lib/poems/POEMSChain.h index cc17952d09..7dc143a9d9 100644 --- a/lib/poems/POEMSChain.h +++ b/lib/poems/POEMSChain.h @@ -1,73 +1,73 @@ -/* - *_________________________________________________________________________* - * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * - * DESCRIPTION: SEE READ-ME * - * FILE NAME: PoemsChain.h * - * AUTHORS: See Author List * - * GRANTS: See Grants List * - * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * - * LICENSE: Please see License Agreement * - * DOWNLOAD: Free at www.rpi.edu/~anderk5 * - * ADMINISTRATOR: Prof. Kurt Anderson * - * Computational Dynamics Lab * - * Rensselaer Polytechnic Institute * - * 110 8th St. Troy NY 12180 * - * CONTACT: anderk5@rpi.edu * - *_________________________________________________________________________*/ - -#ifndef POEMSCHAIN_H_ -#define POEMSCHAIN_H_ - -#include "poemslist.h" - -struct ChildRingData { - List * childRing; - int entranceNodeId; -}; - -struct POEMSChain{ - ~POEMSChain(){ - for(int i = 0; i < childChains.GetNumElements(); i++) - { - delete childChains(i); - } - } - //void printTreeStructure(int tabs); - //void getTreeAsList(List * temp); - List listOfNodes; - List childChains; - POEMSChain * parentChain; - List childRings; - - - void printTreeStructure(int tabs){ - for(int i = 0; i < tabs; i++) - { - cout << "\t"; - } - cout << "Chain: "; - for(int i = 0; i < listOfNodes.GetNumElements(); i++) - { - cout << *(listOfNodes(i)) << " "; - } - cout << endl; - for(int i = 0; i < childChains.GetNumElements(); i++) - { - childChains(i)->printTreeStructure(tabs + 1); - } - } - void getTreeAsList(List * temp) - { - for(int i = 0; i < listOfNodes.GetNumElements(); i++) - { - int * integer = new int; - *integer = *(listOfNodes(i)); - temp->Append(integer); - } - for(int i = 0; i < childChains.GetNumElements(); i++) - { - childChains(i)->getTreeAsList(temp); - } - } -}; -#endif +/* + *_________________________________________________________________________* + * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * + * DESCRIPTION: SEE READ-ME * + * FILE NAME: PoemsChain.h * + * AUTHORS: See Author List * + * GRANTS: See Grants List * + * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * + * LICENSE: Please see License Agreement * + * DOWNLOAD: Free at www.rpi.edu/~anderk5 * + * ADMINISTRATOR: Prof. Kurt Anderson * + * Computational Dynamics Lab * + * Rensselaer Polytechnic Institute * + * 110 8th St. Troy NY 12180 * + * CONTACT: anderk5@rpi.edu * + *_________________________________________________________________________*/ + +#ifndef POEMSCHAIN_H_ +#define POEMSCHAIN_H_ + +#include "poemslist.h" + +struct ChildRingData { + List * childRing; + int entranceNodeId; +}; + +struct POEMSChain{ + ~POEMSChain(){ + for(int i = 0; i < childChains.GetNumElements(); i++) + { + delete childChains(i); + } + } + //void printTreeStructure(int tabs); + //void getTreeAsList(List * temp); + List listOfNodes; + List childChains; + POEMSChain * parentChain; + List childRings; + + + void printTreeStructure(int tabs){ + for(int i = 0; i < tabs; i++) + { + cout << "\t"; + } + cout << "Chain: "; + for(int i = 0; i < listOfNodes.GetNumElements(); i++) + { + cout << *(listOfNodes(i)) << " "; + } + cout << endl; + for(int i = 0; i < childChains.GetNumElements(); i++) + { + childChains(i)->printTreeStructure(tabs + 1); + } + } + void getTreeAsList(List * temp) + { + for(int i = 0; i < listOfNodes.GetNumElements(); i++) + { + int * integer = new int; + *integer = *(listOfNodes(i)); + temp->Append(integer); + } + for(int i = 0; i < childChains.GetNumElements(); i++) + { + childChains(i)->getTreeAsList(temp); + } + } +}; +#endif diff --git a/lib/poems/SystemProcessor.h b/lib/poems/SystemProcessor.h index fa43386a1d..9ef511f997 100644 --- a/lib/poems/SystemProcessor.h +++ b/lib/poems/SystemProcessor.h @@ -1,283 +1,283 @@ -/* - *_________________________________________________________________________* - * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * - * DESCRIPTION: SEE READ-ME * - * FILE NAME: SystemProcessor.h * - * AUTHORS: See Author List * - * GRANTS: See Grants List * - * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * - * LICENSE: Please see License Agreement * - * DOWNLOAD: Free at www.rpi.edu/~anderk5 * - * ADMINISTRATOR: Prof. Kurt Anderson * - * Computational Dynamics Lab * - * Rensselaer Polytechnic Institute * - * 110 8th St. Troy NY 12180 * - * CONTACT: anderk5@rpi.edu * - *_________________________________________________________________________*/ - -#ifndef _SYS_PROCESSOR_H_ -#define _SYS_PROCESSOR_H_ -#include "poemslist.h" -#include "poemstree.h" -#include "POEMSChain.h" - - -struct POEMSNode { - List links; - List taken; - int idNumber; - bool visited; - - ~POEMSNode(){ - for(int i = 0; i < taken.GetNumElements(); i++) - { - delete taken(i); - } - }; -}; - - -class SystemProcessor{ -private: - Tree nodes; -// List forDeletion; - List headsOfSystems; - List > ringsInSystem; - POEMSNode * findSingleLink(TreeNode * aNode); - POEMSChain * AddNewChain(POEMSNode * currentNode); - bool setLinkVisited(POEMSNode * firstNode, POEMSNode * secondNode); -public: - SystemProcessor(void); - - ~SystemProcessor(void) { - headsOfSystems.DeleteValues(); - for(int i = 0; i < ringsInSystem.GetNumElements(); i++) - { - for(int k = 0; k < ringsInSystem(i)->GetNumElements(); i++) - { - delete (*ringsInSystem(i))(k); - } - } - }; - void processArray(int** links, int numLinks); - List * getSystemData(); - int getNumberOfHeadChains(); -}; - -SystemProcessor::SystemProcessor(void){ -} - -void SystemProcessor::processArray(int** links, int numLinks) -{ - bool * false_var; //holds the value false; needed because a constant cannot be put into a list; the list requires a - //reference. - for(int i = 0; i < numLinks; i++) //go through all the links in the input array - { - if(!nodes.Find(links[i][0])) //if the first node in the pair is not found in the storage tree - { - POEMSNode * newNode = new POEMSNode; //make a new node -// forDeletion.Append(newNode); - newNode->idNumber = links[i][0]; //set its ID to the value - newNode->visited = false; //set it to be unvisited - nodes.Insert(links[i][0], links[i][0], (void *) newNode); //and add it to the tree storage structure - } - if(!nodes.Find(links[i][1])) //repeat process for the other half of each link - { - POEMSNode * newNode = new POEMSNode; -// forDeletion.Append(newNode); - newNode->idNumber = links[i][1]; - newNode->visited = false; - nodes.Insert(links[i][1], links[i][1], (void *) newNode); - } - POEMSNode * firstNode = (POEMSNode *)nodes.Find(links[i][0]); //now that we are sure both nodes exist, - POEMSNode * secondNode = (POEMSNode *)nodes.Find(links[i][1]); //we can get both of them out of the tree - firstNode->links.Append(secondNode); //and add the link from the first to the second... - false_var = new bool; - *false_var = false; //make a new false boolean to note that the link between these two - firstNode->taken.Append(false_var); //has not already been taken, and append it to the taken list - secondNode->links.Append(firstNode); //repeat process for link from second node to first - false_var = new bool; - *false_var = false; - secondNode->taken.Append(false_var); - } - - TreeNode * temp = nodes.GetRoot(); //get the root node of the node storage tree - POEMSNode * currentNode; - do - { - currentNode = findSingleLink(temp); //find the start of the next available chain - if(currentNode != NULL) - { - headsOfSystems.Append(AddNewChain(currentNode)); //and add it to the headsOfSystems list of chains - } - } - while(currentNode != NULL); //repeat this until all chains have been added -} - -POEMSChain * SystemProcessor::AddNewChain(POEMSNode * currentNode){ - if(currentNode == NULL) //Termination condition; if the currentNode is null, then return null - { - return NULL; - } - int * tmp; - POEMSNode * nextNode = NULL; //nextNode stores the proposed next node to add to the chain. this will be checked to make sure no backtracking is occuring before being assigned as the current node. - POEMSChain * newChain = new POEMSChain; //make a new POEMSChain object. This will be the object returned - - if(currentNode->links.GetNumElements() == 0) //if we have no links from this node, then the whole chain is only one node. Add this node to the chain and return it; mark node as visited for future reference - { - currentNode->visited = true; - tmp = new int; - *tmp = currentNode->idNumber; - newChain->listOfNodes.Append(tmp); - return newChain; - } - while(currentNode->links.GetNumElements() <= 2) //we go until we get to a node that branches, or both branches have already been taken both branches can already be taken if a loop with no spurs is found in the input data - { - currentNode->visited = true; - tmp = new int; - *tmp = currentNode->idNumber; - newChain->listOfNodes.Append(tmp); //append the current node to the chain & mark as visited - //cout << "Appending node " << currentNode->idNumber << " to chain" << endl; - nextNode = currentNode->links.GetHeadElement()->value; //the next node is the first or second value stored in the links array - //of the current node. We get the first value... - if(!setLinkVisited(currentNode, nextNode)) //...and see if it points back to where we came from. If it does... - { //either way, we set this link as visited - if(currentNode->links.GetNumElements() == 1) //if it does, then if that is the only link to this node, we're done with the chain, so append the chain to the list and return the newly created chain - { -// headsOfSystems.Append(newChain); - return newChain; - } - nextNode = currentNode->links.GetHeadElement()->next->value;//follow the other link if there is one, so we go down the chain - if(!setLinkVisited(currentNode, nextNode)) //mark link as followed, so we know not to backtrack - { - // headsOfSystems.Append(newChain); - return newChain; //This condition, where no branches have occurred but both links have already - //been taken can only occur in a loop with no spurs; add this loop to the - //system (currently added as a chain for consistency), and return. - } - } - currentNode = nextNode; //set the current node to be the next node in the chain - } - currentNode->visited = true; - tmp = new int; - *tmp = currentNode->idNumber; - newChain->listOfNodes.Append(tmp); //append the last node before branch (node shared jointly with branch chains) - //re-mark as visited, just to make sure - ListElement * tempNode = currentNode->links.GetHeadElement(); //go through all of the links, one at a time that branch - POEMSChain * tempChain = NULL; //temporary variable to hold data - while(tempNode != NULL) //when we have followed all links, stop - { - if(setLinkVisited(tempNode->value, currentNode)) //dont backtrack, or create closed loops - { - tempChain = AddNewChain(tempNode->value); //Add a new chain created out of the next node down that link - tempChain->parentChain = newChain; //set the parent to be this chain - newChain->childChains.Append(tempChain); //append the chain to this chain's list of child chains - } - tempNode = tempNode->next; //go to process the next chain - } - //headsOfSystems.Append(newChain); //append this chain to the system list - return newChain; -} - -POEMSNode * SystemProcessor::findSingleLink(TreeNode * aNode) -//This function takes the root of a search tree containing POEMSNodes and returns a POEMSNode corresponding to the start of a chain in the -//system. It finds a node that has not been visited before, and only has one link; this node will be used as the head of the chain. -{ - if(aNode == NULL) - { - return NULL; - } - POEMSNode * returnVal = (POEMSNode *)aNode->GetAuxData(); //get the poemsnode data out of the treenode - POEMSNode * detectLoneLoops = NULL; //is used to handle a loop that has no protruding chains - if(returnVal->visited == false) - { - detectLoneLoops = returnVal; //if we find any node that has not been visited yet, save it - } - if(returnVal->links.GetNumElements() == 1 && returnVal->visited == false) //see if it has one element and hasnt been visited already - { - return returnVal; //return the node is it meets this criteria - } - returnVal = findSingleLink(aNode->Left()); //otherwise, check the left subtree - if(returnVal == NULL) //and if we find nothing... - { - returnVal = findSingleLink(aNode->Right()); //check the right subtree - } - if(returnVal == NULL) //if we could not find any chains - { - returnVal = detectLoneLoops; //see if we found any nodes at all that havent been processed - } - return returnVal; //return what we find (will be NULL if no new chains are - //found) -} - -bool SystemProcessor::setLinkVisited(POEMSNode * firstNode, POEMSNode * secondNode) -//setLinkVisited sets the links between these two nodes as visited. If they are already visited, it returns false. Otherwise, it sets -//them as visited and returns true. This function is used to see whether a certain path has been taken already in the graph structure. -//If it has been, then we need to know so we dont follow it again; this prevents infinite recursion when there is a loop, and prevents -//backtracking up a chain that has already been made. The list of booleans denoting if a link has been visited is called 'taken' and is -//part of the POEMSNode struct. The list is the same size as the list of pointers to other nodes, and stores the boolean visited/unvisited -//value for that particular link. Because each link is represented twice, (once at each node in the link), both of the boolean values need -//to be set in the event that the link has to be set as visited. -{ - //cout << "Checking link between nodes " << firstNode->idNumber << " and " << secondNode->idNumber << "... "; - ListElement * tmp = firstNode->links.GetHeadElement(); //get the head element of the list of pointers for node 1 - ListElement * tmp2 = firstNode->taken.GetHeadElement(); //get the head element of the list of bool isVisited flags for node 1 - while(tmp->value != NULL || tmp2->value != NULL) //go through untill we reach the end of the lists - { - if(tmp->value == secondNode) //if we find the link to the other node - { - if(*(tmp2->value) == true) //if the link has already been visited - { - //cout << "visited already" << endl; - return false; //return false to indicate that the link has been visited before this attempt - } - else //otherwise, visit it - { - *tmp2->value = true; - } - break; - } - tmp = tmp->next; //go check next link - tmp2 = tmp2->next; - } - - tmp = secondNode->links.GetHeadElement(); //now, if the link was unvisited, we need to go set the other node's list such that - //it also knows this link is being visited - tmp2 = secondNode->taken.GetHeadElement(); - while(tmp->value != NULL || tmp2->value != NULL) //go through the list - { - if(tmp->value == firstNode) //if we find the link - { - if(*(tmp2->value) == true) //and it has already been visited, then signal an error; this shouldnt ever happen - { - cout << "Error in parsing structure! Should never reach this condition! \n" << - "Record of visited links out of synch between two adjacent nodes.\n"; - return false; - } - else - { - *tmp2->value = true; //set the appropriate value to true to indicate this link has been visited - } - break; - } - tmp = tmp->next; - tmp2 = tmp2->next; - } - //cout << "not visited" << endl; - return true; //return true to indicate that this is the first time the link has been visited -} - -List * SystemProcessor::getSystemData(void) //Gets the list of POEMSChains that comprise the system. Might eventually only - //return chains linked to the reference plane, but currently returns every chain - //in the system. -{ - return &headsOfSystems; -} - -int SystemProcessor::getNumberOfHeadChains(void) //This function isnt implemented yet, and might be taken out entirely; this was a holdover - //from when I intended to return an array of chain pointers, rather than a list of chains - //It will probably be deleted once I finish figuring out exactly what needs to be returned -{ - return 0; -} -#endif +/* + *_________________________________________________________________________* + * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * + * DESCRIPTION: SEE READ-ME * + * FILE NAME: SystemProcessor.h * + * AUTHORS: See Author List * + * GRANTS: See Grants List * + * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * + * LICENSE: Please see License Agreement * + * DOWNLOAD: Free at www.rpi.edu/~anderk5 * + * ADMINISTRATOR: Prof. Kurt Anderson * + * Computational Dynamics Lab * + * Rensselaer Polytechnic Institute * + * 110 8th St. Troy NY 12180 * + * CONTACT: anderk5@rpi.edu * + *_________________________________________________________________________*/ + +#ifndef _SYS_PROCESSOR_H_ +#define _SYS_PROCESSOR_H_ +#include "poemslist.h" +#include "poemstree.h" +#include "POEMSChain.h" + + +struct POEMSNode { + List links; + List taken; + int idNumber; + bool visited; + + ~POEMSNode(){ + for(int i = 0; i < taken.GetNumElements(); i++) + { + delete taken(i); + } + }; +}; + + +class SystemProcessor{ +private: + Tree nodes; +// List forDeletion; + List headsOfSystems; + List > ringsInSystem; + POEMSNode * findSingleLink(TreeNode * aNode); + POEMSChain * AddNewChain(POEMSNode * currentNode); + bool setLinkVisited(POEMSNode * firstNode, POEMSNode * secondNode); +public: + SystemProcessor(void); + + ~SystemProcessor(void) { + headsOfSystems.DeleteValues(); + for(int i = 0; i < ringsInSystem.GetNumElements(); i++) + { + for(int k = 0; k < ringsInSystem(i)->GetNumElements(); i++) + { + delete (*ringsInSystem(i))(k); + } + } + }; + void processArray(int** links, int numLinks); + List * getSystemData(); + int getNumberOfHeadChains(); +}; + +SystemProcessor::SystemProcessor(void){ +} + +void SystemProcessor::processArray(int** links, int numLinks) +{ + bool * false_var; //holds the value false; needed because a constant cannot be put into a list; the list requires a + //reference. + for(int i = 0; i < numLinks; i++) //go through all the links in the input array + { + if(!nodes.Find(links[i][0])) //if the first node in the pair is not found in the storage tree + { + POEMSNode * newNode = new POEMSNode; //make a new node +// forDeletion.Append(newNode); + newNode->idNumber = links[i][0]; //set its ID to the value + newNode->visited = false; //set it to be unvisited + nodes.Insert(links[i][0], links[i][0], (void *) newNode); //and add it to the tree storage structure + } + if(!nodes.Find(links[i][1])) //repeat process for the other half of each link + { + POEMSNode * newNode = new POEMSNode; +// forDeletion.Append(newNode); + newNode->idNumber = links[i][1]; + newNode->visited = false; + nodes.Insert(links[i][1], links[i][1], (void *) newNode); + } + POEMSNode * firstNode = (POEMSNode *)nodes.Find(links[i][0]); //now that we are sure both nodes exist, + POEMSNode * secondNode = (POEMSNode *)nodes.Find(links[i][1]); //we can get both of them out of the tree + firstNode->links.Append(secondNode); //and add the link from the first to the second... + false_var = new bool; + *false_var = false; //make a new false boolean to note that the link between these two + firstNode->taken.Append(false_var); //has not already been taken, and append it to the taken list + secondNode->links.Append(firstNode); //repeat process for link from second node to first + false_var = new bool; + *false_var = false; + secondNode->taken.Append(false_var); + } + + TreeNode * temp = nodes.GetRoot(); //get the root node of the node storage tree + POEMSNode * currentNode; + do + { + currentNode = findSingleLink(temp); //find the start of the next available chain + if(currentNode != NULL) + { + headsOfSystems.Append(AddNewChain(currentNode)); //and add it to the headsOfSystems list of chains + } + } + while(currentNode != NULL); //repeat this until all chains have been added +} + +POEMSChain * SystemProcessor::AddNewChain(POEMSNode * currentNode){ + if(currentNode == NULL) //Termination condition; if the currentNode is null, then return null + { + return NULL; + } + int * tmp; + POEMSNode * nextNode = NULL; //nextNode stores the proposed next node to add to the chain. this will be checked to make sure no backtracking is occuring before being assigned as the current node. + POEMSChain * newChain = new POEMSChain; //make a new POEMSChain object. This will be the object returned + + if(currentNode->links.GetNumElements() == 0) //if we have no links from this node, then the whole chain is only one node. Add this node to the chain and return it; mark node as visited for future reference + { + currentNode->visited = true; + tmp = new int; + *tmp = currentNode->idNumber; + newChain->listOfNodes.Append(tmp); + return newChain; + } + while(currentNode->links.GetNumElements() <= 2) //we go until we get to a node that branches, or both branches have already been taken both branches can already be taken if a loop with no spurs is found in the input data + { + currentNode->visited = true; + tmp = new int; + *tmp = currentNode->idNumber; + newChain->listOfNodes.Append(tmp); //append the current node to the chain & mark as visited + //cout << "Appending node " << currentNode->idNumber << " to chain" << endl; + nextNode = currentNode->links.GetHeadElement()->value; //the next node is the first or second value stored in the links array + //of the current node. We get the first value... + if(!setLinkVisited(currentNode, nextNode)) //...and see if it points back to where we came from. If it does... + { //either way, we set this link as visited + if(currentNode->links.GetNumElements() == 1) //if it does, then if that is the only link to this node, we're done with the chain, so append the chain to the list and return the newly created chain + { +// headsOfSystems.Append(newChain); + return newChain; + } + nextNode = currentNode->links.GetHeadElement()->next->value;//follow the other link if there is one, so we go down the chain + if(!setLinkVisited(currentNode, nextNode)) //mark link as followed, so we know not to backtrack + { + // headsOfSystems.Append(newChain); + return newChain; //This condition, where no branches have occurred but both links have already + //been taken can only occur in a loop with no spurs; add this loop to the + //system (currently added as a chain for consistency), and return. + } + } + currentNode = nextNode; //set the current node to be the next node in the chain + } + currentNode->visited = true; + tmp = new int; + *tmp = currentNode->idNumber; + newChain->listOfNodes.Append(tmp); //append the last node before branch (node shared jointly with branch chains) + //re-mark as visited, just to make sure + ListElement * tempNode = currentNode->links.GetHeadElement(); //go through all of the links, one at a time that branch + POEMSChain * tempChain = NULL; //temporary variable to hold data + while(tempNode != NULL) //when we have followed all links, stop + { + if(setLinkVisited(tempNode->value, currentNode)) //dont backtrack, or create closed loops + { + tempChain = AddNewChain(tempNode->value); //Add a new chain created out of the next node down that link + tempChain->parentChain = newChain; //set the parent to be this chain + newChain->childChains.Append(tempChain); //append the chain to this chain's list of child chains + } + tempNode = tempNode->next; //go to process the next chain + } + //headsOfSystems.Append(newChain); //append this chain to the system list + return newChain; +} + +POEMSNode * SystemProcessor::findSingleLink(TreeNode * aNode) +//This function takes the root of a search tree containing POEMSNodes and returns a POEMSNode corresponding to the start of a chain in the +//system. It finds a node that has not been visited before, and only has one link; this node will be used as the head of the chain. +{ + if(aNode == NULL) + { + return NULL; + } + POEMSNode * returnVal = (POEMSNode *)aNode->GetAuxData(); //get the poemsnode data out of the treenode + POEMSNode * detectLoneLoops = NULL; //is used to handle a loop that has no protruding chains + if(returnVal->visited == false) + { + detectLoneLoops = returnVal; //if we find any node that has not been visited yet, save it + } + if(returnVal->links.GetNumElements() == 1 && returnVal->visited == false) //see if it has one element and hasnt been visited already + { + return returnVal; //return the node is it meets this criteria + } + returnVal = findSingleLink(aNode->Left()); //otherwise, check the left subtree + if(returnVal == NULL) //and if we find nothing... + { + returnVal = findSingleLink(aNode->Right()); //check the right subtree + } + if(returnVal == NULL) //if we could not find any chains + { + returnVal = detectLoneLoops; //see if we found any nodes at all that havent been processed + } + return returnVal; //return what we find (will be NULL if no new chains are + //found) +} + +bool SystemProcessor::setLinkVisited(POEMSNode * firstNode, POEMSNode * secondNode) +//setLinkVisited sets the links between these two nodes as visited. If they are already visited, it returns false. Otherwise, it sets +//them as visited and returns true. This function is used to see whether a certain path has been taken already in the graph structure. +//If it has been, then we need to know so we dont follow it again; this prevents infinite recursion when there is a loop, and prevents +//backtracking up a chain that has already been made. The list of booleans denoting if a link has been visited is called 'taken' and is +//part of the POEMSNode struct. The list is the same size as the list of pointers to other nodes, and stores the boolean visited/unvisited +//value for that particular link. Because each link is represented twice, (once at each node in the link), both of the boolean values need +//to be set in the event that the link has to be set as visited. +{ + //cout << "Checking link between nodes " << firstNode->idNumber << " and " << secondNode->idNumber << "... "; + ListElement * tmp = firstNode->links.GetHeadElement(); //get the head element of the list of pointers for node 1 + ListElement * tmp2 = firstNode->taken.GetHeadElement(); //get the head element of the list of bool isVisited flags for node 1 + while(tmp->value != NULL || tmp2->value != NULL) //go through untill we reach the end of the lists + { + if(tmp->value == secondNode) //if we find the link to the other node + { + if(*(tmp2->value) == true) //if the link has already been visited + { + //cout << "visited already" << endl; + return false; //return false to indicate that the link has been visited before this attempt + } + else //otherwise, visit it + { + *tmp2->value = true; + } + break; + } + tmp = tmp->next; //go check next link + tmp2 = tmp2->next; + } + + tmp = secondNode->links.GetHeadElement(); //now, if the link was unvisited, we need to go set the other node's list such that + //it also knows this link is being visited + tmp2 = secondNode->taken.GetHeadElement(); + while(tmp->value != NULL || tmp2->value != NULL) //go through the list + { + if(tmp->value == firstNode) //if we find the link + { + if(*(tmp2->value) == true) //and it has already been visited, then signal an error; this shouldnt ever happen + { + cout << "Error in parsing structure! Should never reach this condition! \n" << + "Record of visited links out of synch between two adjacent nodes.\n"; + return false; + } + else + { + *tmp2->value = true; //set the appropriate value to true to indicate this link has been visited + } + break; + } + tmp = tmp->next; + tmp2 = tmp2->next; + } + //cout << "not visited" << endl; + return true; //return true to indicate that this is the first time the link has been visited +} + +List * SystemProcessor::getSystemData(void) //Gets the list of POEMSChains that comprise the system. Might eventually only + //return chains linked to the reference plane, but currently returns every chain + //in the system. +{ + return &headsOfSystems; +} + +int SystemProcessor::getNumberOfHeadChains(void) //This function isnt implemented yet, and might be taken out entirely; this was a holdover + //from when I intended to return an array of chain pointers, rather than a list of chains + //It will probably be deleted once I finish figuring out exactly what needs to be returned +{ + return 0; +} +#endif diff --git a/lib/poems/defines.h b/lib/poems/defines.h index 55f94283d5..455bc298d5 100644 --- a/lib/poems/defines.h +++ b/lib/poems/defines.h @@ -1,27 +1,27 @@ -/* - *_________________________________________________________________________* - * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * - * DESCRIPTION: SEE READ-ME * - * FILE NAME: defines.h * - * AUTHORS: See Author List * - * GRANTS: See Grants List * - * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * - * LICENSE: Please see License Agreement * - * DOWNLOAD: Free at www.rpi.edu/~anderk5 * - * ADMINISTRATOR: Prof. Kurt Anderson * - * Computational Dynamics Lab * - * Rensselaer Polytechnic Institute * - * 110 8th St. Troy NY 12180 * - * CONTACT: anderk5@rpi.edu * - *_________________________________________________________________________*/ - -#ifndef _DEFINES_H_ -#define _DEFINES_H_ - -enum SolverType { - ONSOLVER = 0, - PARTICLESOLVER = 1 -}; - -#endif - +/* + *_________________________________________________________________________* + * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * + * DESCRIPTION: SEE READ-ME * + * FILE NAME: defines.h * + * AUTHORS: See Author List * + * GRANTS: See Grants List * + * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * + * LICENSE: Please see License Agreement * + * DOWNLOAD: Free at www.rpi.edu/~anderk5 * + * ADMINISTRATOR: Prof. Kurt Anderson * + * Computational Dynamics Lab * + * Rensselaer Polytechnic Institute * + * 110 8th St. Troy NY 12180 * + * CONTACT: anderk5@rpi.edu * + *_________________________________________________________________________*/ + +#ifndef _DEFINES_H_ +#define _DEFINES_H_ + +enum SolverType { + ONSOLVER = 0, + PARTICLESOLVER = 1 +}; + +#endif + diff --git a/lib/poems/fastmatrixops.cpp b/lib/poems/fastmatrixops.cpp index b887c91930..f65536ea68 100644 --- a/lib/poems/fastmatrixops.cpp +++ b/lib/poems/fastmatrixops.cpp @@ -1,1033 +1,1033 @@ -/* - *_________________________________________________________________________* - * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * - * DESCRIPTION: SEE READ-ME * - * FILE NAME: fastmatrixops.cpp * - * AUTHORS: See Author List * - * GRANTS: See Grants List * - * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * - * LICENSE: Please see License Agreement * - * DOWNLOAD: Free at www.rpi.edu/~anderk5 * - * ADMINISTRATOR: Prof. Kurt Anderson * - * Computational Dynamics Lab * - * Rensselaer Polytechnic Institute * - * 110 8th St. Troy NY 12180 * - * CONTACT: anderk5@rpi.edu * - *_________________________________________________________________________*/ - -#include -#include "fastmatrixops.h" -#include - -using namespace std; - -// -// Cross Product (friend of Vect3) -// - -void FastCross(Vect3& a, Vect3& b, Vect3& c){ - c.elements[0] = a.elements[1]*b.elements[2] - a.elements[2]*b.elements[1]; - c.elements[1] = a.elements[2]*b.elements[0] - a.elements[0]*b.elements[2]; - c.elements[2] = a.elements[0]*b.elements[1] - a.elements[1]*b.elements[0]; -} - -// -// Simple Rotation (friend of Vect3 and Mat3x3) -// - -void FastSimpleRotation(Vect3& v, double q, Mat3x3& C){ - // intermediate quantities - double cq = cos(q); - double sq = sin(q); - double one_m_cq = 1-cq; - double l12 = v.elements[0]*v.elements[1]*one_m_cq; - double l13 = v.elements[0]*v.elements[2]*one_m_cq; - double l23 = v.elements[1]*v.elements[2]*one_m_cq; - - // the transformation - C.elements[0][0] = v.elements[0]*v.elements[0]*one_m_cq+cq; - C.elements[0][1] = l12-v.elements[2]*sq; - C.elements[0][2] = l13+v.elements[1]*sq; - C.elements[1][0] = l12+v.elements[2]*sq; - C.elements[1][1] = v.elements[1]*v.elements[1]*one_m_cq+cq; - C.elements[1][2] = l23-v.elements[0]*sq; - C.elements[2][0] = l13-v.elements[1]*sq; - C.elements[2][1] = l23+v.elements[0]*sq; - C.elements[2][2] = v.elements[2]*v.elements[2]*one_m_cq+cq; -} - -// -// Quaternion Functions -// - -void FastQuaternions(ColMatrix& q, Mat3x3& C){ - double* e = q.elements; - - // normalize the quaternions - double length = e[0]*e[0] + e[1]*e[1] + e[2]*e[2] + e[3]*e[3]; - length = sqrt(length); - e[0] = e[0]/length; - e[1] = e[1]/length; - e[2] = e[2]/length; - e[3] = e[3]/length; - - // compute the transformation - C.elements[0][0] = e[0]*e[0] + e[1]*e[1] - e[2]*e[2] - e[3]*e[3]; - C.elements[1][1] = e[0]*e[0] - e[1]*e[1] + e[2]*e[2] - e[3]*e[3]; - C.elements[2][2] = e[0]*e[0] - e[1]*e[1] - e[2]*e[2] + e[3]*e[3]; - - C.elements[0][1] = 2 * (e[1]*e[2] - e[0]*e[3]); - C.elements[0][2] = 2 * (e[1]*e[3] + e[0]*e[2]); - C.elements[1][2] = 2 * (e[2]*e[3] - e[0]*e[1]); - - C.elements[1][0] = 2 * (e[1]*e[2] + e[0]*e[3]); - C.elements[2][0] = 2 * (e[1]*e[3] - e[0]*e[2]); - C.elements[2][1] = 2 * (e[2]*e[3] + e[0]*e[1]); -} - -void FastQuaternionDerivatives(ColMatrix& q, ColMatrix& omega, ColMatrix& qdot){ - double* w = omega.elements; - double* e = q.elements; - - qdot.elements[0] = 0.5 * (-w[0]*e[1] - w[1]*e[2] - w[2]*e[3]); - qdot.elements[1] = 0.5 * ( w[0]*e[0] + w[2]*e[2] - w[1]*e[3]); - qdot.elements[2] = 0.5 * ( w[1]*e[0] - w[2]*e[1] + w[0]*e[3]); - qdot.elements[3] = 0.5 * ( w[2]*e[0] + w[1]*e[1] - w[0]*e[2]); -} - -void FastInvQuaternions(Mat3x3& C, ColMatrix& q){ -} - -// -// Inverse -// - -// friend of Matrix -//void FastInverse(Matrix& A, Matrix& C){ // C = A^(-1) -// C.rows[0][0] = 1/A.rows[0][0]; -//} - -// -// LDL^T Decomposition (from Golub and Van Loan) -// - -// friend of Matrix -void FastLDLT(Matrix& A, Matrix& C){ // C is the LD of the LDL^T decomposition of A (SPD) - double Lv; - int n = A.numrows; - - for(int j=0;j-1;i--){ - C.rows[i][k] = C.rows[i][k] / LD.rows[i][i]; - temp = 0.0; - for(int j=n-1;j>i;j--){ - temp += C.rows[j][k] * LD.rows[j][i]; - } - C.rows[i][k] = C.rows[i][k] - temp; - } - } -} - -// friend of Matrix -void FastLDLTSubsLH(Matrix& B, Matrix& LD, Matrix& C){ - int n = B.numcols; - int c = B.numrows; - double temp; - - for(int k=0;k-1;i--){ - C.rows[k][i] = C.rows[k][i] / LD.rows[i][i]; - temp = 0.0; - for(int j=n-1;j>i;j--){ - temp += C.rows[k][j] * LD.rows[j][i]; - } - C.rows[k][i] = C.rows[k][i] - temp; - } - } -} - -// friend of Mat6x6 -void FastLDLTSubs(Mat6x6& LD, Mat6x6& B, Mat6x6& C){ - double temp; - - for(int k=0;k<6;k++){ - for(int i=0;i<6;i++){ - temp = 0.0; - for(int j=0;j-1;i--){ - C.elements[i][k] = C.elements[i][k] / LD.elements[i][i]; - temp = 0.0; - for(int j=5;j>i;j--){ - temp += C.elements[j][k] * LD.elements[j][i]; - } - C.elements[i][k] = C.elements[i][k] - temp; - } - } -} - -// friend of Mat6x6 & Vect6 -void FastLDLTSubs(Mat6x6& LD, Vect6& B, Vect6& C){ - double temp; - - for(int i=0;i<6;i++){ - temp = 0.0; - for(int j=0;j-1;i--){ - C.elements[i] = C.elements[i] / LD.elements[i][i]; - temp = 0.0; - for(int j=5;j>i;j--){ - temp += C.elements[j] * LD.elements[j][i]; - } - C.elements[i] = C.elements[i] - temp; - } -} - -// friend of Matrix -void FastLU(Matrix& A, Matrix& LU, int *indx){ // LU is the LU decomposition of A - int i,imax=0,j,k; - int n = A.numrows; - double big, dum, sum, temp; - double vv[10000]; - - LU = A; - for (i=0;i big) big=temp; - } - vv[i]=1.0/big; - } - for (j=0;j= big) { - big=dum; - imax=i; - } - } - if (j != imax) { - for (k=0;k big) big=temp; - } - vv[i]=1.0/big; - } - for (j=0;j<3;j++){ - for (i=0;i= big) { - big=dum; - imax=i; - } - } - if (j != imax) { - for (k=0;k<3;k++) { - dum=LU.BasicGet(imax,k); - LU.BasicSet(imax,k,LU.BasicGet(j,k)); - LU.BasicSet(j,k,dum); - } - vv[imax]=vv[j]; - } - indx[j]=imax; - if (j != 3-1) { - dum=1.0/(LU.BasicGet(j,j)); - for (i=j+1;i<3;i++) LU.BasicSet(i,j,LU.BasicGet(i,j)*dum); - } - } -} - -// friend of Mat4x4 -void FastLU(Mat4x4& A, Mat4x4& LU, int *indx){ // LU is the LU decomposition of A - int i,imax=0,j,k; - double big, dum, sum, temp; - double vv[10000]; - - LU = A; - for (i=0;i<4;i++){ - big=0.0; - for (j=0;j<4;j++){ - temp=fabs(LU.BasicGet(i,j)); - if (temp > big) big=temp; - } - vv[i]=1.0/big; - } - for (j=0;j<4;j++){ - for (i=0;i= big) { - big=dum; - imax=i; - } - } - if (j != imax) { - for (k=0;k<4;k++) { - dum=LU.BasicGet(imax,k); - LU.BasicSet(imax,k,LU.BasicGet(j,k)); - LU.BasicSet(j,k,dum); - } - vv[imax]=vv[j]; - } - indx[j]=imax; - if (j != 4-1) { - dum=1.0/(LU.BasicGet(j,j)); - for (i=j+1;i<4;i++) LU.BasicSet(i,j,LU.BasicGet(i,j)*dum); - } - } -} - -// friend of Mat6x6 -void FastLU(Mat6x6& A, Mat6x6& LU, int *indx){ // LU is the LU decomposition of A - int i,imax=0,j,k; - double big, dum, sum, temp; - double vv[10000]; - - LU = A; - for (i=0;i<6;i++){ - big=0.0; - for (j=0;j<6;j++){ - temp=fabs(LU.BasicGet(i,j)); - if (temp > big) big=temp; - } - vv[i]=1.0/big; - } - for (j=0;j<6;j++){ - for (i=0;i= big) { - big=dum; - imax=i; - } - } - if (j != imax) { - for (k=0;k<6;k++) { - dum=LU.BasicGet(imax,k); - LU.BasicSet(imax,k,LU.BasicGet(j,k)); - LU.BasicSet(j,k,dum); - } - vv[imax]=vv[j]; - } - indx[j]=imax; - if (j != 6-1) { - dum=1.0/(LU.BasicGet(j,j)); - for (i=j+1;i<6;i++) LU.BasicSet(i,j,LU.BasicGet(i,j)*dum); - } - } -} - -// friend of Matrix -void FastLUSubs(Matrix& LU, Matrix& B, Matrix& C, int *indx){ // Appropriate Forward and Back Substitution - int i,ip,j,k; - int n = B.numrows; - int c = B.numcols; - double temp; - - C = B; - for (k=0;k=0;i--){ - temp=C.rows[i][k]; - for (j=i+1;j=0;i--){ - temp=C.rows[i][k]; - for (j=i+1;j=0;i--){ - temp=C.rows[i][k]; - for (j=i+1;j=0;i--){ - temp=C.rows[i][k]; - for (j=i+1;j=0;i--){ - temp=C_temp.rows[k][i]; - for (j=i+1;j +#include "fastmatrixops.h" +#include + +using namespace std; + +// +// Cross Product (friend of Vect3) +// + +void FastCross(Vect3& a, Vect3& b, Vect3& c){ + c.elements[0] = a.elements[1]*b.elements[2] - a.elements[2]*b.elements[1]; + c.elements[1] = a.elements[2]*b.elements[0] - a.elements[0]*b.elements[2]; + c.elements[2] = a.elements[0]*b.elements[1] - a.elements[1]*b.elements[0]; +} + +// +// Simple Rotation (friend of Vect3 and Mat3x3) +// + +void FastSimpleRotation(Vect3& v, double q, Mat3x3& C){ + // intermediate quantities + double cq = cos(q); + double sq = sin(q); + double one_m_cq = 1-cq; + double l12 = v.elements[0]*v.elements[1]*one_m_cq; + double l13 = v.elements[0]*v.elements[2]*one_m_cq; + double l23 = v.elements[1]*v.elements[2]*one_m_cq; + + // the transformation + C.elements[0][0] = v.elements[0]*v.elements[0]*one_m_cq+cq; + C.elements[0][1] = l12-v.elements[2]*sq; + C.elements[0][2] = l13+v.elements[1]*sq; + C.elements[1][0] = l12+v.elements[2]*sq; + C.elements[1][1] = v.elements[1]*v.elements[1]*one_m_cq+cq; + C.elements[1][2] = l23-v.elements[0]*sq; + C.elements[2][0] = l13-v.elements[1]*sq; + C.elements[2][1] = l23+v.elements[0]*sq; + C.elements[2][2] = v.elements[2]*v.elements[2]*one_m_cq+cq; +} + +// +// Quaternion Functions +// + +void FastQuaternions(ColMatrix& q, Mat3x3& C){ + double* e = q.elements; + + // normalize the quaternions + double length = e[0]*e[0] + e[1]*e[1] + e[2]*e[2] + e[3]*e[3]; + length = sqrt(length); + e[0] = e[0]/length; + e[1] = e[1]/length; + e[2] = e[2]/length; + e[3] = e[3]/length; + + // compute the transformation + C.elements[0][0] = e[0]*e[0] + e[1]*e[1] - e[2]*e[2] - e[3]*e[3]; + C.elements[1][1] = e[0]*e[0] - e[1]*e[1] + e[2]*e[2] - e[3]*e[3]; + C.elements[2][2] = e[0]*e[0] - e[1]*e[1] - e[2]*e[2] + e[3]*e[3]; + + C.elements[0][1] = 2 * (e[1]*e[2] - e[0]*e[3]); + C.elements[0][2] = 2 * (e[1]*e[3] + e[0]*e[2]); + C.elements[1][2] = 2 * (e[2]*e[3] - e[0]*e[1]); + + C.elements[1][0] = 2 * (e[1]*e[2] + e[0]*e[3]); + C.elements[2][0] = 2 * (e[1]*e[3] - e[0]*e[2]); + C.elements[2][1] = 2 * (e[2]*e[3] + e[0]*e[1]); +} + +void FastQuaternionDerivatives(ColMatrix& q, ColMatrix& omega, ColMatrix& qdot){ + double* w = omega.elements; + double* e = q.elements; + + qdot.elements[0] = 0.5 * (-w[0]*e[1] - w[1]*e[2] - w[2]*e[3]); + qdot.elements[1] = 0.5 * ( w[0]*e[0] + w[2]*e[2] - w[1]*e[3]); + qdot.elements[2] = 0.5 * ( w[1]*e[0] - w[2]*e[1] + w[0]*e[3]); + qdot.elements[3] = 0.5 * ( w[2]*e[0] + w[1]*e[1] - w[0]*e[2]); +} + +void FastInvQuaternions(Mat3x3& C, ColMatrix& q){ +} + +// +// Inverse +// + +// friend of Matrix +//void FastInverse(Matrix& A, Matrix& C){ // C = A^(-1) +// C.rows[0][0] = 1/A.rows[0][0]; +//} + +// +// LDL^T Decomposition (from Golub and Van Loan) +// + +// friend of Matrix +void FastLDLT(Matrix& A, Matrix& C){ // C is the LD of the LDL^T decomposition of A (SPD) + double Lv; + int n = A.numrows; + + for(int j=0;j-1;i--){ + C.rows[i][k] = C.rows[i][k] / LD.rows[i][i]; + temp = 0.0; + for(int j=n-1;j>i;j--){ + temp += C.rows[j][k] * LD.rows[j][i]; + } + C.rows[i][k] = C.rows[i][k] - temp; + } + } +} + +// friend of Matrix +void FastLDLTSubsLH(Matrix& B, Matrix& LD, Matrix& C){ + int n = B.numcols; + int c = B.numrows; + double temp; + + for(int k=0;k-1;i--){ + C.rows[k][i] = C.rows[k][i] / LD.rows[i][i]; + temp = 0.0; + for(int j=n-1;j>i;j--){ + temp += C.rows[k][j] * LD.rows[j][i]; + } + C.rows[k][i] = C.rows[k][i] - temp; + } + } +} + +// friend of Mat6x6 +void FastLDLTSubs(Mat6x6& LD, Mat6x6& B, Mat6x6& C){ + double temp; + + for(int k=0;k<6;k++){ + for(int i=0;i<6;i++){ + temp = 0.0; + for(int j=0;j-1;i--){ + C.elements[i][k] = C.elements[i][k] / LD.elements[i][i]; + temp = 0.0; + for(int j=5;j>i;j--){ + temp += C.elements[j][k] * LD.elements[j][i]; + } + C.elements[i][k] = C.elements[i][k] - temp; + } + } +} + +// friend of Mat6x6 & Vect6 +void FastLDLTSubs(Mat6x6& LD, Vect6& B, Vect6& C){ + double temp; + + for(int i=0;i<6;i++){ + temp = 0.0; + for(int j=0;j-1;i--){ + C.elements[i] = C.elements[i] / LD.elements[i][i]; + temp = 0.0; + for(int j=5;j>i;j--){ + temp += C.elements[j] * LD.elements[j][i]; + } + C.elements[i] = C.elements[i] - temp; + } +} + +// friend of Matrix +void FastLU(Matrix& A, Matrix& LU, int *indx){ // LU is the LU decomposition of A + int i,imax=0,j,k; + int n = A.numrows; + double big, dum, sum, temp; + double vv[10000]; + + LU = A; + for (i=0;i big) big=temp; + } + vv[i]=1.0/big; + } + for (j=0;j= big) { + big=dum; + imax=i; + } + } + if (j != imax) { + for (k=0;k big) big=temp; + } + vv[i]=1.0/big; + } + for (j=0;j<3;j++){ + for (i=0;i= big) { + big=dum; + imax=i; + } + } + if (j != imax) { + for (k=0;k<3;k++) { + dum=LU.BasicGet(imax,k); + LU.BasicSet(imax,k,LU.BasicGet(j,k)); + LU.BasicSet(j,k,dum); + } + vv[imax]=vv[j]; + } + indx[j]=imax; + if (j != 3-1) { + dum=1.0/(LU.BasicGet(j,j)); + for (i=j+1;i<3;i++) LU.BasicSet(i,j,LU.BasicGet(i,j)*dum); + } + } +} + +// friend of Mat4x4 +void FastLU(Mat4x4& A, Mat4x4& LU, int *indx){ // LU is the LU decomposition of A + int i,imax=0,j,k; + double big, dum, sum, temp; + double vv[10000]; + + LU = A; + for (i=0;i<4;i++){ + big=0.0; + for (j=0;j<4;j++){ + temp=fabs(LU.BasicGet(i,j)); + if (temp > big) big=temp; + } + vv[i]=1.0/big; + } + for (j=0;j<4;j++){ + for (i=0;i= big) { + big=dum; + imax=i; + } + } + if (j != imax) { + for (k=0;k<4;k++) { + dum=LU.BasicGet(imax,k); + LU.BasicSet(imax,k,LU.BasicGet(j,k)); + LU.BasicSet(j,k,dum); + } + vv[imax]=vv[j]; + } + indx[j]=imax; + if (j != 4-1) { + dum=1.0/(LU.BasicGet(j,j)); + for (i=j+1;i<4;i++) LU.BasicSet(i,j,LU.BasicGet(i,j)*dum); + } + } +} + +// friend of Mat6x6 +void FastLU(Mat6x6& A, Mat6x6& LU, int *indx){ // LU is the LU decomposition of A + int i,imax=0,j,k; + double big, dum, sum, temp; + double vv[10000]; + + LU = A; + for (i=0;i<6;i++){ + big=0.0; + for (j=0;j<6;j++){ + temp=fabs(LU.BasicGet(i,j)); + if (temp > big) big=temp; + } + vv[i]=1.0/big; + } + for (j=0;j<6;j++){ + for (i=0;i= big) { + big=dum; + imax=i; + } + } + if (j != imax) { + for (k=0;k<6;k++) { + dum=LU.BasicGet(imax,k); + LU.BasicSet(imax,k,LU.BasicGet(j,k)); + LU.BasicSet(j,k,dum); + } + vv[imax]=vv[j]; + } + indx[j]=imax; + if (j != 6-1) { + dum=1.0/(LU.BasicGet(j,j)); + for (i=j+1;i<6;i++) LU.BasicSet(i,j,LU.BasicGet(i,j)*dum); + } + } +} + +// friend of Matrix +void FastLUSubs(Matrix& LU, Matrix& B, Matrix& C, int *indx){ // Appropriate Forward and Back Substitution + int i,ip,j,k; + int n = B.numrows; + int c = B.numcols; + double temp; + + C = B; + for (k=0;k=0;i--){ + temp=C.rows[i][k]; + for (j=i+1;j=0;i--){ + temp=C.rows[i][k]; + for (j=i+1;j=0;i--){ + temp=C.rows[i][k]; + for (j=i+1;j=0;i--){ + temp=C.rows[i][k]; + for (j=i+1;j=0;i--){ + temp=C_temp.rows[k][i]; + for (j=i+1;j> elements[i][j]; - return c; -} - -ostream& Mat4x4::WriteData(ostream& c) const{ //output - for(int i=0;i<4;i++) - for(int j=0;j<4;j++) - c << elements[i][j] << ' '; - return c; -} - -void Mat4x4::AssignVM(const VirtualMatrix& A){ - // error check - if( (A.GetNumRows() != 4) || (A.GetNumCols() != 4) ){ - cerr << "illegal matrix size" << endl; - exit(0); - } - - for(int i=0;i> elements[i][j]; + return c; +} + +ostream& Mat4x4::WriteData(ostream& c) const{ //output + for(int i=0;i<4;i++) + for(int j=0;j<4;j++) + c << elements[i][j] << ' '; + return c; +} + +void Mat4x4::AssignVM(const VirtualMatrix& A){ + // error check + if( (A.GetNumRows() != 4) || (A.GetNumCols() != 4) ){ + cerr << "illegal matrix size" << endl; + exit(0); + } + + for(int i=0;i -#include "norm.h" - -double Magnitude(ColMatrix& A){ - double G; - G = 0; - for (int i=1;i<=A.GetNumRows();i++) G += A.Get(i)*A.Get(i); - G = sqrt(G); - return G; -} - -double Magnitude(RowMatrix& A){ - double G; - G = 0; - for (int i=1;i<=A.GetNumCols();i++) G += A.Get(i)*A.Get(i); - G = sqrt(G); - return G; -} - -double Magnitude(Vect3& A){ - double G; - G = 0; - for (int i=1;i<=3;i++) G += A.Get(i)*A.Get(i); - G = sqrt(G); - return G; -} - -double Magnitude(Vect4& A){ - double G; - G = 0; - for (int i=1;i<=4;i++) G += A.Get(i)*A.Get(i); - G = sqrt(G); - return G; -} - -double Magnitude(Vect6& A){ - double G; - G = 0; - for (int i=1;i<=6;i++) G += A.Get(i)*A.Get(i); - G = sqrt(G); - return G; -} +/* + *_________________________________________________________________________* + * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * + * DESCRIPTION: SEE READ-ME * + * FILE NAME: nrom.cpp * + * AUTHORS: See Author List * + * GRANTS: See Grants List * + * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * + * LICENSE: Please see License Agreement * + * DOWNLOAD: Free at www.rpi.edu/~anderk5 * + * ADMINISTRATOR: Prof. Kurt Anderson * + * Computational Dynamics Lab * + * Rensselaer Polytechnic Institute * + * 110 8th St. Troy NY 12180 * + * CONTACT: anderk5@rpi.edu * + *_________________________________________________________________________*/ + +#include +#include "norm.h" + +double Magnitude(ColMatrix& A){ + double G; + G = 0; + for (int i=1;i<=A.GetNumRows();i++) G += A.Get(i)*A.Get(i); + G = sqrt(G); + return G; +} + +double Magnitude(RowMatrix& A){ + double G; + G = 0; + for (int i=1;i<=A.GetNumCols();i++) G += A.Get(i)*A.Get(i); + G = sqrt(G); + return G; +} + +double Magnitude(Vect3& A){ + double G; + G = 0; + for (int i=1;i<=3;i++) G += A.Get(i)*A.Get(i); + G = sqrt(G); + return G; +} + +double Magnitude(Vect4& A){ + double G; + G = 0; + for (int i=1;i<=4;i++) G += A.Get(i)*A.Get(i); + G = sqrt(G); + return G; +} + +double Magnitude(Vect6& A){ + double G; + G = 0; + for (int i=1;i<=6;i++) G += A.Get(i)*A.Get(i); + G = sqrt(G); + return G; +} diff --git a/lib/poems/norm.h b/lib/poems/norm.h index 974c1768ac..963a2ec5b2 100644 --- a/lib/poems/norm.h +++ b/lib/poems/norm.h @@ -1,30 +1,30 @@ -/* - *_________________________________________________________________________* - * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * - * DESCRIPTION: SEE READ-ME * - * FILE NAME: norm.h * - * AUTHORS: See Author List * - * GRANTS: See Grants List * - * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * - * LICENSE: Please see License Agreement * - * DOWNLOAD: Free at www.rpi.edu/~anderk5 * - * ADMINISTRATOR: Prof. Kurt Anderson * - * Computational Dynamics Lab * - * Rensselaer Polytechnic Institute * - * 110 8th St. Troy NY 12180 * - * CONTACT: anderk5@rpi.edu * - *_________________________________________________________________________*/ - -#ifndef NORM_H -#define NORM_H - -#include "matrices.h" - - -double Magnitude(ColMatrix& A); -double Magnitude(RowMatrix& A); -double Magnitude(Vect3& A); -double Magnitude(Vect4& A); -double Magnitude(Vect6& A); - -#endif +/* + *_________________________________________________________________________* + * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * + * DESCRIPTION: SEE READ-ME * + * FILE NAME: norm.h * + * AUTHORS: See Author List * + * GRANTS: See Grants List * + * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * + * LICENSE: Please see License Agreement * + * DOWNLOAD: Free at www.rpi.edu/~anderk5 * + * ADMINISTRATOR: Prof. Kurt Anderson * + * Computational Dynamics Lab * + * Rensselaer Polytechnic Institute * + * 110 8th St. Troy NY 12180 * + * CONTACT: anderk5@rpi.edu * + *_________________________________________________________________________*/ + +#ifndef NORM_H +#define NORM_H + +#include "matrices.h" + + +double Magnitude(ColMatrix& A); +double Magnitude(RowMatrix& A); +double Magnitude(Vect3& A); +double Magnitude(Vect4& A); +double Magnitude(Vect6& A); + +#endif diff --git a/lib/poems/poemsnodelib.h b/lib/poems/poemsnodelib.h index e1bc4d624f..06cf4530d2 100644 --- a/lib/poems/poemsnodelib.h +++ b/lib/poems/poemsnodelib.h @@ -1,162 +1,162 @@ -/* - *_________________________________________________________________________* - * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * - * DESCRIPTION: SEE READ-ME * - * FILE NAME: poemsnodelib.h * - * AUTHORS: See Author List * - * GRANTS: See Grants List * - * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * - * LICENSE: Please see License Agreement * - * DOWNLOAD: Free at www.rpi.edu/~anderk5 * - * ADMINISTRATOR: Prof. Kurt Anderson * - * Computational Dynamics Lab * - * Rensselaer Polytechnic Institute * - * 110 8th St. Troy NY 12180 * - * CONTACT: anderk5@rpi.edu * - *_________________________________________________________________________*/ - -#ifndef NODELIB_H -#define NODELIB_H - -#include - -using namespace std; - - -TreeNode *GetTreeNode(int item,TreeNode *lptr = NULL,TreeNode *rptr =NULL); - -void FreeTreeNode(TreeNode *p); - -void Postorder(TreeNode *t, void visit(TreeNode* &t)); - -void Preorder (TreeNode *t, void visit(TreeNode* &t)); - -void CountLeaf (TreeNode *t, int& count); - -int Depth (TreeNode *t); - -void IndentBlanks(int num); - -void PrintTree (TreeNode *t, int level); - - -// ---------------- Global functions-----------------// - -// postorder recursive scan of the nodes in a tree -void Postorder (TreeNode *t, void visit(TreeNode* &t)) -{ - // the recursive scan terminates on a empty subtree - if (t != NULL) - { - Postorder(t->Left(), visit); // descend left - Postorder(t->Right(), visit); // descend right - visit(t); // visit the node - } -} - - -// preorder recursive scan of the nodes in a tree -void Preorder (TreeNode *t, void visit(TreeNode* &t)) -{ - // the recursive scan terminates on a empty subtree - if (t != NULL) - { - visit(t); // visit the node - Preorder(t->Left(), visit); // descend left - Preorder(t->Right(), visit); // descend right - } -} - - -//create TreeNode object with pointer fields lptr and rptr -// The pointers have default value NULL -TreeNode *GetTreeNode(int item,TreeNode *lptr,TreeNode *rptr) -{ - TreeNode *p; - - // call new to allocate the new node - // pass parameters lptr and rptr to the function - p = new TreeNode(item, lptr, rptr); - - // if insufficient memory, terminatewith an error message - if (p == NULL) - { - cerr << "Memory allocation failure!\n"; - exit(1); - } - - // return the pointer to the system generated memory - return p; -} - - -// deallocate dynamic memory associated with the node - -void FreeTreeNode(TreeNode *p) -{ - delete p; -} - - -// the function uses the postorder scan. a visit -// tests whether the node is a leaf node -void CountLeaf (TreeNode *t, int& count) -{ - //use postorder descent - if(t !=NULL) - { - CountLeaf(t->Left(), count); // descend left - CountLeaf(t->Right(), count); // descend right - - // check if node t is a leaf node (no descendants) - // if so, increment the variable count - if (t->Left() == NULL && t->Right() == NULL) - count++; - } -} - - -// the function uses the postorder scan. it computes the -// depth of the left and right subtrees of a node and -// returns the depth as 1 + max(depthLeft,depthRight). -// the depth of an empty tree is -1 -int Depth (TreeNode *t) -{ - int depthLeft, depthRight, depthval; - - if (t == NULL) - depthval = -1; - else - { - depthLeft = Depth(t->Left()); - depthRight = Depth(t->Right()); - depthval = 1+(depthLeft > depthRight?depthLeft:depthRight); - } - return depthval; -} - -void IndentBlanks(int num) -{ -// const int indentblock = 6; - - for(int i = 0; i < num; i++) - cout << " "; -} - -void PrintTree (TreeNode *t, int level) -{ - //print tree with root t, as long as t!=NULL - if (t != NULL) - { - int indentUnit = 5; - // print right branch of tree t - PrintTree(t->Right(),level + 1); - // indent to current level; output node data - IndentBlanks(indentUnit*level); - cout << t->GetData() << endl; - // print left branch of tree t - PrintTree(t->Left(),level + 1); - } -} -#endif - +/* + *_________________________________________________________________________* + * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * + * DESCRIPTION: SEE READ-ME * + * FILE NAME: poemsnodelib.h * + * AUTHORS: See Author List * + * GRANTS: See Grants List * + * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * + * LICENSE: Please see License Agreement * + * DOWNLOAD: Free at www.rpi.edu/~anderk5 * + * ADMINISTRATOR: Prof. Kurt Anderson * + * Computational Dynamics Lab * + * Rensselaer Polytechnic Institute * + * 110 8th St. Troy NY 12180 * + * CONTACT: anderk5@rpi.edu * + *_________________________________________________________________________*/ + +#ifndef NODELIB_H +#define NODELIB_H + +#include + +using namespace std; + + +TreeNode *GetTreeNode(int item,TreeNode *lptr = NULL,TreeNode *rptr =NULL); + +void FreeTreeNode(TreeNode *p); + +void Postorder(TreeNode *t, void visit(TreeNode* &t)); + +void Preorder (TreeNode *t, void visit(TreeNode* &t)); + +void CountLeaf (TreeNode *t, int& count); + +int Depth (TreeNode *t); + +void IndentBlanks(int num); + +void PrintTree (TreeNode *t, int level); + + +// ---------------- Global functions-----------------// + +// postorder recursive scan of the nodes in a tree +void Postorder (TreeNode *t, void visit(TreeNode* &t)) +{ + // the recursive scan terminates on a empty subtree + if (t != NULL) + { + Postorder(t->Left(), visit); // descend left + Postorder(t->Right(), visit); // descend right + visit(t); // visit the node + } +} + + +// preorder recursive scan of the nodes in a tree +void Preorder (TreeNode *t, void visit(TreeNode* &t)) +{ + // the recursive scan terminates on a empty subtree + if (t != NULL) + { + visit(t); // visit the node + Preorder(t->Left(), visit); // descend left + Preorder(t->Right(), visit); // descend right + } +} + + +//create TreeNode object with pointer fields lptr and rptr +// The pointers have default value NULL +TreeNode *GetTreeNode(int item,TreeNode *lptr,TreeNode *rptr) +{ + TreeNode *p; + + // call new to allocate the new node + // pass parameters lptr and rptr to the function + p = new TreeNode(item, lptr, rptr); + + // if insufficient memory, terminatewith an error message + if (p == NULL) + { + cerr << "Memory allocation failure!\n"; + exit(1); + } + + // return the pointer to the system generated memory + return p; +} + + +// deallocate dynamic memory associated with the node + +void FreeTreeNode(TreeNode *p) +{ + delete p; +} + + +// the function uses the postorder scan. a visit +// tests whether the node is a leaf node +void CountLeaf (TreeNode *t, int& count) +{ + //use postorder descent + if(t !=NULL) + { + CountLeaf(t->Left(), count); // descend left + CountLeaf(t->Right(), count); // descend right + + // check if node t is a leaf node (no descendants) + // if so, increment the variable count + if (t->Left() == NULL && t->Right() == NULL) + count++; + } +} + + +// the function uses the postorder scan. it computes the +// depth of the left and right subtrees of a node and +// returns the depth as 1 + max(depthLeft,depthRight). +// the depth of an empty tree is -1 +int Depth (TreeNode *t) +{ + int depthLeft, depthRight, depthval; + + if (t == NULL) + depthval = -1; + else + { + depthLeft = Depth(t->Left()); + depthRight = Depth(t->Right()); + depthval = 1+(depthLeft > depthRight?depthLeft:depthRight); + } + return depthval; +} + +void IndentBlanks(int num) +{ +// const int indentblock = 6; + + for(int i = 0; i < num; i++) + cout << " "; +} + +void PrintTree (TreeNode *t, int level) +{ + //print tree with root t, as long as t!=NULL + if (t != NULL) + { + int indentUnit = 5; + // print right branch of tree t + PrintTree(t->Right(),level + 1); + // indent to current level; output node data + IndentBlanks(indentUnit*level); + cout << t->GetData() << endl; + // print left branch of tree t + PrintTree(t->Left(),level + 1); + } +} +#endif + diff --git a/lib/poems/vect4.cpp b/lib/poems/vect4.cpp index 4824f28837..cbca0a96af 100644 --- a/lib/poems/vect4.cpp +++ b/lib/poems/vect4.cpp @@ -1,135 +1,135 @@ -/* - *_________________________________________________________________________* - * POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE * - * DESCRIPTION: SEE READ-ME * - * FILE NAME: vect4.cpp * - * AUTHORS: See Author List * - * GRANTS: See Grants List * - * COPYRIGHT: (C) 2005 by Authors as listed in Author's List * - * LICENSE: Please see License Agreement * - * DOWNLOAD: Free at www.rpi.edu/~anderk5 * - * ADMINISTRATOR: Prof. Kurt Anderson * - * Computational Dynamics Lab * - * Rensselaer Polytechnic Institute * - * 110 8th St. Troy NY 12180 * - * CONTACT: anderk5@rpi.edu * - *_________________________________________________________________________*/ - -#include "vect4.h" - -using namespace std; - -Vect4::Vect4(){ - numrows = 4; numcols = 1; -} -Vect4::~Vect4(){ -} - -Vect4::Vect4(const Vect4& A){ // copy constructor - numrows = 4; numcols = 1; - - elements[0] = A.elements[0]; - elements[1] = A.elements[1]; - elements[2] = A.elements[2]; - elements[3] = A.elements[3]; -} - -Vect4::Vect4(const VirtualMatrix& A){ // copy constructor - numrows = 4; numcols = 1; - - // error check - if( (A.GetNumRows() != 4) || (A.GetNumCols() != 1) ){ - cerr << "illegal matrix size" << endl; - exit(0); - } - - for(int i=0;i<4;i++) - elements[i] = A.BasicGet(i,0); -} - -double& Vect4::operator_1int (int i){ // array access - return elements[i-1]; -} - -double Vect4::Get_1int(int i) const{ - return elements[i-1]; -} - -void Vect4::Set_1int(int i, double value){ - elements[i-1] = value; -} - -double Vect4::BasicGet_1int(int i) const{ - return elements[i]; -} - -void Vect4::BasicSet_1int(int i, double value){ - elements[i] = value; -} - -void Vect4::BasicIncrement_1int(int i, double value){ - elements[i] += value; -} - -void Vect4::Const(double value){ - elements[0] = value; - elements[1] = value; - elements[2] = value; - elements[3] = value; -} - -MatrixType Vect4::GetType() const{ - return VECT4; -} - -istream& Vect4::ReadData(istream& c){ //input - for(int i=0;i<4;i++) - c >> elements[i]; - return c; -} - -ostream& Vect4::WriteData(ostream& c) const{ //output - for(int i=0;i<4;i++) - c << elements[i] << ' '; - return c; -} - -void Vect4::AssignVM(const VirtualMatrix& A){ - // error check - if( (A.GetNumRows() != 4) || (A.GetNumCols() != 1) ){ - cerr << "illegal matrix size" << endl; - exit(0); - } - - for(int i=0;i> elements[i]; + return c; +} + +ostream& Vect4::WriteData(ostream& c) const{ //output + for(int i=0;i<4;i++) + c << elements[i] << ' '; + return c; +} + +void Vect4::AssignVM(const VirtualMatrix& A){ + // error check + if( (A.GetNumRows() != 4) || (A.GetNumCols() != 1) ){ + cerr << "illegal matrix size" << endl; + exit(0); + } + + for(int i=0;i -commented the original code in MPI_Wtime(), just make it return 0; - -6. In system.cpp, two changes due to difference in the input argument -list - -Line 83: int iarg = 2; -Line 172: inflag=1; //add this line - -The number of input arguments (nargs) is different in g++ and VC when -you give arguments to run a program. This might be related to MPI as -well. The difference is one. Once the above changes are made, the -program is taking the correct argument. - -However, it has been observed in the latest versions of sytem.cpp that -no modification needs be made to the file as distributed from the -LAMMPS website to work. The user however, instead of starting LAMMPS -by the command: - -lammps in.file - -as he would if he implemented the changes detailed here, would launch -in the Unix style: - -lammps < in.file - -7. The new version LAMMPS calls the error function: - double erfc(double) - This function is in the GNU C library. However, it's not found for - VC++. - Three options: - a. One can try to find erfc() from other libraries. - b. The erfc() is called for pair_modify table option. One can set - the table option to be 0 to avoid calling this function. - c. Write your own functions. - - In this code, two files erfc.h, erfc.cpp are created and added to the project. - Files that call erfc() all add - #include "erfc.h" at the beginning. - Note: the functions are not fully tested, use with caution. - -8. MSVC does not have a inttypes.h file. The simplest way - to deal with this problem is to download inttypes.h from the - following site: - http://www.koders.com/c/fidDE7D6EFFD475FAB1B7F6A2BBA791401CFA88FFA3.aspx - and add this file into the workspace. - -9. MSVC does not have dirent.h. The problem is solved by downloading -a version of it for Windows from the following website: - -http://www.softagalleria.net/dirent/index.en.html - -10. Every time an error pops up for a line like this: - -char *words[params_per_line]; - -replace to the following type: - -char **words = new char*[params_per_line]; - -The dynamic memory allocation in MSVC requires a line like this. - -11. Build the project. Specify appropriate input file to run the code. - The Windows result might be different from Unix results. Be Cautious. +This is instruction for the modification of LAMMPS for MS Windows +LAMMPS version: Feb 2007 + +compiled without MPI and FFT in Viusal C++ 6.0 +(All packages except for XTC, MEAM appear to work.) + +------------------- + +1. Create an empty workspace (Win32 console), add all .h and .cpp +files into the project. + +2. At about 80 places in the code, variables are redefined. Most of +these variables are loop counters, which can be easily fixed. + +Code looks like this: + + for (int i=0; i<5; i++) { + something; + } + for (int i=0; i<5; i++) { + something else; + } + +This is ok with g++ compiler. But VC thinks the i is redefined in the +second loop. So the variable scope is different. This happens many times +in the code. It can be fixed easily based on the compiling error. + +3. At the beginning of fft3d.h, added: +#ifndef FFT_NONE +#define FFT_NONE +#endif + +4. In input.cpp, changed the two header files +//#include "unistd.h" +#include "direct.h" + +4A. (added by Tim Lau, MIT, ttl@mit.edu) + +In variable.cpp, change the header files +//#include "unistd.h" +#include "sleep.h" + +Add in the included sleep.h and sleep.cpp files. + +4B. (added by Tim Lau, MIT, ttl@mit.edu) + +In shell.cpp, change the header file: +//#include "unistd.h" +#include "direct.h" + +Change the line in shell.cpp: +mkdir(arg[i], S_IRWXU | S_IRGRP | S_IXGRP); +to: +mkdir(arg[i]); +since Windows obviously does not use UNIX file permissions. + +It's also possible that the line has to be changed to: +_mkdir(arg[i]); +depending on the version of the Visual C++ compiler used. + +5. Added mpi.h and mpi.cpp (in STUBS folder) to the workspace +In mpi.cpp, commented the time.h header file +//#include +commented the original code in MPI_Wtime(), just make it return 0; + +6. In system.cpp, two changes due to difference in the input argument +list + +Line 83: int iarg = 2; +Line 172: inflag=1; //add this line + +The number of input arguments (nargs) is different in g++ and VC when +you give arguments to run a program. This might be related to MPI as +well. The difference is one. Once the above changes are made, the +program is taking the correct argument. + +However, it has been observed in the latest versions of sytem.cpp that +no modification needs be made to the file as distributed from the +LAMMPS website to work. The user however, instead of starting LAMMPS +by the command: + +lammps in.file + +as he would if he implemented the changes detailed here, would launch +in the Unix style: + +lammps < in.file + +7. The new version LAMMPS calls the error function: + double erfc(double) + This function is in the GNU C library. However, it's not found for + VC++. + Three options: + a. One can try to find erfc() from other libraries. + b. The erfc() is called for pair_modify table option. One can set + the table option to be 0 to avoid calling this function. + c. Write your own functions. + + In this code, two files erfc.h, erfc.cpp are created and added to the project. + Files that call erfc() all add + #include "erfc.h" at the beginning. + Note: the functions are not fully tested, use with caution. + +8. MSVC does not have a inttypes.h file. The simplest way + to deal with this problem is to download inttypes.h from the + following site: + http://www.koders.com/c/fidDE7D6EFFD475FAB1B7F6A2BBA791401CFA88FFA3.aspx + and add this file into the workspace. + +9. MSVC does not have dirent.h. The problem is solved by downloading +a version of it for Windows from the following website: + +http://www.softagalleria.net/dirent/index.en.html + +10. Every time an error pops up for a line like this: + +char *words[params_per_line]; + +replace to the following type: + +char **words = new char*[params_per_line]; + +The dynamic memory allocation in MSVC requires a line like this. + +11. Build the project. Specify appropriate input file to run the code. + The Windows result might be different from Unix results. Be Cautious. diff --git a/tools/ch2lmp/example/1ac7.pdb b/tools/ch2lmp/example/1ac7.pdb index 09b905f6b6..a664315348 100755 --- a/tools/ch2lmp/example/1ac7.pdb +++ b/tools/ch2lmp/example/1ac7.pdb @@ -1,529 +1,529 @@ -REMARK original generated coordinate pdb file -ATOM 1 P ADE 1 3.759 0.457 0.076 0.00 0.00 A -ATOM 2 O1P ADE 1 2.779 0.279 0.171 0.00 0.00 A -ATOM 3 O2P ADE 1 4.489 -0.205 0.246 0.00 0.00 A -ATOM 4 O5' ADE 1 3.969 1.972 -0.393 1.00 0.00 A -ATOM 5 C5' ADE 1 5.044 2.279 -1.290 1.00 0.00 A -ATOM 6 H5' ADE 1 4.671 2.290 -2.305 1.00 0.00 A -ATOM 7 H5'' ADE 1 5.816 1.501 -1.189 1.00 0.00 A -ATOM 8 C4' ADE 1 5.648 3.651 -1.028 1.00 0.00 A -ATOM 9 H4' ADE 1 6.646 3.694 -1.462 1.00 0.00 A -ATOM 10 O4' ADE 1 4.831 4.694 -1.619 1.00 0.00 A -ATOM 11 C1' ADE 1 4.388 5.605 -0.589 1.00 0.00 A -ATOM 12 H1' ADE 1 4.979 6.519 -0.638 1.00 0.00 A -ATOM 13 N9 ADE 1 2.960 5.940 -0.745 1.00 0.00 A -ATOM 14 C5 ADE 1 1.063 7.037 -0.974 1.00 0.00 A -ATOM 15 N7 ADE 1 0.730 5.679 -1.026 1.00 0.00 A -ATOM 16 C8 ADE 1 1.887 5.123 -0.884 1.00 0.00 A -ATOM 17 H8 ADE 1 1.997 4.038 -0.875 1.00 0.00 A -ATOM 18 N1 ADE 1 0.950 9.380 -0.971 1.00 0.00 A -ATOM 19 C2 ADE 1 2.273 9.407 -0.803 1.00 0.00 A -ATOM 20 H2 ADE 1 2.731 10.392 -0.730 1.00 0.00 A -ATOM 21 N3 ADE 1 3.091 8.365 -0.708 1.00 0.00 A -ATOM 22 C4 ADE 1 2.417 7.202 -0.802 1.00 0.00 A -ATOM 23 C6 ADE 1 0.298 8.207 -1.063 1.00 0.00 A -ATOM 24 N6 ADE 1 -1.022 8.204 -1.236 1.00 0.00 A -ATOM 25 H61 ADE 1 -1.526 9.077 -1.294 1.00 0.00 A -ATOM 26 H62 ADE 1 -1.520 7.328 -1.309 1.00 0.00 A -ATOM 27 C2' ADE 1 4.646 4.918 0.727 1.00 0.00 A -ATOM 28 H2'' ADE 1 4.989 5.649 1.459 1.00 0.00 A -ATOM 29 O2' ADE 1 5.086 5.931 1.621 0.00 0.00 A -ATOM 30 H2' ADE 1 3.741 4.398 1.062 1.00 0.00 A -ATOM 31 C3' ADE 1 5.735 3.930 0.467 1.00 0.00 A -ATOM 32 H3' ADE 1 5.546 3.013 1.029 1.00 0.00 A -ATOM 33 O3' ADE 1 7.011 4.478 0.823 1.00 0.00 A -ATOM 34 P THY 2 7.364 4.806 2.358 1.00 0.00 A -ATOM 35 O1P THY 2 8.839 4.776 2.530 1.00 0.00 A -ATOM 36 O2P THY 2 6.515 3.962 3.238 1.00 0.00 A -ATOM 37 O5' THY 2 6.861 6.330 2.454 1.00 0.00 A -ATOM 38 C5' THY 2 7.276 7.297 1.480 1.00 0.00 A -ATOM 39 H5' THY 2 6.804 7.074 0.532 1.00 0.00 A -ATOM 40 H5'' THY 2 8.368 7.233 1.371 1.00 0.00 A -ATOM 41 C4' THY 2 6.873 8.719 1.849 1.00 0.00 A -ATOM 42 H4' THY 2 7.506 9.419 1.306 1.00 0.00 A -ATOM 43 O4' THY 2 5.486 8.978 1.507 1.00 0.00 A -ATOM 44 C1' THY 2 4.768 9.415 2.684 1.00 0.00 A -ATOM 45 H1' THY 2 4.665 10.500 2.653 1.00 0.00 A -ATOM 46 N1 THY 2 3.423 8.799 2.747 1.00 0.00 A -ATOM 47 C6 THY 2 3.266 7.442 2.852 1.00 0.00 A -ATOM 48 H6 THY 2 4.140 6.814 2.982 1.00 0.00 A -ATOM 49 C2 THY 2 2.337 9.639 2.626 1.00 0.00 A -ATOM 50 O2 THY 2 2.458 10.860 2.552 1.00 0.00 A -ATOM 51 N3 THY 2 1.099 9.029 2.606 1.00 0.00 A -ATOM 52 H3 THY 2 0.308 9.625 2.509 1.00 0.00 A -ATOM 53 C4 THY 2 0.851 7.673 2.697 1.00 0.00 A -ATOM 54 O4 THY 2 -0.302 7.243 2.661 1.00 0.00 A -ATOM 55 C5 THY 2 2.045 6.871 2.827 1.00 0.00 A -ATOM 56 C5M THY 2 1.928 5.354 2.910 1.00 0.00 A -ATOM 57 H51 THY 2 1.213 5.085 3.678 1.00 0.00 A -ATOM 58 H52 THY 2 2.903 4.926 3.150 1.00 0.00 A -ATOM 59 H53 THY 2 1.589 4.964 1.960 1.00 0.00 A -ATOM 60 C2' THY 2 5.626 9.038 3.865 1.00 0.00 A -ATOM 61 H2'' THY 2 5.564 9.815 4.630 1.00 0.00 A -ATOM 62 O2' THY 2 5.490 10.094 4.806 0.00 0.00 A -ATOM 63 H2' THY 2 5.324 8.059 4.256 1.00 0.00 A -ATOM 64 C3' THY 2 7.025 8.967 3.345 1.00 0.00 A -ATOM 65 H3' THY 2 7.553 8.132 3.808 1.00 0.00 A -ATOM 66 O3' THY 2 7.719 10.196 3.596 1.00 0.00 A -ATOM 67 P CYT 3 7.980 10.697 5.100 1.00 0.00 A -ATOM 68 O1P CYT 3 9.280 11.413 5.150 1.00 0.00 A -ATOM 69 O2P CYT 3 7.737 9.569 6.034 1.00 0.00 A -ATOM 70 O5' CYT 3 6.789 11.768 5.253 1.00 0.00 A -ATOM 71 C5' CYT 3 6.720 12.904 4.380 1.00 0.00 A -ATOM 72 H5' CYT 3 6.534 12.568 3.369 1.00 0.00 A -ATOM 73 H5'' CYT 3 7.686 13.430 4.420 1.00 0.00 A -ATOM 74 C4' CYT 3 5.593 13.866 4.739 1.00 0.00 A -ATOM 75 H4' CYT 3 5.709 14.779 4.157 1.00 0.00 A -ATOM 76 O4' CYT 3 4.292 13.290 4.450 1.00 0.00 A -ATOM 77 C1' CYT 3 3.465 13.339 5.637 1.00 0.00 A -ATOM 78 H1' CYT 3 2.791 14.192 5.565 1.00 0.00 A -ATOM 79 N1 CYT 3 2.672 12.098 5.790 1.00 0.00 A -ATOM 80 C6 CYT 3 3.282 10.889 5.955 1.00 0.00 A -ATOM 81 H6 CYT 3 4.365 10.840 6.032 1.00 0.00 A -ATOM 82 C5 CYT 3 2.559 9.760 6.045 1.00 0.00 A -ATOM 83 H5 CYT 3 3.039 8.789 6.164 1.00 0.00 A -ATOM 84 C2 CYT 3 1.294 12.207 5.721 1.00 0.00 A -ATOM 85 O2 CYT 3 0.763 13.308 5.588 1.00 0.00 A -ATOM 86 N3 CYT 3 0.558 11.072 5.813 1.00 0.00 A -ATOM 87 C4 CYT 3 1.140 9.878 5.968 1.00 0.00 A -ATOM 88 N4 CYT 3 0.379 8.788 6.044 1.00 0.00 A -ATOM 89 H41 CYT 3 0.806 7.880 6.157 1.00 0.00 A -ATOM 90 H42 CYT 3 -0.626 8.869 5.991 1.00 0.00 A -ATOM 91 C2' CYT 3 4.407 13.552 6.796 1.00 0.00 A -ATOM 92 H2'' CYT 3 3.940 14.214 7.534 1.00 0.00 A -ATOM 93 O2' CYT 3 3.733 14.417 7.700 0.00 0.00 A -ATOM 94 H2' CYT 3 4.689 12.590 7.236 1.00 0.00 A -ATOM 95 C3' CYT 3 5.616 14.221 6.221 1.00 0.00 A -ATOM 96 H3' CYT 3 6.518 13.815 6.685 1.00 0.00 A -ATOM 97 O3' CYT 3 5.555 15.639 6.408 1.00 0.00 A -ATOM 98 P CYT 4 5.538 16.275 7.882 1.00 0.00 A -ATOM 99 O1P CYT 4 6.177 17.615 7.835 1.00 0.00 A -ATOM 100 O2P CYT 4 6.033 15.266 8.851 1.00 0.00 A -ATOM 101 O5' CYT 4 3.955 16.462 8.083 1.00 0.00 A -ATOM 102 C5' CYT 4 3.157 17.011 7.025 1.00 0.00 A -ATOM 103 H5' CYT 4 3.112 16.305 6.208 1.00 0.00 A -ATOM 104 H5'' CYT 4 3.632 17.942 6.682 1.00 0.00 A -ATOM 105 C4' CYT 4 1.722 17.289 7.449 1.00 0.00 A -ATOM 106 H4' CYT 4 1.321 18.095 6.835 1.00 0.00 A -ATOM 107 O4' CYT 4 0.888 16.113 7.280 1.00 0.00 A -ATOM 108 C1' CYT 4 0.232 15.803 8.531 1.00 0.00 A -ATOM 109 H1' CYT 4 -0.791 16.175 8.498 1.00 0.00 A -ATOM 110 N1 CYT 4 0.215 14.343 8.782 1.00 0.00 A -ATOM 111 C6 CYT 4 1.375 13.644 8.967 1.00 0.00 A -ATOM 112 H6 CYT 4 2.327 14.165 8.951 1.00 0.00 A -ATOM 113 C5 CYT 4 1.351 12.313 9.169 1.00 0.00 A -ATOM 114 H5 CYT 4 2.272 11.748 9.314 1.00 0.00 A -ATOM 115 C2 CYT 4 -1.018 13.712 8.800 1.00 0.00 A -ATOM 116 O2 CYT 4 -2.050 14.359 8.636 1.00 0.00 A -ATOM 117 N3 CYT 4 -1.049 12.370 9.003 1.00 0.00 A -ATOM 118 C4 CYT 4 0.078 11.668 9.183 1.00 0.00 A -ATOM 119 N4 CYT 4 0.010 10.348 9.372 1.00 0.00 A -ATOM 120 H41 CYT 4 0.855 9.814 9.502 1.00 0.00 A -ATOM 121 H42 CYT 4 -0.885 9.881 9.386 1.00 0.00 A -ATOM 122 C2' CYT 4 0.992 16.545 9.602 1.00 0.00 A -ATOM 123 H2'' CYT 4 0.293 16.923 10.350 1.00 0.00 A -ATOM 124 O2' CYT 4 0.020 17.000 10.533 0.00 0.00 A -ATOM 125 H2' CYT 4 1.751 15.896 10.049 1.00 0.00 A -ATOM 126 C3' CYT 4 1.648 17.697 8.914 1.00 0.00 A -ATOM 127 H3' CYT 4 2.656 17.837 9.310 1.00 0.00 A -ATOM 128 O3' CYT 4 0.881 18.892 9.085 1.00 0.00 A -ATOM 129 P THY 5 0.647 19.496 10.554 1.00 0.00 A -ATOM 130 O1P THY 5 0.561 20.975 10.457 1.00 0.00 A -ATOM 131 O2P THY 5 1.626 18.884 11.487 1.00 0.00 A -ATOM 132 O5' THY 5 -0.815 18.907 10.868 1.00 0.00 A -ATOM 133 C5' THY 5 -1.928 19.273 10.041 1.00 0.00 A -ATOM 134 H5' THY 5 -1.694 19.051 9.009 1.00 0.00 A -ATOM 135 H5'' THY 5 -2.101 20.352 10.155 1.00 0.00 A -ATOM 136 C4' THY 5 -3.200 18.507 10.381 1.00 0.00 A -ATOM 137 H4' THY 5 -3.974 18.774 9.662 1.00 0.00 A -ATOM 138 O4' THY 5 -2.989 17.071 10.326 1.00 0.00 A -ATOM 139 C1' THY 5 -3.410 16.473 11.574 1.00 0.00 A -ATOM 140 H1' THY 5 -4.409 16.057 11.449 1.00 0.00 A -ATOM 141 N1 THY 5 -2.482 15.396 11.992 1.00 0.00 A -ATOM 142 C6 THY 5 -1.153 15.644 12.196 1.00 0.00 A -ATOM 143 H6 THY 5 -0.790 16.668 12.147 1.00 0.00 A -ATOM 144 C2 THY 5 -3.000 14.117 12.096 1.00 0.00 A -ATOM 145 O2 THY 5 -4.196 13.881 11.943 1.00 0.00 A -ATOM 146 N3 THY 5 -2.094 13.117 12.403 1.00 0.00 A -ATOM 147 H3 THY 5 -2.449 12.182 12.472 1.00 0.00 A -ATOM 148 C4 THY 5 -0.742 13.280 12.614 1.00 0.00 A -ATOM 149 O4 THY 5 -0.032 12.308 12.873 1.00 0.00 A -ATOM 150 C5 THY 5 -0.289 14.648 12.492 1.00 0.00 A -ATOM 151 C5M THY 5 1.191 14.967 12.669 1.00 0.00 A -ATOM 152 H51 THY 5 1.550 14.530 13.594 1.00 0.00 A -ATOM 153 H52 THY 5 1.333 16.047 12.693 1.00 0.00 A -ATOM 154 H53 THY 5 1.751 14.549 11.843 1.00 0.00 A -ATOM 155 C2' THY 5 -3.465 17.594 12.579 1.00 0.00 A -ATOM 156 H2'' THY 5 -4.306 17.435 13.264 1.00 0.00 A -ATOM 157 O2' THY 5 -4.580 17.322 13.417 0.00 0.00 A -ATOM 158 H2' THY 5 -2.511 17.661 13.116 1.00 0.00 A -ATOM 159 C3' THY 5 -3.691 18.844 11.781 1.00 0.00 A -ATOM 160 H3' THY 5 -3.096 19.660 12.197 1.00 0.00 A -ATOM 161 O3' THY 5 -5.077 19.199 11.761 1.00 0.00 A -ATOM 162 P ADE 6 -5.692 20.169 12.882 1.00 0.00 A -ATOM 163 O1P ADE 6 -6.683 21.072 12.244 1.00 0.00 A -ATOM 164 O2P ADE 6 -4.583 20.752 13.678 1.00 0.00 A -ATOM 165 O5' ADE 6 -6.471 19.094 13.785 1.00 0.00 A -ATOM 166 C5' ADE 6 -7.541 18.319 13.232 1.00 0.00 A -ATOM 167 H5' ADE 6 -7.211 17.850 12.315 1.00 0.00 A -ATOM 168 H5'' ADE 6 -8.386 18.991 13.021 1.00 0.00 A -ATOM 169 C4' ADE 6 -7.985 17.203 14.162 1.00 0.00 A -ATOM 170 H4' ADE 6 -8.974 16.858 13.863 1.00 0.00 A -ATOM 171 O4' ADE 6 -7.060 16.084 14.109 1.00 0.00 A -ATOM 172 C1' ADE 6 -6.626 15.770 15.448 1.00 0.00 A -ATOM 173 H1' ADE 6 -7.241 14.954 15.831 1.00 0.00 A -ATOM 174 N9 ADE 6 -5.206 15.361 15.499 1.00 0.00 A -ATOM 175 C5 ADE 6 -3.380 14.152 15.741 1.00 0.00 A -ATOM 176 N7 ADE 6 -2.949 15.480 15.662 1.00 0.00 A -ATOM 177 C8 ADE 6 -4.070 16.107 15.522 1.00 0.00 A -ATOM 178 H8 ADE 6 -4.100 17.190 15.422 1.00 0.00 A -ATOM 179 N1 ADE 6 -3.441 11.818 15.931 1.00 0.00 A -ATOM 180 C2 ADE 6 -4.769 11.882 15.816 1.00 0.00 A -ATOM 181 H2 ADE 6 -5.306 10.937 15.837 1.00 0.00 A -ATOM 182 N3 ADE 6 -5.509 12.969 15.668 1.00 0.00 A -ATOM 183 C4 ADE 6 -4.749 14.077 15.638 1.00 0.00 A -ATOM 184 C6 ADE 6 -2.701 12.939 15.900 1.00 0.00 A -ATOM 185 N6 ADE 6 -1.379 12.855 16.045 1.00 0.00 A -ATOM 186 H61 ADE 6 -0.941 11.951 16.157 1.00 0.00 A -ATOM 187 H62 ADE 6 -0.816 13.693 16.045 1.00 0.00 A -ATOM 188 C2' ADE 6 -6.890 17.001 16.274 1.00 0.00 A -ATOM 189 H2'' ADE 6 -7.162 16.715 17.291 1.00 0.00 A -ATOM 190 O2' ADE 6 -7.256 16.544 17.569 0.00 0.00 A -ATOM 191 H2' ADE 6 -6.014 17.659 16.261 1.00 0.00 A -ATOM 192 C3' ADE 6 -8.041 17.687 15.608 1.00 0.00 A -ATOM 193 H3' ADE 6 -7.903 18.770 15.646 1.00 0.00 A -ATOM 194 O3' ADE 6 -9.285 17.318 16.221 1.00 0.00 A -ATOM 195 P GUA 7 -9.843 18.105 17.507 1.00 0.00 A -ATOM 196 O1P GUA 7 -11.229 18.561 17.226 1.00 0.00 A -ATOM 197 O2P GUA 7 -8.828 19.100 17.939 1.00 0.00 A -ATOM 198 O5' GUA 7 -9.897 16.910 18.585 1.00 0.00 A -ATOM 199 C5' GUA 7 -10.177 15.560 18.181 1.00 0.00 A -ATOM 200 H5' GUA 7 -9.745 15.381 17.207 1.00 0.00 A -ATOM 201 H5'' GUA 7 -11.270 15.426 18.114 1.00 0.00 A -ATOM 202 C4' GUA 7 -9.561 14.522 19.125 1.00 0.00 A -ATOM 203 H4' GUA 7 -10.025 13.556 18.935 1.00 0.00 A -ATOM 204 O4' GUA 7 -8.133 14.405 18.887 1.00 0.00 A -ATOM 205 C1' GUA 7 -7.410 14.638 20.119 1.00 0.00 A -ATOM 206 H1' GUA 7 -7.083 13.684 20.529 1.00 0.00 A -ATOM 207 N9 GUA 7 -6.233 15.500 19.896 1.00 0.00 A -ATOM 208 C4 GUA 7 -4.911 15.108 19.923 1.00 0.00 A -ATOM 209 N2 GUA 7 -2.510 12.617 20.326 1.00 0.00 A -ATOM 210 H21 GUA 7 -1.501 12.565 20.299 1.00 0.00 A -ATOM 211 H22 GUA 7 -3.053 11.785 20.505 1.00 0.00 A -ATOM 212 N3 GUA 7 -4.458 13.854 20.155 1.00 0.00 A -ATOM 213 C2 GUA 7 -3.123 13.783 20.119 1.00 0.00 A -ATOM 214 N1 GUA 7 -2.305 14.867 19.874 1.00 0.00 A -ATOM 215 H1 GUA 7 -1.305 14.730 19.867 1.00 0.00 A -ATOM 216 C6 GUA 7 -2.744 16.163 19.632 1.00 0.00 A -ATOM 217 O6 GUA 7 -1.932 17.060 19.420 1.00 0.00 A -ATOM 218 C5 GUA 7 -4.162 16.248 19.668 1.00 0.00 A -ATOM 219 N7 GUA 7 -4.998 17.354 19.481 1.00 0.00 A -ATOM 220 C8 GUA 7 -6.168 16.829 19.630 1.00 0.00 A -ATOM 221 H8 GUA 7 -7.071 17.433 19.552 1.00 0.00 A -ATOM 222 C2' GUA 7 -8.383 15.282 21.074 1.00 0.00 A -ATOM 223 H2'' GUA 7 -8.214 14.899 22.086 1.00 0.00 A -ATOM 224 O2' GUA 7 -8.103 14.731 22.354 0.00 0.00 A -ATOM 225 H2' GUA 7 -8.286 16.373 21.035 1.00 0.00 A -ATOM 226 C3' GUA 7 -9.744 14.878 20.608 1.00 0.00 A -ATOM 227 H3' GUA 7 -10.429 15.719 20.727 1.00 0.00 A -ATOM 228 O3' GUA 7 -10.214 13.747 21.352 1.00 0.00 A -ATOM 229 P THY 8 -10.470 13.861 22.933 1.00 0.00 A -ATOM 230 O1P THY 8 -11.662 13.049 23.287 1.00 0.00 A -ATOM 231 O2P THY 8 -10.423 15.292 23.326 1.00 0.00 A -ATOM 232 O5' THY 8 -9.152 13.125 23.489 1.00 0.00 A -ATOM 233 C5' THY 8 -9.105 11.695 23.588 1.00 0.00 A -ATOM 234 H5' THY 8 -9.468 11.262 22.666 1.00 0.00 A -ATOM 235 H5'' THY 8 -9.754 11.381 24.418 1.00 0.00 A -ATOM 236 C4' THY 8 -7.687 11.168 23.791 1.00 0.00 A -ATOM 237 H4' THY 8 -7.609 10.181 23.338 1.00 0.00 A -ATOM 238 O4' THY 8 -6.715 12.044 23.168 1.00 0.00 A -ATOM 239 C1' THY 8 -5.719 12.435 24.137 1.00 0.00 A -ATOM 240 H1' THY 8 -4.826 11.809 24.000 1.00 0.00 A -ATOM 241 N1 THY 8 -5.347 13.860 23.988 1.00 0.00 A -ATOM 242 C6 THY 8 -6.259 14.865 24.197 1.00 0.00 A -ATOM 243 H6 THY 8 -7.285 14.614 24.463 1.00 0.00 A -ATOM 244 C2 THY 8 -4.038 14.136 23.637 1.00 0.00 A -ATOM 245 O2 THY 8 -3.212 13.247 23.443 1.00 0.00 A -ATOM 246 N3 THY 8 -3.711 15.473 23.513 1.00 0.00 A -ATOM 247 H3 THY 8 -2.758 15.688 23.257 1.00 0.00 A -ATOM 248 C4 THY 8 -4.564 16.543 23.707 1.00 0.00 A -ATOM 249 O4 THY 8 -4.163 17.697 23.570 1.00 0.00 A -ATOM 250 C5 THY 8 -5.910 16.163 24.071 1.00 0.00 A -ATOM 251 C5M THY 8 -6.952 17.250 24.322 1.00 0.00 A -ATOM 252 H51 THY 8 -7.951 16.823 24.241 1.00 0.00 A -ATOM 253 H52 THY 8 -6.834 18.044 23.584 1.00 0.00 A -ATOM 254 H53 THY 8 -6.813 17.662 25.322 1.00 0.00 A -ATOM 255 C2' THY 8 -6.324 12.155 25.493 1.00 0.00 A -ATOM 256 H2'' THY 8 -5.551 11.817 26.188 1.00 0.00 A -ATOM 257 O2' THY 8 -5.259 11.702 26.317 0.00 0.00 A -ATOM 258 H2' THY 8 -6.834 13.050 25.864 1.00 0.00 A -ATOM 259 C3' THY 8 -7.326 11.065 25.272 1.00 0.00 A -ATOM 260 H3' THY 8 -8.207 11.245 25.890 1.00 0.00 A -ATOM 261 O3' THY 8 -6.760 9.782 25.572 1.00 0.00 A -ATOM 262 P THY 9 -6.511 9.330 27.094 1.00 0.00 A -ATOM 263 O1P THY 9 -6.391 7.851 27.145 1.00 0.00 A -ATOM 264 O2P THY 9 -7.505 10.007 27.965 1.00 0.00 A -ATOM 265 O5' THY 9 -5.064 9.980 27.352 1.00 0.00 A -ATOM 266 C5' THY 9 -3.880 9.385 26.799 1.00 0.00 A -ATOM 267 H5' THY 9 -4.151 8.500 26.239 1.00 0.00 A -ATOM 268 H5'' THY 9 -3.212 9.106 27.628 1.00 0.00 A -ATOM 269 C4' THY 9 -3.160 10.317 25.831 1.00 0.00 A -ATOM 270 H4' THY 9 -3.569 10.180 24.831 1.00 0.00 A -ATOM 271 O4' THY 9 -3.322 11.705 26.223 1.00 0.00 A -ATOM 272 C1' THY 9 -2.022 12.314 26.402 1.00 0.00 A -ATOM 273 H1' THY 9 -1.789 12.931 25.535 1.00 0.00 A -ATOM 274 N1 THY 9 -1.980 13.144 27.620 1.00 0.00 A -ATOM 275 C6 THY 9 -2.301 12.617 28.841 1.00 0.00 A -ATOM 276 H6 THY 9 -2.602 11.572 28.910 1.00 0.00 A -ATOM 277 C2 THY 9 -1.594 14.462 27.479 1.00 0.00 A -ATOM 278 O2 THY 9 -1.304 14.946 26.388 1.00 0.00 A -ATOM 279 N3 THY 9 -1.550 15.208 28.642 1.00 0.00 A -ATOM 280 H3 THY 9 -1.266 16.173 28.556 1.00 0.00 A -ATOM 281 C4 THY 9 -1.856 14.754 29.913 1.00 0.00 A -ATOM 282 O4 THY 9 -1.781 15.506 30.882 1.00 0.00 A -ATOM 283 C5 THY 9 -2.250 13.364 29.961 1.00 0.00 A -ATOM 284 C5M THY 9 -2.613 12.733 31.301 1.00 0.00 A -ATOM 285 H51 THY 9 -3.440 13.282 31.750 1.00 0.00 A -ATOM 286 H52 THY 9 -1.749 12.768 31.965 1.00 0.00 A -ATOM 287 H53 THY 9 -2.907 11.695 31.144 1.00 0.00 A -ATOM 288 C2' THY 9 -1.031 11.183 26.492 1.00 0.00 A -ATOM 289 H2'' THY 9 -0.104 11.461 25.976 1.00 0.00 A -ATOM 290 O2' THY 9 0.130 11.618 25.797 0.00 0.00 A -ATOM 291 H2' THY 9 -0.850 10.929 27.544 1.00 0.00 A -ATOM 292 C3' THY 9 -1.667 10.028 25.792 1.00 0.00 A -ATOM 293 H3' THY 9 -1.452 9.104 26.331 1.00 0.00 A -ATOM 294 O3' THY 9 -1.201 9.937 24.447 1.00 0.00 A -ATOM 295 P ADE 10 -0.315 8.688 23.992 1.00 0.00 A -ATOM 296 O1P ADE 10 0.551 8.277 25.125 1.00 0.00 A -ATOM 297 O2P ADE 10 0.304 8.985 22.676 1.00 0.00 A -ATOM 298 O5' ADE 10 -1.467 7.588 23.799 1.00 0.00 A -ATOM 299 C5' ADE 10 -1.147 6.209 23.981 1.00 0.00 A -ATOM 300 H5' ADE 10 -1.499 5.914 24.943 1.00 0.00 A -ATOM 301 H5'' ADE 10 -0.058 6.091 23.938 1.00 0.00 A -ATOM 302 C4' ADE 10 -1.836 5.303 22.968 1.00 0.00 A -ATOM 303 H4' ADE 10 -2.067 4.345 23.431 1.00 0.00 A -ATOM 304 O4' ADE 10 -3.058 5.912 22.482 1.00 0.00 A -ATOM 305 C1' ADE 10 -2.814 6.401 21.156 1.00 0.00 A -ATOM 306 H1' ADE 10 -3.405 5.820 20.462 1.00 0.00 A -ATOM 307 N9 ADE 10 -3.245 7.804 21.056 1.00 0.00 A -ATOM 308 C5 ADE 10 -4.488 9.625 21.105 1.00 0.00 A -ATOM 309 N7 ADE 10 -3.166 10.059 21.189 1.00 0.00 A -ATOM 310 C8 ADE 10 -2.525 8.939 21.164 1.00 0.00 A -ATOM 311 H8 ADE 10 -1.467 8.901 21.352 1.00 0.00 A -ATOM 312 N1 ADE 10 -6.829 9.568 20.995 1.00 0.00 A -ATOM 313 C2 ADE 10 -6.756 8.238 20.930 1.00 0.00 A -ATOM 314 H2 ADE 10 -7.703 7.703 20.862 1.00 0.00 A -ATOM 315 N3 ADE 10 -5.655 7.493 20.942 1.00 0.00 A -ATOM 316 C4 ADE 10 -4.547 8.257 21.031 1.00 0.00 A -ATOM 317 C6 ADE 10 -5.708 10.306 21.082 1.00 0.00 A -ATOM 318 N6 ADE 10 -5.798 11.634 21.109 1.00 0.00 A -ATOM 319 H61 ADE 10 -4.961 12.197 21.148 1.00 0.00 A -ATOM 320 H62 ADE 10 -6.705 12.077 21.097 1.00 0.00 A -ATOM 321 C2' ADE 10 -1.353 6.163 20.832 1.00 0.00 A -ATOM 322 H2'' ADE 10 -1.255 5.812 19.797 1.00 0.00 A -ATOM 323 O2' ADE 10 -1.304 5.706 19.487 0.00 0.00 A -ATOM 324 H2' ADE 10 -0.763 7.061 21.013 1.00 0.00 A -ATOM 325 C3' ADE 10 -0.922 5.089 21.772 1.00 0.00 A -ATOM 326 H3' ADE 10 0.123 5.233 22.050 1.00 0.00 A -ATOM 327 O3' ADE 10 -1.116 3.794 21.200 1.00 0.00 A -ATOM 328 P THY 11 -0.300 3.354 19.891 1.00 0.00 A -ATOM 329 O1P THY 11 0.097 1.930 20.024 1.00 0.00 A -ATOM 330 O2P THY 11 0.734 4.378 19.599 1.00 0.00 A -ATOM 331 O5' THY 11 -1.473 3.469 18.803 1.00 0.00 A -ATOM 332 C5' THY 11 -2.662 2.689 18.966 1.00 0.00 A -ATOM 333 H5' THY 11 -2.944 2.680 20.010 1.00 0.00 A -ATOM 334 H5'' THY 11 -2.451 1.662 18.634 1.00 0.00 A -ATOM 335 C4' THY 11 -3.851 3.245 18.197 1.00 0.00 A -ATOM 336 H4' THY 11 -4.766 2.847 18.632 1.00 0.00 A -ATOM 337 O4' THY 11 -3.901 4.696 18.258 1.00 0.00 A -ATOM 338 C1' THY 11 -4.030 5.228 16.919 1.00 0.00 A -ATOM 339 H1' THY 11 -5.080 5.439 16.719 1.00 0.00 A -ATOM 340 N1 THY 11 -3.239 6.466 16.744 1.00 0.00 A -ATOM 341 C6 THY 11 -1.881 6.470 16.918 1.00 0.00 A -ATOM 342 H6 THY 11 -1.372 5.540 17.168 1.00 0.00 A -ATOM 343 C2 THY 11 -3.928 7.616 16.410 1.00 0.00 A -ATOM 344 O2 THY 11 -5.147 7.627 16.255 1.00 0.00 A -ATOM 345 N3 THY 11 -3.167 8.760 16.267 1.00 0.00 A -ATOM 346 H3 THY 11 -3.656 9.597 16.002 1.00 0.00 A -ATOM 347 C4 THY 11 -1.796 8.854 16.430 1.00 0.00 A -ATOM 348 O4 THY 11 -1.220 9.932 16.292 1.00 0.00 A -ATOM 349 C5 THY 11 -1.161 7.602 16.776 1.00 0.00 A -ATOM 350 C5M THY 11 0.348 7.560 16.990 1.00 0.00 A -ATOM 351 H51 THY 11 0.804 8.445 16.550 1.00 0.00 A -ATOM 352 H52 THY 11 0.757 6.667 16.526 1.00 0.00 A -ATOM 353 H53 THY 11 0.561 7.538 18.049 1.00 0.00 A -ATOM 354 C2' THY 11 -3.564 4.136 15.992 1.00 0.00 A -ATOM 355 H2'' THY 11 -4.165 4.148 15.075 1.00 0.00 A -ATOM 356 O2' THY 11 -4.394 4.212 14.841 0.00 0.00 A -ATOM 357 H2' THY 11 -2.495 4.258 15.779 1.00 0.00 A -ATOM 358 C3' THY 11 -3.793 2.852 16.729 1.00 0.00 A -ATOM 359 H3' THY 11 -2.953 2.176 16.559 1.00 0.00 A -ATOM 360 O3' THY 11 -5.015 2.233 16.322 1.00 0.00 A -ATOM 361 P ADE 12 -5.221 1.752 14.807 1.00 0.00 A -ATOM 362 O1P ADE 12 -6.125 0.574 14.792 1.00 0.00 A -ATOM 363 O2P ADE 12 -3.895 1.663 14.146 1.00 0.00 A -ATOM 364 O5' ADE 12 -6.010 3.023 14.225 1.00 0.00 A -ATOM 365 C5' ADE 12 -7.077 3.615 14.980 1.00 0.00 A -ATOM 366 H5' ADE 12 -6.670 4.100 15.857 1.00 0.00 A -ATOM 367 H5'' ADE 12 -7.769 2.818 15.287 1.00 0.00 A -ATOM 368 C4' ADE 12 -7.824 4.680 14.194 1.00 0.00 A -ATOM 369 H4' ADE 12 -8.830 4.786 14.598 1.00 0.00 A -ATOM 370 O4' ADE 12 -7.144 5.958 14.280 1.00 0.00 A -ATOM 371 C1' ADE 12 -6.790 6.408 12.952 1.00 0.00 A -ATOM 372 H1' ADE 12 -7.490 7.183 12.639 1.00 0.00 A -ATOM 373 N9 ADE 12 -5.417 6.949 12.917 1.00 0.00 A -ATOM 374 C5 ADE 12 -3.693 8.321 12.830 1.00 0.00 A -ATOM 375 N7 ADE 12 -3.157 7.043 13.020 1.00 0.00 A -ATOM 376 C8 ADE 12 -4.226 6.316 13.057 1.00 0.00 A -ATOM 377 H8 ADE 12 -4.171 5.237 13.186 1.00 0.00 A -ATOM 378 N1 ADE 12 -3.941 10.629 12.522 1.00 0.00 A -ATOM 379 C2 ADE 12 -5.257 10.448 12.476 1.00 0.00 A -ATOM 380 H2 ADE 12 -5.861 11.340 12.337 1.00 0.00 A -ATOM 381 N3 ADE 12 -5.913 9.300 12.587 1.00 0.00 A -ATOM 382 C4 ADE 12 -5.067 8.268 12.764 1.00 0.00 A -ATOM 383 C6 ADE 12 -3.111 9.589 12.699 1.00 0.00 A -ATOM 384 N6 ADE 12 -1.795 9.805 12.753 1.00 0.00 A -ATOM 385 H61 ADE 12 -1.162 9.032 12.894 1.00 0.00 A -ATOM 386 H62 ADE 12 -1.429 10.745 12.648 1.00 0.00 A -ATOM 387 C2' ADE 12 -6.935 5.215 12.045 1.00 0.00 A -ATOM 388 H2'' ADE 12 -7.341 5.533 11.081 1.00 0.00 A -ATOM 389 O2' ADE 12 -7.468 5.708 10.823 0.00 0.00 A -ATOM 390 H2' ADE 12 -5.967 4.711 11.933 1.00 0.00 A -ATOM 391 C3' ADE 12 -7.909 4.308 12.721 1.00 0.00 A -ATOM 392 H3' ADE 12 -7.606 3.268 12.582 1.00 0.00 A -ATOM 393 O3' ADE 12 -9.231 4.514 12.212 1.00 0.00 A -ATOM 394 P GUA 13 -9.569 4.219 10.669 1.00 0.00 A -ATOM 395 O1P GUA 13 -10.964 3.722 10.568 1.00 0.00 A -ATOM 396 O2P GUA 13 -8.467 3.416 10.078 1.00 0.00 A -ATOM 397 O5' GUA 13 -9.502 5.712 10.074 1.00 0.00 A -ATOM 398 C5' GUA 13 -10.262 6.771 10.674 1.00 0.00 A -ATOM 399 H5' GUA 13 -9.915 6.931 11.687 1.00 0.00 A -ATOM 400 H5'' GUA 13 -11.321 6.472 10.690 1.00 0.00 A -ATOM 401 C4' GUA 13 -10.106 8.098 9.939 1.00 0.00 A -ATOM 402 H4' GUA 13 -10.856 8.800 10.304 1.00 0.00 A -ATOM 403 O4' GUA 13 -8.786 8.662 10.158 1.00 0.00 A -ATOM 404 C1' GUA 13 -8.107 8.815 8.888 1.00 0.00 A -ATOM 405 H1' GUA 13 -8.123 9.865 8.595 1.00 0.00 A -ATOM 406 N9 GUA 13 -6.709 8.354 8.973 1.00 0.00 A -ATOM 407 C4 GUA 13 -5.588 9.146 8.985 1.00 0.00 A -ATOM 408 N2 GUA 13 -4.124 12.296 8.784 1.00 0.00 A -ATOM 409 H21 GUA 13 -3.184 12.667 8.819 1.00 0.00 A -ATOM 410 H22 GUA 13 -4.906 12.918 8.649 1.00 0.00 A -ATOM 411 N3 GUA 13 -5.570 10.492 8.868 1.00 0.00 A -ATOM 412 C2 GUA 13 -4.330 10.984 8.915 1.00 0.00 A -ATOM 413 N1 GUA 13 -3.206 10.202 9.073 1.00 0.00 A -ATOM 414 H1 GUA 13 -2.315 10.646 9.124 1.00 0.00 A -ATOM 415 C6 GUA 13 -3.197 8.821 9.193 1.00 0.00 A -ATOM 416 O6 GUA 13 -2.131 8.221 9.329 1.00 0.00 A -ATOM 417 C5 GUA 13 -4.509 8.289 9.140 1.00 0.00 A -ATOM 418 N7 GUA 13 -4.941 6.963 9.220 1.00 0.00 A -ATOM 419 C8 GUA 13 -6.219 7.099 9.112 1.00 0.00 A -ATOM 420 H8 GUA 13 -6.878 6.234 9.115 1.00 0.00 A -ATOM 421 C2' GUA 13 -8.891 8.009 7.886 1.00 0.00 A -ATOM 422 H2'' GUA 13 -8.913 8.529 6.925 1.00 0.00 A -ATOM 423 O2' GUA 13 -8.878 8.756 6.677 0.00 0.00 A -ATOM 424 H2' GUA 13 -8.460 7.004 7.796 1.00 0.00 A -ATOM 425 C3' GUA 13 -10.275 7.918 8.438 1.00 0.00 A -ATOM 426 H3' GUA 13 -10.699 6.935 8.226 1.00 0.00 A -ATOM 427 O3' GUA 13 -11.101 8.949 7.886 1.00 0.00 A -ATOM 428 P GUA 14 -11.390 9.003 6.307 1.00 0.00 A -ATOM 429 O1P GUA 14 -12.822 9.326 6.088 1.00 0.00 A -ATOM 430 O2P GUA 14 -10.812 7.792 5.669 1.00 0.00 A -ATOM 431 O5' GUA 14 -10.498 10.281 5.903 1.00 0.00 A -ATOM 432 C5' GUA 14 -10.655 11.527 6.598 1.00 0.00 A -ATOM 433 H5' GUA 14 -10.451 11.380 7.649 1.00 0.00 A -ATOM 434 H5'' GUA 14 -11.694 11.866 6.469 1.00 0.00 A -ATOM 435 C4' GUA 14 -9.695 12.606 6.108 1.00 0.00 A -ATOM 436 H4' GUA 14 -10.002 13.566 6.522 1.00 0.00 A -ATOM 437 O4' GUA 14 -8.331 12.331 6.524 1.00 0.00 A -ATOM 438 C1' GUA 14 -7.466 12.306 5.364 1.00 0.00 A -ATOM 439 H1' GUA 14 -6.929 13.252 5.293 1.00 0.00 A -ATOM 440 N9 GUA 14 -6.496 11.197 5.439 1.00 0.00 A -ATOM 441 C4 GUA 14 -5.130 11.309 5.503 1.00 0.00 A -ATOM 442 N2 GUA 14 -2.272 13.284 5.569 1.00 0.00 A -ATOM 443 H21 GUA 14 -1.276 13.122 5.619 1.00 0.00 A -ATOM 444 H22 GUA 14 -2.629 14.227 5.521 1.00 0.00 A -ATOM 445 N3 GUA 14 -4.431 12.464 5.499 1.00 0.00 A -ATOM 446 C2 GUA 14 -3.115 12.253 5.569 1.00 0.00 A -ATOM 447 N1 GUA 14 -2.546 11.000 5.639 1.00 0.00 A -ATOM 448 H1 GUA 14 -1.553 10.927 5.697 1.00 0.00 A -ATOM 449 C6 GUA 14 -3.243 9.800 5.643 1.00 0.00 A -ATOM 450 O6 GUA 14 -2.637 8.733 5.710 1.00 0.00 A -ATOM 451 C5 GUA 14 -4.640 10.014 5.568 1.00 0.00 A -ATOM 452 N7 GUA 14 -5.685 9.089 5.544 1.00 0.00 A -ATOM 453 C8 GUA 14 -6.712 9.862 5.468 1.00 0.00 A -ATOM 454 H8 GUA 14 -7.718 9.456 5.407 1.00 0.00 A -ATOM 455 C2' GUA 14 -8.370 12.156 4.168 1.00 0.00 A -ATOM 456 H2'' GUA 14 -7.981 12.746 3.333 1.00 0.00 A -ATOM 457 O2' GUA 14 -7.800 12.955 3.140 0.00 0.00 A -ATOM 458 H2' GUA 14 -8.468 11.095 3.906 1.00 0.00 A -ATOM 459 C3' GUA 14 -9.699 12.699 4.588 1.00 0.00 A -ATOM 460 H3' GUA 14 -10.498 12.075 4.180 1.00 0.00 A -ATOM 461 O3' GUA 14 -9.858 14.054 4.155 1.00 0.00 A -ATOM 462 P ADE 15 -9.872 14.418 2.591 1.00 0.00 A -ATOM 463 O1P ADE 15 -10.717 15.621 2.385 1.00 0.00 A -ATOM 464 O2P ADE 15 -10.159 13.187 1.811 1.00 0.00 A -ATOM 465 O5' ADE 15 -8.329 14.822 2.384 1.00 0.00 A -ATOM 466 C5' ADE 15 -7.757 15.905 3.132 1.00 0.00 A -ATOM 467 H5' ADE 15 -7.679 15.620 4.173 1.00 0.00 A -ATOM 468 H5'' ADE 15 -8.419 16.778 3.038 1.00 0.00 A -ATOM 469 C4' ADE 15 -6.352 16.267 2.666 1.00 0.00 A -ATOM 470 H4' ADE 15 -6.074 17.231 3.090 1.00 0.00 A -ATOM 471 O4' ADE 15 -5.384 15.271 3.088 1.00 0.00 A -ATOM 472 C1' ADE 15 -4.683 14.758 1.931 1.00 0.00 A -ATOM 473 H1' ADE 15 -3.701 15.229 1.864 1.00 0.00 A -ATOM 474 N9 ADE 15 -4.519 13.297 2.002 1.00 0.00 A -ATOM 475 C5 ADE 15 -3.661 11.277 2.155 1.00 0.00 A -ATOM 476 N7 ADE 15 -5.037 11.096 2.004 1.00 0.00 A -ATOM 477 C8 ADE 15 -5.449 12.315 1.922 1.00 0.00 A -ATOM 478 H8 ADE 15 -6.501 12.547 1.781 1.00 0.00 A -ATOM 479 N1 ADE 15 -1.372 10.906 2.425 1.00 0.00 A -ATOM 480 C2 ADE 15 -1.189 12.224 2.412 1.00 0.00 A -ATOM 481 H2 ADE 15 -0.165 12.572 2.528 1.00 0.00 A -ATOM 482 N3 ADE 15 -2.117 13.160 2.280 1.00 0.00 A -ATOM 483 C4 ADE 15 -3.341 12.615 2.156 1.00 0.00 A -ATOM 484 C6 ADE 15 -2.600 10.384 2.299 1.00 0.00 A -ATOM 485 N6 ADE 15 -2.755 9.059 2.312 1.00 0.00 A -ATOM 486 H61 ADE 15 -1.949 8.456 2.417 1.00 0.00 A -ATOM 487 H62 ADE 15 -3.677 8.658 2.219 1.00 0.00 A -ATOM 488 C2' ADE 15 -5.504 15.149 0.731 1.00 0.00 A -ATOM 489 H2'' ADE 15 -4.844 15.409 -0.102 1.00 0.00 A -ATOM 490 O2' ADE 15 -4.576 15.478 -0.294 0.00 0.00 A -ATOM 491 H2' ADE 15 -6.190 14.335 0.468 1.00 0.00 A -ATOM 492 C3' ADE 15 -6.283 16.352 1.147 1.00 0.00 A -ATOM 493 H3' ADE 15 -7.289 16.303 0.726 1.00 0.00 A -ATOM 494 O3' ADE 15 -5.624 17.548 0.722 1.00 0.00 A -ATOM 495 P THY 16 -5.398 17.836 -0.841 1.00 0.00 A -ATOM 496 O1P THY 16 -5.436 19.302 -1.072 1.00 0.00 A -ATOM 497 O2P THY 16 -6.293 16.951 -1.628 1.00 0.00 A -ATOM 498 O5' THY 16 -3.882 17.322 -1.001 1.00 0.00 A -ATOM 499 C5' THY 16 -2.838 17.907 -0.211 1.00 0.00 A -ATOM 500 H5' THY 16 -2.999 17.667 0.830 1.00 0.00 A -ATOM 501 H5'' THY 16 -2.874 18.998 -0.347 1.00 0.00 A -ATOM 502 C4' THY 16 -1.452 17.388 -0.574 1.00 0.00 A -ATOM 503 H4' THY 16 -0.705 17.995 -0.065 1.00 0.00 A -ATOM 504 O4' THY 16 -1.281 16.003 -0.170 1.00 0.00 A -ATOM 505 C1' THY 16 -0.834 15.221 -1.300 1.00 0.00 A -ATOM 506 H1' THY 16 0.246 15.085 -1.238 1.00 0.00 A -ATOM 507 N1 THY 16 -1.493 13.897 -1.332 1.00 0.00 A -ATOM 508 C6 THY 16 -2.847 13.782 -1.508 1.00 0.00 A -ATOM 509 H6 THY 16 -3.452 14.681 -1.599 1.00 0.00 A -ATOM 510 C2 THY 16 -0.686 12.781 -1.194 1.00 0.00 A -ATOM 511 O2 THY 16 0.530 12.869 -1.037 1.00 0.00 A -ATOM 512 N3 THY 16 -1.328 11.558 -1.246 1.00 0.00 A -ATOM 513 H3 THY 16 -0.760 10.742 -1.134 1.00 0.00 A -ATOM 514 C4 THY 16 -2.685 11.356 -1.424 1.00 0.00 A -ATOM 515 O4 THY 16 -3.150 10.219 -1.466 1.00 0.00 A -ATOM 516 C5 THY 16 -3.447 12.577 -1.557 1.00 0.00 A -ATOM 517 C5M THY 16 -4.957 12.501 -1.760 1.00 0.00 A -ATOM 518 H51 THY 16 -5.422 13.407 -1.376 1.00 0.00 A -ATOM 519 H52 THY 16 -5.352 11.634 -1.237 1.00 0.00 A -ATOM 520 H53 THY 16 -5.176 12.408 -2.814 1.00 0.00 A -ATOM 521 C2' THY 16 -1.160 16.036 -2.531 1.00 0.00 A -ATOM 522 H2'' THY 16 -0.365 15.912 -3.277 1.00 0.00 A -ATOM 523 O2' THY 16 -0.085 15.830 -3.438 0.00 0.00 A -ATOM 524 H2' THY 16 -2.137 15.741 -2.930 1.00 0.00 A -ATOM 525 C3' THY 16 -1.207 17.463 -2.076 1.00 0.00 A -ATOM 526 H3' THY 16 -2.043 17.975 -2.561 1.00 0.00 A -ATOM 527 O3' THY 16 0.021 18.138 -2.365 1.00 0.00 A -END +REMARK original generated coordinate pdb file +ATOM 1 P ADE 1 3.759 0.457 0.076 0.00 0.00 A +ATOM 2 O1P ADE 1 2.779 0.279 0.171 0.00 0.00 A +ATOM 3 O2P ADE 1 4.489 -0.205 0.246 0.00 0.00 A +ATOM 4 O5' ADE 1 3.969 1.972 -0.393 1.00 0.00 A +ATOM 5 C5' ADE 1 5.044 2.279 -1.290 1.00 0.00 A +ATOM 6 H5' ADE 1 4.671 2.290 -2.305 1.00 0.00 A +ATOM 7 H5'' ADE 1 5.816 1.501 -1.189 1.00 0.00 A +ATOM 8 C4' ADE 1 5.648 3.651 -1.028 1.00 0.00 A +ATOM 9 H4' ADE 1 6.646 3.694 -1.462 1.00 0.00 A +ATOM 10 O4' ADE 1 4.831 4.694 -1.619 1.00 0.00 A +ATOM 11 C1' ADE 1 4.388 5.605 -0.589 1.00 0.00 A +ATOM 12 H1' ADE 1 4.979 6.519 -0.638 1.00 0.00 A +ATOM 13 N9 ADE 1 2.960 5.940 -0.745 1.00 0.00 A +ATOM 14 C5 ADE 1 1.063 7.037 -0.974 1.00 0.00 A +ATOM 15 N7 ADE 1 0.730 5.679 -1.026 1.00 0.00 A +ATOM 16 C8 ADE 1 1.887 5.123 -0.884 1.00 0.00 A +ATOM 17 H8 ADE 1 1.997 4.038 -0.875 1.00 0.00 A +ATOM 18 N1 ADE 1 0.950 9.380 -0.971 1.00 0.00 A +ATOM 19 C2 ADE 1 2.273 9.407 -0.803 1.00 0.00 A +ATOM 20 H2 ADE 1 2.731 10.392 -0.730 1.00 0.00 A +ATOM 21 N3 ADE 1 3.091 8.365 -0.708 1.00 0.00 A +ATOM 22 C4 ADE 1 2.417 7.202 -0.802 1.00 0.00 A +ATOM 23 C6 ADE 1 0.298 8.207 -1.063 1.00 0.00 A +ATOM 24 N6 ADE 1 -1.022 8.204 -1.236 1.00 0.00 A +ATOM 25 H61 ADE 1 -1.526 9.077 -1.294 1.00 0.00 A +ATOM 26 H62 ADE 1 -1.520 7.328 -1.309 1.00 0.00 A +ATOM 27 C2' ADE 1 4.646 4.918 0.727 1.00 0.00 A +ATOM 28 H2'' ADE 1 4.989 5.649 1.459 1.00 0.00 A +ATOM 29 O2' ADE 1 5.086 5.931 1.621 0.00 0.00 A +ATOM 30 H2' ADE 1 3.741 4.398 1.062 1.00 0.00 A +ATOM 31 C3' ADE 1 5.735 3.930 0.467 1.00 0.00 A +ATOM 32 H3' ADE 1 5.546 3.013 1.029 1.00 0.00 A +ATOM 33 O3' ADE 1 7.011 4.478 0.823 1.00 0.00 A +ATOM 34 P THY 2 7.364 4.806 2.358 1.00 0.00 A +ATOM 35 O1P THY 2 8.839 4.776 2.530 1.00 0.00 A +ATOM 36 O2P THY 2 6.515 3.962 3.238 1.00 0.00 A +ATOM 37 O5' THY 2 6.861 6.330 2.454 1.00 0.00 A +ATOM 38 C5' THY 2 7.276 7.297 1.480 1.00 0.00 A +ATOM 39 H5' THY 2 6.804 7.074 0.532 1.00 0.00 A +ATOM 40 H5'' THY 2 8.368 7.233 1.371 1.00 0.00 A +ATOM 41 C4' THY 2 6.873 8.719 1.849 1.00 0.00 A +ATOM 42 H4' THY 2 7.506 9.419 1.306 1.00 0.00 A +ATOM 43 O4' THY 2 5.486 8.978 1.507 1.00 0.00 A +ATOM 44 C1' THY 2 4.768 9.415 2.684 1.00 0.00 A +ATOM 45 H1' THY 2 4.665 10.500 2.653 1.00 0.00 A +ATOM 46 N1 THY 2 3.423 8.799 2.747 1.00 0.00 A +ATOM 47 C6 THY 2 3.266 7.442 2.852 1.00 0.00 A +ATOM 48 H6 THY 2 4.140 6.814 2.982 1.00 0.00 A +ATOM 49 C2 THY 2 2.337 9.639 2.626 1.00 0.00 A +ATOM 50 O2 THY 2 2.458 10.860 2.552 1.00 0.00 A +ATOM 51 N3 THY 2 1.099 9.029 2.606 1.00 0.00 A +ATOM 52 H3 THY 2 0.308 9.625 2.509 1.00 0.00 A +ATOM 53 C4 THY 2 0.851 7.673 2.697 1.00 0.00 A +ATOM 54 O4 THY 2 -0.302 7.243 2.661 1.00 0.00 A +ATOM 55 C5 THY 2 2.045 6.871 2.827 1.00 0.00 A +ATOM 56 C5M THY 2 1.928 5.354 2.910 1.00 0.00 A +ATOM 57 H51 THY 2 1.213 5.085 3.678 1.00 0.00 A +ATOM 58 H52 THY 2 2.903 4.926 3.150 1.00 0.00 A +ATOM 59 H53 THY 2 1.589 4.964 1.960 1.00 0.00 A +ATOM 60 C2' THY 2 5.626 9.038 3.865 1.00 0.00 A +ATOM 61 H2'' THY 2 5.564 9.815 4.630 1.00 0.00 A +ATOM 62 O2' THY 2 5.490 10.094 4.806 0.00 0.00 A +ATOM 63 H2' THY 2 5.324 8.059 4.256 1.00 0.00 A +ATOM 64 C3' THY 2 7.025 8.967 3.345 1.00 0.00 A +ATOM 65 H3' THY 2 7.553 8.132 3.808 1.00 0.00 A +ATOM 66 O3' THY 2 7.719 10.196 3.596 1.00 0.00 A +ATOM 67 P CYT 3 7.980 10.697 5.100 1.00 0.00 A +ATOM 68 O1P CYT 3 9.280 11.413 5.150 1.00 0.00 A +ATOM 69 O2P CYT 3 7.737 9.569 6.034 1.00 0.00 A +ATOM 70 O5' CYT 3 6.789 11.768 5.253 1.00 0.00 A +ATOM 71 C5' CYT 3 6.720 12.904 4.380 1.00 0.00 A +ATOM 72 H5' CYT 3 6.534 12.568 3.369 1.00 0.00 A +ATOM 73 H5'' CYT 3 7.686 13.430 4.420 1.00 0.00 A +ATOM 74 C4' CYT 3 5.593 13.866 4.739 1.00 0.00 A +ATOM 75 H4' CYT 3 5.709 14.779 4.157 1.00 0.00 A +ATOM 76 O4' CYT 3 4.292 13.290 4.450 1.00 0.00 A +ATOM 77 C1' CYT 3 3.465 13.339 5.637 1.00 0.00 A +ATOM 78 H1' CYT 3 2.791 14.192 5.565 1.00 0.00 A +ATOM 79 N1 CYT 3 2.672 12.098 5.790 1.00 0.00 A +ATOM 80 C6 CYT 3 3.282 10.889 5.955 1.00 0.00 A +ATOM 81 H6 CYT 3 4.365 10.840 6.032 1.00 0.00 A +ATOM 82 C5 CYT 3 2.559 9.760 6.045 1.00 0.00 A +ATOM 83 H5 CYT 3 3.039 8.789 6.164 1.00 0.00 A +ATOM 84 C2 CYT 3 1.294 12.207 5.721 1.00 0.00 A +ATOM 85 O2 CYT 3 0.763 13.308 5.588 1.00 0.00 A +ATOM 86 N3 CYT 3 0.558 11.072 5.813 1.00 0.00 A +ATOM 87 C4 CYT 3 1.140 9.878 5.968 1.00 0.00 A +ATOM 88 N4 CYT 3 0.379 8.788 6.044 1.00 0.00 A +ATOM 89 H41 CYT 3 0.806 7.880 6.157 1.00 0.00 A +ATOM 90 H42 CYT 3 -0.626 8.869 5.991 1.00 0.00 A +ATOM 91 C2' CYT 3 4.407 13.552 6.796 1.00 0.00 A +ATOM 92 H2'' CYT 3 3.940 14.214 7.534 1.00 0.00 A +ATOM 93 O2' CYT 3 3.733 14.417 7.700 0.00 0.00 A +ATOM 94 H2' CYT 3 4.689 12.590 7.236 1.00 0.00 A +ATOM 95 C3' CYT 3 5.616 14.221 6.221 1.00 0.00 A +ATOM 96 H3' CYT 3 6.518 13.815 6.685 1.00 0.00 A +ATOM 97 O3' CYT 3 5.555 15.639 6.408 1.00 0.00 A +ATOM 98 P CYT 4 5.538 16.275 7.882 1.00 0.00 A +ATOM 99 O1P CYT 4 6.177 17.615 7.835 1.00 0.00 A +ATOM 100 O2P CYT 4 6.033 15.266 8.851 1.00 0.00 A +ATOM 101 O5' CYT 4 3.955 16.462 8.083 1.00 0.00 A +ATOM 102 C5' CYT 4 3.157 17.011 7.025 1.00 0.00 A +ATOM 103 H5' CYT 4 3.112 16.305 6.208 1.00 0.00 A +ATOM 104 H5'' CYT 4 3.632 17.942 6.682 1.00 0.00 A +ATOM 105 C4' CYT 4 1.722 17.289 7.449 1.00 0.00 A +ATOM 106 H4' CYT 4 1.321 18.095 6.835 1.00 0.00 A +ATOM 107 O4' CYT 4 0.888 16.113 7.280 1.00 0.00 A +ATOM 108 C1' CYT 4 0.232 15.803 8.531 1.00 0.00 A +ATOM 109 H1' CYT 4 -0.791 16.175 8.498 1.00 0.00 A +ATOM 110 N1 CYT 4 0.215 14.343 8.782 1.00 0.00 A +ATOM 111 C6 CYT 4 1.375 13.644 8.967 1.00 0.00 A +ATOM 112 H6 CYT 4 2.327 14.165 8.951 1.00 0.00 A +ATOM 113 C5 CYT 4 1.351 12.313 9.169 1.00 0.00 A +ATOM 114 H5 CYT 4 2.272 11.748 9.314 1.00 0.00 A +ATOM 115 C2 CYT 4 -1.018 13.712 8.800 1.00 0.00 A +ATOM 116 O2 CYT 4 -2.050 14.359 8.636 1.00 0.00 A +ATOM 117 N3 CYT 4 -1.049 12.370 9.003 1.00 0.00 A +ATOM 118 C4 CYT 4 0.078 11.668 9.183 1.00 0.00 A +ATOM 119 N4 CYT 4 0.010 10.348 9.372 1.00 0.00 A +ATOM 120 H41 CYT 4 0.855 9.814 9.502 1.00 0.00 A +ATOM 121 H42 CYT 4 -0.885 9.881 9.386 1.00 0.00 A +ATOM 122 C2' CYT 4 0.992 16.545 9.602 1.00 0.00 A +ATOM 123 H2'' CYT 4 0.293 16.923 10.350 1.00 0.00 A +ATOM 124 O2' CYT 4 0.020 17.000 10.533 0.00 0.00 A +ATOM 125 H2' CYT 4 1.751 15.896 10.049 1.00 0.00 A +ATOM 126 C3' CYT 4 1.648 17.697 8.914 1.00 0.00 A +ATOM 127 H3' CYT 4 2.656 17.837 9.310 1.00 0.00 A +ATOM 128 O3' CYT 4 0.881 18.892 9.085 1.00 0.00 A +ATOM 129 P THY 5 0.647 19.496 10.554 1.00 0.00 A +ATOM 130 O1P THY 5 0.561 20.975 10.457 1.00 0.00 A +ATOM 131 O2P THY 5 1.626 18.884 11.487 1.00 0.00 A +ATOM 132 O5' THY 5 -0.815 18.907 10.868 1.00 0.00 A +ATOM 133 C5' THY 5 -1.928 19.273 10.041 1.00 0.00 A +ATOM 134 H5' THY 5 -1.694 19.051 9.009 1.00 0.00 A +ATOM 135 H5'' THY 5 -2.101 20.352 10.155 1.00 0.00 A +ATOM 136 C4' THY 5 -3.200 18.507 10.381 1.00 0.00 A +ATOM 137 H4' THY 5 -3.974 18.774 9.662 1.00 0.00 A +ATOM 138 O4' THY 5 -2.989 17.071 10.326 1.00 0.00 A +ATOM 139 C1' THY 5 -3.410 16.473 11.574 1.00 0.00 A +ATOM 140 H1' THY 5 -4.409 16.057 11.449 1.00 0.00 A +ATOM 141 N1 THY 5 -2.482 15.396 11.992 1.00 0.00 A +ATOM 142 C6 THY 5 -1.153 15.644 12.196 1.00 0.00 A +ATOM 143 H6 THY 5 -0.790 16.668 12.147 1.00 0.00 A +ATOM 144 C2 THY 5 -3.000 14.117 12.096 1.00 0.00 A +ATOM 145 O2 THY 5 -4.196 13.881 11.943 1.00 0.00 A +ATOM 146 N3 THY 5 -2.094 13.117 12.403 1.00 0.00 A +ATOM 147 H3 THY 5 -2.449 12.182 12.472 1.00 0.00 A +ATOM 148 C4 THY 5 -0.742 13.280 12.614 1.00 0.00 A +ATOM 149 O4 THY 5 -0.032 12.308 12.873 1.00 0.00 A +ATOM 150 C5 THY 5 -0.289 14.648 12.492 1.00 0.00 A +ATOM 151 C5M THY 5 1.191 14.967 12.669 1.00 0.00 A +ATOM 152 H51 THY 5 1.550 14.530 13.594 1.00 0.00 A +ATOM 153 H52 THY 5 1.333 16.047 12.693 1.00 0.00 A +ATOM 154 H53 THY 5 1.751 14.549 11.843 1.00 0.00 A +ATOM 155 C2' THY 5 -3.465 17.594 12.579 1.00 0.00 A +ATOM 156 H2'' THY 5 -4.306 17.435 13.264 1.00 0.00 A +ATOM 157 O2' THY 5 -4.580 17.322 13.417 0.00 0.00 A +ATOM 158 H2' THY 5 -2.511 17.661 13.116 1.00 0.00 A +ATOM 159 C3' THY 5 -3.691 18.844 11.781 1.00 0.00 A +ATOM 160 H3' THY 5 -3.096 19.660 12.197 1.00 0.00 A +ATOM 161 O3' THY 5 -5.077 19.199 11.761 1.00 0.00 A +ATOM 162 P ADE 6 -5.692 20.169 12.882 1.00 0.00 A +ATOM 163 O1P ADE 6 -6.683 21.072 12.244 1.00 0.00 A +ATOM 164 O2P ADE 6 -4.583 20.752 13.678 1.00 0.00 A +ATOM 165 O5' ADE 6 -6.471 19.094 13.785 1.00 0.00 A +ATOM 166 C5' ADE 6 -7.541 18.319 13.232 1.00 0.00 A +ATOM 167 H5' ADE 6 -7.211 17.850 12.315 1.00 0.00 A +ATOM 168 H5'' ADE 6 -8.386 18.991 13.021 1.00 0.00 A +ATOM 169 C4' ADE 6 -7.985 17.203 14.162 1.00 0.00 A +ATOM 170 H4' ADE 6 -8.974 16.858 13.863 1.00 0.00 A +ATOM 171 O4' ADE 6 -7.060 16.084 14.109 1.00 0.00 A +ATOM 172 C1' ADE 6 -6.626 15.770 15.448 1.00 0.00 A +ATOM 173 H1' ADE 6 -7.241 14.954 15.831 1.00 0.00 A +ATOM 174 N9 ADE 6 -5.206 15.361 15.499 1.00 0.00 A +ATOM 175 C5 ADE 6 -3.380 14.152 15.741 1.00 0.00 A +ATOM 176 N7 ADE 6 -2.949 15.480 15.662 1.00 0.00 A +ATOM 177 C8 ADE 6 -4.070 16.107 15.522 1.00 0.00 A +ATOM 178 H8 ADE 6 -4.100 17.190 15.422 1.00 0.00 A +ATOM 179 N1 ADE 6 -3.441 11.818 15.931 1.00 0.00 A +ATOM 180 C2 ADE 6 -4.769 11.882 15.816 1.00 0.00 A +ATOM 181 H2 ADE 6 -5.306 10.937 15.837 1.00 0.00 A +ATOM 182 N3 ADE 6 -5.509 12.969 15.668 1.00 0.00 A +ATOM 183 C4 ADE 6 -4.749 14.077 15.638 1.00 0.00 A +ATOM 184 C6 ADE 6 -2.701 12.939 15.900 1.00 0.00 A +ATOM 185 N6 ADE 6 -1.379 12.855 16.045 1.00 0.00 A +ATOM 186 H61 ADE 6 -0.941 11.951 16.157 1.00 0.00 A +ATOM 187 H62 ADE 6 -0.816 13.693 16.045 1.00 0.00 A +ATOM 188 C2' ADE 6 -6.890 17.001 16.274 1.00 0.00 A +ATOM 189 H2'' ADE 6 -7.162 16.715 17.291 1.00 0.00 A +ATOM 190 O2' ADE 6 -7.256 16.544 17.569 0.00 0.00 A +ATOM 191 H2' ADE 6 -6.014 17.659 16.261 1.00 0.00 A +ATOM 192 C3' ADE 6 -8.041 17.687 15.608 1.00 0.00 A +ATOM 193 H3' ADE 6 -7.903 18.770 15.646 1.00 0.00 A +ATOM 194 O3' ADE 6 -9.285 17.318 16.221 1.00 0.00 A +ATOM 195 P GUA 7 -9.843 18.105 17.507 1.00 0.00 A +ATOM 196 O1P GUA 7 -11.229 18.561 17.226 1.00 0.00 A +ATOM 197 O2P GUA 7 -8.828 19.100 17.939 1.00 0.00 A +ATOM 198 O5' GUA 7 -9.897 16.910 18.585 1.00 0.00 A +ATOM 199 C5' GUA 7 -10.177 15.560 18.181 1.00 0.00 A +ATOM 200 H5' GUA 7 -9.745 15.381 17.207 1.00 0.00 A +ATOM 201 H5'' GUA 7 -11.270 15.426 18.114 1.00 0.00 A +ATOM 202 C4' GUA 7 -9.561 14.522 19.125 1.00 0.00 A +ATOM 203 H4' GUA 7 -10.025 13.556 18.935 1.00 0.00 A +ATOM 204 O4' GUA 7 -8.133 14.405 18.887 1.00 0.00 A +ATOM 205 C1' GUA 7 -7.410 14.638 20.119 1.00 0.00 A +ATOM 206 H1' GUA 7 -7.083 13.684 20.529 1.00 0.00 A +ATOM 207 N9 GUA 7 -6.233 15.500 19.896 1.00 0.00 A +ATOM 208 C4 GUA 7 -4.911 15.108 19.923 1.00 0.00 A +ATOM 209 N2 GUA 7 -2.510 12.617 20.326 1.00 0.00 A +ATOM 210 H21 GUA 7 -1.501 12.565 20.299 1.00 0.00 A +ATOM 211 H22 GUA 7 -3.053 11.785 20.505 1.00 0.00 A +ATOM 212 N3 GUA 7 -4.458 13.854 20.155 1.00 0.00 A +ATOM 213 C2 GUA 7 -3.123 13.783 20.119 1.00 0.00 A +ATOM 214 N1 GUA 7 -2.305 14.867 19.874 1.00 0.00 A +ATOM 215 H1 GUA 7 -1.305 14.730 19.867 1.00 0.00 A +ATOM 216 C6 GUA 7 -2.744 16.163 19.632 1.00 0.00 A +ATOM 217 O6 GUA 7 -1.932 17.060 19.420 1.00 0.00 A +ATOM 218 C5 GUA 7 -4.162 16.248 19.668 1.00 0.00 A +ATOM 219 N7 GUA 7 -4.998 17.354 19.481 1.00 0.00 A +ATOM 220 C8 GUA 7 -6.168 16.829 19.630 1.00 0.00 A +ATOM 221 H8 GUA 7 -7.071 17.433 19.552 1.00 0.00 A +ATOM 222 C2' GUA 7 -8.383 15.282 21.074 1.00 0.00 A +ATOM 223 H2'' GUA 7 -8.214 14.899 22.086 1.00 0.00 A +ATOM 224 O2' GUA 7 -8.103 14.731 22.354 0.00 0.00 A +ATOM 225 H2' GUA 7 -8.286 16.373 21.035 1.00 0.00 A +ATOM 226 C3' GUA 7 -9.744 14.878 20.608 1.00 0.00 A +ATOM 227 H3' GUA 7 -10.429 15.719 20.727 1.00 0.00 A +ATOM 228 O3' GUA 7 -10.214 13.747 21.352 1.00 0.00 A +ATOM 229 P THY 8 -10.470 13.861 22.933 1.00 0.00 A +ATOM 230 O1P THY 8 -11.662 13.049 23.287 1.00 0.00 A +ATOM 231 O2P THY 8 -10.423 15.292 23.326 1.00 0.00 A +ATOM 232 O5' THY 8 -9.152 13.125 23.489 1.00 0.00 A +ATOM 233 C5' THY 8 -9.105 11.695 23.588 1.00 0.00 A +ATOM 234 H5' THY 8 -9.468 11.262 22.666 1.00 0.00 A +ATOM 235 H5'' THY 8 -9.754 11.381 24.418 1.00 0.00 A +ATOM 236 C4' THY 8 -7.687 11.168 23.791 1.00 0.00 A +ATOM 237 H4' THY 8 -7.609 10.181 23.338 1.00 0.00 A +ATOM 238 O4' THY 8 -6.715 12.044 23.168 1.00 0.00 A +ATOM 239 C1' THY 8 -5.719 12.435 24.137 1.00 0.00 A +ATOM 240 H1' THY 8 -4.826 11.809 24.000 1.00 0.00 A +ATOM 241 N1 THY 8 -5.347 13.860 23.988 1.00 0.00 A +ATOM 242 C6 THY 8 -6.259 14.865 24.197 1.00 0.00 A +ATOM 243 H6 THY 8 -7.285 14.614 24.463 1.00 0.00 A +ATOM 244 C2 THY 8 -4.038 14.136 23.637 1.00 0.00 A +ATOM 245 O2 THY 8 -3.212 13.247 23.443 1.00 0.00 A +ATOM 246 N3 THY 8 -3.711 15.473 23.513 1.00 0.00 A +ATOM 247 H3 THY 8 -2.758 15.688 23.257 1.00 0.00 A +ATOM 248 C4 THY 8 -4.564 16.543 23.707 1.00 0.00 A +ATOM 249 O4 THY 8 -4.163 17.697 23.570 1.00 0.00 A +ATOM 250 C5 THY 8 -5.910 16.163 24.071 1.00 0.00 A +ATOM 251 C5M THY 8 -6.952 17.250 24.322 1.00 0.00 A +ATOM 252 H51 THY 8 -7.951 16.823 24.241 1.00 0.00 A +ATOM 253 H52 THY 8 -6.834 18.044 23.584 1.00 0.00 A +ATOM 254 H53 THY 8 -6.813 17.662 25.322 1.00 0.00 A +ATOM 255 C2' THY 8 -6.324 12.155 25.493 1.00 0.00 A +ATOM 256 H2'' THY 8 -5.551 11.817 26.188 1.00 0.00 A +ATOM 257 O2' THY 8 -5.259 11.702 26.317 0.00 0.00 A +ATOM 258 H2' THY 8 -6.834 13.050 25.864 1.00 0.00 A +ATOM 259 C3' THY 8 -7.326 11.065 25.272 1.00 0.00 A +ATOM 260 H3' THY 8 -8.207 11.245 25.890 1.00 0.00 A +ATOM 261 O3' THY 8 -6.760 9.782 25.572 1.00 0.00 A +ATOM 262 P THY 9 -6.511 9.330 27.094 1.00 0.00 A +ATOM 263 O1P THY 9 -6.391 7.851 27.145 1.00 0.00 A +ATOM 264 O2P THY 9 -7.505 10.007 27.965 1.00 0.00 A +ATOM 265 O5' THY 9 -5.064 9.980 27.352 1.00 0.00 A +ATOM 266 C5' THY 9 -3.880 9.385 26.799 1.00 0.00 A +ATOM 267 H5' THY 9 -4.151 8.500 26.239 1.00 0.00 A +ATOM 268 H5'' THY 9 -3.212 9.106 27.628 1.00 0.00 A +ATOM 269 C4' THY 9 -3.160 10.317 25.831 1.00 0.00 A +ATOM 270 H4' THY 9 -3.569 10.180 24.831 1.00 0.00 A +ATOM 271 O4' THY 9 -3.322 11.705 26.223 1.00 0.00 A +ATOM 272 C1' THY 9 -2.022 12.314 26.402 1.00 0.00 A +ATOM 273 H1' THY 9 -1.789 12.931 25.535 1.00 0.00 A +ATOM 274 N1 THY 9 -1.980 13.144 27.620 1.00 0.00 A +ATOM 275 C6 THY 9 -2.301 12.617 28.841 1.00 0.00 A +ATOM 276 H6 THY 9 -2.602 11.572 28.910 1.00 0.00 A +ATOM 277 C2 THY 9 -1.594 14.462 27.479 1.00 0.00 A +ATOM 278 O2 THY 9 -1.304 14.946 26.388 1.00 0.00 A +ATOM 279 N3 THY 9 -1.550 15.208 28.642 1.00 0.00 A +ATOM 280 H3 THY 9 -1.266 16.173 28.556 1.00 0.00 A +ATOM 281 C4 THY 9 -1.856 14.754 29.913 1.00 0.00 A +ATOM 282 O4 THY 9 -1.781 15.506 30.882 1.00 0.00 A +ATOM 283 C5 THY 9 -2.250 13.364 29.961 1.00 0.00 A +ATOM 284 C5M THY 9 -2.613 12.733 31.301 1.00 0.00 A +ATOM 285 H51 THY 9 -3.440 13.282 31.750 1.00 0.00 A +ATOM 286 H52 THY 9 -1.749 12.768 31.965 1.00 0.00 A +ATOM 287 H53 THY 9 -2.907 11.695 31.144 1.00 0.00 A +ATOM 288 C2' THY 9 -1.031 11.183 26.492 1.00 0.00 A +ATOM 289 H2'' THY 9 -0.104 11.461 25.976 1.00 0.00 A +ATOM 290 O2' THY 9 0.130 11.618 25.797 0.00 0.00 A +ATOM 291 H2' THY 9 -0.850 10.929 27.544 1.00 0.00 A +ATOM 292 C3' THY 9 -1.667 10.028 25.792 1.00 0.00 A +ATOM 293 H3' THY 9 -1.452 9.104 26.331 1.00 0.00 A +ATOM 294 O3' THY 9 -1.201 9.937 24.447 1.00 0.00 A +ATOM 295 P ADE 10 -0.315 8.688 23.992 1.00 0.00 A +ATOM 296 O1P ADE 10 0.551 8.277 25.125 1.00 0.00 A +ATOM 297 O2P ADE 10 0.304 8.985 22.676 1.00 0.00 A +ATOM 298 O5' ADE 10 -1.467 7.588 23.799 1.00 0.00 A +ATOM 299 C5' ADE 10 -1.147 6.209 23.981 1.00 0.00 A +ATOM 300 H5' ADE 10 -1.499 5.914 24.943 1.00 0.00 A +ATOM 301 H5'' ADE 10 -0.058 6.091 23.938 1.00 0.00 A +ATOM 302 C4' ADE 10 -1.836 5.303 22.968 1.00 0.00 A +ATOM 303 H4' ADE 10 -2.067 4.345 23.431 1.00 0.00 A +ATOM 304 O4' ADE 10 -3.058 5.912 22.482 1.00 0.00 A +ATOM 305 C1' ADE 10 -2.814 6.401 21.156 1.00 0.00 A +ATOM 306 H1' ADE 10 -3.405 5.820 20.462 1.00 0.00 A +ATOM 307 N9 ADE 10 -3.245 7.804 21.056 1.00 0.00 A +ATOM 308 C5 ADE 10 -4.488 9.625 21.105 1.00 0.00 A +ATOM 309 N7 ADE 10 -3.166 10.059 21.189 1.00 0.00 A +ATOM 310 C8 ADE 10 -2.525 8.939 21.164 1.00 0.00 A +ATOM 311 H8 ADE 10 -1.467 8.901 21.352 1.00 0.00 A +ATOM 312 N1 ADE 10 -6.829 9.568 20.995 1.00 0.00 A +ATOM 313 C2 ADE 10 -6.756 8.238 20.930 1.00 0.00 A +ATOM 314 H2 ADE 10 -7.703 7.703 20.862 1.00 0.00 A +ATOM 315 N3 ADE 10 -5.655 7.493 20.942 1.00 0.00 A +ATOM 316 C4 ADE 10 -4.547 8.257 21.031 1.00 0.00 A +ATOM 317 C6 ADE 10 -5.708 10.306 21.082 1.00 0.00 A +ATOM 318 N6 ADE 10 -5.798 11.634 21.109 1.00 0.00 A +ATOM 319 H61 ADE 10 -4.961 12.197 21.148 1.00 0.00 A +ATOM 320 H62 ADE 10 -6.705 12.077 21.097 1.00 0.00 A +ATOM 321 C2' ADE 10 -1.353 6.163 20.832 1.00 0.00 A +ATOM 322 H2'' ADE 10 -1.255 5.812 19.797 1.00 0.00 A +ATOM 323 O2' ADE 10 -1.304 5.706 19.487 0.00 0.00 A +ATOM 324 H2' ADE 10 -0.763 7.061 21.013 1.00 0.00 A +ATOM 325 C3' ADE 10 -0.922 5.089 21.772 1.00 0.00 A +ATOM 326 H3' ADE 10 0.123 5.233 22.050 1.00 0.00 A +ATOM 327 O3' ADE 10 -1.116 3.794 21.200 1.00 0.00 A +ATOM 328 P THY 11 -0.300 3.354 19.891 1.00 0.00 A +ATOM 329 O1P THY 11 0.097 1.930 20.024 1.00 0.00 A +ATOM 330 O2P THY 11 0.734 4.378 19.599 1.00 0.00 A +ATOM 331 O5' THY 11 -1.473 3.469 18.803 1.00 0.00 A +ATOM 332 C5' THY 11 -2.662 2.689 18.966 1.00 0.00 A +ATOM 333 H5' THY 11 -2.944 2.680 20.010 1.00 0.00 A +ATOM 334 H5'' THY 11 -2.451 1.662 18.634 1.00 0.00 A +ATOM 335 C4' THY 11 -3.851 3.245 18.197 1.00 0.00 A +ATOM 336 H4' THY 11 -4.766 2.847 18.632 1.00 0.00 A +ATOM 337 O4' THY 11 -3.901 4.696 18.258 1.00 0.00 A +ATOM 338 C1' THY 11 -4.030 5.228 16.919 1.00 0.00 A +ATOM 339 H1' THY 11 -5.080 5.439 16.719 1.00 0.00 A +ATOM 340 N1 THY 11 -3.239 6.466 16.744 1.00 0.00 A +ATOM 341 C6 THY 11 -1.881 6.470 16.918 1.00 0.00 A +ATOM 342 H6 THY 11 -1.372 5.540 17.168 1.00 0.00 A +ATOM 343 C2 THY 11 -3.928 7.616 16.410 1.00 0.00 A +ATOM 344 O2 THY 11 -5.147 7.627 16.255 1.00 0.00 A +ATOM 345 N3 THY 11 -3.167 8.760 16.267 1.00 0.00 A +ATOM 346 H3 THY 11 -3.656 9.597 16.002 1.00 0.00 A +ATOM 347 C4 THY 11 -1.796 8.854 16.430 1.00 0.00 A +ATOM 348 O4 THY 11 -1.220 9.932 16.292 1.00 0.00 A +ATOM 349 C5 THY 11 -1.161 7.602 16.776 1.00 0.00 A +ATOM 350 C5M THY 11 0.348 7.560 16.990 1.00 0.00 A +ATOM 351 H51 THY 11 0.804 8.445 16.550 1.00 0.00 A +ATOM 352 H52 THY 11 0.757 6.667 16.526 1.00 0.00 A +ATOM 353 H53 THY 11 0.561 7.538 18.049 1.00 0.00 A +ATOM 354 C2' THY 11 -3.564 4.136 15.992 1.00 0.00 A +ATOM 355 H2'' THY 11 -4.165 4.148 15.075 1.00 0.00 A +ATOM 356 O2' THY 11 -4.394 4.212 14.841 0.00 0.00 A +ATOM 357 H2' THY 11 -2.495 4.258 15.779 1.00 0.00 A +ATOM 358 C3' THY 11 -3.793 2.852 16.729 1.00 0.00 A +ATOM 359 H3' THY 11 -2.953 2.176 16.559 1.00 0.00 A +ATOM 360 O3' THY 11 -5.015 2.233 16.322 1.00 0.00 A +ATOM 361 P ADE 12 -5.221 1.752 14.807 1.00 0.00 A +ATOM 362 O1P ADE 12 -6.125 0.574 14.792 1.00 0.00 A +ATOM 363 O2P ADE 12 -3.895 1.663 14.146 1.00 0.00 A +ATOM 364 O5' ADE 12 -6.010 3.023 14.225 1.00 0.00 A +ATOM 365 C5' ADE 12 -7.077 3.615 14.980 1.00 0.00 A +ATOM 366 H5' ADE 12 -6.670 4.100 15.857 1.00 0.00 A +ATOM 367 H5'' ADE 12 -7.769 2.818 15.287 1.00 0.00 A +ATOM 368 C4' ADE 12 -7.824 4.680 14.194 1.00 0.00 A +ATOM 369 H4' ADE 12 -8.830 4.786 14.598 1.00 0.00 A +ATOM 370 O4' ADE 12 -7.144 5.958 14.280 1.00 0.00 A +ATOM 371 C1' ADE 12 -6.790 6.408 12.952 1.00 0.00 A +ATOM 372 H1' ADE 12 -7.490 7.183 12.639 1.00 0.00 A +ATOM 373 N9 ADE 12 -5.417 6.949 12.917 1.00 0.00 A +ATOM 374 C5 ADE 12 -3.693 8.321 12.830 1.00 0.00 A +ATOM 375 N7 ADE 12 -3.157 7.043 13.020 1.00 0.00 A +ATOM 376 C8 ADE 12 -4.226 6.316 13.057 1.00 0.00 A +ATOM 377 H8 ADE 12 -4.171 5.237 13.186 1.00 0.00 A +ATOM 378 N1 ADE 12 -3.941 10.629 12.522 1.00 0.00 A +ATOM 379 C2 ADE 12 -5.257 10.448 12.476 1.00 0.00 A +ATOM 380 H2 ADE 12 -5.861 11.340 12.337 1.00 0.00 A +ATOM 381 N3 ADE 12 -5.913 9.300 12.587 1.00 0.00 A +ATOM 382 C4 ADE 12 -5.067 8.268 12.764 1.00 0.00 A +ATOM 383 C6 ADE 12 -3.111 9.589 12.699 1.00 0.00 A +ATOM 384 N6 ADE 12 -1.795 9.805 12.753 1.00 0.00 A +ATOM 385 H61 ADE 12 -1.162 9.032 12.894 1.00 0.00 A +ATOM 386 H62 ADE 12 -1.429 10.745 12.648 1.00 0.00 A +ATOM 387 C2' ADE 12 -6.935 5.215 12.045 1.00 0.00 A +ATOM 388 H2'' ADE 12 -7.341 5.533 11.081 1.00 0.00 A +ATOM 389 O2' ADE 12 -7.468 5.708 10.823 0.00 0.00 A +ATOM 390 H2' ADE 12 -5.967 4.711 11.933 1.00 0.00 A +ATOM 391 C3' ADE 12 -7.909 4.308 12.721 1.00 0.00 A +ATOM 392 H3' ADE 12 -7.606 3.268 12.582 1.00 0.00 A +ATOM 393 O3' ADE 12 -9.231 4.514 12.212 1.00 0.00 A +ATOM 394 P GUA 13 -9.569 4.219 10.669 1.00 0.00 A +ATOM 395 O1P GUA 13 -10.964 3.722 10.568 1.00 0.00 A +ATOM 396 O2P GUA 13 -8.467 3.416 10.078 1.00 0.00 A +ATOM 397 O5' GUA 13 -9.502 5.712 10.074 1.00 0.00 A +ATOM 398 C5' GUA 13 -10.262 6.771 10.674 1.00 0.00 A +ATOM 399 H5' GUA 13 -9.915 6.931 11.687 1.00 0.00 A +ATOM 400 H5'' GUA 13 -11.321 6.472 10.690 1.00 0.00 A +ATOM 401 C4' GUA 13 -10.106 8.098 9.939 1.00 0.00 A +ATOM 402 H4' GUA 13 -10.856 8.800 10.304 1.00 0.00 A +ATOM 403 O4' GUA 13 -8.786 8.662 10.158 1.00 0.00 A +ATOM 404 C1' GUA 13 -8.107 8.815 8.888 1.00 0.00 A +ATOM 405 H1' GUA 13 -8.123 9.865 8.595 1.00 0.00 A +ATOM 406 N9 GUA 13 -6.709 8.354 8.973 1.00 0.00 A +ATOM 407 C4 GUA 13 -5.588 9.146 8.985 1.00 0.00 A +ATOM 408 N2 GUA 13 -4.124 12.296 8.784 1.00 0.00 A +ATOM 409 H21 GUA 13 -3.184 12.667 8.819 1.00 0.00 A +ATOM 410 H22 GUA 13 -4.906 12.918 8.649 1.00 0.00 A +ATOM 411 N3 GUA 13 -5.570 10.492 8.868 1.00 0.00 A +ATOM 412 C2 GUA 13 -4.330 10.984 8.915 1.00 0.00 A +ATOM 413 N1 GUA 13 -3.206 10.202 9.073 1.00 0.00 A +ATOM 414 H1 GUA 13 -2.315 10.646 9.124 1.00 0.00 A +ATOM 415 C6 GUA 13 -3.197 8.821 9.193 1.00 0.00 A +ATOM 416 O6 GUA 13 -2.131 8.221 9.329 1.00 0.00 A +ATOM 417 C5 GUA 13 -4.509 8.289 9.140 1.00 0.00 A +ATOM 418 N7 GUA 13 -4.941 6.963 9.220 1.00 0.00 A +ATOM 419 C8 GUA 13 -6.219 7.099 9.112 1.00 0.00 A +ATOM 420 H8 GUA 13 -6.878 6.234 9.115 1.00 0.00 A +ATOM 421 C2' GUA 13 -8.891 8.009 7.886 1.00 0.00 A +ATOM 422 H2'' GUA 13 -8.913 8.529 6.925 1.00 0.00 A +ATOM 423 O2' GUA 13 -8.878 8.756 6.677 0.00 0.00 A +ATOM 424 H2' GUA 13 -8.460 7.004 7.796 1.00 0.00 A +ATOM 425 C3' GUA 13 -10.275 7.918 8.438 1.00 0.00 A +ATOM 426 H3' GUA 13 -10.699 6.935 8.226 1.00 0.00 A +ATOM 427 O3' GUA 13 -11.101 8.949 7.886 1.00 0.00 A +ATOM 428 P GUA 14 -11.390 9.003 6.307 1.00 0.00 A +ATOM 429 O1P GUA 14 -12.822 9.326 6.088 1.00 0.00 A +ATOM 430 O2P GUA 14 -10.812 7.792 5.669 1.00 0.00 A +ATOM 431 O5' GUA 14 -10.498 10.281 5.903 1.00 0.00 A +ATOM 432 C5' GUA 14 -10.655 11.527 6.598 1.00 0.00 A +ATOM 433 H5' GUA 14 -10.451 11.380 7.649 1.00 0.00 A +ATOM 434 H5'' GUA 14 -11.694 11.866 6.469 1.00 0.00 A +ATOM 435 C4' GUA 14 -9.695 12.606 6.108 1.00 0.00 A +ATOM 436 H4' GUA 14 -10.002 13.566 6.522 1.00 0.00 A +ATOM 437 O4' GUA 14 -8.331 12.331 6.524 1.00 0.00 A +ATOM 438 C1' GUA 14 -7.466 12.306 5.364 1.00 0.00 A +ATOM 439 H1' GUA 14 -6.929 13.252 5.293 1.00 0.00 A +ATOM 440 N9 GUA 14 -6.496 11.197 5.439 1.00 0.00 A +ATOM 441 C4 GUA 14 -5.130 11.309 5.503 1.00 0.00 A +ATOM 442 N2 GUA 14 -2.272 13.284 5.569 1.00 0.00 A +ATOM 443 H21 GUA 14 -1.276 13.122 5.619 1.00 0.00 A +ATOM 444 H22 GUA 14 -2.629 14.227 5.521 1.00 0.00 A +ATOM 445 N3 GUA 14 -4.431 12.464 5.499 1.00 0.00 A +ATOM 446 C2 GUA 14 -3.115 12.253 5.569 1.00 0.00 A +ATOM 447 N1 GUA 14 -2.546 11.000 5.639 1.00 0.00 A +ATOM 448 H1 GUA 14 -1.553 10.927 5.697 1.00 0.00 A +ATOM 449 C6 GUA 14 -3.243 9.800 5.643 1.00 0.00 A +ATOM 450 O6 GUA 14 -2.637 8.733 5.710 1.00 0.00 A +ATOM 451 C5 GUA 14 -4.640 10.014 5.568 1.00 0.00 A +ATOM 452 N7 GUA 14 -5.685 9.089 5.544 1.00 0.00 A +ATOM 453 C8 GUA 14 -6.712 9.862 5.468 1.00 0.00 A +ATOM 454 H8 GUA 14 -7.718 9.456 5.407 1.00 0.00 A +ATOM 455 C2' GUA 14 -8.370 12.156 4.168 1.00 0.00 A +ATOM 456 H2'' GUA 14 -7.981 12.746 3.333 1.00 0.00 A +ATOM 457 O2' GUA 14 -7.800 12.955 3.140 0.00 0.00 A +ATOM 458 H2' GUA 14 -8.468 11.095 3.906 1.00 0.00 A +ATOM 459 C3' GUA 14 -9.699 12.699 4.588 1.00 0.00 A +ATOM 460 H3' GUA 14 -10.498 12.075 4.180 1.00 0.00 A +ATOM 461 O3' GUA 14 -9.858 14.054 4.155 1.00 0.00 A +ATOM 462 P ADE 15 -9.872 14.418 2.591 1.00 0.00 A +ATOM 463 O1P ADE 15 -10.717 15.621 2.385 1.00 0.00 A +ATOM 464 O2P ADE 15 -10.159 13.187 1.811 1.00 0.00 A +ATOM 465 O5' ADE 15 -8.329 14.822 2.384 1.00 0.00 A +ATOM 466 C5' ADE 15 -7.757 15.905 3.132 1.00 0.00 A +ATOM 467 H5' ADE 15 -7.679 15.620 4.173 1.00 0.00 A +ATOM 468 H5'' ADE 15 -8.419 16.778 3.038 1.00 0.00 A +ATOM 469 C4' ADE 15 -6.352 16.267 2.666 1.00 0.00 A +ATOM 470 H4' ADE 15 -6.074 17.231 3.090 1.00 0.00 A +ATOM 471 O4' ADE 15 -5.384 15.271 3.088 1.00 0.00 A +ATOM 472 C1' ADE 15 -4.683 14.758 1.931 1.00 0.00 A +ATOM 473 H1' ADE 15 -3.701 15.229 1.864 1.00 0.00 A +ATOM 474 N9 ADE 15 -4.519 13.297 2.002 1.00 0.00 A +ATOM 475 C5 ADE 15 -3.661 11.277 2.155 1.00 0.00 A +ATOM 476 N7 ADE 15 -5.037 11.096 2.004 1.00 0.00 A +ATOM 477 C8 ADE 15 -5.449 12.315 1.922 1.00 0.00 A +ATOM 478 H8 ADE 15 -6.501 12.547 1.781 1.00 0.00 A +ATOM 479 N1 ADE 15 -1.372 10.906 2.425 1.00 0.00 A +ATOM 480 C2 ADE 15 -1.189 12.224 2.412 1.00 0.00 A +ATOM 481 H2 ADE 15 -0.165 12.572 2.528 1.00 0.00 A +ATOM 482 N3 ADE 15 -2.117 13.160 2.280 1.00 0.00 A +ATOM 483 C4 ADE 15 -3.341 12.615 2.156 1.00 0.00 A +ATOM 484 C6 ADE 15 -2.600 10.384 2.299 1.00 0.00 A +ATOM 485 N6 ADE 15 -2.755 9.059 2.312 1.00 0.00 A +ATOM 486 H61 ADE 15 -1.949 8.456 2.417 1.00 0.00 A +ATOM 487 H62 ADE 15 -3.677 8.658 2.219 1.00 0.00 A +ATOM 488 C2' ADE 15 -5.504 15.149 0.731 1.00 0.00 A +ATOM 489 H2'' ADE 15 -4.844 15.409 -0.102 1.00 0.00 A +ATOM 490 O2' ADE 15 -4.576 15.478 -0.294 0.00 0.00 A +ATOM 491 H2' ADE 15 -6.190 14.335 0.468 1.00 0.00 A +ATOM 492 C3' ADE 15 -6.283 16.352 1.147 1.00 0.00 A +ATOM 493 H3' ADE 15 -7.289 16.303 0.726 1.00 0.00 A +ATOM 494 O3' ADE 15 -5.624 17.548 0.722 1.00 0.00 A +ATOM 495 P THY 16 -5.398 17.836 -0.841 1.00 0.00 A +ATOM 496 O1P THY 16 -5.436 19.302 -1.072 1.00 0.00 A +ATOM 497 O2P THY 16 -6.293 16.951 -1.628 1.00 0.00 A +ATOM 498 O5' THY 16 -3.882 17.322 -1.001 1.00 0.00 A +ATOM 499 C5' THY 16 -2.838 17.907 -0.211 1.00 0.00 A +ATOM 500 H5' THY 16 -2.999 17.667 0.830 1.00 0.00 A +ATOM 501 H5'' THY 16 -2.874 18.998 -0.347 1.00 0.00 A +ATOM 502 C4' THY 16 -1.452 17.388 -0.574 1.00 0.00 A +ATOM 503 H4' THY 16 -0.705 17.995 -0.065 1.00 0.00 A +ATOM 504 O4' THY 16 -1.281 16.003 -0.170 1.00 0.00 A +ATOM 505 C1' THY 16 -0.834 15.221 -1.300 1.00 0.00 A +ATOM 506 H1' THY 16 0.246 15.085 -1.238 1.00 0.00 A +ATOM 507 N1 THY 16 -1.493 13.897 -1.332 1.00 0.00 A +ATOM 508 C6 THY 16 -2.847 13.782 -1.508 1.00 0.00 A +ATOM 509 H6 THY 16 -3.452 14.681 -1.599 1.00 0.00 A +ATOM 510 C2 THY 16 -0.686 12.781 -1.194 1.00 0.00 A +ATOM 511 O2 THY 16 0.530 12.869 -1.037 1.00 0.00 A +ATOM 512 N3 THY 16 -1.328 11.558 -1.246 1.00 0.00 A +ATOM 513 H3 THY 16 -0.760 10.742 -1.134 1.00 0.00 A +ATOM 514 C4 THY 16 -2.685 11.356 -1.424 1.00 0.00 A +ATOM 515 O4 THY 16 -3.150 10.219 -1.466 1.00 0.00 A +ATOM 516 C5 THY 16 -3.447 12.577 -1.557 1.00 0.00 A +ATOM 517 C5M THY 16 -4.957 12.501 -1.760 1.00 0.00 A +ATOM 518 H51 THY 16 -5.422 13.407 -1.376 1.00 0.00 A +ATOM 519 H52 THY 16 -5.352 11.634 -1.237 1.00 0.00 A +ATOM 520 H53 THY 16 -5.176 12.408 -2.814 1.00 0.00 A +ATOM 521 C2' THY 16 -1.160 16.036 -2.531 1.00 0.00 A +ATOM 522 H2'' THY 16 -0.365 15.912 -3.277 1.00 0.00 A +ATOM 523 O2' THY 16 -0.085 15.830 -3.438 0.00 0.00 A +ATOM 524 H2' THY 16 -2.137 15.741 -2.930 1.00 0.00 A +ATOM 525 C3' THY 16 -1.207 17.463 -2.076 1.00 0.00 A +ATOM 526 H3' THY 16 -2.043 17.975 -2.561 1.00 0.00 A +ATOM 527 O3' THY 16 0.021 18.138 -2.365 1.00 0.00 A +END diff --git a/tools/ch2lmp/example/1ac7.psf b/tools/ch2lmp/example/1ac7.psf index c9b72acdc3..287be4b166 100755 --- a/tools/ch2lmp/example/1ac7.psf +++ b/tools/ch2lmp/example/1ac7.psf @@ -1,1872 +1,1872 @@ -PSF - - 1 !NTITLE - REMARKS original generated structure charmm psf file - - 527 !NATOM - 1 A 1 ADE P 82 1.500000 30.9740 0 - 2 A 1 ADE O1P 74 -0.780000 15.9994 0 - 3 A 1 ADE O2P 74 -0.780000 15.9994 0 - 4 A 1 ADE O5' 73 -0.570000 15.9994 0 - 5 A 1 ADE C5' 38 -0.080000 12.0110 0 - 6 A 1 ADE H5' 12 0.090000 1.0080 0 - 7 A 1 ADE H5'' 12 0.090000 1.0080 0 - 8 A 1 ADE C4' 33 0.160000 12.0110 0 - 9 A 1 ADE H4' 11 0.090000 1.0080 0 - 10 A 1 ADE O4' 78 -0.500000 15.9994 0 - 11 A 1 ADE C1' 34 0.160000 12.0110 0 - 12 A 1 ADE H1' 11 0.090000 1.0080 0 - 13 A 1 ADE N9 52 -0.050000 14.0070 0 - 14 A 1 ADE C5 31 0.280000 12.0110 0 - 15 A 1 ADE N7 61 -0.710000 14.0070 0 - 16 A 1 ADE C8 30 0.340000 12.0110 0 - 17 A 1 ADE H8 4 0.120000 1.0080 0 - 18 A 1 ADE N1 58 -0.740000 14.0070 0 - 19 A 1 ADE C2 30 0.500000 12.0110 0 - 20 A 1 ADE H2 4 0.130000 1.0080 0 - 21 A 1 ADE N3 58 -0.750000 14.0070 0 - 22 A 1 ADE C4 31 0.430000 12.0110 0 - 23 A 1 ADE C6 23 0.460000 12.0110 0 - 24 A 1 ADE N6 50 -0.770000 14.0070 0 - 25 A 1 ADE H61 2 0.380000 1.0080 0 - 26 A 1 ADE H62 2 0.380000 1.0080 0 - 27 A 1 ADE C2' 34 0.140000 12.0110 0 - 28 A 1 ADE H2'' 11 0.090000 1.0080 0 - 29 A 1 ADE O2' 76 -0.660000 15.9994 0 - 30 A 1 ADE H2' 9 0.430000 1.0080 0 - 31 A 1 ADE C3' 33 0.010000 12.0110 0 - 32 A 1 ADE H3' 11 0.090000 1.0080 0 - 33 A 1 ADE O3' 73 -0.570000 15.9994 0 - 34 A 2 THY P 82 1.500000 30.9740 0 - 35 A 2 THY O1P 74 -0.780000 15.9994 0 - 36 A 2 THY O2P 74 -0.780000 15.9994 0 - 37 A 2 THY O5' 73 -0.570000 15.9994 0 - 38 A 2 THY C5' 38 -0.080000 12.0110 0 - 39 A 2 THY H5' 12 0.090000 1.0080 0 - 40 A 2 THY H5'' 12 0.090000 1.0080 0 - 41 A 2 THY C4' 33 0.160000 12.0110 0 - 42 A 2 THY H4' 11 0.090000 1.0080 0 - 43 A 2 THY O4' 78 -0.500000 15.9994 0 - 44 A 2 THY C1' 34 0.160000 12.0110 0 - 45 A 2 THY H1' 11 0.090000 1.0080 0 - 46 A 2 THY N1 53 -0.340000 14.0070 0 - 47 A 2 THY C6 24 0.170000 12.0110 0 - 48 A 2 THY H6 4 0.170000 1.0080 0 - 49 A 2 THY C2 22 0.510000 12.0110 0 - 50 A 2 THY O2 71 -0.410000 15.9994 0 - 51 A 2 THY N3 55 -0.460000 14.0070 0 - 52 A 2 THY H3 3 0.360000 1.0080 0 - 53 A 2 THY C4 20 0.500000 12.0110 0 - 54 A 2 THY O4 71 -0.450000 15.9994 0 - 55 A 2 THY C5 29 -0.150000 12.0110 0 - 56 A 2 THY C5M 39 -0.110000 12.0110 0 - 57 A 2 THY H51 13 0.070000 1.0080 0 - 58 A 2 THY H52 13 0.070000 1.0080 0 - 59 A 2 THY H53 13 0.070000 1.0080 0 - 60 A 2 THY C2' 34 0.140000 12.0110 0 - 61 A 2 THY H2'' 11 0.090000 1.0080 0 - 62 A 2 THY O2' 76 -0.660000 15.9994 0 - 63 A 2 THY H2' 9 0.430000 1.0080 0 - 64 A 2 THY C3' 33 0.010000 12.0110 0 - 65 A 2 THY H3' 11 0.090000 1.0080 0 - 66 A 2 THY O3' 73 -0.570000 15.9994 0 - 67 A 3 CYT P 82 1.500000 30.9740 0 - 68 A 3 CYT O1P 74 -0.780000 15.9994 0 - 69 A 3 CYT O2P 74 -0.780000 15.9994 0 - 70 A 3 CYT O5' 73 -0.570000 15.9994 0 - 71 A 3 CYT C5' 38 -0.080000 12.0110 0 - 72 A 3 CYT H5' 12 0.090000 1.0080 0 - 73 A 3 CYT H5'' 12 0.090000 1.0080 0 - 74 A 3 CYT C4' 33 0.160000 12.0110 0 - 75 A 3 CYT H4' 11 0.090000 1.0080 0 - 76 A 3 CYT O4' 78 -0.500000 15.9994 0 - 77 A 3 CYT C1' 34 0.160000 12.0110 0 - 78 A 3 CYT H1' 11 0.090000 1.0080 0 - 79 A 3 CYT N1 52 -0.130000 14.0070 0 - 80 A 3 CYT C6 24 0.050000 12.0110 0 - 81 A 3 CYT H6 4 0.170000 1.0080 0 - 82 A 3 CYT C5 24 -0.130000 12.0110 0 - 83 A 3 CYT H5 4 0.070000 1.0080 0 - 84 A 3 CYT C2 20 0.520000 12.0110 0 - 85 A 3 CYT O2 72 -0.490000 15.9994 0 - 86 A 3 CYT N3 57 -0.660000 14.0070 0 - 87 A 3 CYT C4 23 0.650000 12.0110 0 - 88 A 3 CYT N4 50 -0.750000 14.0070 0 - 89 A 3 CYT H41 2 0.370000 1.0080 0 - 90 A 3 CYT H42 2 0.330000 1.0080 0 - 91 A 3 CYT C2' 34 0.140000 12.0110 0 - 92 A 3 CYT H2'' 11 0.090000 1.0080 0 - 93 A 3 CYT O2' 76 -0.660000 15.9994 0 - 94 A 3 CYT H2' 9 0.430000 1.0080 0 - 95 A 3 CYT C3' 33 0.010000 12.0110 0 - 96 A 3 CYT H3' 11 0.090000 1.0080 0 - 97 A 3 CYT O3' 73 -0.570000 15.9994 0 - 98 A 4 CYT P 82 1.500000 30.9740 0 - 99 A 4 CYT O1P 74 -0.780000 15.9994 0 - 100 A 4 CYT O2P 74 -0.780000 15.9994 0 - 101 A 4 CYT O5' 73 -0.570000 15.9994 0 - 102 A 4 CYT C5' 38 -0.080000 12.0110 0 - 103 A 4 CYT H5' 12 0.090000 1.0080 0 - 104 A 4 CYT H5'' 12 0.090000 1.0080 0 - 105 A 4 CYT C4' 33 0.160000 12.0110 0 - 106 A 4 CYT H4' 11 0.090000 1.0080 0 - 107 A 4 CYT O4' 78 -0.500000 15.9994 0 - 108 A 4 CYT C1' 34 0.160000 12.0110 0 - 109 A 4 CYT H1' 11 0.090000 1.0080 0 - 110 A 4 CYT N1 52 -0.130000 14.0070 0 - 111 A 4 CYT C6 24 0.050000 12.0110 0 - 112 A 4 CYT H6 4 0.170000 1.0080 0 - 113 A 4 CYT C5 24 -0.130000 12.0110 0 - 114 A 4 CYT H5 4 0.070000 1.0080 0 - 115 A 4 CYT C2 20 0.520000 12.0110 0 - 116 A 4 CYT O2 72 -0.490000 15.9994 0 - 117 A 4 CYT N3 57 -0.660000 14.0070 0 - 118 A 4 CYT C4 23 0.650000 12.0110 0 - 119 A 4 CYT N4 50 -0.750000 14.0070 0 - 120 A 4 CYT H41 2 0.370000 1.0080 0 - 121 A 4 CYT H42 2 0.330000 1.0080 0 - 122 A 4 CYT C2' 34 0.140000 12.0110 0 - 123 A 4 CYT H2'' 11 0.090000 1.0080 0 - 124 A 4 CYT O2' 76 -0.660000 15.9994 0 - 125 A 4 CYT H2' 9 0.430000 1.0080 0 - 126 A 4 CYT C3' 33 0.010000 12.0110 0 - 127 A 4 CYT H3' 11 0.090000 1.0080 0 - 128 A 4 CYT O3' 73 -0.570000 15.9994 0 - 129 A 5 THY P 82 1.500000 30.9740 0 - 130 A 5 THY O1P 74 -0.780000 15.9994 0 - 131 A 5 THY O2P 74 -0.780000 15.9994 0 - 132 A 5 THY O5' 73 -0.570000 15.9994 0 - 133 A 5 THY C5' 38 -0.080000 12.0110 0 - 134 A 5 THY H5' 12 0.090000 1.0080 0 - 135 A 5 THY H5'' 12 0.090000 1.0080 0 - 136 A 5 THY C4' 33 0.160000 12.0110 0 - 137 A 5 THY H4' 11 0.090000 1.0080 0 - 138 A 5 THY O4' 78 -0.500000 15.9994 0 - 139 A 5 THY C1' 34 0.160000 12.0110 0 - 140 A 5 THY H1' 11 0.090000 1.0080 0 - 141 A 5 THY N1 53 -0.340000 14.0070 0 - 142 A 5 THY C6 24 0.170000 12.0110 0 - 143 A 5 THY H6 4 0.170000 1.0080 0 - 144 A 5 THY C2 22 0.510000 12.0110 0 - 145 A 5 THY O2 71 -0.410000 15.9994 0 - 146 A 5 THY N3 55 -0.460000 14.0070 0 - 147 A 5 THY H3 3 0.360000 1.0080 0 - 148 A 5 THY C4 20 0.500000 12.0110 0 - 149 A 5 THY O4 71 -0.450000 15.9994 0 - 150 A 5 THY C5 29 -0.150000 12.0110 0 - 151 A 5 THY C5M 39 -0.110000 12.0110 0 - 152 A 5 THY H51 13 0.070000 1.0080 0 - 153 A 5 THY H52 13 0.070000 1.0080 0 - 154 A 5 THY H53 13 0.070000 1.0080 0 - 155 A 5 THY C2' 34 0.140000 12.0110 0 - 156 A 5 THY H2'' 11 0.090000 1.0080 0 - 157 A 5 THY O2' 76 -0.660000 15.9994 0 - 158 A 5 THY H2' 9 0.430000 1.0080 0 - 159 A 5 THY C3' 33 0.010000 12.0110 0 - 160 A 5 THY H3' 11 0.090000 1.0080 0 - 161 A 5 THY O3' 73 -0.570000 15.9994 0 - 162 A 6 ADE P 82 1.500000 30.9740 0 - 163 A 6 ADE O1P 74 -0.780000 15.9994 0 - 164 A 6 ADE O2P 74 -0.780000 15.9994 0 - 165 A 6 ADE O5' 73 -0.570000 15.9994 0 - 166 A 6 ADE C5' 38 -0.080000 12.0110 0 - 167 A 6 ADE H5' 12 0.090000 1.0080 0 - 168 A 6 ADE H5'' 12 0.090000 1.0080 0 - 169 A 6 ADE C4' 33 0.160000 12.0110 0 - 170 A 6 ADE H4' 11 0.090000 1.0080 0 - 171 A 6 ADE O4' 78 -0.500000 15.9994 0 - 172 A 6 ADE C1' 34 0.160000 12.0110 0 - 173 A 6 ADE H1' 11 0.090000 1.0080 0 - 174 A 6 ADE N9 52 -0.050000 14.0070 0 - 175 A 6 ADE C5 31 0.280000 12.0110 0 - 176 A 6 ADE N7 61 -0.710000 14.0070 0 - 177 A 6 ADE C8 30 0.340000 12.0110 0 - 178 A 6 ADE H8 4 0.120000 1.0080 0 - 179 A 6 ADE N1 58 -0.740000 14.0070 0 - 180 A 6 ADE C2 30 0.500000 12.0110 0 - 181 A 6 ADE H2 4 0.130000 1.0080 0 - 182 A 6 ADE N3 58 -0.750000 14.0070 0 - 183 A 6 ADE C4 31 0.430000 12.0110 0 - 184 A 6 ADE C6 23 0.460000 12.0110 0 - 185 A 6 ADE N6 50 -0.770000 14.0070 0 - 186 A 6 ADE H61 2 0.380000 1.0080 0 - 187 A 6 ADE H62 2 0.380000 1.0080 0 - 188 A 6 ADE C2' 34 0.140000 12.0110 0 - 189 A 6 ADE H2'' 11 0.090000 1.0080 0 - 190 A 6 ADE O2' 76 -0.660000 15.9994 0 - 191 A 6 ADE H2' 9 0.430000 1.0080 0 - 192 A 6 ADE C3' 33 0.010000 12.0110 0 - 193 A 6 ADE H3' 11 0.090000 1.0080 0 - 194 A 6 ADE O3' 73 -0.570000 15.9994 0 - 195 A 7 GUA P 82 1.500000 30.9740 0 - 196 A 7 GUA O1P 74 -0.780000 15.9994 0 - 197 A 7 GUA O2P 74 -0.780000 15.9994 0 - 198 A 7 GUA O5' 73 -0.570000 15.9994 0 - 199 A 7 GUA C5' 38 -0.080000 12.0110 0 - 200 A 7 GUA H5' 12 0.090000 1.0080 0 - 201 A 7 GUA H5'' 12 0.090000 1.0080 0 - 202 A 7 GUA C4' 33 0.160000 12.0110 0 - 203 A 7 GUA H4' 11 0.090000 1.0080 0 - 204 A 7 GUA O4' 78 -0.500000 15.9994 0 - 205 A 7 GUA C1' 34 0.160000 12.0110 0 - 206 A 7 GUA H1' 11 0.090000 1.0080 0 - 207 A 7 GUA N9 53 -0.020000 14.0070 0 - 208 A 7 GUA C4 31 0.260000 12.0110 0 - 209 A 7 GUA N2 50 -0.680000 14.0070 0 - 210 A 7 GUA H21 2 0.320000 1.0080 0 - 211 A 7 GUA H22 2 0.350000 1.0080 0 - 212 A 7 GUA N3 60 -0.740000 14.0070 0 - 213 A 7 GUA C2 23 0.750000 12.0110 0 - 214 A 7 GUA N1 56 -0.340000 14.0070 0 - 215 A 7 GUA H1 3 0.260000 1.0080 0 - 216 A 7 GUA C6 20 0.540000 12.0110 0 - 217 A 7 GUA O6 71 -0.510000 15.9994 0 - 218 A 7 GUA C5 32 0.000000 12.0110 0 - 219 A 7 GUA N7 61 -0.600000 14.0070 0 - 220 A 7 GUA C8 30 0.250000 12.0110 0 - 221 A 7 GUA H8 4 0.160000 1.0080 0 - 222 A 7 GUA C2' 34 0.140000 12.0110 0 - 223 A 7 GUA H2'' 11 0.090000 1.0080 0 - 224 A 7 GUA O2' 76 -0.660000 15.9994 0 - 225 A 7 GUA H2' 9 0.430000 1.0080 0 - 226 A 7 GUA C3' 33 0.010000 12.0110 0 - 227 A 7 GUA H3' 11 0.090000 1.0080 0 - 228 A 7 GUA O3' 73 -0.570000 15.9994 0 - 229 A 8 THY P 82 1.500000 30.9740 0 - 230 A 8 THY O1P 74 -0.780000 15.9994 0 - 231 A 8 THY O2P 74 -0.780000 15.9994 0 - 232 A 8 THY O5' 73 -0.570000 15.9994 0 - 233 A 8 THY C5' 38 -0.080000 12.0110 0 - 234 A 8 THY H5' 12 0.090000 1.0080 0 - 235 A 8 THY H5'' 12 0.090000 1.0080 0 - 236 A 8 THY C4' 33 0.160000 12.0110 0 - 237 A 8 THY H4' 11 0.090000 1.0080 0 - 238 A 8 THY O4' 78 -0.500000 15.9994 0 - 239 A 8 THY C1' 34 0.160000 12.0110 0 - 240 A 8 THY H1' 11 0.090000 1.0080 0 - 241 A 8 THY N1 53 -0.340000 14.0070 0 - 242 A 8 THY C6 24 0.170000 12.0110 0 - 243 A 8 THY H6 4 0.170000 1.0080 0 - 244 A 8 THY C2 22 0.510000 12.0110 0 - 245 A 8 THY O2 71 -0.410000 15.9994 0 - 246 A 8 THY N3 55 -0.460000 14.0070 0 - 247 A 8 THY H3 3 0.360000 1.0080 0 - 248 A 8 THY C4 20 0.500000 12.0110 0 - 249 A 8 THY O4 71 -0.450000 15.9994 0 - 250 A 8 THY C5 29 -0.150000 12.0110 0 - 251 A 8 THY C5M 39 -0.110000 12.0110 0 - 252 A 8 THY H51 13 0.070000 1.0080 0 - 253 A 8 THY H52 13 0.070000 1.0080 0 - 254 A 8 THY H53 13 0.070000 1.0080 0 - 255 A 8 THY C2' 34 0.140000 12.0110 0 - 256 A 8 THY H2'' 11 0.090000 1.0080 0 - 257 A 8 THY O2' 76 -0.660000 15.9994 0 - 258 A 8 THY H2' 9 0.430000 1.0080 0 - 259 A 8 THY C3' 33 0.010000 12.0110 0 - 260 A 8 THY H3' 11 0.090000 1.0080 0 - 261 A 8 THY O3' 73 -0.570000 15.9994 0 - 262 A 9 THY P 82 1.500000 30.9740 0 - 263 A 9 THY O1P 74 -0.780000 15.9994 0 - 264 A 9 THY O2P 74 -0.780000 15.9994 0 - 265 A 9 THY O5' 73 -0.570000 15.9994 0 - 266 A 9 THY C5' 38 -0.080000 12.0110 0 - 267 A 9 THY H5' 12 0.090000 1.0080 0 - 268 A 9 THY H5'' 12 0.090000 1.0080 0 - 269 A 9 THY C4' 33 0.160000 12.0110 0 - 270 A 9 THY H4' 11 0.090000 1.0080 0 - 271 A 9 THY O4' 78 -0.500000 15.9994 0 - 272 A 9 THY C1' 34 0.160000 12.0110 0 - 273 A 9 THY H1' 11 0.090000 1.0080 0 - 274 A 9 THY N1 53 -0.340000 14.0070 0 - 275 A 9 THY C6 24 0.170000 12.0110 0 - 276 A 9 THY H6 4 0.170000 1.0080 0 - 277 A 9 THY C2 22 0.510000 12.0110 0 - 278 A 9 THY O2 71 -0.410000 15.9994 0 - 279 A 9 THY N3 55 -0.460000 14.0070 0 - 280 A 9 THY H3 3 0.360000 1.0080 0 - 281 A 9 THY C4 20 0.500000 12.0110 0 - 282 A 9 THY O4 71 -0.450000 15.9994 0 - 283 A 9 THY C5 29 -0.150000 12.0110 0 - 284 A 9 THY C5M 39 -0.110000 12.0110 0 - 285 A 9 THY H51 13 0.070000 1.0080 0 - 286 A 9 THY H52 13 0.070000 1.0080 0 - 287 A 9 THY H53 13 0.070000 1.0080 0 - 288 A 9 THY C2' 34 0.140000 12.0110 0 - 289 A 9 THY H2'' 11 0.090000 1.0080 0 - 290 A 9 THY O2' 76 -0.660000 15.9994 0 - 291 A 9 THY H2' 9 0.430000 1.0080 0 - 292 A 9 THY C3' 33 0.010000 12.0110 0 - 293 A 9 THY H3' 11 0.090000 1.0080 0 - 294 A 9 THY O3' 73 -0.570000 15.9994 0 - 295 A 10 ADE P 82 1.500000 30.9740 0 - 296 A 10 ADE O1P 74 -0.780000 15.9994 0 - 297 A 10 ADE O2P 74 -0.780000 15.9994 0 - 298 A 10 ADE O5' 73 -0.570000 15.9994 0 - 299 A 10 ADE C5' 38 -0.080000 12.0110 0 - 300 A 10 ADE H5' 12 0.090000 1.0080 0 - 301 A 10 ADE H5'' 12 0.090000 1.0080 0 - 302 A 10 ADE C4' 33 0.160000 12.0110 0 - 303 A 10 ADE H4' 11 0.090000 1.0080 0 - 304 A 10 ADE O4' 78 -0.500000 15.9994 0 - 305 A 10 ADE C1' 34 0.160000 12.0110 0 - 306 A 10 ADE H1' 11 0.090000 1.0080 0 - 307 A 10 ADE N9 52 -0.050000 14.0070 0 - 308 A 10 ADE C5 31 0.280000 12.0110 0 - 309 A 10 ADE N7 61 -0.710000 14.0070 0 - 310 A 10 ADE C8 30 0.340000 12.0110 0 - 311 A 10 ADE H8 4 0.120000 1.0080 0 - 312 A 10 ADE N1 58 -0.740000 14.0070 0 - 313 A 10 ADE C2 30 0.500000 12.0110 0 - 314 A 10 ADE H2 4 0.130000 1.0080 0 - 315 A 10 ADE N3 58 -0.750000 14.0070 0 - 316 A 10 ADE C4 31 0.430000 12.0110 0 - 317 A 10 ADE C6 23 0.460000 12.0110 0 - 318 A 10 ADE N6 50 -0.770000 14.0070 0 - 319 A 10 ADE H61 2 0.380000 1.0080 0 - 320 A 10 ADE H62 2 0.380000 1.0080 0 - 321 A 10 ADE C2' 34 0.140000 12.0110 0 - 322 A 10 ADE H2'' 11 0.090000 1.0080 0 - 323 A 10 ADE O2' 76 -0.660000 15.9994 0 - 324 A 10 ADE H2' 9 0.430000 1.0080 0 - 325 A 10 ADE C3' 33 0.010000 12.0110 0 - 326 A 10 ADE H3' 11 0.090000 1.0080 0 - 327 A 10 ADE O3' 73 -0.570000 15.9994 0 - 328 A 11 THY P 82 1.500000 30.9740 0 - 329 A 11 THY O1P 74 -0.780000 15.9994 0 - 330 A 11 THY O2P 74 -0.780000 15.9994 0 - 331 A 11 THY O5' 73 -0.570000 15.9994 0 - 332 A 11 THY C5' 38 -0.080000 12.0110 0 - 333 A 11 THY H5' 12 0.090000 1.0080 0 - 334 A 11 THY H5'' 12 0.090000 1.0080 0 - 335 A 11 THY C4' 33 0.160000 12.0110 0 - 336 A 11 THY H4' 11 0.090000 1.0080 0 - 337 A 11 THY O4' 78 -0.500000 15.9994 0 - 338 A 11 THY C1' 34 0.160000 12.0110 0 - 339 A 11 THY H1' 11 0.090000 1.0080 0 - 340 A 11 THY N1 53 -0.340000 14.0070 0 - 341 A 11 THY C6 24 0.170000 12.0110 0 - 342 A 11 THY H6 4 0.170000 1.0080 0 - 343 A 11 THY C2 22 0.510000 12.0110 0 - 344 A 11 THY O2 71 -0.410000 15.9994 0 - 345 A 11 THY N3 55 -0.460000 14.0070 0 - 346 A 11 THY H3 3 0.360000 1.0080 0 - 347 A 11 THY C4 20 0.500000 12.0110 0 - 348 A 11 THY O4 71 -0.450000 15.9994 0 - 349 A 11 THY C5 29 -0.150000 12.0110 0 - 350 A 11 THY C5M 39 -0.110000 12.0110 0 - 351 A 11 THY H51 13 0.070000 1.0080 0 - 352 A 11 THY H52 13 0.070000 1.0080 0 - 353 A 11 THY H53 13 0.070000 1.0080 0 - 354 A 11 THY C2' 34 0.140000 12.0110 0 - 355 A 11 THY H2'' 11 0.090000 1.0080 0 - 356 A 11 THY O2' 76 -0.660000 15.9994 0 - 357 A 11 THY H2' 9 0.430000 1.0080 0 - 358 A 11 THY C3' 33 0.010000 12.0110 0 - 359 A 11 THY H3' 11 0.090000 1.0080 0 - 360 A 11 THY O3' 73 -0.570000 15.9994 0 - 361 A 12 ADE P 82 1.500000 30.9740 0 - 362 A 12 ADE O1P 74 -0.780000 15.9994 0 - 363 A 12 ADE O2P 74 -0.780000 15.9994 0 - 364 A 12 ADE O5' 73 -0.570000 15.9994 0 - 365 A 12 ADE C5' 38 -0.080000 12.0110 0 - 366 A 12 ADE H5' 12 0.090000 1.0080 0 - 367 A 12 ADE H5'' 12 0.090000 1.0080 0 - 368 A 12 ADE C4' 33 0.160000 12.0110 0 - 369 A 12 ADE H4' 11 0.090000 1.0080 0 - 370 A 12 ADE O4' 78 -0.500000 15.9994 0 - 371 A 12 ADE C1' 34 0.160000 12.0110 0 - 372 A 12 ADE H1' 11 0.090000 1.0080 0 - 373 A 12 ADE N9 52 -0.050000 14.0070 0 - 374 A 12 ADE C5 31 0.280000 12.0110 0 - 375 A 12 ADE N7 61 -0.710000 14.0070 0 - 376 A 12 ADE C8 30 0.340000 12.0110 0 - 377 A 12 ADE H8 4 0.120000 1.0080 0 - 378 A 12 ADE N1 58 -0.740000 14.0070 0 - 379 A 12 ADE C2 30 0.500000 12.0110 0 - 380 A 12 ADE H2 4 0.130000 1.0080 0 - 381 A 12 ADE N3 58 -0.750000 14.0070 0 - 382 A 12 ADE C4 31 0.430000 12.0110 0 - 383 A 12 ADE C6 23 0.460000 12.0110 0 - 384 A 12 ADE N6 50 -0.770000 14.0070 0 - 385 A 12 ADE H61 2 0.380000 1.0080 0 - 386 A 12 ADE H62 2 0.380000 1.0080 0 - 387 A 12 ADE C2' 34 0.140000 12.0110 0 - 388 A 12 ADE H2'' 11 0.090000 1.0080 0 - 389 A 12 ADE O2' 76 -0.660000 15.9994 0 - 390 A 12 ADE H2' 9 0.430000 1.0080 0 - 391 A 12 ADE C3' 33 0.010000 12.0110 0 - 392 A 12 ADE H3' 11 0.090000 1.0080 0 - 393 A 12 ADE O3' 73 -0.570000 15.9994 0 - 394 A 13 GUA P 82 1.500000 30.9740 0 - 395 A 13 GUA O1P 74 -0.780000 15.9994 0 - 396 A 13 GUA O2P 74 -0.780000 15.9994 0 - 397 A 13 GUA O5' 73 -0.570000 15.9994 0 - 398 A 13 GUA C5' 38 -0.080000 12.0110 0 - 399 A 13 GUA H5' 12 0.090000 1.0080 0 - 400 A 13 GUA H5'' 12 0.090000 1.0080 0 - 401 A 13 GUA C4' 33 0.160000 12.0110 0 - 402 A 13 GUA H4' 11 0.090000 1.0080 0 - 403 A 13 GUA O4' 78 -0.500000 15.9994 0 - 404 A 13 GUA C1' 34 0.160000 12.0110 0 - 405 A 13 GUA H1' 11 0.090000 1.0080 0 - 406 A 13 GUA N9 53 -0.020000 14.0070 0 - 407 A 13 GUA C4 31 0.260000 12.0110 0 - 408 A 13 GUA N2 50 -0.680000 14.0070 0 - 409 A 13 GUA H21 2 0.320000 1.0080 0 - 410 A 13 GUA H22 2 0.350000 1.0080 0 - 411 A 13 GUA N3 60 -0.740000 14.0070 0 - 412 A 13 GUA C2 23 0.750000 12.0110 0 - 413 A 13 GUA N1 56 -0.340000 14.0070 0 - 414 A 13 GUA H1 3 0.260000 1.0080 0 - 415 A 13 GUA C6 20 0.540000 12.0110 0 - 416 A 13 GUA O6 71 -0.510000 15.9994 0 - 417 A 13 GUA C5 32 0.000000 12.0110 0 - 418 A 13 GUA N7 61 -0.600000 14.0070 0 - 419 A 13 GUA C8 30 0.250000 12.0110 0 - 420 A 13 GUA H8 4 0.160000 1.0080 0 - 421 A 13 GUA C2' 34 0.140000 12.0110 0 - 422 A 13 GUA H2'' 11 0.090000 1.0080 0 - 423 A 13 GUA O2' 76 -0.660000 15.9994 0 - 424 A 13 GUA H2' 9 0.430000 1.0080 0 - 425 A 13 GUA C3' 33 0.010000 12.0110 0 - 426 A 13 GUA H3' 11 0.090000 1.0080 0 - 427 A 13 GUA O3' 73 -0.570000 15.9994 0 - 428 A 14 GUA P 82 1.500000 30.9740 0 - 429 A 14 GUA O1P 74 -0.780000 15.9994 0 - 430 A 14 GUA O2P 74 -0.780000 15.9994 0 - 431 A 14 GUA O5' 73 -0.570000 15.9994 0 - 432 A 14 GUA C5' 38 -0.080000 12.0110 0 - 433 A 14 GUA H5' 12 0.090000 1.0080 0 - 434 A 14 GUA H5'' 12 0.090000 1.0080 0 - 435 A 14 GUA C4' 33 0.160000 12.0110 0 - 436 A 14 GUA H4' 11 0.090000 1.0080 0 - 437 A 14 GUA O4' 78 -0.500000 15.9994 0 - 438 A 14 GUA C1' 34 0.160000 12.0110 0 - 439 A 14 GUA H1' 11 0.090000 1.0080 0 - 440 A 14 GUA N9 53 -0.020000 14.0070 0 - 441 A 14 GUA C4 31 0.260000 12.0110 0 - 442 A 14 GUA N2 50 -0.680000 14.0070 0 - 443 A 14 GUA H21 2 0.320000 1.0080 0 - 444 A 14 GUA H22 2 0.350000 1.0080 0 - 445 A 14 GUA N3 60 -0.740000 14.0070 0 - 446 A 14 GUA C2 23 0.750000 12.0110 0 - 447 A 14 GUA N1 56 -0.340000 14.0070 0 - 448 A 14 GUA H1 3 0.260000 1.0080 0 - 449 A 14 GUA C6 20 0.540000 12.0110 0 - 450 A 14 GUA O6 71 -0.510000 15.9994 0 - 451 A 14 GUA C5 32 0.000000 12.0110 0 - 452 A 14 GUA N7 61 -0.600000 14.0070 0 - 453 A 14 GUA C8 30 0.250000 12.0110 0 - 454 A 14 GUA H8 4 0.160000 1.0080 0 - 455 A 14 GUA C2' 34 0.140000 12.0110 0 - 456 A 14 GUA H2'' 11 0.090000 1.0080 0 - 457 A 14 GUA O2' 76 -0.660000 15.9994 0 - 458 A 14 GUA H2' 9 0.430000 1.0080 0 - 459 A 14 GUA C3' 33 0.010000 12.0110 0 - 460 A 14 GUA H3' 11 0.090000 1.0080 0 - 461 A 14 GUA O3' 73 -0.570000 15.9994 0 - 462 A 15 ADE P 82 1.500000 30.9740 0 - 463 A 15 ADE O1P 74 -0.780000 15.9994 0 - 464 A 15 ADE O2P 74 -0.780000 15.9994 0 - 465 A 15 ADE O5' 73 -0.570000 15.9994 0 - 466 A 15 ADE C5' 38 -0.080000 12.0110 0 - 467 A 15 ADE H5' 12 0.090000 1.0080 0 - 468 A 15 ADE H5'' 12 0.090000 1.0080 0 - 469 A 15 ADE C4' 33 0.160000 12.0110 0 - 470 A 15 ADE H4' 11 0.090000 1.0080 0 - 471 A 15 ADE O4' 78 -0.500000 15.9994 0 - 472 A 15 ADE C1' 34 0.160000 12.0110 0 - 473 A 15 ADE H1' 11 0.090000 1.0080 0 - 474 A 15 ADE N9 52 -0.050000 14.0070 0 - 475 A 15 ADE C5 31 0.280000 12.0110 0 - 476 A 15 ADE N7 61 -0.710000 14.0070 0 - 477 A 15 ADE C8 30 0.340000 12.0110 0 - 478 A 15 ADE H8 4 0.120000 1.0080 0 - 479 A 15 ADE N1 58 -0.740000 14.0070 0 - 480 A 15 ADE C2 30 0.500000 12.0110 0 - 481 A 15 ADE H2 4 0.130000 1.0080 0 - 482 A 15 ADE N3 58 -0.750000 14.0070 0 - 483 A 15 ADE C4 31 0.430000 12.0110 0 - 484 A 15 ADE C6 23 0.460000 12.0110 0 - 485 A 15 ADE N6 50 -0.770000 14.0070 0 - 486 A 15 ADE H61 2 0.380000 1.0080 0 - 487 A 15 ADE H62 2 0.380000 1.0080 0 - 488 A 15 ADE C2' 34 0.140000 12.0110 0 - 489 A 15 ADE H2'' 11 0.090000 1.0080 0 - 490 A 15 ADE O2' 76 -0.660000 15.9994 0 - 491 A 15 ADE H2' 9 0.430000 1.0080 0 - 492 A 15 ADE C3' 33 0.010000 12.0110 0 - 493 A 15 ADE H3' 11 0.090000 1.0080 0 - 494 A 15 ADE O3' 73 -0.570000 15.9994 0 - 495 A 16 THY P 82 1.500000 30.9740 0 - 496 A 16 THY O1P 74 -0.780000 15.9994 0 - 497 A 16 THY O2P 74 -0.780000 15.9994 0 - 498 A 16 THY O5' 73 -0.570000 15.9994 0 - 499 A 16 THY C5' 38 -0.080000 12.0110 0 - 500 A 16 THY H5' 12 0.090000 1.0080 0 - 501 A 16 THY H5'' 12 0.090000 1.0080 0 - 502 A 16 THY C4' 33 0.160000 12.0110 0 - 503 A 16 THY H4' 11 0.090000 1.0080 0 - 504 A 16 THY O4' 78 -0.500000 15.9994 0 - 505 A 16 THY C1' 34 0.160000 12.0110 0 - 506 A 16 THY H1' 11 0.090000 1.0080 0 - 507 A 16 THY N1 53 -0.340000 14.0070 0 - 508 A 16 THY C6 24 0.170000 12.0110 0 - 509 A 16 THY H6 4 0.170000 1.0080 0 - 510 A 16 THY C2 22 0.510000 12.0110 0 - 511 A 16 THY O2 71 -0.410000 15.9994 0 - 512 A 16 THY N3 55 -0.460000 14.0070 0 - 513 A 16 THY H3 3 0.360000 1.0080 0 - 514 A 16 THY C4 20 0.500000 12.0110 0 - 515 A 16 THY O4 71 -0.450000 15.9994 0 - 516 A 16 THY C5 29 -0.150000 12.0110 0 - 517 A 16 THY C5M 39 -0.110000 12.0110 0 - 518 A 16 THY H51 13 0.070000 1.0080 0 - 519 A 16 THY H52 13 0.070000 1.0080 0 - 520 A 16 THY H53 13 0.070000 1.0080 0 - 521 A 16 THY C2' 34 0.140000 12.0110 0 - 522 A 16 THY H2'' 11 0.090000 1.0080 0 - 523 A 16 THY O2' 76 -0.660000 15.9994 0 - 524 A 16 THY H2' 9 0.430000 1.0080 0 - 525 A 16 THY C3' 33 0.010000 12.0110 0 - 526 A 16 THY H3' 11 0.090000 1.0080 0 - 527 A 16 THY O3' 73 -0.570000 15.9994 0 - - 566 !NBOND: bonds - 1 2 1 3 1 4 4 5 - 5 8 5 6 5 7 8 10 - 8 31 8 9 10 11 11 13 - 11 27 11 12 13 22 13 16 - 14 15 15 16 16 17 18 23 - 19 18 19 20 19 21 22 21 - 22 14 23 24 23 14 24 25 - 24 26 27 31 27 29 27 28 - 29 30 31 33 31 32 33 34 - 34 35 34 36 34 37 37 38 - 38 41 38 39 38 40 41 43 - 41 64 41 42 43 44 44 46 - 44 60 44 45 46 49 46 47 - 47 48 49 51 49 50 51 52 - 51 53 53 55 53 54 55 56 - 55 47 56 57 56 58 56 59 - 60 64 60 62 60 61 62 63 - 64 66 64 65 66 67 67 68 - 67 69 67 70 70 71 71 74 - 71 72 71 73 74 76 74 95 - 74 75 76 77 77 79 77 91 - 77 78 79 84 79 80 80 81 - 82 83 82 80 84 86 84 85 - 86 87 87 88 87 82 88 89 - 88 90 91 95 91 93 91 92 - 93 94 95 97 95 96 97 98 - 98 99 98 100 98 101 101 102 - 102 105 102 103 102 104 105 107 - 105 126 105 106 107 108 108 110 - 108 122 108 109 110 115 110 111 - 111 112 113 114 113 111 115 117 - 115 116 117 118 118 119 118 113 - 119 120 119 121 122 126 122 124 - 122 123 124 125 126 128 126 127 - 128 129 129 130 129 131 129 132 - 132 133 133 136 133 134 133 135 - 136 138 136 159 136 137 138 139 - 139 141 139 155 139 140 141 144 - 141 142 142 143 144 146 144 145 - 146 147 146 148 148 150 148 149 - 150 151 150 142 151 152 151 153 - 151 154 155 159 155 157 155 156 - 157 158 159 161 159 160 161 162 - 162 163 162 164 162 165 165 166 - 166 169 166 167 166 168 169 171 - 169 192 169 170 171 172 172 174 - 172 188 172 173 174 183 174 177 - 175 176 176 177 177 178 179 184 - 180 179 180 181 180 182 183 182 - 183 175 184 185 184 175 185 186 - 185 187 188 192 188 190 188 189 - 190 191 192 194 192 193 194 195 - 195 196 195 197 195 198 198 199 - 199 202 199 200 199 201 202 204 - 202 226 202 203 204 205 205 207 - 205 222 205 206 207 208 207 220 - 208 212 208 218 209 210 209 211 - 213 209 213 214 213 212 214 215 - 214 216 216 218 216 217 218 219 - 219 220 220 221 222 226 222 224 - 222 223 224 225 226 228 226 227 - 228 229 229 230 229 231 229 232 - 232 233 233 236 233 234 233 235 - 236 238 236 259 236 237 238 239 - 239 241 239 255 239 240 241 244 - 241 242 242 243 244 246 244 245 - 246 247 246 248 248 250 248 249 - 250 251 250 242 251 252 251 253 - 251 254 255 259 255 257 255 256 - 257 258 259 261 259 260 261 262 - 262 263 262 264 262 265 265 266 - 266 269 266 267 266 268 269 271 - 269 292 269 270 271 272 272 274 - 272 288 272 273 274 277 274 275 - 275 276 277 279 277 278 279 280 - 279 281 281 283 281 282 283 284 - 283 275 284 285 284 286 284 287 - 288 292 288 290 288 289 290 291 - 292 294 292 293 294 295 295 296 - 295 297 295 298 298 299 299 302 - 299 300 299 301 302 304 302 325 - 302 303 304 305 305 307 305 321 - 305 306 307 316 307 310 308 309 - 309 310 310 311 312 317 313 312 - 313 314 313 315 316 315 316 308 - 317 318 317 308 318 319 318 320 - 321 325 321 323 321 322 323 324 - 325 327 325 326 327 328 328 329 - 328 330 328 331 331 332 332 335 - 332 333 332 334 335 337 335 358 - 335 336 337 338 338 340 338 354 - 338 339 340 343 340 341 341 342 - 343 345 343 344 345 346 345 347 - 347 349 347 348 349 350 349 341 - 350 351 350 352 350 353 354 358 - 354 356 354 355 356 357 358 360 - 358 359 360 361 361 362 361 363 - 361 364 364 365 365 368 365 366 - 365 367 368 370 368 391 368 369 - 370 371 371 373 371 387 371 372 - 373 382 373 376 374 375 375 376 - 376 377 378 383 379 378 379 380 - 379 381 382 381 382 374 383 384 - 383 374 384 385 384 386 387 391 - 387 389 387 388 389 390 391 393 - 391 392 393 394 394 395 394 396 - 394 397 397 398 398 401 398 399 - 398 400 401 403 401 425 401 402 - 403 404 404 406 404 421 404 405 - 406 407 406 419 407 411 407 417 - 408 409 408 410 412 408 412 413 - 412 411 413 414 413 415 415 417 - 415 416 417 418 418 419 419 420 - 421 425 421 423 421 422 423 424 - 425 427 425 426 427 428 428 429 - 428 430 428 431 431 432 432 435 - 432 433 432 434 435 437 435 459 - 435 436 437 438 438 440 438 455 - 438 439 440 441 440 453 441 445 - 441 451 442 443 442 444 446 442 - 446 447 446 445 447 448 447 449 - 449 451 449 450 451 452 452 453 - 453 454 455 459 455 457 455 456 - 457 458 459 461 459 460 461 462 - 462 463 462 464 462 465 465 466 - 466 469 466 467 466 468 469 471 - 469 492 469 470 471 472 472 474 - 472 488 472 473 474 483 474 477 - 475 476 476 477 477 478 479 484 - 480 479 480 481 480 482 483 482 - 483 475 484 485 484 475 485 486 - 485 487 488 492 488 490 488 489 - 490 491 492 494 492 493 494 495 - 495 496 495 497 495 498 498 499 - 499 502 499 500 499 501 502 504 - 502 525 502 503 504 505 505 507 - 505 521 505 506 507 510 507 508 - 508 509 510 512 510 511 512 513 - 512 514 514 516 514 515 516 517 - 516 508 517 518 517 519 517 520 - 521 525 521 523 521 522 523 524 - 525 527 525 526 - - 1016 !NTHETA: angles - 1 4 5 2 1 4 2 1 3 - 3 1 4 4 5 7 4 5 6 - 4 5 8 5 8 9 5 8 31 - 5 8 10 6 5 7 8 31 32 - 8 31 33 8 31 27 8 10 11 - 8 5 7 8 5 6 10 11 12 - 10 11 27 10 11 13 10 8 9 - 10 8 31 11 27 28 11 27 29 - 11 27 31 11 13 16 11 13 22 - 13 22 14 13 22 21 13 16 15 - 13 16 17 13 11 12 13 11 27 - 14 23 18 14 15 16 15 14 22 - 17 16 15 18 19 21 18 19 20 - 19 18 23 20 19 21 21 22 14 - 22 21 19 22 13 16 23 24 26 - 23 24 25 23 14 22 23 14 15 - 24 23 18 24 23 14 25 24 26 - 27 31 32 27 31 33 27 29 30 - 27 11 12 29 27 28 31 33 34 - 31 27 28 31 27 29 31 8 9 - 33 31 32 34 37 38 35 34 33 - 35 34 37 35 34 36 36 34 33 - 36 34 37 37 38 40 37 38 39 - 37 38 41 37 34 33 38 41 42 - 38 41 64 38 41 43 39 38 40 - 41 64 65 41 64 66 41 64 60 - 41 43 44 41 38 40 41 38 39 - 43 44 45 43 44 60 43 44 46 - 43 41 42 43 41 64 44 60 61 - 44 60 62 44 60 64 44 46 47 - 44 46 49 46 49 50 46 49 51 - 46 47 55 46 47 48 46 44 45 - 46 44 60 48 47 55 49 51 53 - 49 51 52 49 46 47 51 53 54 - 51 53 55 51 49 50 52 51 53 - 53 55 47 53 55 56 55 56 59 - 55 56 58 55 56 57 55 53 54 - 56 55 47 57 56 59 57 56 58 - 58 56 59 60 64 65 60 64 66 - 60 62 63 60 44 45 62 60 61 - 64 66 67 64 60 61 64 60 62 - 64 41 42 66 64 65 67 70 71 - 68 67 66 68 67 70 68 67 69 - 69 67 66 69 67 70 70 71 73 - 70 71 72 70 71 74 70 67 66 - 71 74 75 71 74 95 71 74 76 - 72 71 73 74 95 96 74 95 97 - 74 95 91 74 76 77 74 71 73 - 74 71 72 76 77 78 76 77 91 - 76 77 79 76 74 75 76 74 95 - 77 91 92 77 91 93 77 91 95 - 77 79 80 77 79 84 79 84 85 - 79 84 86 79 80 82 79 80 81 - 79 77 78 79 77 91 81 80 82 - 82 87 86 83 82 80 84 86 87 - 84 79 80 86 84 85 87 88 90 - 87 88 89 87 82 80 87 82 83 - 88 87 86 88 87 82 89 88 90 - 91 95 96 91 95 97 91 93 94 - 91 77 78 93 91 92 95 97 98 - 95 91 92 95 91 93 95 74 75 - 97 95 96 98 101 102 99 98 97 - 99 98 101 99 98 100 100 98 97 - 100 98 101 101 102 104 101 102 103 - 101 102 105 101 98 97 102 105 106 - 102 105 126 102 105 107 103 102 104 - 105 126 127 105 126 128 105 126 122 - 105 107 108 105 102 104 105 102 103 - 107 108 109 107 108 122 107 108 110 - 107 105 106 107 105 126 108 122 123 - 108 122 124 108 122 126 108 110 111 - 108 110 115 110 115 116 110 115 117 - 110 111 113 110 111 112 110 108 109 - 110 108 122 112 111 113 113 118 117 - 114 113 111 115 117 118 115 110 111 - 117 115 116 118 119 121 118 119 120 - 118 113 111 118 113 114 119 118 117 - 119 118 113 120 119 121 122 126 127 - 122 126 128 122 124 125 122 108 109 - 124 122 123 126 128 129 126 122 123 - 126 122 124 126 105 106 128 126 127 - 129 132 133 130 129 128 130 129 132 - 130 129 131 131 129 128 131 129 132 - 132 133 135 132 133 134 132 133 136 - 132 129 128 133 136 137 133 136 159 - 133 136 138 134 133 135 136 159 160 - 136 159 161 136 159 155 136 138 139 - 136 133 135 136 133 134 138 139 140 - 138 139 155 138 139 141 138 136 137 - 138 136 159 139 155 156 139 155 157 - 139 155 159 139 141 142 139 141 144 - 141 144 145 141 144 146 141 142 150 - 141 142 143 141 139 140 141 139 155 - 143 142 150 144 146 148 144 146 147 - 144 141 142 146 148 149 146 148 150 - 146 144 145 147 146 148 148 150 142 - 148 150 151 150 151 154 150 151 153 - 150 151 152 150 148 149 151 150 142 - 152 151 154 152 151 153 153 151 154 - 155 159 160 155 159 161 155 157 158 - 155 139 140 157 155 156 159 161 162 - 159 155 156 159 155 157 159 136 137 - 161 159 160 162 165 166 163 162 161 - 163 162 165 163 162 164 164 162 161 - 164 162 165 165 166 168 165 166 167 - 165 166 169 165 162 161 166 169 170 - 166 169 192 166 169 171 167 166 168 - 169 192 193 169 192 194 169 192 188 - 169 171 172 169 166 168 169 166 167 - 171 172 173 171 172 188 171 172 174 - 171 169 170 171 169 192 172 188 189 - 172 188 190 172 188 192 172 174 177 - 172 174 183 174 183 175 174 183 182 - 174 177 176 174 177 178 174 172 173 - 174 172 188 175 184 179 175 176 177 - 176 175 183 178 177 176 179 180 182 - 179 180 181 180 179 184 181 180 182 - 182 183 175 183 182 180 183 174 177 - 184 185 187 184 185 186 184 175 183 - 184 175 176 185 184 179 185 184 175 - 186 185 187 188 192 193 188 192 194 - 188 190 191 188 172 173 190 188 189 - 192 194 195 192 188 189 192 188 190 - 192 169 170 194 192 193 195 198 199 - 196 195 194 196 195 198 196 195 197 - 197 195 194 197 195 198 198 199 201 - 198 199 200 198 199 202 198 195 194 - 199 202 203 199 202 226 199 202 204 - 200 199 201 202 226 227 202 226 228 - 202 226 222 202 204 205 202 199 201 - 202 199 200 204 205 206 204 205 222 - 204 205 207 204 202 203 204 202 226 - 205 222 223 205 222 224 205 222 226 - 205 207 220 205 207 208 207 220 219 - 207 220 221 207 208 218 207 208 212 - 207 205 206 207 205 222 208 212 213 - 208 207 220 209 213 212 209 213 214 - 210 209 211 212 208 218 213 214 216 - 213 214 215 213 209 211 213 209 210 - 214 216 217 214 216 218 214 213 212 - 215 214 216 216 218 208 216 218 219 - 218 219 220 218 216 217 219 218 208 - 221 220 219 222 226 227 222 226 228 - 222 224 225 222 205 206 224 222 223 - 226 228 229 226 222 223 226 222 224 - 226 202 203 228 226 227 229 232 233 - 230 229 228 230 229 232 230 229 231 - 231 229 228 231 229 232 232 233 235 - 232 233 234 232 233 236 232 229 228 - 233 236 237 233 236 259 233 236 238 - 234 233 235 236 259 260 236 259 261 - 236 259 255 236 238 239 236 233 235 - 236 233 234 238 239 240 238 239 255 - 238 239 241 238 236 237 238 236 259 - 239 255 256 239 255 257 239 255 259 - 239 241 242 239 241 244 241 244 245 - 241 244 246 241 242 250 241 242 243 - 241 239 240 241 239 255 243 242 250 - 244 246 248 244 246 247 244 241 242 - 246 248 249 246 248 250 246 244 245 - 247 246 248 248 250 242 248 250 251 - 250 251 254 250 251 253 250 251 252 - 250 248 249 251 250 242 252 251 254 - 252 251 253 253 251 254 255 259 260 - 255 259 261 255 257 258 255 239 240 - 257 255 256 259 261 262 259 255 256 - 259 255 257 259 236 237 261 259 260 - 262 265 266 263 262 261 263 262 265 - 263 262 264 264 262 261 264 262 265 - 265 266 268 265 266 267 265 266 269 - 265 262 261 266 269 270 266 269 292 - 266 269 271 267 266 268 269 292 293 - 269 292 294 269 292 288 269 271 272 - 269 266 268 269 266 267 271 272 273 - 271 272 288 271 272 274 271 269 270 - 271 269 292 272 288 289 272 288 290 - 272 288 292 272 274 275 272 274 277 - 274 277 278 274 277 279 274 275 283 - 274 275 276 274 272 273 274 272 288 - 276 275 283 277 279 281 277 279 280 - 277 274 275 279 281 282 279 281 283 - 279 277 278 280 279 281 281 283 275 - 281 283 284 283 284 287 283 284 286 - 283 284 285 283 281 282 284 283 275 - 285 284 287 285 284 286 286 284 287 - 288 292 293 288 292 294 288 290 291 - 288 272 273 290 288 289 292 294 295 - 292 288 289 292 288 290 292 269 270 - 294 292 293 295 298 299 296 295 294 - 296 295 298 296 295 297 297 295 294 - 297 295 298 298 299 301 298 299 300 - 298 299 302 298 295 294 299 302 303 - 299 302 325 299 302 304 300 299 301 - 302 325 326 302 325 327 302 325 321 - 302 304 305 302 299 301 302 299 300 - 304 305 306 304 305 321 304 305 307 - 304 302 303 304 302 325 305 321 322 - 305 321 323 305 321 325 305 307 310 - 305 307 316 307 316 308 307 316 315 - 307 310 309 307 310 311 307 305 306 - 307 305 321 308 317 312 308 309 310 - 309 308 316 311 310 309 312 313 315 - 312 313 314 313 312 317 314 313 315 - 315 316 308 316 315 313 316 307 310 - 317 318 320 317 318 319 317 308 316 - 317 308 309 318 317 312 318 317 308 - 319 318 320 321 325 326 321 325 327 - 321 323 324 321 305 306 323 321 322 - 325 327 328 325 321 322 325 321 323 - 325 302 303 327 325 326 328 331 332 - 329 328 327 329 328 331 329 328 330 - 330 328 327 330 328 331 331 332 334 - 331 332 333 331 332 335 331 328 327 - 332 335 336 332 335 358 332 335 337 - 333 332 334 335 358 359 335 358 360 - 335 358 354 335 337 338 335 332 334 - 335 332 333 337 338 339 337 338 354 - 337 338 340 337 335 336 337 335 358 - 338 354 355 338 354 356 338 354 358 - 338 340 341 338 340 343 340 343 344 - 340 343 345 340 341 349 340 341 342 - 340 338 339 340 338 354 342 341 349 - 343 345 347 343 345 346 343 340 341 - 345 347 348 345 347 349 345 343 344 - 346 345 347 347 349 341 347 349 350 - 349 350 353 349 350 352 349 350 351 - 349 347 348 350 349 341 351 350 353 - 351 350 352 352 350 353 354 358 359 - 354 358 360 354 356 357 354 338 339 - 356 354 355 358 360 361 358 354 355 - 358 354 356 358 335 336 360 358 359 - 361 364 365 362 361 360 362 361 364 - 362 361 363 363 361 360 363 361 364 - 364 365 367 364 365 366 364 365 368 - 364 361 360 365 368 369 365 368 391 - 365 368 370 366 365 367 368 391 392 - 368 391 393 368 391 387 368 370 371 - 368 365 367 368 365 366 370 371 372 - 370 371 387 370 371 373 370 368 369 - 370 368 391 371 387 388 371 387 389 - 371 387 391 371 373 376 371 373 382 - 373 382 374 373 382 381 373 376 375 - 373 376 377 373 371 372 373 371 387 - 374 383 378 374 375 376 375 374 382 - 377 376 375 378 379 381 378 379 380 - 379 378 383 380 379 381 381 382 374 - 382 381 379 382 373 376 383 384 386 - 383 384 385 383 374 382 383 374 375 - 384 383 378 384 383 374 385 384 386 - 387 391 392 387 391 393 387 389 390 - 387 371 372 389 387 388 391 393 394 - 391 387 388 391 387 389 391 368 369 - 393 391 392 394 397 398 395 394 393 - 395 394 397 395 394 396 396 394 393 - 396 394 397 397 398 400 397 398 399 - 397 398 401 397 394 393 398 401 402 - 398 401 425 398 401 403 399 398 400 - 401 425 426 401 425 427 401 425 421 - 401 403 404 401 398 400 401 398 399 - 403 404 405 403 404 421 403 404 406 - 403 401 402 403 401 425 404 421 422 - 404 421 423 404 421 425 404 406 419 - 404 406 407 406 419 418 406 419 420 - 406 407 417 406 407 411 406 404 405 - 406 404 421 407 411 412 407 406 419 - 408 412 411 408 412 413 409 408 410 - 411 407 417 412 413 415 412 413 414 - 412 408 410 412 408 409 413 415 416 - 413 415 417 413 412 411 414 413 415 - 415 417 407 415 417 418 417 418 419 - 417 415 416 418 417 407 420 419 418 - 421 425 426 421 425 427 421 423 424 - 421 404 405 423 421 422 425 427 428 - 425 421 422 425 421 423 425 401 402 - 427 425 426 428 431 432 429 428 427 - 429 428 431 429 428 430 430 428 427 - 430 428 431 431 432 434 431 432 433 - 431 432 435 431 428 427 432 435 436 - 432 435 459 432 435 437 433 432 434 - 435 459 460 435 459 461 435 459 455 - 435 437 438 435 432 434 435 432 433 - 437 438 439 437 438 455 437 438 440 - 437 435 436 437 435 459 438 455 456 - 438 455 457 438 455 459 438 440 453 - 438 440 441 440 453 452 440 453 454 - 440 441 451 440 441 445 440 438 439 - 440 438 455 441 445 446 441 440 453 - 442 446 445 442 446 447 443 442 444 - 445 441 451 446 447 449 446 447 448 - 446 442 444 446 442 443 447 449 450 - 447 449 451 447 446 445 448 447 449 - 449 451 441 449 451 452 451 452 453 - 451 449 450 452 451 441 454 453 452 - 455 459 460 455 459 461 455 457 458 - 455 438 439 457 455 456 459 461 462 - 459 455 456 459 455 457 459 435 436 - 461 459 460 462 465 466 463 462 461 - 463 462 465 463 462 464 464 462 461 - 464 462 465 465 466 468 465 466 467 - 465 466 469 465 462 461 466 469 470 - 466 469 492 466 469 471 467 466 468 - 469 492 493 469 492 494 469 492 488 - 469 471 472 469 466 468 469 466 467 - 471 472 473 471 472 488 471 472 474 - 471 469 470 471 469 492 472 488 489 - 472 488 490 472 488 492 472 474 477 - 472 474 483 474 483 475 474 483 482 - 474 477 476 474 477 478 474 472 473 - 474 472 488 475 484 479 475 476 477 - 476 475 483 478 477 476 479 480 482 - 479 480 481 480 479 484 481 480 482 - 482 483 475 483 482 480 483 474 477 - 484 485 487 484 485 486 484 475 483 - 484 475 476 485 484 479 485 484 475 - 486 485 487 488 492 493 488 492 494 - 488 490 491 488 472 473 490 488 489 - 492 494 495 492 488 489 492 488 490 - 492 469 470 494 492 493 495 498 499 - 496 495 494 496 495 498 496 495 497 - 497 495 494 497 495 498 498 499 501 - 498 499 500 498 499 502 498 495 494 - 499 502 503 499 502 525 499 502 504 - 500 499 501 502 525 526 502 525 527 - 502 525 521 502 504 505 502 499 501 - 502 499 500 504 505 506 504 505 521 - 504 505 507 504 502 503 504 502 525 - 505 521 522 505 521 523 505 521 525 - 505 507 508 505 507 510 507 510 511 - 507 510 512 507 508 516 507 508 509 - 507 505 506 507 505 521 509 508 516 - 510 512 514 510 512 513 510 507 508 - 512 514 515 512 514 516 512 510 511 - 513 512 514 514 516 508 514 516 517 - 516 517 520 516 517 519 516 517 518 - 516 514 515 517 516 508 518 517 520 - 518 517 519 519 517 520 521 525 526 - 521 525 527 521 523 524 521 505 506 - 523 521 522 525 521 522 525 521 523 - 525 502 503 527 525 526 - - 1497 !NPHI: dihedrals - 1 4 5 8 1 4 5 6 - 1 4 5 7 2 1 4 5 - 3 1 4 5 4 5 8 10 - 4 5 8 31 4 5 8 9 - 5 8 10 11 5 8 31 27 - 5 8 31 33 5 8 31 32 - 6 5 8 10 6 5 8 31 - 6 5 8 9 7 5 8 10 - 7 5 8 31 7 5 8 9 - 8 31 27 11 8 31 27 29 - 8 31 27 28 8 31 33 34 - 8 10 11 13 8 10 11 27 - 8 10 11 12 9 8 10 11 - 9 8 31 27 9 8 31 33 - 9 8 31 32 10 11 13 22 - 10 11 13 16 10 11 27 31 - 10 11 27 29 10 11 27 28 - 10 8 31 27 10 8 31 33 - 10 8 31 32 11 27 31 33 - 11 27 31 32 11 27 29 30 - 11 13 22 21 11 13 22 14 - 11 13 16 17 11 13 16 15 - 11 10 8 31 12 11 13 22 - 12 11 13 16 12 11 27 31 - 12 11 27 29 12 11 27 28 - 13 22 21 19 13 22 14 23 - 13 22 14 15 13 16 15 14 - 13 11 27 31 13 11 27 29 - 13 11 27 28 14 23 24 25 - 14 23 24 26 14 23 18 19 - 14 22 13 16 14 22 21 19 - 14 15 16 17 15 16 13 22 - 15 14 23 24 15 14 23 18 - 15 14 22 21 16 15 14 23 - 16 15 14 22 16 13 11 27 - 16 13 22 21 17 16 13 22 - 18 23 24 25 18 23 24 26 - 18 23 14 22 18 19 21 22 - 19 18 23 24 20 19 18 23 - 20 19 21 22 21 22 14 23 - 21 19 18 23 22 14 23 24 - 22 13 11 27 27 31 33 34 - 28 27 31 33 28 27 31 32 - 28 27 29 30 29 27 31 33 - 29 27 31 32 30 29 27 31 - 31 33 34 35 31 33 34 36 - 31 33 34 37 32 31 33 34 - 33 34 37 38 34 37 38 41 - 34 37 38 39 34 37 38 40 - 35 34 37 38 36 34 37 38 - 37 38 41 43 37 38 41 64 - 37 38 41 42 38 41 43 44 - 38 41 64 60 38 41 64 66 - 38 41 64 65 39 38 41 43 - 39 38 41 64 39 38 41 42 - 40 38 41 43 40 38 41 64 - 40 38 41 42 41 64 60 44 - 41 64 60 62 41 64 60 61 - 41 64 66 67 41 43 44 46 - 41 43 44 60 41 43 44 45 - 42 41 43 44 42 41 64 60 - 42 41 64 66 42 41 64 65 - 43 44 46 49 43 44 46 47 - 43 44 60 64 43 44 60 62 - 43 44 60 61 43 41 64 60 - 43 41 64 66 43 41 64 65 - 44 60 64 66 44 60 64 65 - 44 60 62 63 44 46 49 51 - 44 46 49 50 44 46 47 48 - 44 46 47 55 44 43 41 64 - 45 44 46 49 45 44 46 47 - 45 44 60 64 45 44 60 62 - 45 44 60 61 46 49 51 52 - 46 49 51 53 46 47 55 53 - 46 47 55 56 46 44 60 64 - 46 44 60 62 46 44 60 61 - 47 55 53 51 47 55 53 54 - 47 55 56 57 47 55 56 58 - 47 55 56 59 47 46 44 60 - 47 46 49 51 47 46 49 50 - 48 47 46 49 48 47 55 53 - 48 47 55 56 49 51 53 55 - 49 51 53 54 49 46 44 60 - 49 46 47 55 50 49 51 52 - 50 49 51 53 51 53 55 56 - 52 51 53 55 52 51 53 54 - 53 55 56 57 53 55 56 58 - 53 55 56 59 54 53 55 56 - 60 64 66 67 61 60 64 66 - 61 60 64 65 61 60 62 63 - 62 60 64 66 62 60 64 65 - 63 62 60 64 64 66 67 68 - 64 66 67 69 64 66 67 70 - 65 64 66 67 66 67 70 71 - 67 70 71 74 67 70 71 72 - 67 70 71 73 68 67 70 71 - 69 67 70 71 70 71 74 76 - 70 71 74 95 70 71 74 75 - 71 74 76 77 71 74 95 91 - 71 74 95 97 71 74 95 96 - 72 71 74 76 72 71 74 95 - 72 71 74 75 73 71 74 76 - 73 71 74 95 73 71 74 75 - 74 95 91 77 74 95 91 93 - 74 95 91 92 74 95 97 98 - 74 76 77 79 74 76 77 91 - 74 76 77 78 75 74 76 77 - 75 74 95 91 75 74 95 97 - 75 74 95 96 76 77 79 84 - 76 77 79 80 76 77 91 95 - 76 77 91 93 76 77 91 92 - 76 74 95 91 76 74 95 97 - 76 74 95 96 77 91 95 97 - 77 91 95 96 77 91 93 94 - 77 79 84 86 77 79 84 85 - 77 79 80 81 77 79 80 82 - 77 76 74 95 78 77 79 84 - 78 77 79 80 78 77 91 95 - 78 77 91 93 78 77 91 92 - 79 84 86 87 79 80 82 87 - 79 80 82 83 79 77 91 95 - 79 77 91 93 79 77 91 92 - 80 82 87 88 80 82 87 86 - 80 79 77 91 80 79 84 86 - 80 79 84 85 81 80 79 84 - 81 80 82 87 81 80 82 83 - 82 87 88 89 82 87 88 90 - 82 87 86 84 82 80 79 84 - 83 82 87 88 83 82 87 86 - 84 86 87 88 84 79 77 91 - 85 84 86 87 86 87 88 89 - 86 87 88 90 91 95 97 98 - 92 91 95 97 92 91 95 96 - 92 91 93 94 93 91 95 97 - 93 91 95 96 94 93 91 95 - 95 97 98 99 95 97 98 100 - 95 97 98 101 96 95 97 98 - 97 98 101 102 98 101 102 105 - 98 101 102 103 98 101 102 104 - 99 98 101 102 100 98 101 102 - 101 102 105 107 101 102 105 126 - 101 102 105 106 102 105 107 108 - 102 105 126 122 102 105 126 128 - 102 105 126 127 103 102 105 107 - 103 102 105 126 103 102 105 106 - 104 102 105 107 104 102 105 126 - 104 102 105 106 105 126 122 108 - 105 126 122 124 105 126 122 123 - 105 126 128 129 105 107 108 110 - 105 107 108 122 105 107 108 109 - 106 105 107 108 106 105 126 122 - 106 105 126 128 106 105 126 127 - 107 108 110 115 107 108 110 111 - 107 108 122 126 107 108 122 124 - 107 108 122 123 107 105 126 122 - 107 105 126 128 107 105 126 127 - 108 122 126 128 108 122 126 127 - 108 122 124 125 108 110 115 117 - 108 110 115 116 108 110 111 112 - 108 110 111 113 108 107 105 126 - 109 108 110 115 109 108 110 111 - 109 108 122 126 109 108 122 124 - 109 108 122 123 110 115 117 118 - 110 111 113 118 110 111 113 114 - 110 108 122 126 110 108 122 124 - 110 108 122 123 111 113 118 119 - 111 113 118 117 111 110 108 122 - 111 110 115 117 111 110 115 116 - 112 111 110 115 112 111 113 118 - 112 111 113 114 113 118 119 120 - 113 118 119 121 113 118 117 115 - 113 111 110 115 114 113 118 119 - 114 113 118 117 115 117 118 119 - 115 110 108 122 116 115 117 118 - 117 118 119 120 117 118 119 121 - 122 126 128 129 123 122 126 128 - 123 122 126 127 123 122 124 125 - 124 122 126 128 124 122 126 127 - 125 124 122 126 126 128 129 130 - 126 128 129 131 126 128 129 132 - 127 126 128 129 128 129 132 133 - 129 132 133 136 129 132 133 134 - 129 132 133 135 130 129 132 133 - 131 129 132 133 132 133 136 138 - 132 133 136 159 132 133 136 137 - 133 136 138 139 133 136 159 155 - 133 136 159 161 133 136 159 160 - 134 133 136 138 134 133 136 159 - 134 133 136 137 135 133 136 138 - 135 133 136 159 135 133 136 137 - 136 159 155 139 136 159 155 157 - 136 159 155 156 136 159 161 162 - 136 138 139 141 136 138 139 155 - 136 138 139 140 137 136 138 139 - 137 136 159 155 137 136 159 161 - 137 136 159 160 138 139 141 144 - 138 139 141 142 138 139 155 159 - 138 139 155 157 138 139 155 156 - 138 136 159 155 138 136 159 161 - 138 136 159 160 139 155 159 161 - 139 155 159 160 139 155 157 158 - 139 141 144 146 139 141 144 145 - 139 141 142 143 139 141 142 150 - 139 138 136 159 140 139 141 144 - 140 139 141 142 140 139 155 159 - 140 139 155 157 140 139 155 156 - 141 144 146 147 141 144 146 148 - 141 142 150 148 141 142 150 151 - 141 139 155 159 141 139 155 157 - 141 139 155 156 142 150 148 146 - 142 150 148 149 142 150 151 152 - 142 150 151 153 142 150 151 154 - 142 141 139 155 142 141 144 146 - 142 141 144 145 143 142 141 144 - 143 142 150 148 143 142 150 151 - 144 146 148 150 144 146 148 149 - 144 141 139 155 144 141 142 150 - 145 144 146 147 145 144 146 148 - 146 148 150 151 147 146 148 150 - 147 146 148 149 148 150 151 152 - 148 150 151 153 148 150 151 154 - 149 148 150 151 155 159 161 162 - 156 155 159 161 156 155 159 160 - 156 155 157 158 157 155 159 161 - 157 155 159 160 158 157 155 159 - 159 161 162 163 159 161 162 164 - 159 161 162 165 160 159 161 162 - 161 162 165 166 162 165 166 169 - 162 165 166 167 162 165 166 168 - 163 162 165 166 164 162 165 166 - 165 166 169 171 165 166 169 192 - 165 166 169 170 166 169 171 172 - 166 169 192 188 166 169 192 194 - 166 169 192 193 167 166 169 171 - 167 166 169 192 167 166 169 170 - 168 166 169 171 168 166 169 192 - 168 166 169 170 169 192 188 172 - 169 192 188 190 169 192 188 189 - 169 192 194 195 169 171 172 174 - 169 171 172 188 169 171 172 173 - 170 169 171 172 170 169 192 188 - 170 169 192 194 170 169 192 193 - 171 172 174 183 171 172 174 177 - 171 172 188 192 171 172 188 190 - 171 172 188 189 171 169 192 188 - 171 169 192 194 171 169 192 193 - 172 188 192 194 172 188 192 193 - 172 188 190 191 172 174 183 182 - 172 174 183 175 172 174 177 178 - 172 174 177 176 172 171 169 192 - 173 172 174 183 173 172 174 177 - 173 172 188 192 173 172 188 190 - 173 172 188 189 174 183 182 180 - 174 183 175 184 174 183 175 176 - 174 177 176 175 174 172 188 192 - 174 172 188 190 174 172 188 189 - 175 184 185 186 175 184 185 187 - 175 184 179 180 175 183 174 177 - 175 183 182 180 175 176 177 178 - 176 177 174 183 176 175 184 185 - 176 175 184 179 176 175 183 182 - 177 176 175 184 177 176 175 183 - 177 174 172 188 177 174 183 182 - 178 177 174 183 179 184 185 186 - 179 184 185 187 179 184 175 183 - 179 180 182 183 180 179 184 185 - 181 180 179 184 181 180 182 183 - 182 183 175 184 182 180 179 184 - 183 175 184 185 183 174 172 188 - 188 192 194 195 189 188 192 194 - 189 188 192 193 189 188 190 191 - 190 188 192 194 190 188 192 193 - 191 190 188 192 192 194 195 196 - 192 194 195 197 192 194 195 198 - 193 192 194 195 194 195 198 199 - 195 198 199 202 195 198 199 200 - 195 198 199 201 196 195 198 199 - 197 195 198 199 198 199 202 204 - 198 199 202 226 198 199 202 203 - 199 202 204 205 199 202 226 222 - 199 202 226 228 199 202 226 227 - 200 199 202 204 200 199 202 226 - 200 199 202 203 201 199 202 204 - 201 199 202 226 201 199 202 203 - 202 226 222 205 202 226 222 224 - 202 226 222 223 202 226 228 229 - 202 204 205 207 202 204 205 222 - 202 204 205 206 203 202 204 205 - 203 202 226 222 203 202 226 228 - 203 202 226 227 204 205 207 208 - 204 205 207 220 204 205 222 226 - 204 205 222 224 204 205 222 223 - 204 202 226 222 204 202 226 228 - 204 202 226 227 205 222 226 228 - 205 222 226 227 205 222 224 225 - 205 207 208 212 205 207 208 218 - 205 207 220 221 205 207 220 219 - 205 204 202 226 206 205 207 208 - 206 205 207 220 206 205 222 226 - 206 205 222 224 206 205 222 223 - 207 220 219 218 207 208 212 213 - 207 208 218 216 207 208 218 219 - 207 205 222 226 207 205 222 224 - 207 205 222 223 208 218 216 214 - 208 218 216 217 208 218 219 220 - 208 212 213 209 208 212 213 214 - 208 207 205 222 208 207 220 221 - 208 207 220 219 209 213 214 215 - 209 213 214 216 210 209 213 214 - 210 209 213 212 211 209 213 214 - 211 209 213 212 212 213 214 215 - 212 213 214 216 212 208 207 220 - 212 208 218 216 212 208 218 219 - 213 214 216 218 213 214 216 217 - 213 212 208 218 214 216 218 219 - 215 214 216 218 215 214 216 217 - 216 218 219 220 217 216 218 219 - 218 219 220 221 218 208 207 220 - 220 207 205 222 222 226 228 229 - 223 222 226 228 223 222 226 227 - 223 222 224 225 224 222 226 228 - 224 222 226 227 225 224 222 226 - 226 228 229 230 226 228 229 231 - 226 228 229 232 227 226 228 229 - 228 229 232 233 229 232 233 236 - 229 232 233 234 229 232 233 235 - 230 229 232 233 231 229 232 233 - 232 233 236 238 232 233 236 259 - 232 233 236 237 233 236 238 239 - 233 236 259 255 233 236 259 261 - 233 236 259 260 234 233 236 238 - 234 233 236 259 234 233 236 237 - 235 233 236 238 235 233 236 259 - 235 233 236 237 236 259 255 239 - 236 259 255 257 236 259 255 256 - 236 259 261 262 236 238 239 241 - 236 238 239 255 236 238 239 240 - 237 236 238 239 237 236 259 255 - 237 236 259 261 237 236 259 260 - 238 239 241 244 238 239 241 242 - 238 239 255 259 238 239 255 257 - 238 239 255 256 238 236 259 255 - 238 236 259 261 238 236 259 260 - 239 255 259 261 239 255 259 260 - 239 255 257 258 239 241 244 246 - 239 241 244 245 239 241 242 243 - 239 241 242 250 239 238 236 259 - 240 239 241 244 240 239 241 242 - 240 239 255 259 240 239 255 257 - 240 239 255 256 241 244 246 247 - 241 244 246 248 241 242 250 248 - 241 242 250 251 241 239 255 259 - 241 239 255 257 241 239 255 256 - 242 250 248 246 242 250 248 249 - 242 250 251 252 242 250 251 253 - 242 250 251 254 242 241 239 255 - 242 241 244 246 242 241 244 245 - 243 242 241 244 243 242 250 248 - 243 242 250 251 244 246 248 250 - 244 246 248 249 244 241 239 255 - 244 241 242 250 245 244 246 247 - 245 244 246 248 246 248 250 251 - 247 246 248 250 247 246 248 249 - 248 250 251 252 248 250 251 253 - 248 250 251 254 249 248 250 251 - 255 259 261 262 256 255 259 261 - 256 255 259 260 256 255 257 258 - 257 255 259 261 257 255 259 260 - 258 257 255 259 259 261 262 263 - 259 261 262 264 259 261 262 265 - 260 259 261 262 261 262 265 266 - 262 265 266 269 262 265 266 267 - 262 265 266 268 263 262 265 266 - 264 262 265 266 265 266 269 271 - 265 266 269 292 265 266 269 270 - 266 269 271 272 266 269 292 288 - 266 269 292 294 266 269 292 293 - 267 266 269 271 267 266 269 292 - 267 266 269 270 268 266 269 271 - 268 266 269 292 268 266 269 270 - 269 292 288 272 269 292 288 290 - 269 292 288 289 269 292 294 295 - 269 271 272 274 269 271 272 288 - 269 271 272 273 270 269 271 272 - 270 269 292 288 270 269 292 294 - 270 269 292 293 271 272 274 277 - 271 272 274 275 271 272 288 292 - 271 272 288 290 271 272 288 289 - 271 269 292 288 271 269 292 294 - 271 269 292 293 272 288 292 294 - 272 288 292 293 272 288 290 291 - 272 274 277 279 272 274 277 278 - 272 274 275 276 272 274 275 283 - 272 271 269 292 273 272 274 277 - 273 272 274 275 273 272 288 292 - 273 272 288 290 273 272 288 289 - 274 277 279 280 274 277 279 281 - 274 275 283 281 274 275 283 284 - 274 272 288 292 274 272 288 290 - 274 272 288 289 275 283 281 279 - 275 283 281 282 275 283 284 285 - 275 283 284 286 275 283 284 287 - 275 274 272 288 275 274 277 279 - 275 274 277 278 276 275 274 277 - 276 275 283 281 276 275 283 284 - 277 279 281 283 277 279 281 282 - 277 274 272 288 277 274 275 283 - 278 277 279 280 278 277 279 281 - 279 281 283 284 280 279 281 283 - 280 279 281 282 281 283 284 285 - 281 283 284 286 281 283 284 287 - 282 281 283 284 288 292 294 295 - 289 288 292 294 289 288 292 293 - 289 288 290 291 290 288 292 294 - 290 288 292 293 291 290 288 292 - 292 294 295 296 292 294 295 297 - 292 294 295 298 293 292 294 295 - 294 295 298 299 295 298 299 302 - 295 298 299 300 295 298 299 301 - 296 295 298 299 297 295 298 299 - 298 299 302 304 298 299 302 325 - 298 299 302 303 299 302 304 305 - 299 302 325 321 299 302 325 327 - 299 302 325 326 300 299 302 304 - 300 299 302 325 300 299 302 303 - 301 299 302 304 301 299 302 325 - 301 299 302 303 302 325 321 305 - 302 325 321 323 302 325 321 322 - 302 325 327 328 302 304 305 307 - 302 304 305 321 302 304 305 306 - 303 302 304 305 303 302 325 321 - 303 302 325 327 303 302 325 326 - 304 305 307 316 304 305 307 310 - 304 305 321 325 304 305 321 323 - 304 305 321 322 304 302 325 321 - 304 302 325 327 304 302 325 326 - 305 321 325 327 305 321 325 326 - 305 321 323 324 305 307 316 315 - 305 307 316 308 305 307 310 311 - 305 307 310 309 305 304 302 325 - 306 305 307 316 306 305 307 310 - 306 305 321 325 306 305 321 323 - 306 305 321 322 307 316 315 313 - 307 316 308 317 307 316 308 309 - 307 310 309 308 307 305 321 325 - 307 305 321 323 307 305 321 322 - 308 317 318 319 308 317 318 320 - 308 317 312 313 308 316 307 310 - 308 316 315 313 308 309 310 311 - 309 310 307 316 309 308 317 318 - 309 308 317 312 309 308 316 315 - 310 309 308 317 310 309 308 316 - 310 307 305 321 310 307 316 315 - 311 310 307 316 312 317 318 319 - 312 317 318 320 312 317 308 316 - 312 313 315 316 313 312 317 318 - 314 313 312 317 314 313 315 316 - 315 316 308 317 315 313 312 317 - 316 308 317 318 316 307 305 321 - 321 325 327 328 322 321 325 327 - 322 321 325 326 322 321 323 324 - 323 321 325 327 323 321 325 326 - 324 323 321 325 325 327 328 329 - 325 327 328 330 325 327 328 331 - 326 325 327 328 327 328 331 332 - 328 331 332 335 328 331 332 333 - 328 331 332 334 329 328 331 332 - 330 328 331 332 331 332 335 337 - 331 332 335 358 331 332 335 336 - 332 335 337 338 332 335 358 354 - 332 335 358 360 332 335 358 359 - 333 332 335 337 333 332 335 358 - 333 332 335 336 334 332 335 337 - 334 332 335 358 334 332 335 336 - 335 358 354 338 335 358 354 356 - 335 358 354 355 335 358 360 361 - 335 337 338 340 335 337 338 354 - 335 337 338 339 336 335 337 338 - 336 335 358 354 336 335 358 360 - 336 335 358 359 337 338 340 343 - 337 338 340 341 337 338 354 358 - 337 338 354 356 337 338 354 355 - 337 335 358 354 337 335 358 360 - 337 335 358 359 338 354 358 360 - 338 354 358 359 338 354 356 357 - 338 340 343 345 338 340 343 344 - 338 340 341 342 338 340 341 349 - 338 337 335 358 339 338 340 343 - 339 338 340 341 339 338 354 358 - 339 338 354 356 339 338 354 355 - 340 343 345 346 340 343 345 347 - 340 341 349 347 340 341 349 350 - 340 338 354 358 340 338 354 356 - 340 338 354 355 341 349 347 345 - 341 349 347 348 341 349 350 351 - 341 349 350 352 341 349 350 353 - 341 340 338 354 341 340 343 345 - 341 340 343 344 342 341 340 343 - 342 341 349 347 342 341 349 350 - 343 345 347 349 343 345 347 348 - 343 340 338 354 343 340 341 349 - 344 343 345 346 344 343 345 347 - 345 347 349 350 346 345 347 349 - 346 345 347 348 347 349 350 351 - 347 349 350 352 347 349 350 353 - 348 347 349 350 354 358 360 361 - 355 354 358 360 355 354 358 359 - 355 354 356 357 356 354 358 360 - 356 354 358 359 357 356 354 358 - 358 360 361 362 358 360 361 363 - 358 360 361 364 359 358 360 361 - 360 361 364 365 361 364 365 368 - 361 364 365 366 361 364 365 367 - 362 361 364 365 363 361 364 365 - 364 365 368 370 364 365 368 391 - 364 365 368 369 365 368 370 371 - 365 368 391 387 365 368 391 393 - 365 368 391 392 366 365 368 370 - 366 365 368 391 366 365 368 369 - 367 365 368 370 367 365 368 391 - 367 365 368 369 368 391 387 371 - 368 391 387 389 368 391 387 388 - 368 391 393 394 368 370 371 373 - 368 370 371 387 368 370 371 372 - 369 368 370 371 369 368 391 387 - 369 368 391 393 369 368 391 392 - 370 371 373 382 370 371 373 376 - 370 371 387 391 370 371 387 389 - 370 371 387 388 370 368 391 387 - 370 368 391 393 370 368 391 392 - 371 387 391 393 371 387 391 392 - 371 387 389 390 371 373 382 381 - 371 373 382 374 371 373 376 377 - 371 373 376 375 371 370 368 391 - 372 371 373 382 372 371 373 376 - 372 371 387 391 372 371 387 389 - 372 371 387 388 373 382 381 379 - 373 382 374 383 373 382 374 375 - 373 376 375 374 373 371 387 391 - 373 371 387 389 373 371 387 388 - 374 383 384 385 374 383 384 386 - 374 383 378 379 374 382 373 376 - 374 382 381 379 374 375 376 377 - 375 376 373 382 375 374 383 384 - 375 374 383 378 375 374 382 381 - 376 375 374 383 376 375 374 382 - 376 373 371 387 376 373 382 381 - 377 376 373 382 378 383 384 385 - 378 383 384 386 378 383 374 382 - 378 379 381 382 379 378 383 384 - 380 379 378 383 380 379 381 382 - 381 382 374 383 381 379 378 383 - 382 374 383 384 382 373 371 387 - 387 391 393 394 388 387 391 393 - 388 387 391 392 388 387 389 390 - 389 387 391 393 389 387 391 392 - 390 389 387 391 391 393 394 395 - 391 393 394 396 391 393 394 397 - 392 391 393 394 393 394 397 398 - 394 397 398 401 394 397 398 399 - 394 397 398 400 395 394 397 398 - 396 394 397 398 397 398 401 403 - 397 398 401 425 397 398 401 402 - 398 401 403 404 398 401 425 421 - 398 401 425 427 398 401 425 426 - 399 398 401 403 399 398 401 425 - 399 398 401 402 400 398 401 403 - 400 398 401 425 400 398 401 402 - 401 425 421 404 401 425 421 423 - 401 425 421 422 401 425 427 428 - 401 403 404 406 401 403 404 421 - 401 403 404 405 402 401 403 404 - 402 401 425 421 402 401 425 427 - 402 401 425 426 403 404 406 407 - 403 404 406 419 403 404 421 425 - 403 404 421 423 403 404 421 422 - 403 401 425 421 403 401 425 427 - 403 401 425 426 404 421 425 427 - 404 421 425 426 404 421 423 424 - 404 406 407 411 404 406 407 417 - 404 406 419 420 404 406 419 418 - 404 403 401 425 405 404 406 407 - 405 404 406 419 405 404 421 425 - 405 404 421 423 405 404 421 422 - 406 419 418 417 406 407 411 412 - 406 407 417 415 406 407 417 418 - 406 404 421 425 406 404 421 423 - 406 404 421 422 407 417 415 413 - 407 417 415 416 407 417 418 419 - 407 411 412 408 407 411 412 413 - 407 406 404 421 407 406 419 420 - 407 406 419 418 408 412 413 414 - 408 412 413 415 409 408 412 413 - 409 408 412 411 410 408 412 413 - 410 408 412 411 411 412 413 414 - 411 412 413 415 411 407 406 419 - 411 407 417 415 411 407 417 418 - 412 413 415 417 412 413 415 416 - 412 411 407 417 413 415 417 418 - 414 413 415 417 414 413 415 416 - 415 417 418 419 416 415 417 418 - 417 418 419 420 417 407 406 419 - 419 406 404 421 421 425 427 428 - 422 421 425 427 422 421 425 426 - 422 421 423 424 423 421 425 427 - 423 421 425 426 424 423 421 425 - 425 427 428 429 425 427 428 430 - 425 427 428 431 426 425 427 428 - 427 428 431 432 428 431 432 435 - 428 431 432 433 428 431 432 434 - 429 428 431 432 430 428 431 432 - 431 432 435 437 431 432 435 459 - 431 432 435 436 432 435 437 438 - 432 435 459 455 432 435 459 461 - 432 435 459 460 433 432 435 437 - 433 432 435 459 433 432 435 436 - 434 432 435 437 434 432 435 459 - 434 432 435 436 435 459 455 438 - 435 459 455 457 435 459 455 456 - 435 459 461 462 435 437 438 440 - 435 437 438 455 435 437 438 439 - 436 435 437 438 436 435 459 455 - 436 435 459 461 436 435 459 460 - 437 438 440 441 437 438 440 453 - 437 438 455 459 437 438 455 457 - 437 438 455 456 437 435 459 455 - 437 435 459 461 437 435 459 460 - 438 455 459 461 438 455 459 460 - 438 455 457 458 438 440 441 445 - 438 440 441 451 438 440 453 454 - 438 440 453 452 438 437 435 459 - 439 438 440 441 439 438 440 453 - 439 438 455 459 439 438 455 457 - 439 438 455 456 440 453 452 451 - 440 441 445 446 440 441 451 449 - 440 441 451 452 440 438 455 459 - 440 438 455 457 440 438 455 456 - 441 451 449 447 441 451 449 450 - 441 451 452 453 441 445 446 442 - 441 445 446 447 441 440 438 455 - 441 440 453 454 441 440 453 452 - 442 446 447 448 442 446 447 449 - 443 442 446 447 443 442 446 445 - 444 442 446 447 444 442 446 445 - 445 446 447 448 445 446 447 449 - 445 441 440 453 445 441 451 449 - 445 441 451 452 446 447 449 451 - 446 447 449 450 446 445 441 451 - 447 449 451 452 448 447 449 451 - 448 447 449 450 449 451 452 453 - 450 449 451 452 451 452 453 454 - 451 441 440 453 453 440 438 455 - 455 459 461 462 456 455 459 461 - 456 455 459 460 456 455 457 458 - 457 455 459 461 457 455 459 460 - 458 457 455 459 459 461 462 463 - 459 461 462 464 459 461 462 465 - 460 459 461 462 461 462 465 466 - 462 465 466 469 462 465 466 467 - 462 465 466 468 463 462 465 466 - 464 462 465 466 465 466 469 471 - 465 466 469 492 465 466 469 470 - 466 469 471 472 466 469 492 488 - 466 469 492 494 466 469 492 493 - 467 466 469 471 467 466 469 492 - 467 466 469 470 468 466 469 471 - 468 466 469 492 468 466 469 470 - 469 492 488 472 469 492 488 490 - 469 492 488 489 469 492 494 495 - 469 471 472 474 469 471 472 488 - 469 471 472 473 470 469 471 472 - 470 469 492 488 470 469 492 494 - 470 469 492 493 471 472 474 483 - 471 472 474 477 471 472 488 492 - 471 472 488 490 471 472 488 489 - 471 469 492 488 471 469 492 494 - 471 469 492 493 472 488 492 494 - 472 488 492 493 472 488 490 491 - 472 474 483 482 472 474 483 475 - 472 474 477 478 472 474 477 476 - 472 471 469 492 473 472 474 483 - 473 472 474 477 473 472 488 492 - 473 472 488 490 473 472 488 489 - 474 483 482 480 474 483 475 484 - 474 483 475 476 474 477 476 475 - 474 472 488 492 474 472 488 490 - 474 472 488 489 475 484 485 486 - 475 484 485 487 475 484 479 480 - 475 483 474 477 475 483 482 480 - 475 476 477 478 476 477 474 483 - 476 475 484 485 476 475 484 479 - 476 475 483 482 477 476 475 484 - 477 476 475 483 477 474 472 488 - 477 474 483 482 478 477 474 483 - 479 484 485 486 479 484 485 487 - 479 484 475 483 479 480 482 483 - 480 479 484 485 481 480 479 484 - 481 480 482 483 482 483 475 484 - 482 480 479 484 483 475 484 485 - 483 474 472 488 488 492 494 495 - 489 488 492 494 489 488 492 493 - 489 488 490 491 490 488 492 494 - 490 488 492 493 491 490 488 492 - 492 494 495 496 492 494 495 497 - 492 494 495 498 493 492 494 495 - 494 495 498 499 495 498 499 502 - 495 498 499 500 495 498 499 501 - 496 495 498 499 497 495 498 499 - 498 499 502 504 498 499 502 525 - 498 499 502 503 499 502 504 505 - 499 502 525 521 499 502 525 527 - 499 502 525 526 500 499 502 504 - 500 499 502 525 500 499 502 503 - 501 499 502 504 501 499 502 525 - 501 499 502 503 502 525 521 505 - 502 525 521 523 502 525 521 522 - 502 504 505 507 502 504 505 521 - 502 504 505 506 503 502 504 505 - 503 502 525 521 503 502 525 527 - 503 502 525 526 504 505 507 510 - 504 505 507 508 504 505 521 525 - 504 505 521 523 504 505 521 522 - 504 502 525 521 504 502 525 527 - 504 502 525 526 505 521 525 527 - 505 521 525 526 505 521 523 524 - 505 507 510 512 505 507 510 511 - 505 507 508 509 505 507 508 516 - 505 504 502 525 506 505 507 510 - 506 505 507 508 506 505 521 525 - 506 505 521 523 506 505 521 522 - 507 510 512 513 507 510 512 514 - 507 508 516 514 507 508 516 517 - 507 505 521 525 507 505 521 523 - 507 505 521 522 508 516 514 512 - 508 516 514 515 508 516 517 518 - 508 516 517 519 508 516 517 520 - 508 507 505 521 508 507 510 512 - 508 507 510 511 509 508 507 510 - 509 508 516 514 509 508 516 517 - 510 512 514 516 510 512 514 515 - 510 507 505 521 510 507 508 516 - 511 510 512 513 511 510 512 514 - 512 514 516 517 513 512 514 516 - 513 512 514 515 514 516 517 518 - 514 516 517 519 514 516 517 520 - 515 514 516 517 522 521 525 527 - 522 521 525 526 522 521 523 524 - 523 521 525 527 523 521 525 526 - 524 523 521 525 - - 43 !NIMPHI: impropers - 23 18 14 24 24 23 25 26 - 49 46 51 50 53 51 55 54 - 55 53 47 56 84 79 86 85 - 87 86 82 88 88 87 89 90 - 115 110 117 116 118 117 113 119 - 119 118 120 121 144 141 146 145 - 148 146 150 149 150 148 142 151 - 184 179 175 185 185 184 186 187 - 209 210 213 211 213 212 214 209 - 216 214 218 217 244 241 246 245 - 248 246 250 249 250 248 242 251 - 277 274 279 278 281 279 283 282 - 283 281 275 284 317 312 308 318 - 318 317 319 320 343 340 345 344 - 347 345 349 348 349 347 341 350 - 383 378 374 384 384 383 385 386 - 408 409 412 410 412 411 413 408 - 415 413 417 416 442 443 446 444 - 446 445 447 442 449 447 451 450 - 484 479 475 485 485 484 486 487 - 510 507 512 511 514 512 516 515 - 516 514 508 517 - - 0 !NDON: donors - - - 0 !NACC: acceptors - - - 0 !NNB - - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 - - 1 0 !NGRP - 0 0 0 - +PSF + + 1 !NTITLE + REMARKS original generated structure charmm psf file + + 527 !NATOM + 1 A 1 ADE P 82 1.500000 30.9740 0 + 2 A 1 ADE O1P 74 -0.780000 15.9994 0 + 3 A 1 ADE O2P 74 -0.780000 15.9994 0 + 4 A 1 ADE O5' 73 -0.570000 15.9994 0 + 5 A 1 ADE C5' 38 -0.080000 12.0110 0 + 6 A 1 ADE H5' 12 0.090000 1.0080 0 + 7 A 1 ADE H5'' 12 0.090000 1.0080 0 + 8 A 1 ADE C4' 33 0.160000 12.0110 0 + 9 A 1 ADE H4' 11 0.090000 1.0080 0 + 10 A 1 ADE O4' 78 -0.500000 15.9994 0 + 11 A 1 ADE C1' 34 0.160000 12.0110 0 + 12 A 1 ADE H1' 11 0.090000 1.0080 0 + 13 A 1 ADE N9 52 -0.050000 14.0070 0 + 14 A 1 ADE C5 31 0.280000 12.0110 0 + 15 A 1 ADE N7 61 -0.710000 14.0070 0 + 16 A 1 ADE C8 30 0.340000 12.0110 0 + 17 A 1 ADE H8 4 0.120000 1.0080 0 + 18 A 1 ADE N1 58 -0.740000 14.0070 0 + 19 A 1 ADE C2 30 0.500000 12.0110 0 + 20 A 1 ADE H2 4 0.130000 1.0080 0 + 21 A 1 ADE N3 58 -0.750000 14.0070 0 + 22 A 1 ADE C4 31 0.430000 12.0110 0 + 23 A 1 ADE C6 23 0.460000 12.0110 0 + 24 A 1 ADE N6 50 -0.770000 14.0070 0 + 25 A 1 ADE H61 2 0.380000 1.0080 0 + 26 A 1 ADE H62 2 0.380000 1.0080 0 + 27 A 1 ADE C2' 34 0.140000 12.0110 0 + 28 A 1 ADE H2'' 11 0.090000 1.0080 0 + 29 A 1 ADE O2' 76 -0.660000 15.9994 0 + 30 A 1 ADE H2' 9 0.430000 1.0080 0 + 31 A 1 ADE C3' 33 0.010000 12.0110 0 + 32 A 1 ADE H3' 11 0.090000 1.0080 0 + 33 A 1 ADE O3' 73 -0.570000 15.9994 0 + 34 A 2 THY P 82 1.500000 30.9740 0 + 35 A 2 THY O1P 74 -0.780000 15.9994 0 + 36 A 2 THY O2P 74 -0.780000 15.9994 0 + 37 A 2 THY O5' 73 -0.570000 15.9994 0 + 38 A 2 THY C5' 38 -0.080000 12.0110 0 + 39 A 2 THY H5' 12 0.090000 1.0080 0 + 40 A 2 THY H5'' 12 0.090000 1.0080 0 + 41 A 2 THY C4' 33 0.160000 12.0110 0 + 42 A 2 THY H4' 11 0.090000 1.0080 0 + 43 A 2 THY O4' 78 -0.500000 15.9994 0 + 44 A 2 THY C1' 34 0.160000 12.0110 0 + 45 A 2 THY H1' 11 0.090000 1.0080 0 + 46 A 2 THY N1 53 -0.340000 14.0070 0 + 47 A 2 THY C6 24 0.170000 12.0110 0 + 48 A 2 THY H6 4 0.170000 1.0080 0 + 49 A 2 THY C2 22 0.510000 12.0110 0 + 50 A 2 THY O2 71 -0.410000 15.9994 0 + 51 A 2 THY N3 55 -0.460000 14.0070 0 + 52 A 2 THY H3 3 0.360000 1.0080 0 + 53 A 2 THY C4 20 0.500000 12.0110 0 + 54 A 2 THY O4 71 -0.450000 15.9994 0 + 55 A 2 THY C5 29 -0.150000 12.0110 0 + 56 A 2 THY C5M 39 -0.110000 12.0110 0 + 57 A 2 THY H51 13 0.070000 1.0080 0 + 58 A 2 THY H52 13 0.070000 1.0080 0 + 59 A 2 THY H53 13 0.070000 1.0080 0 + 60 A 2 THY C2' 34 0.140000 12.0110 0 + 61 A 2 THY H2'' 11 0.090000 1.0080 0 + 62 A 2 THY O2' 76 -0.660000 15.9994 0 + 63 A 2 THY H2' 9 0.430000 1.0080 0 + 64 A 2 THY C3' 33 0.010000 12.0110 0 + 65 A 2 THY H3' 11 0.090000 1.0080 0 + 66 A 2 THY O3' 73 -0.570000 15.9994 0 + 67 A 3 CYT P 82 1.500000 30.9740 0 + 68 A 3 CYT O1P 74 -0.780000 15.9994 0 + 69 A 3 CYT O2P 74 -0.780000 15.9994 0 + 70 A 3 CYT O5' 73 -0.570000 15.9994 0 + 71 A 3 CYT C5' 38 -0.080000 12.0110 0 + 72 A 3 CYT H5' 12 0.090000 1.0080 0 + 73 A 3 CYT H5'' 12 0.090000 1.0080 0 + 74 A 3 CYT C4' 33 0.160000 12.0110 0 + 75 A 3 CYT H4' 11 0.090000 1.0080 0 + 76 A 3 CYT O4' 78 -0.500000 15.9994 0 + 77 A 3 CYT C1' 34 0.160000 12.0110 0 + 78 A 3 CYT H1' 11 0.090000 1.0080 0 + 79 A 3 CYT N1 52 -0.130000 14.0070 0 + 80 A 3 CYT C6 24 0.050000 12.0110 0 + 81 A 3 CYT H6 4 0.170000 1.0080 0 + 82 A 3 CYT C5 24 -0.130000 12.0110 0 + 83 A 3 CYT H5 4 0.070000 1.0080 0 + 84 A 3 CYT C2 20 0.520000 12.0110 0 + 85 A 3 CYT O2 72 -0.490000 15.9994 0 + 86 A 3 CYT N3 57 -0.660000 14.0070 0 + 87 A 3 CYT C4 23 0.650000 12.0110 0 + 88 A 3 CYT N4 50 -0.750000 14.0070 0 + 89 A 3 CYT H41 2 0.370000 1.0080 0 + 90 A 3 CYT H42 2 0.330000 1.0080 0 + 91 A 3 CYT C2' 34 0.140000 12.0110 0 + 92 A 3 CYT H2'' 11 0.090000 1.0080 0 + 93 A 3 CYT O2' 76 -0.660000 15.9994 0 + 94 A 3 CYT H2' 9 0.430000 1.0080 0 + 95 A 3 CYT C3' 33 0.010000 12.0110 0 + 96 A 3 CYT H3' 11 0.090000 1.0080 0 + 97 A 3 CYT O3' 73 -0.570000 15.9994 0 + 98 A 4 CYT P 82 1.500000 30.9740 0 + 99 A 4 CYT O1P 74 -0.780000 15.9994 0 + 100 A 4 CYT O2P 74 -0.780000 15.9994 0 + 101 A 4 CYT O5' 73 -0.570000 15.9994 0 + 102 A 4 CYT C5' 38 -0.080000 12.0110 0 + 103 A 4 CYT H5' 12 0.090000 1.0080 0 + 104 A 4 CYT H5'' 12 0.090000 1.0080 0 + 105 A 4 CYT C4' 33 0.160000 12.0110 0 + 106 A 4 CYT H4' 11 0.090000 1.0080 0 + 107 A 4 CYT O4' 78 -0.500000 15.9994 0 + 108 A 4 CYT C1' 34 0.160000 12.0110 0 + 109 A 4 CYT H1' 11 0.090000 1.0080 0 + 110 A 4 CYT N1 52 -0.130000 14.0070 0 + 111 A 4 CYT C6 24 0.050000 12.0110 0 + 112 A 4 CYT H6 4 0.170000 1.0080 0 + 113 A 4 CYT C5 24 -0.130000 12.0110 0 + 114 A 4 CYT H5 4 0.070000 1.0080 0 + 115 A 4 CYT C2 20 0.520000 12.0110 0 + 116 A 4 CYT O2 72 -0.490000 15.9994 0 + 117 A 4 CYT N3 57 -0.660000 14.0070 0 + 118 A 4 CYT C4 23 0.650000 12.0110 0 + 119 A 4 CYT N4 50 -0.750000 14.0070 0 + 120 A 4 CYT H41 2 0.370000 1.0080 0 + 121 A 4 CYT H42 2 0.330000 1.0080 0 + 122 A 4 CYT C2' 34 0.140000 12.0110 0 + 123 A 4 CYT H2'' 11 0.090000 1.0080 0 + 124 A 4 CYT O2' 76 -0.660000 15.9994 0 + 125 A 4 CYT H2' 9 0.430000 1.0080 0 + 126 A 4 CYT C3' 33 0.010000 12.0110 0 + 127 A 4 CYT H3' 11 0.090000 1.0080 0 + 128 A 4 CYT O3' 73 -0.570000 15.9994 0 + 129 A 5 THY P 82 1.500000 30.9740 0 + 130 A 5 THY O1P 74 -0.780000 15.9994 0 + 131 A 5 THY O2P 74 -0.780000 15.9994 0 + 132 A 5 THY O5' 73 -0.570000 15.9994 0 + 133 A 5 THY C5' 38 -0.080000 12.0110 0 + 134 A 5 THY H5' 12 0.090000 1.0080 0 + 135 A 5 THY H5'' 12 0.090000 1.0080 0 + 136 A 5 THY C4' 33 0.160000 12.0110 0 + 137 A 5 THY H4' 11 0.090000 1.0080 0 + 138 A 5 THY O4' 78 -0.500000 15.9994 0 + 139 A 5 THY C1' 34 0.160000 12.0110 0 + 140 A 5 THY H1' 11 0.090000 1.0080 0 + 141 A 5 THY N1 53 -0.340000 14.0070 0 + 142 A 5 THY C6 24 0.170000 12.0110 0 + 143 A 5 THY H6 4 0.170000 1.0080 0 + 144 A 5 THY C2 22 0.510000 12.0110 0 + 145 A 5 THY O2 71 -0.410000 15.9994 0 + 146 A 5 THY N3 55 -0.460000 14.0070 0 + 147 A 5 THY H3 3 0.360000 1.0080 0 + 148 A 5 THY C4 20 0.500000 12.0110 0 + 149 A 5 THY O4 71 -0.450000 15.9994 0 + 150 A 5 THY C5 29 -0.150000 12.0110 0 + 151 A 5 THY C5M 39 -0.110000 12.0110 0 + 152 A 5 THY H51 13 0.070000 1.0080 0 + 153 A 5 THY H52 13 0.070000 1.0080 0 + 154 A 5 THY H53 13 0.070000 1.0080 0 + 155 A 5 THY C2' 34 0.140000 12.0110 0 + 156 A 5 THY H2'' 11 0.090000 1.0080 0 + 157 A 5 THY O2' 76 -0.660000 15.9994 0 + 158 A 5 THY H2' 9 0.430000 1.0080 0 + 159 A 5 THY C3' 33 0.010000 12.0110 0 + 160 A 5 THY H3' 11 0.090000 1.0080 0 + 161 A 5 THY O3' 73 -0.570000 15.9994 0 + 162 A 6 ADE P 82 1.500000 30.9740 0 + 163 A 6 ADE O1P 74 -0.780000 15.9994 0 + 164 A 6 ADE O2P 74 -0.780000 15.9994 0 + 165 A 6 ADE O5' 73 -0.570000 15.9994 0 + 166 A 6 ADE C5' 38 -0.080000 12.0110 0 + 167 A 6 ADE H5' 12 0.090000 1.0080 0 + 168 A 6 ADE H5'' 12 0.090000 1.0080 0 + 169 A 6 ADE C4' 33 0.160000 12.0110 0 + 170 A 6 ADE H4' 11 0.090000 1.0080 0 + 171 A 6 ADE O4' 78 -0.500000 15.9994 0 + 172 A 6 ADE C1' 34 0.160000 12.0110 0 + 173 A 6 ADE H1' 11 0.090000 1.0080 0 + 174 A 6 ADE N9 52 -0.050000 14.0070 0 + 175 A 6 ADE C5 31 0.280000 12.0110 0 + 176 A 6 ADE N7 61 -0.710000 14.0070 0 + 177 A 6 ADE C8 30 0.340000 12.0110 0 + 178 A 6 ADE H8 4 0.120000 1.0080 0 + 179 A 6 ADE N1 58 -0.740000 14.0070 0 + 180 A 6 ADE C2 30 0.500000 12.0110 0 + 181 A 6 ADE H2 4 0.130000 1.0080 0 + 182 A 6 ADE N3 58 -0.750000 14.0070 0 + 183 A 6 ADE C4 31 0.430000 12.0110 0 + 184 A 6 ADE C6 23 0.460000 12.0110 0 + 185 A 6 ADE N6 50 -0.770000 14.0070 0 + 186 A 6 ADE H61 2 0.380000 1.0080 0 + 187 A 6 ADE H62 2 0.380000 1.0080 0 + 188 A 6 ADE C2' 34 0.140000 12.0110 0 + 189 A 6 ADE H2'' 11 0.090000 1.0080 0 + 190 A 6 ADE O2' 76 -0.660000 15.9994 0 + 191 A 6 ADE H2' 9 0.430000 1.0080 0 + 192 A 6 ADE C3' 33 0.010000 12.0110 0 + 193 A 6 ADE H3' 11 0.090000 1.0080 0 + 194 A 6 ADE O3' 73 -0.570000 15.9994 0 + 195 A 7 GUA P 82 1.500000 30.9740 0 + 196 A 7 GUA O1P 74 -0.780000 15.9994 0 + 197 A 7 GUA O2P 74 -0.780000 15.9994 0 + 198 A 7 GUA O5' 73 -0.570000 15.9994 0 + 199 A 7 GUA C5' 38 -0.080000 12.0110 0 + 200 A 7 GUA H5' 12 0.090000 1.0080 0 + 201 A 7 GUA H5'' 12 0.090000 1.0080 0 + 202 A 7 GUA C4' 33 0.160000 12.0110 0 + 203 A 7 GUA H4' 11 0.090000 1.0080 0 + 204 A 7 GUA O4' 78 -0.500000 15.9994 0 + 205 A 7 GUA C1' 34 0.160000 12.0110 0 + 206 A 7 GUA H1' 11 0.090000 1.0080 0 + 207 A 7 GUA N9 53 -0.020000 14.0070 0 + 208 A 7 GUA C4 31 0.260000 12.0110 0 + 209 A 7 GUA N2 50 -0.680000 14.0070 0 + 210 A 7 GUA H21 2 0.320000 1.0080 0 + 211 A 7 GUA H22 2 0.350000 1.0080 0 + 212 A 7 GUA N3 60 -0.740000 14.0070 0 + 213 A 7 GUA C2 23 0.750000 12.0110 0 + 214 A 7 GUA N1 56 -0.340000 14.0070 0 + 215 A 7 GUA H1 3 0.260000 1.0080 0 + 216 A 7 GUA C6 20 0.540000 12.0110 0 + 217 A 7 GUA O6 71 -0.510000 15.9994 0 + 218 A 7 GUA C5 32 0.000000 12.0110 0 + 219 A 7 GUA N7 61 -0.600000 14.0070 0 + 220 A 7 GUA C8 30 0.250000 12.0110 0 + 221 A 7 GUA H8 4 0.160000 1.0080 0 + 222 A 7 GUA C2' 34 0.140000 12.0110 0 + 223 A 7 GUA H2'' 11 0.090000 1.0080 0 + 224 A 7 GUA O2' 76 -0.660000 15.9994 0 + 225 A 7 GUA H2' 9 0.430000 1.0080 0 + 226 A 7 GUA C3' 33 0.010000 12.0110 0 + 227 A 7 GUA H3' 11 0.090000 1.0080 0 + 228 A 7 GUA O3' 73 -0.570000 15.9994 0 + 229 A 8 THY P 82 1.500000 30.9740 0 + 230 A 8 THY O1P 74 -0.780000 15.9994 0 + 231 A 8 THY O2P 74 -0.780000 15.9994 0 + 232 A 8 THY O5' 73 -0.570000 15.9994 0 + 233 A 8 THY C5' 38 -0.080000 12.0110 0 + 234 A 8 THY H5' 12 0.090000 1.0080 0 + 235 A 8 THY H5'' 12 0.090000 1.0080 0 + 236 A 8 THY C4' 33 0.160000 12.0110 0 + 237 A 8 THY H4' 11 0.090000 1.0080 0 + 238 A 8 THY O4' 78 -0.500000 15.9994 0 + 239 A 8 THY C1' 34 0.160000 12.0110 0 + 240 A 8 THY H1' 11 0.090000 1.0080 0 + 241 A 8 THY N1 53 -0.340000 14.0070 0 + 242 A 8 THY C6 24 0.170000 12.0110 0 + 243 A 8 THY H6 4 0.170000 1.0080 0 + 244 A 8 THY C2 22 0.510000 12.0110 0 + 245 A 8 THY O2 71 -0.410000 15.9994 0 + 246 A 8 THY N3 55 -0.460000 14.0070 0 + 247 A 8 THY H3 3 0.360000 1.0080 0 + 248 A 8 THY C4 20 0.500000 12.0110 0 + 249 A 8 THY O4 71 -0.450000 15.9994 0 + 250 A 8 THY C5 29 -0.150000 12.0110 0 + 251 A 8 THY C5M 39 -0.110000 12.0110 0 + 252 A 8 THY H51 13 0.070000 1.0080 0 + 253 A 8 THY H52 13 0.070000 1.0080 0 + 254 A 8 THY H53 13 0.070000 1.0080 0 + 255 A 8 THY C2' 34 0.140000 12.0110 0 + 256 A 8 THY H2'' 11 0.090000 1.0080 0 + 257 A 8 THY O2' 76 -0.660000 15.9994 0 + 258 A 8 THY H2' 9 0.430000 1.0080 0 + 259 A 8 THY C3' 33 0.010000 12.0110 0 + 260 A 8 THY H3' 11 0.090000 1.0080 0 + 261 A 8 THY O3' 73 -0.570000 15.9994 0 + 262 A 9 THY P 82 1.500000 30.9740 0 + 263 A 9 THY O1P 74 -0.780000 15.9994 0 + 264 A 9 THY O2P 74 -0.780000 15.9994 0 + 265 A 9 THY O5' 73 -0.570000 15.9994 0 + 266 A 9 THY C5' 38 -0.080000 12.0110 0 + 267 A 9 THY H5' 12 0.090000 1.0080 0 + 268 A 9 THY H5'' 12 0.090000 1.0080 0 + 269 A 9 THY C4' 33 0.160000 12.0110 0 + 270 A 9 THY H4' 11 0.090000 1.0080 0 + 271 A 9 THY O4' 78 -0.500000 15.9994 0 + 272 A 9 THY C1' 34 0.160000 12.0110 0 + 273 A 9 THY H1' 11 0.090000 1.0080 0 + 274 A 9 THY N1 53 -0.340000 14.0070 0 + 275 A 9 THY C6 24 0.170000 12.0110 0 + 276 A 9 THY H6 4 0.170000 1.0080 0 + 277 A 9 THY C2 22 0.510000 12.0110 0 + 278 A 9 THY O2 71 -0.410000 15.9994 0 + 279 A 9 THY N3 55 -0.460000 14.0070 0 + 280 A 9 THY H3 3 0.360000 1.0080 0 + 281 A 9 THY C4 20 0.500000 12.0110 0 + 282 A 9 THY O4 71 -0.450000 15.9994 0 + 283 A 9 THY C5 29 -0.150000 12.0110 0 + 284 A 9 THY C5M 39 -0.110000 12.0110 0 + 285 A 9 THY H51 13 0.070000 1.0080 0 + 286 A 9 THY H52 13 0.070000 1.0080 0 + 287 A 9 THY H53 13 0.070000 1.0080 0 + 288 A 9 THY C2' 34 0.140000 12.0110 0 + 289 A 9 THY H2'' 11 0.090000 1.0080 0 + 290 A 9 THY O2' 76 -0.660000 15.9994 0 + 291 A 9 THY H2' 9 0.430000 1.0080 0 + 292 A 9 THY C3' 33 0.010000 12.0110 0 + 293 A 9 THY H3' 11 0.090000 1.0080 0 + 294 A 9 THY O3' 73 -0.570000 15.9994 0 + 295 A 10 ADE P 82 1.500000 30.9740 0 + 296 A 10 ADE O1P 74 -0.780000 15.9994 0 + 297 A 10 ADE O2P 74 -0.780000 15.9994 0 + 298 A 10 ADE O5' 73 -0.570000 15.9994 0 + 299 A 10 ADE C5' 38 -0.080000 12.0110 0 + 300 A 10 ADE H5' 12 0.090000 1.0080 0 + 301 A 10 ADE H5'' 12 0.090000 1.0080 0 + 302 A 10 ADE C4' 33 0.160000 12.0110 0 + 303 A 10 ADE H4' 11 0.090000 1.0080 0 + 304 A 10 ADE O4' 78 -0.500000 15.9994 0 + 305 A 10 ADE C1' 34 0.160000 12.0110 0 + 306 A 10 ADE H1' 11 0.090000 1.0080 0 + 307 A 10 ADE N9 52 -0.050000 14.0070 0 + 308 A 10 ADE C5 31 0.280000 12.0110 0 + 309 A 10 ADE N7 61 -0.710000 14.0070 0 + 310 A 10 ADE C8 30 0.340000 12.0110 0 + 311 A 10 ADE H8 4 0.120000 1.0080 0 + 312 A 10 ADE N1 58 -0.740000 14.0070 0 + 313 A 10 ADE C2 30 0.500000 12.0110 0 + 314 A 10 ADE H2 4 0.130000 1.0080 0 + 315 A 10 ADE N3 58 -0.750000 14.0070 0 + 316 A 10 ADE C4 31 0.430000 12.0110 0 + 317 A 10 ADE C6 23 0.460000 12.0110 0 + 318 A 10 ADE N6 50 -0.770000 14.0070 0 + 319 A 10 ADE H61 2 0.380000 1.0080 0 + 320 A 10 ADE H62 2 0.380000 1.0080 0 + 321 A 10 ADE C2' 34 0.140000 12.0110 0 + 322 A 10 ADE H2'' 11 0.090000 1.0080 0 + 323 A 10 ADE O2' 76 -0.660000 15.9994 0 + 324 A 10 ADE H2' 9 0.430000 1.0080 0 + 325 A 10 ADE C3' 33 0.010000 12.0110 0 + 326 A 10 ADE H3' 11 0.090000 1.0080 0 + 327 A 10 ADE O3' 73 -0.570000 15.9994 0 + 328 A 11 THY P 82 1.500000 30.9740 0 + 329 A 11 THY O1P 74 -0.780000 15.9994 0 + 330 A 11 THY O2P 74 -0.780000 15.9994 0 + 331 A 11 THY O5' 73 -0.570000 15.9994 0 + 332 A 11 THY C5' 38 -0.080000 12.0110 0 + 333 A 11 THY H5' 12 0.090000 1.0080 0 + 334 A 11 THY H5'' 12 0.090000 1.0080 0 + 335 A 11 THY C4' 33 0.160000 12.0110 0 + 336 A 11 THY H4' 11 0.090000 1.0080 0 + 337 A 11 THY O4' 78 -0.500000 15.9994 0 + 338 A 11 THY C1' 34 0.160000 12.0110 0 + 339 A 11 THY H1' 11 0.090000 1.0080 0 + 340 A 11 THY N1 53 -0.340000 14.0070 0 + 341 A 11 THY C6 24 0.170000 12.0110 0 + 342 A 11 THY H6 4 0.170000 1.0080 0 + 343 A 11 THY C2 22 0.510000 12.0110 0 + 344 A 11 THY O2 71 -0.410000 15.9994 0 + 345 A 11 THY N3 55 -0.460000 14.0070 0 + 346 A 11 THY H3 3 0.360000 1.0080 0 + 347 A 11 THY C4 20 0.500000 12.0110 0 + 348 A 11 THY O4 71 -0.450000 15.9994 0 + 349 A 11 THY C5 29 -0.150000 12.0110 0 + 350 A 11 THY C5M 39 -0.110000 12.0110 0 + 351 A 11 THY H51 13 0.070000 1.0080 0 + 352 A 11 THY H52 13 0.070000 1.0080 0 + 353 A 11 THY H53 13 0.070000 1.0080 0 + 354 A 11 THY C2' 34 0.140000 12.0110 0 + 355 A 11 THY H2'' 11 0.090000 1.0080 0 + 356 A 11 THY O2' 76 -0.660000 15.9994 0 + 357 A 11 THY H2' 9 0.430000 1.0080 0 + 358 A 11 THY C3' 33 0.010000 12.0110 0 + 359 A 11 THY H3' 11 0.090000 1.0080 0 + 360 A 11 THY O3' 73 -0.570000 15.9994 0 + 361 A 12 ADE P 82 1.500000 30.9740 0 + 362 A 12 ADE O1P 74 -0.780000 15.9994 0 + 363 A 12 ADE O2P 74 -0.780000 15.9994 0 + 364 A 12 ADE O5' 73 -0.570000 15.9994 0 + 365 A 12 ADE C5' 38 -0.080000 12.0110 0 + 366 A 12 ADE H5' 12 0.090000 1.0080 0 + 367 A 12 ADE H5'' 12 0.090000 1.0080 0 + 368 A 12 ADE C4' 33 0.160000 12.0110 0 + 369 A 12 ADE H4' 11 0.090000 1.0080 0 + 370 A 12 ADE O4' 78 -0.500000 15.9994 0 + 371 A 12 ADE C1' 34 0.160000 12.0110 0 + 372 A 12 ADE H1' 11 0.090000 1.0080 0 + 373 A 12 ADE N9 52 -0.050000 14.0070 0 + 374 A 12 ADE C5 31 0.280000 12.0110 0 + 375 A 12 ADE N7 61 -0.710000 14.0070 0 + 376 A 12 ADE C8 30 0.340000 12.0110 0 + 377 A 12 ADE H8 4 0.120000 1.0080 0 + 378 A 12 ADE N1 58 -0.740000 14.0070 0 + 379 A 12 ADE C2 30 0.500000 12.0110 0 + 380 A 12 ADE H2 4 0.130000 1.0080 0 + 381 A 12 ADE N3 58 -0.750000 14.0070 0 + 382 A 12 ADE C4 31 0.430000 12.0110 0 + 383 A 12 ADE C6 23 0.460000 12.0110 0 + 384 A 12 ADE N6 50 -0.770000 14.0070 0 + 385 A 12 ADE H61 2 0.380000 1.0080 0 + 386 A 12 ADE H62 2 0.380000 1.0080 0 + 387 A 12 ADE C2' 34 0.140000 12.0110 0 + 388 A 12 ADE H2'' 11 0.090000 1.0080 0 + 389 A 12 ADE O2' 76 -0.660000 15.9994 0 + 390 A 12 ADE H2' 9 0.430000 1.0080 0 + 391 A 12 ADE C3' 33 0.010000 12.0110 0 + 392 A 12 ADE H3' 11 0.090000 1.0080 0 + 393 A 12 ADE O3' 73 -0.570000 15.9994 0 + 394 A 13 GUA P 82 1.500000 30.9740 0 + 395 A 13 GUA O1P 74 -0.780000 15.9994 0 + 396 A 13 GUA O2P 74 -0.780000 15.9994 0 + 397 A 13 GUA O5' 73 -0.570000 15.9994 0 + 398 A 13 GUA C5' 38 -0.080000 12.0110 0 + 399 A 13 GUA H5' 12 0.090000 1.0080 0 + 400 A 13 GUA H5'' 12 0.090000 1.0080 0 + 401 A 13 GUA C4' 33 0.160000 12.0110 0 + 402 A 13 GUA H4' 11 0.090000 1.0080 0 + 403 A 13 GUA O4' 78 -0.500000 15.9994 0 + 404 A 13 GUA C1' 34 0.160000 12.0110 0 + 405 A 13 GUA H1' 11 0.090000 1.0080 0 + 406 A 13 GUA N9 53 -0.020000 14.0070 0 + 407 A 13 GUA C4 31 0.260000 12.0110 0 + 408 A 13 GUA N2 50 -0.680000 14.0070 0 + 409 A 13 GUA H21 2 0.320000 1.0080 0 + 410 A 13 GUA H22 2 0.350000 1.0080 0 + 411 A 13 GUA N3 60 -0.740000 14.0070 0 + 412 A 13 GUA C2 23 0.750000 12.0110 0 + 413 A 13 GUA N1 56 -0.340000 14.0070 0 + 414 A 13 GUA H1 3 0.260000 1.0080 0 + 415 A 13 GUA C6 20 0.540000 12.0110 0 + 416 A 13 GUA O6 71 -0.510000 15.9994 0 + 417 A 13 GUA C5 32 0.000000 12.0110 0 + 418 A 13 GUA N7 61 -0.600000 14.0070 0 + 419 A 13 GUA C8 30 0.250000 12.0110 0 + 420 A 13 GUA H8 4 0.160000 1.0080 0 + 421 A 13 GUA C2' 34 0.140000 12.0110 0 + 422 A 13 GUA H2'' 11 0.090000 1.0080 0 + 423 A 13 GUA O2' 76 -0.660000 15.9994 0 + 424 A 13 GUA H2' 9 0.430000 1.0080 0 + 425 A 13 GUA C3' 33 0.010000 12.0110 0 + 426 A 13 GUA H3' 11 0.090000 1.0080 0 + 427 A 13 GUA O3' 73 -0.570000 15.9994 0 + 428 A 14 GUA P 82 1.500000 30.9740 0 + 429 A 14 GUA O1P 74 -0.780000 15.9994 0 + 430 A 14 GUA O2P 74 -0.780000 15.9994 0 + 431 A 14 GUA O5' 73 -0.570000 15.9994 0 + 432 A 14 GUA C5' 38 -0.080000 12.0110 0 + 433 A 14 GUA H5' 12 0.090000 1.0080 0 + 434 A 14 GUA H5'' 12 0.090000 1.0080 0 + 435 A 14 GUA C4' 33 0.160000 12.0110 0 + 436 A 14 GUA H4' 11 0.090000 1.0080 0 + 437 A 14 GUA O4' 78 -0.500000 15.9994 0 + 438 A 14 GUA C1' 34 0.160000 12.0110 0 + 439 A 14 GUA H1' 11 0.090000 1.0080 0 + 440 A 14 GUA N9 53 -0.020000 14.0070 0 + 441 A 14 GUA C4 31 0.260000 12.0110 0 + 442 A 14 GUA N2 50 -0.680000 14.0070 0 + 443 A 14 GUA H21 2 0.320000 1.0080 0 + 444 A 14 GUA H22 2 0.350000 1.0080 0 + 445 A 14 GUA N3 60 -0.740000 14.0070 0 + 446 A 14 GUA C2 23 0.750000 12.0110 0 + 447 A 14 GUA N1 56 -0.340000 14.0070 0 + 448 A 14 GUA H1 3 0.260000 1.0080 0 + 449 A 14 GUA C6 20 0.540000 12.0110 0 + 450 A 14 GUA O6 71 -0.510000 15.9994 0 + 451 A 14 GUA C5 32 0.000000 12.0110 0 + 452 A 14 GUA N7 61 -0.600000 14.0070 0 + 453 A 14 GUA C8 30 0.250000 12.0110 0 + 454 A 14 GUA H8 4 0.160000 1.0080 0 + 455 A 14 GUA C2' 34 0.140000 12.0110 0 + 456 A 14 GUA H2'' 11 0.090000 1.0080 0 + 457 A 14 GUA O2' 76 -0.660000 15.9994 0 + 458 A 14 GUA H2' 9 0.430000 1.0080 0 + 459 A 14 GUA C3' 33 0.010000 12.0110 0 + 460 A 14 GUA H3' 11 0.090000 1.0080 0 + 461 A 14 GUA O3' 73 -0.570000 15.9994 0 + 462 A 15 ADE P 82 1.500000 30.9740 0 + 463 A 15 ADE O1P 74 -0.780000 15.9994 0 + 464 A 15 ADE O2P 74 -0.780000 15.9994 0 + 465 A 15 ADE O5' 73 -0.570000 15.9994 0 + 466 A 15 ADE C5' 38 -0.080000 12.0110 0 + 467 A 15 ADE H5' 12 0.090000 1.0080 0 + 468 A 15 ADE H5'' 12 0.090000 1.0080 0 + 469 A 15 ADE C4' 33 0.160000 12.0110 0 + 470 A 15 ADE H4' 11 0.090000 1.0080 0 + 471 A 15 ADE O4' 78 -0.500000 15.9994 0 + 472 A 15 ADE C1' 34 0.160000 12.0110 0 + 473 A 15 ADE H1' 11 0.090000 1.0080 0 + 474 A 15 ADE N9 52 -0.050000 14.0070 0 + 475 A 15 ADE C5 31 0.280000 12.0110 0 + 476 A 15 ADE N7 61 -0.710000 14.0070 0 + 477 A 15 ADE C8 30 0.340000 12.0110 0 + 478 A 15 ADE H8 4 0.120000 1.0080 0 + 479 A 15 ADE N1 58 -0.740000 14.0070 0 + 480 A 15 ADE C2 30 0.500000 12.0110 0 + 481 A 15 ADE H2 4 0.130000 1.0080 0 + 482 A 15 ADE N3 58 -0.750000 14.0070 0 + 483 A 15 ADE C4 31 0.430000 12.0110 0 + 484 A 15 ADE C6 23 0.460000 12.0110 0 + 485 A 15 ADE N6 50 -0.770000 14.0070 0 + 486 A 15 ADE H61 2 0.380000 1.0080 0 + 487 A 15 ADE H62 2 0.380000 1.0080 0 + 488 A 15 ADE C2' 34 0.140000 12.0110 0 + 489 A 15 ADE H2'' 11 0.090000 1.0080 0 + 490 A 15 ADE O2' 76 -0.660000 15.9994 0 + 491 A 15 ADE H2' 9 0.430000 1.0080 0 + 492 A 15 ADE C3' 33 0.010000 12.0110 0 + 493 A 15 ADE H3' 11 0.090000 1.0080 0 + 494 A 15 ADE O3' 73 -0.570000 15.9994 0 + 495 A 16 THY P 82 1.500000 30.9740 0 + 496 A 16 THY O1P 74 -0.780000 15.9994 0 + 497 A 16 THY O2P 74 -0.780000 15.9994 0 + 498 A 16 THY O5' 73 -0.570000 15.9994 0 + 499 A 16 THY C5' 38 -0.080000 12.0110 0 + 500 A 16 THY H5' 12 0.090000 1.0080 0 + 501 A 16 THY H5'' 12 0.090000 1.0080 0 + 502 A 16 THY C4' 33 0.160000 12.0110 0 + 503 A 16 THY H4' 11 0.090000 1.0080 0 + 504 A 16 THY O4' 78 -0.500000 15.9994 0 + 505 A 16 THY C1' 34 0.160000 12.0110 0 + 506 A 16 THY H1' 11 0.090000 1.0080 0 + 507 A 16 THY N1 53 -0.340000 14.0070 0 + 508 A 16 THY C6 24 0.170000 12.0110 0 + 509 A 16 THY H6 4 0.170000 1.0080 0 + 510 A 16 THY C2 22 0.510000 12.0110 0 + 511 A 16 THY O2 71 -0.410000 15.9994 0 + 512 A 16 THY N3 55 -0.460000 14.0070 0 + 513 A 16 THY H3 3 0.360000 1.0080 0 + 514 A 16 THY C4 20 0.500000 12.0110 0 + 515 A 16 THY O4 71 -0.450000 15.9994 0 + 516 A 16 THY C5 29 -0.150000 12.0110 0 + 517 A 16 THY C5M 39 -0.110000 12.0110 0 + 518 A 16 THY H51 13 0.070000 1.0080 0 + 519 A 16 THY H52 13 0.070000 1.0080 0 + 520 A 16 THY H53 13 0.070000 1.0080 0 + 521 A 16 THY C2' 34 0.140000 12.0110 0 + 522 A 16 THY H2'' 11 0.090000 1.0080 0 + 523 A 16 THY O2' 76 -0.660000 15.9994 0 + 524 A 16 THY H2' 9 0.430000 1.0080 0 + 525 A 16 THY C3' 33 0.010000 12.0110 0 + 526 A 16 THY H3' 11 0.090000 1.0080 0 + 527 A 16 THY O3' 73 -0.570000 15.9994 0 + + 566 !NBOND: bonds + 1 2 1 3 1 4 4 5 + 5 8 5 6 5 7 8 10 + 8 31 8 9 10 11 11 13 + 11 27 11 12 13 22 13 16 + 14 15 15 16 16 17 18 23 + 19 18 19 20 19 21 22 21 + 22 14 23 24 23 14 24 25 + 24 26 27 31 27 29 27 28 + 29 30 31 33 31 32 33 34 + 34 35 34 36 34 37 37 38 + 38 41 38 39 38 40 41 43 + 41 64 41 42 43 44 44 46 + 44 60 44 45 46 49 46 47 + 47 48 49 51 49 50 51 52 + 51 53 53 55 53 54 55 56 + 55 47 56 57 56 58 56 59 + 60 64 60 62 60 61 62 63 + 64 66 64 65 66 67 67 68 + 67 69 67 70 70 71 71 74 + 71 72 71 73 74 76 74 95 + 74 75 76 77 77 79 77 91 + 77 78 79 84 79 80 80 81 + 82 83 82 80 84 86 84 85 + 86 87 87 88 87 82 88 89 + 88 90 91 95 91 93 91 92 + 93 94 95 97 95 96 97 98 + 98 99 98 100 98 101 101 102 + 102 105 102 103 102 104 105 107 + 105 126 105 106 107 108 108 110 + 108 122 108 109 110 115 110 111 + 111 112 113 114 113 111 115 117 + 115 116 117 118 118 119 118 113 + 119 120 119 121 122 126 122 124 + 122 123 124 125 126 128 126 127 + 128 129 129 130 129 131 129 132 + 132 133 133 136 133 134 133 135 + 136 138 136 159 136 137 138 139 + 139 141 139 155 139 140 141 144 + 141 142 142 143 144 146 144 145 + 146 147 146 148 148 150 148 149 + 150 151 150 142 151 152 151 153 + 151 154 155 159 155 157 155 156 + 157 158 159 161 159 160 161 162 + 162 163 162 164 162 165 165 166 + 166 169 166 167 166 168 169 171 + 169 192 169 170 171 172 172 174 + 172 188 172 173 174 183 174 177 + 175 176 176 177 177 178 179 184 + 180 179 180 181 180 182 183 182 + 183 175 184 185 184 175 185 186 + 185 187 188 192 188 190 188 189 + 190 191 192 194 192 193 194 195 + 195 196 195 197 195 198 198 199 + 199 202 199 200 199 201 202 204 + 202 226 202 203 204 205 205 207 + 205 222 205 206 207 208 207 220 + 208 212 208 218 209 210 209 211 + 213 209 213 214 213 212 214 215 + 214 216 216 218 216 217 218 219 + 219 220 220 221 222 226 222 224 + 222 223 224 225 226 228 226 227 + 228 229 229 230 229 231 229 232 + 232 233 233 236 233 234 233 235 + 236 238 236 259 236 237 238 239 + 239 241 239 255 239 240 241 244 + 241 242 242 243 244 246 244 245 + 246 247 246 248 248 250 248 249 + 250 251 250 242 251 252 251 253 + 251 254 255 259 255 257 255 256 + 257 258 259 261 259 260 261 262 + 262 263 262 264 262 265 265 266 + 266 269 266 267 266 268 269 271 + 269 292 269 270 271 272 272 274 + 272 288 272 273 274 277 274 275 + 275 276 277 279 277 278 279 280 + 279 281 281 283 281 282 283 284 + 283 275 284 285 284 286 284 287 + 288 292 288 290 288 289 290 291 + 292 294 292 293 294 295 295 296 + 295 297 295 298 298 299 299 302 + 299 300 299 301 302 304 302 325 + 302 303 304 305 305 307 305 321 + 305 306 307 316 307 310 308 309 + 309 310 310 311 312 317 313 312 + 313 314 313 315 316 315 316 308 + 317 318 317 308 318 319 318 320 + 321 325 321 323 321 322 323 324 + 325 327 325 326 327 328 328 329 + 328 330 328 331 331 332 332 335 + 332 333 332 334 335 337 335 358 + 335 336 337 338 338 340 338 354 + 338 339 340 343 340 341 341 342 + 343 345 343 344 345 346 345 347 + 347 349 347 348 349 350 349 341 + 350 351 350 352 350 353 354 358 + 354 356 354 355 356 357 358 360 + 358 359 360 361 361 362 361 363 + 361 364 364 365 365 368 365 366 + 365 367 368 370 368 391 368 369 + 370 371 371 373 371 387 371 372 + 373 382 373 376 374 375 375 376 + 376 377 378 383 379 378 379 380 + 379 381 382 381 382 374 383 384 + 383 374 384 385 384 386 387 391 + 387 389 387 388 389 390 391 393 + 391 392 393 394 394 395 394 396 + 394 397 397 398 398 401 398 399 + 398 400 401 403 401 425 401 402 + 403 404 404 406 404 421 404 405 + 406 407 406 419 407 411 407 417 + 408 409 408 410 412 408 412 413 + 412 411 413 414 413 415 415 417 + 415 416 417 418 418 419 419 420 + 421 425 421 423 421 422 423 424 + 425 427 425 426 427 428 428 429 + 428 430 428 431 431 432 432 435 + 432 433 432 434 435 437 435 459 + 435 436 437 438 438 440 438 455 + 438 439 440 441 440 453 441 445 + 441 451 442 443 442 444 446 442 + 446 447 446 445 447 448 447 449 + 449 451 449 450 451 452 452 453 + 453 454 455 459 455 457 455 456 + 457 458 459 461 459 460 461 462 + 462 463 462 464 462 465 465 466 + 466 469 466 467 466 468 469 471 + 469 492 469 470 471 472 472 474 + 472 488 472 473 474 483 474 477 + 475 476 476 477 477 478 479 484 + 480 479 480 481 480 482 483 482 + 483 475 484 485 484 475 485 486 + 485 487 488 492 488 490 488 489 + 490 491 492 494 492 493 494 495 + 495 496 495 497 495 498 498 499 + 499 502 499 500 499 501 502 504 + 502 525 502 503 504 505 505 507 + 505 521 505 506 507 510 507 508 + 508 509 510 512 510 511 512 513 + 512 514 514 516 514 515 516 517 + 516 508 517 518 517 519 517 520 + 521 525 521 523 521 522 523 524 + 525 527 525 526 + + 1016 !NTHETA: angles + 1 4 5 2 1 4 2 1 3 + 3 1 4 4 5 7 4 5 6 + 4 5 8 5 8 9 5 8 31 + 5 8 10 6 5 7 8 31 32 + 8 31 33 8 31 27 8 10 11 + 8 5 7 8 5 6 10 11 12 + 10 11 27 10 11 13 10 8 9 + 10 8 31 11 27 28 11 27 29 + 11 27 31 11 13 16 11 13 22 + 13 22 14 13 22 21 13 16 15 + 13 16 17 13 11 12 13 11 27 + 14 23 18 14 15 16 15 14 22 + 17 16 15 18 19 21 18 19 20 + 19 18 23 20 19 21 21 22 14 + 22 21 19 22 13 16 23 24 26 + 23 24 25 23 14 22 23 14 15 + 24 23 18 24 23 14 25 24 26 + 27 31 32 27 31 33 27 29 30 + 27 11 12 29 27 28 31 33 34 + 31 27 28 31 27 29 31 8 9 + 33 31 32 34 37 38 35 34 33 + 35 34 37 35 34 36 36 34 33 + 36 34 37 37 38 40 37 38 39 + 37 38 41 37 34 33 38 41 42 + 38 41 64 38 41 43 39 38 40 + 41 64 65 41 64 66 41 64 60 + 41 43 44 41 38 40 41 38 39 + 43 44 45 43 44 60 43 44 46 + 43 41 42 43 41 64 44 60 61 + 44 60 62 44 60 64 44 46 47 + 44 46 49 46 49 50 46 49 51 + 46 47 55 46 47 48 46 44 45 + 46 44 60 48 47 55 49 51 53 + 49 51 52 49 46 47 51 53 54 + 51 53 55 51 49 50 52 51 53 + 53 55 47 53 55 56 55 56 59 + 55 56 58 55 56 57 55 53 54 + 56 55 47 57 56 59 57 56 58 + 58 56 59 60 64 65 60 64 66 + 60 62 63 60 44 45 62 60 61 + 64 66 67 64 60 61 64 60 62 + 64 41 42 66 64 65 67 70 71 + 68 67 66 68 67 70 68 67 69 + 69 67 66 69 67 70 70 71 73 + 70 71 72 70 71 74 70 67 66 + 71 74 75 71 74 95 71 74 76 + 72 71 73 74 95 96 74 95 97 + 74 95 91 74 76 77 74 71 73 + 74 71 72 76 77 78 76 77 91 + 76 77 79 76 74 75 76 74 95 + 77 91 92 77 91 93 77 91 95 + 77 79 80 77 79 84 79 84 85 + 79 84 86 79 80 82 79 80 81 + 79 77 78 79 77 91 81 80 82 + 82 87 86 83 82 80 84 86 87 + 84 79 80 86 84 85 87 88 90 + 87 88 89 87 82 80 87 82 83 + 88 87 86 88 87 82 89 88 90 + 91 95 96 91 95 97 91 93 94 + 91 77 78 93 91 92 95 97 98 + 95 91 92 95 91 93 95 74 75 + 97 95 96 98 101 102 99 98 97 + 99 98 101 99 98 100 100 98 97 + 100 98 101 101 102 104 101 102 103 + 101 102 105 101 98 97 102 105 106 + 102 105 126 102 105 107 103 102 104 + 105 126 127 105 126 128 105 126 122 + 105 107 108 105 102 104 105 102 103 + 107 108 109 107 108 122 107 108 110 + 107 105 106 107 105 126 108 122 123 + 108 122 124 108 122 126 108 110 111 + 108 110 115 110 115 116 110 115 117 + 110 111 113 110 111 112 110 108 109 + 110 108 122 112 111 113 113 118 117 + 114 113 111 115 117 118 115 110 111 + 117 115 116 118 119 121 118 119 120 + 118 113 111 118 113 114 119 118 117 + 119 118 113 120 119 121 122 126 127 + 122 126 128 122 124 125 122 108 109 + 124 122 123 126 128 129 126 122 123 + 126 122 124 126 105 106 128 126 127 + 129 132 133 130 129 128 130 129 132 + 130 129 131 131 129 128 131 129 132 + 132 133 135 132 133 134 132 133 136 + 132 129 128 133 136 137 133 136 159 + 133 136 138 134 133 135 136 159 160 + 136 159 161 136 159 155 136 138 139 + 136 133 135 136 133 134 138 139 140 + 138 139 155 138 139 141 138 136 137 + 138 136 159 139 155 156 139 155 157 + 139 155 159 139 141 142 139 141 144 + 141 144 145 141 144 146 141 142 150 + 141 142 143 141 139 140 141 139 155 + 143 142 150 144 146 148 144 146 147 + 144 141 142 146 148 149 146 148 150 + 146 144 145 147 146 148 148 150 142 + 148 150 151 150 151 154 150 151 153 + 150 151 152 150 148 149 151 150 142 + 152 151 154 152 151 153 153 151 154 + 155 159 160 155 159 161 155 157 158 + 155 139 140 157 155 156 159 161 162 + 159 155 156 159 155 157 159 136 137 + 161 159 160 162 165 166 163 162 161 + 163 162 165 163 162 164 164 162 161 + 164 162 165 165 166 168 165 166 167 + 165 166 169 165 162 161 166 169 170 + 166 169 192 166 169 171 167 166 168 + 169 192 193 169 192 194 169 192 188 + 169 171 172 169 166 168 169 166 167 + 171 172 173 171 172 188 171 172 174 + 171 169 170 171 169 192 172 188 189 + 172 188 190 172 188 192 172 174 177 + 172 174 183 174 183 175 174 183 182 + 174 177 176 174 177 178 174 172 173 + 174 172 188 175 184 179 175 176 177 + 176 175 183 178 177 176 179 180 182 + 179 180 181 180 179 184 181 180 182 + 182 183 175 183 182 180 183 174 177 + 184 185 187 184 185 186 184 175 183 + 184 175 176 185 184 179 185 184 175 + 186 185 187 188 192 193 188 192 194 + 188 190 191 188 172 173 190 188 189 + 192 194 195 192 188 189 192 188 190 + 192 169 170 194 192 193 195 198 199 + 196 195 194 196 195 198 196 195 197 + 197 195 194 197 195 198 198 199 201 + 198 199 200 198 199 202 198 195 194 + 199 202 203 199 202 226 199 202 204 + 200 199 201 202 226 227 202 226 228 + 202 226 222 202 204 205 202 199 201 + 202 199 200 204 205 206 204 205 222 + 204 205 207 204 202 203 204 202 226 + 205 222 223 205 222 224 205 222 226 + 205 207 220 205 207 208 207 220 219 + 207 220 221 207 208 218 207 208 212 + 207 205 206 207 205 222 208 212 213 + 208 207 220 209 213 212 209 213 214 + 210 209 211 212 208 218 213 214 216 + 213 214 215 213 209 211 213 209 210 + 214 216 217 214 216 218 214 213 212 + 215 214 216 216 218 208 216 218 219 + 218 219 220 218 216 217 219 218 208 + 221 220 219 222 226 227 222 226 228 + 222 224 225 222 205 206 224 222 223 + 226 228 229 226 222 223 226 222 224 + 226 202 203 228 226 227 229 232 233 + 230 229 228 230 229 232 230 229 231 + 231 229 228 231 229 232 232 233 235 + 232 233 234 232 233 236 232 229 228 + 233 236 237 233 236 259 233 236 238 + 234 233 235 236 259 260 236 259 261 + 236 259 255 236 238 239 236 233 235 + 236 233 234 238 239 240 238 239 255 + 238 239 241 238 236 237 238 236 259 + 239 255 256 239 255 257 239 255 259 + 239 241 242 239 241 244 241 244 245 + 241 244 246 241 242 250 241 242 243 + 241 239 240 241 239 255 243 242 250 + 244 246 248 244 246 247 244 241 242 + 246 248 249 246 248 250 246 244 245 + 247 246 248 248 250 242 248 250 251 + 250 251 254 250 251 253 250 251 252 + 250 248 249 251 250 242 252 251 254 + 252 251 253 253 251 254 255 259 260 + 255 259 261 255 257 258 255 239 240 + 257 255 256 259 261 262 259 255 256 + 259 255 257 259 236 237 261 259 260 + 262 265 266 263 262 261 263 262 265 + 263 262 264 264 262 261 264 262 265 + 265 266 268 265 266 267 265 266 269 + 265 262 261 266 269 270 266 269 292 + 266 269 271 267 266 268 269 292 293 + 269 292 294 269 292 288 269 271 272 + 269 266 268 269 266 267 271 272 273 + 271 272 288 271 272 274 271 269 270 + 271 269 292 272 288 289 272 288 290 + 272 288 292 272 274 275 272 274 277 + 274 277 278 274 277 279 274 275 283 + 274 275 276 274 272 273 274 272 288 + 276 275 283 277 279 281 277 279 280 + 277 274 275 279 281 282 279 281 283 + 279 277 278 280 279 281 281 283 275 + 281 283 284 283 284 287 283 284 286 + 283 284 285 283 281 282 284 283 275 + 285 284 287 285 284 286 286 284 287 + 288 292 293 288 292 294 288 290 291 + 288 272 273 290 288 289 292 294 295 + 292 288 289 292 288 290 292 269 270 + 294 292 293 295 298 299 296 295 294 + 296 295 298 296 295 297 297 295 294 + 297 295 298 298 299 301 298 299 300 + 298 299 302 298 295 294 299 302 303 + 299 302 325 299 302 304 300 299 301 + 302 325 326 302 325 327 302 325 321 + 302 304 305 302 299 301 302 299 300 + 304 305 306 304 305 321 304 305 307 + 304 302 303 304 302 325 305 321 322 + 305 321 323 305 321 325 305 307 310 + 305 307 316 307 316 308 307 316 315 + 307 310 309 307 310 311 307 305 306 + 307 305 321 308 317 312 308 309 310 + 309 308 316 311 310 309 312 313 315 + 312 313 314 313 312 317 314 313 315 + 315 316 308 316 315 313 316 307 310 + 317 318 320 317 318 319 317 308 316 + 317 308 309 318 317 312 318 317 308 + 319 318 320 321 325 326 321 325 327 + 321 323 324 321 305 306 323 321 322 + 325 327 328 325 321 322 325 321 323 + 325 302 303 327 325 326 328 331 332 + 329 328 327 329 328 331 329 328 330 + 330 328 327 330 328 331 331 332 334 + 331 332 333 331 332 335 331 328 327 + 332 335 336 332 335 358 332 335 337 + 333 332 334 335 358 359 335 358 360 + 335 358 354 335 337 338 335 332 334 + 335 332 333 337 338 339 337 338 354 + 337 338 340 337 335 336 337 335 358 + 338 354 355 338 354 356 338 354 358 + 338 340 341 338 340 343 340 343 344 + 340 343 345 340 341 349 340 341 342 + 340 338 339 340 338 354 342 341 349 + 343 345 347 343 345 346 343 340 341 + 345 347 348 345 347 349 345 343 344 + 346 345 347 347 349 341 347 349 350 + 349 350 353 349 350 352 349 350 351 + 349 347 348 350 349 341 351 350 353 + 351 350 352 352 350 353 354 358 359 + 354 358 360 354 356 357 354 338 339 + 356 354 355 358 360 361 358 354 355 + 358 354 356 358 335 336 360 358 359 + 361 364 365 362 361 360 362 361 364 + 362 361 363 363 361 360 363 361 364 + 364 365 367 364 365 366 364 365 368 + 364 361 360 365 368 369 365 368 391 + 365 368 370 366 365 367 368 391 392 + 368 391 393 368 391 387 368 370 371 + 368 365 367 368 365 366 370 371 372 + 370 371 387 370 371 373 370 368 369 + 370 368 391 371 387 388 371 387 389 + 371 387 391 371 373 376 371 373 382 + 373 382 374 373 382 381 373 376 375 + 373 376 377 373 371 372 373 371 387 + 374 383 378 374 375 376 375 374 382 + 377 376 375 378 379 381 378 379 380 + 379 378 383 380 379 381 381 382 374 + 382 381 379 382 373 376 383 384 386 + 383 384 385 383 374 382 383 374 375 + 384 383 378 384 383 374 385 384 386 + 387 391 392 387 391 393 387 389 390 + 387 371 372 389 387 388 391 393 394 + 391 387 388 391 387 389 391 368 369 + 393 391 392 394 397 398 395 394 393 + 395 394 397 395 394 396 396 394 393 + 396 394 397 397 398 400 397 398 399 + 397 398 401 397 394 393 398 401 402 + 398 401 425 398 401 403 399 398 400 + 401 425 426 401 425 427 401 425 421 + 401 403 404 401 398 400 401 398 399 + 403 404 405 403 404 421 403 404 406 + 403 401 402 403 401 425 404 421 422 + 404 421 423 404 421 425 404 406 419 + 404 406 407 406 419 418 406 419 420 + 406 407 417 406 407 411 406 404 405 + 406 404 421 407 411 412 407 406 419 + 408 412 411 408 412 413 409 408 410 + 411 407 417 412 413 415 412 413 414 + 412 408 410 412 408 409 413 415 416 + 413 415 417 413 412 411 414 413 415 + 415 417 407 415 417 418 417 418 419 + 417 415 416 418 417 407 420 419 418 + 421 425 426 421 425 427 421 423 424 + 421 404 405 423 421 422 425 427 428 + 425 421 422 425 421 423 425 401 402 + 427 425 426 428 431 432 429 428 427 + 429 428 431 429 428 430 430 428 427 + 430 428 431 431 432 434 431 432 433 + 431 432 435 431 428 427 432 435 436 + 432 435 459 432 435 437 433 432 434 + 435 459 460 435 459 461 435 459 455 + 435 437 438 435 432 434 435 432 433 + 437 438 439 437 438 455 437 438 440 + 437 435 436 437 435 459 438 455 456 + 438 455 457 438 455 459 438 440 453 + 438 440 441 440 453 452 440 453 454 + 440 441 451 440 441 445 440 438 439 + 440 438 455 441 445 446 441 440 453 + 442 446 445 442 446 447 443 442 444 + 445 441 451 446 447 449 446 447 448 + 446 442 444 446 442 443 447 449 450 + 447 449 451 447 446 445 448 447 449 + 449 451 441 449 451 452 451 452 453 + 451 449 450 452 451 441 454 453 452 + 455 459 460 455 459 461 455 457 458 + 455 438 439 457 455 456 459 461 462 + 459 455 456 459 455 457 459 435 436 + 461 459 460 462 465 466 463 462 461 + 463 462 465 463 462 464 464 462 461 + 464 462 465 465 466 468 465 466 467 + 465 466 469 465 462 461 466 469 470 + 466 469 492 466 469 471 467 466 468 + 469 492 493 469 492 494 469 492 488 + 469 471 472 469 466 468 469 466 467 + 471 472 473 471 472 488 471 472 474 + 471 469 470 471 469 492 472 488 489 + 472 488 490 472 488 492 472 474 477 + 472 474 483 474 483 475 474 483 482 + 474 477 476 474 477 478 474 472 473 + 474 472 488 475 484 479 475 476 477 + 476 475 483 478 477 476 479 480 482 + 479 480 481 480 479 484 481 480 482 + 482 483 475 483 482 480 483 474 477 + 484 485 487 484 485 486 484 475 483 + 484 475 476 485 484 479 485 484 475 + 486 485 487 488 492 493 488 492 494 + 488 490 491 488 472 473 490 488 489 + 492 494 495 492 488 489 492 488 490 + 492 469 470 494 492 493 495 498 499 + 496 495 494 496 495 498 496 495 497 + 497 495 494 497 495 498 498 499 501 + 498 499 500 498 499 502 498 495 494 + 499 502 503 499 502 525 499 502 504 + 500 499 501 502 525 526 502 525 527 + 502 525 521 502 504 505 502 499 501 + 502 499 500 504 505 506 504 505 521 + 504 505 507 504 502 503 504 502 525 + 505 521 522 505 521 523 505 521 525 + 505 507 508 505 507 510 507 510 511 + 507 510 512 507 508 516 507 508 509 + 507 505 506 507 505 521 509 508 516 + 510 512 514 510 512 513 510 507 508 + 512 514 515 512 514 516 512 510 511 + 513 512 514 514 516 508 514 516 517 + 516 517 520 516 517 519 516 517 518 + 516 514 515 517 516 508 518 517 520 + 518 517 519 519 517 520 521 525 526 + 521 525 527 521 523 524 521 505 506 + 523 521 522 525 521 522 525 521 523 + 525 502 503 527 525 526 + + 1497 !NPHI: dihedrals + 1 4 5 8 1 4 5 6 + 1 4 5 7 2 1 4 5 + 3 1 4 5 4 5 8 10 + 4 5 8 31 4 5 8 9 + 5 8 10 11 5 8 31 27 + 5 8 31 33 5 8 31 32 + 6 5 8 10 6 5 8 31 + 6 5 8 9 7 5 8 10 + 7 5 8 31 7 5 8 9 + 8 31 27 11 8 31 27 29 + 8 31 27 28 8 31 33 34 + 8 10 11 13 8 10 11 27 + 8 10 11 12 9 8 10 11 + 9 8 31 27 9 8 31 33 + 9 8 31 32 10 11 13 22 + 10 11 13 16 10 11 27 31 + 10 11 27 29 10 11 27 28 + 10 8 31 27 10 8 31 33 + 10 8 31 32 11 27 31 33 + 11 27 31 32 11 27 29 30 + 11 13 22 21 11 13 22 14 + 11 13 16 17 11 13 16 15 + 11 10 8 31 12 11 13 22 + 12 11 13 16 12 11 27 31 + 12 11 27 29 12 11 27 28 + 13 22 21 19 13 22 14 23 + 13 22 14 15 13 16 15 14 + 13 11 27 31 13 11 27 29 + 13 11 27 28 14 23 24 25 + 14 23 24 26 14 23 18 19 + 14 22 13 16 14 22 21 19 + 14 15 16 17 15 16 13 22 + 15 14 23 24 15 14 23 18 + 15 14 22 21 16 15 14 23 + 16 15 14 22 16 13 11 27 + 16 13 22 21 17 16 13 22 + 18 23 24 25 18 23 24 26 + 18 23 14 22 18 19 21 22 + 19 18 23 24 20 19 18 23 + 20 19 21 22 21 22 14 23 + 21 19 18 23 22 14 23 24 + 22 13 11 27 27 31 33 34 + 28 27 31 33 28 27 31 32 + 28 27 29 30 29 27 31 33 + 29 27 31 32 30 29 27 31 + 31 33 34 35 31 33 34 36 + 31 33 34 37 32 31 33 34 + 33 34 37 38 34 37 38 41 + 34 37 38 39 34 37 38 40 + 35 34 37 38 36 34 37 38 + 37 38 41 43 37 38 41 64 + 37 38 41 42 38 41 43 44 + 38 41 64 60 38 41 64 66 + 38 41 64 65 39 38 41 43 + 39 38 41 64 39 38 41 42 + 40 38 41 43 40 38 41 64 + 40 38 41 42 41 64 60 44 + 41 64 60 62 41 64 60 61 + 41 64 66 67 41 43 44 46 + 41 43 44 60 41 43 44 45 + 42 41 43 44 42 41 64 60 + 42 41 64 66 42 41 64 65 + 43 44 46 49 43 44 46 47 + 43 44 60 64 43 44 60 62 + 43 44 60 61 43 41 64 60 + 43 41 64 66 43 41 64 65 + 44 60 64 66 44 60 64 65 + 44 60 62 63 44 46 49 51 + 44 46 49 50 44 46 47 48 + 44 46 47 55 44 43 41 64 + 45 44 46 49 45 44 46 47 + 45 44 60 64 45 44 60 62 + 45 44 60 61 46 49 51 52 + 46 49 51 53 46 47 55 53 + 46 47 55 56 46 44 60 64 + 46 44 60 62 46 44 60 61 + 47 55 53 51 47 55 53 54 + 47 55 56 57 47 55 56 58 + 47 55 56 59 47 46 44 60 + 47 46 49 51 47 46 49 50 + 48 47 46 49 48 47 55 53 + 48 47 55 56 49 51 53 55 + 49 51 53 54 49 46 44 60 + 49 46 47 55 50 49 51 52 + 50 49 51 53 51 53 55 56 + 52 51 53 55 52 51 53 54 + 53 55 56 57 53 55 56 58 + 53 55 56 59 54 53 55 56 + 60 64 66 67 61 60 64 66 + 61 60 64 65 61 60 62 63 + 62 60 64 66 62 60 64 65 + 63 62 60 64 64 66 67 68 + 64 66 67 69 64 66 67 70 + 65 64 66 67 66 67 70 71 + 67 70 71 74 67 70 71 72 + 67 70 71 73 68 67 70 71 + 69 67 70 71 70 71 74 76 + 70 71 74 95 70 71 74 75 + 71 74 76 77 71 74 95 91 + 71 74 95 97 71 74 95 96 + 72 71 74 76 72 71 74 95 + 72 71 74 75 73 71 74 76 + 73 71 74 95 73 71 74 75 + 74 95 91 77 74 95 91 93 + 74 95 91 92 74 95 97 98 + 74 76 77 79 74 76 77 91 + 74 76 77 78 75 74 76 77 + 75 74 95 91 75 74 95 97 + 75 74 95 96 76 77 79 84 + 76 77 79 80 76 77 91 95 + 76 77 91 93 76 77 91 92 + 76 74 95 91 76 74 95 97 + 76 74 95 96 77 91 95 97 + 77 91 95 96 77 91 93 94 + 77 79 84 86 77 79 84 85 + 77 79 80 81 77 79 80 82 + 77 76 74 95 78 77 79 84 + 78 77 79 80 78 77 91 95 + 78 77 91 93 78 77 91 92 + 79 84 86 87 79 80 82 87 + 79 80 82 83 79 77 91 95 + 79 77 91 93 79 77 91 92 + 80 82 87 88 80 82 87 86 + 80 79 77 91 80 79 84 86 + 80 79 84 85 81 80 79 84 + 81 80 82 87 81 80 82 83 + 82 87 88 89 82 87 88 90 + 82 87 86 84 82 80 79 84 + 83 82 87 88 83 82 87 86 + 84 86 87 88 84 79 77 91 + 85 84 86 87 86 87 88 89 + 86 87 88 90 91 95 97 98 + 92 91 95 97 92 91 95 96 + 92 91 93 94 93 91 95 97 + 93 91 95 96 94 93 91 95 + 95 97 98 99 95 97 98 100 + 95 97 98 101 96 95 97 98 + 97 98 101 102 98 101 102 105 + 98 101 102 103 98 101 102 104 + 99 98 101 102 100 98 101 102 + 101 102 105 107 101 102 105 126 + 101 102 105 106 102 105 107 108 + 102 105 126 122 102 105 126 128 + 102 105 126 127 103 102 105 107 + 103 102 105 126 103 102 105 106 + 104 102 105 107 104 102 105 126 + 104 102 105 106 105 126 122 108 + 105 126 122 124 105 126 122 123 + 105 126 128 129 105 107 108 110 + 105 107 108 122 105 107 108 109 + 106 105 107 108 106 105 126 122 + 106 105 126 128 106 105 126 127 + 107 108 110 115 107 108 110 111 + 107 108 122 126 107 108 122 124 + 107 108 122 123 107 105 126 122 + 107 105 126 128 107 105 126 127 + 108 122 126 128 108 122 126 127 + 108 122 124 125 108 110 115 117 + 108 110 115 116 108 110 111 112 + 108 110 111 113 108 107 105 126 + 109 108 110 115 109 108 110 111 + 109 108 122 126 109 108 122 124 + 109 108 122 123 110 115 117 118 + 110 111 113 118 110 111 113 114 + 110 108 122 126 110 108 122 124 + 110 108 122 123 111 113 118 119 + 111 113 118 117 111 110 108 122 + 111 110 115 117 111 110 115 116 + 112 111 110 115 112 111 113 118 + 112 111 113 114 113 118 119 120 + 113 118 119 121 113 118 117 115 + 113 111 110 115 114 113 118 119 + 114 113 118 117 115 117 118 119 + 115 110 108 122 116 115 117 118 + 117 118 119 120 117 118 119 121 + 122 126 128 129 123 122 126 128 + 123 122 126 127 123 122 124 125 + 124 122 126 128 124 122 126 127 + 125 124 122 126 126 128 129 130 + 126 128 129 131 126 128 129 132 + 127 126 128 129 128 129 132 133 + 129 132 133 136 129 132 133 134 + 129 132 133 135 130 129 132 133 + 131 129 132 133 132 133 136 138 + 132 133 136 159 132 133 136 137 + 133 136 138 139 133 136 159 155 + 133 136 159 161 133 136 159 160 + 134 133 136 138 134 133 136 159 + 134 133 136 137 135 133 136 138 + 135 133 136 159 135 133 136 137 + 136 159 155 139 136 159 155 157 + 136 159 155 156 136 159 161 162 + 136 138 139 141 136 138 139 155 + 136 138 139 140 137 136 138 139 + 137 136 159 155 137 136 159 161 + 137 136 159 160 138 139 141 144 + 138 139 141 142 138 139 155 159 + 138 139 155 157 138 139 155 156 + 138 136 159 155 138 136 159 161 + 138 136 159 160 139 155 159 161 + 139 155 159 160 139 155 157 158 + 139 141 144 146 139 141 144 145 + 139 141 142 143 139 141 142 150 + 139 138 136 159 140 139 141 144 + 140 139 141 142 140 139 155 159 + 140 139 155 157 140 139 155 156 + 141 144 146 147 141 144 146 148 + 141 142 150 148 141 142 150 151 + 141 139 155 159 141 139 155 157 + 141 139 155 156 142 150 148 146 + 142 150 148 149 142 150 151 152 + 142 150 151 153 142 150 151 154 + 142 141 139 155 142 141 144 146 + 142 141 144 145 143 142 141 144 + 143 142 150 148 143 142 150 151 + 144 146 148 150 144 146 148 149 + 144 141 139 155 144 141 142 150 + 145 144 146 147 145 144 146 148 + 146 148 150 151 147 146 148 150 + 147 146 148 149 148 150 151 152 + 148 150 151 153 148 150 151 154 + 149 148 150 151 155 159 161 162 + 156 155 159 161 156 155 159 160 + 156 155 157 158 157 155 159 161 + 157 155 159 160 158 157 155 159 + 159 161 162 163 159 161 162 164 + 159 161 162 165 160 159 161 162 + 161 162 165 166 162 165 166 169 + 162 165 166 167 162 165 166 168 + 163 162 165 166 164 162 165 166 + 165 166 169 171 165 166 169 192 + 165 166 169 170 166 169 171 172 + 166 169 192 188 166 169 192 194 + 166 169 192 193 167 166 169 171 + 167 166 169 192 167 166 169 170 + 168 166 169 171 168 166 169 192 + 168 166 169 170 169 192 188 172 + 169 192 188 190 169 192 188 189 + 169 192 194 195 169 171 172 174 + 169 171 172 188 169 171 172 173 + 170 169 171 172 170 169 192 188 + 170 169 192 194 170 169 192 193 + 171 172 174 183 171 172 174 177 + 171 172 188 192 171 172 188 190 + 171 172 188 189 171 169 192 188 + 171 169 192 194 171 169 192 193 + 172 188 192 194 172 188 192 193 + 172 188 190 191 172 174 183 182 + 172 174 183 175 172 174 177 178 + 172 174 177 176 172 171 169 192 + 173 172 174 183 173 172 174 177 + 173 172 188 192 173 172 188 190 + 173 172 188 189 174 183 182 180 + 174 183 175 184 174 183 175 176 + 174 177 176 175 174 172 188 192 + 174 172 188 190 174 172 188 189 + 175 184 185 186 175 184 185 187 + 175 184 179 180 175 183 174 177 + 175 183 182 180 175 176 177 178 + 176 177 174 183 176 175 184 185 + 176 175 184 179 176 175 183 182 + 177 176 175 184 177 176 175 183 + 177 174 172 188 177 174 183 182 + 178 177 174 183 179 184 185 186 + 179 184 185 187 179 184 175 183 + 179 180 182 183 180 179 184 185 + 181 180 179 184 181 180 182 183 + 182 183 175 184 182 180 179 184 + 183 175 184 185 183 174 172 188 + 188 192 194 195 189 188 192 194 + 189 188 192 193 189 188 190 191 + 190 188 192 194 190 188 192 193 + 191 190 188 192 192 194 195 196 + 192 194 195 197 192 194 195 198 + 193 192 194 195 194 195 198 199 + 195 198 199 202 195 198 199 200 + 195 198 199 201 196 195 198 199 + 197 195 198 199 198 199 202 204 + 198 199 202 226 198 199 202 203 + 199 202 204 205 199 202 226 222 + 199 202 226 228 199 202 226 227 + 200 199 202 204 200 199 202 226 + 200 199 202 203 201 199 202 204 + 201 199 202 226 201 199 202 203 + 202 226 222 205 202 226 222 224 + 202 226 222 223 202 226 228 229 + 202 204 205 207 202 204 205 222 + 202 204 205 206 203 202 204 205 + 203 202 226 222 203 202 226 228 + 203 202 226 227 204 205 207 208 + 204 205 207 220 204 205 222 226 + 204 205 222 224 204 205 222 223 + 204 202 226 222 204 202 226 228 + 204 202 226 227 205 222 226 228 + 205 222 226 227 205 222 224 225 + 205 207 208 212 205 207 208 218 + 205 207 220 221 205 207 220 219 + 205 204 202 226 206 205 207 208 + 206 205 207 220 206 205 222 226 + 206 205 222 224 206 205 222 223 + 207 220 219 218 207 208 212 213 + 207 208 218 216 207 208 218 219 + 207 205 222 226 207 205 222 224 + 207 205 222 223 208 218 216 214 + 208 218 216 217 208 218 219 220 + 208 212 213 209 208 212 213 214 + 208 207 205 222 208 207 220 221 + 208 207 220 219 209 213 214 215 + 209 213 214 216 210 209 213 214 + 210 209 213 212 211 209 213 214 + 211 209 213 212 212 213 214 215 + 212 213 214 216 212 208 207 220 + 212 208 218 216 212 208 218 219 + 213 214 216 218 213 214 216 217 + 213 212 208 218 214 216 218 219 + 215 214 216 218 215 214 216 217 + 216 218 219 220 217 216 218 219 + 218 219 220 221 218 208 207 220 + 220 207 205 222 222 226 228 229 + 223 222 226 228 223 222 226 227 + 223 222 224 225 224 222 226 228 + 224 222 226 227 225 224 222 226 + 226 228 229 230 226 228 229 231 + 226 228 229 232 227 226 228 229 + 228 229 232 233 229 232 233 236 + 229 232 233 234 229 232 233 235 + 230 229 232 233 231 229 232 233 + 232 233 236 238 232 233 236 259 + 232 233 236 237 233 236 238 239 + 233 236 259 255 233 236 259 261 + 233 236 259 260 234 233 236 238 + 234 233 236 259 234 233 236 237 + 235 233 236 238 235 233 236 259 + 235 233 236 237 236 259 255 239 + 236 259 255 257 236 259 255 256 + 236 259 261 262 236 238 239 241 + 236 238 239 255 236 238 239 240 + 237 236 238 239 237 236 259 255 + 237 236 259 261 237 236 259 260 + 238 239 241 244 238 239 241 242 + 238 239 255 259 238 239 255 257 + 238 239 255 256 238 236 259 255 + 238 236 259 261 238 236 259 260 + 239 255 259 261 239 255 259 260 + 239 255 257 258 239 241 244 246 + 239 241 244 245 239 241 242 243 + 239 241 242 250 239 238 236 259 + 240 239 241 244 240 239 241 242 + 240 239 255 259 240 239 255 257 + 240 239 255 256 241 244 246 247 + 241 244 246 248 241 242 250 248 + 241 242 250 251 241 239 255 259 + 241 239 255 257 241 239 255 256 + 242 250 248 246 242 250 248 249 + 242 250 251 252 242 250 251 253 + 242 250 251 254 242 241 239 255 + 242 241 244 246 242 241 244 245 + 243 242 241 244 243 242 250 248 + 243 242 250 251 244 246 248 250 + 244 246 248 249 244 241 239 255 + 244 241 242 250 245 244 246 247 + 245 244 246 248 246 248 250 251 + 247 246 248 250 247 246 248 249 + 248 250 251 252 248 250 251 253 + 248 250 251 254 249 248 250 251 + 255 259 261 262 256 255 259 261 + 256 255 259 260 256 255 257 258 + 257 255 259 261 257 255 259 260 + 258 257 255 259 259 261 262 263 + 259 261 262 264 259 261 262 265 + 260 259 261 262 261 262 265 266 + 262 265 266 269 262 265 266 267 + 262 265 266 268 263 262 265 266 + 264 262 265 266 265 266 269 271 + 265 266 269 292 265 266 269 270 + 266 269 271 272 266 269 292 288 + 266 269 292 294 266 269 292 293 + 267 266 269 271 267 266 269 292 + 267 266 269 270 268 266 269 271 + 268 266 269 292 268 266 269 270 + 269 292 288 272 269 292 288 290 + 269 292 288 289 269 292 294 295 + 269 271 272 274 269 271 272 288 + 269 271 272 273 270 269 271 272 + 270 269 292 288 270 269 292 294 + 270 269 292 293 271 272 274 277 + 271 272 274 275 271 272 288 292 + 271 272 288 290 271 272 288 289 + 271 269 292 288 271 269 292 294 + 271 269 292 293 272 288 292 294 + 272 288 292 293 272 288 290 291 + 272 274 277 279 272 274 277 278 + 272 274 275 276 272 274 275 283 + 272 271 269 292 273 272 274 277 + 273 272 274 275 273 272 288 292 + 273 272 288 290 273 272 288 289 + 274 277 279 280 274 277 279 281 + 274 275 283 281 274 275 283 284 + 274 272 288 292 274 272 288 290 + 274 272 288 289 275 283 281 279 + 275 283 281 282 275 283 284 285 + 275 283 284 286 275 283 284 287 + 275 274 272 288 275 274 277 279 + 275 274 277 278 276 275 274 277 + 276 275 283 281 276 275 283 284 + 277 279 281 283 277 279 281 282 + 277 274 272 288 277 274 275 283 + 278 277 279 280 278 277 279 281 + 279 281 283 284 280 279 281 283 + 280 279 281 282 281 283 284 285 + 281 283 284 286 281 283 284 287 + 282 281 283 284 288 292 294 295 + 289 288 292 294 289 288 292 293 + 289 288 290 291 290 288 292 294 + 290 288 292 293 291 290 288 292 + 292 294 295 296 292 294 295 297 + 292 294 295 298 293 292 294 295 + 294 295 298 299 295 298 299 302 + 295 298 299 300 295 298 299 301 + 296 295 298 299 297 295 298 299 + 298 299 302 304 298 299 302 325 + 298 299 302 303 299 302 304 305 + 299 302 325 321 299 302 325 327 + 299 302 325 326 300 299 302 304 + 300 299 302 325 300 299 302 303 + 301 299 302 304 301 299 302 325 + 301 299 302 303 302 325 321 305 + 302 325 321 323 302 325 321 322 + 302 325 327 328 302 304 305 307 + 302 304 305 321 302 304 305 306 + 303 302 304 305 303 302 325 321 + 303 302 325 327 303 302 325 326 + 304 305 307 316 304 305 307 310 + 304 305 321 325 304 305 321 323 + 304 305 321 322 304 302 325 321 + 304 302 325 327 304 302 325 326 + 305 321 325 327 305 321 325 326 + 305 321 323 324 305 307 316 315 + 305 307 316 308 305 307 310 311 + 305 307 310 309 305 304 302 325 + 306 305 307 316 306 305 307 310 + 306 305 321 325 306 305 321 323 + 306 305 321 322 307 316 315 313 + 307 316 308 317 307 316 308 309 + 307 310 309 308 307 305 321 325 + 307 305 321 323 307 305 321 322 + 308 317 318 319 308 317 318 320 + 308 317 312 313 308 316 307 310 + 308 316 315 313 308 309 310 311 + 309 310 307 316 309 308 317 318 + 309 308 317 312 309 308 316 315 + 310 309 308 317 310 309 308 316 + 310 307 305 321 310 307 316 315 + 311 310 307 316 312 317 318 319 + 312 317 318 320 312 317 308 316 + 312 313 315 316 313 312 317 318 + 314 313 312 317 314 313 315 316 + 315 316 308 317 315 313 312 317 + 316 308 317 318 316 307 305 321 + 321 325 327 328 322 321 325 327 + 322 321 325 326 322 321 323 324 + 323 321 325 327 323 321 325 326 + 324 323 321 325 325 327 328 329 + 325 327 328 330 325 327 328 331 + 326 325 327 328 327 328 331 332 + 328 331 332 335 328 331 332 333 + 328 331 332 334 329 328 331 332 + 330 328 331 332 331 332 335 337 + 331 332 335 358 331 332 335 336 + 332 335 337 338 332 335 358 354 + 332 335 358 360 332 335 358 359 + 333 332 335 337 333 332 335 358 + 333 332 335 336 334 332 335 337 + 334 332 335 358 334 332 335 336 + 335 358 354 338 335 358 354 356 + 335 358 354 355 335 358 360 361 + 335 337 338 340 335 337 338 354 + 335 337 338 339 336 335 337 338 + 336 335 358 354 336 335 358 360 + 336 335 358 359 337 338 340 343 + 337 338 340 341 337 338 354 358 + 337 338 354 356 337 338 354 355 + 337 335 358 354 337 335 358 360 + 337 335 358 359 338 354 358 360 + 338 354 358 359 338 354 356 357 + 338 340 343 345 338 340 343 344 + 338 340 341 342 338 340 341 349 + 338 337 335 358 339 338 340 343 + 339 338 340 341 339 338 354 358 + 339 338 354 356 339 338 354 355 + 340 343 345 346 340 343 345 347 + 340 341 349 347 340 341 349 350 + 340 338 354 358 340 338 354 356 + 340 338 354 355 341 349 347 345 + 341 349 347 348 341 349 350 351 + 341 349 350 352 341 349 350 353 + 341 340 338 354 341 340 343 345 + 341 340 343 344 342 341 340 343 + 342 341 349 347 342 341 349 350 + 343 345 347 349 343 345 347 348 + 343 340 338 354 343 340 341 349 + 344 343 345 346 344 343 345 347 + 345 347 349 350 346 345 347 349 + 346 345 347 348 347 349 350 351 + 347 349 350 352 347 349 350 353 + 348 347 349 350 354 358 360 361 + 355 354 358 360 355 354 358 359 + 355 354 356 357 356 354 358 360 + 356 354 358 359 357 356 354 358 + 358 360 361 362 358 360 361 363 + 358 360 361 364 359 358 360 361 + 360 361 364 365 361 364 365 368 + 361 364 365 366 361 364 365 367 + 362 361 364 365 363 361 364 365 + 364 365 368 370 364 365 368 391 + 364 365 368 369 365 368 370 371 + 365 368 391 387 365 368 391 393 + 365 368 391 392 366 365 368 370 + 366 365 368 391 366 365 368 369 + 367 365 368 370 367 365 368 391 + 367 365 368 369 368 391 387 371 + 368 391 387 389 368 391 387 388 + 368 391 393 394 368 370 371 373 + 368 370 371 387 368 370 371 372 + 369 368 370 371 369 368 391 387 + 369 368 391 393 369 368 391 392 + 370 371 373 382 370 371 373 376 + 370 371 387 391 370 371 387 389 + 370 371 387 388 370 368 391 387 + 370 368 391 393 370 368 391 392 + 371 387 391 393 371 387 391 392 + 371 387 389 390 371 373 382 381 + 371 373 382 374 371 373 376 377 + 371 373 376 375 371 370 368 391 + 372 371 373 382 372 371 373 376 + 372 371 387 391 372 371 387 389 + 372 371 387 388 373 382 381 379 + 373 382 374 383 373 382 374 375 + 373 376 375 374 373 371 387 391 + 373 371 387 389 373 371 387 388 + 374 383 384 385 374 383 384 386 + 374 383 378 379 374 382 373 376 + 374 382 381 379 374 375 376 377 + 375 376 373 382 375 374 383 384 + 375 374 383 378 375 374 382 381 + 376 375 374 383 376 375 374 382 + 376 373 371 387 376 373 382 381 + 377 376 373 382 378 383 384 385 + 378 383 384 386 378 383 374 382 + 378 379 381 382 379 378 383 384 + 380 379 378 383 380 379 381 382 + 381 382 374 383 381 379 378 383 + 382 374 383 384 382 373 371 387 + 387 391 393 394 388 387 391 393 + 388 387 391 392 388 387 389 390 + 389 387 391 393 389 387 391 392 + 390 389 387 391 391 393 394 395 + 391 393 394 396 391 393 394 397 + 392 391 393 394 393 394 397 398 + 394 397 398 401 394 397 398 399 + 394 397 398 400 395 394 397 398 + 396 394 397 398 397 398 401 403 + 397 398 401 425 397 398 401 402 + 398 401 403 404 398 401 425 421 + 398 401 425 427 398 401 425 426 + 399 398 401 403 399 398 401 425 + 399 398 401 402 400 398 401 403 + 400 398 401 425 400 398 401 402 + 401 425 421 404 401 425 421 423 + 401 425 421 422 401 425 427 428 + 401 403 404 406 401 403 404 421 + 401 403 404 405 402 401 403 404 + 402 401 425 421 402 401 425 427 + 402 401 425 426 403 404 406 407 + 403 404 406 419 403 404 421 425 + 403 404 421 423 403 404 421 422 + 403 401 425 421 403 401 425 427 + 403 401 425 426 404 421 425 427 + 404 421 425 426 404 421 423 424 + 404 406 407 411 404 406 407 417 + 404 406 419 420 404 406 419 418 + 404 403 401 425 405 404 406 407 + 405 404 406 419 405 404 421 425 + 405 404 421 423 405 404 421 422 + 406 419 418 417 406 407 411 412 + 406 407 417 415 406 407 417 418 + 406 404 421 425 406 404 421 423 + 406 404 421 422 407 417 415 413 + 407 417 415 416 407 417 418 419 + 407 411 412 408 407 411 412 413 + 407 406 404 421 407 406 419 420 + 407 406 419 418 408 412 413 414 + 408 412 413 415 409 408 412 413 + 409 408 412 411 410 408 412 413 + 410 408 412 411 411 412 413 414 + 411 412 413 415 411 407 406 419 + 411 407 417 415 411 407 417 418 + 412 413 415 417 412 413 415 416 + 412 411 407 417 413 415 417 418 + 414 413 415 417 414 413 415 416 + 415 417 418 419 416 415 417 418 + 417 418 419 420 417 407 406 419 + 419 406 404 421 421 425 427 428 + 422 421 425 427 422 421 425 426 + 422 421 423 424 423 421 425 427 + 423 421 425 426 424 423 421 425 + 425 427 428 429 425 427 428 430 + 425 427 428 431 426 425 427 428 + 427 428 431 432 428 431 432 435 + 428 431 432 433 428 431 432 434 + 429 428 431 432 430 428 431 432 + 431 432 435 437 431 432 435 459 + 431 432 435 436 432 435 437 438 + 432 435 459 455 432 435 459 461 + 432 435 459 460 433 432 435 437 + 433 432 435 459 433 432 435 436 + 434 432 435 437 434 432 435 459 + 434 432 435 436 435 459 455 438 + 435 459 455 457 435 459 455 456 + 435 459 461 462 435 437 438 440 + 435 437 438 455 435 437 438 439 + 436 435 437 438 436 435 459 455 + 436 435 459 461 436 435 459 460 + 437 438 440 441 437 438 440 453 + 437 438 455 459 437 438 455 457 + 437 438 455 456 437 435 459 455 + 437 435 459 461 437 435 459 460 + 438 455 459 461 438 455 459 460 + 438 455 457 458 438 440 441 445 + 438 440 441 451 438 440 453 454 + 438 440 453 452 438 437 435 459 + 439 438 440 441 439 438 440 453 + 439 438 455 459 439 438 455 457 + 439 438 455 456 440 453 452 451 + 440 441 445 446 440 441 451 449 + 440 441 451 452 440 438 455 459 + 440 438 455 457 440 438 455 456 + 441 451 449 447 441 451 449 450 + 441 451 452 453 441 445 446 442 + 441 445 446 447 441 440 438 455 + 441 440 453 454 441 440 453 452 + 442 446 447 448 442 446 447 449 + 443 442 446 447 443 442 446 445 + 444 442 446 447 444 442 446 445 + 445 446 447 448 445 446 447 449 + 445 441 440 453 445 441 451 449 + 445 441 451 452 446 447 449 451 + 446 447 449 450 446 445 441 451 + 447 449 451 452 448 447 449 451 + 448 447 449 450 449 451 452 453 + 450 449 451 452 451 452 453 454 + 451 441 440 453 453 440 438 455 + 455 459 461 462 456 455 459 461 + 456 455 459 460 456 455 457 458 + 457 455 459 461 457 455 459 460 + 458 457 455 459 459 461 462 463 + 459 461 462 464 459 461 462 465 + 460 459 461 462 461 462 465 466 + 462 465 466 469 462 465 466 467 + 462 465 466 468 463 462 465 466 + 464 462 465 466 465 466 469 471 + 465 466 469 492 465 466 469 470 + 466 469 471 472 466 469 492 488 + 466 469 492 494 466 469 492 493 + 467 466 469 471 467 466 469 492 + 467 466 469 470 468 466 469 471 + 468 466 469 492 468 466 469 470 + 469 492 488 472 469 492 488 490 + 469 492 488 489 469 492 494 495 + 469 471 472 474 469 471 472 488 + 469 471 472 473 470 469 471 472 + 470 469 492 488 470 469 492 494 + 470 469 492 493 471 472 474 483 + 471 472 474 477 471 472 488 492 + 471 472 488 490 471 472 488 489 + 471 469 492 488 471 469 492 494 + 471 469 492 493 472 488 492 494 + 472 488 492 493 472 488 490 491 + 472 474 483 482 472 474 483 475 + 472 474 477 478 472 474 477 476 + 472 471 469 492 473 472 474 483 + 473 472 474 477 473 472 488 492 + 473 472 488 490 473 472 488 489 + 474 483 482 480 474 483 475 484 + 474 483 475 476 474 477 476 475 + 474 472 488 492 474 472 488 490 + 474 472 488 489 475 484 485 486 + 475 484 485 487 475 484 479 480 + 475 483 474 477 475 483 482 480 + 475 476 477 478 476 477 474 483 + 476 475 484 485 476 475 484 479 + 476 475 483 482 477 476 475 484 + 477 476 475 483 477 474 472 488 + 477 474 483 482 478 477 474 483 + 479 484 485 486 479 484 485 487 + 479 484 475 483 479 480 482 483 + 480 479 484 485 481 480 479 484 + 481 480 482 483 482 483 475 484 + 482 480 479 484 483 475 484 485 + 483 474 472 488 488 492 494 495 + 489 488 492 494 489 488 492 493 + 489 488 490 491 490 488 492 494 + 490 488 492 493 491 490 488 492 + 492 494 495 496 492 494 495 497 + 492 494 495 498 493 492 494 495 + 494 495 498 499 495 498 499 502 + 495 498 499 500 495 498 499 501 + 496 495 498 499 497 495 498 499 + 498 499 502 504 498 499 502 525 + 498 499 502 503 499 502 504 505 + 499 502 525 521 499 502 525 527 + 499 502 525 526 500 499 502 504 + 500 499 502 525 500 499 502 503 + 501 499 502 504 501 499 502 525 + 501 499 502 503 502 525 521 505 + 502 525 521 523 502 525 521 522 + 502 504 505 507 502 504 505 521 + 502 504 505 506 503 502 504 505 + 503 502 525 521 503 502 525 527 + 503 502 525 526 504 505 507 510 + 504 505 507 508 504 505 521 525 + 504 505 521 523 504 505 521 522 + 504 502 525 521 504 502 525 527 + 504 502 525 526 505 521 525 527 + 505 521 525 526 505 521 523 524 + 505 507 510 512 505 507 510 511 + 505 507 508 509 505 507 508 516 + 505 504 502 525 506 505 507 510 + 506 505 507 508 506 505 521 525 + 506 505 521 523 506 505 521 522 + 507 510 512 513 507 510 512 514 + 507 508 516 514 507 508 516 517 + 507 505 521 525 507 505 521 523 + 507 505 521 522 508 516 514 512 + 508 516 514 515 508 516 517 518 + 508 516 517 519 508 516 517 520 + 508 507 505 521 508 507 510 512 + 508 507 510 511 509 508 507 510 + 509 508 516 514 509 508 516 517 + 510 512 514 516 510 512 514 515 + 510 507 505 521 510 507 508 516 + 511 510 512 513 511 510 512 514 + 512 514 516 517 513 512 514 516 + 513 512 514 515 514 516 517 518 + 514 516 517 519 514 516 517 520 + 515 514 516 517 522 521 525 527 + 522 521 525 526 522 521 523 524 + 523 521 525 527 523 521 525 526 + 524 523 521 525 + + 43 !NIMPHI: impropers + 23 18 14 24 24 23 25 26 + 49 46 51 50 53 51 55 54 + 55 53 47 56 84 79 86 85 + 87 86 82 88 88 87 89 90 + 115 110 117 116 118 117 113 119 + 119 118 120 121 144 141 146 145 + 148 146 150 149 150 148 142 151 + 184 179 175 185 185 184 186 187 + 209 210 213 211 213 212 214 209 + 216 214 218 217 244 241 246 245 + 248 246 250 249 250 248 242 251 + 277 274 279 278 281 279 283 282 + 283 281 275 284 317 312 308 318 + 318 317 319 320 343 340 345 344 + 347 345 349 348 349 347 341 350 + 383 378 374 384 384 383 385 386 + 408 409 412 410 412 411 413 408 + 415 413 417 416 442 443 446 444 + 446 445 447 442 449 447 451 450 + 484 479 475 485 485 484 486 487 + 510 507 512 511 514 512 516 515 + 516 514 508 517 + + 0 !NDON: donors + + + 0 !NACC: acceptors + + + 0 !NNB + + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 + + 1 0 !NGRP + 0 0 0 + diff --git a/tools/lmp2cfg/README.txt b/tools/lmp2cfg/README.txt index c399660327..fca8009cd9 100755 --- a/tools/lmp2cfg/README.txt +++ b/tools/lmp2cfg/README.txt @@ -1,82 +1,82 @@ -README.txt - -lmp2cfg - -Version 1.0 -Ara Kooser -8/1/04 - -Contents -I. Before you start -II. Introduction -III. Compiling the program -IV. Running the program - - -I. Before you start - -1) Read the READMEFIRST file -2) You will need either f77 or g77 compiler -3) A text editor (VI or emacs) -4) AtomEye( http://164.107.79.177/Archive/Graphics/A/) good as of 8/1/04 -5) A sense of adventure and humor - - -II. Introduction - -The lmp2cfg program converts a LAMMPS atom dump file into a series of .cfg -files.(000001.cfg, 000002.cfg,...). These files can be read into AtomEye -and made into a movie or viewed indivdually. - - -III. Compiling the program - -The program should comply with either command f77 lmp2cfg.f or -g77 lmp2cfg.f - -IV. Running the program - -You need to create a user input file. In the examples folder you will find -an example input script, LAMMPS dump file, and the correct .cfg output. -The input script reads like this: - -7 #number of atom types in your LAMMPS file -'dump.atom' #name of the LAMMPS dump file, you need the ' ' -1 #first frame -10 #last frame -1 #first atom type -26.98154 #atomic weight -'ao' #atom name -2 #second atom type -15.9994 #atomic weight -'oh' #atom name - - -Make sure the input file and the atom dump file are in the same folder. -On the command line type - -lmp2cfg < input_file.txt > out - -You should get several .cfg files. For reading into AtomEye and making -movies see the AtomEye homepage. - - -If you get an error like: - -open: 'new' file exists -apparent state: unit 21 named 00001.cfg -lately writing sequential formatted external IO -Abort - -you need to first remove old copies of the cfg files. - -If you get an error like: - -open: No such file or directory -apparent state: unit 9 named dump.atom -last format: list io -lately reading direct formatted external IO -Abort - -you need to check that the name of the dump file matches the name -in the input file, and that you enclosed it in single quotes. +README.txt + +lmp2cfg + +Version 1.0 +Ara Kooser +8/1/04 + +Contents +I. Before you start +II. Introduction +III. Compiling the program +IV. Running the program + + +I. Before you start + +1) Read the READMEFIRST file +2) You will need either f77 or g77 compiler +3) A text editor (VI or emacs) +4) AtomEye( http://164.107.79.177/Archive/Graphics/A/) good as of 8/1/04 +5) A sense of adventure and humor + + +II. Introduction + +The lmp2cfg program converts a LAMMPS atom dump file into a series of .cfg +files.(000001.cfg, 000002.cfg,...). These files can be read into AtomEye +and made into a movie or viewed indivdually. + + +III. Compiling the program + +The program should comply with either command f77 lmp2cfg.f or +g77 lmp2cfg.f + +IV. Running the program + +You need to create a user input file. In the examples folder you will find +an example input script, LAMMPS dump file, and the correct .cfg output. +The input script reads like this: + +7 #number of atom types in your LAMMPS file +'dump.atom' #name of the LAMMPS dump file, you need the ' ' +1 #first frame +10 #last frame +1 #first atom type +26.98154 #atomic weight +'ao' #atom name +2 #second atom type +15.9994 #atomic weight +'oh' #atom name + + +Make sure the input file and the atom dump file are in the same folder. +On the command line type + +lmp2cfg < input_file.txt > out + +You should get several .cfg files. For reading into AtomEye and making +movies see the AtomEye homepage. + + +If you get an error like: + +open: 'new' file exists +apparent state: unit 21 named 00001.cfg +lately writing sequential formatted external IO +Abort + +you need to first remove old copies of the cfg files. + +If you get an error like: + +open: No such file or directory +apparent state: unit 9 named dump.atom +last format: list io +lately reading direct formatted external IO +Abort + +you need to check that the name of the dump file matches the name +in the input file, and that you enclosed it in single quotes. diff --git a/tools/lmp2cfg/examples/lmp2cfg_inp.txt b/tools/lmp2cfg/examples/lmp2cfg_inp.txt index e9f44c9b3d..cd304bb509 100755 --- a/tools/lmp2cfg/examples/lmp2cfg_inp.txt +++ b/tools/lmp2cfg/examples/lmp2cfg_inp.txt @@ -1,25 +1,25 @@ -7 -'dump.atom' -1 -3 -1 -26.98154 -'ao' -2 -15.9994 -'oh' -3 -1.00794 -'ho' -4 -15.9994 -'o*' -5 -1.00794 -'h*' -6 -35.4527 -'Cl' -7 -207.2 -'Pb' +7 +'dump.atom' +1 +3 +1 +26.98154 +'ao' +2 +15.9994 +'oh' +3 +1.00794 +'ho' +4 +15.9994 +'o*' +5 +1.00794 +'h*' +6 +35.4527 +'Cl' +7 +207.2 +'Pb' diff --git a/tools/lmp2cfg/lmp2cfg.f b/tools/lmp2cfg/lmp2cfg.f index 41e89fc784..f012630c4b 100755 --- a/tools/lmp2cfg/lmp2cfg.f +++ b/tools/lmp2cfg/lmp2cfg.f @@ -1,181 +1,181 @@ -*23456789|123456789|123456789|123456789|123456789|123456789|123456789|12 -c---------------------------------------------------------------------- - program lammps to cfg -c---------------------------------------------------------------------- -*Programming by Jeff Greathouse and Ara Kooser -*Version 1.0 9/1/04 -*Sandia National Labs -*Converts LAMMPS atom dump to .cfg files for AtomEye -*This program is provided as is. Please see the README file. -c---------------------------------------------------------------------- - implicit real*8 (a-h,o-z) - - character*12 inhist,snapshot - character*4 fftype(100),name,ciframe - - integer natom,iatom,itype(50000),q - integer atype(99),itycon,ntype,mass(99) - - dimension x(50000),y(50000),z(50000) - dimension amass(99) - - -c-------Reads in the user input file------------------------------- - - read(*,*) ntype - read(*,*) inhist - read(*,*) iframe1 - read(*,*) iframe2 -c write(*,*) ntype -c write(*,*) inhist - do 1, i=1, ntype - - read(*,*) atype(i) - read(*,*) amass(i) - mass(i)=anint(amass(i)) - read(*,*) fftype(i) - - -c write(*,*) atype(i) -c write(*,*) amass(i) -c write(*,*) fftype(i) - 1 continue - -c-------Lammps output file is 9, reads in lmps header-------------- - - name=inhist(1:4) - open(9,file=inhist,status='old',form='formatted') -c open(2,status='new',form='formatted') - - - iatom=0 - iframe=0 - jframe=0 - -c--------------------------------------------------------------------- -c----------This begins the frame by frame reading section------------- - - 9999 continue - - read(9,*,end=999) - read(9,*,end=999) - read(9,*,end=999) - read(9,*,end=999) natom - read(9,*,end=999) - read(9,50,end=999) xcell - read(9,50,end=999) ycell - read(9,50,end=999) zcell - read(9,*,end=999) - - 50 format(2x,f12.5) - - - - 1000 format(1x,i5,1x,i2,3f9.5) - - - - - - - - do 440 j=1,natom - 420 read(9,*,end=999)iatom,itype(iatom),x(iatom),y(iatom),z(iatom) - - -*23456789|123456789|123456789|123456789|123456789|123456789|123456789|12 - - - - - 440 continue - - jframe=jframe+1 - if(jframe.lt.iframe1)goto 9999 - iframe=iframe+1 - - if(iframe.ge.iframe2) goto 999 - - -c-------------------------------------------------------------------- -c-------This section writes each ts to a seperate .cfg file---------- - -c ciframe=char(iframe) -c snapshot(iframe)=name//ciframe//'.cfg' -c write(*,*)ciframe - -c write(snapshot,'("Cfgs/",i7.7,".cfg")') iframe - ciframe='.cfg' -c write(*,*)ciframe - write(snapshot,'(i5.5,a4)')iframe,ciframe -c write(*,*)snapshot - open(unit=iframe+20,file=snapshot,status='new', - * form='formatted') - - write((iframe+20),'(a22,i7)')'Number of particles = ',natom - write((iframe+20),'(a1)')'#' - write((iframe+20),*) - write((iframe+20),'(a16)')'A = 1.0 Angstrom' - write((iframe+20),'(a1)')'#' - write((iframe+20),*) - write((iframe+20),435)'H0(1,1) = ',xcell,' A' - write((iframe+20),'(a14)')'H0(1,2) = 0 A' - write((iframe+20),'(a14)')'H0(1,3) = 0 A' - write((iframe+20),'(a1)')'#' - write((iframe+20),*) - write((iframe+20),'(a14)')'H0(2,1) = 0 A' - write((iframe+20),435)'H0(2,2) = ',ycell,' A' - write((iframe+20),'(a14)')'H0(2,3) = 0 A' - write((iframe+20),'(a1)')'#' - write((iframe+20),*) - write((iframe+20),'(a14)')'H0(3,1) = 0 A' - write((iframe+20),'(a14)')'H0(3,2) = 0 A' - write((iframe+20),435)'H0(3,3) = ',zcell,' A' - write((iframe+20),'(a1)')'#' - write((iframe+20),*) - write((iframe+20),'(a12)')'eta(1,1) = 0' - write((iframe+20),'(a12)')'eta(1,2) = 0' - write((iframe+20),'(a12)')'eta(1,3) = 0' - write((iframe+20),'(a12)')'eta(2,2) = 0' - write((iframe+20),'(a12)')'eta(2,3) = 0' - write((iframe+20),'(a12)')'eta(3,3) = 0' - write((iframe+20),'(a1)')'#' - write((iframe+20),*) - write((iframe+20),'(a1)')'#' - write((iframe+20),'(a1)')'#' - write((iframe+20),'(a1)')'#' - write((iframe+20),*) - write((iframe+20),'(a1)')'#' - write((iframe+20),'(a1)')'#' - write((iframe+20),'(a1)')'#' - write((iframe+20),'(a1)')'#' - write((iframe+20),*) - write((iframe+20),'(a1)')'#' - write((iframe+20),'(a1)')'#' - write((iframe+20),'(a1)')'#' - - 435 format(a11,f10.5,a2) - - do 460, j=1,natom - - do 450,i=1,ntype -c write(*,*)i,amass(i),fftype(i) -c write(*,*)ntype - if(itype(j).eq.atype(i)) - * write((iframe+20),445)mass(i),fftype(i),x(j), - * y(j),z(j),' 0',' 0',' 0' - -c---445 is the format for writing atom data to .cfg file------------ - 445 format(i3.3,1x,a2,1x,3f9.6,3a2) - - 450 continue - - 460 continue - - go to 9999 - - 999 continue - close(9) - - - end +*23456789|123456789|123456789|123456789|123456789|123456789|123456789|12 +c---------------------------------------------------------------------- + program lammps to cfg +c---------------------------------------------------------------------- +*Programming by Jeff Greathouse and Ara Kooser +*Version 1.0 9/1/04 +*Sandia National Labs +*Converts LAMMPS atom dump to .cfg files for AtomEye +*This program is provided as is. Please see the README file. +c---------------------------------------------------------------------- + implicit real*8 (a-h,o-z) + + character*12 inhist,snapshot + character*4 fftype(100),name,ciframe + + integer natom,iatom,itype(50000),q + integer atype(99),itycon,ntype,mass(99) + + dimension x(50000),y(50000),z(50000) + dimension amass(99) + + +c-------Reads in the user input file------------------------------- + + read(*,*) ntype + read(*,*) inhist + read(*,*) iframe1 + read(*,*) iframe2 +c write(*,*) ntype +c write(*,*) inhist + do 1, i=1, ntype + + read(*,*) atype(i) + read(*,*) amass(i) + mass(i)=anint(amass(i)) + read(*,*) fftype(i) + + +c write(*,*) atype(i) +c write(*,*) amass(i) +c write(*,*) fftype(i) + 1 continue + +c-------Lammps output file is 9, reads in lmps header-------------- + + name=inhist(1:4) + open(9,file=inhist,status='old',form='formatted') +c open(2,status='new',form='formatted') + + + iatom=0 + iframe=0 + jframe=0 + +c--------------------------------------------------------------------- +c----------This begins the frame by frame reading section------------- + + 9999 continue + + read(9,*,end=999) + read(9,*,end=999) + read(9,*,end=999) + read(9,*,end=999) natom + read(9,*,end=999) + read(9,50,end=999) xcell + read(9,50,end=999) ycell + read(9,50,end=999) zcell + read(9,*,end=999) + + 50 format(2x,f12.5) + + + + 1000 format(1x,i5,1x,i2,3f9.5) + + + + + + + + do 440 j=1,natom + 420 read(9,*,end=999)iatom,itype(iatom),x(iatom),y(iatom),z(iatom) + + +*23456789|123456789|123456789|123456789|123456789|123456789|123456789|12 + + + + + 440 continue + + jframe=jframe+1 + if(jframe.lt.iframe1)goto 9999 + iframe=iframe+1 + + if(iframe.ge.iframe2) goto 999 + + +c-------------------------------------------------------------------- +c-------This section writes each ts to a seperate .cfg file---------- + +c ciframe=char(iframe) +c snapshot(iframe)=name//ciframe//'.cfg' +c write(*,*)ciframe + +c write(snapshot,'("Cfgs/",i7.7,".cfg")') iframe + ciframe='.cfg' +c write(*,*)ciframe + write(snapshot,'(i5.5,a4)')iframe,ciframe +c write(*,*)snapshot + open(unit=iframe+20,file=snapshot,status='new', + * form='formatted') + + write((iframe+20),'(a22,i7)')'Number of particles = ',natom + write((iframe+20),'(a1)')'#' + write((iframe+20),*) + write((iframe+20),'(a16)')'A = 1.0 Angstrom' + write((iframe+20),'(a1)')'#' + write((iframe+20),*) + write((iframe+20),435)'H0(1,1) = ',xcell,' A' + write((iframe+20),'(a14)')'H0(1,2) = 0 A' + write((iframe+20),'(a14)')'H0(1,3) = 0 A' + write((iframe+20),'(a1)')'#' + write((iframe+20),*) + write((iframe+20),'(a14)')'H0(2,1) = 0 A' + write((iframe+20),435)'H0(2,2) = ',ycell,' A' + write((iframe+20),'(a14)')'H0(2,3) = 0 A' + write((iframe+20),'(a1)')'#' + write((iframe+20),*) + write((iframe+20),'(a14)')'H0(3,1) = 0 A' + write((iframe+20),'(a14)')'H0(3,2) = 0 A' + write((iframe+20),435)'H0(3,3) = ',zcell,' A' + write((iframe+20),'(a1)')'#' + write((iframe+20),*) + write((iframe+20),'(a12)')'eta(1,1) = 0' + write((iframe+20),'(a12)')'eta(1,2) = 0' + write((iframe+20),'(a12)')'eta(1,3) = 0' + write((iframe+20),'(a12)')'eta(2,2) = 0' + write((iframe+20),'(a12)')'eta(2,3) = 0' + write((iframe+20),'(a12)')'eta(3,3) = 0' + write((iframe+20),'(a1)')'#' + write((iframe+20),*) + write((iframe+20),'(a1)')'#' + write((iframe+20),'(a1)')'#' + write((iframe+20),'(a1)')'#' + write((iframe+20),*) + write((iframe+20),'(a1)')'#' + write((iframe+20),'(a1)')'#' + write((iframe+20),'(a1)')'#' + write((iframe+20),'(a1)')'#' + write((iframe+20),*) + write((iframe+20),'(a1)')'#' + write((iframe+20),'(a1)')'#' + write((iframe+20),'(a1)')'#' + + 435 format(a11,f10.5,a2) + + do 460, j=1,natom + + do 450,i=1,ntype +c write(*,*)i,amass(i),fftype(i) +c write(*,*)ntype + if(itype(j).eq.atype(i)) + * write((iframe+20),445)mass(i),fftype(i),x(j), + * y(j),z(j),' 0',' 0',' 0' + +c---445 is the format for writing atom data to .cfg file------------ + 445 format(i3.3,1x,a2,1x,3f9.6,3a2) + + 450 continue + + 460 continue + + go to 9999 + + 999 continue + close(9) + + + end diff --git a/tools/lmp2traj/README.txt b/tools/lmp2traj/README.txt index 56746ce157..b44db78c7f 100755 --- a/tools/lmp2traj/README.txt +++ b/tools/lmp2traj/README.txt @@ -1,78 +1,78 @@ -README.txt - -lmp2traj - -Version 1.0 -Ara Kooser -8/1/04 - -Contents -I. Before you start -II. Introduction -III. Compiling the program -IV. Running the program - -I. Before you start - -1) Read the READMEFIRST file -2) You will need either f77 or g77 compiler -3) A text editor (VI or emacs) -4) LAMMPS -5) A graphing program that can do contours -6) A sense of adventure and humor - -II. Introduction - -This program will take a LAMMPS atom dump file and provide the following three -files. -1) data for making contour maps -2) density profile -3) dipole information - -III. Compiling the program - -To compile the program run either ./f77 lmp2traj.f or -./g77 traj.f - -IV. Running the program - -First you need to create a user input file. There is an example of an input file -in the examples folder. - -The input file reads like this: - -'atom' # dump file name, needs the ' ' -1 # first frame -60 # last frame -38.26119 # x dimension of the box -44.26119 # y dimension of the box -48.33150 # z dimension of the box -90. # angles of the box, always 90 -90. # angles of the box, always 90 -90. # angles of the box, always 90 -82844.6 # volumne of the box in cubic Angstroms -5 # water oxygen atom type from LAMMPS (#) -6 # water hydrogen atom type from LAMMPS(#) -0. # leave at 0 -5. # number of atom types -0. # z shift leave at 0 -5. # number of density maps -'Surface (1) ho' # Enter name/description of atom -2 # atom type number from LAMMPS -'ho' # Column name for data -0 # Defines inner sphere, in A -48.3 # Defines out sphere, in A - - -Make sure you have the input file and the LAMMPS atom dump file in the same -directory. - -To run the program type - lmp2traj < inp_file.txt > out - -This should give you three files like in the examples/output folder. - - - - - +README.txt + +lmp2traj + +Version 1.0 +Ara Kooser +8/1/04 + +Contents +I. Before you start +II. Introduction +III. Compiling the program +IV. Running the program + +I. Before you start + +1) Read the READMEFIRST file +2) You will need either f77 or g77 compiler +3) A text editor (VI or emacs) +4) LAMMPS +5) A graphing program that can do contours +6) A sense of adventure and humor + +II. Introduction + +This program will take a LAMMPS atom dump file and provide the following three +files. +1) data for making contour maps +2) density profile +3) dipole information + +III. Compiling the program + +To compile the program run either ./f77 lmp2traj.f or +./g77 traj.f + +IV. Running the program + +First you need to create a user input file. There is an example of an input file +in the examples folder. + +The input file reads like this: + +'atom' # dump file name, needs the ' ' +1 # first frame +60 # last frame +38.26119 # x dimension of the box +44.26119 # y dimension of the box +48.33150 # z dimension of the box +90. # angles of the box, always 90 +90. # angles of the box, always 90 +90. # angles of the box, always 90 +82844.6 # volumne of the box in cubic Angstroms +5 # water oxygen atom type from LAMMPS (#) +6 # water hydrogen atom type from LAMMPS(#) +0. # leave at 0 +5. # number of atom types +0. # z shift leave at 0 +5. # number of density maps +'Surface (1) ho' # Enter name/description of atom +2 # atom type number from LAMMPS +'ho' # Column name for data +0 # Defines inner sphere, in A +48.3 # Defines out sphere, in A + + +Make sure you have the input file and the LAMMPS atom dump file in the same +directory. + +To run the program type + lmp2traj < inp_file.txt > out + +This should give you three files like in the examples/output folder. + + + + + diff --git a/tools/lmp2traj/examples/lmp2traj_inp.txt b/tools/lmp2traj/examples/lmp2traj_inp.txt index 02c6517d0a..fb823584b2 100644 --- a/tools/lmp2traj/examples/lmp2traj_inp.txt +++ b/tools/lmp2traj/examples/lmp2traj_inp.txt @@ -1,26 +1,26 @@ -'dump.atom' -1 -3 -29.00000 -38.26120 -44.79980 -90. -90. -90. -49708.7291 -1 -2 -0. -2. -0. -2 -'Bulk (1) O-water' -1 -'o*' -18.6 -21.0 -'Bulk (1) H-water' -2 -'h*' -18.1 -21.5 +'dump.atom' +1 +3 +29.00000 +38.26120 +44.79980 +90. +90. +90. +49708.7291 +1 +2 +0. +2. +0. +2 +'Bulk (1) O-water' +1 +'o*' +18.6 +21.0 +'Bulk (1) H-water' +2 +'h*' +18.1 +21.5 diff --git a/tools/matlab/lmp2cfg.m b/tools/matlab/lmp2cfg.m index 743fd90c22..7d2fac6a8a 100644 --- a/tools/matlab/lmp2cfg.m +++ b/tools/matlab/lmp2cfg.m @@ -1,252 +1,252 @@ -function lmp2cfg(varargin) -% Converts LAMMPS dump file to Extended CFG Format (No velocity) to be used -% with AtomEye (http://164.107.79.177/Archive/Graphics/A/) -% Input : -% Necessary (in order) -% timestep,Natoms,x_bound,y_bound,z_bound,H,atom_data,mass, -% cfg file name, dumpfile name -% Optional -% 'vel' --> 'yes' (if velocity data needs to be written) -% --> Default is 'no' -% 'atomtype' --> {Atom symbol} -% 'autonumber' --> 'yes' (default) numbers cfgfiles consecutively based on timestep -% 'autolog' --> 'on' (default) writes details of conversion to a log file -% 'rotation' --> To specify rotation (Transform in cfg file) say 'rotation' followed by -% number of rotations,the axes of rotation ('X' or 'Y' or 'Z')and the -% angle in degrees. CAUTION : Do remember that rotations are -% non-commutative and hence the order of rotations must be the same as -% intended -% 'aux' --> Auxiliary data must be a two column array with Quantity and Type in each -% column -% -% -% THE DATA MUST BE SCALED (0 to 1)IN ORDER FOR ATOMEYE TO READ PROPERLY -% Real coordinates x = s * H, x, s are 1x3 row vectors -% -% Example -% lmp2cfg_all(data.timestep,data.Natoms,data.xbound,data.ybound,... -% data.zbound,H,data.atom_data,mass,cfgfile,dumpfile,... -% 'vel','no','aux',{'sxx' 'Lammps O/P' -% 'syy' 'Lammps O/P' -% 'szz' 'Lammps O/P' -% 'sxy' 'Lammps O/P' -% 'sxz' 'Lammps O/P' -% 'syz' 'Lammps O/P'},... -% 'atomtype',{'Ni' -% 'Al'},... -% 'autonumber','on',... -% 'autolog','on',... -% 'rotation',2,'X',45,'Y',30); -% -% See also readdump_all, readdump_one, scandump -% -% Author : Arun K. Subramaniyan -% sarunkarthi@gmail.com -% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm -% School of Aeronautics and Astronautics -% Purdue University, West Lafayette, IN - 47907, USA. - -%------------ Defaults -vel = 'no'; -auxstatus = 0; -atom_typestatus = 0; -rotstatus = 0; -autonumber_status = 1; % default is ON -autolog_status = 1; -%---------------------------------- - -%-----Required Input -------------- -timestep = varargin{1} -Natoms = varargin{2}; -x_bound = varargin{3}; -y_bound = varargin{4}; -z_bound = varargin{5}; -H = varargin{6}; -atom_data = varargin{7}; -mass = varargin{8}; %arrange it in order of atom type , ie 1 - mass1 etc -filename = varargin{9}; %Just give one file name - -if length(varargin) < 10 - dumpfilename = ['dump.' filename]; -else - dumpfilename = varargin{10}; -end - - - -if length(varargin) > 10 - i=11; - while i \t\t %s \n',timestep(i),name{i}); - end - fclose(flog); -end - -%---------- Function to calculate beta -function b = beta(angle,axes) - switch axes - case 'X' % X axes - b = [1 0 0 - 0 cos(angle) sin(angle) - 0 -sin(angle) cos(angle)]; - case 'Y' % Y axes - b = [cos(angle) 0 sin(angle) - 0 1 0 - -sin(angle) 0 cos(angle)]; - case 'Z' % Z axes - b = [cos(angle) sin(angle) 0 - -sin(angle) cos(angle) 0 - 0 0 1]; - end -end -% -------------------------------------------------- - -end % For main function - - +function lmp2cfg(varargin) +% Converts LAMMPS dump file to Extended CFG Format (No velocity) to be used +% with AtomEye (http://164.107.79.177/Archive/Graphics/A/) +% Input : +% Necessary (in order) +% timestep,Natoms,x_bound,y_bound,z_bound,H,atom_data,mass, +% cfg file name, dumpfile name +% Optional +% 'vel' --> 'yes' (if velocity data needs to be written) +% --> Default is 'no' +% 'atomtype' --> {Atom symbol} +% 'autonumber' --> 'yes' (default) numbers cfgfiles consecutively based on timestep +% 'autolog' --> 'on' (default) writes details of conversion to a log file +% 'rotation' --> To specify rotation (Transform in cfg file) say 'rotation' followed by +% number of rotations,the axes of rotation ('X' or 'Y' or 'Z')and the +% angle in degrees. CAUTION : Do remember that rotations are +% non-commutative and hence the order of rotations must be the same as +% intended +% 'aux' --> Auxiliary data must be a two column array with Quantity and Type in each +% column +% +% +% THE DATA MUST BE SCALED (0 to 1)IN ORDER FOR ATOMEYE TO READ PROPERLY +% Real coordinates x = s * H, x, s are 1x3 row vectors +% +% Example +% lmp2cfg_all(data.timestep,data.Natoms,data.xbound,data.ybound,... +% data.zbound,H,data.atom_data,mass,cfgfile,dumpfile,... +% 'vel','no','aux',{'sxx' 'Lammps O/P' +% 'syy' 'Lammps O/P' +% 'szz' 'Lammps O/P' +% 'sxy' 'Lammps O/P' +% 'sxz' 'Lammps O/P' +% 'syz' 'Lammps O/P'},... +% 'atomtype',{'Ni' +% 'Al'},... +% 'autonumber','on',... +% 'autolog','on',... +% 'rotation',2,'X',45,'Y',30); +% +% See also readdump_all, readdump_one, scandump +% +% Author : Arun K. Subramaniyan +% sarunkarthi@gmail.com +% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm +% School of Aeronautics and Astronautics +% Purdue University, West Lafayette, IN - 47907, USA. + +%------------ Defaults +vel = 'no'; +auxstatus = 0; +atom_typestatus = 0; +rotstatus = 0; +autonumber_status = 1; % default is ON +autolog_status = 1; +%---------------------------------- + +%-----Required Input -------------- +timestep = varargin{1} +Natoms = varargin{2}; +x_bound = varargin{3}; +y_bound = varargin{4}; +z_bound = varargin{5}; +H = varargin{6}; +atom_data = varargin{7}; +mass = varargin{8}; %arrange it in order of atom type , ie 1 - mass1 etc +filename = varargin{9}; %Just give one file name + +if length(varargin) < 10 + dumpfilename = ['dump.' filename]; +else + dumpfilename = varargin{10}; +end + + + +if length(varargin) > 10 + i=11; + while i \t\t %s \n',timestep(i),name{i}); + end + fclose(flog); +end + +%---------- Function to calculate beta +function b = beta(angle,axes) + switch axes + case 'X' % X axes + b = [1 0 0 + 0 cos(angle) sin(angle) + 0 -sin(angle) cos(angle)]; + case 'Y' % Y axes + b = [cos(angle) 0 sin(angle) + 0 1 0 + -sin(angle) 0 cos(angle)]; + case 'Z' % Z axes + b = [cos(angle) sin(angle) 0 + -sin(angle) cos(angle) 0 + 0 0 1]; + end +end +% -------------------------------------------------- + +end % For main function + + diff --git a/tools/matlab/readEAM.m b/tools/matlab/readEAM.m index 92c39a9629..b4da5164fe 100644 --- a/tools/matlab/readEAM.m +++ b/tools/matlab/readEAM.m @@ -1,166 +1,166 @@ -function varargout = readEAM(varargin) -% Function to read EAM potential files -% Input -% 1: EAM potential file name -% 2: file type --> 'FUNCFL' for single element file -% --> 'SETFL' for multiple element file -% Output : Structure with members -% .embed : Embedding function -% .pair : Pair Potential -% .elecden : Electron Density -% .nrho : Number of points for electron density -% .drho : increment of r for electron density -% .nr : Number of points for pair potential -% .dr : increment of r for pair potential -% .rcut : cut-off distance -% All output is in exactly the same units as in the EAM file. For -% multielement SETFL files the members are multidimensional arrays with -% each element data stored in (:,:,ELEM) -% -% Example -% eam = readEAM('cuu3.eam','funcfl'); -% -% Author : Arun K. Subramaniyan -% sarunkarthi@gmail.com -% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm -% School of Aeronautics and Astronautics -% Purdue University, West Lafayette, IN - 47907, USA. - -if length(varargin) < 2 - error('Too few input parameters : Need Filename and filetype'); -elseif length(varargin) > 2 - error('Too many input parameters'); -end - -filename = varargin{1}; -type = varargin{2}; - -try - fid = fopen(filename,'r'); -catch - error('EAM file not found!'); -end - -if strcmpi(type,'FUNCFL') - t = 1; -elseif strcmpi(type,'SETFL') - t = 2; -else - error(['Unknown file type : "' type '"']); -end - -switch t - case 1 %FUNCFL - % Read line 1 : comment line - a = fgetl(fid); - - % read Line 2 - rem = fgetl(fid); % ielem amass blat lat - [ielem,rem] = strtok(rem); - [amass,rem] = strtok(rem); - [blat,rem] = strtok(rem); - [lat,rem] = strtok(rem); - ielem = str2num(ielem); % Atomic Number - amass = str2num(amass); % Atomic Mass - blat = str2num(blat); % Lattice Constant - - % Read Line 3 - a = str2num(fgetl(fid)); - nrho = a(1); - drho = a(2); - nr = a(3); - dr = a(4); - rcut = a(5); - - % Reading embedding function - for i = 1 : 1 : nrho/5 - embed(i,:) = str2num(fgetl(fid)); - end - - % Reading pair potential - for i = 1 : 1 : nr/5 - pair(i,:) = str2num(fgetl(fid)); - end - - % Reading electron density function - for i = 1 : 1 : nr/5 - elecden(i,:) = str2num(fgetl(fid)); - end - - % Output - out.embed = embed; - out.pair = pair; - out.elecden = elecden; - out.nrho = nrho; - out.drho = drho; - out.nr = nr; - out.dr = dr; - out.rcut = rcut; - - varargout{1} = out; -% -------------------------------------------------------------------- - - case 2 % SETFL - - % Read lines 1 - 3 : comment lines - a = fgetl(fid); - a = fgetl(fid); - a = fgetl(fid); - - % Atom types - ntypes = str2num(fgetl(fid)); - - % Read Global information - a = str2num(fgetl(fid)); - nrho = a(1); - drho = a(2); - nr = a(3); - dr = a(4); - rcut = a(5); - - % Read element specific Data - % Embedding function and Electron Density - for elem = 1 : 1 : ntypes - rem = fgetl(fid); % ielem amass blat lat - [ielem1,rem] = strtok(rem); - [amass1,rem] = strtok(rem); - [blat1,rem] = strtok(rem); - [lat1,rem] = strtok(rem); - ielem(elem) = str2num(ielem1); % Atomic Number - amass(elem) = str2num(amass1); % Atomic Mass - blat(elem) = str2num(blat1); % Lattice Constant - lat(elem,:) = lat1; % Lattice type - - % Reading embedding function - for i = 1 : 1 : nrho/5 - embed(i,:,elem) = str2num(fgetl(fid)); - end - - % Reading electron density function - for i = 1 : 1 : nr/5 - elecden(i,:,elem) = str2num(fgetl(fid)); - end - end - - % Pair Potentials - n_pair = ntypes + (factorial(ntypes)/2); - for np = 1 : 1 : n_pair - for i = 1 : 1 : nr/5 - pair(i,:,np) = str2num(fgetl(fid)); - end - end - - % Output - out.embed = embed; - out.elecden = elecden; - out.pair = pair; - out.nrho = nrho; - out.drho = drho; - out.nr = nr; - out.dr = dr; - out.rcut = rcut; - - varargout{1} = out; - -end - +function varargout = readEAM(varargin) +% Function to read EAM potential files +% Input +% 1: EAM potential file name +% 2: file type --> 'FUNCFL' for single element file +% --> 'SETFL' for multiple element file +% Output : Structure with members +% .embed : Embedding function +% .pair : Pair Potential +% .elecden : Electron Density +% .nrho : Number of points for electron density +% .drho : increment of r for electron density +% .nr : Number of points for pair potential +% .dr : increment of r for pair potential +% .rcut : cut-off distance +% All output is in exactly the same units as in the EAM file. For +% multielement SETFL files the members are multidimensional arrays with +% each element data stored in (:,:,ELEM) +% +% Example +% eam = readEAM('cuu3.eam','funcfl'); +% +% Author : Arun K. Subramaniyan +% sarunkarthi@gmail.com +% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm +% School of Aeronautics and Astronautics +% Purdue University, West Lafayette, IN - 47907, USA. + +if length(varargin) < 2 + error('Too few input parameters : Need Filename and filetype'); +elseif length(varargin) > 2 + error('Too many input parameters'); +end + +filename = varargin{1}; +type = varargin{2}; + +try + fid = fopen(filename,'r'); +catch + error('EAM file not found!'); +end + +if strcmpi(type,'FUNCFL') + t = 1; +elseif strcmpi(type,'SETFL') + t = 2; +else + error(['Unknown file type : "' type '"']); +end + +switch t + case 1 %FUNCFL + % Read line 1 : comment line + a = fgetl(fid); + + % read Line 2 + rem = fgetl(fid); % ielem amass blat lat + [ielem,rem] = strtok(rem); + [amass,rem] = strtok(rem); + [blat,rem] = strtok(rem); + [lat,rem] = strtok(rem); + ielem = str2num(ielem); % Atomic Number + amass = str2num(amass); % Atomic Mass + blat = str2num(blat); % Lattice Constant + + % Read Line 3 + a = str2num(fgetl(fid)); + nrho = a(1); + drho = a(2); + nr = a(3); + dr = a(4); + rcut = a(5); + + % Reading embedding function + for i = 1 : 1 : nrho/5 + embed(i,:) = str2num(fgetl(fid)); + end + + % Reading pair potential + for i = 1 : 1 : nr/5 + pair(i,:) = str2num(fgetl(fid)); + end + + % Reading electron density function + for i = 1 : 1 : nr/5 + elecden(i,:) = str2num(fgetl(fid)); + end + + % Output + out.embed = embed; + out.pair = pair; + out.elecden = elecden; + out.nrho = nrho; + out.drho = drho; + out.nr = nr; + out.dr = dr; + out.rcut = rcut; + + varargout{1} = out; +% -------------------------------------------------------------------- + + case 2 % SETFL + + % Read lines 1 - 3 : comment lines + a = fgetl(fid); + a = fgetl(fid); + a = fgetl(fid); + + % Atom types + ntypes = str2num(fgetl(fid)); + + % Read Global information + a = str2num(fgetl(fid)); + nrho = a(1); + drho = a(2); + nr = a(3); + dr = a(4); + rcut = a(5); + + % Read element specific Data + % Embedding function and Electron Density + for elem = 1 : 1 : ntypes + rem = fgetl(fid); % ielem amass blat lat + [ielem1,rem] = strtok(rem); + [amass1,rem] = strtok(rem); + [blat1,rem] = strtok(rem); + [lat1,rem] = strtok(rem); + ielem(elem) = str2num(ielem1); % Atomic Number + amass(elem) = str2num(amass1); % Atomic Mass + blat(elem) = str2num(blat1); % Lattice Constant + lat(elem,:) = lat1; % Lattice type + + % Reading embedding function + for i = 1 : 1 : nrho/5 + embed(i,:,elem) = str2num(fgetl(fid)); + end + + % Reading electron density function + for i = 1 : 1 : nr/5 + elecden(i,:,elem) = str2num(fgetl(fid)); + end + end + + % Pair Potentials + n_pair = ntypes + (factorial(ntypes)/2); + for np = 1 : 1 : n_pair + for i = 1 : 1 : nr/5 + pair(i,:,np) = str2num(fgetl(fid)); + end + end + + % Output + out.embed = embed; + out.elecden = elecden; + out.pair = pair; + out.nrho = nrho; + out.drho = drho; + out.nr = nr; + out.dr = dr; + out.rcut = rcut; + + varargout{1} = out; + +end + diff --git a/tools/matlab/readdump_one.m b/tools/matlab/readdump_one.m index f5b1a13354..e681c0d32e 100644 --- a/tools/matlab/readdump_one.m +++ b/tools/matlab/readdump_one.m @@ -1,120 +1,120 @@ -function [varargout] = readdump_one(varargin) -% Read LAMMPS dump file one timestep at a time -% Input -% Dump file name with path -% Starting file pointer position in dump file -% Number of columns in the dump file -% Output is in the form of a structure with following variables -% .timestep --> Vector containing all time steps -% .Natoms --> Vector containing number of atoms at each time step -% .x_bound --> [t,2] array with xlo,xhi at each time step -% .y_bound --> [t,2] array with ylo,yhi at each time step -% .z_bound --> [t,2] array with zlo,zhi at each time step -% .atom_data --> 2 dimensional array with data -% .position --> file pointer for reading next time -% -% Example -% data = readdump_one('dump.LAMMPS',0,5); -% Reads the first timestep in the file dump.LAMMPS -% Specify position = -1 if only the last dump step in the -% file is needed -% -% See also readdump, scandump -% -% Author : Arun K. Subramaniyan -% sarunkarthi@gmail.com -% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm -% School of Aeronautics and Astronautics -% Purdue University, West Lafayette, IN - 47907, USA. - -try - dump = fopen(varargin{1},'r'); -catch - error('Dumpfile not found!'); -end -position = varargin{2}; % from beg of file -ncol = varargin{3}; %number of columns - -i=1; -t=0; -done = 0; -last_status = 0; -if position ~= -1 - fseek(dump,position,'bof'); -else - last_status = 1; -end -while done == 0 & last_status == 0 - id = fgetl(dump); - switch id - case 'ITEM: TIMESTEP' - if t == 0 - timestep(i) = str2num(fgetl(dump)); - t=1; - end - case 'ITEM: NUMBER OF ATOMS' - Natoms = str2num(fgetl(dump)); - case 'ITEM: BOX BOUNDS' - x_bound(1,:) = str2num(fgetl(dump)); - y_bound(1,:) = str2num(fgetl(dump)); - z_bound(1,:) = str2num(fgetl(dump)); - case 'ITEM: ATOMS' - atom_data = zeros(Natoms,ncol);%Allocate memory for atom data - for j = 1 : 1: Natoms - atom_data(j,:) = str2num(fgetl(dump)); - end - done = 1; - p = ftell(dump); - end -end - -% Getting only the last step -if last_status == 1 - % First get the position of the beginning of the last step in the - % dumpfile - while ~feof(dump) - temp = fgetl(dump); - if length(temp) == 14 - if strcmpi(temp,'ITEM: TIMESTEP') - p = ftell(dump); % starting position of line next to the header - end - end - end - fclose(dump); - dump = fopen(varargin{1},'r'); - fseek(dump,p,'bof'); - % getting Timestep - timestep = str2num(fgetl(dump)); - - while ~feof(dump) - id = fgetl(dump); - switch id - case 'ITEM: NUMBER OF ATOMS' - Natoms = str2num(fgetl(dump)); - case 'ITEM: BOX BOUNDS' - x_bound(1,:) = str2num(fgetl(dump)); - y_bound(1,:) = str2num(fgetl(dump)); - z_bound(1,:) = str2num(fgetl(dump)); - case 'ITEM: ATOMS' - atom_data = zeros(Natoms,ncol);%Allocate memory for atom data - for j = 1 : 1: Natoms - atom_data(j,:) = str2num(fgetl(dump)); - end - end - end -end - -%----------Outputs------------- - -%OUTPUTS IN SAME VARIABLE STRUCTURE -varargout{1}.timestep = timestep; -varargout{1}.Natoms = Natoms; -varargout{1}.x_bound = x_bound; -varargout{1}.y_bound = y_bound; -varargout{1}.z_bound = z_bound; -varargout{1}.atom_data = atom_data; -varargout{1}.position = p; %gives postion of ITEM: TIMESTEP line -%------------------------------ - -fclose(dump); - +function [varargout] = readdump_one(varargin) +% Read LAMMPS dump file one timestep at a time +% Input +% Dump file name with path +% Starting file pointer position in dump file +% Number of columns in the dump file +% Output is in the form of a structure with following variables +% .timestep --> Vector containing all time steps +% .Natoms --> Vector containing number of atoms at each time step +% .x_bound --> [t,2] array with xlo,xhi at each time step +% .y_bound --> [t,2] array with ylo,yhi at each time step +% .z_bound --> [t,2] array with zlo,zhi at each time step +% .atom_data --> 2 dimensional array with data +% .position --> file pointer for reading next time +% +% Example +% data = readdump_one('dump.LAMMPS',0,5); +% Reads the first timestep in the file dump.LAMMPS +% Specify position = -1 if only the last dump step in the +% file is needed +% +% See also readdump, scandump +% +% Author : Arun K. Subramaniyan +% sarunkarthi@gmail.com +% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm +% School of Aeronautics and Astronautics +% Purdue University, West Lafayette, IN - 47907, USA. + +try + dump = fopen(varargin{1},'r'); +catch + error('Dumpfile not found!'); +end +position = varargin{2}; % from beg of file +ncol = varargin{3}; %number of columns + +i=1; +t=0; +done = 0; +last_status = 0; +if position ~= -1 + fseek(dump,position,'bof'); +else + last_status = 1; +end +while done == 0 & last_status == 0 + id = fgetl(dump); + switch id + case 'ITEM: TIMESTEP' + if t == 0 + timestep(i) = str2num(fgetl(dump)); + t=1; + end + case 'ITEM: NUMBER OF ATOMS' + Natoms = str2num(fgetl(dump)); + case 'ITEM: BOX BOUNDS' + x_bound(1,:) = str2num(fgetl(dump)); + y_bound(1,:) = str2num(fgetl(dump)); + z_bound(1,:) = str2num(fgetl(dump)); + case 'ITEM: ATOMS' + atom_data = zeros(Natoms,ncol);%Allocate memory for atom data + for j = 1 : 1: Natoms + atom_data(j,:) = str2num(fgetl(dump)); + end + done = 1; + p = ftell(dump); + end +end + +% Getting only the last step +if last_status == 1 + % First get the position of the beginning of the last step in the + % dumpfile + while ~feof(dump) + temp = fgetl(dump); + if length(temp) == 14 + if strcmpi(temp,'ITEM: TIMESTEP') + p = ftell(dump); % starting position of line next to the header + end + end + end + fclose(dump); + dump = fopen(varargin{1},'r'); + fseek(dump,p,'bof'); + % getting Timestep + timestep = str2num(fgetl(dump)); + + while ~feof(dump) + id = fgetl(dump); + switch id + case 'ITEM: NUMBER OF ATOMS' + Natoms = str2num(fgetl(dump)); + case 'ITEM: BOX BOUNDS' + x_bound(1,:) = str2num(fgetl(dump)); + y_bound(1,:) = str2num(fgetl(dump)); + z_bound(1,:) = str2num(fgetl(dump)); + case 'ITEM: ATOMS' + atom_data = zeros(Natoms,ncol);%Allocate memory for atom data + for j = 1 : 1: Natoms + atom_data(j,:) = str2num(fgetl(dump)); + end + end + end +end + +%----------Outputs------------- + +%OUTPUTS IN SAME VARIABLE STRUCTURE +varargout{1}.timestep = timestep; +varargout{1}.Natoms = Natoms; +varargout{1}.x_bound = x_bound; +varargout{1}.y_bound = y_bound; +varargout{1}.z_bound = z_bound; +varargout{1}.atom_data = atom_data; +varargout{1}.position = p; %gives postion of ITEM: TIMESTEP line +%------------------------------ + +fclose(dump); + diff --git a/tools/matlab/readlog.m b/tools/matlab/readlog.m index 3392d3b267..8bdec5aa56 100644 --- a/tools/matlab/readlog.m +++ b/tools/matlab/readlog.m @@ -1,92 +1,92 @@ -function [varargout] = readlog(varargin) -% Read LAMMPS log files -% input is log file name with path -% output is a structure --> out -% out.Chead --> has heading of columns in each run -% out.data --> has the data during each run in the form of string -% Type str2num(out.data{i}) to get the numeric array -% -% Example -% logdata = readlog('log.LAMMPS'); -% -% Author : sarunkarthi@gmail.com -% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm -% Arun K. Subramaniyan -% School of Aeronautics and Astronautics -% Purdue University, West Lafayette, IN - 47907, USA. - -logfile = varargin{1}; -try - fid = fopen(logfile,'r'); -catch - error('Log file not found!'); -end - -loop = 1; -while feof(fid) == 0 - %----------- To get first line of thermo output -------- - while feof(fid) == 0 - a = fgetl(fid); - if length(a) > 4 && strcmp(a(1:4),'Step') - findstep = 1; - break; - end - end - %------------------------------------------------------- - - %---------Seperate column headings---------------------- - j=1; - k=1; - Ch=''; - i=1; - while i < length(a) && findstep == 1 - for i = k : 1 : length(a) - if strcmp(a(i),' ') - Chead{loop,j} = Ch; - clear Ch; - Ch = ''; - k=i+1; - j=j+1; - break; - else - Ch = [Ch a(i)]; - end - end - end - if findstep == 1 - Chead{loop,j} = Ch; % to get the last column heading - end - %------------------------------------------------------- - - %----------------------Get Data------------------------- - id = 1; %row id... - while feof(fid) == 0 - a = fgetl(fid); - if strcmp(a(1:4),'Loop') - loop = loop + 1; - break; - else - logdata(id,:) = str2num(a); - id = id+1; - end - end - %-------------------------------------------------------- - if feof(fid) == 0 - b = num2str(logdata); - data{loop-1} = b; - clear b; - clear logdata; - findstep = 0; - end -end -fclose(fid); - -%--------OUTPUT------------------------------------------- -out.Chead = Chead; -out.data = data; - -varargout{1} = out; - - - +function [varargout] = readlog(varargin) +% Read LAMMPS log files +% input is log file name with path +% output is a structure --> out +% out.Chead --> has heading of columns in each run +% out.data --> has the data during each run in the form of string +% Type str2num(out.data{i}) to get the numeric array +% +% Example +% logdata = readlog('log.LAMMPS'); +% +% Author : sarunkarthi@gmail.com +% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm +% Arun K. Subramaniyan +% School of Aeronautics and Astronautics +% Purdue University, West Lafayette, IN - 47907, USA. + +logfile = varargin{1}; +try + fid = fopen(logfile,'r'); +catch + error('Log file not found!'); +end + +loop = 1; +while feof(fid) == 0 + %----------- To get first line of thermo output -------- + while feof(fid) == 0 + a = fgetl(fid); + if length(a) > 4 && strcmp(a(1:4),'Step') + findstep = 1; + break; + end + end + %------------------------------------------------------- + + %---------Seperate column headings---------------------- + j=1; + k=1; + Ch=''; + i=1; + while i < length(a) && findstep == 1 + for i = k : 1 : length(a) + if strcmp(a(i),' ') + Chead{loop,j} = Ch; + clear Ch; + Ch = ''; + k=i+1; + j=j+1; + break; + else + Ch = [Ch a(i)]; + end + end + end + if findstep == 1 + Chead{loop,j} = Ch; % to get the last column heading + end + %------------------------------------------------------- + + %----------------------Get Data------------------------- + id = 1; %row id... + while feof(fid) == 0 + a = fgetl(fid); + if strcmp(a(1:4),'Loop') + loop = loop + 1; + break; + else + logdata(id,:) = str2num(a); + id = id+1; + end + end + %-------------------------------------------------------- + if feof(fid) == 0 + b = num2str(logdata); + data{loop-1} = b; + clear b; + clear logdata; + findstep = 0; + end +end +fclose(fid); + +%--------OUTPUT------------------------------------------- +out.Chead = Chead; +out.data = data; + +varargout{1} = out; + + + \ No newline at end of file diff --git a/tools/matlab/readrdf.m b/tools/matlab/readrdf.m index 354ea01f89..540bea7daf 100644 --- a/tools/matlab/readrdf.m +++ b/tools/matlab/readrdf.m @@ -1,142 +1,142 @@ -function varargout = readrdf(varargin) -% Function to read Radial Distribution Funtion output from LAMMPS -% Input -% 'bin' --> number of bins in rdf histogram -% 'runtime' --> Run length of each of the run commands -% 'step' --> rdf Dump step for each of the run commands -% 'ncol' --> number of columns in the file -% 'final' --> 'YES' indicates that only the average values will be extracted -% If only the averages are needed, you don't need to specify 'runtime', -% 'step' and 'ncol' -% -% Output is in the form of a structure with following variables -% -% if 'final' was given as 'NO' -% .rdf_step_data --> Matrix with RDF for each of the dumped steps -% .rdf_ave_data --> Matrix with average RDF for each RUN -% .rdf_ave_data --> Matrix with average RDF for each RUN -% -% if 'final' was given as 'YES' -% .rdf_ave_data --> Matrix with average RDF for each RUN -% -% Example -% rdf = readrdf('inputfile','bin',100,'runtime',[30000;20000],... -% 'step',[100;100],'ncol',3,'final','no') -% -% Author : Arun K. Subramaniyan -% sarunkarthi@gmail.com -% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm -% School of Aeronautics and Astronautics -% Purdue University, West Lafayette, IN - 47907, USA. - - -rdf_name = varargin{1}; % RDF File name - -% Setting all status checks to zero -bin_status = 0; -runtime_status = 0; -step_status = 0; -ncol_status = 0; -final_status = 'no'; - - - -for id = 2 : 1 : length(varargin) - if strcmpi(varargin{id},'bin') - rdf_bin = varargin{id+1}; % RDF bins - bin_status = 1; - elseif strcmpi(varargin{id},'runtime') - rdf_runtime = varargin{id+1}; % Runtimes - runtime_status = 1; - elseif strcmpi(varargin{id},'step') - rdf_step = varargin{id+1}; % Runtimes - step_status = 1; - elseif strcmpi(varargin{id},'ncol') - ncol = varargin{id+1}; % Runtimes - ncol_status = 1; - elseif strcmpi(varargin{id},'final') - final_status = varargin{id+1}; - end -end - -if ncol_status == 0 - ncol = 3; -end - -% Check for errors in input arguments -if bin_status == 0 - error('No bin specified'); -elseif step_status == 1 && runtime_status == 0 - error('Step size specified without Runtime'); -elseif step_status == 0 && runtime_status == 1 - error('Runtime specified without Step size'); -end -if step_status == 1 && runtime_status == 1 - if length(rdf_runtime) ~= length(rdf_step) - error('Runtime and Step size do not match'); - end -end - -% Preallocating memory if runtime and step size are provided -if step_status == 1 && runtime_status == 1 && strcmpi(final_status,'no') - total_steps = round(sum(rdf_runtime./rdf_step)); - rdf_step_data = zeros(rdf_bin,ncol,total_steps); - rdf_ave_data = zeros(rdf_bin,ncol,length(rdf_runtime)); -elseif strcmpi(final_status,'yes') && step_status == 1 && runtime_status == 1 - rdf_ave_data = zeros(rdf_bin,ncol,length(rdf_runtime)); -end - - -try - rdf_file = fopen(rdf_name,'r'); -catch - error('RDF file not found!'); -end - - - -if strcmpi(final_status,'yes') - run_id = 1; % Run id.. - while feof(rdf_file) ~= 1 - rdf_data = fgetl(rdf_file); - if strcmpi(rdf_data(1:11),'RUN AVERAGE') - fgetl(rdf_file); % to skip the title - for id = 1 : 1 : rdf_bin - rdf_ave_data(id,:,run_id) = str2num(fgetl(rdf_file)); - end - run_id = run_id + 1; - end - - end -else - run_id = 1; - id = 1; - while feof(rdf_file) ~= 1 - rdf_data = fgetl(rdf_file); - if strcmpi(rdf_data(1:8),'TIMESTEP') - timestep(id,1) = str2num(rdf_data(10:length(rdf_data))); - fgetl(rdf_file); % to skip the title - for j = 1 : 1 : rdf_bin - rdf_step_data(j,:,id) = str2num(fgetl(rdf_file)); - end - id = id+1; - elseif strcmpi(rdf_data(1:11),'RUN AVERAGE') - fgetl(rdf_file); % to skip the title - for j = 1 : 1 : rdf_bin - rdf_ave_data(j,:,run_id) = str2num(fgetl(rdf_file)); - end - run_id = run_id + 1; - end - end -end - -fclose(rdf_file); - -if strcmpi(final_status,'no') - out_data.timestep = timestep; - out_data.rdf_step_data = rdf_step_data; - out_data.rdf_ave_data = rdf_ave_data; -else - out_data.rdf_ave_data = rdf_ave_data; -end -varargout{1} = out_data; +function varargout = readrdf(varargin) +% Function to read Radial Distribution Funtion output from LAMMPS +% Input +% 'bin' --> number of bins in rdf histogram +% 'runtime' --> Run length of each of the run commands +% 'step' --> rdf Dump step for each of the run commands +% 'ncol' --> number of columns in the file +% 'final' --> 'YES' indicates that only the average values will be extracted +% If only the averages are needed, you don't need to specify 'runtime', +% 'step' and 'ncol' +% +% Output is in the form of a structure with following variables +% +% if 'final' was given as 'NO' +% .rdf_step_data --> Matrix with RDF for each of the dumped steps +% .rdf_ave_data --> Matrix with average RDF for each RUN +% .rdf_ave_data --> Matrix with average RDF for each RUN +% +% if 'final' was given as 'YES' +% .rdf_ave_data --> Matrix with average RDF for each RUN +% +% Example +% rdf = readrdf('inputfile','bin',100,'runtime',[30000;20000],... +% 'step',[100;100],'ncol',3,'final','no') +% +% Author : Arun K. Subramaniyan +% sarunkarthi@gmail.com +% http://web.ics.purdue.edu/~asubrama/pages/Research_Main.htm +% School of Aeronautics and Astronautics +% Purdue University, West Lafayette, IN - 47907, USA. + + +rdf_name = varargin{1}; % RDF File name + +% Setting all status checks to zero +bin_status = 0; +runtime_status = 0; +step_status = 0; +ncol_status = 0; +final_status = 'no'; + + + +for id = 2 : 1 : length(varargin) + if strcmpi(varargin{id},'bin') + rdf_bin = varargin{id+1}; % RDF bins + bin_status = 1; + elseif strcmpi(varargin{id},'runtime') + rdf_runtime = varargin{id+1}; % Runtimes + runtime_status = 1; + elseif strcmpi(varargin{id},'step') + rdf_step = varargin{id+1}; % Runtimes + step_status = 1; + elseif strcmpi(varargin{id},'ncol') + ncol = varargin{id+1}; % Runtimes + ncol_status = 1; + elseif strcmpi(varargin{id},'final') + final_status = varargin{id+1}; + end +end + +if ncol_status == 0 + ncol = 3; +end + +% Check for errors in input arguments +if bin_status == 0 + error('No bin specified'); +elseif step_status == 1 && runtime_status == 0 + error('Step size specified without Runtime'); +elseif step_status == 0 && runtime_status == 1 + error('Runtime specified without Step size'); +end +if step_status == 1 && runtime_status == 1 + if length(rdf_runtime) ~= length(rdf_step) + error('Runtime and Step size do not match'); + end +end + +% Preallocating memory if runtime and step size are provided +if step_status == 1 && runtime_status == 1 && strcmpi(final_status,'no') + total_steps = round(sum(rdf_runtime./rdf_step)); + rdf_step_data = zeros(rdf_bin,ncol,total_steps); + rdf_ave_data = zeros(rdf_bin,ncol,length(rdf_runtime)); +elseif strcmpi(final_status,'yes') && step_status == 1 && runtime_status == 1 + rdf_ave_data = zeros(rdf_bin,ncol,length(rdf_runtime)); +end + + +try + rdf_file = fopen(rdf_name,'r'); +catch + error('RDF file not found!'); +end + + + +if strcmpi(final_status,'yes') + run_id = 1; % Run id.. + while feof(rdf_file) ~= 1 + rdf_data = fgetl(rdf_file); + if strcmpi(rdf_data(1:11),'RUN AVERAGE') + fgetl(rdf_file); % to skip the title + for id = 1 : 1 : rdf_bin + rdf_ave_data(id,:,run_id) = str2num(fgetl(rdf_file)); + end + run_id = run_id + 1; + end + + end +else + run_id = 1; + id = 1; + while feof(rdf_file) ~= 1 + rdf_data = fgetl(rdf_file); + if strcmpi(rdf_data(1:8),'TIMESTEP') + timestep(id,1) = str2num(rdf_data(10:length(rdf_data))); + fgetl(rdf_file); % to skip the title + for j = 1 : 1 : rdf_bin + rdf_step_data(j,:,id) = str2num(fgetl(rdf_file)); + end + id = id+1; + elseif strcmpi(rdf_data(1:11),'RUN AVERAGE') + fgetl(rdf_file); % to skip the title + for j = 1 : 1 : rdf_bin + rdf_ave_data(j,:,run_id) = str2num(fgetl(rdf_file)); + end + run_id = run_id + 1; + end + end +end + +fclose(rdf_file); + +if strcmpi(final_status,'no') + out_data.timestep = timestep; + out_data.rdf_step_data = rdf_step_data; + out_data.rdf_ave_data = rdf_ave_data; +else + out_data.rdf_ave_data = rdf_ave_data; +end +varargout{1} = out_data; diff --git a/tools/msi2lmp/src/GetParameters.c b/tools/msi2lmp/src/GetParameters.c index c06efc270d..cd0f3bbbfe 100644 --- a/tools/msi2lmp/src/GetParameters.c +++ b/tools/msi2lmp/src/GetParameters.c @@ -261,7 +261,7 @@ void GetParameters(int Forcefield) for (j=0; j < 3; j++) fprintf(stderr," %-3s", atomtypes[angletypes[i].types[j]].potential); for (j=0; j < 4; j++) fprintf(stderr," %8.4f",angletypes[i].params[j]); - fprintf(stderr,"\n"); + fprintf(stderr,"\n"); } if (forcefield > 1) { @@ -448,7 +448,7 @@ void GetParameters(int Forcefield) } else { dihedraltypes[i].midbonddihedral_cross_term[0] = - ff_midbontor.data[k].ff_param[0]; + ff_midbontor.data[k].ff_param[0]; dihedraltypes[i].midbonddihedral_cross_term[1] = ff_midbontor.data[k].ff_param[1]; dihedraltypes[i].midbonddihedral_cross_term[2] = @@ -482,7 +482,7 @@ void GetParameters(int Forcefield) } else { dihedraltypes[i].angledihedral_cross_term[0] = - ff_angtor.data[k].ff_param[0]; + ff_angtor.data[k].ff_param[0]; dihedraltypes[i].angledihedral_cross_term[1] = ff_angtor.data[k].ff_param[1]; dihedraltypes[i].angledihedral_cross_term[2] = diff --git a/tools/msi2lmp/src/InitializeItems.c b/tools/msi2lmp/src/InitializeItems.c index 4c03e3cf53..9365b949c7 100644 --- a/tools/msi2lmp/src/InitializeItems.c +++ b/tools/msi2lmp/src/InitializeItems.c @@ -33,7 +33,7 @@ void InitializeItems(void) } else { strcpy(ff_bond.keyword, "#quartic_bond"); - ff_bond.number_of_parameters = 4; + ff_bond.number_of_parameters = 4; } /* ANGLE */ diff --git a/tools/msi2lmp/src/MakeLists.c b/tools/msi2lmp/src/MakeLists.c index 5337a5b61b..c594abae6b 100644 --- a/tools/msi2lmp/src/MakeLists.c +++ b/tools/msi2lmp/src/MakeLists.c @@ -1,783 +1,783 @@ -#include "Msi2LMP2.h" - -int count_bonds(); -int count_angles(); -int count_dihedrals(); -int count_oops(); -int count_angle_angles(); - -void build_bonds_list(); -void build_angles_list(); -void build_dihedrals_list(); -void build_oops_list(); -void build_angleangles_list(); - -void build_atomtypes_list(); -void build_bondtypes_list(); -void build_angletypes_list(); -void build_dihedraltypes_list(); -void build_ooptypes_list(); -void build_angleangletypes_list(); - -void swap_ints(int *,int *); -void bubble_sort(int, int *, int *); - -/*#define PRINT_LISTS */ - -void MakeLists() -{ - - total_no_bonds = count_bonds(); - total_no_angles = count_angles(); - total_no_dihedrals = count_dihedrals(); - total_no_oops = count_oops(); - total_no_angle_angles = count_angle_angles(); - - - atomtypes = (struct AtomTypeList *)calloc(MAX_ATOM_TYPES, - sizeof(struct AtomTypeList)); - if (atomtypes == NULL) { - fprintf(stderr,"Trouble allocating memory for atomtypes list - Exiting\n"); - exit(1); - } - - build_atomtypes_list(); - - - if (total_no_bonds > 0) { - bonds = (struct BondList *)calloc(total_no_bonds,sizeof(struct BondList)); - if (bonds == NULL) { - fprintf(stderr,"Trouble allocating memory for bonds list - Exiting\n"); - exit(1); - } - - build_bonds_list(); - - bondtypes = (struct BondTypeList *)calloc(MAX_BOND_TYPES, - sizeof(struct BondTypeList)); - if (bondtypes == NULL) { - fprintf(stderr,"Trouble allocating memory for bondtypes list - Exiting\n"); - exit(1); - } - - build_bondtypes_list(); - } - - if (total_no_angles > 0) { - angles = (struct AngleList *)calloc(total_no_angles, - sizeof(struct AngleList)); - if (angles == NULL) { - fprintf(stderr,"Trouble allocating memory for angles list - Exiting\n"); - exit(1); - } - - build_angles_list(); - - angletypes = (struct AngleTypeList *)calloc(MAX_ANGLE_TYPES, - sizeof(struct AngleTypeList)); - if (angletypes == NULL) { - fprintf(stderr,"Trouble allocating memory for angletypes list - Exiting\n"); - exit(1); - } - - build_angletypes_list(); - } - - if (total_no_dihedrals > 0) { - - dihedrals = (struct DihedralList *)calloc(total_no_dihedrals, - sizeof(struct DihedralList)); - if (dihedrals == NULL) { - fprintf(stderr,"Trouble allocating memory for dihedrals list - Exiting\n"); - exit(1); - } - - build_dihedrals_list(); - - dihedraltypes = (struct DihedralTypeList *)calloc(MAX_DIHEDRAL_TYPES, - sizeof(struct DihedralTypeList)); - if (dihedraltypes == NULL) { - fprintf(stderr,"Trouble allocating memory for dihedraltypes list - Exiting\n"); - exit(1); - } - - build_dihedraltypes_list(); - } - - if (total_no_oops > 0) { - oops = (struct OOPList *)calloc(total_no_oops,sizeof(struct OOPList)); - if (oops == NULL) { - fprintf(stderr,"Trouble allocating memory for oops list - Exiting\n"); - exit(1); - } - build_oops_list(); - - ooptypes = (struct OOPTypeList *)calloc(MAX_OOP_TYPES, - sizeof(struct OOPTypeList)); - if (ooptypes == NULL) { - fprintf(stderr,"Trouble allocating memory for ooptypes list - Exiting\n"); - exit(1); - } - - build_ooptypes_list(); - } - - if ((forcefield > 1) & (total_no_angle_angles > 0)) { - - angleangles = (struct AngleAngleList *)calloc(total_no_angle_angles, - sizeof(struct AngleAngleList)); - if (angleangles == NULL) { - fprintf(stderr,"Trouble allocating memory for angleangles list - Exiting\n"); - exit(1); - } - build_angleangles_list(); - - angleangletypes = (struct AngleAngleTypeList *)calloc(MAX_ANGLEANGLE_TYPES, - sizeof(struct AngleAngleTypeList)); - if (angleangletypes == NULL) { - fprintf(stderr,"Trouble allocating memory for angleangletypes list - Exiting\n"); - exit(1); - } - build_angleangletypes_list(); - } - - -#ifdef PRINT_LISTS - fprintf(stderr,"Atom Types\n N Potential\n"); - for (i=0; i < no_atom_types; i++) { - fprintf(stderr," %d %s\n",i,atomtypes[i].potential); - } - - fprintf(stderr,"Atoms\n"); - for (i=0; i < total_no_atoms; i++) { - fprintf(stderr,"Atom %3d %2d %-5s %7.4f %9.6f %9.6f %9.6f\n", - i,atoms[i].type,atoms[i].potential,atoms[i].q, - atoms[i].x[0],atoms[i].x[1],atoms[i].x[2]); - } - - if (total_no_bonds > 0) { - fprintf(stderr,"Bond Types\n"); - for (i=0; i < no_bond_types; i++) { - fprintf(stderr," %d %d %d %-s %-s\n",i,bondtypes[i].types[0], - bondtypes[i].types[1], - atomtypes[bondtypes[i].types[0]].potential, - atomtypes[bondtypes[i].types[1]].potential); - } - - fprintf(stderr,"Bonds\n N Type I J\n"); - for (i=0; i < total_no_bonds; i++) { - fprintf(stderr," %d %d %d %d\n",i,bonds[i].type, - bonds[i].members[0], - bonds[i].members[1]); - } - } - - if (total_no_angles > 0) { - fprintf(stderr,"Angle Types\n"); - for (i=0; i < no_angle_types; i++) { - fprintf(stderr," %d %d %d %d %-s %-s %-s\n",i,angletypes[i].types[0], - angletypes[i].types[1],angletypes[i].types[2], - atomtypes[angletypes[i].types[0]].potential, - atomtypes[angletypes[i].types[1]].potential, - atomtypes[angletypes[i].types[2]].potential); - } - - fprintf(stderr,"Angles\n N Type I J K\n"); - for (i=0; i < total_no_angles; i++) { - fprintf(stderr," %d %d %d %d %d\n",i,angles[i].type, - angles[i].members[0], - angles[i].members[1], - angles[i].members[2]); - } - } - - if (total_no_dihedrals > 0) { - fprintf(stderr,"Dihedral Types\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(stderr," %d %d %d %d %d %-s %-s %-s %-s\n",i, - dihedraltypes[i].types[0], - dihedraltypes[i].types[1], - dihedraltypes[i].types[2], - dihedraltypes[i].types[3], - atomtypes[dihedraltypes[i].types[0]].potential, - atomtypes[dihedraltypes[i].types[1]].potential, - atomtypes[dihedraltypes[i].types[2]].potential, - atomtypes[dihedraltypes[i].types[3]].potential); - } - - fprintf(stderr,"Dihedrals\n N Type I J K L\n"); - for (i=0; i < total_no_dihedrals; i++) { - fprintf(stderr," %d %d %d %d %d %d\n",i,dihedrals[i].type, - dihedrals[i].members[0], - dihedrals[i].members[1], - dihedrals[i].members[2], - dihedrals[i].members[3]); - } - } - - if (total_no_oops > 0) { - fprintf(stderr,"Oop Types\n"); - for (i=0; i < no_oop_types; i++) { - fprintf(stderr," %d %d %d %d %d %-s %-s %-s %-s\n",i, - ooptypes[i].types[0], - ooptypes[i].types[1], - ooptypes[i].types[2], - ooptypes[i].types[3], - atomtypes[ooptypes[i].types[0]].potential, - atomtypes[ooptypes[i].types[1]].potential, - atomtypes[ooptypes[i].types[2]].potential, - atomtypes[ooptypes[i].types[3]].potential); - } - - fprintf(stderr,"Oops\n N Type I J K L\n"); - for (i=0; i < total_no_oops; i++) { - fprintf(stderr," %d %d %d %d %d %d\n",i,oops[i].type, - oops[i].members[0], - oops[i].members[1], - oops[i].members[2], - oops[i].members[3]); - } - } - - if ((forcefield > 1) & (total_no_angle_angles > 0)) { - - fprintf(stderr,"Angleangle Types\n"); - for (i=0; i < no_angleangle_types; i++) { - fprintf(stderr," %d %d %d %d %d %-s %-s %-s %-s\n",i, - angleangletypes[i].types[0], - angleangletypes[i].types[1], - angleangletypes[i].types[2], - angleangletypes[i].types[3], - atomtypes[angleangletypes[i].types[0]].potential, - atomtypes[angleangletypes[i].types[1]].potential, - atomtypes[angleangletypes[i].types[2]].potential, - atomtypes[angleangletypes[i].types[3]].potential); - } - fprintf(stderr,"AngleAngles\n N Type I J K L\n"); - for (i=0; i < total_no_angle_angles; i++) { - fprintf(stderr," %d %d %d %d %d %d\n",i,angleangles[i].type, - angleangles[i].members[0], - angleangles[i].members[1], - angleangles[i].members[2], - angleangles[i].members[3]); - } - } -#endif - - if (pflag > 1) { - fprintf(stderr,"\n"); - fprintf(stderr," Number of bonds, types = %7d %3d\n", - total_no_bonds,no_bond_types); - fprintf(stderr," Number of angles, types = %7d %3d\n", - total_no_angles, no_angle_types); - fprintf(stderr," Number of dihedrals, types = %7d %3d\n", - total_no_dihedrals, no_dihedral_types); - fprintf(stderr," Number of out-of-planes, types = %7d %3d\n", - total_no_oops, no_oop_types); - if (forcefield ==2) - fprintf(stderr," Number of Angle Angle Terms, types = %7d %3d\n", - total_no_angle_angles, no_angleangle_types); - } -} - -int count_bonds() -{ - int i,j,n; - - for (n=0,i=0; i < total_no_atoms; i++) { - for (j=0; j < atoms[i].no_connect; j++) { - if (i < atoms[i].conn_no[j]) n++; - } - } - return n; -} - -void build_bonds_list() -{ - int i,j,n; - - for (n=0,i=0; i < total_no_atoms; i++) { - for (j=0; j < atoms[i].no_connect; j++) { - if (i < atoms[i].conn_no[j]) { - bonds[n ].type = 0; - bonds[n ].members[0] = i; - bonds[n++].members[1] = atoms[i].conn_no[j]; - } - } - } -return; -} - -int count_angles() -{ - int i,j,k,n; - - for (n=0,j=0; j < total_no_atoms; j++) { - if (atoms[j].no_connect > 1) { - for (i=0; i < atoms[j].no_connect-1; i++) { - for (k=i+1; k < atoms[j].no_connect; k++) { - n++; - } - } - } - } - return n; -} - -void build_angles_list() -{ - int i,j,k,n; - - for (n=0,j=0; j < total_no_atoms; j++) { - if (atoms[j].no_connect > 1) { - for (i=0; i < atoms[j].no_connect-1; i++) { - for (k=i+1; k < atoms[j].no_connect; k++) { - angles[n ].type = 0; - angles[n ].members[0] = atoms[j].conn_no[i]; - angles[n ].members[1] = j; - angles[n++].members[2] = atoms[j].conn_no[k]; - } - } - } - } -return; -} - -int count_dihedrals() -{ - int i,j,k,l,n; - int ii,kk,ll; - - for (n=0,j=0; j < total_no_atoms; j++) { - if (atoms[j].no_connect > 1) { - for (kk=0; kk < atoms[j].no_connect; kk++) { - k = atoms[j].conn_no[kk]; - if (atoms[k].no_connect > 1) { - if (j < k) { - for (ii=0; ii < atoms[j].no_connect; ii++) { - i = atoms[j].conn_no[ii]; - if (i != k) { - for (ll=0; ll < atoms[k].no_connect; ll++) { - l = atoms[k].conn_no[ll]; - if (l != j) n++; - } - } - } - } - } - } - } - } - return n; -} - -void build_dihedrals_list() -{ - int i,j,k,l,n; - int ii,kk,ll; - - for (n=0,j=0; j < total_no_atoms; j++) { - if (atoms[j].no_connect > 1) { - for (kk=0; kk < atoms[j].no_connect; kk++) { - k = atoms[j].conn_no[kk]; - if (atoms[k].no_connect > 1) { - if (j < k) { - for (ii=0; ii < atoms[j].no_connect; ii++) { - i = atoms[j].conn_no[ii]; - if (i != k) { - for (ll=0; ll < atoms[k].no_connect; ll++) { - l = atoms[k].conn_no[ll]; - if (l != j) { - dihedrals[n ].type = 0; - dihedrals[n ].members[0] = i; - dihedrals[n ].members[1] = j; - dihedrals[n ].members[2] = k; - dihedrals[n++].members[3] = l; - } - } - } - } - } - } - } - } - } - return; -} - -int -count_oops() -{ - int j,n; - - for (n=0,j=0; j < total_no_atoms; j++) { - if (atoms[j].no_connect == 3) n++; - } - return n; -} - -void build_oops_list() -{ - int j,n; - - for (n=0,j=0; j < total_no_atoms; j++) { - - if (atoms[j].no_connect == 3) { - oops[n ].type = 0; - oops[n ].members[0] = atoms[j].conn_no[0]; - oops[n ].members[1] = j; - oops[n ].members[2] = atoms[j].conn_no[1]; - oops[n++].members[3] = atoms[j].conn_no[2]; - } - } - return; -} - -int count_angle_angles() -{ - int num_triples[10] = {0,0,0,4,10,20,35,56,84,120}; - int j,n; - - for (n=0,j=0; j < total_no_atoms; j++) { - n += num_triples[atoms[j].no_connect-1]; - } - return n; -} - -void build_angleangles_list() -{ - int i,j,k,l,nc,n; - - for (n=0,j=0; j < total_no_atoms; j++) { - nc = atoms[j].no_connect; - if (nc > 3) { - for (i=0; i < nc-2; i++) { - for (k=i+1; k < nc-1; k++) { - for (l=k+1; l < nc; l++) { - angleangles[n].type = 0; - angleangles[n ].members[0] = atoms[j].conn_no[i]; - angleangles[n ].members[1] = j; - angleangles[n ].members[2] = atoms[j].conn_no[k]; - angleangles[n++].members[3] = atoms[j].conn_no[l]; - } - } - } - } - } - return; -} - - -void build_atomtypes_list() -{ - int j,k,n,match,atom_type; - - strncpy(atomtypes[0].potential,atoms[0].potential,5); - atoms[0].type = 0; - - atomtypes[0].no_connect = atoms[0].no_connect; - - for (n=1,j=1; j < total_no_atoms; j++) { - match = 0; - k = 0; - while (!match && (k < n)) { - if (strncmp(atomtypes[k].potential,atoms[j].potential,5) == 0) { - match = 1; - atom_type = k; - if (atomtypes[k].no_connect != atoms[j].no_connect) { - if (pflag > 0) fprintf(stderr," WARNING inconsistent # of connects on atom %d type %s\n",j, - atomtypes[k].potential); - } - } - else - k++; - } - if (match == 0) { - atom_type = n; - atomtypes[n].no_connect = atoms[j].no_connect; - strncpy(atomtypes[n++].potential,atoms[j].potential,5); - } - if (n >= MAX_ATOM_TYPES) { - fprintf(stderr,"Too many atom types (> 100) - error\n"); - exit(1); - } - atoms[j].type = atom_type; - } - no_atom_types = n; - return; -} - -void build_bondtypes_list() { - int j,k,n,match,bond_type; - int typei,typej; - - for (n=0,j=0; j < total_no_bonds; j++) { - typei = atoms[bonds[j].members[0]].type; - typej = atoms[bonds[j].members[1]].type; - if (typej < typei) { - swap_ints(&typei,&typej); - swap_ints(&bonds[j].members[0],&bonds[j].members[1]); - } - - match = 0; - k = 0; - while (!match && (k < n)) { - if ((typei == bondtypes[k].types[0]) && - (typej == bondtypes[k].types[1])) { - match = 1; - bond_type = k; - } - else - k++; - } - if (match == 0) { - bond_type = n; - bondtypes[n ].types[0] = typei; - bondtypes[n++].types[1] = typej; - } - if (n >= MAX_BOND_TYPES) { - fprintf(stderr,"Too many bond types (> 200) - error\n"); - exit(1); - } - - bonds[j].type = bond_type; - } - no_bond_types = n; - return; -} - -void build_angletypes_list() -{ - int j,k,n,match,angle_type; - int typei,typej,typek; - - for (n=0,j=0; j < total_no_angles; j++) { - typei = atoms[angles[j].members[0]].type; - typej = atoms[angles[j].members[1]].type; - typek = atoms[angles[j].members[2]].type; - if (typek < typei) { - swap_ints(&typei,&typek); - swap_ints(&angles[j].members[0],&angles[j].members[2]); - } - - match = 0; - k = 0; - while (!match && (k < n)) { - if ((typei == angletypes[k].types[0]) && - (typej == angletypes[k].types[1]) && - (typek == angletypes[k].types[2])) { - match = 1; - angle_type = k; - } - else - k++; - } - if (match == 0) { - angle_type = n; - angletypes[n ].types[0] = typei; - angletypes[n ].types[1] = typej; - angletypes[n++].types[2] = typek; - } - if (n >= MAX_ANGLE_TYPES) { - fprintf(stderr,"Too many angle types (> 300) - error\n"); - exit(1); - } - angles[j].type = angle_type; - } - no_angle_types = n; - return; -} - -void build_dihedraltypes_list() -{ - int j,k,n,match,dihedral_type; - int typei,typej,typek,typel; - - for (n=0,j=0; j < total_no_dihedrals; j++) { - typei = atoms[dihedrals[j].members[0]].type; - typej = atoms[dihedrals[j].members[1]].type; - typek = atoms[dihedrals[j].members[2]].type; - typel = atoms[dihedrals[j].members[3]].type; - if ((typek < typej) || ((typej == typek) && (typel < typei))) { - swap_ints(&typej,&typek); - swap_ints(&dihedrals[j].members[1],&dihedrals[j].members[2]); - swap_ints(&typei,&typel); - swap_ints(&dihedrals[j].members[0],&dihedrals[j].members[3]); - } - - match = 0; - k = 0; - while (!match && (k < n)) { - if ((typei == dihedraltypes[k].types[0]) && - (typej == dihedraltypes[k].types[1]) && - (typek == dihedraltypes[k].types[2]) && - (typel == dihedraltypes[k].types[3])) { - match = 1; - dihedral_type = k; - } - else - k++; - } - if (match == 0) { - dihedral_type = n; - dihedraltypes[n ].types[0] = typei; - dihedraltypes[n ].types[1] = typej; - dihedraltypes[n ].types[2] = typek; - dihedraltypes[n++].types[3] = typel; - } - if (n >= MAX_DIHEDRAL_TYPES) { - fprintf(stderr,"Too many dihedral types (> 400) - error\n"); - exit(1); - } - dihedrals[j].type = dihedral_type; - } - no_dihedral_types = n; - return; -} - -void build_ooptypes_list() -{ - int j,k,n,match,oop_type; - int temp_types[3],temp_pos[3]; - int typei,typej,typek,typel; - - for (n=0,j=0; j < total_no_oops; j++) { - typei = atoms[oops[j].members[0]].type; - typej = atoms[oops[j].members[1]].type; - typek = atoms[oops[j].members[2]].type; - typel = atoms[oops[j].members[3]].type; - temp_types[0] = typei; - temp_types[1] = typek; - temp_types[2] = typel; - - bubble_sort(3,temp_types,temp_pos); - - typei = temp_types[0]; - typek = temp_types[1]; - typel = temp_types[2]; - temp_types[0] = oops[j].members[0]; - temp_types[1] = oops[j].members[2]; - temp_types[2] = oops[j].members[3]; - oops[j].members[0] = temp_types[temp_pos[0]]; - oops[j].members[2] = temp_types[temp_pos[1]]; - oops[j].members[3] = temp_types[temp_pos[2]]; - - match = 0; - k = 0; - while (!match && (k < n)) { - if ((typei == ooptypes[k].types[0]) && - (typej == ooptypes[k].types[1]) && - (typek == ooptypes[k].types[2]) && - (typel == ooptypes[k].types[3])) { - match = 1; - oop_type = k; - } - else - k++; - } - if (match == 0) { - - oop_type = n; - ooptypes[n ].types[0] = typei; - ooptypes[n ].types[1] = typej; - ooptypes[n ].types[2] = typek; - ooptypes[n++].types[3] = typel; - } - if (n >= MAX_OOP_TYPES) { - fprintf(stderr,"Too many oop types (> 400) - error\n"); - exit(1); - } - oops[j].type = oop_type; - } - no_oop_types = n; - return; -} - -void build_angleangletypes_list() -{ - int j,k,n,match,angleangle_type; - int temp_types[3],temp_pos[3]; - int typei,typej,typek,typel; - - for (n=0,j=0; j < total_no_angle_angles; j++) { - - typei = atoms[angleangles[j].members[0]].type; - typej = atoms[angleangles[j].members[1]].type; - typek = atoms[angleangles[j].members[2]].type; - typel = atoms[angleangles[j].members[3]].type; - - temp_types[0] = typei; - temp_types[1] = typek; - temp_types[2] = typel; - - bubble_sort(3,temp_types,temp_pos); - - typei = temp_types[0]; - typek = temp_types[1]; - typel = temp_types[2]; - - temp_types[0] = angleangles[j].members[0]; - temp_types[1] = angleangles[j].members[2]; - temp_types[2] = angleangles[j].members[3]; - - angleangles[j].members[0] = temp_types[temp_pos[0]]; - angleangles[j].members[2] = temp_types[temp_pos[1]]; - angleangles[j].members[3] = temp_types[temp_pos[2]]; - - match = 0; - k = 0; - while (!match && (k < n)) { - if ((typei == angleangletypes[k].types[0]) && - (typej == angleangletypes[k].types[1]) && - (typek == angleangletypes[k].types[2]) && - (typel == angleangletypes[k].types[3])) { - match = 1; - angleangle_type = k; - } - else - k++; - } - if (match == 0) { - angleangle_type = n; - angleangletypes[n ].types[0] = typei; - angleangletypes[n ].types[1] = typej; - angleangletypes[n ].types[2] = typek; - angleangletypes[n++].types[3] = typel; - } - - if (n >= MAX_ANGLEANGLE_TYPES) { - fprintf(stderr,"Too many angleangle types (> 400) - error\n"); - exit(1); - } - angleangles[j].type = angleangle_type; - } - no_angleangle_types = n; - return; -} - -void swap_ints(int *i, int *j) -{ - int temp; - - temp = *i; - *i = *j; - *j = temp; - - return; -} - -void bubble_sort(int n, int *val, int *pos) -{ - int i,j; - - for (i=0; i < n; i++) pos[i] = i; - for (i=0; i < n-1; i++) { - for (j=1; j < n; j++) { - if (val[j] < val[i]) { - swap_ints(&val[i],&val[j]); - swap_ints(&pos[i],&pos[j]); - } - } - } -} - +#include "Msi2LMP2.h" + +int count_bonds(); +int count_angles(); +int count_dihedrals(); +int count_oops(); +int count_angle_angles(); + +void build_bonds_list(); +void build_angles_list(); +void build_dihedrals_list(); +void build_oops_list(); +void build_angleangles_list(); + +void build_atomtypes_list(); +void build_bondtypes_list(); +void build_angletypes_list(); +void build_dihedraltypes_list(); +void build_ooptypes_list(); +void build_angleangletypes_list(); + +void swap_ints(int *,int *); +void bubble_sort(int, int *, int *); + +/*#define PRINT_LISTS */ + +void MakeLists() +{ + + total_no_bonds = count_bonds(); + total_no_angles = count_angles(); + total_no_dihedrals = count_dihedrals(); + total_no_oops = count_oops(); + total_no_angle_angles = count_angle_angles(); + + + atomtypes = (struct AtomTypeList *)calloc(MAX_ATOM_TYPES, + sizeof(struct AtomTypeList)); + if (atomtypes == NULL) { + fprintf(stderr,"Trouble allocating memory for atomtypes list - Exiting\n"); + exit(1); + } + + build_atomtypes_list(); + + + if (total_no_bonds > 0) { + bonds = (struct BondList *)calloc(total_no_bonds,sizeof(struct BondList)); + if (bonds == NULL) { + fprintf(stderr,"Trouble allocating memory for bonds list - Exiting\n"); + exit(1); + } + + build_bonds_list(); + + bondtypes = (struct BondTypeList *)calloc(MAX_BOND_TYPES, + sizeof(struct BondTypeList)); + if (bondtypes == NULL) { + fprintf(stderr,"Trouble allocating memory for bondtypes list - Exiting\n"); + exit(1); + } + + build_bondtypes_list(); + } + + if (total_no_angles > 0) { + angles = (struct AngleList *)calloc(total_no_angles, + sizeof(struct AngleList)); + if (angles == NULL) { + fprintf(stderr,"Trouble allocating memory for angles list - Exiting\n"); + exit(1); + } + + build_angles_list(); + + angletypes = (struct AngleTypeList *)calloc(MAX_ANGLE_TYPES, + sizeof(struct AngleTypeList)); + if (angletypes == NULL) { + fprintf(stderr,"Trouble allocating memory for angletypes list - Exiting\n"); + exit(1); + } + + build_angletypes_list(); + } + + if (total_no_dihedrals > 0) { + + dihedrals = (struct DihedralList *)calloc(total_no_dihedrals, + sizeof(struct DihedralList)); + if (dihedrals == NULL) { + fprintf(stderr,"Trouble allocating memory for dihedrals list - Exiting\n"); + exit(1); + } + + build_dihedrals_list(); + + dihedraltypes = (struct DihedralTypeList *)calloc(MAX_DIHEDRAL_TYPES, + sizeof(struct DihedralTypeList)); + if (dihedraltypes == NULL) { + fprintf(stderr,"Trouble allocating memory for dihedraltypes list - Exiting\n"); + exit(1); + } + + build_dihedraltypes_list(); + } + + if (total_no_oops > 0) { + oops = (struct OOPList *)calloc(total_no_oops,sizeof(struct OOPList)); + if (oops == NULL) { + fprintf(stderr,"Trouble allocating memory for oops list - Exiting\n"); + exit(1); + } + build_oops_list(); + + ooptypes = (struct OOPTypeList *)calloc(MAX_OOP_TYPES, + sizeof(struct OOPTypeList)); + if (ooptypes == NULL) { + fprintf(stderr,"Trouble allocating memory for ooptypes list - Exiting\n"); + exit(1); + } + + build_ooptypes_list(); + } + + if ((forcefield > 1) & (total_no_angle_angles > 0)) { + + angleangles = (struct AngleAngleList *)calloc(total_no_angle_angles, + sizeof(struct AngleAngleList)); + if (angleangles == NULL) { + fprintf(stderr,"Trouble allocating memory for angleangles list - Exiting\n"); + exit(1); + } + build_angleangles_list(); + + angleangletypes = (struct AngleAngleTypeList *)calloc(MAX_ANGLEANGLE_TYPES, + sizeof(struct AngleAngleTypeList)); + if (angleangletypes == NULL) { + fprintf(stderr,"Trouble allocating memory for angleangletypes list - Exiting\n"); + exit(1); + } + build_angleangletypes_list(); + } + + +#ifdef PRINT_LISTS + fprintf(stderr,"Atom Types\n N Potential\n"); + for (i=0; i < no_atom_types; i++) { + fprintf(stderr," %d %s\n",i,atomtypes[i].potential); + } + + fprintf(stderr,"Atoms\n"); + for (i=0; i < total_no_atoms; i++) { + fprintf(stderr,"Atom %3d %2d %-5s %7.4f %9.6f %9.6f %9.6f\n", + i,atoms[i].type,atoms[i].potential,atoms[i].q, + atoms[i].x[0],atoms[i].x[1],atoms[i].x[2]); + } + + if (total_no_bonds > 0) { + fprintf(stderr,"Bond Types\n"); + for (i=0; i < no_bond_types; i++) { + fprintf(stderr," %d %d %d %-s %-s\n",i,bondtypes[i].types[0], + bondtypes[i].types[1], + atomtypes[bondtypes[i].types[0]].potential, + atomtypes[bondtypes[i].types[1]].potential); + } + + fprintf(stderr,"Bonds\n N Type I J\n"); + for (i=0; i < total_no_bonds; i++) { + fprintf(stderr," %d %d %d %d\n",i,bonds[i].type, + bonds[i].members[0], + bonds[i].members[1]); + } + } + + if (total_no_angles > 0) { + fprintf(stderr,"Angle Types\n"); + for (i=0; i < no_angle_types; i++) { + fprintf(stderr," %d %d %d %d %-s %-s %-s\n",i,angletypes[i].types[0], + angletypes[i].types[1],angletypes[i].types[2], + atomtypes[angletypes[i].types[0]].potential, + atomtypes[angletypes[i].types[1]].potential, + atomtypes[angletypes[i].types[2]].potential); + } + + fprintf(stderr,"Angles\n N Type I J K\n"); + for (i=0; i < total_no_angles; i++) { + fprintf(stderr," %d %d %d %d %d\n",i,angles[i].type, + angles[i].members[0], + angles[i].members[1], + angles[i].members[2]); + } + } + + if (total_no_dihedrals > 0) { + fprintf(stderr,"Dihedral Types\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(stderr," %d %d %d %d %d %-s %-s %-s %-s\n",i, + dihedraltypes[i].types[0], + dihedraltypes[i].types[1], + dihedraltypes[i].types[2], + dihedraltypes[i].types[3], + atomtypes[dihedraltypes[i].types[0]].potential, + atomtypes[dihedraltypes[i].types[1]].potential, + atomtypes[dihedraltypes[i].types[2]].potential, + atomtypes[dihedraltypes[i].types[3]].potential); + } + + fprintf(stderr,"Dihedrals\n N Type I J K L\n"); + for (i=0; i < total_no_dihedrals; i++) { + fprintf(stderr," %d %d %d %d %d %d\n",i,dihedrals[i].type, + dihedrals[i].members[0], + dihedrals[i].members[1], + dihedrals[i].members[2], + dihedrals[i].members[3]); + } + } + + if (total_no_oops > 0) { + fprintf(stderr,"Oop Types\n"); + for (i=0; i < no_oop_types; i++) { + fprintf(stderr," %d %d %d %d %d %-s %-s %-s %-s\n",i, + ooptypes[i].types[0], + ooptypes[i].types[1], + ooptypes[i].types[2], + ooptypes[i].types[3], + atomtypes[ooptypes[i].types[0]].potential, + atomtypes[ooptypes[i].types[1]].potential, + atomtypes[ooptypes[i].types[2]].potential, + atomtypes[ooptypes[i].types[3]].potential); + } + + fprintf(stderr,"Oops\n N Type I J K L\n"); + for (i=0; i < total_no_oops; i++) { + fprintf(stderr," %d %d %d %d %d %d\n",i,oops[i].type, + oops[i].members[0], + oops[i].members[1], + oops[i].members[2], + oops[i].members[3]); + } + } + + if ((forcefield > 1) & (total_no_angle_angles > 0)) { + + fprintf(stderr,"Angleangle Types\n"); + for (i=0; i < no_angleangle_types; i++) { + fprintf(stderr," %d %d %d %d %d %-s %-s %-s %-s\n",i, + angleangletypes[i].types[0], + angleangletypes[i].types[1], + angleangletypes[i].types[2], + angleangletypes[i].types[3], + atomtypes[angleangletypes[i].types[0]].potential, + atomtypes[angleangletypes[i].types[1]].potential, + atomtypes[angleangletypes[i].types[2]].potential, + atomtypes[angleangletypes[i].types[3]].potential); + } + fprintf(stderr,"AngleAngles\n N Type I J K L\n"); + for (i=0; i < total_no_angle_angles; i++) { + fprintf(stderr," %d %d %d %d %d %d\n",i,angleangles[i].type, + angleangles[i].members[0], + angleangles[i].members[1], + angleangles[i].members[2], + angleangles[i].members[3]); + } + } +#endif + + if (pflag > 1) { + fprintf(stderr,"\n"); + fprintf(stderr," Number of bonds, types = %7d %3d\n", + total_no_bonds,no_bond_types); + fprintf(stderr," Number of angles, types = %7d %3d\n", + total_no_angles, no_angle_types); + fprintf(stderr," Number of dihedrals, types = %7d %3d\n", + total_no_dihedrals, no_dihedral_types); + fprintf(stderr," Number of out-of-planes, types = %7d %3d\n", + total_no_oops, no_oop_types); + if (forcefield ==2) + fprintf(stderr," Number of Angle Angle Terms, types = %7d %3d\n", + total_no_angle_angles, no_angleangle_types); + } +} + +int count_bonds() +{ + int i,j,n; + + for (n=0,i=0; i < total_no_atoms; i++) { + for (j=0; j < atoms[i].no_connect; j++) { + if (i < atoms[i].conn_no[j]) n++; + } + } + return n; +} + +void build_bonds_list() +{ + int i,j,n; + + for (n=0,i=0; i < total_no_atoms; i++) { + for (j=0; j < atoms[i].no_connect; j++) { + if (i < atoms[i].conn_no[j]) { + bonds[n ].type = 0; + bonds[n ].members[0] = i; + bonds[n++].members[1] = atoms[i].conn_no[j]; + } + } + } +return; +} + +int count_angles() +{ + int i,j,k,n; + + for (n=0,j=0; j < total_no_atoms; j++) { + if (atoms[j].no_connect > 1) { + for (i=0; i < atoms[j].no_connect-1; i++) { + for (k=i+1; k < atoms[j].no_connect; k++) { + n++; + } + } + } + } + return n; +} + +void build_angles_list() +{ + int i,j,k,n; + + for (n=0,j=0; j < total_no_atoms; j++) { + if (atoms[j].no_connect > 1) { + for (i=0; i < atoms[j].no_connect-1; i++) { + for (k=i+1; k < atoms[j].no_connect; k++) { + angles[n ].type = 0; + angles[n ].members[0] = atoms[j].conn_no[i]; + angles[n ].members[1] = j; + angles[n++].members[2] = atoms[j].conn_no[k]; + } + } + } + } +return; +} + +int count_dihedrals() +{ + int i,j,k,l,n; + int ii,kk,ll; + + for (n=0,j=0; j < total_no_atoms; j++) { + if (atoms[j].no_connect > 1) { + for (kk=0; kk < atoms[j].no_connect; kk++) { + k = atoms[j].conn_no[kk]; + if (atoms[k].no_connect > 1) { + if (j < k) { + for (ii=0; ii < atoms[j].no_connect; ii++) { + i = atoms[j].conn_no[ii]; + if (i != k) { + for (ll=0; ll < atoms[k].no_connect; ll++) { + l = atoms[k].conn_no[ll]; + if (l != j) n++; + } + } + } + } + } + } + } + } + return n; +} + +void build_dihedrals_list() +{ + int i,j,k,l,n; + int ii,kk,ll; + + for (n=0,j=0; j < total_no_atoms; j++) { + if (atoms[j].no_connect > 1) { + for (kk=0; kk < atoms[j].no_connect; kk++) { + k = atoms[j].conn_no[kk]; + if (atoms[k].no_connect > 1) { + if (j < k) { + for (ii=0; ii < atoms[j].no_connect; ii++) { + i = atoms[j].conn_no[ii]; + if (i != k) { + for (ll=0; ll < atoms[k].no_connect; ll++) { + l = atoms[k].conn_no[ll]; + if (l != j) { + dihedrals[n ].type = 0; + dihedrals[n ].members[0] = i; + dihedrals[n ].members[1] = j; + dihedrals[n ].members[2] = k; + dihedrals[n++].members[3] = l; + } + } + } + } + } + } + } + } + } + return; +} + +int +count_oops() +{ + int j,n; + + for (n=0,j=0; j < total_no_atoms; j++) { + if (atoms[j].no_connect == 3) n++; + } + return n; +} + +void build_oops_list() +{ + int j,n; + + for (n=0,j=0; j < total_no_atoms; j++) { + + if (atoms[j].no_connect == 3) { + oops[n ].type = 0; + oops[n ].members[0] = atoms[j].conn_no[0]; + oops[n ].members[1] = j; + oops[n ].members[2] = atoms[j].conn_no[1]; + oops[n++].members[3] = atoms[j].conn_no[2]; + } + } + return; +} + +int count_angle_angles() +{ + int num_triples[10] = {0,0,0,4,10,20,35,56,84,120}; + int j,n; + + for (n=0,j=0; j < total_no_atoms; j++) { + n += num_triples[atoms[j].no_connect-1]; + } + return n; +} + +void build_angleangles_list() +{ + int i,j,k,l,nc,n; + + for (n=0,j=0; j < total_no_atoms; j++) { + nc = atoms[j].no_connect; + if (nc > 3) { + for (i=0; i < nc-2; i++) { + for (k=i+1; k < nc-1; k++) { + for (l=k+1; l < nc; l++) { + angleangles[n].type = 0; + angleangles[n ].members[0] = atoms[j].conn_no[i]; + angleangles[n ].members[1] = j; + angleangles[n ].members[2] = atoms[j].conn_no[k]; + angleangles[n++].members[3] = atoms[j].conn_no[l]; + } + } + } + } + } + return; +} + + +void build_atomtypes_list() +{ + int j,k,n,match,atom_type; + + strncpy(atomtypes[0].potential,atoms[0].potential,5); + atoms[0].type = 0; + + atomtypes[0].no_connect = atoms[0].no_connect; + + for (n=1,j=1; j < total_no_atoms; j++) { + match = 0; + k = 0; + while (!match && (k < n)) { + if (strncmp(atomtypes[k].potential,atoms[j].potential,5) == 0) { + match = 1; + atom_type = k; + if (atomtypes[k].no_connect != atoms[j].no_connect) { + if (pflag > 0) fprintf(stderr," WARNING inconsistent # of connects on atom %d type %s\n",j, + atomtypes[k].potential); + } + } + else + k++; + } + if (match == 0) { + atom_type = n; + atomtypes[n].no_connect = atoms[j].no_connect; + strncpy(atomtypes[n++].potential,atoms[j].potential,5); + } + if (n >= MAX_ATOM_TYPES) { + fprintf(stderr,"Too many atom types (> 100) - error\n"); + exit(1); + } + atoms[j].type = atom_type; + } + no_atom_types = n; + return; +} + +void build_bondtypes_list() { + int j,k,n,match,bond_type; + int typei,typej; + + for (n=0,j=0; j < total_no_bonds; j++) { + typei = atoms[bonds[j].members[0]].type; + typej = atoms[bonds[j].members[1]].type; + if (typej < typei) { + swap_ints(&typei,&typej); + swap_ints(&bonds[j].members[0],&bonds[j].members[1]); + } + + match = 0; + k = 0; + while (!match && (k < n)) { + if ((typei == bondtypes[k].types[0]) && + (typej == bondtypes[k].types[1])) { + match = 1; + bond_type = k; + } + else + k++; + } + if (match == 0) { + bond_type = n; + bondtypes[n ].types[0] = typei; + bondtypes[n++].types[1] = typej; + } + if (n >= MAX_BOND_TYPES) { + fprintf(stderr,"Too many bond types (> 200) - error\n"); + exit(1); + } + + bonds[j].type = bond_type; + } + no_bond_types = n; + return; +} + +void build_angletypes_list() +{ + int j,k,n,match,angle_type; + int typei,typej,typek; + + for (n=0,j=0; j < total_no_angles; j++) { + typei = atoms[angles[j].members[0]].type; + typej = atoms[angles[j].members[1]].type; + typek = atoms[angles[j].members[2]].type; + if (typek < typei) { + swap_ints(&typei,&typek); + swap_ints(&angles[j].members[0],&angles[j].members[2]); + } + + match = 0; + k = 0; + while (!match && (k < n)) { + if ((typei == angletypes[k].types[0]) && + (typej == angletypes[k].types[1]) && + (typek == angletypes[k].types[2])) { + match = 1; + angle_type = k; + } + else + k++; + } + if (match == 0) { + angle_type = n; + angletypes[n ].types[0] = typei; + angletypes[n ].types[1] = typej; + angletypes[n++].types[2] = typek; + } + if (n >= MAX_ANGLE_TYPES) { + fprintf(stderr,"Too many angle types (> 300) - error\n"); + exit(1); + } + angles[j].type = angle_type; + } + no_angle_types = n; + return; +} + +void build_dihedraltypes_list() +{ + int j,k,n,match,dihedral_type; + int typei,typej,typek,typel; + + for (n=0,j=0; j < total_no_dihedrals; j++) { + typei = atoms[dihedrals[j].members[0]].type; + typej = atoms[dihedrals[j].members[1]].type; + typek = atoms[dihedrals[j].members[2]].type; + typel = atoms[dihedrals[j].members[3]].type; + if ((typek < typej) || ((typej == typek) && (typel < typei))) { + swap_ints(&typej,&typek); + swap_ints(&dihedrals[j].members[1],&dihedrals[j].members[2]); + swap_ints(&typei,&typel); + swap_ints(&dihedrals[j].members[0],&dihedrals[j].members[3]); + } + + match = 0; + k = 0; + while (!match && (k < n)) { + if ((typei == dihedraltypes[k].types[0]) && + (typej == dihedraltypes[k].types[1]) && + (typek == dihedraltypes[k].types[2]) && + (typel == dihedraltypes[k].types[3])) { + match = 1; + dihedral_type = k; + } + else + k++; + } + if (match == 0) { + dihedral_type = n; + dihedraltypes[n ].types[0] = typei; + dihedraltypes[n ].types[1] = typej; + dihedraltypes[n ].types[2] = typek; + dihedraltypes[n++].types[3] = typel; + } + if (n >= MAX_DIHEDRAL_TYPES) { + fprintf(stderr,"Too many dihedral types (> 400) - error\n"); + exit(1); + } + dihedrals[j].type = dihedral_type; + } + no_dihedral_types = n; + return; +} + +void build_ooptypes_list() +{ + int j,k,n,match,oop_type; + int temp_types[3],temp_pos[3]; + int typei,typej,typek,typel; + + for (n=0,j=0; j < total_no_oops; j++) { + typei = atoms[oops[j].members[0]].type; + typej = atoms[oops[j].members[1]].type; + typek = atoms[oops[j].members[2]].type; + typel = atoms[oops[j].members[3]].type; + temp_types[0] = typei; + temp_types[1] = typek; + temp_types[2] = typel; + + bubble_sort(3,temp_types,temp_pos); + + typei = temp_types[0]; + typek = temp_types[1]; + typel = temp_types[2]; + temp_types[0] = oops[j].members[0]; + temp_types[1] = oops[j].members[2]; + temp_types[2] = oops[j].members[3]; + oops[j].members[0] = temp_types[temp_pos[0]]; + oops[j].members[2] = temp_types[temp_pos[1]]; + oops[j].members[3] = temp_types[temp_pos[2]]; + + match = 0; + k = 0; + while (!match && (k < n)) { + if ((typei == ooptypes[k].types[0]) && + (typej == ooptypes[k].types[1]) && + (typek == ooptypes[k].types[2]) && + (typel == ooptypes[k].types[3])) { + match = 1; + oop_type = k; + } + else + k++; + } + if (match == 0) { + + oop_type = n; + ooptypes[n ].types[0] = typei; + ooptypes[n ].types[1] = typej; + ooptypes[n ].types[2] = typek; + ooptypes[n++].types[3] = typel; + } + if (n >= MAX_OOP_TYPES) { + fprintf(stderr,"Too many oop types (> 400) - error\n"); + exit(1); + } + oops[j].type = oop_type; + } + no_oop_types = n; + return; +} + +void build_angleangletypes_list() +{ + int j,k,n,match,angleangle_type; + int temp_types[3],temp_pos[3]; + int typei,typej,typek,typel; + + for (n=0,j=0; j < total_no_angle_angles; j++) { + + typei = atoms[angleangles[j].members[0]].type; + typej = atoms[angleangles[j].members[1]].type; + typek = atoms[angleangles[j].members[2]].type; + typel = atoms[angleangles[j].members[3]].type; + + temp_types[0] = typei; + temp_types[1] = typek; + temp_types[2] = typel; + + bubble_sort(3,temp_types,temp_pos); + + typei = temp_types[0]; + typek = temp_types[1]; + typel = temp_types[2]; + + temp_types[0] = angleangles[j].members[0]; + temp_types[1] = angleangles[j].members[2]; + temp_types[2] = angleangles[j].members[3]; + + angleangles[j].members[0] = temp_types[temp_pos[0]]; + angleangles[j].members[2] = temp_types[temp_pos[1]]; + angleangles[j].members[3] = temp_types[temp_pos[2]]; + + match = 0; + k = 0; + while (!match && (k < n)) { + if ((typei == angleangletypes[k].types[0]) && + (typej == angleangletypes[k].types[1]) && + (typek == angleangletypes[k].types[2]) && + (typel == angleangletypes[k].types[3])) { + match = 1; + angleangle_type = k; + } + else + k++; + } + if (match == 0) { + angleangle_type = n; + angleangletypes[n ].types[0] = typei; + angleangletypes[n ].types[1] = typej; + angleangletypes[n ].types[2] = typek; + angleangletypes[n++].types[3] = typel; + } + + if (n >= MAX_ANGLEANGLE_TYPES) { + fprintf(stderr,"Too many angleangle types (> 400) - error\n"); + exit(1); + } + angleangles[j].type = angleangle_type; + } + no_angleangle_types = n; + return; +} + +void swap_ints(int *i, int *j) +{ + int temp; + + temp = *i; + *i = *j; + *j = temp; + + return; +} + +void bubble_sort(int n, int *val, int *pos) +{ + int i,j; + + for (i=0; i < n; i++) pos[i] = i; + for (i=0; i < n-1; i++) { + for (j=1; j < n; j++) { + if (val[j] < val[i]) { + swap_ints(&val[i],&val[j]); + swap_ints(&pos[i],&pos[j]); + } + } + } +} + diff --git a/tools/msi2lmp/src/ReadCarFile.c b/tools/msi2lmp/src/ReadCarFile.c index 51bc707f71..7adfe8d82e 100644 --- a/tools/msi2lmp/src/ReadCarFile.c +++ b/tools/msi2lmp/src/ReadCarFile.c @@ -1,171 +1,171 @@ -/* -* This function opens the .car file and extracts coordinate information -* into the atoms Atom structure -*/ - -#include "Msi2LMP2.h" - -void ReadCarFile(void) -{ - char line[MAX_LINE_LENGTH]; /* Stores lines as they are read in */ - int k,m,n; /* counters */ - int skip; /* lines to skip at beginning of file */ - double lowest, highest; /* temp coordinate finding variables */ - double total_q; - -/* Open .car file for reading */ - - sprintf(line,"%s.car",rootname); - if (pflag > 0) fprintf(stderr," Reading car file: %s\n",line); - if( (CarF = fopen(line,"r")) == NULL ) { - fprintf(stderr,"Cannot open %s\n",line); - exit(2); - } - -/* Determine Number of molecules & atoms */ - - rewind(CarF); - no_molecules = -1; /* Set to -1 because counter will be incremented an - extra time at the end of the file */ - - fgets(line,MAX_LINE_LENGTH,CarF); /* Read header line */ - -/* Check for periodicity, if present, read cell constants */ - - if( strncmp(fgets(line,MAX_LINE_LENGTH,CarF),"PBC=ON",6) == 0) { - periodic = 1; - skip = 5; /* Data starts 5 lines from beginning of file */ - fgets(line,MAX_LINE_LENGTH,CarF); /* Comment line */ - fgets(line,MAX_LINE_LENGTH,CarF); /* Date stamp */ - fscanf(CarF,"%*s %lf %lf %lf %lf %lf %lf %*s", - &pbc[0],&pbc[1],&pbc[2],&pbc[3],&pbc[4],&pbc[5]); - if(pbc[3] != 90.0 || pbc[4] != 90.0 || pbc[5] != 90.0) { - fprintf(stderr,"The system is not rectangular- LAMMPS can't handle it!!"); - exit(2); - } - } - else { - periodic = 0; - skip = 4; - if (pflag > 1) { - fprintf(stderr," %s is not a periodic system\n", rootname); - fprintf(stderr," Assigning cell parameters based on coordinates\n"); - } - fgets(line,MAX_LINE_LENGTH, CarF); /* Comment line */ - fgets(line,MAX_LINE_LENGTH, CarF); /* Date Stamp */ - } - -/* First pass through file -- Count molecules */ - - while(fgets(line,MAX_LINE_LENGTH,CarF) != NULL ) - if( strncmp(line,"end",3) == 0 ) - no_molecules++; - -/* Allocate space to keep track of the number of atoms within a molecule */ - - no_atoms = (int *) calloc(no_molecules,sizeof(int)); - if ( no_atoms == NULL ) { - fprintf(stderr,"Could not allocate memory for no_atoms\n"); - exit(2); - } - -/* Second pass through file -- Count atoms */ - - rewind(CarF); - for(n=0; n < skip; n++) /* Skip beginning lines */ - fgets(line,MAX_LINE_LENGTH,CarF); - - for(n=0; n < no_molecules; n++) - while( strncmp(fgets(line,MAX_LINE_LENGTH,CarF),"end",3) ) - no_atoms[n]++; - - for( total_no_atoms=0, n=0; n < no_molecules; n++ ) - total_no_atoms += no_atoms[n]; - - molecule = (struct MoleculeList *) calloc(no_molecules, - sizeof(struct MoleculeList)); - if (molecule == NULL) { - fprintf(stderr,"Unable to allocate memory for molecule structure\n"); - exit(2); - } - molecule[0].start = 0; - molecule[0].end = no_atoms[0]; - for (n=1; n < no_molecules; n++) { - molecule[n].start = molecule[n-1].end; - molecule[n].end = molecule[n].start + no_atoms[n]; - } - -/* Allocate space for atoms Atom structures */ - - atoms = (struct Atom *) calloc(total_no_atoms,sizeof(struct Atom)); - if( atoms == NULL ) { - fprintf(stderr,"Could not allocate memory for AtomList\n"); - exit(2); - } - -/* Third pass through file -- Read+Parse Car File */ - - rewind(CarF); - for(n=0; n < skip; n++) - fgets(line,MAX_LINE_LENGTH,CarF); - - for(m=0; m < no_molecules; m++) { - for(k=molecule[m].start; k < - molecule[m].end; k++) { - - atoms[k].molecule = m; - atoms[k].no = k; - - fscanf(CarF,"%s %lf %lf %lf %*s %*s %s %s %f", - atoms[k].name, - &(atoms[k].x[0]), - &(atoms[k].x[1]), - &(atoms[k].x[2]), - atoms[k].potential, - atoms[k].element, - &(atoms[k].q)); - } - fgets(line,MAX_LINE_LENGTH,CarF); - fgets(line,MAX_LINE_LENGTH,CarF); - - } /* End m (molecule) loop */ - - for (total_q=0.0,k=0; k < total_no_atoms; k++) - total_q += atoms[k].q; - - if (pflag > 1) { - fprintf(stderr," There are %d atoms in %d molecules in this file\n", - total_no_atoms,no_molecules); - fprintf(stderr," The total charge in the system is %7.3f.\n\n",total_q); - } - -/* Search coordinates to find lowest and highest for x, y, and z */ - - if (periodic == 0) { - for ( k = 0; k < 3; k++) { - lowest = atoms[0].x[k]; - highest = atoms[0].x[k]; - - for ( m = 1; m < total_no_atoms; m++) { - if (atoms[m].x[k] < lowest) lowest = atoms[m].x[k]; - if (atoms[m].x[k] > highest) highest = atoms[m].x[k]; - } - pbc[k] = lowest; - pbc[k+3] = highest; - } - } - else { - for (k=0; k < 3; k++) { - pbc[k+3] = pbc[k]; - pbc[k] = 0.0; - } - } - -/* Close .car file */ - - if (fclose(CarF) !=0) { - fprintf(stderr,"Error closing %s.car\n", rootname); - exit(1); - } -} -/* End ReadCarFile() */ +/* +* This function opens the .car file and extracts coordinate information +* into the atoms Atom structure +*/ + +#include "Msi2LMP2.h" + +void ReadCarFile(void) +{ + char line[MAX_LINE_LENGTH]; /* Stores lines as they are read in */ + int k,m,n; /* counters */ + int skip; /* lines to skip at beginning of file */ + double lowest, highest; /* temp coordinate finding variables */ + double total_q; + +/* Open .car file for reading */ + + sprintf(line,"%s.car",rootname); + if (pflag > 0) fprintf(stderr," Reading car file: %s\n",line); + if( (CarF = fopen(line,"r")) == NULL ) { + fprintf(stderr,"Cannot open %s\n",line); + exit(2); + } + +/* Determine Number of molecules & atoms */ + + rewind(CarF); + no_molecules = -1; /* Set to -1 because counter will be incremented an + extra time at the end of the file */ + + fgets(line,MAX_LINE_LENGTH,CarF); /* Read header line */ + +/* Check for periodicity, if present, read cell constants */ + + if( strncmp(fgets(line,MAX_LINE_LENGTH,CarF),"PBC=ON",6) == 0) { + periodic = 1; + skip = 5; /* Data starts 5 lines from beginning of file */ + fgets(line,MAX_LINE_LENGTH,CarF); /* Comment line */ + fgets(line,MAX_LINE_LENGTH,CarF); /* Date stamp */ + fscanf(CarF,"%*s %lf %lf %lf %lf %lf %lf %*s", + &pbc[0],&pbc[1],&pbc[2],&pbc[3],&pbc[4],&pbc[5]); + if(pbc[3] != 90.0 || pbc[4] != 90.0 || pbc[5] != 90.0) { + fprintf(stderr,"The system is not rectangular- LAMMPS can't handle it!!"); + exit(2); + } + } + else { + periodic = 0; + skip = 4; + if (pflag > 1) { + fprintf(stderr," %s is not a periodic system\n", rootname); + fprintf(stderr," Assigning cell parameters based on coordinates\n"); + } + fgets(line,MAX_LINE_LENGTH, CarF); /* Comment line */ + fgets(line,MAX_LINE_LENGTH, CarF); /* Date Stamp */ + } + +/* First pass through file -- Count molecules */ + + while(fgets(line,MAX_LINE_LENGTH,CarF) != NULL ) + if( strncmp(line,"end",3) == 0 ) + no_molecules++; + +/* Allocate space to keep track of the number of atoms within a molecule */ + + no_atoms = (int *) calloc(no_molecules,sizeof(int)); + if ( no_atoms == NULL ) { + fprintf(stderr,"Could not allocate memory for no_atoms\n"); + exit(2); + } + +/* Second pass through file -- Count atoms */ + + rewind(CarF); + for(n=0; n < skip; n++) /* Skip beginning lines */ + fgets(line,MAX_LINE_LENGTH,CarF); + + for(n=0; n < no_molecules; n++) + while( strncmp(fgets(line,MAX_LINE_LENGTH,CarF),"end",3) ) + no_atoms[n]++; + + for( total_no_atoms=0, n=0; n < no_molecules; n++ ) + total_no_atoms += no_atoms[n]; + + molecule = (struct MoleculeList *) calloc(no_molecules, + sizeof(struct MoleculeList)); + if (molecule == NULL) { + fprintf(stderr,"Unable to allocate memory for molecule structure\n"); + exit(2); + } + molecule[0].start = 0; + molecule[0].end = no_atoms[0]; + for (n=1; n < no_molecules; n++) { + molecule[n].start = molecule[n-1].end; + molecule[n].end = molecule[n].start + no_atoms[n]; + } + +/* Allocate space for atoms Atom structures */ + + atoms = (struct Atom *) calloc(total_no_atoms,sizeof(struct Atom)); + if( atoms == NULL ) { + fprintf(stderr,"Could not allocate memory for AtomList\n"); + exit(2); + } + +/* Third pass through file -- Read+Parse Car File */ + + rewind(CarF); + for(n=0; n < skip; n++) + fgets(line,MAX_LINE_LENGTH,CarF); + + for(m=0; m < no_molecules; m++) { + for(k=molecule[m].start; k < + molecule[m].end; k++) { + + atoms[k].molecule = m; + atoms[k].no = k; + + fscanf(CarF,"%s %lf %lf %lf %*s %*s %s %s %f", + atoms[k].name, + &(atoms[k].x[0]), + &(atoms[k].x[1]), + &(atoms[k].x[2]), + atoms[k].potential, + atoms[k].element, + &(atoms[k].q)); + } + fgets(line,MAX_LINE_LENGTH,CarF); + fgets(line,MAX_LINE_LENGTH,CarF); + + } /* End m (molecule) loop */ + + for (total_q=0.0,k=0; k < total_no_atoms; k++) + total_q += atoms[k].q; + + if (pflag > 1) { + fprintf(stderr," There are %d atoms in %d molecules in this file\n", + total_no_atoms,no_molecules); + fprintf(stderr," The total charge in the system is %7.3f.\n\n",total_q); + } + +/* Search coordinates to find lowest and highest for x, y, and z */ + + if (periodic == 0) { + for ( k = 0; k < 3; k++) { + lowest = atoms[0].x[k]; + highest = atoms[0].x[k]; + + for ( m = 1; m < total_no_atoms; m++) { + if (atoms[m].x[k] < lowest) lowest = atoms[m].x[k]; + if (atoms[m].x[k] > highest) highest = atoms[m].x[k]; + } + pbc[k] = lowest; + pbc[k+3] = highest; + } + } + else { + for (k=0; k < 3; k++) { + pbc[k+3] = pbc[k]; + pbc[k] = 0.0; + } + } + +/* Close .car file */ + + if (fclose(CarF) !=0) { + fprintf(stderr,"Error closing %s.car\n", rootname); + exit(1); + } +} +/* End ReadCarFile() */ diff --git a/tools/msi2lmp/src/ReadMdfFile.c b/tools/msi2lmp/src/ReadMdfFile.c index 9302dd512d..b073105892 100644 --- a/tools/msi2lmp/src/ReadMdfFile.c +++ b/tools/msi2lmp/src/ReadMdfFile.c @@ -1,425 +1,425 @@ -/****************************** -* -* This function opens the .mdf file and extracts connectivity information -* into the atoms Atom structure. It also updates the charge from the .car -* file because the charge in the .mdf file has more significant figures. -* -*/ - -#include "Msi2LMP2.h" - -/* Prototype for function to process a single atom - Returns int that flags end of data file */ - -int get_molecule(char line[], int connect_col_no, - int q_col_no, int *counter); - -/* Prototype for function that takes connectivty record as stated in - .mdf file and fills in any default values */ -void MakeConnectFullForm(int *counter); - -/* prototype for function to clean strange characters out of strings */ - -void clean_string(char *); - -void ReadMdfFile(void) -{ - char line[MAX_LINE_LENGTH]; /* Temporary storage for reading lines */ - char *col_no; /* Pointer to column number stored as char */ - char *col_name; /* Pointer to column name */ - int connect_col_no = 0; /* Column number where connection info begins */ - int q_col_no = 0; /* Column number containg charge information */ - int column_flag=0; /* Flag for finding connect and q col no */ - int atom_counter=0; /* Keeps track of current atom number */ - int p_flag = 1; /* return value from ProcessConnections() */ - - int i,j,k,kk,l,n,match,match2,status; - char *temp_string; - char *temp_residue; - char *temp_atom_name; - char *sptr; - char *molecule_name; - unsigned char at_end = 0; - -/* Open .mdf file for reading */ - - - sprintf(line,"%s.mdf",rootname); - if (pflag > 0) fprintf(stderr," Reading mdf file: %s\n",line); - if ((MdfF = fopen(line,"r")) == NULL ) { - fprintf(stderr,"Cannot open %s\n",line); - exit(2); - } - - while (!at_end) { - - sptr = fgets(line,MAX_LINE_LENGTH,MdfF); - - if (sptr != NULL) { - - clean_string(line); - - if (strncmp(line,"#end",4) == 0) { - at_end = 1; - } - else if (strncmp(line,"@column",7) == 0) { - - temp_string = strtok(line," "); - col_no = strtok(NULL," "); - col_name = strtok(NULL," "); - if (strncmp(col_name,"charge",6) == 0) { - if (strlen(col_name) < 8) { - q_col_no = atoi(col_no); - } - } - else if (strncmp(col_name,"connect",7) == 0) { - connect_col_no = atoi(col_no); - } - } - else if (strncmp(line,"@molecule",9) == 0) { - temp_string = strtok(line," "); - molecule_name = strtok(NULL," "); - - if ((q_col_no == 0) | (connect_col_no == 0)) { - fprintf(stderr,"Unable to process molecule without knowing charge\n"); - fprintf(stderr,"and connections columns\n"); - } - sptr = fgets(line,MAX_LINE_LENGTH,MdfF); - status = get_molecule(line,connect_col_no,q_col_no,&atom_counter); - if (status == 0) { - fprintf(stderr,"Trouble reading molecule - exiting\n"); - } - } - else { - } - } - else { - fprintf(stderr,"End of File found or error reading line\n"); - at_end = 1; - } - } - - /* Next build list of residues for each molecule This will - facilitate assigning connections numbers as well as figuring - out bonds, angles, etc. This first loop just figures out the - number of residues in each molecule and allocates memory to - store information for each residue. The second loop fills - in starting and ending atom positions for each residue - */ - - temp_string = calloc(16,sizeof(char)); - temp_string[15] = '\0'; - - for (n=0; n < no_molecules; n++) { - molecule[n].no_residues = 1; - - strncpy(temp_string,atoms[molecule[n].start].residue_string,16); - for (i=molecule[n].start+1; i < molecule[n].end; i++) { - if (strncmp(temp_string,atoms[i].residue_string,16) != 0) { - molecule[n].no_residues++; - strncpy(temp_string,atoms[i].residue_string,16); - } - } - - molecule[n].residue = (struct ResidueList *) - calloc(molecule[n].no_residues, sizeof(struct ResidueList)); - - if (molecule[n].residue == NULL) { - fprintf(stderr,"Unable to allocate memory for residue list - molecule %d\n", - n); - exit(1); - } - } - for (n=0; n < no_molecules; n++) { - j = 0; - strncpy(molecule[n].residue[j].name, - atoms[molecule[n].start].residue_string,16); - - molecule[n].residue[j].start = molecule[n].start; - for (i=molecule[n].start+1; i < molecule[n].end; i++) { - if (strncmp(molecule[n].residue[j].name, - atoms[i].residue_string,16) != 0) { - - molecule[n].residue[j].end = i; - molecule[n].residue[++j].start = i; - strncpy(molecule[n].residue[j].name,atoms[i].residue_string,16); - } - } - molecule[n].residue[j].end = molecule[n].end; - /* - fprintf(stderr,"Molecule %d has %d residues",n,molecule[n].no_residues); - for (i=0; i < molecule[n].no_residues; i++) { - fprintf(stderr," %s",molecule[n].residue[i].name); - } - fprintf(stderr,"\n"); - for (i=molecule[n].start; i < molecule[n].end; i++) { - fprintf(stderr," atom %d residue %s\n",i,atoms[i].residue_string); - } - fprintf(stderr," residue %s start %d end %d\n",molecule[n].residue[i].name, - molecule[n].residue[i].start,molecule[n].residue[i].end); - } - */ - } - - /* Assign atom names in connections[] to corresponding atom numbers */ - - for (n=0; n < no_molecules; n++) { - for (j=0; j < molecule[n].no_residues; j++) { - for (i=molecule[n].residue[j].start; i < molecule[n].residue[j].end; - i++) { - for (l=0; l < atoms[i].no_connect; l++) { - strncpy(temp_string,atoms[i].connections[l],16); - temp_residue = strtok(temp_string,":"); - temp_atom_name = strtok(NULL,"%"); - - if (strcmp(temp_residue,molecule[n].residue[j].name) == 0) { - - /* atom and connection are part of same residue - Search names on just that residue */ - - k = molecule[n].residue[j].start; - match = 0; - while (!match && (k < molecule[n].residue[j].end)) { - if (strcmp(atoms[k].name,temp_atom_name) == 0) { - atoms[i].conn_no[l] = k; - match = 1; - } - else - k++; - } - if (match == 0) { - fprintf(stderr,"Unable to resolve atom number of atom %d conn %d string %s:%s\n Something is wrong in the MDF file\n", - i,l,temp_residue,temp_atom_name); - exit(1); - } - } - else { - - /* atom and connection are on different residues - First find the residue that the connection is - on then loop over its atoms - */ - - k=0; - match = 0; - while (!match && (k < molecule[n].no_residues)) { - if (strcmp(temp_residue,molecule[n].residue[k].name) == 0) { - kk = molecule[n].residue[k].start; - match2 = 0; - while (!match2 && (kk < molecule[n].residue[k].end)) { - if (strcmp(atoms[kk].name,temp_atom_name) == 0) { - atoms[i].conn_no[l] = kk; - match2 = 1; - } - else - kk++; - } - if (match2 == 0) { - fprintf(stderr,"Unable to resolve atom number of atom %d conn %d string %s\n Something is wrong in the MDF file\n", - i,l,atoms[i].connections[l]); - exit(1); - } - match = 1; - } - else - k++; - } - if (match == 0) { - fprintf(stderr,"Unable to find residue associated with conn %d %s on atom %d\n Something is wrong in the MDF file\n", l,atoms[i].connections[l],i); - exit(1); - } - } /* end if */ - } /* l - loop over connections on atom i */ - - } /* i - loop on atoms in residue j molecule n */ - - } /* j - loop on residues in molecule n */ - - } /* n - loop over molecules */ - - free(temp_string); - /* - for (n=0; n < no_molecules; n++) { - - fprintf(stderr,"Molecule %d has %d residues\n",n,molecule[n].no_residues); - for (j=0; j < molecule[n].no_residues; j++) { - fprintf(stderr," Residue %d named %s\n",j,molecule[n].residue[j].name); - for (i=molecule[n].residue[j].start; i < molecule[n].residue[j].end; - i++) { - fprintf(stderr," Atom %d type %s connected to ",i,atoms[i].potential); - for (l=0; l < atoms[i].no_connect; l++) fprintf(stderr," %d ", - atoms[i].conn_no[l]); - fprintf(stderr,"\n"); - } - } - } - -*/ - -/* Close .mdf file */ - - if (fclose(MdfF) !=0) { - printf("Error closing %s.car\n", rootname); - exit(1); - } - -} /* End ReadMdfFile function */ - -/*--------------------- get_molecule Function-----------------------*/ - -int get_molecule(char *line, int connect_col_no, int q_col_no, - int *counter) -{ - char *cur_field; /* For storing current string token */ - int i; /* Used in loop counters */ - int connect_no; /* Connection number within atom */ - int r_val = 1; /* Return value. 1 = successful - 0 = EOF encountered */ - /* Loop over atoms */ - - /* blank line signals end of molecule*/ - while(!blank_line(fgets(line,MAX_LINE_LENGTH,MdfF))) { - /* while(strlen(fgets(line,MAX_LINE_LENGTH,MdfF)) > 2) { */ - - clean_string(line); - - /* Get atom name */ - cur_field = strtok(line,":"); - sscanf(cur_field, "%s", atoms[*counter].residue_string); - cur_field = strtok(NULL," "); - /* Compare atom name with that in .car file */ - if (strcmp(atoms[*counter].name, cur_field)) { - fprintf(stderr,"Names %s from .car file and %s from .mdf file do not match\n", - atoms[*counter].name, cur_field); - fprintf(stderr,"counter = %d\n",*counter); - fprintf(stderr,"Program Terminating\n"); - exit(4); - } - - /* Skip unwanted fields until charge column, then update charge */ - - for (i=1; i < q_col_no; i++) strtok(NULL," "); - cur_field = strtok(NULL, " "); - atoms[*counter].q = atof(cur_field); - - /* Continue skipping unwanted fields until connectivity records begin */ - - for ( i = (q_col_no + 1); i < connect_col_no; i++) strtok(NULL," "); - - /* Process connections */ - - connect_no = 0; /* reset connections counter */ - while ((cur_field = strtok(NULL," ")) && (connect_no < MAX_CONNECTIONS)) { - sscanf(cur_field, "%s", atoms[*counter].connections[connect_no++]); - } - atoms[*counter].no_connect = connect_no; - MakeConnectFullForm(counter); - (*counter)++; - - } /* End atom processing loop */ - - return r_val; - -} /* End get_molecule function */ - - - - /*------------------------MakeConnectFullForm Function--------------------*/ - -void MakeConnectFullForm(int *counter) { - - /* This function processes the connection names after all connections - for an atom have been read in. - It replaces any short forms that use implied default values - with the full form connectivity record */ - - int i; /* Counter for character array */ - int j; /* loop counter */ - char tempname[MAX_STRING]; /* name of connection */ - char tempcell[10]; /* Values from connectivity record */ - char tempsym[5]; /* " " */ - char tempbo[6]; /* " " */ - char *charptr; - - for ( j = 0; j < atoms[*counter].no_connect; j++) { - /* If not full name, make name full */ - if (strchr(atoms[*counter].connections[j],':') == NULL) { - strcpy(tempname,atoms[*counter].residue_string); - strcat(tempname,":"); - strcat(tempname, - atoms[*counter].connections[j]); - sscanf(tempname, "%s", - atoms[*counter].connections[j]); - } - else - sscanf(atoms[*counter].connections[j], "%s", tempname); - /* Set cell variables */ - - i=0; - charptr = (strchr(tempname,'%')); - if (charptr != NULL) { - while ( *charptr!='#' && *charptr!='/' && *charptr!='\000') - tempcell[i++] = *(charptr++); - tempcell[i] = '\000'; - } - else - strcpy(tempcell, "%000"); - - /* Set symmetry variables - -- If not 1, cannot handle at this time */ - - i = 0; - charptr = (strchr(tempname,'#')); - if (charptr != NULL) { - while (*charptr != '/' && *charptr !='\000') { - tempsym[i++] = *(charptr++); - if ((i==2) && (tempsym[1] != '1')) { - fprintf(stderr,"Msi2LMP is not equipped to handle symmetry operations\n"); - exit(5); - } - } - tempsym[i] = '\000'; - } - else - strcpy(tempsym, "#1"); - - /* Set bond order and record in data structure */ - - i = 0; - charptr = strchr(tempname,'/'); - if (charptr != NULL) { - charptr++; - while (*charptr != '\000') - tempbo[i++] = *(charptr++); - tempbo[i] = '\000'; - } - else - strcpy(tempbo, "1.0"); - - atoms[*counter].bond_order[j] = atof(tempbo); - -/* Build connection name and store in atoms data structure */ - - strtok( tempname, "%#/"); - strcat( tempname, tempcell); - strcat( tempname, tempsym); - strcat( tempname, "/"); - strcat( tempname, tempbo); - if (strlen(tempname) > 25) fprintf(stderr,"tempname overrun %s\n",tempname); - sscanf( tempname, "%s", atoms[*counter].connections[j]); - }/*End for loop*/ -}/* End function MakeNameLong -*/ - -void clean_string(char *string) { - int i,n; - short k; - - n = strlen(string); - for (i=0; i < n; i++) { - k = (short)string[i]; - if ((k<32) | (k>127)) string[i] = '\0'; - } -} - - +/****************************** +* +* This function opens the .mdf file and extracts connectivity information +* into the atoms Atom structure. It also updates the charge from the .car +* file because the charge in the .mdf file has more significant figures. +* +*/ + +#include "Msi2LMP2.h" + +/* Prototype for function to process a single atom + Returns int that flags end of data file */ + +int get_molecule(char line[], int connect_col_no, + int q_col_no, int *counter); + +/* Prototype for function that takes connectivty record as stated in + .mdf file and fills in any default values */ +void MakeConnectFullForm(int *counter); + +/* prototype for function to clean strange characters out of strings */ + +void clean_string(char *); + +void ReadMdfFile(void) +{ + char line[MAX_LINE_LENGTH]; /* Temporary storage for reading lines */ + char *col_no; /* Pointer to column number stored as char */ + char *col_name; /* Pointer to column name */ + int connect_col_no = 0; /* Column number where connection info begins */ + int q_col_no = 0; /* Column number containg charge information */ + int column_flag=0; /* Flag for finding connect and q col no */ + int atom_counter=0; /* Keeps track of current atom number */ + int p_flag = 1; /* return value from ProcessConnections() */ + + int i,j,k,kk,l,n,match,match2,status; + char *temp_string; + char *temp_residue; + char *temp_atom_name; + char *sptr; + char *molecule_name; + unsigned char at_end = 0; + +/* Open .mdf file for reading */ + + + sprintf(line,"%s.mdf",rootname); + if (pflag > 0) fprintf(stderr," Reading mdf file: %s\n",line); + if ((MdfF = fopen(line,"r")) == NULL ) { + fprintf(stderr,"Cannot open %s\n",line); + exit(2); + } + + while (!at_end) { + + sptr = fgets(line,MAX_LINE_LENGTH,MdfF); + + if (sptr != NULL) { + + clean_string(line); + + if (strncmp(line,"#end",4) == 0) { + at_end = 1; + } + else if (strncmp(line,"@column",7) == 0) { + + temp_string = strtok(line," "); + col_no = strtok(NULL," "); + col_name = strtok(NULL," "); + if (strncmp(col_name,"charge",6) == 0) { + if (strlen(col_name) < 8) { + q_col_no = atoi(col_no); + } + } + else if (strncmp(col_name,"connect",7) == 0) { + connect_col_no = atoi(col_no); + } + } + else if (strncmp(line,"@molecule",9) == 0) { + temp_string = strtok(line," "); + molecule_name = strtok(NULL," "); + + if ((q_col_no == 0) | (connect_col_no == 0)) { + fprintf(stderr,"Unable to process molecule without knowing charge\n"); + fprintf(stderr,"and connections columns\n"); + } + sptr = fgets(line,MAX_LINE_LENGTH,MdfF); + status = get_molecule(line,connect_col_no,q_col_no,&atom_counter); + if (status == 0) { + fprintf(stderr,"Trouble reading molecule - exiting\n"); + } + } + else { + } + } + else { + fprintf(stderr,"End of File found or error reading line\n"); + at_end = 1; + } + } + + /* Next build list of residues for each molecule This will + facilitate assigning connections numbers as well as figuring + out bonds, angles, etc. This first loop just figures out the + number of residues in each molecule and allocates memory to + store information for each residue. The second loop fills + in starting and ending atom positions for each residue + */ + + temp_string = calloc(16,sizeof(char)); + temp_string[15] = '\0'; + + for (n=0; n < no_molecules; n++) { + molecule[n].no_residues = 1; + + strncpy(temp_string,atoms[molecule[n].start].residue_string,16); + for (i=molecule[n].start+1; i < molecule[n].end; i++) { + if (strncmp(temp_string,atoms[i].residue_string,16) != 0) { + molecule[n].no_residues++; + strncpy(temp_string,atoms[i].residue_string,16); + } + } + + molecule[n].residue = (struct ResidueList *) + calloc(molecule[n].no_residues, sizeof(struct ResidueList)); + + if (molecule[n].residue == NULL) { + fprintf(stderr,"Unable to allocate memory for residue list - molecule %d\n", + n); + exit(1); + } + } + for (n=0; n < no_molecules; n++) { + j = 0; + strncpy(molecule[n].residue[j].name, + atoms[molecule[n].start].residue_string,16); + + molecule[n].residue[j].start = molecule[n].start; + for (i=molecule[n].start+1; i < molecule[n].end; i++) { + if (strncmp(molecule[n].residue[j].name, + atoms[i].residue_string,16) != 0) { + + molecule[n].residue[j].end = i; + molecule[n].residue[++j].start = i; + strncpy(molecule[n].residue[j].name,atoms[i].residue_string,16); + } + } + molecule[n].residue[j].end = molecule[n].end; + /* + fprintf(stderr,"Molecule %d has %d residues",n,molecule[n].no_residues); + for (i=0; i < molecule[n].no_residues; i++) { + fprintf(stderr," %s",molecule[n].residue[i].name); + } + fprintf(stderr,"\n"); + for (i=molecule[n].start; i < molecule[n].end; i++) { + fprintf(stderr," atom %d residue %s\n",i,atoms[i].residue_string); + } + fprintf(stderr," residue %s start %d end %d\n",molecule[n].residue[i].name, + molecule[n].residue[i].start,molecule[n].residue[i].end); + } + */ + } + + /* Assign atom names in connections[] to corresponding atom numbers */ + + for (n=0; n < no_molecules; n++) { + for (j=0; j < molecule[n].no_residues; j++) { + for (i=molecule[n].residue[j].start; i < molecule[n].residue[j].end; + i++) { + for (l=0; l < atoms[i].no_connect; l++) { + strncpy(temp_string,atoms[i].connections[l],16); + temp_residue = strtok(temp_string,":"); + temp_atom_name = strtok(NULL,"%"); + + if (strcmp(temp_residue,molecule[n].residue[j].name) == 0) { + + /* atom and connection are part of same residue + Search names on just that residue */ + + k = molecule[n].residue[j].start; + match = 0; + while (!match && (k < molecule[n].residue[j].end)) { + if (strcmp(atoms[k].name,temp_atom_name) == 0) { + atoms[i].conn_no[l] = k; + match = 1; + } + else + k++; + } + if (match == 0) { + fprintf(stderr,"Unable to resolve atom number of atom %d conn %d string %s:%s\n Something is wrong in the MDF file\n", + i,l,temp_residue,temp_atom_name); + exit(1); + } + } + else { + + /* atom and connection are on different residues + First find the residue that the connection is + on then loop over its atoms + */ + + k=0; + match = 0; + while (!match && (k < molecule[n].no_residues)) { + if (strcmp(temp_residue,molecule[n].residue[k].name) == 0) { + kk = molecule[n].residue[k].start; + match2 = 0; + while (!match2 && (kk < molecule[n].residue[k].end)) { + if (strcmp(atoms[kk].name,temp_atom_name) == 0) { + atoms[i].conn_no[l] = kk; + match2 = 1; + } + else + kk++; + } + if (match2 == 0) { + fprintf(stderr,"Unable to resolve atom number of atom %d conn %d string %s\n Something is wrong in the MDF file\n", + i,l,atoms[i].connections[l]); + exit(1); + } + match = 1; + } + else + k++; + } + if (match == 0) { + fprintf(stderr,"Unable to find residue associated with conn %d %s on atom %d\n Something is wrong in the MDF file\n", l,atoms[i].connections[l],i); + exit(1); + } + } /* end if */ + } /* l - loop over connections on atom i */ + + } /* i - loop on atoms in residue j molecule n */ + + } /* j - loop on residues in molecule n */ + + } /* n - loop over molecules */ + + free(temp_string); + /* + for (n=0; n < no_molecules; n++) { + + fprintf(stderr,"Molecule %d has %d residues\n",n,molecule[n].no_residues); + for (j=0; j < molecule[n].no_residues; j++) { + fprintf(stderr," Residue %d named %s\n",j,molecule[n].residue[j].name); + for (i=molecule[n].residue[j].start; i < molecule[n].residue[j].end; + i++) { + fprintf(stderr," Atom %d type %s connected to ",i,atoms[i].potential); + for (l=0; l < atoms[i].no_connect; l++) fprintf(stderr," %d ", + atoms[i].conn_no[l]); + fprintf(stderr,"\n"); + } + } + } + +*/ + +/* Close .mdf file */ + + if (fclose(MdfF) !=0) { + printf("Error closing %s.car\n", rootname); + exit(1); + } + +} /* End ReadMdfFile function */ + +/*--------------------- get_molecule Function-----------------------*/ + +int get_molecule(char *line, int connect_col_no, int q_col_no, + int *counter) +{ + char *cur_field; /* For storing current string token */ + int i; /* Used in loop counters */ + int connect_no; /* Connection number within atom */ + int r_val = 1; /* Return value. 1 = successful + 0 = EOF encountered */ + /* Loop over atoms */ + + /* blank line signals end of molecule*/ + while(!blank_line(fgets(line,MAX_LINE_LENGTH,MdfF))) { + /* while(strlen(fgets(line,MAX_LINE_LENGTH,MdfF)) > 2) { */ + + clean_string(line); + + /* Get atom name */ + cur_field = strtok(line,":"); + sscanf(cur_field, "%s", atoms[*counter].residue_string); + cur_field = strtok(NULL," "); + /* Compare atom name with that in .car file */ + if (strcmp(atoms[*counter].name, cur_field)) { + fprintf(stderr,"Names %s from .car file and %s from .mdf file do not match\n", + atoms[*counter].name, cur_field); + fprintf(stderr,"counter = %d\n",*counter); + fprintf(stderr,"Program Terminating\n"); + exit(4); + } + + /* Skip unwanted fields until charge column, then update charge */ + + for (i=1; i < q_col_no; i++) strtok(NULL," "); + cur_field = strtok(NULL, " "); + atoms[*counter].q = atof(cur_field); + + /* Continue skipping unwanted fields until connectivity records begin */ + + for ( i = (q_col_no + 1); i < connect_col_no; i++) strtok(NULL," "); + + /* Process connections */ + + connect_no = 0; /* reset connections counter */ + while ((cur_field = strtok(NULL," ")) && (connect_no < MAX_CONNECTIONS)) { + sscanf(cur_field, "%s", atoms[*counter].connections[connect_no++]); + } + atoms[*counter].no_connect = connect_no; + MakeConnectFullForm(counter); + (*counter)++; + + } /* End atom processing loop */ + + return r_val; + +} /* End get_molecule function */ + + + + /*------------------------MakeConnectFullForm Function--------------------*/ + +void MakeConnectFullForm(int *counter) { + + /* This function processes the connection names after all connections + for an atom have been read in. + It replaces any short forms that use implied default values + with the full form connectivity record */ + + int i; /* Counter for character array */ + int j; /* loop counter */ + char tempname[MAX_STRING]; /* name of connection */ + char tempcell[10]; /* Values from connectivity record */ + char tempsym[5]; /* " " */ + char tempbo[6]; /* " " */ + char *charptr; + + for ( j = 0; j < atoms[*counter].no_connect; j++) { + /* If not full name, make name full */ + if (strchr(atoms[*counter].connections[j],':') == NULL) { + strcpy(tempname,atoms[*counter].residue_string); + strcat(tempname,":"); + strcat(tempname, + atoms[*counter].connections[j]); + sscanf(tempname, "%s", + atoms[*counter].connections[j]); + } + else + sscanf(atoms[*counter].connections[j], "%s", tempname); + /* Set cell variables */ + + i=0; + charptr = (strchr(tempname,'%')); + if (charptr != NULL) { + while ( *charptr!='#' && *charptr!='/' && *charptr!='\000') + tempcell[i++] = *(charptr++); + tempcell[i] = '\000'; + } + else + strcpy(tempcell, "%000"); + + /* Set symmetry variables + -- If not 1, cannot handle at this time */ + + i = 0; + charptr = (strchr(tempname,'#')); + if (charptr != NULL) { + while (*charptr != '/' && *charptr !='\000') { + tempsym[i++] = *(charptr++); + if ((i==2) && (tempsym[1] != '1')) { + fprintf(stderr,"Msi2LMP is not equipped to handle symmetry operations\n"); + exit(5); + } + } + tempsym[i] = '\000'; + } + else + strcpy(tempsym, "#1"); + + /* Set bond order and record in data structure */ + + i = 0; + charptr = strchr(tempname,'/'); + if (charptr != NULL) { + charptr++; + while (*charptr != '\000') + tempbo[i++] = *(charptr++); + tempbo[i] = '\000'; + } + else + strcpy(tempbo, "1.0"); + + atoms[*counter].bond_order[j] = atof(tempbo); + +/* Build connection name and store in atoms data structure */ + + strtok( tempname, "%#/"); + strcat( tempname, tempcell); + strcat( tempname, tempsym); + strcat( tempname, "/"); + strcat( tempname, tempbo); + if (strlen(tempname) > 25) fprintf(stderr,"tempname overrun %s\n",tempname); + sscanf( tempname, "%s", atoms[*counter].connections[j]); + }/*End for loop*/ +}/* End function MakeNameLong +*/ + +void clean_string(char *string) { + int i,n; + short k; + + n = strlen(string); + for (i=0; i < n; i++) { + k = (short)string[i]; + if ((k<32) | (k>127)) string[i] = '\0'; + } +} + + diff --git a/tools/msi2lmp/src/SearchAndFill.c b/tools/msi2lmp/src/SearchAndFill.c index 086d50b54d..c617eac721 100644 --- a/tools/msi2lmp/src/SearchAndFill.c +++ b/tools/msi2lmp/src/SearchAndFill.c @@ -1,218 +1,218 @@ -/**************************** -* -* This function first allocates memory to the forcefield item -* structures and then reads parameters from the forcefield file into the -* allocated memory -* -*/ - -#include "Forcefield.h" -#include "Msi2LMP2.h" - -unsigned char string_match(char *,char *); - -void SearchAndFill(struct FrcFieldItem *item) -{ - int i,j; /* counters */ - int got_it = 0; - int ctr = 0; - long file_pos; - char line[MAX_LINE] = "empty"; - char *charptr,*status; - extern FILE *FrcF; - - - /***********************ALLOCATE MEMORY FOR STRUCTURE ********************/ - - /* Read and discard lines until keyword is found */ - - rewind(FrcF); - while ((got_it == 0)) { - status = fgets( line, MAX_LINE, FrcF ); - if (status == NULL) { - fprintf(stderr," Unable to find forcefield keyword %s\n",item->keyword); - fprintf(stderr," Check consistency of forcefield name and class \n"); - fprintf(stderr," Exiting....\n"); - exit(1); - } - if (line[0] == '#') { - if (string_match(strtok(line," '\t'("),item->keyword)) got_it = 1; - } - /* if (strncmp(line, item->keyword,strlen(item->keyword))==0) got_it = 1; */ - } - - file_pos = ftell(FrcF); - - /* Count the number of lines until next item is found */ - - while( strncmp(fgets(line,MAX_LINE,FrcF), "#", 1) != 0 ) - ctr++; - - /* Allocate the memory using calloc */ - - item->data = calloc(ctr, sizeof(struct FrcFieldData)); - - if (item->data == NULL) { - fprintf(stderr,"Could not allocate memory to %s\n", item->keyword); - exit(2); - } - - /********************FILL PARAMETERS AND EQUIVALENCES ********************/ - - /* Read lines until keyword is found */ - - fseek(FrcF,file_pos,SEEK_SET); - strcpy(line,"empty"); - - /* Read lines until data starts (when !--- is found) */ - - ctr = 0; - while ( strncmp(line,"!---", 4) != 0 ) { - fgets(line, MAX_LINE, FrcF); - } - - /* Get first line of data that isn't commented out */ - - fgets(line, MAX_LINE, FrcF); - while (strncmp(line,"!",1) == 0) { - fgets( line, MAX_LINE, FrcF); - } - - /* Read data into structure */ - - while( strncmp( line, "#", 1 ) != 0 ) { - - float version; - int reference,replace; - char atom_types[5][5]; - double parameters[8]; - - /* version number and reference number */ - - version = atof(strtok(line, " ")); - reference = atoi(strtok(NULL, " ")); - - /* equivalences */ - - for(i = 0; i < item->number_of_members; i++ ) { - sscanf(strtok(NULL, " "), "%s", atom_types[i]); - } - - /* parameters -- Because of symmetrical terms, bonang, angtor, and - endbontor have to be treated carefully */ - - for( i = 0; i < item->number_of_parameters; i++ ) { - charptr = strtok(NULL, " "); - if(charptr == NULL) { - for ( j = i; j < item->number_of_parameters; j++ ) - parameters[j] = parameters[j-i]; - break; - } - else { - parameters[i] = atof(charptr); - } - } - /* Search for matching sets of atom types. - If found and the version number is greater, substitute - the current set of parameters in place of the found set. - Otherwise, add the current set of parameters to the - list. - */ - replace = ctr; - for (j=0; j < ctr; j++) { - - int k=0; - int match = 1; - while (match && (k < item->number_of_members)) { - if (strncmp(item->data[j].ff_types[k],atom_types[k],5) == 0) - k++; - else - match = 0; - } - if (match == 1) { - replace = j; - break; - } - } - if (replace != ctr) { - if (version > item->data[replace].ver) { - - if (pflag > 1) { - fprintf(stderr," Using higher version of parameters for"); - fprintf(stderr," %s ",item->keyword); - for (i=0; i < item->number_of_members; i++) - fprintf(stderr,"%s ",atom_types[i]); - fprintf(stderr," version %3.2f\n",version); - } - - item->data[replace].ver = version; - item->data[replace].ref = reference; - for (i=0; i < item->number_of_members; i++) { - strncpy(item->data[replace].ff_types[i],atom_types[i],5); - } - for (i=0; i < item->number_of_parameters; i++) { - item->data[replace].ff_param[i] = parameters[i]; - } - } - else { - if (pflag > 1) { - fprintf(stderr," Using higher version of parameters for"); - fprintf(stderr," %s ",item->keyword); - for (i=0; i < item->number_of_members; i++) - fprintf(stderr,"%s ",item->data[replace].ff_types[i]); - fprintf(stderr," version %3.2f\n",item->data[replace].ver); - } - } - } - else { - item->data[ctr].ver = version; - item->data[ctr].ref = reference; - for (i=0; i < item->number_of_members; i++) { - strncpy(item->data[ctr].ff_types[i],atom_types[i],5); - } - for (i=0; i < item->number_of_parameters; i++) { - item->data[ctr].ff_param[i] = parameters[i]; - } - ctr++; - } - fgets( line, MAX_LINE, FrcF); - /*if blank line encountered, get next */ - while((blank_line(line)) || - (strncmp(line,"!",1) == 0)) { - fgets( line, MAX_LINE, FrcF); - } - } - item->entries = ctr; - - /*Debugging - fprintf(stderr,"\n%s\n", item->keyword); - for(i=0;inumber_of_members;j++) - fprintf(stderr,"%3s ", item->data[i].ff_equiv[j]); - fprintf(stderr," "); - for(j=0;jnumber_of_parameters;j++) - fprintf(stderr,"%10.5f ",item->data[i].ff_param[j]); - fprintf(stderr,"\n"); - } - */ -} - -unsigned char string_match(char *string1,char *string2) -{ - int len1,len2; - - len1 = strlen(string1); - len2 = strlen(string2); - - if (len1 != len2) { - return 0; - } - else { - if (strncmp(string1,string2,len1) == 0) { - return 1; - } - else { - return 0; - } - } -} +/**************************** +* +* This function first allocates memory to the forcefield item +* structures and then reads parameters from the forcefield file into the +* allocated memory +* +*/ + +#include "Forcefield.h" +#include "Msi2LMP2.h" + +unsigned char string_match(char *,char *); + +void SearchAndFill(struct FrcFieldItem *item) +{ + int i,j; /* counters */ + int got_it = 0; + int ctr = 0; + long file_pos; + char line[MAX_LINE] = "empty"; + char *charptr,*status; + extern FILE *FrcF; + + + /***********************ALLOCATE MEMORY FOR STRUCTURE ********************/ + + /* Read and discard lines until keyword is found */ + + rewind(FrcF); + while ((got_it == 0)) { + status = fgets( line, MAX_LINE, FrcF ); + if (status == NULL) { + fprintf(stderr," Unable to find forcefield keyword %s\n",item->keyword); + fprintf(stderr," Check consistency of forcefield name and class \n"); + fprintf(stderr," Exiting....\n"); + exit(1); + } + if (line[0] == '#') { + if (string_match(strtok(line," '\t'("),item->keyword)) got_it = 1; + } + /* if (strncmp(line, item->keyword,strlen(item->keyword))==0) got_it = 1; */ + } + + file_pos = ftell(FrcF); + + /* Count the number of lines until next item is found */ + + while( strncmp(fgets(line,MAX_LINE,FrcF), "#", 1) != 0 ) + ctr++; + + /* Allocate the memory using calloc */ + + item->data = calloc(ctr, sizeof(struct FrcFieldData)); + + if (item->data == NULL) { + fprintf(stderr,"Could not allocate memory to %s\n", item->keyword); + exit(2); + } + + /********************FILL PARAMETERS AND EQUIVALENCES ********************/ + + /* Read lines until keyword is found */ + + fseek(FrcF,file_pos,SEEK_SET); + strcpy(line,"empty"); + + /* Read lines until data starts (when !--- is found) */ + + ctr = 0; + while ( strncmp(line,"!---", 4) != 0 ) { + fgets(line, MAX_LINE, FrcF); + } + + /* Get first line of data that isn't commented out */ + + fgets(line, MAX_LINE, FrcF); + while (strncmp(line,"!",1) == 0) { + fgets( line, MAX_LINE, FrcF); + } + + /* Read data into structure */ + + while( strncmp( line, "#", 1 ) != 0 ) { + + float version; + int reference,replace; + char atom_types[5][5]; + double parameters[8]; + + /* version number and reference number */ + + version = atof(strtok(line, " ")); + reference = atoi(strtok(NULL, " ")); + + /* equivalences */ + + for(i = 0; i < item->number_of_members; i++ ) { + sscanf(strtok(NULL, " "), "%s", atom_types[i]); + } + + /* parameters -- Because of symmetrical terms, bonang, angtor, and + endbontor have to be treated carefully */ + + for( i = 0; i < item->number_of_parameters; i++ ) { + charptr = strtok(NULL, " "); + if(charptr == NULL) { + for ( j = i; j < item->number_of_parameters; j++ ) + parameters[j] = parameters[j-i]; + break; + } + else { + parameters[i] = atof(charptr); + } + } + /* Search for matching sets of atom types. + If found and the version number is greater, substitute + the current set of parameters in place of the found set. + Otherwise, add the current set of parameters to the + list. + */ + replace = ctr; + for (j=0; j < ctr; j++) { + + int k=0; + int match = 1; + while (match && (k < item->number_of_members)) { + if (strncmp(item->data[j].ff_types[k],atom_types[k],5) == 0) + k++; + else + match = 0; + } + if (match == 1) { + replace = j; + break; + } + } + if (replace != ctr) { + if (version > item->data[replace].ver) { + + if (pflag > 1) { + fprintf(stderr," Using higher version of parameters for"); + fprintf(stderr," %s ",item->keyword); + for (i=0; i < item->number_of_members; i++) + fprintf(stderr,"%s ",atom_types[i]); + fprintf(stderr," version %3.2f\n",version); + } + + item->data[replace].ver = version; + item->data[replace].ref = reference; + for (i=0; i < item->number_of_members; i++) { + strncpy(item->data[replace].ff_types[i],atom_types[i],5); + } + for (i=0; i < item->number_of_parameters; i++) { + item->data[replace].ff_param[i] = parameters[i]; + } + } + else { + if (pflag > 1) { + fprintf(stderr," Using higher version of parameters for"); + fprintf(stderr," %s ",item->keyword); + for (i=0; i < item->number_of_members; i++) + fprintf(stderr,"%s ",item->data[replace].ff_types[i]); + fprintf(stderr," version %3.2f\n",item->data[replace].ver); + } + } + } + else { + item->data[ctr].ver = version; + item->data[ctr].ref = reference; + for (i=0; i < item->number_of_members; i++) { + strncpy(item->data[ctr].ff_types[i],atom_types[i],5); + } + for (i=0; i < item->number_of_parameters; i++) { + item->data[ctr].ff_param[i] = parameters[i]; + } + ctr++; + } + fgets( line, MAX_LINE, FrcF); + /*if blank line encountered, get next */ + while((blank_line(line)) || + (strncmp(line,"!",1) == 0)) { + fgets( line, MAX_LINE, FrcF); + } + } + item->entries = ctr; + + /*Debugging + fprintf(stderr,"\n%s\n", item->keyword); + for(i=0;inumber_of_members;j++) + fprintf(stderr,"%3s ", item->data[i].ff_equiv[j]); + fprintf(stderr," "); + for(j=0;jnumber_of_parameters;j++) + fprintf(stderr,"%10.5f ",item->data[i].ff_param[j]); + fprintf(stderr,"\n"); + } + */ +} + +unsigned char string_match(char *string1,char *string2) +{ + int len1,len2; + + len1 = strlen(string1); + len2 = strlen(string2); + + if (len1 != len2) { + return 0; + } + else { + if (strncmp(string1,string2,len1) == 0) { + return 1; + } + else { + return 0; + } + } +} diff --git a/tools/msi2lmp/src/WriteDataFile.c b/tools/msi2lmp/src/WriteDataFile.c index d117ca317d..050240dcc2 100644 --- a/tools/msi2lmp/src/WriteDataFile.c +++ b/tools/msi2lmp/src/WriteDataFile.c @@ -1,313 +1,313 @@ -/* -* This function creates and writes the data file to be used with LAMMPS -*/ - -#include "Msi2LMP2.h" -#include "Forcefield.h" - -void WriteDataFile(FILE *DatF,char *nameroot,int forcefield) -{ - int i,j,k,m; - char line[MAX_LINE_LENGTH]; - - if (forcefield == 1) total_no_angle_angles = 0; - - fprintf(DatF, "LAMMPS data file for %s\n\n", nameroot); - fprintf(DatF, " %6d atoms\n", total_no_atoms); - fprintf(DatF, " %6d bonds\n", total_no_bonds); - fprintf(DatF, " %6d angles\n",total_no_angles); - fprintf(DatF, " %6d dihedrals\n", total_no_dihedrals); - fprintf(DatF, " %6d impropers\n", total_no_oops+total_no_angle_angles); - fprintf(DatF, "\n"); - - - fprintf(DatF, " %3d atom types\n", no_atom_types); - if (no_bond_types > 0) - fprintf(DatF, " %3d bond types\n", no_bond_types); - if (no_angle_types> 0) - fprintf(DatF, " %3d angle types\n", no_angle_types); - if (no_dihedral_types > 0) fprintf (DatF," %3d dihedral types\n", - no_dihedral_types); - if (forcefield > 1) { - if ((no_oop_types + no_angleangle_types) > 0) - fprintf (DatF, " %3d improper types\n", - no_oop_types + no_angleangle_types); - } - else { - if (no_oop_types > 0) - fprintf (DatF, " %3d improper types\n", no_oop_types); - } - - fprintf(DatF, "\n"); - fprintf(DatF, " %15.9f %15.9f xlo xhi\n", pbc[0], pbc[3]); - fprintf(DatF, " %15.9f %15.9f ylo yhi\n", pbc[1], pbc[4]); - fprintf(DatF, " %15.9f %15.9f zlo zhi\n", pbc[2], pbc[5]); - - /* MASSES */ - - - fprintf(DatF, "\nMasses\n\n"); - for(k=0; k < no_atom_types; k++) - fprintf(DatF, " %3d %10.6f\n",k+1,atomtypes[k].mass); - fprintf(DatF, "\n"); - - - /* COEFFICIENTS */ - - fprintf(DatF,"Nonbond Coeffs\n\n"); - for (i=0; i < no_atom_types; i++) { - fprintf(DatF, " %3i ", i+1); - for ( j = 0; j < 2; j++) - fprintf(DatF, "%14.10f ", atomtypes[i].params[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - if (no_bond_types > 0) { - if (forcefield == 1) m = 2; - if (forcefield == 2) m = 4; - - fprintf(DatF,"Bond Coeffs\n\n"); - for (i=0; i < no_bond_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < m; j++) - fprintf(DatF, "%10.4f ", bondtypes[i].params[j]); - fprintf(DatF,"\n"); - } - fprintf(DatF, "\n"); - } - - if (no_angle_types > 0) { - - if (forcefield == 1) m = 2; - if (forcefield == 2) m = 4; - - fprintf(DatF,"Angle Coeffs\n\n"); - for (i=0; i < no_angle_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < m; j++) - - fprintf(DatF, "%10.4f ", angletypes[i].params[j]); - fprintf(DatF,"\n"); - } - fprintf(DatF, "\n"); - } - - if (no_dihedral_types > 0) { - if (forcefield == 1) m = 3; - if (forcefield == 2) m = 6; - - fprintf(DatF,"Dihedral Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < m; j++) - fprintf(DatF, "%10.4f ", dihedraltypes[i].params[j]); - fprintf(DatF,"\n"); - } - fprintf(DatF, "\n"); - } - if (forcefield == 1) { - if (no_oop_types > 0) { - fprintf(DatF,"Improper Coeffs\n\n"); - for (i=0; i < no_oop_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - } - else if (forcefield == 2) { - if ((no_oop_types + no_angleangle_types) > 0) { - fprintf(DatF,"Improper Coeffs\n\n"); - for (i=0; i < no_oop_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 2; j++) - fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); - fprintf(DatF, "\n"); - } - for (i=0; i < no_angleangle_types; i++) { - fprintf(DatF, "%3i ", i+no_oop_types+1); - for ( j = 0; j < 2; j++) - fprintf(DatF, "%10.4f ", 0.0); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - } - if (forcefield == 2) { - - if (no_angle_types > 0) { - fprintf(DatF,"BondBond Coeffs\n\n"); - for (i=0; i < no_angle_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF, "%10.4f ", angletypes[i].bondbond_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"BondAngle Coeffs\n\n"); - - for (i=0; i < no_angle_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 4; j++) - fprintf(DatF, "%10.4f ",angletypes[i].bondangle_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - - if ((no_oop_types+no_angleangle_types) > 0) { - fprintf(DatF,"AngleAngle Coeffs\n\n"); - for (i=0; i < no_oop_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 6; j++) - fprintf(DatF, "%10.4f ", ooptypes[i].angleangle_params[j]); - fprintf(DatF, "\n"); - } - for (i=0; i < no_angleangle_types; i++) { - fprintf(DatF, "%3i ", i+no_oop_types+1); - for ( j = 0; j < 6; j++) - fprintf(DatF, "%10.4f ", angleangletypes[i].params[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - - if (no_dihedral_types > 0) { - fprintf(DatF,"AngleAngleTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF,"%10.4f ", - dihedraltypes[i].angleangledihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"EndBondTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%i ", i+1); - for ( j = 0; j < 8; j++) - fprintf(DatF, "%10.4f ", - dihedraltypes[i].endbonddihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"MiddleBondTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 4; j++) - fprintf(DatF,"%10.4f ", - dihedraltypes[i].midbonddihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - - fprintf(DatF,"BondBond13 Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF, "%10.4f ", - dihedraltypes[i].bond13_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"AngleTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 8; j++) - fprintf(DatF, "%10.4f ", - dihedraltypes[i].angledihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - } - - /*--------------------------------------------------------------------*/ - - /* ATOMS */ - - fprintf(DatF, "Atoms\n\n"); - for(k=0; k < total_no_atoms; k++) { - fprintf(DatF, " %6i %6i %3i %9.6f %15.9f %15.9f %15.9f\n", - k+1, - atoms[k].molecule, - atoms[k].type+1, - atoms[k].q, - atoms[k].x[0], - atoms[k].x[1], - atoms[k].x[2]); - } - fprintf(DatF, "\n"); - - /***** BONDS *****/ - - if (total_no_bonds > 0) { - fprintf(DatF, "Bonds\n\n"); - for(k=0; k < total_no_bonds; k++) - fprintf(DatF, "%6i %3i %6i %6i\n",k+1, - bonds[k].type+1, - bonds[k].members[0]+1, - bonds[k].members[1]+1); - fprintf(DatF,"\n"); - } - - /***** ANGLES *****/ - - if (total_no_angles > 0) { - fprintf(DatF, "Angles\n\n"); - for(k=0; k < total_no_angles; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i\n",k+1, - angles[k].type+1, - angles[k].members[0]+1, - angles[k].members[1]+1, - angles[k].members[2]+1); - fprintf(DatF, "\n"); - } - - - /***** TORSIONS *****/ - - if (total_no_dihedrals > 0) { - fprintf(DatF,"Dihedrals\n\n"); - for(k=0; k < total_no_dihedrals; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i %6i\n",k+1, - dihedrals[k].type+1, - dihedrals[k].members[0]+1, - dihedrals[k].members[1]+1, - dihedrals[k].members[2]+1, - dihedrals[k].members[3]+1); - fprintf(DatF, "\n"); - } - - /***** OUT-OF-PLANES *****/ - - if (total_no_oops+total_no_angle_angles > 0) { - fprintf(DatF,"Impropers\n\n"); - for (k=0; k < total_no_oops; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n", k+1, - oops[k].type+1, - oops[k].members[0]+1, - oops[k].members[1]+1, - oops[k].members[2]+1, - oops[k].members[3]+1); - if (forcefield == 2) { - for (k=0; k < total_no_angle_angles; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n",k+total_no_oops+1, - angleangles[k].type+no_oop_types+1, - angleangles[k].members[0]+1, - angleangles[k].members[1]+1, - angleangles[k].members[2]+1, - angleangles[k].members[3]+1); - } - fprintf(DatF, "\n"); - } - -} +/* +* This function creates and writes the data file to be used with LAMMPS +*/ + +#include "Msi2LMP2.h" +#include "Forcefield.h" + +void WriteDataFile(FILE *DatF,char *nameroot,int forcefield) +{ + int i,j,k,m; + char line[MAX_LINE_LENGTH]; + + if (forcefield == 1) total_no_angle_angles = 0; + + fprintf(DatF, "LAMMPS data file for %s\n\n", nameroot); + fprintf(DatF, " %6d atoms\n", total_no_atoms); + fprintf(DatF, " %6d bonds\n", total_no_bonds); + fprintf(DatF, " %6d angles\n",total_no_angles); + fprintf(DatF, " %6d dihedrals\n", total_no_dihedrals); + fprintf(DatF, " %6d impropers\n", total_no_oops+total_no_angle_angles); + fprintf(DatF, "\n"); + + + fprintf(DatF, " %3d atom types\n", no_atom_types); + if (no_bond_types > 0) + fprintf(DatF, " %3d bond types\n", no_bond_types); + if (no_angle_types> 0) + fprintf(DatF, " %3d angle types\n", no_angle_types); + if (no_dihedral_types > 0) fprintf (DatF," %3d dihedral types\n", + no_dihedral_types); + if (forcefield > 1) { + if ((no_oop_types + no_angleangle_types) > 0) + fprintf (DatF, " %3d improper types\n", + no_oop_types + no_angleangle_types); + } + else { + if (no_oop_types > 0) + fprintf (DatF, " %3d improper types\n", no_oop_types); + } + + fprintf(DatF, "\n"); + fprintf(DatF, " %15.9f %15.9f xlo xhi\n", pbc[0], pbc[3]); + fprintf(DatF, " %15.9f %15.9f ylo yhi\n", pbc[1], pbc[4]); + fprintf(DatF, " %15.9f %15.9f zlo zhi\n", pbc[2], pbc[5]); + + /* MASSES */ + + + fprintf(DatF, "\nMasses\n\n"); + for(k=0; k < no_atom_types; k++) + fprintf(DatF, " %3d %10.6f\n",k+1,atomtypes[k].mass); + fprintf(DatF, "\n"); + + + /* COEFFICIENTS */ + + fprintf(DatF,"Nonbond Coeffs\n\n"); + for (i=0; i < no_atom_types; i++) { + fprintf(DatF, " %3i ", i+1); + for ( j = 0; j < 2; j++) + fprintf(DatF, "%14.10f ", atomtypes[i].params[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + if (no_bond_types > 0) { + if (forcefield == 1) m = 2; + if (forcefield == 2) m = 4; + + fprintf(DatF,"Bond Coeffs\n\n"); + for (i=0; i < no_bond_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < m; j++) + fprintf(DatF, "%10.4f ", bondtypes[i].params[j]); + fprintf(DatF,"\n"); + } + fprintf(DatF, "\n"); + } + + if (no_angle_types > 0) { + + if (forcefield == 1) m = 2; + if (forcefield == 2) m = 4; + + fprintf(DatF,"Angle Coeffs\n\n"); + for (i=0; i < no_angle_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < m; j++) + + fprintf(DatF, "%10.4f ", angletypes[i].params[j]); + fprintf(DatF,"\n"); + } + fprintf(DatF, "\n"); + } + + if (no_dihedral_types > 0) { + if (forcefield == 1) m = 3; + if (forcefield == 2) m = 6; + + fprintf(DatF,"Dihedral Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < m; j++) + fprintf(DatF, "%10.4f ", dihedraltypes[i].params[j]); + fprintf(DatF,"\n"); + } + fprintf(DatF, "\n"); + } + if (forcefield == 1) { + if (no_oop_types > 0) { + fprintf(DatF,"Improper Coeffs\n\n"); + for (i=0; i < no_oop_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + } + else if (forcefield == 2) { + if ((no_oop_types + no_angleangle_types) > 0) { + fprintf(DatF,"Improper Coeffs\n\n"); + for (i=0; i < no_oop_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 2; j++) + fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); + fprintf(DatF, "\n"); + } + for (i=0; i < no_angleangle_types; i++) { + fprintf(DatF, "%3i ", i+no_oop_types+1); + for ( j = 0; j < 2; j++) + fprintf(DatF, "%10.4f ", 0.0); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + } + if (forcefield == 2) { + + if (no_angle_types > 0) { + fprintf(DatF,"BondBond Coeffs\n\n"); + for (i=0; i < no_angle_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF, "%10.4f ", angletypes[i].bondbond_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"BondAngle Coeffs\n\n"); + + for (i=0; i < no_angle_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 4; j++) + fprintf(DatF, "%10.4f ",angletypes[i].bondangle_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + + if ((no_oop_types+no_angleangle_types) > 0) { + fprintf(DatF,"AngleAngle Coeffs\n\n"); + for (i=0; i < no_oop_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 6; j++) + fprintf(DatF, "%10.4f ", ooptypes[i].angleangle_params[j]); + fprintf(DatF, "\n"); + } + for (i=0; i < no_angleangle_types; i++) { + fprintf(DatF, "%3i ", i+no_oop_types+1); + for ( j = 0; j < 6; j++) + fprintf(DatF, "%10.4f ", angleangletypes[i].params[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + + if (no_dihedral_types > 0) { + fprintf(DatF,"AngleAngleTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF,"%10.4f ", + dihedraltypes[i].angleangledihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"EndBondTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%i ", i+1); + for ( j = 0; j < 8; j++) + fprintf(DatF, "%10.4f ", + dihedraltypes[i].endbonddihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"MiddleBondTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 4; j++) + fprintf(DatF,"%10.4f ", + dihedraltypes[i].midbonddihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + + fprintf(DatF,"BondBond13 Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF, "%10.4f ", + dihedraltypes[i].bond13_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"AngleTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 8; j++) + fprintf(DatF, "%10.4f ", + dihedraltypes[i].angledihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + } + + /*--------------------------------------------------------------------*/ + + /* ATOMS */ + + fprintf(DatF, "Atoms\n\n"); + for(k=0; k < total_no_atoms; k++) { + fprintf(DatF, " %6i %6i %3i %9.6f %15.9f %15.9f %15.9f\n", + k+1, + atoms[k].molecule, + atoms[k].type+1, + atoms[k].q, + atoms[k].x[0], + atoms[k].x[1], + atoms[k].x[2]); + } + fprintf(DatF, "\n"); + + /***** BONDS *****/ + + if (total_no_bonds > 0) { + fprintf(DatF, "Bonds\n\n"); + for(k=0; k < total_no_bonds; k++) + fprintf(DatF, "%6i %3i %6i %6i\n",k+1, + bonds[k].type+1, + bonds[k].members[0]+1, + bonds[k].members[1]+1); + fprintf(DatF,"\n"); + } + + /***** ANGLES *****/ + + if (total_no_angles > 0) { + fprintf(DatF, "Angles\n\n"); + for(k=0; k < total_no_angles; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i\n",k+1, + angles[k].type+1, + angles[k].members[0]+1, + angles[k].members[1]+1, + angles[k].members[2]+1); + fprintf(DatF, "\n"); + } + + + /***** TORSIONS *****/ + + if (total_no_dihedrals > 0) { + fprintf(DatF,"Dihedrals\n\n"); + for(k=0; k < total_no_dihedrals; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i %6i\n",k+1, + dihedrals[k].type+1, + dihedrals[k].members[0]+1, + dihedrals[k].members[1]+1, + dihedrals[k].members[2]+1, + dihedrals[k].members[3]+1); + fprintf(DatF, "\n"); + } + + /***** OUT-OF-PLANES *****/ + + if (total_no_oops+total_no_angle_angles > 0) { + fprintf(DatF,"Impropers\n\n"); + for (k=0; k < total_no_oops; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n", k+1, + oops[k].type+1, + oops[k].members[0]+1, + oops[k].members[1]+1, + oops[k].members[2]+1, + oops[k].members[3]+1); + if (forcefield == 2) { + for (k=0; k < total_no_angle_angles; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n",k+total_no_oops+1, + angleangles[k].type+no_oop_types+1, + angleangles[k].members[0]+1, + angleangles[k].members[1]+1, + angleangles[k].members[2]+1, + angleangles[k].members[3]+1); + } + fprintf(DatF, "\n"); + } + +} diff --git a/tools/msi2lmp/src/WriteDataFile01.c b/tools/msi2lmp/src/WriteDataFile01.c index ee2d5b2d6e..7d09bf8c8b 100644 --- a/tools/msi2lmp/src/WriteDataFile01.c +++ b/tools/msi2lmp/src/WriteDataFile01.c @@ -1,332 +1,332 @@ -/* -* This function creates and writes the data file to be used with LAMMPS -*/ - -#include "Msi2LMP2.h" -#include "Forcefield.h" - -void WriteDataFile01(char *nameroot,int forcefield) -{ - int i,j,k,m; - char line[MAX_LINE_LENGTH]; - FILE *DatF; - -/* Open data file */ - - sprintf(line,"%s.lammps01",rootname); - if (pflag > 0) fprintf(stderr," Writing LAMMPS 2001 data file: %s\n",line); - if( (DatF = fopen(line,"w")) == NULL ) { - fprintf(stderr,"Cannot open %s\n",line); - exit(2); - } - - - - if (forcefield == 1) total_no_angle_angles = 0; - - fprintf(DatF, "LAMMPS data file for %s\n\n", nameroot); - fprintf(DatF, " %6d atoms\n", total_no_atoms); - fprintf(DatF, " %6d bonds\n", total_no_bonds); - fprintf(DatF, " %6d angles\n",total_no_angles); - fprintf(DatF, " %6d dihedrals\n", total_no_dihedrals); - fprintf(DatF, " %6d impropers\n", total_no_oops+total_no_angle_angles); - fprintf(DatF, "\n"); - - - fprintf(DatF, " %3d atom types\n", no_atom_types); - if (no_bond_types > 0) - fprintf(DatF, " %3d bond types\n", no_bond_types); - if (no_angle_types> 0) - fprintf(DatF, " %3d angle types\n", no_angle_types); - if (no_dihedral_types > 0) fprintf (DatF," %3d dihedral types\n", - no_dihedral_types); - if (forcefield > 1) { - if ((no_oop_types + no_angleangle_types) > 0) - fprintf (DatF, " %3d improper types\n", - no_oop_types + no_angleangle_types); - } - else { - if (no_oop_types > 0) - fprintf (DatF, " %3d improper types\n", no_oop_types); - } - - fprintf(DatF, "\n"); - fprintf(DatF, " %15.9f %15.9f xlo xhi\n", pbc[0], pbc[3]); - fprintf(DatF, " %15.9f %15.9f ylo yhi\n", pbc[1], pbc[4]); - fprintf(DatF, " %15.9f %15.9f zlo zhi\n", pbc[2], pbc[5]); - - /* MASSES */ - - - fprintf(DatF, "\nMasses\n\n"); - for(k=0; k < no_atom_types; k++) - fprintf(DatF, " %3d %10.6f\n",k+1,atomtypes[k].mass); - fprintf(DatF, "\n"); - - - /* COEFFICIENTS */ - - fprintf(DatF,"Nonbond Coeffs\n\n"); - for (i=0; i < no_atom_types; i++) { - fprintf(DatF, " %3i ", i+1); - for ( j = 0; j < 2; j++) - fprintf(DatF, "%14.10f ", atomtypes[i].params[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - if (no_bond_types > 0) { - if (forcefield == 1) m = 2; - if (forcefield == 2) m = 4; - - fprintf(DatF,"Bond Coeffs\n\n"); - for (i=0; i < no_bond_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < m; j++) - fprintf(DatF, "%10.4f ", bondtypes[i].params[j]); - fprintf(DatF,"\n"); - } - fprintf(DatF, "\n"); - } - - if (no_angle_types > 0) { - - if (forcefield == 1) m = 2; - if (forcefield == 2) m = 4; - - fprintf(DatF,"Angle Coeffs\n\n"); - for (i=0; i < no_angle_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < m; j++) - - fprintf(DatF, "%10.4f ", angletypes[i].params[j]); - fprintf(DatF,"\n"); - } - fprintf(DatF, "\n"); - } - - if (no_dihedral_types > 0) { - if (forcefield == 1) m = 3; - if (forcefield == 2) m = 6; - - fprintf(DatF,"Dihedral Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < m; j++) - fprintf(DatF, "%10.4f ", dihedraltypes[i].params[j]); - fprintf(DatF,"\n"); - } - fprintf(DatF, "\n"); - } - if (forcefield == 1) { - if (no_oop_types > 0) { - fprintf(DatF,"Improper Coeffs\n\n"); - for (i=0; i < no_oop_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - } - else if (forcefield == 2) { - if ((no_oop_types + no_angleangle_types) > 0) { - fprintf(DatF,"Improper Coeffs\n\n"); - for (i=0; i < no_oop_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 2; j++) - fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); - fprintf(DatF, "\n"); - } - for (i=0; i < no_angleangle_types; i++) { - fprintf(DatF, "%3i ", i+no_oop_types+1); - for ( j = 0; j < 2; j++) - fprintf(DatF, "%10.4f ", 0.0); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - } - if (forcefield == 2) { - - if (no_angle_types > 0) { - fprintf(DatF,"BondBond Coeffs\n\n"); - for (i=0; i < no_angle_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF, "%10.4f ", angletypes[i].bondbond_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"BondAngle Coeffs\n\n"); - - for (i=0; i < no_angle_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 4; j++) - fprintf(DatF, "%10.4f ",angletypes[i].bondangle_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - - if ((no_oop_types+no_angleangle_types) > 0) { - fprintf(DatF,"AngleAngle Coeffs\n\n"); - for (i=0; i < no_oop_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 6; j++) - fprintf(DatF, "%10.4f ", ooptypes[i].angleangle_params[j]); - fprintf(DatF, "\n"); - } - for (i=0; i < no_angleangle_types; i++) { - fprintf(DatF, "%3i ", i+no_oop_types+1); - for ( j = 0; j < 6; j++) - fprintf(DatF, "%10.4f ", angleangletypes[i].params[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - - if (no_dihedral_types > 0) { - fprintf(DatF,"AngleAngleTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF,"%10.4f ", - dihedraltypes[i].angleangledihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"EndBondTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%i ", i+1); - for ( j = 0; j < 8; j++) - fprintf(DatF, "%10.4f ", - dihedraltypes[i].endbonddihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"MiddleBondTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 4; j++) - fprintf(DatF,"%10.4f ", - dihedraltypes[i].midbonddihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - - fprintf(DatF,"BondBond13 Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF, "%10.4f ", - dihedraltypes[i].bond13_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"AngleTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 8; j++) - fprintf(DatF, "%10.4f ", - dihedraltypes[i].angledihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - } - - /*--------------------------------------------------------------------*/ - - /* ATOMS */ - - fprintf(DatF, "Atoms\n\n"); - for(k=0; k < total_no_atoms; k++) { - fprintf(DatF, " %6i %6i %3i %9.6f %15.9f %15.9f %15.9f\n", - k+1, - atoms[k].molecule, - atoms[k].type+1, - atoms[k].q, - atoms[k].x[0], - atoms[k].x[1], - atoms[k].x[2]); - } - fprintf(DatF, "\n"); - - /***** BONDS *****/ - - if (total_no_bonds > 0) { - fprintf(DatF, "Bonds\n\n"); - for(k=0; k < total_no_bonds; k++) - fprintf(DatF, "%6i %3i %6i %6i\n",k+1, - bonds[k].type+1, - bonds[k].members[0]+1, - bonds[k].members[1]+1); - fprintf(DatF,"\n"); - } - - /***** ANGLES *****/ - - if (total_no_angles > 0) { - fprintf(DatF, "Angles\n\n"); - for(k=0; k < total_no_angles; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i\n",k+1, - angles[k].type+1, - angles[k].members[0]+1, - angles[k].members[1]+1, - angles[k].members[2]+1); - fprintf(DatF, "\n"); - } - - - /***** TORSIONS *****/ - - if (total_no_dihedrals > 0) { - fprintf(DatF,"Dihedrals\n\n"); - for(k=0; k < total_no_dihedrals; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i %6i\n",k+1, - dihedrals[k].type+1, - dihedrals[k].members[0]+1, - dihedrals[k].members[1]+1, - dihedrals[k].members[2]+1, - dihedrals[k].members[3]+1); - fprintf(DatF, "\n"); - } - - /***** OUT-OF-PLANES *****/ - - if (total_no_oops+total_no_angle_angles > 0) { - fprintf(DatF,"Impropers\n\n"); - for (k=0; k < total_no_oops; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n", k+1, - oops[k].type+1, - oops[k].members[0]+1, - oops[k].members[1]+1, - oops[k].members[2]+1, - oops[k].members[3]+1); - if (forcefield == 2) { - for (k=0; k < total_no_angle_angles; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n",k+total_no_oops+1, - angleangles[k].type+no_oop_types+1, - angleangles[k].members[0]+1, - angleangles[k].members[1]+1, - angleangles[k].members[2]+1, - angleangles[k].members[3]+1); - } - fprintf(DatF, "\n"); - } - -/* Close data file */ - - if (fclose(DatF) !=0) { - fprintf(stderr,"Error closing %s.lammps01\n", rootname); - exit(1); - } - -} +/* +* This function creates and writes the data file to be used with LAMMPS +*/ + +#include "Msi2LMP2.h" +#include "Forcefield.h" + +void WriteDataFile01(char *nameroot,int forcefield) +{ + int i,j,k,m; + char line[MAX_LINE_LENGTH]; + FILE *DatF; + +/* Open data file */ + + sprintf(line,"%s.lammps01",rootname); + if (pflag > 0) fprintf(stderr," Writing LAMMPS 2001 data file: %s\n",line); + if( (DatF = fopen(line,"w")) == NULL ) { + fprintf(stderr,"Cannot open %s\n",line); + exit(2); + } + + + + if (forcefield == 1) total_no_angle_angles = 0; + + fprintf(DatF, "LAMMPS data file for %s\n\n", nameroot); + fprintf(DatF, " %6d atoms\n", total_no_atoms); + fprintf(DatF, " %6d bonds\n", total_no_bonds); + fprintf(DatF, " %6d angles\n",total_no_angles); + fprintf(DatF, " %6d dihedrals\n", total_no_dihedrals); + fprintf(DatF, " %6d impropers\n", total_no_oops+total_no_angle_angles); + fprintf(DatF, "\n"); + + + fprintf(DatF, " %3d atom types\n", no_atom_types); + if (no_bond_types > 0) + fprintf(DatF, " %3d bond types\n", no_bond_types); + if (no_angle_types> 0) + fprintf(DatF, " %3d angle types\n", no_angle_types); + if (no_dihedral_types > 0) fprintf (DatF," %3d dihedral types\n", + no_dihedral_types); + if (forcefield > 1) { + if ((no_oop_types + no_angleangle_types) > 0) + fprintf (DatF, " %3d improper types\n", + no_oop_types + no_angleangle_types); + } + else { + if (no_oop_types > 0) + fprintf (DatF, " %3d improper types\n", no_oop_types); + } + + fprintf(DatF, "\n"); + fprintf(DatF, " %15.9f %15.9f xlo xhi\n", pbc[0], pbc[3]); + fprintf(DatF, " %15.9f %15.9f ylo yhi\n", pbc[1], pbc[4]); + fprintf(DatF, " %15.9f %15.9f zlo zhi\n", pbc[2], pbc[5]); + + /* MASSES */ + + + fprintf(DatF, "\nMasses\n\n"); + for(k=0; k < no_atom_types; k++) + fprintf(DatF, " %3d %10.6f\n",k+1,atomtypes[k].mass); + fprintf(DatF, "\n"); + + + /* COEFFICIENTS */ + + fprintf(DatF,"Nonbond Coeffs\n\n"); + for (i=0; i < no_atom_types; i++) { + fprintf(DatF, " %3i ", i+1); + for ( j = 0; j < 2; j++) + fprintf(DatF, "%14.10f ", atomtypes[i].params[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + if (no_bond_types > 0) { + if (forcefield == 1) m = 2; + if (forcefield == 2) m = 4; + + fprintf(DatF,"Bond Coeffs\n\n"); + for (i=0; i < no_bond_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < m; j++) + fprintf(DatF, "%10.4f ", bondtypes[i].params[j]); + fprintf(DatF,"\n"); + } + fprintf(DatF, "\n"); + } + + if (no_angle_types > 0) { + + if (forcefield == 1) m = 2; + if (forcefield == 2) m = 4; + + fprintf(DatF,"Angle Coeffs\n\n"); + for (i=0; i < no_angle_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < m; j++) + + fprintf(DatF, "%10.4f ", angletypes[i].params[j]); + fprintf(DatF,"\n"); + } + fprintf(DatF, "\n"); + } + + if (no_dihedral_types > 0) { + if (forcefield == 1) m = 3; + if (forcefield == 2) m = 6; + + fprintf(DatF,"Dihedral Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < m; j++) + fprintf(DatF, "%10.4f ", dihedraltypes[i].params[j]); + fprintf(DatF,"\n"); + } + fprintf(DatF, "\n"); + } + if (forcefield == 1) { + if (no_oop_types > 0) { + fprintf(DatF,"Improper Coeffs\n\n"); + for (i=0; i < no_oop_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + } + else if (forcefield == 2) { + if ((no_oop_types + no_angleangle_types) > 0) { + fprintf(DatF,"Improper Coeffs\n\n"); + for (i=0; i < no_oop_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 2; j++) + fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); + fprintf(DatF, "\n"); + } + for (i=0; i < no_angleangle_types; i++) { + fprintf(DatF, "%3i ", i+no_oop_types+1); + for ( j = 0; j < 2; j++) + fprintf(DatF, "%10.4f ", 0.0); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + } + if (forcefield == 2) { + + if (no_angle_types > 0) { + fprintf(DatF,"BondBond Coeffs\n\n"); + for (i=0; i < no_angle_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF, "%10.4f ", angletypes[i].bondbond_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"BondAngle Coeffs\n\n"); + + for (i=0; i < no_angle_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 4; j++) + fprintf(DatF, "%10.4f ",angletypes[i].bondangle_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + + if ((no_oop_types+no_angleangle_types) > 0) { + fprintf(DatF,"AngleAngle Coeffs\n\n"); + for (i=0; i < no_oop_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 6; j++) + fprintf(DatF, "%10.4f ", ooptypes[i].angleangle_params[j]); + fprintf(DatF, "\n"); + } + for (i=0; i < no_angleangle_types; i++) { + fprintf(DatF, "%3i ", i+no_oop_types+1); + for ( j = 0; j < 6; j++) + fprintf(DatF, "%10.4f ", angleangletypes[i].params[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + + if (no_dihedral_types > 0) { + fprintf(DatF,"AngleAngleTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF,"%10.4f ", + dihedraltypes[i].angleangledihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"EndBondTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%i ", i+1); + for ( j = 0; j < 8; j++) + fprintf(DatF, "%10.4f ", + dihedraltypes[i].endbonddihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"MiddleBondTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 4; j++) + fprintf(DatF,"%10.4f ", + dihedraltypes[i].midbonddihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + + fprintf(DatF,"BondBond13 Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF, "%10.4f ", + dihedraltypes[i].bond13_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"AngleTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 8; j++) + fprintf(DatF, "%10.4f ", + dihedraltypes[i].angledihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + } + + /*--------------------------------------------------------------------*/ + + /* ATOMS */ + + fprintf(DatF, "Atoms\n\n"); + for(k=0; k < total_no_atoms; k++) { + fprintf(DatF, " %6i %6i %3i %9.6f %15.9f %15.9f %15.9f\n", + k+1, + atoms[k].molecule, + atoms[k].type+1, + atoms[k].q, + atoms[k].x[0], + atoms[k].x[1], + atoms[k].x[2]); + } + fprintf(DatF, "\n"); + + /***** BONDS *****/ + + if (total_no_bonds > 0) { + fprintf(DatF, "Bonds\n\n"); + for(k=0; k < total_no_bonds; k++) + fprintf(DatF, "%6i %3i %6i %6i\n",k+1, + bonds[k].type+1, + bonds[k].members[0]+1, + bonds[k].members[1]+1); + fprintf(DatF,"\n"); + } + + /***** ANGLES *****/ + + if (total_no_angles > 0) { + fprintf(DatF, "Angles\n\n"); + for(k=0; k < total_no_angles; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i\n",k+1, + angles[k].type+1, + angles[k].members[0]+1, + angles[k].members[1]+1, + angles[k].members[2]+1); + fprintf(DatF, "\n"); + } + + + /***** TORSIONS *****/ + + if (total_no_dihedrals > 0) { + fprintf(DatF,"Dihedrals\n\n"); + for(k=0; k < total_no_dihedrals; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i %6i\n",k+1, + dihedrals[k].type+1, + dihedrals[k].members[0]+1, + dihedrals[k].members[1]+1, + dihedrals[k].members[2]+1, + dihedrals[k].members[3]+1); + fprintf(DatF, "\n"); + } + + /***** OUT-OF-PLANES *****/ + + if (total_no_oops+total_no_angle_angles > 0) { + fprintf(DatF,"Impropers\n\n"); + for (k=0; k < total_no_oops; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n", k+1, + oops[k].type+1, + oops[k].members[0]+1, + oops[k].members[1]+1, + oops[k].members[2]+1, + oops[k].members[3]+1); + if (forcefield == 2) { + for (k=0; k < total_no_angle_angles; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n",k+total_no_oops+1, + angleangles[k].type+no_oop_types+1, + angleangles[k].members[0]+1, + angleangles[k].members[1]+1, + angleangles[k].members[2]+1, + angleangles[k].members[3]+1); + } + fprintf(DatF, "\n"); + } + +/* Close data file */ + + if (fclose(DatF) !=0) { + fprintf(stderr,"Error closing %s.lammps01\n", rootname); + exit(1); + } + +} diff --git a/tools/msi2lmp/src/WriteDataFile05.c b/tools/msi2lmp/src/WriteDataFile05.c index c668a32cc8..ac195803b3 100644 --- a/tools/msi2lmp/src/WriteDataFile05.c +++ b/tools/msi2lmp/src/WriteDataFile05.c @@ -1,333 +1,333 @@ -/* -* This function creates and writes the data file to be used with LAMMPS -*/ - -#include "Msi2LMP2.h" -#include "Forcefield.h" - -void WriteDataFile05(char *nameroot,int forcefield) -{ - int i,j,k,m; - char line[MAX_LINE_LENGTH]; - FILE *DatF; - -/* Open data file */ - - sprintf(line,"%s.lammps05",rootname); - if (pflag > 0) fprintf(stderr," Writing LAMMPS 2005 data file: %s\n",line); - if( (DatF = fopen(line,"w")) == NULL ) { - fprintf(stderr,"Cannot open %s\n",line); - exit(2); - } - - - - if (forcefield == 1) total_no_angle_angles = 0; - - fprintf(DatF, "LAMMPS 2005 data file for %s\n\n", nameroot); - fprintf(DatF, " %6d atoms\n", total_no_atoms); - fprintf(DatF, " %6d bonds\n", total_no_bonds); - fprintf(DatF, " %6d angles\n",total_no_angles); - fprintf(DatF, " %6d dihedrals\n", total_no_dihedrals); - fprintf(DatF, " %6d impropers\n", total_no_oops+total_no_angle_angles); - fprintf(DatF, "\n"); - - - fprintf(DatF, " %3d atom types\n", no_atom_types); - if (no_bond_types > 0) - fprintf(DatF, " %3d bond types\n", no_bond_types); - if (no_angle_types> 0) - fprintf(DatF, " %3d angle types\n", no_angle_types); - if (no_dihedral_types > 0) fprintf (DatF," %3d dihedral types\n", - no_dihedral_types); - if (forcefield > 1) { - if ((no_oop_types + no_angleangle_types) > 0) - fprintf (DatF, " %3d improper types\n", - no_oop_types + no_angleangle_types); - } - else { - if (no_oop_types > 0) - fprintf (DatF, " %3d improper types\n", no_oop_types); - } - - fprintf(DatF, "\n"); - fprintf(DatF, " %15.9f %15.9f xlo xhi\n", pbc[0], pbc[3]); - fprintf(DatF, " %15.9f %15.9f ylo yhi\n", pbc[1], pbc[4]); - fprintf(DatF, " %15.9f %15.9f zlo zhi\n", pbc[2], pbc[5]); - - /* MASSES */ - - - fprintf(DatF, "\nMasses\n\n"); - for(k=0; k < no_atom_types; k++) - fprintf(DatF, " %3d %10.6f\n",k+1,atomtypes[k].mass); - fprintf(DatF, "\n"); - - - /* COEFFICIENTS */ - - fprintf(DatF,"Pair Coeffs\n\n"); - for (i=0; i < no_atom_types; i++) { - fprintf(DatF, " %3i ", i+1); - for ( j = 0; j < 2; j++) - fprintf(DatF, "%14.10f ", atomtypes[i].params[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - if (no_bond_types > 0) { - if (forcefield == 1) m = 2; - if (forcefield == 2) m = 4; - - fprintf(DatF,"Bond Coeffs\n\n"); - for (i=0; i < no_bond_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < m; j++) - fprintf(DatF, "%10.4f ", bondtypes[i].params[j]); - fprintf(DatF,"\n"); - } - fprintf(DatF, "\n"); - } - - if (no_angle_types > 0) { - - if (forcefield == 1) m = 2; - if (forcefield == 2) m = 4; - - fprintf(DatF,"Angle Coeffs\n\n"); - for (i=0; i < no_angle_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < m; j++) - - fprintf(DatF, "%10.4f ", angletypes[i].params[j]); - fprintf(DatF,"\n"); - } - fprintf(DatF, "\n"); - } - - if (no_dihedral_types > 0) { - if (forcefield == 1) m = 3; - if (forcefield == 2) m = 6; - - fprintf(DatF,"Dihedral Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < m; j++) - fprintf(DatF, "%10.4f ", dihedraltypes[i].params[j]); - fprintf(DatF,"\n"); - } - fprintf(DatF, "\n"); - } - if (forcefield == 1) { - if (no_oop_types > 0) { - fprintf(DatF,"Improper Coeffs\n\n"); - for (i=0; i < no_oop_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - } - else if (forcefield == 2) { - if ((no_oop_types + no_angleangle_types) > 0) { - fprintf(DatF,"Improper Coeffs\n\n"); - for (i=0; i < no_oop_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 2; j++) - fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); - fprintf(DatF, "\n"); - } - for (i=0; i < no_angleangle_types; i++) { - fprintf(DatF, "%3i ", i+no_oop_types+1); - for ( j = 0; j < 2; j++) - fprintf(DatF, "%10.4f ", 0.0); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - } - if (forcefield == 2) { - - if (no_angle_types > 0) { - fprintf(DatF,"BondBond Coeffs\n\n"); - for (i=0; i < no_angle_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF, "%10.4f ", angletypes[i].bondbond_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"BondAngle Coeffs\n\n"); - - for (i=0; i < no_angle_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 4; j++) - fprintf(DatF, "%10.4f ",angletypes[i].bondangle_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - - if ((no_oop_types+no_angleangle_types) > 0) { - fprintf(DatF,"AngleAngle Coeffs\n\n"); - for (i=0; i < no_oop_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 6; j++) - fprintf(DatF, "%10.4f ", ooptypes[i].angleangle_params[j]); - fprintf(DatF, "\n"); - } - for (i=0; i < no_angleangle_types; i++) { - fprintf(DatF, "%3i ", i+no_oop_types+1); - for ( j = 0; j < 6; j++) - fprintf(DatF, "%10.4f ", angleangletypes[i].params[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - - if (no_dihedral_types > 0) { - fprintf(DatF,"AngleAngleTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF,"%10.4f ", - dihedraltypes[i].angleangledihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"EndBondTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%i ", i+1); - for ( j = 0; j < 8; j++) - fprintf(DatF, "%10.4f ", - dihedraltypes[i].endbonddihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"MiddleBondTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 4; j++) - fprintf(DatF,"%10.4f ", - dihedraltypes[i].midbonddihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - - fprintf(DatF,"BondBond13 Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 3; j++) - fprintf(DatF, "%10.4f ", - dihedraltypes[i].bond13_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - - fprintf(DatF,"AngleTorsion Coeffs\n\n"); - for (i=0; i < no_dihedral_types; i++) { - fprintf(DatF, "%3i ", i+1); - for ( j = 0; j < 8; j++) - fprintf(DatF, "%10.4f ", - dihedraltypes[i].angledihedral_cross_term[j]); - fprintf(DatF, "\n"); - } - fprintf(DatF, "\n"); - } - } - - /*--------------------------------------------------------------------*/ - - /* ATOMS */ - - fprintf(DatF, "Atoms\n\n"); - for(k=0; k < total_no_atoms; k++) { - fprintf(DatF, " %6i %6i %3i %9.6f %15.9f %15.9f %15.9f\n", - k+1, - atoms[k].molecule, - atoms[k].type+1, - atoms[k].q, - atoms[k].x[0], - atoms[k].x[1], - atoms[k].x[2]); - } - fprintf(DatF, "\n"); - - /***** BONDS *****/ - - if (total_no_bonds > 0) { - fprintf(DatF, "Bonds\n\n"); - for(k=0; k < total_no_bonds; k++) - fprintf(DatF, "%6i %3i %6i %6i\n",k+1, - bonds[k].type+1, - bonds[k].members[0]+1, - bonds[k].members[1]+1); - fprintf(DatF,"\n"); - } - - /***** ANGLES *****/ - - if (total_no_angles > 0) { - fprintf(DatF, "Angles\n\n"); - for(k=0; k < total_no_angles; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i\n",k+1, - angles[k].type+1, - angles[k].members[0]+1, - angles[k].members[1]+1, - angles[k].members[2]+1); - fprintf(DatF, "\n"); - } - - - /***** TORSIONS *****/ - - if (total_no_dihedrals > 0) { - fprintf(DatF,"Dihedrals\n\n"); - for(k=0; k < total_no_dihedrals; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i %6i\n",k+1, - dihedrals[k].type+1, - dihedrals[k].members[0]+1, - dihedrals[k].members[1]+1, - dihedrals[k].members[2]+1, - dihedrals[k].members[3]+1); - fprintf(DatF, "\n"); - } - - /***** OUT-OF-PLANES *****/ - - if (total_no_oops+total_no_angle_angles > 0) { - fprintf(DatF,"Impropers\n\n"); - for (k=0; k < total_no_oops; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n", k+1, - oops[k].type+1, - oops[k].members[0]+1, - oops[k].members[1]+1, - oops[k].members[2]+1, - oops[k].members[3]+1); - if (forcefield == 2) { - for (k=0; k < total_no_angle_angles; k++) - fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n",k+total_no_oops+1, - angleangles[k].type+no_oop_types+1, - angleangles[k].members[0]+1, - angleangles[k].members[1]+1, - angleangles[k].members[2]+1, - angleangles[k].members[3]+1); - } - fprintf(DatF, "\n"); - } - -/* Close data file */ - - if (fclose(DatF) !=0) { - fprintf(stderr,"Error closing %s.lammps05\n", rootname); - exit(1); - } - -} - +/* +* This function creates and writes the data file to be used with LAMMPS +*/ + +#include "Msi2LMP2.h" +#include "Forcefield.h" + +void WriteDataFile05(char *nameroot,int forcefield) +{ + int i,j,k,m; + char line[MAX_LINE_LENGTH]; + FILE *DatF; + +/* Open data file */ + + sprintf(line,"%s.lammps05",rootname); + if (pflag > 0) fprintf(stderr," Writing LAMMPS 2005 data file: %s\n",line); + if( (DatF = fopen(line,"w")) == NULL ) { + fprintf(stderr,"Cannot open %s\n",line); + exit(2); + } + + + + if (forcefield == 1) total_no_angle_angles = 0; + + fprintf(DatF, "LAMMPS 2005 data file for %s\n\n", nameroot); + fprintf(DatF, " %6d atoms\n", total_no_atoms); + fprintf(DatF, " %6d bonds\n", total_no_bonds); + fprintf(DatF, " %6d angles\n",total_no_angles); + fprintf(DatF, " %6d dihedrals\n", total_no_dihedrals); + fprintf(DatF, " %6d impropers\n", total_no_oops+total_no_angle_angles); + fprintf(DatF, "\n"); + + + fprintf(DatF, " %3d atom types\n", no_atom_types); + if (no_bond_types > 0) + fprintf(DatF, " %3d bond types\n", no_bond_types); + if (no_angle_types> 0) + fprintf(DatF, " %3d angle types\n", no_angle_types); + if (no_dihedral_types > 0) fprintf (DatF," %3d dihedral types\n", + no_dihedral_types); + if (forcefield > 1) { + if ((no_oop_types + no_angleangle_types) > 0) + fprintf (DatF, " %3d improper types\n", + no_oop_types + no_angleangle_types); + } + else { + if (no_oop_types > 0) + fprintf (DatF, " %3d improper types\n", no_oop_types); + } + + fprintf(DatF, "\n"); + fprintf(DatF, " %15.9f %15.9f xlo xhi\n", pbc[0], pbc[3]); + fprintf(DatF, " %15.9f %15.9f ylo yhi\n", pbc[1], pbc[4]); + fprintf(DatF, " %15.9f %15.9f zlo zhi\n", pbc[2], pbc[5]); + + /* MASSES */ + + + fprintf(DatF, "\nMasses\n\n"); + for(k=0; k < no_atom_types; k++) + fprintf(DatF, " %3d %10.6f\n",k+1,atomtypes[k].mass); + fprintf(DatF, "\n"); + + + /* COEFFICIENTS */ + + fprintf(DatF,"Pair Coeffs\n\n"); + for (i=0; i < no_atom_types; i++) { + fprintf(DatF, " %3i ", i+1); + for ( j = 0; j < 2; j++) + fprintf(DatF, "%14.10f ", atomtypes[i].params[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + if (no_bond_types > 0) { + if (forcefield == 1) m = 2; + if (forcefield == 2) m = 4; + + fprintf(DatF,"Bond Coeffs\n\n"); + for (i=0; i < no_bond_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < m; j++) + fprintf(DatF, "%10.4f ", bondtypes[i].params[j]); + fprintf(DatF,"\n"); + } + fprintf(DatF, "\n"); + } + + if (no_angle_types > 0) { + + if (forcefield == 1) m = 2; + if (forcefield == 2) m = 4; + + fprintf(DatF,"Angle Coeffs\n\n"); + for (i=0; i < no_angle_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < m; j++) + + fprintf(DatF, "%10.4f ", angletypes[i].params[j]); + fprintf(DatF,"\n"); + } + fprintf(DatF, "\n"); + } + + if (no_dihedral_types > 0) { + if (forcefield == 1) m = 3; + if (forcefield == 2) m = 6; + + fprintf(DatF,"Dihedral Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < m; j++) + fprintf(DatF, "%10.4f ", dihedraltypes[i].params[j]); + fprintf(DatF,"\n"); + } + fprintf(DatF, "\n"); + } + if (forcefield == 1) { + if (no_oop_types > 0) { + fprintf(DatF,"Improper Coeffs\n\n"); + for (i=0; i < no_oop_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + } + else if (forcefield == 2) { + if ((no_oop_types + no_angleangle_types) > 0) { + fprintf(DatF,"Improper Coeffs\n\n"); + for (i=0; i < no_oop_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 2; j++) + fprintf(DatF, "%10.4f ", ooptypes[i].params[j]); + fprintf(DatF, "\n"); + } + for (i=0; i < no_angleangle_types; i++) { + fprintf(DatF, "%3i ", i+no_oop_types+1); + for ( j = 0; j < 2; j++) + fprintf(DatF, "%10.4f ", 0.0); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + } + if (forcefield == 2) { + + if (no_angle_types > 0) { + fprintf(DatF,"BondBond Coeffs\n\n"); + for (i=0; i < no_angle_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF, "%10.4f ", angletypes[i].bondbond_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"BondAngle Coeffs\n\n"); + + for (i=0; i < no_angle_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 4; j++) + fprintf(DatF, "%10.4f ",angletypes[i].bondangle_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + + if ((no_oop_types+no_angleangle_types) > 0) { + fprintf(DatF,"AngleAngle Coeffs\n\n"); + for (i=0; i < no_oop_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 6; j++) + fprintf(DatF, "%10.4f ", ooptypes[i].angleangle_params[j]); + fprintf(DatF, "\n"); + } + for (i=0; i < no_angleangle_types; i++) { + fprintf(DatF, "%3i ", i+no_oop_types+1); + for ( j = 0; j < 6; j++) + fprintf(DatF, "%10.4f ", angleangletypes[i].params[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + + if (no_dihedral_types > 0) { + fprintf(DatF,"AngleAngleTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF,"%10.4f ", + dihedraltypes[i].angleangledihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"EndBondTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%i ", i+1); + for ( j = 0; j < 8; j++) + fprintf(DatF, "%10.4f ", + dihedraltypes[i].endbonddihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"MiddleBondTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 4; j++) + fprintf(DatF,"%10.4f ", + dihedraltypes[i].midbonddihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + + fprintf(DatF,"BondBond13 Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 3; j++) + fprintf(DatF, "%10.4f ", + dihedraltypes[i].bond13_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + + fprintf(DatF,"AngleTorsion Coeffs\n\n"); + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i ", i+1); + for ( j = 0; j < 8; j++) + fprintf(DatF, "%10.4f ", + dihedraltypes[i].angledihedral_cross_term[j]); + fprintf(DatF, "\n"); + } + fprintf(DatF, "\n"); + } + } + + /*--------------------------------------------------------------------*/ + + /* ATOMS */ + + fprintf(DatF, "Atoms\n\n"); + for(k=0; k < total_no_atoms; k++) { + fprintf(DatF, " %6i %6i %3i %9.6f %15.9f %15.9f %15.9f\n", + k+1, + atoms[k].molecule, + atoms[k].type+1, + atoms[k].q, + atoms[k].x[0], + atoms[k].x[1], + atoms[k].x[2]); + } + fprintf(DatF, "\n"); + + /***** BONDS *****/ + + if (total_no_bonds > 0) { + fprintf(DatF, "Bonds\n\n"); + for(k=0; k < total_no_bonds; k++) + fprintf(DatF, "%6i %3i %6i %6i\n",k+1, + bonds[k].type+1, + bonds[k].members[0]+1, + bonds[k].members[1]+1); + fprintf(DatF,"\n"); + } + + /***** ANGLES *****/ + + if (total_no_angles > 0) { + fprintf(DatF, "Angles\n\n"); + for(k=0; k < total_no_angles; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i\n",k+1, + angles[k].type+1, + angles[k].members[0]+1, + angles[k].members[1]+1, + angles[k].members[2]+1); + fprintf(DatF, "\n"); + } + + + /***** TORSIONS *****/ + + if (total_no_dihedrals > 0) { + fprintf(DatF,"Dihedrals\n\n"); + for(k=0; k < total_no_dihedrals; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i %6i\n",k+1, + dihedrals[k].type+1, + dihedrals[k].members[0]+1, + dihedrals[k].members[1]+1, + dihedrals[k].members[2]+1, + dihedrals[k].members[3]+1); + fprintf(DatF, "\n"); + } + + /***** OUT-OF-PLANES *****/ + + if (total_no_oops+total_no_angle_angles > 0) { + fprintf(DatF,"Impropers\n\n"); + for (k=0; k < total_no_oops; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n", k+1, + oops[k].type+1, + oops[k].members[0]+1, + oops[k].members[1]+1, + oops[k].members[2]+1, + oops[k].members[3]+1); + if (forcefield == 2) { + for (k=0; k < total_no_angle_angles; k++) + fprintf(DatF, "%6i %3i %6i %6i %6i %6i \n",k+total_no_oops+1, + angleangles[k].type+no_oop_types+1, + angleangles[k].members[0]+1, + angleangles[k].members[1]+1, + angleangles[k].members[2]+1, + angleangles[k].members[3]+1); + } + fprintf(DatF, "\n"); + } + +/* Close data file */ + + if (fclose(DatF) !=0) { + fprintf(stderr,"Error closing %s.lammps05\n", rootname); + exit(1); + } + +} + diff --git a/tools/msi2lmp/src/msi2lmp.c b/tools/msi2lmp/src/msi2lmp.c index 776ea008d1..1a7508a1bc 100644 --- a/tools/msi2lmp/src/msi2lmp.c +++ b/tools/msi2lmp/src/msi2lmp.c @@ -1,275 +1,275 @@ -/* -* -* msi2lmp.exe V3.6 -* -* v3.6 KLA - Changes to output to either lammps 2001 (F90 version) or to -* lammps 2005 (C++ version) -* -* v3.4 JEC - a number of minor changes due to way newline and EOF are generated -* on Materials Studio generated .car and .mdf files as well as odd -* behavior out of newer Linux IO libraries. ReadMdfFile was restructured -* in the process. -* -* v3.1 JEC - changed IO interface to standard in/out, forcefield file -* location can be indicated by environmental variable; added -* printing options, consistency checks and forcefield -* parameter versions sensitivity (highest one used) -* -* v3.0 JEC - program substantially rewritten to reduce execution time -* and be 98 % dynamic in memory use (still fixed limits on -* number of parameter types for different internal coordinate -* sets) -* -* v2.0 MDP - got internal coordinate information from mdf file and -* forcefield parameters from frc file thus eliminating -* need for Discover -* -* V1.0 SL - original version. Used .car file and internal coordinate -* information from Discover to produce LAMMPS data file. -* -* This program uses the .car and .mdf files from MSI/Biosyms's INSIGHT -* program to produce a LAMMPS data file. -* -* The program is started by supplying information at the command prompt -* according to the usage described below. -* -* USAGE: msi2lmp3 ROOTNAME {-print #} {-class #} {-frc FRC_FILE} -2001 -* -* -- msi2lmp3 is the name of the executable -* -- ROOTNAME is the base name of the .car and .mdf files -* -* -- -print -* # is the print level: 0 - silent except for errors -* 1 - minimal (default) -* 2 - more verbose -* -- -class -* # is the class of forcefield to use (I = Class I e.g., CVFF) -* (II = Class II e.g., CFFx ) -* default is -class I -* -* -- -frc - specifies name of the forcefield file (e.g., cff91) -* -* If the name includes a hard wired directory (i.e., if the name -* starts with . or /), then the name is used alone. Otherwise, -* the program looks for the forcefield file in $BIOSYM_LIBRARY. -* If $BIOSYM_LIBRARY is not set, then the current directory is -* used. -* -* If the file name does not include a dot after the first -* character, then .frc is appended to the name. -* -* For example, -frc cvff (assumes cvff.frc is in $BIOSYM_LIBRARY -* or .) -* -* -frc cff/cff91 (assumes cff91.frc is in -* $BIOSYM_LIBRARY/cff or ./cff) -* -* -frc /usr/local/biosym/forcefields/cff95 (absolute -* location) -* -* By default, the program uses $BIOSYM_LIBRARY/cvff.frc -* -* -- -2001 will output a data file for the FORTRAN 90 version of LAMMPS (2001) -* By default, the program will output for the C++ version of LAMMPS. -* -* -- output is written to a file called ROOTNAME.lammps{01/05} -* -* -**************************************************************** -* -* Msi2lmp3 -* -* This is the third version of a program that generates a LAMMPS -* data file based on the information in a MSI car file (atom -* coordinates) and mdf file (molecular topology). A key part of -* the program looks up forcefield parameters from an MSI frc file. -* -* The first version was written by Steve Lustig at Dupont, but -* required using Discover to derive internal coordinates and -* forcefield parameters -* -* The second version was written by Michael Peachey while an -* in intern in the Cray Chemistry Applications Group managed -* by John Carpenter. This version derived internal coordinates -* from the mdf file and looked up parameters in the frc file -* thus eliminating the need for Discover. -* -* The third version was written by John Carpenter to optimize -* the performance of the program for large molecular systems -* (the original code for deriving atom numbers was quadratic in time) -* and to make the program fully dynamic. The second version used -* fixed dimension arrays for the internal coordinates. -* -* John Carpenter can be contacted by sending email to -* jec374@earthlink.net -* -* November 2000 -*/ - -#define MAIN - -#include "Msi2LMP2.h" - -int main (int argc, char *argv[]) -{ - int n,i,found_dot; /* Counter */ - int outv; - char *string; - char *frc_dir_name; - char *frc_file_name; - FILE *DatF; - - /* Functions called from within main */ - -/* All code is located in .c file with function name */ - extern void FrcMenu(); - extern void ReadCarFile(); - extern void ReadMdfFile(); - extern void ReadFrcFile(); - extern void MakeLists(); - extern void GetParameters(int); - extern void CheckLists(); - extern void WriteDataFile(FILE *,char *,int); - - - outv = 2005; - pflag = 1; - forcefield = 1; /* Variable that identifies forcefield to use */ - - frc_file_name = (char *) calloc(160,sizeof(char)); - frc_dir_name = (char *) calloc(160,sizeof(char)); - - frc_dir_name = getenv("BIOSYM_LIBRARY"); - - if (frc_dir_name == NULL) { - frc_file_name = strcpy(frc_file_name,"./cvff.frc"); - } - else { - for (i=0; i < strlen(frc_dir_name); i++) - frc_file_name[i] = frc_dir_name[i]; - frc_file_name = strcat(frc_file_name,"/cvff.frc"); - } - - if (argc < 2) { /* If no rootname was supplied, prompt for it */ - fprintf(stderr,"The rootname of the .car and .mdf files must be entered\n"); - } - else /* rootname was supplied as first argument, copy to rootname */ - sprintf(rootname,"%s",argv[1]); - - n = 2; - while (n < argc) { - if (strcmp(argv[n],"-class") == 0) { - if (strcmp(argv[n+1],"I") == 0) { - forcefield = 1; - n++; - } - else if (strcmp(argv[n+1],"II") == 0) { - forcefield = 2; - n++; - } - else { - fprintf(stderr,"Unrecognized Forcefield class: %s\n", - argv[n+1]); - n++; - } - } - else if (strcmp(argv[n],"-2001") == 0) { - outv = 2001; - n++; - } - else if (strcmp(argv[n],"-frc") == 0) { - if ((frc_dir_name != NULL) && (argv[n+1][0] != '.')) { - for (i=0; i < strlen(frc_dir_name); i++) { - frc_file_name[i] = frc_dir_name[i]; - } - frc_file_name[strlen(frc_dir_name)] = '\0'; - frc_file_name = strcat(frc_file_name,"/"); - frc_file_name = strcat(frc_file_name,argv[n+1]); - } - else { - frc_file_name = strcpy(frc_file_name,argv[n+1]); - } - found_dot = 0; - for (i=1; i < strlen(frc_file_name); i++) { - if (frc_file_name[i] == '.') found_dot = 1; - } - if (found_dot == 0) - frc_file_name = strcat(frc_file_name,".frc"); - n++; - } - else if (strstr(argv[n],"-p") != NULL) { - pflag = atoi(argv[n+1]); - n++; - } - else { - fprintf(stderr,"Unrecognized option: %s\n",argv[n]); - } - n++; - } - for (i=0; i < strlen(frc_file_name); i++) - FrcFileName[i] = frc_file_name[i]; - free(frc_file_name); - - if (pflag > 0) { - fprintf(stderr,"\nRunning Msi2lmp.....\n\n"); - fprintf(stderr," Forcefield file name: %s\n",FrcFileName); - fprintf(stderr," Forcefield class: %d\n\n",forcefield); - } - - if (((forcefield == 1) && (strstr(FrcFileName,"cff") != NULL) || - (forcefield == 2) && (strstr(FrcFileName,"cvff") != NULL))) { - fprintf(stderr," WARNING - forcefield name and class appear to\n"); - fprintf(stderr," be inconsistent - Errors may result\n\n"); - } - - /* Read in .car file */ - - ReadCarFile(); - - /*Read in .mdf file */ - - ReadMdfFile(); - - /* Define bonds, angles, etc...*/ - - if (pflag > 0) fprintf(stderr,"\n Building internal coordinate lists \n"); - MakeLists(); - - /* Read .frc file into memory */ - - if (pflag > 0) fprintf(stderr,"\n Reading forcefield file \n"); - ReadFrcFile(); - - /* Get forcefield parameters */ - - if (pflag > 0) fprintf(stderr,"\n Get parameters for this molecular system\n"); - GetParameters(forcefield); - - /* Do internal check of internal coordinate lists */ - - if (pflag > 0) fprintf(stderr,"\n Check parameters for internal consistency\n"); - CheckLists(); - - if (outv == 2001) { fprintf(stderr,"\n Writing LAMMPS 2001 data file\n"); - WriteDataFile01(rootname,forcefield); - } - else if (outv == 2005) {fprintf(stderr,"\n Writing LAMMPS 2005 data file\n"); - WriteDataFile05(rootname,forcefield); - } - - if (pflag > 0) fprintf(stderr,"\nNormal program termination\n"); -} -#include -int blank_line(char *line) -{ - int i,n; - for (i=0,n=0; i < strlen(line); i++) { - if (isalnum((unsigned char)line[i])) n++; - } - if (n > 0) { - return(0); - } - else { - return(1); - } -} +/* +* +* msi2lmp.exe V3.6 +* +* v3.6 KLA - Changes to output to either lammps 2001 (F90 version) or to +* lammps 2005 (C++ version) +* +* v3.4 JEC - a number of minor changes due to way newline and EOF are generated +* on Materials Studio generated .car and .mdf files as well as odd +* behavior out of newer Linux IO libraries. ReadMdfFile was restructured +* in the process. +* +* v3.1 JEC - changed IO interface to standard in/out, forcefield file +* location can be indicated by environmental variable; added +* printing options, consistency checks and forcefield +* parameter versions sensitivity (highest one used) +* +* v3.0 JEC - program substantially rewritten to reduce execution time +* and be 98 % dynamic in memory use (still fixed limits on +* number of parameter types for different internal coordinate +* sets) +* +* v2.0 MDP - got internal coordinate information from mdf file and +* forcefield parameters from frc file thus eliminating +* need for Discover +* +* V1.0 SL - original version. Used .car file and internal coordinate +* information from Discover to produce LAMMPS data file. +* +* This program uses the .car and .mdf files from MSI/Biosyms's INSIGHT +* program to produce a LAMMPS data file. +* +* The program is started by supplying information at the command prompt +* according to the usage described below. +* +* USAGE: msi2lmp3 ROOTNAME {-print #} {-class #} {-frc FRC_FILE} -2001 +* +* -- msi2lmp3 is the name of the executable +* -- ROOTNAME is the base name of the .car and .mdf files +* +* -- -print +* # is the print level: 0 - silent except for errors +* 1 - minimal (default) +* 2 - more verbose +* -- -class +* # is the class of forcefield to use (I = Class I e.g., CVFF) +* (II = Class II e.g., CFFx ) +* default is -class I +* +* -- -frc - specifies name of the forcefield file (e.g., cff91) +* +* If the name includes a hard wired directory (i.e., if the name +* starts with . or /), then the name is used alone. Otherwise, +* the program looks for the forcefield file in $BIOSYM_LIBRARY. +* If $BIOSYM_LIBRARY is not set, then the current directory is +* used. +* +* If the file name does not include a dot after the first +* character, then .frc is appended to the name. +* +* For example, -frc cvff (assumes cvff.frc is in $BIOSYM_LIBRARY +* or .) +* +* -frc cff/cff91 (assumes cff91.frc is in +* $BIOSYM_LIBRARY/cff or ./cff) +* +* -frc /usr/local/biosym/forcefields/cff95 (absolute +* location) +* +* By default, the program uses $BIOSYM_LIBRARY/cvff.frc +* +* -- -2001 will output a data file for the FORTRAN 90 version of LAMMPS (2001) +* By default, the program will output for the C++ version of LAMMPS. +* +* -- output is written to a file called ROOTNAME.lammps{01/05} +* +* +**************************************************************** +* +* Msi2lmp3 +* +* This is the third version of a program that generates a LAMMPS +* data file based on the information in a MSI car file (atom +* coordinates) and mdf file (molecular topology). A key part of +* the program looks up forcefield parameters from an MSI frc file. +* +* The first version was written by Steve Lustig at Dupont, but +* required using Discover to derive internal coordinates and +* forcefield parameters +* +* The second version was written by Michael Peachey while an +* in intern in the Cray Chemistry Applications Group managed +* by John Carpenter. This version derived internal coordinates +* from the mdf file and looked up parameters in the frc file +* thus eliminating the need for Discover. +* +* The third version was written by John Carpenter to optimize +* the performance of the program for large molecular systems +* (the original code for deriving atom numbers was quadratic in time) +* and to make the program fully dynamic. The second version used +* fixed dimension arrays for the internal coordinates. +* +* John Carpenter can be contacted by sending email to +* jec374@earthlink.net +* +* November 2000 +*/ + +#define MAIN + +#include "Msi2LMP2.h" + +int main (int argc, char *argv[]) +{ + int n,i,found_dot; /* Counter */ + int outv; + char *string; + char *frc_dir_name; + char *frc_file_name; + FILE *DatF; + + /* Functions called from within main */ + +/* All code is located in .c file with function name */ + extern void FrcMenu(); + extern void ReadCarFile(); + extern void ReadMdfFile(); + extern void ReadFrcFile(); + extern void MakeLists(); + extern void GetParameters(int); + extern void CheckLists(); + extern void WriteDataFile(FILE *,char *,int); + + + outv = 2005; + pflag = 1; + forcefield = 1; /* Variable that identifies forcefield to use */ + + frc_file_name = (char *) calloc(160,sizeof(char)); + frc_dir_name = (char *) calloc(160,sizeof(char)); + + frc_dir_name = getenv("BIOSYM_LIBRARY"); + + if (frc_dir_name == NULL) { + frc_file_name = strcpy(frc_file_name,"./cvff.frc"); + } + else { + for (i=0; i < strlen(frc_dir_name); i++) + frc_file_name[i] = frc_dir_name[i]; + frc_file_name = strcat(frc_file_name,"/cvff.frc"); + } + + if (argc < 2) { /* If no rootname was supplied, prompt for it */ + fprintf(stderr,"The rootname of the .car and .mdf files must be entered\n"); + } + else /* rootname was supplied as first argument, copy to rootname */ + sprintf(rootname,"%s",argv[1]); + + n = 2; + while (n < argc) { + if (strcmp(argv[n],"-class") == 0) { + if (strcmp(argv[n+1],"I") == 0) { + forcefield = 1; + n++; + } + else if (strcmp(argv[n+1],"II") == 0) { + forcefield = 2; + n++; + } + else { + fprintf(stderr,"Unrecognized Forcefield class: %s\n", + argv[n+1]); + n++; + } + } + else if (strcmp(argv[n],"-2001") == 0) { + outv = 2001; + n++; + } + else if (strcmp(argv[n],"-frc") == 0) { + if ((frc_dir_name != NULL) && (argv[n+1][0] != '.')) { + for (i=0; i < strlen(frc_dir_name); i++) { + frc_file_name[i] = frc_dir_name[i]; + } + frc_file_name[strlen(frc_dir_name)] = '\0'; + frc_file_name = strcat(frc_file_name,"/"); + frc_file_name = strcat(frc_file_name,argv[n+1]); + } + else { + frc_file_name = strcpy(frc_file_name,argv[n+1]); + } + found_dot = 0; + for (i=1; i < strlen(frc_file_name); i++) { + if (frc_file_name[i] == '.') found_dot = 1; + } + if (found_dot == 0) + frc_file_name = strcat(frc_file_name,".frc"); + n++; + } + else if (strstr(argv[n],"-p") != NULL) { + pflag = atoi(argv[n+1]); + n++; + } + else { + fprintf(stderr,"Unrecognized option: %s\n",argv[n]); + } + n++; + } + for (i=0; i < strlen(frc_file_name); i++) + FrcFileName[i] = frc_file_name[i]; + free(frc_file_name); + + if (pflag > 0) { + fprintf(stderr,"\nRunning Msi2lmp.....\n\n"); + fprintf(stderr," Forcefield file name: %s\n",FrcFileName); + fprintf(stderr," Forcefield class: %d\n\n",forcefield); + } + + if (((forcefield == 1) && (strstr(FrcFileName,"cff") != NULL) || + (forcefield == 2) && (strstr(FrcFileName,"cvff") != NULL))) { + fprintf(stderr," WARNING - forcefield name and class appear to\n"); + fprintf(stderr," be inconsistent - Errors may result\n\n"); + } + + /* Read in .car file */ + + ReadCarFile(); + + /*Read in .mdf file */ + + ReadMdfFile(); + + /* Define bonds, angles, etc...*/ + + if (pflag > 0) fprintf(stderr,"\n Building internal coordinate lists \n"); + MakeLists(); + + /* Read .frc file into memory */ + + if (pflag > 0) fprintf(stderr,"\n Reading forcefield file \n"); + ReadFrcFile(); + + /* Get forcefield parameters */ + + if (pflag > 0) fprintf(stderr,"\n Get parameters for this molecular system\n"); + GetParameters(forcefield); + + /* Do internal check of internal coordinate lists */ + + if (pflag > 0) fprintf(stderr,"\n Check parameters for internal consistency\n"); + CheckLists(); + + if (outv == 2001) { fprintf(stderr,"\n Writing LAMMPS 2001 data file\n"); + WriteDataFile01(rootname,forcefield); + } + else if (outv == 2005) {fprintf(stderr,"\n Writing LAMMPS 2005 data file\n"); + WriteDataFile05(rootname,forcefield); + } + + if (pflag > 0) fprintf(stderr,"\nNormal program termination\n"); +} +#include +int blank_line(char *line) +{ + int i,n; + for (i=0,n=0; i < strlen(line); i++) { + if (isalnum((unsigned char)line[i])) n++; + } + if (n > 0) { + return(0); + } + else { + return(1); + } +}