diff --git a/doc/ProbeParticle.tex b/doc/ProbeParticle.tex deleted file mode 100644 index 95ea4092..00000000 --- a/doc/ProbeParticle.tex +++ /dev/null @@ -1,58 +0,0 @@ -\documentclass[english]{book} -\usepackage[utf8]{inputenc} -\usepackage[T2A,T1]{fontenc} -\usepackage[dvips]{graphicx} % Для начала работы с изображениями нужно подключить пакет graphicx, который обеспечивает их вставку в текст документа. Есть много драйверов для работы с изображениями, но мы будем использовать dvips - это позволит нам потом сравнительно легко и довольно просто конвертировать диплом из LaTeX в Word или OpenOffice через формат RTF, используя открытую программу latex2rtf. Для этого ваши рисунки нужно конвертировать в EPS, что делается программой convert из пакета imagemagick -\graphicspath{{images/}} -\usepackage{babel} -\usepackage{mathrsfs} -\linespread{1.3} -\usepackage[left=2cm, right=2cm,top=2cm,bottom=2cm]{geometry} % Разметка страницы - -\usepackage{ gensymb } - -\bibliographystyle{plain} - -\usepackage[framemethod=tikz]{mdframed} -\usetikzlibrary{shadows} - -\newmdenv[shadow=true,shadowcolor=black,font=\sffamily,rightmargin=8pt]{shadedbox} - -\usepackage{listings} - - -\lstset{ -basicstyle=\ttfamily -} - -\usepackage[colorlinks,filecolor=blue,pagebackref]{hyperref} % Пакет hyperref рекомендуется загружать последним, поскольку он переопределяет многие команды LaTeX'а - -\title{Probe Particle model} -\author{} -\begin{document} -\maketitle - -\tableofcontents - -\chapter{Introduction} -\input{intro/intro.tex} - -\chapter{Quick Start} -\input{quick_start/quick_start.tex} - -\chapter{Scripting} -\input{scripting/scripting.tex} - -\chapter{Technical details} -\input{technical_details/technical_details.tex} - -\chapter{Meeting summary} -\input{meeting_summary/meeting_summary.tex} - - - -\newpage -\bibliography{biblio} - - -%put your text here -\end{document} diff --git a/doc/biblio.bib b/doc/biblio.bib deleted file mode 100644 index c3ca791d..00000000 --- a/doc/biblio.bib +++ /dev/null @@ -1,65 +0,0 @@ -@article{phapalamechhighresol, -author = {Prokop, Hapala and Georgy, Kichin and Christian, Wagner and F. Stefan, Tautz and Ruslan, Temirov and Pavel, Jelinek}, -doi = {10.1103/PhysRevB.90.085421}, -file = {}, -issn = {}, -journal = {Phys. Rev. B}, -month = aug, -number = {}, -pages = {085421}, -title = {{Mechanism of high-resolution STM/AFM imaging with functionalized tips}}, -url = {}, -volume = {90}, -year = {2014} -} - - -@article{phapalaoriginhighresol, -author = {Prokop, Hapala and Ruslan, Temirov and F. Stefan, Tautz and Pavel, Jelinek}, -doi = {10.1103/PhysRevLett.113.226101}, -file = {}, -issn = {}, -journal = {Phys. Rev. Lett.}, -month = nov, -number = {}, -pages = {226101}, -title = {{Origin of High-Resolution IETS-STM Images of Organic Molecules with Functionalized Tips}}, -url = {}, -volume = {113}, -year = {2014} -} - - - -@article{ebitzekstructrelaxmadesimple, -author = {Erik, Bitzek and Pekka , Koskinen and Franz, Gähler and Michael, Moseler and Peter, Gumbsch}, -doi = {10.1103/PhysRevLett.97.170201}, -file = {}, -issn = {}, -journal = {Phys. Rev. Lett.}, -month = oct, -number = {}, -pages = {170201}, -title = {{Structural Relaxation Made Simple}}, -url = {}, -volume = {97}, -year = {2006} -} - - - - -@article{chshguohighresolmodel, -author = {Chun-Sheng, Guo and Michel A. , Van Hove and Xinguo , Ren and Yong, Zhao}, -doi = {10.1021/jp511214e}, -file = {}, -issn = {}, -journal = {J. Phys. Chem. C}, -month = dec, -number = {}, -pages = {1483–1488}, -title = {{High-Resolution Model for Noncontact Atomic Force Microscopy with a Flexible Molecule on the Tip Apex}}, -url = {}, -volume = {119(3)}, -year = {2014} -} diff --git a/doc/intro/intro.tex b/doc/intro/intro.tex deleted file mode 100644 index 5f6d0aab..00000000 --- a/doc/intro/intro.tex +++ /dev/null @@ -1,143 +0,0 @@ -This is implementation of efficient and simple model for simulation of -High-resolution atomic force microscopy (AFM), scanning probe microscopy (STM) -and inelastic tunneling microscopy (IETS) images using classical forcefileds. - -There are two versions of the code: - -\begin{enumerate} - \item currently developed Python/C++ version in PyProbe\_nonOrtho (branch master - ); - to get quick esence of this model you can also try web interface hostet here: http://nanosurf.fzu.cz/ppr/ - for more details see wikipage: - https://github.com/ProkopHapala/ProbeParticleModel/wiki - \item Legacy fortran version in SHTM\_springTip2 (branch fortran ); - more detailed description o the fortran version is here: - http://nanosurf.fzu.cz/wiki/doku.php?id=probe\_particle\_model -\end{enumerate} -\cite{phapalamechhighresol} -\cite{phapalaoriginhighresol} - - -\section{C++ \& Python version} - -\subsection{Examples of results} - - -\subsection{How it works} - -\begin{itemize} - - \item Pauli-repulsion ( currently approximated by repulsive part of - Lenard-Jones potential $r^{-12}$ ) - \item van der Waals attraction ( currently approximated by attractive part - of Lenard-Jones potentia $r^{-6}$ ) - \item electrostatic ( currently can be computed as coulomb pairwise - interaction between PP and point charges in centers of atoms of sample, or - by reading electrostatic force-field obtained by derivative of sample - Hartree potential as described in supplementary of this paper - \cite{phapalaoriginhighresol}. - -\end{itemize} - -The computation of images is divided into two parts: -\begin{enumerate} - \item Precompute vector Forcefield ( Fx(x,y,z), Fy(x,y,z), Fz(x,y,z) ) over - sample and store it on a 3D-grid. ( see getLenardJonesFF and getCoulombFF - functions for more details ). After individial components of forcefiled are - sampled ( i.e. Lenard-Jones and electrostatic ) they are summed up to form - one single total effective forcefield in which Probe-Particle moves. - - \item relax Probe-Particle attached to the tip under influence of the total - effective forcefield. The relaxation of Probe-Particle is done using "Fast - Inertial Realxation Engine" (FIRE) algorithm - \cite{ebitzekstructrelaxmadesimple}. implemented in - FIRE:move() function. In each step of relaxation the forcefield on the grid - is interpolated in interpolate3DvecWrap function, considering periodic - boundary condition. From python the relaxation is called as relaxTipStroke - function providing 1D-array of tip positions, and obtaining back 1D-array of - Probe-Particle position after the relaxation and of force between tip - ProbePartcile and sample at that position. The lateral scan in (x,y) to - obtained stack of images is done by calling relaxTipStroke at different - (x,y) position of tip, where each call of relaxTipStroke does one approach - along z-direction. - -\end{enumerate} - -\subsection{Why it is splitted like this ?} - -This splitting of computation ( first sampling of forcefiled on the grid, and -than relaxation using interpolation) has several advantages over strightforward -computation of interaction on the fly during relaxation process. - - -\begin{itemize} - - \item \textbf{It is faster} - if there is ~100 atoms of sample, summing over - each pairwise Lennard-Jones interactions, is much slower, than just - interpolating the forcefield from the grid. Because force evaluation is done - several-times for each voxel of the 3D scanning grid, it is more efficient - to precompute it just once for each voxel, and then interpolate. - - \item \textbf{It is more flexible and general} - Decoupling of relaxation - process and computation of forcefiled allows us to plug-in any forcefield. - The original motivation was to used electrostatic forcefield obtained from - Hartree potential from DFT calculation. However, it is not limited to that. - We can plug in e.g. a derivative of potential energy of probe peraticle - (i.e. Xe or CO ) obtained by scanning it in DFT code, in similar way as Guo - did in \cite{chshguohighresolmodel} . The only limitation here is computational cost of obtaining - such potential from ab-initio calculation. -\end{itemize} - - - -\subsection{Code structure} -The code is divided into Python and C++, where performance intensive -computations are done in C++ and python is used as convenient scripting -interface for doing tasks like file I/O, plotting, memory management. For -binding of Python and C++ is used python ctypes library. - - -\subsubsection{Dependencies:} -\begin{itemize} - \item \textbf{C++} : g++ ( tested with g++ (Ubuntu 4.8.1-2ubuntu1~12.04) 4.8.1 ) - \item \textbf{Python} : python ( 2.7.3 ), numpy (1.9.2), matplotlib ( 1.4.3 ), ctypes - ( 1.1.0 ) -\end{itemize} - -\subsubsection{C++ source:} -\begin{itemize} - \item ProbeParticle.cpp - implementation of all performance intensive - ProbeParticle model as dynamic library which can be called dynamically from - python. - \item Vec3.cpp,Mat3.cpp math subroutines for operations with 3D vectors and - metrices -\end{itemize} - -\subsubsection{Python source:} -\begin{itemize} - \item ProbeParticle.py - Interface between C++ core and python ising - C-types. Here are also defined some python rutines like: - \begin{itemize} - \item conversion from Force to frequency shift ( Fz2df ), - \item evaluation of Lenard-Jones coeffitints ( getAtomsLJ ) - \item copy sample geometry to simulate periodic boundary condition ( - PBCAtoms ) - \item automatic setup of imagining area acroding to geometry of - nonperiodic sample ( autoGeom ) - \item default parameters of simulation ( params ) with subroutine to - read this parameters from a file ( loadParams ) - \end{itemize} - - - \item test2.py, testServer2.py - two examples of python scripts with run - actual computations using ProbeParticle library. The idea is that this files - can be modified by user to match particular task - \item basUtils.py - routines for loading of molecule geometry from - xyz-format, ( loadAtoms ), finding bonds and other. - \item Element.py and elements.py contains just parameters of atoms form - periodic table ( like effective raidus, color for visualization etc. ). It - is used by basUtils.py - - - -\end{itemize} diff --git a/doc/meeting_summary/meeting_summary.tex b/doc/meeting_summary/meeting_summary.tex deleted file mode 100644 index 641c941c..00000000 --- a/doc/meeting_summary/meeting_summary.tex +++ /dev/null @@ -1,61 +0,0 @@ -\section{13th of November 2015} - -\begin{enumerate} - \item \textbf{Cooding style} - - It is highly recommended to follow a generally accepted Python coding style. - It would be usefull for an easy sharing of the code. More information can be found - here: https://google.github.io/styleguide/pyguide.html - - \item \textbf{Documentation} - - It is required to put a docstring after each function definition. Points - needed to be described are the following: - \begin{enumerate} - \item What function is doing - - \textit{Function checks ...} - - \item Input parameters description - - \textit{:param x: is x coordinate of the particle} - - \item Output parameters description: - - \textit{ :return: a boolean, true if...} - \end{enumerate} - - After having created the docstring generation of the documentation can be done automatically - - \item \textbf{Standardized output} - - It must be usefull to create a function, which prints some ouput data in a - standardized format. - - \item \textbf{Modular structure of the code} - - In order to have in future as less as possible problems related to the code - design we need to define the structure as clear as possible. Because if later some other - codes will use the ProbeParticle, any changes of its strucure like - output format etc. will end up in a big mess. - - Possible features that code should have: - \begin{enumerate} - \item Using of another codes to compute $F_z$ has to be - straightforward - - \item Independent steps of calculations should be done by separate scripts. - - - \end{enumerate} - - - \item \textbf{Unexpected internal changes of the structure} - - Any changes of the molecule (its position, orientation, ...) must not be - used as default operations, but optional things with a clear output of what - have been done. This will prevent from possible confusions between what user - expected to obtain and what he has obtained. - - -\end{enumerate} diff --git a/doc/quick_start/quick_start.tex b/doc/quick_start/quick_start.tex deleted file mode 100644 index ae1cd5e3..00000000 --- a/doc/quick_start/quick_start.tex +++ /dev/null @@ -1,32 +0,0 @@ -The quickest start is just to run an example script like test2.py from terminal with python. -\begin{shadedbox} - \begin{lstlisting}[language=bash] -cd PyProbe_nonOrtho -python test2.py - \end{lstlisting} -\end{shadedbox} - - -the script will automatically -\begin{enumerate} -\item recompile the C++ code, -\item load the library, -\item load the input data example, -\item setup and run the simulation -\item and plot the results -\end{enumerate} - -User input without scripting - -Even though the code is supposed to be used as python library, and the main mean -of usage is to write python scripts, it can be also used fairly well without -editing any code, just by modification of input files. - -There are three input files: -\begin{enumerate} - - \item params.ini - setup parametrs of simulation ( grid, sanning area, tip parameters, conversion and plotting ) - \item input.xyz - setup the geometry of the sample ( using e.g. standard xyz file format ) - \item atomtypes.ini - define radius and binding energy between pairs of atoms ( used for definition of Lenard-Jones model potential ) - -\end{enumerate} diff --git a/doc/scripting/scripting.tex b/doc/scripting/scripting.tex deleted file mode 100644 index 0094ba00..00000000 --- a/doc/scripting/scripting.tex +++ /dev/null @@ -1,308 +0,0 @@ -\section{Examples} -Example of python scripts which setup simulation, run it, and plot results are -can be seen in test2.py and testServer2.py files. - -Here we provide overview of various operations done in this example scripts with -a bit more detailed explanation than just inline-comments within the script -code. The topics and are discussed in order in which are done in the example the -script test2.py. The \textbf{order} of operations is sometimes important ( e.g. you -cannot allocate grid until you set it's size, you cannot do scan until you -sample forcefiled etc. ) - - -\subsection{Import common libraries} - -\begin{shadedbox} - \begin{lstlisting}[language=python] -import os -import numpy as np -import matplotlib.pyplot as plt -import elements -import basUtils - \end{lstlisting} -\end{shadedbox} - - - - -\subsection{Load ProbeParticle library} - -C++ part of ProbeParticle library ( ProbeParticle.cpp ) is compiled into -ProbeParticle\_lib.so binary dynamic library. If we do any change in C++ code, we -have to recompile the library. This is done automatically during call of import -ProbeParticle if the file ProbeParticle\_lib.so is not pressent in the directory. -So, If we want force recompilation of the C++ dynamic library, we just delelete -the library. This can be done e.g. like this: - - -\begin{shadedbox} - \begin{lstlisting}[language=python] -def makeclean( ): - import os - [ os.remove(f) for f in os.listdir(".") if f.endswith(".so") ] - [ os.remove(f) for f in os.listdir(".") if f.endswith(".o") ] - [ os.remove(f) for f in os.listdir(".") if f.endswith(".pyc") ] - -makeclean( ) # force to recompile -import ProbeParticle as PP - - \end{lstlisting} -\end{shadedbox} - - - -\subsection{Setup system and simulation parameters} - -One way to change simulation parameters is to change the default dictionary -PP.params. Which is by default e.g. defined like this: - - -\begin{shadedbox} - \begin{lstlisting}[language=python] -params={ -'PBC': False, -'gridN': np.array( [ 150, 150, 50 ] ).astype(np.int32), -'gridA': np.array( [ 12.798, -7.3889, 0.00000 ] ), -'gridB': np.array( [ 12.798, 7.3889, 0.00000 ] ), -'gridC': np.array( [ 0, 0, 5.0 ] ), -'moleculeShift': np.array( [ 0.0, 0.0, -2.0 ] ), -'probeType': 8, -'charge': 0.00, -'r0Probe' : np.array( [ 0.00, 0.00, 4.00] ), -'stiffness': np.array( [ 0.5, 0.5, 20.00] ), -'scanStep': np.array( [ 0.10, 0.10, 0.10] ), -'scanMin': np.array( [ 0.0, 0.0, 5.0 ] ), -'scanMax': np.array( [ 20.0, 20.0, 8.0 ] ), -'kCantilever' : 1800.0, -'f0Cantilever' : 30300.0, -'Amplitude' : 1.0, -'plotSliceFrom': 16, -'plotSliceTo' : 22, -'plotSliceBy' : 1, -'imageInterpolation': 'nearest', -'colorscale' : 'gray', -} - \end{lstlisting} -\end{shadedbox} - -An alternative way is to load the parameters from a file using PP.loadParams. -This should be done before all other operations ( like definition and allocation -of sampling and scanning grid ) - - - - -\begin{shadedbox} - \begin{lstlisting}[language=python] -PP.loadParams( 'params.ini' ) # load parametes from ini file - \end{lstlisting} -\end{shadedbox} - - -Then we should define system geometry ( positions of atoms and it types ) -\begin{shadedbox} - \begin{lstlisting}[language=python] -atoms = basUtils.loadAtoms('input.xyz') -Rs = np.array([atoms[1],atoms[2],atoms[3]]); -iZs = np.array( atoms[0]) - \end{lstlisting} -\end{shadedbox} - - - - -ize and shape of sampling and scanning grid is normally set by parameters -PP.params['gridA'],'gridB','gridC','scanMin','scanMax'. However, in case of -non-periodic samples ( such as single molecule ) it is more conveninent let -program build proper sampling and scanning box around the molecule, instead of -defining the super-lattice verctors. This can be done by calling PP.autoGeom( -fitCell=True ) function like this: - -Before the simulation the geometry of molecule should be shifted to proper -position with respect to sampling grid. The shift of the molecule can be set -either manually in PP.params['moleculeShift' ], or let program set this -parameter automatically using PP.autoGeom( shiftXY=True ). - - - -\begin{shadedbox} - \begin{lstlisting}[language=python] -if not PP.params['PBC' ]: - PP.autoGeom( Rs, shiftXY=True, fitCell=True, border=3.0 ) - -Rs[0] += PP.params['moleculeShift' ][0] # shift molecule so that we sample reasonable part of potential -Rs[1] += PP.params['moleculeShift' ][1] -Rs[2] += PP.params['moleculeShift' ][2] -Rs = np.transpose( Rs, (1,0) ).copy() - - \end{lstlisting} -\end{shadedbox} - -If we used periodic boundary condition, it is necessary to multiply geometry of -sample to neighboring unit cells. There is automatic procedure PP.PBCAtoms() to -do that: - -\begin{shadedbox} - \begin{lstlisting}[language=python] -if PP.params['PBC' ]: - iZs,Rs,Qs = PP.PBCAtoms( iZs, Rs, Qs, avec=PP.params['gridA'], - bvec=PP.params['gridB'] ) - \end{lstlisting} -\end{shadedbox} - - -Beside the geometry (position of atoms) the sample properties are defined also -by parameters of this atoms,such as Lenard-Jones parameters and charge. In -principle it is possible to set parameters (C6,C12 and Q ) of each atom -independently by hand (it is just array of numbers). However, more convenient -way is to read it from file of L-J parameters by PP.loadSpecies() for each atom -type and set the the parameters for each atom instance by PP.getAtomsLJ(). -Charges for pairwise pointcharge Coulomb interaction are read from 5-th column -of geometry file. - -\textbf{NOTE}: it is important to do this step after the multiplication of periodic -images to neighboring cells. - -\begin{shadedbox} - \begin{lstlisting}[language=python] -Qs = np.array( atoms[4] ) -FFparams = PP.loadSpecies ( 'atomtypes.ini' ) -C6,C12 = PP.getAtomsLJ( PP.params['probeType'], iZs, FFparams ) - \end{lstlisting} -\end{shadedbox} - -\subsection{Define and allocate arrays} -Do this before simulation, in case it will crash - -\begin{shadedbox} - \begin{lstlisting}[language=python] -dz = PP.params['scanStep'][2] -zTips = np.arange( PP.params['scanMin'][2], PP.params['scanMax'][2]+0.00001, dz )[::-1]; -ntips = len(zTips); -print " zTips : ",zTips -rTips = np.zeros((ntips,3)) -rs = np.zeros((ntips,3)) -fs = np.zeros((ntips,3)) - -rTips[:,0] = 1.0 -rTips[:,1] = 1.0 -rTips[:,2] = zTips - -PP.setTip() - -xTips = np.arange( PP.params['scanMin'][0], PP.params['scanMax'][0]+0.00001, 0.1 ) -yTips = np.arange( PP.params['scanMin'][1], PP.params['scanMax'][1]+0.00001, 0.1 ) -extent=( xTips[0], xTips[-1], yTips[0], yTips[-1] ) -fzs = np.zeros(( len(zTips), len(yTips ), len(xTips ) )); - -nslice = 10; - -FFparams = PP.loadSpecies ( 'atomtypes.ini' ) -C6,C12 = PP.getAtomsLJ( PP.params['probeType'], iZs, FFparams ) - -print " # ============ define Grid " - -cell =np.array([ -PP.params['gridA'], -PP.params['gridB'], -PP.params['gridC'], -]).copy() - -gridN = PP.params['gridN'] - -FF = np.zeros( (gridN[2],gridN[1],gridN[0],3) ) - - \end{lstlisting} -\end{shadedbox} - - - - -\subsection{Sample Lenard-Jones and electrostatic potential} - -\begin{shadedbox} - \begin{lstlisting}[language=python] - -PP.setFF( FF, cell ) -PP.setFF_Pointer( FF ) -PP.getLenardJonesFF( Rs, C6, C12 ) - -plt.figure(figsize=( 5*nslice,5 )); plt.title( ' FF LJ ' ) -for i in range(nslice): - plt.subplot( 1, nslice, i+1 ) - plt.imshow( FF[i,:,:,2], origin='upper', interpolation='nearest' ) - - -withElectrostatics = ( abs( PP.params['charge'] )>0.001 ) -if withElectrostatics: - print " # =========== Sample Coulomb " - FFel = np.zeros( np.shape( FF ) ) - CoulombConst = -14.3996448915; # [ e^2 eV/A ] - Qs *= CoulombConst - #print Qs - PP.setFF_Pointer( FFel ) - PP.getCoulombFF ( Rs, Qs ) - plt.figure(figsize=( 5*nslice,5 )); plt.title( ' FFel ' ) - for i in range(nslice): - plt.subplot( 1, nslice, i+1 ) - plt.imshow( FFel[i,:,:,2], origin='upper', interpolation='nearest' ) - FF += FFel*PP.params['charge'] - PP.setFF_Pointer( FF ) - del FFel - -plt.figure(figsize=( 5*nslice,5 )); plt.title( ' FF total ' ) -for i in range(nslice): - plt.subplot( 1, nslice, i+1 ) - plt.imshow( FF[i,:,:,2], origin='upper', interpolation='nearest' ) - \end{lstlisting} -\end{shadedbox} - -\subsection{3D-Scan with ProbeParticle relaxation} -\begin{shadedbox} - \begin{lstlisting}[language=python] -for ix,x in enumerate( xTips ): - print "relax ix:", ix - rTips[:,0] = x - for iy,y in enumerate( yTips ): - rTips[:,1] = y - itrav = PP.relaxTipStroke( rTips, rs, fs ) / float( len(zTips) ) - fzs[:,iy,ix] = fs[:,2].copy() - \end{lstlisting} -\end{shadedbox} - - - -\subsection{Convert Fz -> df} -\begin{shadedbox} - \begin{lstlisting}[language=python] -dfs = PP.Fz2df( fzs, dz = dz, k0 = PP.params['kCantilever'], f0=PP.params['f0Cantilever'], n=int(PP.params['Amplitude']/dz) ) - \end{lstlisting} -\end{shadedbox} - - - -\subsection{Plot results of relaxed 3D-scan} -\begin{shadedbox} - \begin{lstlisting}[language=python] -print " # ============ Plot Relaxed Scan 3D " - -#slices = range( PP.params['plotSliceFrom'], PP.params['plotSliceTo'], PP.params['plotSliceBy'] ) -#print "plotSliceFrom, plotSliceTo, plotSliceBy : ", PP.params['plotSliceFrom'], PP.params['plotSliceTo'], PP.params['plotSliceBy'] -#print slices -#nslice = len( slices ) - -slices = range( 0, len(dfs) ) - -for ii,i in enumerate(slices): - print " plotting ", i - plt.figure( figsize=( 10,10 ) ) - plt.imshow( dfs[i], origin='upper', interpolation=PP.params['imageInterpolation'], cmap=PP.params['colorscale'], extent=extent ) - z = zTips[i] - PP.params['moleculeShift' ][2] - plt.colorbar(); - plt.xlabel(r' Tip_x $\AA$') - plt.ylabel(r' Tip_y $\AA$') - plt.title( r"df Tip_z = %2.2f $\AA$" %z ) - plt.savefig( 'df_%3i.png' %i, bbox_inches='tight' ) - - \end{lstlisting} -\end{shadedbox} diff --git a/doc/technical_details/technical_details.tex b/doc/technical_details/technical_details.tex deleted file mode 100644 index e471cd60..00000000 --- a/doc/technical_details/technical_details.tex +++ /dev/null @@ -1,48 +0,0 @@ -\section{Reference frame of the grids} - -\subsection{Vertical alignment} - -There are several non-intuitive hits about definition of coordinete system in -the code: - - -\begin{itemize} - \item The code works in coordinate system where the origin of sampling grid - is always in point (x,y,z)=(0,0,0). The geometry of sample should be alignet - (i.e.) shifted to fit into this grid. - - \item In reality probe particle cannot approach to sample than ~3.5-4.0 - \AA ( because van der Waals radius of most atoms is typically 1.5-2.0 - \AA ). For this reason we do not want to sample region closer than - 1.0-2.0 \AA to the molecule where the Pauli repulsion would be - extremely high, and where quantum mechanical interactions (chemical force) - would be important. - - \item The region of sanning scanMax,scanMin is defined as a postion of tip - apex (not probe particle). This means that probe particle can be outside the - sampled forcefield grid. The real position of probe particle (i.e. the point - where the force is interpolated from forcefield grid ) is shifted from this - position by considerable distance ( ~ 4.0 \AA ). E.g. At the begining - of each tip aproach the shift is r0Probe (relaxation is negligible). - - -\end{itemize} - - - -Overview of relative position of various points in space is schematically -illustrate on following image: - - - - -\subsection{Lateral alignment} -For \textbf{ periodic systems} ( PBC=true ) the lateral position of sample is taken as it -is provided by user and geometry of supercell ( gridA, gridB, gridC) are defined -manually. - -However, for \textbf{ non-periodic systems } it is convenient to use automatic routine -PP.autoGeom. This routine will make a bounding box around the sample ( according -to min an max coordinates of atoms ), and add some border (by default 3.0 -Angstroem ) and than shift the molecule in the center of that box. The result -should be aligned like this: