From: Alexey Shvetsov Date: Wed, 11 Jul 2018 09:16:44 +0000 (+0300) Subject: Working gausian grid... X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=90d0fb360ae27fea301d62a9c7a175441bbe396b;p=alexxy%2Fgromacs-sans.git Working gausian grid... --- diff --git a/src/sans.cpp b/src/sans.cpp index bfd4d0e..354d9d4 100644 --- a/src/sans.cpp +++ b/src/sans.cpp @@ -52,6 +52,9 @@ class SANS : public TrajectoryAnalysisModule TrajectoryAnalysisSettings *settings); virtual void initAnalysis(const TrajectoryAnalysisSettings &settings, const TopologyInformation &top); + virtual void initAfterFirstFrame(const TrajectoryAnalysisSettings &settings, + const t_trxframe &fr); + virtual void analyzeFrame(int frnr, const t_trxframe &fr, t_pbc *pbc, TrajectoryAnalysisModuleData *pdata); @@ -67,14 +70,18 @@ class SANS : public TrajectoryAnalysisModule std::string fnNdx_; double cutoff_; double grid_; + double boxScale_; - AnalysisNeighborhood nb_; - const TopologyInformation *top_; + IVec gridPoints_; + RVec gridSpacing_; + AnalysisNeighborhood nb_; + const TopologyInformation *top_; + std::vector>> gausGrid_; }; SANS::SANS() - : cutoff_(1.0), grid_(0.05) + : cutoff_(1.0), grid_(0.05), boxScale_(1.0) { } @@ -93,6 +100,16 @@ SANS::initOptions(IOptionsContainer *options, // Add the descriptive text (program help text) to the options settings->setHelpText(desc); + // Add option for cutoff constant + options->addOption(DoubleOption("cutoff") + .store(&cutoff_) + .description("cutoff for neighbour search")); + options->addOption(DoubleOption("grid") + .store(&grid_) + .description("grid spacing for gaus grid")); + options->addOption(DoubleOption("boxscale") + .store(&boxScale_) + .description("box scaling for gaus grid")); } void @@ -101,6 +118,20 @@ SANS::initAnalysis(const TrajectoryAnalysisSettings &settings, { nb_.setCutoff(cutoff_); top_ = ⊤ + +} + +void +SANS::initAfterFirstFrame(const TrajectoryAnalysisSettings &settings, + const t_trxframe &fr) +{ + // set gridpoints and grid spacing for orthogonal boxes only.... + for (int i = 0; i(std::ceil(fr.box[i][i]*boxScale_/grid_)); + } + // prepare gausGrid + gausGrid_.resize(gridPoints_[XX], std::vector>(gridPoints_[YY], std::vector(gridPoints_[ZZ]))); } void @@ -109,17 +140,38 @@ SANS::analyzeFrame(int frnr, const t_trxframe &fr, t_pbc *pbc, { RVec GridSpacing(0.1, 0.1, 0.1); AnalysisNeighborhoodSearch nbsearch = nb_.initSearch(pbc, AnalysisNeighborhoodPositions(fr.x, fr.natoms)); - AnalysisNeighborhoodPairSearch pairSearch = nbsearch.startPairSearch(GridSpacing.as_vec()); - AnalysisNeighborhoodPair pair; + t_topology *top = top_->topology(); - while (pairSearch.findNextPair(&pair)) - { - fprintf(stderr,"Index %d\n", pair.refIndex()); - fprintf(stderr,"dx = (%f, %f, %f)\n", pair.dx()[XX], pair.dx()[YY], pair.dx()[ZZ] ); - fprintf(stderr,"ref = (%f, %f, %f)\n", fr.x[pair.refIndex()][XX], fr.x[pair.refIndex()][YY], fr.x[pair.refIndex()][ZZ]); - fprintf(stderr,"ref_dx = (%f, %f, %f)\n", GridSpacing[XX]+pair.dx()[XX], GridSpacing[YY]+pair.dx()[YY], GridSpacing[ZZ]+pair.dx()[ZZ] ); - - } + + fprintf(stderr,"Box dimensions:\n"); + for(int i = 0; iatoms.atom[pair.refIndex()].m, 2.0, refPos, point, gridSpacing_); + } + fprintf(stderr, "GausGrid[%d, %d, %d] = %f\n", i,j,k, gausGrid_[i][j][k]); + } + } + } + // only for orthogonal boxes... + fprintf(stderr, "NX = %d, NY = %d, NZ = %d\n", gridPoints_[XX], gridPoints_[YY], gridPoints_[ZZ]); } void