Changeset 4bb871a
- Timestamp:
- Feb 2, 2010, 12:22:06 PM (16 years ago)
- 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. - Files:
-
- 10 edited
-
molecuilder/src/analysis_correlation.cpp (modified) (4 diffs)
-
molecuilder/src/analysis_correlation.hpp (modified) (2 diffs)
-
molecuilder/src/atom_bondedparticle.cpp (modified) (2 diffs)
-
molecuilder/src/atom_bondedparticle.hpp (modified) (1 diff)
-
molecuilder/src/boundary.cpp (modified) (2 diffs)
-
molecuilder/src/builder.cpp (modified) (3 diffs)
-
molecuilder/src/molecule.hpp (modified) (1 diff)
-
molecuilder/src/molecule_graph.cpp (modified) (1 diff)
-
util/src/NanoCreator.c (modified) (11 diffs)
-
util/src/NanoCreator.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
molecuilder/src/analysis_correlation.cpp
radcdf8 r4bb871a 370 370 { 371 371 Info FunctionInfo(__func__); 372 *file << " #BinStart\tCount" << endl;372 *file << "BinStart\tCount" << endl; 373 373 for (BinPairMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) { 374 374 *file << runner->first << "\t" << runner->second << endl; … … 383 383 { 384 384 Info FunctionInfo(__func__); 385 *file << " #BinStart\tAtom1\tAtom2" << endl;385 *file << "BinStart\tAtom1\tAtom2" << endl; 386 386 for (PairCorrelationMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) { 387 387 *file << runner->first << "\t" << *(runner->second.first) << "\t" << *(runner->second.second) << endl; … … 396 396 { 397 397 Info FunctionInfo(__func__); 398 *file << " #BinStart\tAtom::x[i]-point.x[i]" << endl;398 *file << "BinStart\tAtom::x[i]-point.x[i]" << endl; 399 399 for (CorrelationToPointMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) { 400 400 *file << runner->first; … … 412 412 { 413 413 Info FunctionInfo(__func__); 414 *file << " #BinStart\tTriangle" << endl;414 *file << "BinStart\tTriangle" << endl; 415 415 for (CorrelationToSurfaceMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) { 416 416 *file << runner->first << "\t" << *(runner->second.first) << "\t" << *(runner->second.second) << endl; -
molecuilder/src/analysis_correlation.hpp
radcdf8 r4bb871a 90 90 /** Puts given correlation data into bins of given size (histogramming). 91 91 * 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. . 93 95 * Also note that the range is given inclusive, i.e. [ BinStart, BinEnd ]. 94 96 * \param *map map of doubles to count … … 114 116 if (BinStart == BinEnd) { // if same, find range ourselves 115 117 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 117 122 start = BinStart; 118 123 end = BinEnd; -
molecuilder/src/atom_bondedparticle.cpp
radcdf8 r4bb871a 56 56 * \param *AdjacencyFile output stream 57 57 */ 58 void BondedParticle::OutputAdjacency(ofstream * AdjacencyFile) const58 void BondedParticle::OutputAdjacency(ofstream * const AdjacencyFile) const 59 59 { 60 60 *AdjacencyFile << nr << "\t"; … … 62 62 *AdjacencyFile << (*Runner)->GetOtherAtom(this)->nr << "\t"; 63 63 *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 */ 70 void 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"; 64 75 }; 65 76 -
molecuilder/src/atom_bondedparticle.hpp
radcdf8 r4bb871a 44 44 int CorrectBondDegree(); 45 45 void OutputBondOfAtom() const; 46 void OutputAdjacency(ofstream *AdjacencyFile) const; 46 void OutputAdjacency(ofstream * const AdjacencyFile) const; 47 void OutputBonds(ofstream * const BondFile) const; 47 48 void OutputOrder(ofstream *file) const; 48 49 -
molecuilder/src/boundary.cpp
radcdf8 r4bb871a 19 19 20 20 #include<gsl/gsl_poly.h> 21 #include<time.h> 21 22 22 23 // ========================================== F U N C T I O N S ================================= … … 840 841 Log() << Verbose(1) << "INFO: Grid steps are " << N[0] << ", " << N[1] << ", " << N[2] << "." << endl; 841 842 843 // initialize seed of random number generator to current time 844 srand ( time(NULL) ); 845 842 846 // go over [0,1]^3 filler grid 843 847 for (n[0] = 0; n[0] < N[0]; n[0]++) -
molecuilder/src/builder.cpp
radcdf8 r4bb871a 1308 1308 Log() << Verbose(0) << "\t-h/-H/-?\tGive this help screen." << endl; 1309 1309 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; 1310 1312 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; 1311 1313 Log() << Verbose(0) << "\t-m <0/1>\tCalculate (0)/ Align in(1) PAS with greatest EV along z axis." << endl; … … 1594 1596 int ranges[NDIM] = {1,1,1}; 1595 1597 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. ); 1598 1600 OutputCorrelation ( &binoutput, binmap ); 1599 1601 output.close(); … … 1679 1681 } 1680 1682 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 1681 1712 case 'N': 1682 1713 if (ExitFlag == 0) ExitFlag = 1; -
molecuilder/src/molecule.hpp
radcdf8 r4bb871a 277 277 int FragmentMolecule(int Order, config *configuration); 278 278 bool CheckOrderAtSite(bool *AtomMask, Graph *GlobalKeySetList, int Order, int *MinimumRingSize, char *path = NULL); 279 bool StoreBondsToFile(char *path); 279 280 bool StoreAdjacencyToFile(char *path); 280 281 bool CheckAdjacencyFileAgainstMolecule(char *path, atom **ListOfAtoms); -
molecuilder/src/molecule_graph.cpp
radcdf8 r4bb871a 992 992 Log() << Verbose(1) << "Saving adjacency list ... "; 993 993 if (AdjacencyFile != NULL) { 994 AdjacencyFile << "m\tn" << endl; 994 995 ActOnAllAtoms(&atom::OutputAdjacency, &AdjacencyFile); 995 996 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 */ 1013 bool 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(); 996 1026 Log() << Verbose(1) << "done." << endl; 997 1027 } else { -
util/src/NanoCreator.c
radcdf8 r4bb871a 520 520 { 521 521 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; 522 528 do { 523 529 c = a % b; /* Rest of integer divison */ … … 672 678 double *x = NULL, *coord = NULL, *tempvector = NULL, *offset = NULL; 673 679 //double *cog = NULL, *cog_projected = NULL; 674 char stage[6];680 char *stage = NULL; 675 681 int axis[NDIM] = {0,1,2}, chiral[2] = {1,1}, factors[NDIM] = {1,1,1}; 676 682 char name[255], line[255], input = 'n'; 677 683 char *CellBuffer = NULL, *SheetBuffer = NULL, *TubeBuffer = NULL, *bufptr = NULL; 678 684 double *randomness = NULL, percentage; // array with percentages for presence in sheet and beyond 679 int i,j, ggT ;685 int i,j, ggT, ggTsmall; 680 686 int length; 681 687 … … 688 694 } else { 689 695 // 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]); 692 700 fprintf(stdout, "I will begin at stage %s.\n", stage); 693 701 694 702 // build filenames 703 length = strlen(filename); 695 704 char *ptr = strrchr(filename, '.'); 696 705 if (ptr == NULL) { 697 706 ptr = filename; 698 707 } else { 699 length = strlen(filename);700 708 if (ptr != NULL) { 701 709 length = ((int)(ptr-filename) >= length-5) ? (int)(ptr-filename) : length; … … 841 849 842 850 int numbersheet, biggestdiameter, sheetnr[NDIM], tmp, seed; 851 double dfactors[2]; 843 852 double x1,x2,x3, angle; 844 853 char flag = 'n'; … … 874 883 875 884 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): "); 877 886 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); 879 890 fprintf(stdout, "Greatest Common Denominator of (2n+m, 2m+n) is %d\n", ggT); 880 891 fprintf(stdout, "chiral0: %d\tchiral1: %d\n", chiral[0], chiral[1]); 881 892 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]; 884 895 //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]; 885 896 //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]; 887 899 //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]; 888 900 // 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", … … 924 936 x1 = gsl_vector_get(u,0)*(double)i; 925 937 x2 = gsl_vector_get(u,1)*(double)i; 926 x3 =927 938 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)); 928 939 if (( fabs( ((int)(x1+x1/fabs(x1)*.5)) - (x1) ) < 1e-6) && ( fabs( ((int)(x2+x2/fabs(x2)*.5)) - (x2) ) < 1e-6 )) { … … 931 942 } 932 943 } 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 936 952 double x[NDIM]; 937 953 for (i=0;i<NDIM;i++) 938 954 x[i] = gsl_vector_get(u,0) * Vector[axis[0]][i] + gsl_vector_get(u,1) * Vector[axis[1]][i]; 939 955 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); 941 957 for (i=0;i<NDIM;i++) { 942 958 Tubevector[axis[1]][i] = gsl_vector_get(u,0) * Vector[axis[0]][i] + gsl_vector_get(u,1) * Vector[axis[1]][i]; … … 994 1010 ); 995 1011 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]); 997 1016 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", 998 1017 acos(Projection(Vector[axis[0]], Tubevector[axis[0]]))/M_PI*180., … … 1323 1342 fprintf(SheetFile, "%s\t%5.5lg\t%5.5lg\t%5.5lg\n", atombuffer[nr].name, coord[0], coord[1], coord[2]); 1324 1343 // 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); 1327 1346 x3 = coord[2]; 1328 1347 fprintf(SheetFileAligned, "%s\t%5.5lg\t%5.5lg\t%5.5lg\n", atombuffer[nr].name, x1, x2, x3); … … 1424 1443 fprintf(TubeFile, "%s\t%lg\t%lg\t%lg\n", name, atom_transformed[0], atom_transformed[1], atom_transformed[2]); 1425 1444 // 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); 1428 1447 x3 = atom_transformed[2]; 1429 1448 fprintf(TubeFileAligned, "%s\t%lg\t%lg\t%lg\n", name, x3, x2, x1); // order so that symmetry is along z axis … … 1537 1556 if (TubeBuffer != NULL) Free(TubeBuffer, "Main: end of stages - TubeBuffer"); 1538 1557 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"); 1545 1566 1546 1567 // exit -
util/src/NanoCreator.h
radcdf8 r4bb871a 2 2 #define NANOCREATOR_H_ 3 3 4 #define MYEPSILON 1e-134 #define MYEPSILON 2e-1 5 5 6 6 struct Atoms
Note:
See TracChangeset
for help on using the changeset viewer.
