Changeset 775d133


Ignore:
Timestamp:
Feb 21, 2010, 1:34:41 PM (15 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
b11d3b
Parents:
164a33
Message:

Filling has a MaxDistance, somes changes to the Correlation Analysis.

Correlation:

  • OutputCorrelation() have setprecision(8), as irregularities appeared in the output files with regard to the number of digits.
  • ParseCommandLineOptions() for case 'C' now needs BinStart and BinEnd. However, may be set to 0,0 (search for yourself), or (0,-1) (start at 0, but search end for yourself).
  • BUGFIX: argument index of element parameter was wrong from the change [E/P/S].

Filling:

Location:
src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/analysis_correlation.cpp

    r164a33 r775d133  
    372372  *file << "BinStart\tCount" << endl;
    373373  for (BinPairMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) {
    374     *file << runner->first << "\t" << runner->second << endl;
     374    *file << setprecision(8) << runner->first << "\t" << runner->second << endl;
    375375  }
    376376};
     
    385385  *file << "BinStart\tAtom1\tAtom2" << endl;
    386386  for (PairCorrelationMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) {
    387     *file << runner->first << "\t" << *(runner->second.first) << "\t" << *(runner->second.second) << endl;
     387    *file << setprecision(8) << runner->first << "\t" << *(runner->second.first) << "\t" << *(runner->second.second) << endl;
    388388  }
    389389};
     
    400400    *file << runner->first;
    401401    for (int i=0;i<NDIM;i++)
    402       *file << "\t" << (runner->second.first->node->x[i] - runner->second.second->x[i]);
     402      *file << "\t" << setprecision(8) << (runner->second.first->node->x[i] - runner->second.second->x[i]);
    403403    *file << endl;
    404404  }
     
    414414  *file << "BinStart\tTriangle" << endl;
    415415  for (CorrelationToSurfaceMap::const_iterator runner = map->begin(); runner != map->end(); ++runner) {
    416     *file << runner->first << "\t" << *(runner->second.first) << "\t" << *(runner->second.second) << endl;
    417   }
    418 };
    419 
     416    *file << setprecision(8) << runner->first << "\t" << *(runner->second.first) << "\t" << *(runner->second.second) << endl;
     417  }
     418};
     419
  • src/boundary.cpp

    r164a33 r775d133  
    789789 * \param *filler molecule which the box is to be filled with
    790790 * \param configuration contains box dimensions
     791 * \param MaxDistance fills in molecules only up to this distance (set to -1 if whole of the domain)
    791792 * \param distance[NDIM] distance between filling molecules in each direction
    792793 * \param boundary length of boundary zone between molecule and filling mollecules
     
    797798 * \return *mol pointer to new molecule with filled atoms
    798799 */
    799 molecule * FillBoxWithMolecule(MoleculeListClass *List, molecule *filler, config &configuration, const double distance[NDIM], const double boundary, const double RandomAtomDisplacement, const double RandomMolDisplacement, const bool DoRandomRotation)
     800molecule * FillBoxWithMolecule(MoleculeListClass *List, molecule *filler, config &configuration, const double MaxDistance, const double distance[NDIM], const double boundary, const double RandomAtomDisplacement, const double RandomMolDisplacement, const bool DoRandomRotation)
    800801{
    801802        Info FunctionInfo(__func__);
     
    862863          } else {
    863864            const double distance = (TesselStruct[i]->GetDistanceSquaredToSurface(CurrentPosition, LCList[i]));
    864             FillIt = FillIt && (distance > boundary*boundary);
     865            FillIt = FillIt && (distance > boundary*boundary) && ((MaxDistance < 0) || (MaxDistance*MaxDistance > distance));
    865866            if (FillIt) {
    866867              Log() << Verbose(1) << "INFO: Position at " << CurrentPosition << " is outer point." << endl;
    867868            } else {
    868               Log() << Verbose(1) << "INFO: Position at " << CurrentPosition << " is inner point or within boundary." << endl;
     869              Log() << Verbose(1) << "INFO: Position at " << CurrentPosition << " is inner point, within boundary or outside of MaxDistance." << endl;
    869870              break;
    870871            }
  • src/boundary.hpp

    r164a33 r775d133  
    4949
    5050double ConvexizeNonconvexEnvelope(class Tesselation *&TesselStruct, const molecule * const mol, const char * const filename);
    51 molecule * FillBoxWithMolecule(MoleculeListClass *List, molecule *filler, config &configuration, const double distance[NDIM], const double boundary, const double RandomAtomDisplacement, const double RandomMolDisplacement, const bool DoRandomRotation);
     51molecule * FillBoxWithMolecule(MoleculeListClass *List, molecule *filler, config &configuration, const double MaxDistance, const double distance[NDIM], const double boundary, const double RandomAtomDisplacement, const double RandomMolDisplacement, const bool DoRandomRotation);
    5252void FindConvexBorder(const molecule* const mol, Tesselation *&TesselStruct, const LinkedCell *LCList, const char *filename);
    5353Vector* FindEmbeddingHole(MoleculeListClass *mols, molecule *srcmol);
  • src/builder.cpp

    r164a33 r775d133  
    13871387  enum ConfigStatus configPresent = absent;
    13881388  clock_t start,end;
     1389  double MaxDistance = -1;
    13891390  int argptr;
    13901391  molecule *mol = NULL;
     
    14121413            Log() << Verbose(0) << "\t-B xx xy xz yy yz zz\tBound atoms by domain with given symmetric matrix of (xx,xy,xz,yy,yz,zz)." << endl;
    14131414            Log() << Verbose(0) << "\t-c x1 x2 x3\tCenter atoms in domain with a minimum distance to boundary of (x1,x2,x3)." << endl;
    1414             Log() << Verbose(0) << "\t-C <type> [parms] <output> <bin output>\tPair Correlation analysis." << endl;
     1415            Log() << Verbose(0) << "\t-C <type> [params] <output> <bin output> <BinStart> <BinEnd>\tPair Correlation analysis." << endl;
    14151416            Log() << Verbose(0) << "\t-d x1 x2 x3\tDuplicate cell along each axis by given factor." << endl;
    14161417            Log() << Verbose(0) << "\t-D <bond distance>\tDepth-First-Search Analysis of the molecule, giving cycles and tree/back edges." << endl;
     
    14191420            Log() << Verbose(0) << "\t-f <dist> <order>\tFragments the molecule in BOSSANOVA manner (with/out rings compressed) and stores config files in same dir as config (return code 0 - fragmented, 2 - no fragmentation necessary)." << endl;
    14201421            Log() << Verbose(0) << "\t-F <dist_x> <dist_y> <dist_z> <epsilon> <randatom> <randmol> <DoRotate>\tFilling Box with water molecules." << endl;
     1422            Log() << Verbose(0) << "\t-FF <MaxDistance> <dist_x> <dist_y> <dist_z> <epsilon> <randatom> <randmol> <DoRotate>\tFilling Box with water molecules." << endl;
    14211423            Log() << Verbose(0) << "\t-g <file>\tParses a bond length table from the given file." << endl;
    14221424            Log() << Verbose(0) << "\t-h/-H/-?\tGive this help screen." << endl;
     
    16801682              if ((argptr >= argc)) {
    16811683                ExitFlag = 255;
    1682                 eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C <type: E/P/S> [more params] <output> <bin output>" << endl;
     1684                eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C <type: E/P/S> [more params] <output> <bin output> <BinStart> <BinEnd>" << endl;
    16831685                performCriticalExit();
    16841686              } else {
     
    16861688                  case 'E':
    16871689                    {
    1688                       if ((argptr+4 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-') || (argv[argptr+4][0] == '-')) {
     1690                      if ((argptr+6 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+5])) || (!IsValidNumber(argv[argptr+6])) || (!IsValidNumber(argv[argptr+2])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-') || (argv[argptr+4][0] == '-')) {
    16891691                        ExitFlag = 255;
    16901692                        eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C E <Z1> <Z2> <output> <bin output>" << endl;
     
    16931695                        ofstream output(argv[argptr+3]);
    16941696                        ofstream binoutput(argv[argptr+4]);
    1695 
    1696                         element *elemental = periode->FindElement((const int) atoi(argv[argptr]));
    1697                         element *elemental2 = periode->FindElement((const int) atoi(argv[argptr+1]));
     1697                        const double BinStart = atof(argv[argptr+5]);
     1698                        const double BinEnd = atof(argv[argptr+6]);
     1699
     1700                        element *elemental = periode->FindElement((const int) atoi(argv[argptr+1]));
     1701                        element *elemental2 = periode->FindElement((const int) atoi(argv[argptr+2]));
    16981702                        PairCorrelationMap *correlationmap = PairCorrelation(molecules, elemental, elemental2);
    16991703                        //OutputCorrelationToSurface(&output, correlationmap);
    1700                         BinPairMap *binmap = BinData( correlationmap, 0.5, 0., 0. );
     1704                        BinPairMap *binmap = BinData( correlationmap, 0.5, BinStart, BinEnd );
    17011705                        OutputCorrelation ( &binoutput, binmap );
    17021706                        output.close();
     
    17041708                        delete(binmap);
    17051709                        delete(correlationmap);
    1706                         argptr+=5;
     1710                        argptr+=7;
    17071711                      }
    17081712                    }
     
    17111715                  case 'P':
    17121716                    {
    1713                       if ((argptr+6 >= argc) || (!IsValidNumber(argv[argptr+1])) ||  (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-') || (argv[argptr+4][0] == '-') || (argv[argptr+5][0] == '-') || (argv[argptr+6][0] == '-')) {
     1717                      if ((argptr+8 >= argc) || (!IsValidNumber(argv[argptr+1])) ||  (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+7])) || (!IsValidNumber(argv[argptr+8])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-') || (argv[argptr+4][0] == '-') || (argv[argptr+5][0] == '-') || (argv[argptr+6][0] == '-')) {
    17141718                        ExitFlag = 255;
    17151719                        eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C P <Z1> <x> <y> <z> <output> <bin output>" << endl;
     
    17181722                        ofstream output(argv[argptr+5]);
    17191723                        ofstream binoutput(argv[argptr+6]);
    1720 
    1721                         element *elemental = periode->FindElement((const int) atoi(argv[argptr]));
     1724                        const double BinStart = atof(argv[argptr+7]);
     1725                        const double BinEnd = atof(argv[argptr+8]);
     1726
     1727                        element *elemental = periode->FindElement((const int) atoi(argv[argptr+1]));
    17221728                        Vector *Point = new Vector((const double) atof(argv[argptr+1]),(const double) atof(argv[argptr+2]),(const double) atof(argv[argptr+3]));
    17231729                        CorrelationToPointMap *correlationmap = CorrelationToPoint(molecules, elemental, Point);
    17241730                        //OutputCorrelationToSurface(&output, correlationmap);
    1725                         BinPairMap *binmap = BinData( correlationmap, 0.5, 0., 0. );
     1731                        BinPairMap *binmap = BinData( correlationmap, 0.5, BinStart, BinEnd );
    17261732                        OutputCorrelation ( &binoutput, binmap );
    17271733                        output.close();
     
    17301736                        delete(binmap);
    17311737                        delete(correlationmap);
    1732                         argptr+=7;
     1738                        argptr+=9;
    17331739                      }
    17341740                    }
     
    17371743                  case 'S':
    17381744                    {
    1739                       if ((argptr+3 >= argc) || (!IsValidNumber(argv[argptr+1])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-')) {
     1745                      if ((argptr+5 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-')) {
    17401746                        ExitFlag = 255;
    17411747                        eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C S <Z> <output> <bin output>" << endl;
     
    17451751                        ofstream binoutput(argv[argptr+3]);
    17461752                        const double radius = 5.;
    1747 
     1753                        const double BinStart = atof(argv[argptr+4]);
     1754                        const double BinEnd = atof(argv[argptr+5]);
    17481755
    17491756                        // get the boundary
     
    17661773                        }
    17671774                        LCList = new LinkedCell(Boundary, 2.*radius);
    1768                         element *elemental = periode->FindElement((const int) atoi(argv[argptr]));
     1775                        element *elemental = periode->FindElement((const int) atoi(argv[argptr+1]));
    17691776                        FindNonConvexBorder(Boundary, TesselStruct, LCList, radius, NULL);
    17701777                        int ranges[NDIM] = {1,1,1};
    17711778                        CorrelationToSurfaceMap *surfacemap = PeriodicCorrelationToSurface( molecules, elemental, TesselStruct, LCList, ranges );
    1772                         //OutputCorrelationToSurface(&output, surfacemap);
    1773                         BinPairMap *binmap = BinData( surfacemap, 0.5, 0., 0. );
     1779                        OutputCorrelationToSurface(&output, surfacemap);
     1780                        BinPairMap *binmap = BinData( surfacemap, 0.5, BinStart, BinEnd );
    17741781                        OutputCorrelation ( &binoutput, binmap );
    17751782                        output.close();
     
    17821789                        delete(binmap);
    17831790                        delete(surfacemap);
    1784                         argptr+=4;
     1791                        argptr+=6;
    17851792                      }
    17861793                    }
     
    18111818            case 'F':
    18121819              if (ExitFlag == 0) ExitFlag = 1;
     1820              MaxDistance = -1;
     1821              if (argv[argptr-1][2] == 'F') {
     1822                // fetch first argument as max distance to surface
     1823                MaxDistance = atof(argv[argptr++]);
     1824                Log() << Verbose(0) << "Filling with maximum layer distance of " << MaxDistance << "." << endl;
     1825              }
    18131826              if (argptr+6 >=argc) {
    18141827                ExitFlag = 255;
     
    18441857                for (int i=0;i<NDIM;i++)
    18451858                  distance[i] = atof(argv[argptr+i]);
    1846                 Filling = FillBoxWithMolecule(molecules, filler, configuration, distance, atof(argv[argptr+3]), atof(argv[argptr+4]), atof(argv[argptr+5]), atoi(argv[argptr+6]));
     1859                Filling = FillBoxWithMolecule(molecules, filler, configuration, MaxDistance, distance, atof(argv[argptr+3]), atof(argv[argptr+4]), atof(argv[argptr+5]), atoi(argv[argptr+6]));
    18471860                if (Filling != NULL) {
    18481861                  Filling->ActiveFlag = false;
Note: See TracChangeset for help on using the changeset viewer.