/* ## ## ######### ## ########## ########## ### ### ## ########## ## #### #### ## ########## ## ## ## ## ## ## ## ########## ## ######## ## ## ## ## ## ## ###### ######## ## ## ## ## ## ###### ### ## ## ## ############## ## ### ## ########## ## ############## ## ### ################# ######## ## ########### ######### ## ######### ## ########### ## ## ## ### ## ########## ## ## ## ###### ## ## ########## ## ## ## ###### ######## ## # ## ## ######### ## # ## ## ## ## ## ### ########## ## ## ## ### ########## ########## ######### */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** ** ** ** ** E N S E M B L E ** ** ** ** Version 2.1 ** ** ** ** ** ** Principal Investigator: Julie D. Forman-Kay ** ** ** ** Author: Mickaƫl Krzeminski ** ** ** ** Date: November 2012 ** ** ** ** ** ************************************************************************************* ** ** ** ** ** Copyright (C) The Hospital for Sick Children, 2001 ** ** ** ** Distribution of substantively modified versions of this module is prohibited ** ** without the explicit permission of the copyright holder. ** ** ** ** Any use of this work or derivative works in whole or in part for any ** ** commercial purpose or for monetary gain is prohibited. ** ** ** ** ** ** NO WARRANTY ** ** This software package is provided 'as is' without warranty of any kind, ** ** expressed or implied. ** ** ** ** ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* COMPILATION gcc -O3 -Wall -lm -o rg rg.c */ #include "Include/ens.h" enum toolsPrograms TP = __RG__; int main(int argc, char *argv[]) { /***********************************************************\ |* *| |* *| |* Variables declaration *| |* *| |* *| \***********************************************************/ // Counters counter count, confNb; // Verbose mode short verboseMode = FALSE; // Radius of gyration radiaOfGyration rog = {0, NULL, {0., 0.}}; float *atomMasses = NULL; // PDB files char *ensFileName = NULL; char *outFileName = NULL; PDBListData ENSData = {0, 0, NULL, NULL}; FILE *outFile; /***********************************************************\ |* *| |* *| |* Retrieving arguments *| |* *| |* *| \***********************************************************/ for (count=1; countcount) { if (argv[count][0] == '-') fatal_error("INVALID_ARGUMENT", argv[count]); if ((ensFileName = malloc((strlen(argv[count]) + 1) * CHAR_SIZE)) == NULL) { _cleanRG(&ENSData, &rog, atomMasses, ensFileName, outFileName); fatal_error("MEMORY", "create ensFileName variable"); } strcpy(ensFileName, argv[count]); } else { _cleanRG(&ENSData, &rog, atomMasses, ensFileName, outFileName); fatal_error("NO_ARGUMENT_FLAG", "-f"); } } else if (!strcmp(argv[count], "-v")) // Verbose mode (Display the radius of gyration of each conformer) { verboseMode = 1; } else { if (ensFileName != NULL) // If more than one ENSEMBLE file is given as argument { _cleanRG(&ENSData, &rog, atomMasses, ensFileName, outFileName); __USAGE__ } else { if ((ensFileName = malloc((strlen(argv[count]) + 1) * CHAR_SIZE)) == NULL) { _cleanRG(&ENSData, &rog, atomMasses, ensFileName, outFileName); fatal_error("MEMORY", "create ensFileName variable"); } strcpy(ensFileName, argv[count]); } } } // Verification of arguments coherence if (ensFileName == NULL) { _cleanRG(&ENSData, &rog, atomMasses, ensFileName, outFileName); __USAGE__ } /***********************************************************\ |* *| |* *| |* Getting coordinates of all PDB files *| |* *| |* *| \***********************************************************/ // Recording the specified pdb files and calculating the Rg if (getCoords(&ENSData, ensFileName, NULL)) { _cleanRG(&ENSData, &rog, atomMasses, ensFileName, outFileName); fatal_error("A problem occured while recording coordinates from the %s ENSEMBLE file.", ensFileName); } if (getMasses(&atomMasses, &ENSData)) { _cleanRG(&ENSData, &rog, atomMasses, ensFileName, outFileName); fatal_error("A problem occured while recording masses from %s list.", ensFileName); } rog = getRoG(&ENSData, &atomMasses); if (rog.rg == NULL) { _cleanRG(&ENSData, &rog, atomMasses, ensFileName, outFileName); fatal_error("A problem occured while calculating radia of gyration from %s.", ensFileName); } // Displaying the results in an elegant way if (outFileName == NULL) { outFile = stdout; } else { if ((outFile = fopen(outFileName, "a")) == NULL) { error("Impossible to open the %s file.\nThe results will be displayed on screen.\n\n", outFileName); outFile = stdout; } } if (verboseMode) { for (confNb=0; confNb