Changeset 4bb871a


Ignore:
Timestamp:
Feb 2, 2010, 12:22:06 PM (16 years ago)
Author:
Tillmann Crueger <crueger@…>
Children:
45cd358
Parents:
adcdf8 (diff), 6d0fcaa (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge commit 'heber/Analysis_PairCorrelation' into MenuRefactoring

Files:
10 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/analysis_correlation.cpp

    radcdf8 r4bb871a  
    370370{
    371371  Info FunctionInfo(__func__);
    372   *file << "# BinStart\tCount" << endl;
     372  *file << "BinStart\tCount" << endl;
    373373  for (BinPairMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) {
    374374    *file << runner->first << "\t" << runner->second << endl;
     
    383383{
    384384  Info FunctionInfo(__func__);
    385   *file << "# BinStart\tAtom1\tAtom2" << endl;
     385  *file << "BinStart\tAtom1\tAtom2" << endl;
    386386  for (PairCorrelationMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) {
    387387    *file << runner->first << "\t" << *(runner->second.first) << "\t" << *(runner->second.second) << endl;
     
    396396{
    397397  Info FunctionInfo(__func__);
    398   *file << "# BinStart\tAtom::x[i]-point.x[i]" << endl;
     398  *file << "BinStart\tAtom::x[i]-point.x[i]" << endl;
    399399  for (CorrelationToPointMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) {
    400400    *file << runner->first;
     
    412412{
    413413  Info FunctionInfo(__func__);
    414   *file << "# BinStart\tTriangle" << endl;
     414  *file << "BinStart\tTriangle" << endl;
    415415  for (CorrelationToSurfaceMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) {
    416416    *file << runner->first << "\t" << *(runner->second.first) << "\t" << *(runner->second.second) << endl;
  • molecuilder/src/analysis_correlation.hpp

    radcdf8 r4bb871a  
    9090/** Puts given correlation data into bins of given size (histogramming).
    9191 * Note that BinStart and BinEnd are desired to fill the complete range, even where Bins are zero. If this is
    92  * not desired, give equal BinStart and BinEnd and the map will contain only Bins where the count is one or greater.
     92 * not desired, give equal BinStart and BinEnd and the map will contain only Bins where the count is one or greater. If a
     93 * certain start value is desired, give BinStart and a BinEnd that is smaller than BinStart, then only BinEnd will be
     94 * calculated automatically, i.e. BinStart = 0. and BinEnd = -1. .
    9395 * Also note that the range is given inclusive, i.e. [ BinStart, BinEnd ].
    9496 * \param *map map of doubles to count
     
    114116  if (BinStart == BinEnd) { // if same, find range ourselves
    115117    GetMinMax( map, start, end);
    116   } else { // if not, initialise range to zero
     118  } else if (BinEnd < BinStart) { // if BinEnd smaller, just look for new max
     119    GetMinMax( map, start, end);
     120    start = BinStart;
     121  } else { // else take both values
    117122    start = BinStart;
    118123    end = BinEnd;
  • molecuilder/src/atom_bondedparticle.cpp

    radcdf8 r4bb871a  
    5656 * \param *AdjacencyFile output stream
    5757 */
    58 void BondedParticle::OutputAdjacency(ofstream *AdjacencyFile) const
     58void BondedParticle::OutputAdjacency(ofstream * const AdjacencyFile) const
    5959{
    6060  *AdjacencyFile << nr << "\t";
     
    6262    *AdjacencyFile << (*Runner)->GetOtherAtom(this)->nr << "\t";
    6363  *AdjacencyFile << endl;
     64};
     65
     66/** Output of atom::nr along each bond partner per line.
     67 * Only bonds are printed where atom::nr is smaller than the one of the bond partner.
     68 * \param *AdjacencyFile output stream
     69 */
     70void BondedParticle::OutputBonds(ofstream * const BondFile) const
     71{
     72  for (BondList::const_iterator Runner = ListOfBonds.begin(); Runner != ListOfBonds.end(); (++Runner))
     73    if (nr < (*Runner)->GetOtherAtom(this)->nr)
     74      *BondFile << nr << "\t" << (*Runner)->GetOtherAtom(this)->nr << "\n";
    6475};
    6576
  • molecuilder/src/atom_bondedparticle.hpp

    radcdf8 r4bb871a  
    4444  int CorrectBondDegree();
    4545  void OutputBondOfAtom() const;
    46   void OutputAdjacency(ofstream *AdjacencyFile) const;
     46  void OutputAdjacency(ofstream * const AdjacencyFile) const;
     47  void OutputBonds(ofstream * const BondFile) const;
    4748  void OutputOrder(ofstream *file) const;
    4849
  • molecuilder/src/boundary.cpp

    radcdf8 r4bb871a  
    1919
    2020#include<gsl/gsl_poly.h>
     21#include<time.h>
    2122
    2223// ========================================== F U N C T I O N S =================================
     
    840841  Log() << Verbose(1) << "INFO: Grid steps are " << N[0] << ", " << N[1] << ", " << N[2] << "." << endl;
    841842
     843  // initialize seed of random number generator to current time
     844  srand ( time(NULL) );
     845
    842846  // go over [0,1]^3 filler grid
    843847  for (n[0] = 0; n[0] < N[0]; n[0]++)
  • molecuilder/src/builder.cpp

    radcdf8 r4bb871a  
    13081308            Log() << Verbose(0) << "\t-h/-H/-?\tGive this help screen." << endl;
    13091309            Log() << Verbose(0) << "\t-I\t Dissect current system of molecules into a set of disconnected (subgraphs of) molecules." << endl;
     1310            Log() << Verbose(0) << "\t-j\t<path> Store all bonds to file." << endl;
     1311            Log() << Verbose(0) << "\t-J\t<path> Store adjacency per atom to file." << endl;
    13101312            Log() << Verbose(0) << "\t-L <step0> <step1> <prefix>\tStore a linear interpolation between two configurations <step0> and <step1> into single config files with prefix <prefix> and as Trajectories into the current config file." << endl;
    13111313            Log() << Verbose(0) << "\t-m <0/1>\tCalculate (0)/ Align in(1) PAS with greatest EV along z axis." << endl;
     
    15941596                int ranges[NDIM] = {1,1,1};
    15951597                CorrelationToSurfaceMap *surfacemap = PeriodicCorrelationToSurface( molecules, elemental, TesselStruct, LCList, ranges );
    1596                 //OutputCorrelationToSurface(&output, surfacemap);
    1597                 BinPairMap *binmap = BinData( surfacemap, 0.5, 0., 0. );
     1598                OutputCorrelationToSurface(&output, surfacemap);
     1599                BinPairMap *binmap = BinData( surfacemap, 0.5, 0., 20. );
    15981600                OutputCorrelation ( &binoutput, binmap );
    15991601                output.close();
     
    16791681              }
    16801682              break;
     1683
     1684            case 'J':
     1685              if (ExitFlag == 0) ExitFlag = 1;
     1686              if ((argptr >= argc) || (argv[argptr][0] == '-')) {
     1687                ExitFlag =255;
     1688                eLog() << Verbose(0) << "Missing path of adjacency file: -j <path>" << endl;
     1689                performCriticalExit();
     1690              } else {
     1691                Log() << Verbose(0) << "Storing adjacency to path " << argv[argptr] << "." << endl;
     1692                configuration.BG->ConstructBondGraph(mol);
     1693                mol->StoreAdjacencyToFile(argv[argptr]);
     1694                argptr+=1;
     1695              }
     1696              break;
     1697
     1698            case 'j':
     1699              if (ExitFlag == 0) ExitFlag = 1;
     1700              if ((argptr >= argc) || (argv[argptr][0] == '-')) {
     1701                ExitFlag =255;
     1702                eLog() << Verbose(0) << "Missing path of bonds file: -j <path>" << endl;
     1703                performCriticalExit();
     1704              } else {
     1705                Log() << Verbose(0) << "Storing bonds to path " << argv[argptr] << "." << endl;
     1706                configuration.BG->ConstructBondGraph(mol);
     1707                mol->StoreBondsToFile(argv[argptr]);
     1708                argptr+=1;
     1709              }
     1710              break;
     1711
    16811712            case 'N':
    16821713              if (ExitFlag == 0) ExitFlag = 1;
  • molecuilder/src/molecule.hpp

    radcdf8 r4bb871a  
    277277  int FragmentMolecule(int Order, config *configuration);
    278278  bool CheckOrderAtSite(bool *AtomMask, Graph *GlobalKeySetList, int Order, int *MinimumRingSize, char *path = NULL);
     279  bool StoreBondsToFile(char *path);
    279280  bool StoreAdjacencyToFile(char *path);
    280281  bool CheckAdjacencyFileAgainstMolecule(char *path, atom **ListOfAtoms);
  • molecuilder/src/molecule_graph.cpp

    radcdf8 r4bb871a  
    992992  Log() << Verbose(1) << "Saving adjacency list ... ";
    993993  if (AdjacencyFile != NULL) {
     994    AdjacencyFile << "m\tn" << endl;
    994995    ActOnAllAtoms(&atom::OutputAdjacency, &AdjacencyFile);
    995996    AdjacencyFile.close();
     997    Log() << Verbose(1) << "done." << endl;
     998  } else {
     999    Log() << Verbose(1) << "failed to open file " << line.str() << "." << endl;
     1000    status = false;
     1001  }
     1002
     1003  return status;
     1004}
     1005;
     1006
     1007/** Storing the bond structure of a molecule to file.
     1008 * Simply stores Atom::nr and then the Atom::nr of all bond partners, one per line.
     1009 * \param *out output stream for debugging
     1010 * \param *path path to file
     1011 * \return true - file written successfully, false - writing failed
     1012 */
     1013bool molecule::StoreBondsToFile(char *path)
     1014{
     1015  ofstream BondFile;
     1016  stringstream line;
     1017  bool status = true;
     1018
     1019  line << path << "/" << FRAGMENTPREFIX << ADJACENCYFILE;
     1020  BondFile.open(line.str().c_str(), ios::out);
     1021  Log() << Verbose(1) << "Saving adjacency list ... ";
     1022  if (BondFile != NULL) {
     1023    BondFile << "m\tn" << endl;
     1024    ActOnAllAtoms(&atom::OutputBonds, &BondFile);
     1025    BondFile.close();
    9961026    Log() << Verbose(1) << "done." << endl;
    9971027  } else {
  • util/src/NanoCreator.c

    radcdf8 r4bb871a  
    520520{
    521521  int c;
     522  if ((a == 0) && (b == 0))
     523    return 1;
     524  else if (a == 0)
     525    return b;
     526  else if (b == 0)
     527    return a;
    522528  do {
    523529    c = a % b;        /* Rest of integer divison */
     
    672678  double *x = NULL, *coord = NULL, *tempvector = NULL, *offset = NULL;
    673679  //double *cog = NULL, *cog_projected = NULL;
    674   char stage[6];
     680  char *stage = NULL;
    675681  int axis[NDIM] = {0,1,2}, chiral[2] = {1,1}, factors[NDIM] = {1,1,1};
    676682  char name[255], line[255], input = 'n';
    677683  char *CellBuffer = NULL, *SheetBuffer = NULL, *TubeBuffer = NULL, *bufptr = NULL;
    678684  double *randomness = NULL, percentage; // array with percentages for presence in sheet and beyond
    679   int i,j, ggT;
     685  int i,j, ggT, ggTsmall;
    680686  int length;
    681687
     
    688694        } else {
    689695                // store variables
    690                 filename = argv[1];
    691                 strncpy(stage, argv[2], 5);
     696                filename = Malloc(sizeof(char)*(strlen(argv[1])+1), "Main: filename");
     697    stage = Malloc(sizeof(char)*(strlen(argv[2])+1), "Main: stage");
     698                strcpy(filename, argv[1]);
     699                strcpy(stage, argv[2]);
    692700    fprintf(stdout, "I will begin at stage %s.\n", stage);
    693701
    694702                // build filenames
     703    length = strlen(filename);
    695704    char *ptr = strrchr(filename, '.');
    696705    if (ptr == NULL) {
    697706      ptr = filename;
    698707    } else {
    699       length = strlen(filename);
    700708      if (ptr != NULL) {
    701709        length = ((int)(ptr-filename) >= length-5) ? (int)(ptr-filename) : length;
     
    841849
    842850  int numbersheet, biggestdiameter, sheetnr[NDIM], tmp, seed;
     851  double dfactors[2];
    843852  double x1,x2,x3, angle;
    844853  char flag = 'n';
     
    874883
    875884    do {
    876       fprintf(stdout, "\nNow specify the two natural numbers (m n) defining the chiral angle, \nif the result is crap, try flipping to (m,n): ");
     885      fprintf(stdout, "\nNow specify the two natural numbers (n m) defining the chiral angle, \nif the result is crap, try flipping to (n,m): ");
    877886      fscanf(stdin, "%d %d", &chiral[0], &chiral[1]);
    878       ggT = GCD(2*chiral[1]+chiral[0],2*chiral[0]+chiral[1]);
     887      ggTsmall = GCD(chiral[0],chiral[1]);
     888      ggT = GCD(2*chiral[0]+chiral[1],2*chiral[1]+chiral[0]);
     889      fprintf(stdout, "Greatest Common Denominator of (n, m) is %d\n", ggTsmall);
    879890      fprintf(stdout, "Greatest Common Denominator of (2n+m, 2m+n) is %d\n", ggT);
    880891      fprintf(stdout, "chiral0: %d\tchiral1: %d\n", chiral[0], chiral[1]);
    881892      for (i=0;i<NDIM;i++) {
    882         Tubevector[axis[0]][i] = (double)chiral[0] * Vector[axis[0]][i] + (double)chiral[1] * Vector[axis[1]][i];
    883         //Tubevector[axis[0]][i] = chiral[0] * Vector[axis[0]][i] + chiral[1] * Vector[axis[1]][i];
     893//        Tubevector[axis[0]][i] = (double)chiral[0] * Vector[axis[0]][i] + (double)chiral[1] * Vector[axis[1]][i];
     894        Tubevector[axis[0]][i] = chiral[0] * Vector[axis[0]][i] + chiral[1] * Vector[axis[1]][i];
    884895        //Tubevector[axis[0]][i] = (2.*chiral[0]+chiral[1])/(double)ggT * Vector[axis[0]][i] + (-chiral[0]-2.*chiral[1])/(double)ggT * Vector[axis[1]][i];
    885896        //Tubevector[axis[1]][i] = -chiral[1] * Vector[axis[0]][i] + chiral[0] * Vector[axis[1]][i];
    886         Tubevector[axis[1]][i] = (double)chiral[0] * OrthoVector[axis[0]][i] - (double)chiral[1] * OrthoVector[axis[1]][i];
     897//        Tubevector[axis[1]][i] = (double)chiral[0] * OrthoVector[axis[0]][i] - (double)chiral[1] * OrthoVector[axis[1]][i];
     898        Tubevector[axis[1]][i] = (2.*chiral[0]+chiral[1])/(double)ggT * Vector[axis[0]][i] + (-chiral[0]-2.*chiral[1])/(double)ggT * Vector[axis[1]][i];
    887899        //Tubevector[axis[1]][i] = (-chiral[0]-2.*chiral[1])/(double)ggT * Vector[axis[0]][i] + (2.*chiral[0]+chiral[1])/(double)ggT * Vector[axis[1]][i];
    888900//        fprintf(stderr, "Tubevector[axis[0]][i] = (double)chiral[0] * Vector[axis[0]][i] + (double)chiral[1] * Vector[axis[1]][i]\n = %lg * %lg + %lg * %lg = %lg + %lg = %lg\n\n",
     
    924936        x1 = gsl_vector_get(u,0)*(double)i;
    925937        x2 = gsl_vector_get(u,1)*(double)i;
    926         x3 =
    927938        fprintf(stdout, "%d: %d\t%d vs. %lg\t%lg\n",i, ((int)(x1+x1/fabs(x1)*.5)), ((int)(x2+x2/fabs(x2)*.5)), (x1), (x2));
    928939        if (( fabs( ((int)(x1+x1/fabs(x1)*.5)) - (x1) ) < 1e-6) && ( fabs( ((int)(x2+x2/fabs(x2)*.5)) - (x2) ) < 1e-6 )) {
     
    931942        }
    932943      }
    933       fprintf(stdout, "(c,d) = (%lg,%lg)\n",gsl_vector_get(u,0), gsl_vector_get(u,1));
    934 
    935       // get length
     944      x1 = fabs(gsl_vector_get(u,0));
     945      x2 = fabs(gsl_vector_get(u,1));
     946      fprintf(stdout, "(c,d) = (%d,%d).\n",((int)(x1+x1/fabs(x1)*.5)), ((int)(x2+x2/fabs(x2)*.5)));
     947      j = GCD(((int)(x1+x1/fabs(x1)*.5)), ((int)(x2+x2/fabs(x2)*.5)));
     948      fprintf(stdout, "GCD(%d,%d) = %i.\n", ((int)(x1+x1/fabs(x1)*.5)), ((int)(x2+x2/fabs(x2)*.5)), j);
     949      for (i=0;i<2;i++)
     950        gsl_vector_set(u,i, gsl_vector_get(u,i)/(double)j);
     951        // get length
    936952      double x[NDIM];
    937953      for (i=0;i<NDIM;i++)
    938954        x[i] = gsl_vector_get(u,0) * Vector[axis[0]][i] + gsl_vector_get(u,1) * Vector[axis[1]][i];
    939955      angle = Norm(x)/Norm(Tubevector[axis[1]]) ;//ScalarProduct(x,Tubevector[axis[1]])/Norm(Tubevector[axis[1]]);
    940       fprintf(stdout, "angle is %lg\n", angle);
     956      fprintf(stdout, "Angle is %lg.\n", angle);
    941957      for (i=0;i<NDIM;i++) {
    942958        Tubevector[axis[1]][i] = gsl_vector_get(u,0) * Vector[axis[0]][i] + gsl_vector_get(u,1) * Vector[axis[1]][i];
     
    9941010        );
    9951011      fprintf(stdout, "\nGive integer factors for length and radius of tube (multiple of %d suggested) : ", ggT);
    996       fscanf(stdin, "%d %d", &factors[1], &factors[0]);
     1012      fscanf(stdin, "%lg %lg", &dfactors[1], &dfactors[0]);
     1013      for(i=0;i<2;i++)
     1014        factors[i] = (int)(dfactors[i]);
     1015      fprintf(stdout, "\nI got %d and %d.\n", factors[1], factors[0]);
    9971016      fprintf(stdout, "\nThe chiral angle then is %5.5f degrees with tube radius %5.5f A and length %5.5f A, i.e. torus radius of %5.5f A.\n",
    9981017        acos(Projection(Vector[axis[0]], Tubevector[axis[0]]))/M_PI*180.,
     
    13231342              fprintf(SheetFile, "%s\t%5.5lg\t%5.5lg\t%5.5lg\n", atombuffer[nr].name, coord[0], coord[1], coord[2]);
    13241343              // rotate to align the sheet in xy plane
    1325               x1 = coord[0]*cos(-angle) + coord[1] * sin(-angle);
    1326               x2 = coord[0]*(-sin(-angle)) + coord[1] * cos(-angle);
     1344              x1 = coord[0]*cos(angle) + coord[1] * sin(angle);
     1345              x2 = coord[0]*(-sin(angle)) + coord[1] * cos(angle);
    13271346              x3 = coord[2];
    13281347              fprintf(SheetFileAligned, "%s\t%5.5lg\t%5.5lg\t%5.5lg\n", atombuffer[nr].name, x1, x2, x3);
     
    14241443      fprintf(TubeFile, "%s\t%lg\t%lg\t%lg\n", name, atom_transformed[0], atom_transformed[1], atom_transformed[2]);
    14251444      // rotate and flip to align tube in z-direction
    1426       x1 = atom_transformed[0]*cos(-angle) + atom_transformed[1] * sin(-angle);
    1427       x2 = atom_transformed[0]*(-sin(-angle)) + atom_transformed[1] * cos(-angle);
     1445      x1 = atom_transformed[0]*cos(angle) + atom_transformed[1] * sin(angle);
     1446      x2 = atom_transformed[0]*(-sin(angle)) + atom_transformed[1] * cos(angle);
    14281447      x3 = atom_transformed[2];
    14291448      fprintf(TubeFileAligned, "%s\t%lg\t%lg\t%lg\n", name, x3, x2, x1);  // order so that symmetry is along z axis
     
    15371556  if (TubeBuffer != NULL) Free(TubeBuffer, "Main: end of stages - TubeBuffer");
    15381557
    1539   Free(CellFilename, "Main: end of stafes - CellFilename");
    1540   Free(SheetFilename, "Main: end of stafes - CellFilename");
    1541   Free(TubeFilename, "Main: end of stafes - CellFilename");
    1542   Free(TorusFilename, "Main: end of stafes - CellFilename");
    1543   Free(SheetFilenameAligned, "Main: end of stafes - CellFilename");
    1544   Free(TubeFilenameAligned, "Main: end of stafes - CellFilename");
     1558  Free(CellFilename, "Main: end of stages - CellFilename");
     1559  Free(SheetFilename, "Main: end of stages - CellFilename");
     1560  Free(TubeFilename, "Main: end of stages - CellFilename");
     1561  Free(TorusFilename, "Main: end of stages - CellFilename");
     1562  Free(SheetFilenameAligned, "Main: end of stages - CellFilename");
     1563  Free(TubeFilenameAligned, "Main: end of stages - CellFilename");
     1564  Free(filename, "Main: end of stages - filename");
     1565  Free(stage, "Main: end of stages - stage");
    15451566
    15461567  // exit
  • util/src/NanoCreator.h

    radcdf8 r4bb871a  
    22#define NANOCREATOR_H_
    33
    4 #define MYEPSILON 1e-13
     4#define MYEPSILON 2e-1
    55
    66struct Atoms
Note: See TracChangeset for help on using the changeset viewer.