diff --git a/Doc/UserManual/AppendixListings.tex b/Doc/UserManual/AppendixListings.tex new file mode 100644 index 0000000000000000000000000000000000000000..85d89975bfac04cb4f9c6309df4d777eb21e8be2 --- /dev/null +++ b/Doc/UserManual/AppendixListings.tex @@ -0,0 +1,143 @@ +\newpage{\pagestyle{empty}\cleardoublepage} + + +%\mychapter{1}{Appendix} + +\chapter{Listings} + +\begin{lstlisting}[caption={Python script of example 1}, + label=script_ex1,captionpos=b,escapeinside={@}{@} ,language=python,style=eclipse, numbers= none,frame = leftline , + framerule = 2mm , + rulecolor = \color{lightgrey}, + breaklines = true] +import sys, os, numpy + +sys.path.append(os.path.abspath(os.path.join(os.path.split(__file__)[0],'..', '..', '..', 'lib'))) + +from libBornAgainCore import * + +def RunSimulation(): + # defining materials + mAmbience = MaterialManager.getHomogeneousMaterial("Air", 0.0, 0.0 ) + mSubstrate = MaterialManager.getHomogeneousMaterial("Substrate", + 6e-6, 2e-8) + mParticle = MaterialManager.getHomogeneousMaterial("Particle", 6e-4, 2e-8 ) + # collection of particles + cylinder_ff = FormFactorCylinder(5*nanometer, 5*nanometer) + cylinder = Particle(mParticle, cylinder_ff) + prism_ff = FormFactorPrism3(5*nanometer, 5*nanometer) + prism = Particle(mParticle, prism_ff) + particle_decoration = ParticleDecoration() + particle_decoration.addParticle(cylinder, 0.0, 0.5) + particle_decoration.addParticle(prism, 0.0, 0.5) + interference = InterferenceFunctionNone() + particle_decoration.addInterferenceFunction(interference) + # air layer with particles and substrate form multi layer + air_layer = Layer(mAmbience) + air_layer.setDecoration(particle_decoration) + substrate_layer = Layer(mSubstrate, 0) + multi_layer = MultiLayer() + multi_layer.addLayer(air_layer) + multi_layer.addLayer(substrate_layer) + + # build and run simulation + simulation = Simulation() + simulation.setDetectorParameters(100,-1.0*degree, 1.0*degree, + 100, 0.0*degree, 2.0*degree, True) + simulation.setBeamParameters(1.0*angstrom, 0.2*degree, 0.0*degree) + simulation.setSample(multi_layer) + simulation.runSimulation() + + # retrieving intensity data + return GetOutputData(simulation) +\end{lstlisting} + + +\begin{lstlisting}[caption={Python script of fitting example}, + label=script_exfit1,captionpos=b,escapeinside={@}{@} ,language=python,style=eclipse, numbers= none,frame = leftline , + framerule = 2mm , + rulecolor = \color{lightgrey}, + breaklines = true] +import sys, os, numpy +import math + +sys.path.append(os.path.abspath( + os.path.join(os.path.split(__file__)[0], + '..', '..', '..', 'lib'))) + +from libBornAgainCore import * +from libBornAgainFit import * + +# values we want to find +cylinder_height = 5.0*nanometer +cylinder_radius = 5.0*nanometer +prism3_half_side = 5.0*nanometer +prism3_height = 5.0*nanometer +# ---------------------------------- +# create sample : cylinders and prisms in the air on substrate layer +# ---------------------------------- +def buildSample(): + # defining materials + mAmbience = MaterialManager.getHomogeneousMaterial("Air", 0.0, 0.0 ) + mSubstrate = MaterialManager.getHomogeneousMaterial("Substrate", + 6e-6, 2e-8 ) + mParticle = MaterialManager.getHomogeneousMaterial("Particle", 6e-4, 2e-8 ) + # collection of particles + cylinder_ff = FormFactorCylinder(cylinder_height, cylinder_radius) + cylinder = Particle(mParticle, cylinder_ff) + prism_ff = FormFactorPrism3(prism3_height, prism3_half_side) + prism = Particle(mParticle, prism_ff) + particle_decoration = ParticleDecoration() + particle_decoration.addParticle(cylinder, 0.0, 0.5) + particle_decoration.addParticle(prism,0.0, 0.5) + interference = InterferenceFunctionNone() + particle_decoration.addInterferenceFunction(interference) + # air layer with particles and substrate form multi layer + air_layer = Layer(mAmbience) + air_layer.setDecoration(particle_decoration) + substrate_layer = Layer(mSubstrate, 0) + multi_layer = MultiLayer() + multi_layer.addLayer(air_layer) + multi_layer.addLayer(substrate_layer) + return multi_layer +# ---------------------------------- +# create sample : input beam and detector - characteristics +# ---------------------------------- +def createSimulation(): + simulation = Simulation() + simulation.setDetectorParameters(100, 0.0*degree, 2.0*degree,100 , 0.0*degree, 2.0*degree) + simulation.setBeamParameters(1.0*angstrom, 0.2*degree, 0.0*degree) + return simulation +# ---------------------------------- +# read "real" data from file +# ---------------------------------- +def GetRealData(): + real_data = OutputDataIOFactory.getOutputData('Refdata_fitcylinderprisms.txt') + return real_data +# ---------------------------------- +# run fitting +# ---------------------------------- +def run_fitting(): + sample = buildSample() + simulation = createSimulation() + simulation.setSample(sample) + # get the real data, which is simply results of our simulation with default values + real_data = GetRealData() + # run the simulation + simulation.runSimulation() + # linking real and numerical (to be fitted) data + fitSuite = FitSuite() + fitSuite.addSimulationAndRealData(simulation, real_data) + # setting fitting minimizer + fitSuite.setMinimizer( MinimizerFactory.createMinimizer("Minuit2","Migrad") ) + # setting fitting parameters + fitSuite.addFitParameter("*FormFactorCylinder/height", 4.*nanometer, 0.01*nanometer, AttLimits.lowerLimited(0.01) ) + fitSuite.addFitParameter("*FormFactorCylinder/radius", 6.*nanometer, 0.01*nanometer, AttLimits.lowerLimited(0.01) ) + fitSuite.addFitParameter("*FormFactorPrism3/height", 4.*nanometer, 0.01*nanometer, AttLimits.lowerLimited(0.01) ) + fitSuite.addFitParameter("*FormFactorPrism3/half_side", 6*nanometer, 0.01*nanometer, AttLimits.lowerLimited(0.01) ) + # run fit + fitSuite.runFit() + # print fit results + fitSuite.printResults() +\end{lstlisting} + diff --git a/Doc/UserManual/Appendix.tex b/Doc/UserManual/AppendixPhysics.tex similarity index 100% rename from Doc/UserManual/Appendix.tex rename to Doc/UserManual/AppendixPhysics.tex diff --git a/Doc/UserManual/FittingExamples.tex b/Doc/UserManual/FittingExamples.tex index 4a2e7eaa8feffac57e79cf683e8c4d19310fc986..5831abfea0af6d27d0a671a9acdcd86336585784 100644 --- a/Doc/UserManual/FittingExamples.tex +++ b/Doc/UserManual/FittingExamples.tex @@ -611,93 +611,6 @@ Listing~\ref{script_exfit1}, the text given in~\ref{output_exfit1} should be dis screen (generated using \Code{PrintResults}). -\begin{lstlisting}[caption={Python script of fitting example}, - label=script_exfit1,captionpos=b,escapeinside={@}{@} ,language=python,style=eclipse, numbers= none,frame = leftline , - framerule = 2mm , - rulecolor = \color{lightgrey}, - breaklines = true] -import sys, os, numpy -import math - -sys.path.append(os.path.abspath( - os.path.join(os.path.split(__file__)[0], - '..', '..', '..', 'lib'))) - -from libBornAgainCore import * -from libBornAgainFit import * - -# values we want to find -cylinder_height = 5.0*nanometer -cylinder_radius = 5.0*nanometer -prism3_half_side = 5.0*nanometer -prism3_height = 5.0*nanometer -# ---------------------------------- -# create sample : cylinders and prisms in the air on substrate layer -# ---------------------------------- -def buildSample(): - # defining materials - mAmbience = MaterialManager.getHomogeneousMaterial("Air", 0.0, 0.0 ) - mSubstrate = MaterialManager.getHomogeneousMaterial("Substrate", - 6e-6, 2e-8 ) - mParticle = MaterialManager.getHomogeneousMaterial("Particle", 6e-4, 2e-8 ) - # collection of particles - cylinder_ff = FormFactorCylinder(cylinder_height, cylinder_radius) - cylinder = Particle(mParticle, cylinder_ff) - prism_ff = FormFactorPrism3(prism3_height, prism3_half_side) - prism = Particle(mParticle, prism_ff) - particle_decoration = ParticleDecoration() - particle_decoration.addParticle(cylinder, 0.0, 0.5) - particle_decoration.addParticle(prism,0.0, 0.5) - interference = InterferenceFunctionNone() - particle_decoration.addInterferenceFunction(interference) - # air layer with particles and substrate form multi layer - air_layer = Layer(mAmbience) - air_layer.setDecoration(particle_decoration) - substrate_layer = Layer(mSubstrate, 0) - multi_layer = MultiLayer() - multi_layer.addLayer(air_layer) - multi_layer.addLayer(substrate_layer) - return multi_layer -# ---------------------------------- -# create sample : input beam and detector - characteristics -# ---------------------------------- -def createSimulation(): - simulation = Simulation() - simulation.setDetectorParameters(100, 0.0*degree, 2.0*degree,100 , 0.0*degree, 2.0*degree) - simulation.setBeamParameters(1.0*angstrom, 0.2*degree, 0.0*degree) - return simulation -# ---------------------------------- -# read "real" data from file -# ---------------------------------- -def GetRealData(): - real_data = OutputDataIOFactory.getOutputData('Refdata_fitcylinderprisms.txt') - return real_data -# ---------------------------------- -# run fitting -# ---------------------------------- -def run_fitting(): - sample = buildSample() - simulation = createSimulation() - simulation.setSample(sample) - # get the real data, which is simply results of our simulation with default values - real_data = GetRealData() - # run the simulation - simulation.runSimulation() - # linking real and numerical (to be fitted) data - fitSuite = FitSuite() - fitSuite.addSimulationAndRealData(simulation, real_data) - # setting fitting minimizer - fitSuite.setMinimizer( MinimizerFactory.createMinimizer("Minuit2","Migrad") ) - # setting fitting parameters - fitSuite.addFitParameter("*FormFactorCylinder/height", 4.*nanometer, 0.01*nanometer, AttLimits.lowerLimited(0.01) ) - fitSuite.addFitParameter("*FormFactorCylinder/radius", 6.*nanometer, 0.01*nanometer, AttLimits.lowerLimited(0.01) ) - fitSuite.addFitParameter("*FormFactorPrism3/height", 4.*nanometer, 0.01*nanometer, AttLimits.lowerLimited(0.01) ) - fitSuite.addFitParameter("*FormFactorPrism3/half_side", 6*nanometer, 0.01*nanometer, AttLimits.lowerLimited(0.01) ) - # run fit - fitSuite.runFit() - # print fit results - fitSuite.printResults() -\end{lstlisting} \begin{lstlisting}[caption={Output of fit using Python script~\ref{script_exfit1}},language=bash,basicstyle=\small\lstfontfamily,% style=commandline, label=output_exfit1,captionpos=b,escapeinside={@}{@}, numbers= diff --git a/Doc/UserManual/SimulationExamples.tex b/Doc/UserManual/SimulationExamples.tex index 3f873951527172f9f3998effb514612774a65519..c5ade8dec3f9ff65704db19da15d94d5007c6ca7 100644 --- a/Doc/UserManual/SimulationExamples.tex +++ b/Doc/UserManual/SimulationExamples.tex @@ -1,5 +1,5 @@ \newpage -\chapter{Simulation} \SecLabel{Simulation} +\chapter{Simulation examples} \SecLabel{Simulation} \section{General methodology} A simulation of GISAXS using \BornAgain\ consists of following steps: @@ -364,53 +364,6 @@ is associated with the output intensity in arbitrary units. } \label{fig:output_ex1} \end{figure} -\newpage -\begin{lstlisting}[caption={Python script of example 1}, - label=script_ex1,captionpos=b,escapeinside={@}{@} ,language=python,style=eclipse, numbers= none,frame = leftline , - framerule = 2mm , - rulecolor = \color{lightgrey}, - breaklines = true] -import sys, os, numpy - -sys.path.append(os.path.abspath(os.path.join(os.path.split(__file__)[0],'..', '..', '..', 'lib'))) - -from libBornAgainCore import * - -def RunSimulation(): - # defining materials - mAmbience = MaterialManager.getHomogeneousMaterial("Air", 0.0, 0.0 ) - mSubstrate = MaterialManager.getHomogeneousMaterial("Substrate", - 6e-6, 2e-8) - mParticle = MaterialManager.getHomogeneousMaterial("Particle", 6e-4, 2e-8 ) - # collection of particles - cylinder_ff = FormFactorCylinder(5*nanometer, 5*nanometer) - cylinder = Particle(mParticle, cylinder_ff) - prism_ff = FormFactorPrism3(5*nanometer, 5*nanometer) - prism = Particle(mParticle, prism_ff) - particle_decoration = ParticleDecoration() - particle_decoration.addParticle(cylinder, 0.0, 0.5) - particle_decoration.addParticle(prism, 0.0, 0.5) - interference = InterferenceFunctionNone() - particle_decoration.addInterferenceFunction(interference) - # air layer with particles and substrate form multi layer - air_layer = Layer(mAmbience) - air_layer.setDecoration(particle_decoration) - substrate_layer = Layer(mSubstrate, 0) - multi_layer = MultiLayer() - multi_layer.addLayer(air_layer) - multi_layer.addLayer(substrate_layer) - - # build and run simulation - simulation = Simulation() - simulation.setDetectorParameters(100,-1.0*degree, 1.0*degree, - 100, 0.0*degree, 2.0*degree, True) - simulation.setBeamParameters(1.0*angstrom, 0.2*degree, 0.0*degree) - simulation.setSample(multi_layer) - simulation.runSimulation() - - # retrieving intensity data - return GetOutputData(simulation) -\end{lstlisting} % \newpage % \subsection{Hello, minted} diff --git a/Doc/UserManual/UserManual.pdf b/Doc/UserManual/UserManual.pdf index 2016a5dddeb80ae768c2adf3eaede37fbe8ae60c..9aa6542b119d284e96b757509b8914f02b8e4c4f 100644 Binary files a/Doc/UserManual/UserManual.pdf and b/Doc/UserManual/UserManual.pdf differ diff --git a/Doc/UserManual/UserManual.tex b/Doc/UserManual/UserManual.tex index df4f185246834854ecf94b0b736f3c9b5993b3ad..3bd6810b165ea02323d67c93216b54463f4785ae 100644 --- a/Doc/UserManual/UserManual.tex +++ b/Doc/UserManual/UserManual.tex @@ -180,10 +180,14 @@ Forschungszentrum J\"ulich GmbH \input{Introduction} \input{QuickStart} \input{Installation} -\input{SoftwareArchitecture} -\input{SoftwareDesignOverview} \input{SimulationExamples} \input{FittingExamples} +\input{SoftwareArchitecture} +\input{SoftwareDesignOverview} +\appendix +\input{AppendixListings} +\input{AppendixPhysics} + %List of notations\\ Bugs\\ License agreement\\ Directory layout \\ FAQ \\ Future development.