updated documentation

This commit is contained in:
maliakal_d 2019-04-08 15:03:30 +02:00
parent efb96869e2
commit 6171915f29
171 changed files with 8018 additions and 684137 deletions

5
.gitignore vendored
View File

@ -1,11 +1,8 @@
.cproject
.project
bin/
.settings
*.aux
*.log
*.out
*.toc
build
docs/
RELEASE.txt

View File

@ -0,0 +1,77 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>About this document ...</TITLE>
<META NAME="description" CONTENT="About this document ...">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="Software_Upgrade.html">
<LINK REL="up" HREF="slsDetectorInstall.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next_g.png">
<A NAME="tex2html437"
HREF="slsDetectorInstall.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html433"
HREF="JUNGFRAU_On_board_Software.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html439"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Up:</B> <A NAME="tex2html438"
HREF="slsDetectorInstall.html">SLS Detectors software installation</A>
<B> Previous:</B> <A NAME="tex2html434"
HREF="JUNGFRAU_On_board_Software.html">JUNGFRAU On-board Software</A>
&nbsp; <B> <A NAME="tex2html440"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00060000000000000000">
About this document ...</A>
</H1>
<STRONG>SLS Detectors software installation</STRONG><P>
This document was generated using the
<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2012 (1.2)
<P>
Copyright &#169; 1993, 1994, 1995, 1996,
<A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</A>,
Computer Based Learning Unit, University of Leeds.
<BR>
Copyright &#169; 1997, 1998, 1999,
<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>,
Mathematics Department, Macquarie University, Sydney.
<P>
The command line arguments were: <BR>
<STRONG>latex2html</STRONG> <TT>-split 16 -long_titles 5 slsDetectorInstall.tex</TT>
<P>
The translation was initiated by Thattil Dhanya on 2019-04-08
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,154 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Binaries</TITLE>
<META NAME="description" CONTENT="Binaries">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="Software_Package.html">
<LINK REL="up" HREF="Software_Package.html">
<LINK REL="next" HREF="Install_Binaries_via_Conda.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html86"
HREF="Install_Binaries_via_Conda.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html82"
HREF="Software_Package.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html78"
HREF="Software_Package.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html84"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html87"
HREF="Install_Binaries_via_Conda.html">Install Binaries via Conda</A>
<B> Up:</B> <A NAME="tex2html83"
HREF="Software_Package.html">The Software Package</A>
<B> Previous:</B> <A NAME="tex2html79"
HREF="Software_Package.html">The Software Package</A>
&nbsp; <B> <A NAME="tex2html85"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00021000000000000000">
Binaries</A>
</H2>
The complete software package is composed of several programs which
can be installed (or locally compiled) depending on one's requirements:
<P>
<UL>
<LI><FONT COLOR="#0000ff">libSlsDetector.so, libSlsReceiver.so</FONT>:
<BR>
The <I>slsDetector shared and static libraries</I>, which are
necessary for all user interfaces. The <I>C++ API</I> via the class
<I>slsDetectorUsers</I> (installed with the default package) or the
<I>Python API</I> via the class <I>sls_detector</I> (installed with the
package including Python API), which can be used from the user's acquisition
software to control the detectors and the data receivers.
<P>
</LI>
<LI><FONT COLOR="#0000ff">sls_detector_put, sls_detector_get,
sls_detector_acquire, sls_detector_help</FONT>:
<BR>
The <I>command line interfaces</I>, which are provided to communicate with the
detectors and data receivers using the command line.
<P>
</LI>
<LI><FONT COLOR="#0000ff">slsReceiver</FONT>:
<BR>
The <I>data receiver</I>, which can be run on a different machine than the
client, receives the data from the detector and processes it. The receiver can
be configured, controlled and monitored by the client.
<P>
</LI>
<LI><FONT COLOR="#0000ff">slsMultiReceiver</FONT>:
<BR>
It is the same as the <I>slsReceiver</I>, but that it is a single process
for many multiple slsReceiver child processes. One can configure the start TCP port,
number of slsReceiver processes and if call back should be enabled or not.
<P>
</LI>
<LI><FONT COLOR="#0000ff">slsDetectorGUI</FONT>:
<BR>
The <I>graphical user interface</I>, which provides a user friendly way
of operating the detectors and data receivers with online data preview.
<P>
</LI>
<LI><FONT COLOR="#0000ff">energyCalibrationWizard,angularCalibrationWizard</FONT>:
<BR>
The <I>calibration wizards</I> to analyze the data and produce the energy or
angular calibration files.
<P>
</LI>
<LI>The <I>virtual Detector servers</I> to simulate the detectors behavior.
However, only control commands work, not the data acquisition itself.
</LI>
</UL>
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html86"
HREF="Install_Binaries_via_Conda.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html82"
HREF="Software_Package.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html78"
HREF="Software_Package.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html84"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html87"
HREF="Install_Binaries_via_Conda.html">Install Binaries via Conda</A>
<B> Up:</B> <A NAME="tex2html83"
HREF="Software_Package.html">The Software Package</A>
<B> Previous:</B> <A NAME="tex2html79"
HREF="Software_Package.html">The Software Package</A>
&nbsp; <B> <A NAME="tex2html85"
HREF="Contents.html">Contents</A></B>
<!--End of Navigation Panel-->
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,81 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Clean Shared Memory</TITLE>
<META NAME="description" CONTENT="Clean Shared Memory">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="Setting_environment_variabl.html">
<LINK REL="up" HREF="Install_via_Source_Code.html">
<LINK REL="next" HREF="Software_Upgrade.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html265"
HREF="Software_Upgrade.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html261"
HREF="Install_via_Source_Code.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html257"
HREF="Without_bashrc_file.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html263"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html266"
HREF="Software_Upgrade.html">Software Upgrade</A>
<B> Up:</B> <A NAME="tex2html262"
HREF="Install_via_Source_Code.html">Install via Source Code</A>
<B> Previous:</B> <A NAME="tex2html258"
HREF="Without_bashrc_file.html">Without .bashrc file</A>
&nbsp; <B> <A NAME="tex2html264"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00045000000000000000">
Clean Shared Memory</A>
</H2>
It is very crucial to clean the shared memory, before using a new version of
the SLS Detector Package or a different detector type.
<P>
One can use the <code>cleansharedmemory.sh</code> script available under the
slsDetector Package.
<P>
One can also just delete the files that are typically located under /dev/shm/ folder
and starts with slsDetectorPackage.
<P>
One no longer has to delete segments using ipcs.
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,81 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Compilation</TITLE>
<META NAME="description" CONTENT="Compilation">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Setting_environment_variabl.html">
<LINK REL="previous" HREF="Requirements.html">
<LINK REL="up" HREF="Install_via_Source_Code.html">
<LINK REL="next" HREF="Using_script_cmk_sh.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html195"
HREF="Using_script_cmk_sh.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html191"
HREF="Install_via_Source_Code.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html185"
HREF="Root_Installation_Calibrati.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html193"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html196"
HREF="Using_script_cmk_sh.html">Using script cmk.sh</A>
<B> Up:</B> <A NAME="tex2html192"
HREF="Install_via_Source_Code.html">Install via Source Code</A>
<B> Previous:</B> <A NAME="tex2html186"
HREF="Root_Installation_Calibrati.html">Root Installation for Calibration</A>
&nbsp; <B> <A NAME="tex2html194"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00043000000000000000">
Compilation</A>
</H2>
One requires <code>cmake</code> to compile and can be done in two ways:
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html197"
HREF="Using_script_cmk_sh.html">Using script cmk.sh</A>
<LI><A NAME="tex2html198"
HREF="Directly_using_cmake.html">Directly using cmake</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,104 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Contents</TITLE>
<META NAME="description" CONTENT="Contents">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Software_Package.html">
<LINK REL="previous" HREF="slsDetectorInstall.html">
<LINK REL="up" HREF="slsDetectorInstall.html">
<LINK REL="next" HREF="Software_Package.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html49"
HREF="Software_Package.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html47"
HREF="slsDetectorInstall.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html41"
HREF="slsDetectorInstall.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html50"
HREF="Software_Package.html">The Software Package</A>
<B> Up:</B> <A NAME="tex2html48"
HREF="slsDetectorInstall.html">SLS Detectors software installation</A>
<B> Previous:</B> <A NAME="tex2html42"
HREF="slsDetectorInstall.html">SLS Detectors software installation</A>
<BR>
<BR>
<!--End of Navigation Panel-->
<BR>
<H2><A NAME="SECTION00010000000000000000">
Contents</A>
</H2>
<!--Table of Contents-->
<UL>
<LI><A NAME="tex2html51"
HREF="Software_Package.html">The Software Package</A>
<UL>
<LI><A NAME="tex2html52"
HREF="Binaries.html">Binaries</A>
</UL>
<BR>
<LI><A NAME="tex2html53"
HREF="Install_Binaries_via_Conda.html">Install Binaries via Conda</A>
<LI><A NAME="tex2html54"
HREF="Install_via_Source_Code.html">Install via Source Code</A>
<UL>
<LI><A NAME="tex2html55"
HREF="Download_Source_Code.html">Download Source Code</A>
<LI><A NAME="tex2html56"
HREF="Requirements.html">Requirements</A>
<LI><A NAME="tex2html57"
HREF="Compilation.html">Compilation</A>
<LI><A NAME="tex2html58"
HREF="Setting_environment_variabl.html">Setting environment variables</A>
<LI><A NAME="tex2html59"
HREF="Clean_Shared_Memory.html">Clean Shared Memory</A>
</UL>
<BR>
<LI><A NAME="tex2html60"
HREF="Software_Upgrade.html">Software Upgrade</A>
<UL>
<LI><A NAME="tex2html61"
HREF="MYTHEN.html">MYTHEN</A>
<LI><A NAME="tex2html62"
HREF="GOTTHARD.html">GOTTHARD</A>
<LI><A NAME="tex2html63"
HREF="EIGER.html">EIGER</A>
<LI><A NAME="tex2html64"
HREF="JUNGFRAU.html">JUNGFRAU</A>
</UL></UL>
<!--End of Table of Contents-->
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,96 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Directly using cmake</TITLE>
<META NAME="description" CONTENT="Directly using cmake">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="Using_script_cmk_sh.html">
<LINK REL="up" HREF="Compilation.html">
<LINK REL="next" HREF="Setting_environment_variabl.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html219"
HREF="Setting_environment_variabl.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html215"
HREF="Compilation.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html211"
HREF="Using_script_cmk_sh.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html217"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html220"
HREF="Setting_environment_variabl.html">Setting environment variables</A>
<B> Up:</B> <A NAME="tex2html216"
HREF="Compilation.html">Compilation</A>
<B> Previous:</B> <A NAME="tex2html212"
HREF="Using_script_cmk_sh.html">Using script cmk.sh</A>
&nbsp; <B> <A NAME="tex2html218"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00043200000000000000">
Directly using cmake</A>
</H3>
<P>
Use cmake to create out-of-source builds, by creating a build folder parallel to
source directory.
<PRE>
$ cd ..
$ mkdir slsDetectorPackage-build
$ cd slsDetectorPackage-build
$ cmake ../slsDetectorPackage -DCMAKE_BUILD_TYPE=Debug -DSLS_USE_HDF5=OFF
$ make
</PRE>
<P>
Use the following as an example to compile statically and using specific hdf5
folder
<PRE>
$ HDF5_ROOT=/opt/hdf5v1.10.0 cmake ../slsDetectorPackage
-DCMAKE_BUILD_TYPE=Debug -DSLS_USE_HDF5=ON
</PRE>
<P>
After compiling, the libraries and executables will be found at `bin` directory
<PRE>
$ ls bin/
gui_client libSlsDetector.a libSlsDetector.so libSlsReceiver.a
libSlsReceiver.so sls_detector_acquire sls_detector_get slsDetectorGui
sls_detector_help sls_detector_put slsReceiver
</PRE>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,88 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Download Source Code</TITLE>
<META NAME="description" CONTENT="Download Source Code">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Requirements.html">
<LINK REL="previous" HREF="Install_via_Source_Code.html">
<LINK REL="up" HREF="Install_via_Source_Code.html">
<LINK REL="next" HREF="Requirements.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html134"
HREF="Requirements.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html130"
HREF="Install_via_Source_Code.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html124"
HREF="Install_via_Source_Code.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html132"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html135"
HREF="Requirements.html">Requirements</A>
<B> Up:</B> <A NAME="tex2html131"
HREF="Install_via_Source_Code.html">Install via Source Code</A>
<B> Previous:</B> <A NAME="tex2html125"
HREF="Install_via_Source_Code.html">Install via Source Code</A>
&nbsp; <B> <A NAME="tex2html133"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00041000000000000000">
Download Source Code</A>
</H2>
<P>
<UL>
<LI>Only the package
<PRE>
#Clone source code with specific release
git clone https://github.com/slsdetectorgroup/slsDetectorPackage.git --branch
4.0.0
</PRE>
</LI>
<LI>The package including Python interface
<PRE>
#Clone source code with specific release
git clone https://github.com/slsdetectorgroup/sls_detector.git --branch
4.0.0
</PRE>
</LI>
</UL>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,86 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>EIGER</TITLE>
<META NAME="description" CONTENT="EIGER">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="JUNGFRAU.html">
<LINK REL="previous" HREF="GOTTHARD.html">
<LINK REL="up" HREF="Software_Upgrade.html">
<LINK REL="next" HREF="EIGER_Firmware.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html373"
HREF="EIGER_Firmware.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html369"
HREF="Software_Upgrade.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html363"
HREF="GOTTHARD_On_board_Software.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html371"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html374"
HREF="EIGER_Firmware.html">EIGER Firmware</A>
<B> Up:</B> <A NAME="tex2html370"
HREF="Software_Upgrade.html">Software Upgrade</A>
<B> Previous:</B> <A NAME="tex2html364"
HREF="GOTTHARD_On_board_Software.html">GOTTHARD On-board Software</A>
&nbsp; <B> <A NAME="tex2html372"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00053000000000000000">
EIGER</A>
</H2>
<P>
In such cases, the users are not expected to compile the software
themselves (which would require dedicated softwares) but only to download on the
detector board the programming files and/or software package provided by
the SLS Detectors group.
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html375"
HREF="EIGER_Firmware.html">EIGER Firmware</A>
<LI><A NAME="tex2html376"
HREF="EIGER_On_board_Software.html">EIGER On-board Software</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,122 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>EIGER Firmware</TITLE>
<META NAME="description" CONTENT="EIGER Firmware">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="EIGER_On_board_Software.html">
<LINK REL="previous" HREF="EIGER.html">
<LINK REL="up" HREF="EIGER.html">
<LINK REL="next" HREF="EIGER_On_board_Software.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html387"
HREF="EIGER_On_board_Software.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html383"
HREF="EIGER.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html377"
HREF="EIGER.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html385"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html388"
HREF="EIGER_On_board_Software.html">EIGER On-board Software</A>
<B> Up:</B> <A NAME="tex2html384"
HREF="EIGER.html">EIGER</A>
<B> Previous:</B> <A NAME="tex2html378"
HREF="EIGER.html">EIGER</A>
&nbsp; <B> <A NAME="tex2html386"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00053100000000000000">
EIGER Firmware</A>
</H3>
<I>For SLS Detector Package v4.0.0</I>
<BR>
Minimum compatible version: 22
<BR>
Latest version: 22
<BR>
<P>
<OL>
<LI>One must get the latest package's corresponding bit files from the SLS
Detector Group.
</LI>
<LI>If one does not have the bcp script, that should also be obtained from
the SLS Detector Group. It is required to program the bit files and requires
that tftp be installed on the pc.
</LI>
<LI>Bring the detector into programmable mode by either of the following ways.
Both ways end up in just the central LED blinking.
<OL>
<LI>hard reset on the back panel boards resulting in blinking LEDS
</LI>
<LI>by having the following program running in the background.
<PRE>
boot_recovery
</PRE>
</LI>
</OL>
</LI>
<LI>Start a terminal for each half module and run the following to see
progress.
<PRE>
nc -p 3000 -u bebxxx 3000
</PRE>
</LI>
<LI>Run the following to update firmware
<PRE>
#update back end fpga
bcp download.bit bebxxx:/fw0
#update front left fpga
bcp download.bit bebxxx:/febl
#update front right fpga
bcp download.bit bebxxx:/febr
#update kernel
bcp download.bit bebxxx:/kernel
</PRE>
Please update bit files with great caution as it could make your board
inaccessible, if done incorrectly.
</LI>
</OL>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,105 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>EIGER On-board Software</TITLE>
<META NAME="description" CONTENT="EIGER On-board Software">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="EIGER_Firmware.html">
<LINK REL="up" HREF="EIGER.html">
<LINK REL="next" HREF="JUNGFRAU.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html397"
HREF="JUNGFRAU.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html393"
HREF="EIGER.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html389"
HREF="EIGER_Firmware.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html395"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html398"
HREF="JUNGFRAU.html">JUNGFRAU</A>
<B> Up:</B> <A NAME="tex2html394"
HREF="EIGER.html">EIGER</A>
<B> Previous:</B> <A NAME="tex2html390"
HREF="EIGER_Firmware.html">EIGER Firmware</A>
&nbsp; <B> <A NAME="tex2html396"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00053200000000000000">
EIGER On-board Software</A>
</H3>
Every SLS Detector package release will have its coresponding matching on-board
server under <B>slsDetectorPackage/serverBin</B>.
<P>
Update the on-board software without connecting to the detector
<PRE>
#password for the boards: root
#Kill existing servers that are running on the detector
ssh root@beb031 killall eigerDetectorServer;
#Copy on-board server to detector inside executables folder
scp ~/path-where-it-is/eigerDetectorServerxxx root@bebxxx:~/executables;
#Overwrite the actual eigerDetectorServer on board
scp ~/path-where-it-is/eigerDetectorServerxxx
root@bebxxx:~/executables/eigerDetectorServer;
#sync
ssh root@bebxxx sync;
#reboot the eiger board
</PRE>
<P>
<P><P>
<BR>
One can connect to the detector by:
<PRE>
ssh root@bebxxx
password: root
</PRE>
<P>
The on-board server is in&nbsp;/executables folder and respawned at startup in
<BR><code>/etc/rc5.d/S50board_com.sh</code>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,86 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>GOTTHARD</TITLE>
<META NAME="description" CONTENT="GOTTHARD">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="EIGER.html">
<LINK REL="previous" HREF="MYTHEN.html">
<LINK REL="up" HREF="Software_Upgrade.html">
<LINK REL="next" HREF="GOTTHARD_Firmware.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html337"
HREF="GOTTHARD_Firmware.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html333"
HREF="Software_Upgrade.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html327"
HREF="MYTHEN_On_board_Software.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html335"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html338"
HREF="GOTTHARD_Firmware.html">GOTTHARD Firmware</A>
<B> Up:</B> <A NAME="tex2html334"
HREF="Software_Upgrade.html">Software Upgrade</A>
<B> Previous:</B> <A NAME="tex2html328"
HREF="MYTHEN_On_board_Software.html">MYTHEN On-board Software</A>
&nbsp; <B> <A NAME="tex2html336"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00052000000000000000">
GOTTHARD</A>
</H2>
<P>
In such cases, the users are not expected to compile the software
themselves (which would require dedicated softwares) but only to download on the
detector board the programming files and/or software package provided by
the SLS Detectors group.
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html339"
HREF="GOTTHARD_Firmware.html">GOTTHARD Firmware</A>
<LI><A NAME="tex2html340"
HREF="GOTTHARD_On_board_Software.html">GOTTHARD On-board Software</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,156 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>GOTTHARD Firmware</TITLE>
<META NAME="description" CONTENT="GOTTHARD Firmware">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="GOTTHARD_On_board_Software.html">
<LINK REL="previous" HREF="GOTTHARD.html">
<LINK REL="up" HREF="GOTTHARD.html">
<LINK REL="next" HREF="GOTTHARD_On_board_Software.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html351"
HREF="GOTTHARD_On_board_Software.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html347"
HREF="GOTTHARD.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html341"
HREF="GOTTHARD.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html349"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html352"
HREF="GOTTHARD_On_board_Software.html">GOTTHARD On-board Software</A>
<B> Up:</B> <A NAME="tex2html348"
HREF="GOTTHARD.html">GOTTHARD</A>
<B> Previous:</B> <A NAME="tex2html342"
HREF="GOTTHARD.html">GOTTHARD</A>
&nbsp; <B> <A NAME="tex2html350"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00052100000000000000">
GOTTHARD Firmware</A>
</H3>
<I>For SLS Detector Package v4.0.0</I>
<BR>
Minimum compatible version:
<BR>
11.01.2013
<BR>
Latest version:
<BR>
08.02.2018 (50um)
<BR>
08.02.2018 (25 um Master)
<BR>
09.02.2018 (25 um Slave)
<BR>
<P>
Normally, the firmware will be upgraded by us as it requires programming the
FPGA via the USB-Blaster.
<P>
To upgrade the firmware you need either a working version of the Altera
Quartus software or of the Quartus programmer, which can easily be downloaded
from:
<BR><TT><A NAME="tex2html5"
HREF="https://www.altera.com/download/programming/quartus2/pq2-index.jsp">https://www.altera.com/download/programming/quartus2/pq2-index.jsp</A></TT>
<P>
Normally, installation of the software and of the driver for the
USB-Blaster (provided together with the MYTHEN detector) are simpler under
Windows.
<P>
Under Windows, the first time that you connect the USB-Blaster to one
of your USB ports, you will be asked to install new hardware. Set the path to
search for the driver to:
<code>C:\altera\80sp1\qprogrammer\drivers\usb-blasterp</code> (where
<code>C:\altera\80sp1\qprogrammer\</code> is assumed to be ther path where your
Quartus version is installed).
<OL>
<LI>After starting the Quartus programmer, click on Hardware Setup and in the
"Currently selected hardware" window select USB-Blaster.
</LI>
<LI>In the Mode combo box select "Active Serial Programming".
</LI>
<LI>Plug the end of your USB-Blaster WITH THE ADAPTER PROVIDED in the
connector ASMI on the MCS board taking care that pin1 corresponds to the one
indexed and with the rectangualr pad.
</LI>
<LI>Click on add file and from select the programming file provided when
the upgrade has been reccomended.
</LI>
<LI>Check "Program/Configure" and "Verify".
</LI>
<LI>Push the start button and wait until the programming process is
finished (progress bar top left).
</LI>
<LI>In case the programmer gives you error messages, check the polarity of
your cable (pin1 corresponds) and that you have selected the correct programming
connector.
</LI>
</OL>
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html351"
HREF="GOTTHARD_On_board_Software.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html347"
HREF="GOTTHARD.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html341"
HREF="GOTTHARD.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html349"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html352"
HREF="GOTTHARD_On_board_Software.html">GOTTHARD On-board Software</A>
<B> Up:</B> <A NAME="tex2html348"
HREF="GOTTHARD.html">GOTTHARD</A>
<B> Previous:</B> <A NAME="tex2html342"
HREF="GOTTHARD.html">GOTTHARD</A>
&nbsp; <B> <A NAME="tex2html350"
HREF="Contents.html">Contents</A></B>
<!--End of Navigation Panel-->
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,124 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>GOTTHARD On-board Software</TITLE>
<META NAME="description" CONTENT="GOTTHARD On-board Software">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="GOTTHARD_Firmware.html">
<LINK REL="up" HREF="GOTTHARD.html">
<LINK REL="next" HREF="EIGER.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html361"
HREF="EIGER.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html357"
HREF="GOTTHARD.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html353"
HREF="GOTTHARD_Firmware.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html359"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html362"
HREF="EIGER.html">EIGER</A>
<B> Up:</B> <A NAME="tex2html358"
HREF="GOTTHARD.html">GOTTHARD</A>
<B> Previous:</B> <A NAME="tex2html354"
HREF="GOTTHARD_Firmware.html">GOTTHARD Firmware</A>
&nbsp; <B> <A NAME="tex2html360"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00052200000000000000">
GOTTHARD On-board Software</A>
</H3>
Every SLS Detector package release will have its coresponding matching on-board
server under <B>slsDetectorPackage/serverBin</B>.
<P>
<OL>
<LI>Install tftp if the pc does not have it.
</LI>
<LI>Copy the server from serverBin folder to /tftpboot (or equivalent tftp
folder) of the pc
</LI>
<LI>Copy the server to the detector by:
<OL>
<LI>Connect to the blackfin on the detector
<BR><code>telnet bchipxxx</code>
</LI>
<LI>Prevent existing on-board server from respawning by:
<OL>
<LI>Edit <code>/etc/inittab</code>
</LI>
<LI>Comment out the line
<code>#ttyS0::respawn:/gotthardDetectorServervxxx</code>
</LI>
<LI>Reboot blackfin using <code>reboot</code>
</LI>
<LI>Run <code>ps</code> to ensure no gotthardDetectorServers are running
</LI>
</OL>
</LI>
<LI>Copy new on-board server from pc to the blackfin using:
<BR><code>tftp pcxxx -r gotthardDetectorServerxxx -g</code>
</LI>
<LI>Respawn the new server (server starts at detector statup):
<OL>
<LI>Edit <code>/etc/inittab</code>
</LI>
<LI>Uncomment out the line
<code>ttyS0::respawn:/gotthardDetectorServervxxx</code>
</LI>
<LI>Reboot blackfin using <code>reboot</code>
</LI>
<LI>Run <code>ps</code> to ensure that both the gotthardDetectorServers are
running.
<BR><code>gotthardDetectorServerxxx</code>
<BR><code>gotthardDetectorServerxxx 1953</code>
</LI>
</OL>
</LI>
</OL>
</LI>
</OL>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,129 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Install Binaries via Conda</TITLE>
<META NAME="description" CONTENT="Install Binaries via Conda">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Install_via_Source_Code.html">
<LINK REL="previous" HREF="Software_Package.html">
<LINK REL="up" HREF="slsDetectorInstall.html">
<LINK REL="next" HREF="Install_via_Source_Code.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html98"
HREF="Install_via_Source_Code.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html94"
HREF="slsDetectorInstall.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html88"
HREF="Binaries.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html96"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html99"
HREF="Install_via_Source_Code.html">Install via Source Code</A>
<B> Up:</B> <A NAME="tex2html95"
HREF="slsDetectorInstall.html">SLS Detectors software installation</A>
<B> Previous:</B> <A NAME="tex2html89"
HREF="Binaries.html">Binaries</A>
&nbsp; <B> <A NAME="tex2html97"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00030000000000000000">
Install Binaries via Conda</A>
</H1>
This section is useful only if one wants to download only the binaries for
specific distribution and use the package via command line. Please refer later
sections to download source code and compile them.
<P>
One can download and install Miniconda via
<P>
<TT><A NAME="tex2html1"
HREF="https://conda.io/miniconda.html">https://conda.io/miniconda.html</A></TT>
<P>
The conda package uses Travis CI for continuous integration with
automatic deployment to Anaconda Cloud. One can download only the package or the
package including the python interface.
<P>
After the installation, the binaries will be available in your path.
<P>
Please remember to clear shared memory after installation.
<PRE>
#displays list of shared memeory segments
ipcs -m
#remove segments that have nattach equal to zero. They key is the first column
ipcrm -M [key]
</PRE>
<P>
<UL>
<LI>Only the package
<PRE>
#Add conda channels
conda config --add channels conda-forge
conda config --add channels slsdetectorgroup
#Install latest version
conda install sls_detector_lib
conda install sls_detector_gui
#Install specific release
conda install sls_detector_lib=4.0.0
conda install sls_detector_gui=4.0.0
</PRE>
</LI>
<LI>The package including Python interface
<PRE>
#Add conda channels
conda config --add channels conda-forge
conda config --add channels sls_detector
#Install latest version
conda install sls_detector
#Install specific release
conda install sls_detector=4.0.0
</PRE>
</LI>
</UL>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,111 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Install via Source Code</TITLE>
<META NAME="description" CONTENT="Install via Source Code">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Software_Upgrade.html">
<LINK REL="previous" HREF="Install_Binaries_via_Conda.html">
<LINK REL="up" HREF="slsDetectorInstall.html">
<LINK REL="next" HREF="Download_Source_Code.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html110"
HREF="Download_Source_Code.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html106"
HREF="slsDetectorInstall.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html100"
HREF="Install_Binaries_via_Conda.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html108"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html111"
HREF="Download_Source_Code.html">Download Source Code</A>
<B> Up:</B> <A NAME="tex2html107"
HREF="slsDetectorInstall.html">SLS Detectors software installation</A>
<B> Previous:</B> <A NAME="tex2html101"
HREF="Install_Binaries_via_Conda.html">Install Binaries via Conda</A>
&nbsp; <B> <A NAME="tex2html109"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00040000000000000000">
Install via Source Code</A>
</H1>
This section is useful if one wants to use the API and embed it in their
acquisition system, or if one wants to download the source code and compile.
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html112"
HREF="Download_Source_Code.html">Download Source Code</A>
<LI><A NAME="tex2html113"
HREF="Requirements.html">Requirements</A>
<UL>
<LI><A NAME="tex2html114"
HREF="Qt4_Installation_GUI.html">Qt4 Installation for GUI</A>
<LI><A NAME="tex2html115"
HREF="Qwt_Installation_GUI.html">Qwt Installation for GUI</A>
<LI><A NAME="tex2html116"
HREF="Root_Installation_Calibrati.html">Root Installation for Calibration Wizards</A>
</UL>
<BR>
<LI><A NAME="tex2html117"
HREF="Compilation.html">Compilation</A>
<UL>
<LI><A NAME="tex2html118"
HREF="Using_script_cmk_sh.html">Using script cmk.sh</A>
<LI><A NAME="tex2html119"
HREF="Directly_using_cmake.html">Directly using cmake</A>
</UL>
<BR>
<LI><A NAME="tex2html120"
HREF="Setting_environment_variabl.html">Setting environment variables</A>
<UL>
<LI><A NAME="tex2html121"
HREF="Using_bashrc_file.html">Using .bashrc file</A>
<LI><A NAME="tex2html122"
HREF="Without_bashrc_file.html">Without .bashrc file</A>
</UL>
<BR>
<LI><A NAME="tex2html123"
HREF="Clean_Shared_Memory.html">Clean Shared Memory</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,85 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>JUNGFRAU</TITLE>
<META NAME="description" CONTENT="JUNGFRAU">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="EIGER.html">
<LINK REL="up" HREF="Software_Upgrade.html">
<LINK REL="next" HREF="JUNGFRAU_Firmware.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html407"
HREF="JUNGFRAU_Firmware.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html403"
HREF="Software_Upgrade.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html399"
HREF="EIGER_On_board_Software.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html405"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html408"
HREF="JUNGFRAU_Firmware.html">JUNGFRAU Firmware</A>
<B> Up:</B> <A NAME="tex2html404"
HREF="Software_Upgrade.html">Software Upgrade</A>
<B> Previous:</B> <A NAME="tex2html400"
HREF="EIGER_On_board_Software.html">EIGER On-board Software</A>
&nbsp; <B> <A NAME="tex2html406"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00054000000000000000">
JUNGFRAU</A>
</H2>
<P>
In such cases, the users are not expected to compile the software
themselves (which would require dedicated softwares) but only to download on the
detector board the programming files and/or software package provided by
the SLS Detectors group.
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html409"
HREF="JUNGFRAU_Firmware.html">JUNGFRAU Firmware</A>
<LI><A NAME="tex2html410"
HREF="JUNGFRAU_On_board_Software.html">JUNGFRAU On-board Software</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,198 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>JUNGFRAU Firmware</TITLE>
<META NAME="description" CONTENT="JUNGFRAU Firmware">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="JUNGFRAU_On_board_Software.html">
<LINK REL="previous" HREF="JUNGFRAU.html">
<LINK REL="up" HREF="JUNGFRAU.html">
<LINK REL="next" HREF="JUNGFRAU_On_board_Software.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html421"
HREF="JUNGFRAU_On_board_Software.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html417"
HREF="JUNGFRAU.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html411"
HREF="JUNGFRAU.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html419"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html422"
HREF="JUNGFRAU_On_board_Software.html">JUNGFRAU On-board Software</A>
<B> Up:</B> <A NAME="tex2html418"
HREF="JUNGFRAU.html">JUNGFRAU</A>
<B> Previous:</B> <A NAME="tex2html412"
HREF="JUNGFRAU.html">JUNGFRAU</A>
&nbsp; <B> <A NAME="tex2html420"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00054100000000000000">
JUNGFRAU Firmware</A>
</H3>
<I>For SLS Detector Package v4.0.0</I>
<BR>
Minimum compatible version: 15.06.2018
<BR>
Latest version: 15.06.2018
<BR>
<P>
At times, one has to update the firmware, which then also requires updating the
on-board software.
<P>
<B><I>Jungfrau firmware can be upgraded via the SLS Detector Package
binaries from the command line.</I></B>
<P>
<OL>
<LI>One must get the latest package's corresponding POF file from the SLS
Detector Group.
</LI>
<LI>Update the latest SLS Detector package installed.
</LI>
<LI>Update the on-board software as per the instructions in the next
section.
</LI>
<LI>Start the on-board server in update mode:
<OL>
<LI>Connect to the blackfin on the detector
<BR><code>telnet bchipxxx</code>
</LI>
<LI>Prevent existing on-board server from respawning by:
<OL>
<LI>Edit <code>/etc/inittab</code>
</LI>
<LI>Comment out the line
<code>#ttyS0::respawn:/jungfrauDetectorServervxxx</code>
</LI>
<LI>Reboot blackfin using <code>reboot</code>
</LI>
<LI>Run <code>ps</code> to ensure no jungfrauDetectorServers are running
</LI>
</OL>
</LI>
<LI>Start the server in update mode using:
<BR><code>./jungfrauDetectorServerxxx -update</code>
<BR>
Leave this console on to come back to it later.
</LI>
</OL>
</LI>
<LI>From the command line of the pc, clear shared memory
<BR><code>./sls_detector_get free</code>
<BR>
If one gets shmget error, please clean the shared memory properly using the
script in <code>slsDetectorPackage/cleansharedmemory.sh</code>
</LI>
<LI>Add the detector to shared memory using
<BR><code>./sls_detector_put hostname bchipxxx</code>
</LI>
<LI>Program the FPGA using
<BR><code>./sls_detector_put programfpga xxx.pof</code>
</LI>
<LI>Once the programming is done:
<OL>
<LI>Switch to the console that has the update server running and kill it
using Ctrl+C and ensure no jungfrauDetectorServers are
running
</LI>
<LI>Restart the new server to see if it runs with the new firmware
<BR><code>./jungfrauDetectorServerxxx</code>
<BR>
If the server didn't start properly, please contact us with the error message
shown when starting the server up, else continue with the following steps.
</LI>
<LI>Respawn the new server (server starts at detector statup):
<OL>
<LI>Edit <code>/etc/inittab</code>
</LI>
<LI>Uncomment out the line
<code>ttyS0::respawn:/jungfrauDetectorServervxxx</code>
</LI>
<LI>Reboot blackfin using <code>reboot</code>
</LI>
<LI>Run <code>ps</code> to ensure that both the gotthardDetectorServers are
running.
<BR><code>jungfrauDetectorServervxxx</code>
<BR><code>jungfrauDetectorServervxxx 1953</code>
</LI>
</OL>
</LI>
</OL>
<P>
</LI>
</OL>
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html421"
HREF="JUNGFRAU_On_board_Software.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html417"
HREF="JUNGFRAU.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html411"
HREF="JUNGFRAU.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html419"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html422"
HREF="JUNGFRAU_On_board_Software.html">JUNGFRAU On-board Software</A>
<B> Up:</B> <A NAME="tex2html418"
HREF="JUNGFRAU.html">JUNGFRAU</A>
<B> Previous:</B> <A NAME="tex2html412"
HREF="JUNGFRAU.html">JUNGFRAU</A>
&nbsp; <B> <A NAME="tex2html420"
HREF="Contents.html">Contents</A></B>
<!--End of Navigation Panel-->
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,124 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>JUNGFRAU On-board Software</TITLE>
<META NAME="description" CONTENT="JUNGFRAU On-board Software">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="JUNGFRAU_Firmware.html">
<LINK REL="up" HREF="JUNGFRAU.html">
<LINK REL="next" HREF="About_this_document.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html431"
HREF="About_this_document.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html427"
HREF="JUNGFRAU.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html423"
HREF="JUNGFRAU_Firmware.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html429"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html432"
HREF="About_this_document.html">About this document ...</A>
<B> Up:</B> <A NAME="tex2html428"
HREF="JUNGFRAU.html">JUNGFRAU</A>
<B> Previous:</B> <A NAME="tex2html424"
HREF="JUNGFRAU_Firmware.html">JUNGFRAU Firmware</A>
&nbsp; <B> <A NAME="tex2html430"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00054200000000000000">
JUNGFRAU On-board Software</A>
</H3>
Every SLS Detector package release will have its coresponding matching on-board
server under <B>slsDetectorPackage/serverBin</B>.
<P>
<OL>
<LI>Install tftp if the pc does not have it.
</LI>
<LI>Copy the server from serverBin folder to /tftpboot (or equivalent tftp
folder) of the pc
</LI>
<LI>Copy the server to the detector by:
<OL>
<LI>Connect to the blackfin on the detector
<BR><code>telnet bchipxxx</code>
</LI>
<LI>Prevent existing on-board server from respawning by:
<OL>
<LI>Edit <code>/etc/inittab</code>
</LI>
<LI>Comment out the line
<code>#ttyS0::respawn:/jungfrauDetectorServervxxx</code>
</LI>
<LI>Reboot blackfin using <code>reboot</code>
</LI>
<LI>Run <code>ps</code> to ensure no gotthardDetectorServers are running
</LI>
</OL>
</LI>
<LI>Copy new on-board server from pc to the blackfin using:
<BR><code>tftp pcxxx -r jungfrauDetectorServervxxx -g</code>
</LI>
<LI>Respawn the new server (server starts at detector statup):
<OL>
<LI>Edit <code>/etc/inittab</code>
</LI>
<LI>Uncomment out the line
<code>ttyS0::respawn:/jungfrauDetectorServervxxx</code>
</LI>
<LI>Reboot blackfin using <code>reboot</code>
</LI>
<LI>Run <code>ps</code> to ensure that both the gotthardDetectorServers are
running.
<BR><code>jungfrauDetectorServervxxx</code>
<BR><code>jungfrauDetectorServervxxx 1953</code>
</LI>
</OL>
</LI>
</OL>
</LI>
</OL>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,84 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>MYTHEN</TITLE>
<META NAME="description" CONTENT="MYTHEN">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="GOTTHARD.html">
<LINK REL="previous" HREF="Software_Upgrade.html">
<LINK REL="up" HREF="Software_Upgrade.html">
<LINK REL="next" HREF="MYTHEN_Firmware.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html301"
HREF="MYTHEN_Firmware.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html297"
HREF="Software_Upgrade.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html291"
HREF="Software_Upgrade.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html299"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html302"
HREF="MYTHEN_Firmware.html">MYTHEN Firmware</A>
<B> Up:</B> <A NAME="tex2html298"
HREF="Software_Upgrade.html">Software Upgrade</A>
<B> Previous:</B> <A NAME="tex2html292"
HREF="Software_Upgrade.html">Software Upgrade</A>
&nbsp; <B> <A NAME="tex2html300"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00051000000000000000">
MYTHEN</A>
</H2>
In such cases, the users are not expected to compile the software
themselves (which would require dedicated softwares) but only to download on the
detector board the programming files and/or software package provided by
the SLS Detectors group.
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html303"
HREF="MYTHEN_Firmware.html">MYTHEN Firmware</A>
<LI><A NAME="tex2html304"
HREF="MYTHEN_On_board_Software.html">MYTHEN On-board Software</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,142 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>MYTHEN Firmware</TITLE>
<META NAME="description" CONTENT="MYTHEN Firmware">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="MYTHEN_On_board_Software.html">
<LINK REL="previous" HREF="MYTHEN.html">
<LINK REL="up" HREF="MYTHEN.html">
<LINK REL="next" HREF="MYTHEN_On_board_Software.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html315"
HREF="MYTHEN_On_board_Software.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html311"
HREF="MYTHEN.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html305"
HREF="MYTHEN.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html313"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html316"
HREF="MYTHEN_On_board_Software.html">MYTHEN On-board Software</A>
<B> Up:</B> <A NAME="tex2html312"
HREF="MYTHEN.html">MYTHEN</A>
<B> Previous:</B> <A NAME="tex2html306"
HREF="MYTHEN.html">MYTHEN</A>
&nbsp; <B> <A NAME="tex2html314"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00051100000000000000">
MYTHEN Firmware</A>
</H3>
<P>
To upgrade the firmware you need either a working version of the Altera
Quartus software or of the Quartus programmer, which can easily be downloaded
from:
<BR><TT><A NAME="tex2html4"
HREF="https://www.altera.com/download/programming/quartus2/pq2-index.jsp">https://www.altera.com/download/programming/quartus2/pq2-index.jsp</A></TT>
<P>
<BR>
<P>
Normally, installation of the software and of the driver for the
USB-Blaster (provided together with the MYTHEN detector) are simpler under
Windows.
<P>
Under Windows, the first time that you connect the USB-Blaster to one
of your USB ports, you will be asked to install new hardware. Set the path to
search for the driver to:
<code>C:\altera\80sp1\qprogrammer\drivers\usb-blasterp</code> (where
<code>C:\altera\80sp1\qprogrammer\</code> is assumed to be ther path where your
Quartus version is installed).
<OL>
<LI>After starting the Quartus programmer, click on Hardware Setup and in the
"Currently selected hardware" window select USB-Blaster.
</LI>
<LI>In the Mode combo box select "Active Serial Programming".
</LI>
<LI>Plug the end of your USB-Blaster WITH THE ADAPTER PROVIDED in the
connector ASMI on the MCS board taking care that pin1 corresponds to the one
indexed and with the rectangualr pad.
</LI>
<LI>Click on add file and from select the programming file provided when
the upgrade has been reccomended.
</LI>
<LI>Check "Program/Configure" and "Verify".
</LI>
<LI>Push the start button and wait until the programming process is
finished (progress bar top left).
</LI>
<LI>In case the programmer gives you error messages, check the polarity of
your cable (pin1 corresponds) and that you have selected the correct programming
connector.
</LI>
</OL>
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html315"
HREF="MYTHEN_On_board_Software.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html311"
HREF="MYTHEN.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html305"
HREF="MYTHEN.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html313"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html316"
HREF="MYTHEN_On_board_Software.html">MYTHEN On-board Software</A>
<B> Up:</B> <A NAME="tex2html312"
HREF="MYTHEN.html">MYTHEN</A>
<B> Previous:</B> <A NAME="tex2html306"
HREF="MYTHEN.html">MYTHEN</A>
&nbsp; <B> <A NAME="tex2html314"
HREF="Contents.html">Contents</A></B>
<!--End of Navigation Panel-->
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,118 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>MYTHEN On-board Software</TITLE>
<META NAME="description" CONTENT="MYTHEN On-board Software">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="MYTHEN_Firmware.html">
<LINK REL="up" HREF="MYTHEN.html">
<LINK REL="next" HREF="GOTTHARD.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html325"
HREF="GOTTHARD.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html321"
HREF="MYTHEN.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html317"
HREF="MYTHEN_Firmware.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html323"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html326"
HREF="GOTTHARD.html">GOTTHARD</A>
<B> Up:</B> <A NAME="tex2html322"
HREF="MYTHEN.html">MYTHEN</A>
<B> Previous:</B> <A NAME="tex2html318"
HREF="MYTHEN_Firmware.html">MYTHEN Firmware</A>
&nbsp; <B> <A NAME="tex2html324"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00051200000000000000">
MYTHEN On-board Software</A>
</H3>
<OL>
<LI>Connect to the board using telnet:
<PRE>
telnet mymcs.mydomain.com
username: root
password: pass
</PRE>
</LI>
<LI>Kill currently running servers and ensure <code>/mnt/flash/root</code> exists.
<PRE>
killall mythenDetectorServer
ls /mnt/flash/root
#if the directory does not exist mkdir /mnt/flash/root
</PRE>
</LI>
<LI>Transfer the provided software by ftp to the MCS.
<PRE>
ftp mymcs.mydomain.com
username: root
password: pass
cd /mnt/flash/root
put mythenDetectorServer
quit
</PRE>
<P>
</LI>
<LI>After pressing reset on the board, the board should reboot.
<P>
</LI>
<LI>If the program does not correctly start
<OL>
<LI>Check by using the http interface that it is started by the inittab
(check that the file <code>/mnt/etc/inittab</code> ends with the line
<BR><code>myid2:3:once:/mnt/flash/root/mythenDetectorServer</code>).
</LI>
<LI>If program has not started, make the program executable by telnetting to
the MCS and executing:
<BR><code>chmod a+xrw /mnt/flash/root/mythenDetectorServer</code>
</LI>
<LI>After pressing reset on the board, the board should reboot and the
acqusition program correctly start.
</LI>
</OL>
</LI>
</OL>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,116 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Qt4 Installation for GUI</TITLE>
<META NAME="description" CONTENT="Qt4 Installation for GUI">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Qwt_Installation_GUI.html">
<LINK REL="previous" HREF="Requirements.html">
<LINK REL="up" HREF="Requirements.html">
<LINK REL="next" HREF="Qwt_Installation_GUI.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html161"
HREF="Qwt_Installation_GUI.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html157"
HREF="Requirements.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html151"
HREF="Requirements.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html159"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html162"
HREF="Qwt_Installation_GUI.html">Qwt Installation for GUI</A>
<B> Up:</B> <A NAME="tex2html158"
HREF="Requirements.html">Requirements</A>
<B> Previous:</B> <A NAME="tex2html152"
HREF="Requirements.html">Requirements</A>
&nbsp; <B> <A NAME="tex2html160"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00042100000000000000">
Qt4 Installation for GUI</A>
</H3>
It must be installed before Qwt. A Qt version equal or higher than 4.6 is
required. One can install it:
<UL>
<LI>via YUM:
<PRE>
yum install qt-devel
</PRE>
</LI>
<LI>via download from:
<BR><TT><A NAME="tex2html2"
HREF="
https://download.qt.io/archive/qt/4.8/4.8.2/qt-everywhere-opensource-src-4.8.2.t
ar.gz">https://download.qt.io/archive/qt/4.8/4.8.2/qt-everywhere-opensource-src-4.8.2.t
ar.gz</A></TT>
<P>
To install:
<PRE>
&gt; gunzip qt-everywhere-opensource-src-4.8.2.tar.gz
&gt; tar xvf qt-everywhere-opensource-src-4.8.2.tar
&gt; ./configure
&gt; make
&gt; make install
</PRE>
By default Qt4 will be installed in /usr/local/Trolltech/Qt-4.8.2/.
</LI>
</UL>
<P>
<B>Setup Environment</B>
<P>
One has to ensure that <code>PATH</code> and <code>LD_LIBRARY_PATH</code> have
been updated to include Qt4 install path, binaries and libraries.
Confirm by executing <code>qmake -v</code> and ensuring the result points to Qt4 (not
Qt3 or Qt5).
<P>
If the environment is not set up, one can add the libraries and
executables to the .bashrc by adding
<code>LD_LIBRARY_PATH</code> and <code>PATH</code>:
<PRE>
export QTDIR=/usr/local/Trolltech/Qt-4.8.2
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
</PRE>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,114 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Qwt Installation for GUI</TITLE>
<META NAME="description" CONTENT="Qwt Installation for GUI">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Root_Installation_Calibrati.html">
<LINK REL="previous" HREF="Qt4_Installation_GUI.html">
<LINK REL="up" HREF="Requirements.html">
<LINK REL="next" HREF="Root_Installation_Calibrati.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html173"
HREF="Root_Installation_Calibrati.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html169"
HREF="Requirements.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html163"
HREF="Qt4_Installation_GUI.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html171"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html174"
HREF="Root_Installation_Calibrati.html">Root Installation for Calibration</A>
<B> Up:</B> <A NAME="tex2html170"
HREF="Requirements.html">Requirements</A>
<B> Previous:</B> <A NAME="tex2html164"
HREF="Qt4_Installation_GUI.html">Qt4 Installation for GUI</A>
&nbsp; <B> <A NAME="tex2html172"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00042200000000000000">
Qwt Installation for GUI</A>
</H3>
Before installing Qwt, one must install Qt
and ensure that <code>QTDIR</code>, <code>LD_LIBRARY_PATH</code> and <code>PATH</code> point to
the correct Qt4
version.
<P>
A Qwt version equal or higher than 6 is required. One can
install it:
<UL>
<LI>via YUM:
<PRE>
yum install qwt-devel
</PRE>
</LI>
<LI>via download from:
<BR><TT><A NAME="tex2html3"
HREF="
https://sourceforge.net/projects/qwt/files/qwt/6.0.0/qwt-6.0.0.zip/download">https://sourceforge.net/projects/qwt/files/qwt/6.0.0/qwt-6.0.0.zip/download</A></TT>
<P>
To install:
<PRE>
&gt; cd qwt-6.0.0
&gt; qmake
&gt; make
&gt; make install
</PRE>
By default Qwt will be installed int /usr/local/qwt-6.0.0
</LI>
</UL>
<P>
<B>Setup Environment</B>
<P>
One has to ensure that <code>QWTDIR</code> and <code>LD_LIBRARY_PATH</code> have
been updated to include Qwt install path and libraries.
<P>
If the environment is not set up, one can add the libraries to the
.bashrc by adding <code>LD_LIBRARY_PATH</code>:
<PRE>
export QWTDIR=/usr/local/qwt-6.0.0/
export LD_LIBRARY_PATH=$QWTDIR/lib:$LD_LIBRARY_PATH
</PRE>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,158 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Requirements</TITLE>
<META NAME="description" CONTENT="Requirements">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Compilation.html">
<LINK REL="previous" HREF="Download_Source_Code.html">
<LINK REL="up" HREF="Install_via_Source_Code.html">
<LINK REL="next" HREF="Qt4_Installation_GUI.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html146"
HREF="Qt4_Installation_GUI.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html142"
HREF="Install_via_Source_Code.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html136"
HREF="Download_Source_Code.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html144"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html147"
HREF="Qt4_Installation_GUI.html">Qt4 Installation for GUI</A>
<B> Up:</B> <A NAME="tex2html143"
HREF="Install_via_Source_Code.html">Install via Source Code</A>
<B> Previous:</B> <A NAME="tex2html137"
HREF="Download_Source_Code.html">Download Source Code</A>
&nbsp; <B> <A NAME="tex2html145"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00042000000000000000">
Requirements</A>
</H2>
These are the basic requirements to install and use the software. Fine Tuning
the system will be discussed in other documentation provided.
<UL>
<LI><I>C/C++</I>:
<BR>
The software is written in C/C++. If Python API is used, it is a wrap around
to the C++ software. Any Linux installation with working libgcc should be
sufficient.
<P>
</LI>
<LI><I>Shared Memory</I>:
<BR>
Access to the shared memory of the control PC is required for the client.
<P>
</LI>
<LI><I>Network</I>:
<BR>
The control PC communicates to the detectors and data receivers over TCP/IP.
Therefore, the detector should receive a proper IP address (either DHCP or
static) and no firewall should be present between the control PC and the
detector.
<P>
</LI>
<LI><I>Compilation</I>:
<BR>
cmake is required to compile. make is also possible, but is harder to find
dependencies.
<P>
</LI>
<LI><I>GUI</I>:
<BR>
To use the GUI, one requires atleast Qt4.8.2 and Qwt6.0. Installation of these
are discussed in the next sections.
<P>
</LI>
<LI><I>Calibration Wizards</I>:
<BR>
They are based on the CERN Root data analysis framework. Installation of it is
discussed in the next sections.
<P>
</LI>
</UL>
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html148"
HREF="Qt4_Installation_GUI.html">Qt4 Installation for GUI</A>
<LI><A NAME="tex2html149"
HREF="Qwt_Installation_GUI.html">Qwt Installation for GUI</A>
<LI><A NAME="tex2html150"
HREF="Root_Installation_Calibrati.html">Root Installation for Calibration Wizards</A>
</UL>
<!--End of Table of Child-Links-->
<HR>
<!--Navigation Panel-->
<A NAME="tex2html146"
HREF="Qt4_Installation_GUI.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html142"
HREF="Install_via_Source_Code.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html136"
HREF="Download_Source_Code.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html144"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html147"
HREF="Qt4_Installation_GUI.html">Qt4 Installation for GUI</A>
<B> Up:</B> <A NAME="tex2html143"
HREF="Install_via_Source_Code.html">Install via Source Code</A>
<B> Previous:</B> <A NAME="tex2html137"
HREF="Download_Source_Code.html">Download Source Code</A>
&nbsp; <B> <A NAME="tex2html145"
HREF="Contents.html">Contents</A></B>
<!--End of Navigation Panel-->
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,98 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Root Installation for Calibration Wizards</TITLE>
<META NAME="description" CONTENT="Root Installation for Calibration Wizards">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="Qwt_Installation_GUI.html">
<LINK REL="up" HREF="Requirements.html">
<LINK REL="next" HREF="Compilation.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html183"
HREF="Compilation.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html179"
HREF="Requirements.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html175"
HREF="Qwt_Installation_GUI.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html181"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html184"
HREF="Compilation.html">Compilation</A>
<B> Up:</B> <A NAME="tex2html180"
HREF="Requirements.html">Requirements</A>
<B> Previous:</B> <A NAME="tex2html176"
HREF="Qwt_Installation_GUI.html">Qwt Installation for GUI</A>
&nbsp; <B> <A NAME="tex2html182"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00042300000000000000">
Root Installation for Calibration Wizards</A>
</H3>
The software has been developed and tested with root 5.20, but any version
should work. One can download it from:
<PRE>
&gt; svn co https://root.cern.ch/svn/root/trunk root
</PRE>
<P>
To install:
<PRE>
&gt; cd root
&gt; ./configure --enable-qt
&gt; make
&gt; make install
</PRE>
<P>
Edit your .bashrc to define the ROOTSYS enviroment variable and annd
the libraries and executables to the <code>LD_LIBRARY_PATH</code> and <code>PATH</code>:
<PRE>
export ROOTSYS=/usr/local/root-5.34
export PATH=$ROOTSYS/bin:$PATH
export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH
</PRE>
<P>
You can also download the binaries, assuming that your linux and gcc versions
match as in:
<PRE>
http://root.cern.ch/drupal/content/production-version-534
</PRE>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,81 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Setting environment variables</TITLE>
<META NAME="description" CONTENT="Setting environment variables">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Clean_Shared_Memory.html">
<LINK REL="previous" HREF="Compilation.html">
<LINK REL="up" HREF="Install_via_Source_Code.html">
<LINK REL="next" HREF="Using_bashrc_file.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html231"
HREF="Using_bashrc_file.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html227"
HREF="Install_via_Source_Code.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html221"
HREF="Directly_using_cmake.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html229"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html232"
HREF="Using_bashrc_file.html">Using .bashrc file</A>
<B> Up:</B> <A NAME="tex2html228"
HREF="Install_via_Source_Code.html">Install via Source Code</A>
<B> Previous:</B> <A NAME="tex2html222"
HREF="Directly_using_cmake.html">Directly using cmake</A>
&nbsp; <B> <A NAME="tex2html230"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00044000000000000000">
Setting environment variables</A>
</H2>
One can set up the environment variables in the following ways.
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html233"
HREF="Using_bashrc_file.html">Using .bashrc file</A>
<LI><A NAME="tex2html234"
HREF="Without_bashrc_file.html">Without .bashrc file</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,90 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>The Software Package</TITLE>
<META NAME="description" CONTENT="The Software Package">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Install_Binaries_via_Conda.html">
<LINK REL="previous" HREF="Contents.html">
<LINK REL="up" HREF="slsDetectorInstall.html">
<LINK REL="next" HREF="Binaries.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html75"
HREF="Binaries.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html71"
HREF="slsDetectorInstall.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html65"
HREF="Contents.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html73"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html76"
HREF="Binaries.html">Binaries</A>
<B> Up:</B> <A NAME="tex2html72"
HREF="slsDetectorInstall.html">SLS Detectors software installation</A>
<B> Previous:</B> <A NAME="tex2html66"
HREF="Contents.html">Contents</A>
&nbsp; <B> <A NAME="tex2html74"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00020000000000000000">
The Software Package</A>
</H1>
The SLS detectors software is intended to control the detectors developed by
the SLS Detectors group. The detectors currently supported are:
<P>
MYTHEN, GOTTHARD, EIGER and JUNGFRAU.
<P>
The package provides software for the distributed system that comprises of
detectors, data receivers (to process detector data), and the client (to control
or monitor the system). The client and data receivers can be embedded in
the user's acquisitions system. Furthermore, the package also provides some
tools for detector calibration.
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html77"
HREF="Binaries.html">Binaries</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,114 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Software Upgrade</TITLE>
<META NAME="description" CONTENT="Software Upgrade">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="About_this_document.html">
<LINK REL="previous" HREF="Install_via_Source_Code.html">
<LINK REL="up" HREF="slsDetectorInstall.html">
<LINK REL="next" HREF="MYTHEN.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html277"
HREF="MYTHEN.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html273"
HREF="slsDetectorInstall.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html267"
HREF="Clean_Shared_Memory.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html275"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html278"
HREF="MYTHEN.html">MYTHEN</A>
<B> Up:</B> <A NAME="tex2html274"
HREF="slsDetectorInstall.html">SLS Detectors software installation</A>
<B> Previous:</B> <A NAME="tex2html268"
HREF="Clean_Shared_Memory.html">Clean Shared Memory</A>
&nbsp; <B> <A NAME="tex2html276"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION00050000000000000000">
Software Upgrade</A>
</H1>
<P>
The upgrade of the package could require an upgrade of the on-board detector
server and/or firmware running on the detector as well.
<P>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL>
<LI><A NAME="tex2html279"
HREF="MYTHEN.html">MYTHEN</A>
<UL>
<LI><A NAME="tex2html280"
HREF="MYTHEN_Firmware.html">MYTHEN Firmware</A>
<LI><A NAME="tex2html281"
HREF="MYTHEN_On_board_Software.html">MYTHEN On-board Software</A>
</UL>
<BR>
<LI><A NAME="tex2html282"
HREF="GOTTHARD.html">GOTTHARD</A>
<UL>
<LI><A NAME="tex2html283"
HREF="GOTTHARD_Firmware.html">GOTTHARD Firmware</A>
<LI><A NAME="tex2html284"
HREF="GOTTHARD_On_board_Software.html">GOTTHARD On-board Software</A>
</UL>
<BR>
<LI><A NAME="tex2html285"
HREF="EIGER.html">EIGER</A>
<UL>
<LI><A NAME="tex2html286"
HREF="EIGER_Firmware.html">EIGER Firmware</A>
<LI><A NAME="tex2html287"
HREF="EIGER_On_board_Software.html">EIGER On-board Software</A>
</UL>
<BR>
<LI><A NAME="tex2html288"
HREF="JUNGFRAU.html">JUNGFRAU</A>
<UL>
<LI><A NAME="tex2html289"
HREF="JUNGFRAU_Firmware.html">JUNGFRAU Firmware</A>
<LI><A NAME="tex2html290"
HREF="JUNGFRAU_On_board_Software.html">JUNGFRAU On-board Software</A>
</UL></UL>
<!--End of Table of Child-Links-->
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,103 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Using .bashrc file</TITLE>
<META NAME="description" CONTENT="Using .bashrc file">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Without_bashrc_file.html">
<LINK REL="previous" HREF="Setting_environment_variabl.html">
<LINK REL="up" HREF="Setting_environment_variabl.html">
<LINK REL="next" HREF="Without_bashrc_file.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html245"
HREF="Without_bashrc_file.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html241"
HREF="Setting_environment_variabl.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html235"
HREF="Setting_environment_variabl.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html243"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html246"
HREF="Without_bashrc_file.html">Without .bashrc file</A>
<B> Up:</B> <A NAME="tex2html242"
HREF="Setting_environment_variabl.html">Setting environment variables</A>
<B> Previous:</B> <A NAME="tex2html236"
HREF="Setting_environment_variabl.html">Setting environment variables</A>
&nbsp; <B> <A NAME="tex2html244"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00044100000000000000">
Using .bashrc file</A>
</H3>
<OL>
<LI><code>emacs ~/.bashrc</code>
</LI>
<LI>Add the following function <code>setup_slsdet</code> and replace <code>path</code>
with absolute path of installed directory
<PRE>
function setup_slsdet
{
export PKGPATH=[path]
export LD_LIBRARY_PATH=$PKGPATH/slsDetectorPackage/build/bin:$LD_LIBRARY_PATH
export PATH=$PKGPATH/slsDetectorPackage/build/bin:$PATH
cd $PKGPATH/slsDetectorPackage/build/bin
}
</PRE>
</LI>
<LI><code>source ~/.bashrc</code>
</LI>
<LI>Next time, just run <code>setup_slsdet</code> to load the environment
variables.
</LI>
</OL>
<P>
One can also add the GUI environment variables if installed locally by adding
the following in the function <code>setup_sldet</code>
<BR><PRE>
export QTDIR=/path-where-it-is/Qt-4.8.2
export QWTDIR=/path-where-it-is/qwt-6.0.1
export QWT3D=/path-where-it-is/qwtplot3d
export QMAKESPEC=$QTDIR/mkspecs/linux-g++
export LD_LIBRARY_PATH=$QTDIR/lib:$QWTDIR/lib:$QWT3D/lib:$LD_LIBRARY _PATH
export PATH=$QTDIR/bin:$PATH
</PRE>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,118 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Using script cmk.sh</TITLE>
<META NAME="description" CONTENT="Using script cmk.sh">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="Directly_using_cmake.html">
<LINK REL="previous" HREF="Compilation.html">
<LINK REL="up" HREF="Compilation.html">
<LINK REL="next" HREF="Directly_using_cmake.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html209"
HREF="Directly_using_cmake.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html205"
HREF="Compilation.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html199"
HREF="Compilation.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html207"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html210"
HREF="Directly_using_cmake.html">Directly using cmake</A>
<B> Up:</B> <A NAME="tex2html206"
HREF="Compilation.html">Compilation</A>
<B> Previous:</B> <A NAME="tex2html200"
HREF="Compilation.html">Compilation</A>
&nbsp; <B> <A NAME="tex2html208"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00043100000000000000">
Using script cmk.sh</A>
</H3>
The script uses <code>cmake</code>. After compiling, the libraries and executables
will be found in `slsDetectorPackage/build/bin` directory.
Usage: [-c] [-b] [-h] [-d HDF5 directory] [-j]
<UL>
<LI>-[no option]: only make
</LI>
<LI>-c: Clean
</LI>
<LI>-b: Builds/Rebuilds CMake files normal mode
</LI>
<LI>-h: Builds/Rebuilds Cmake files with HDF5 package
</LI>
<LI>-d: HDF5 Custom Directory
</LI>
<LI>-t: Build/Rebuilds only text client
</LI>
<LI>-r: Build/Rebuilds only receiver
</LI>
<LI>-g: Build/Rebuilds only gui
</LI>
<LI>-j: Number of threads to compile through
</LI>
</UL>
<P>
Some example options for compilation:
<P>
Most basic option: <code>./cmk.sh -b</code>
<P>
For only make: <code>./cmk.sh</code>
<P>
For make clean;make: <code>./cmk.sh -c</code>
<P>
For using hdf5 without custom dir /blabla: <code>./cmk.sh -h -d /blabla</code>
<P>
For rebuilding cmake without hdf5: <code>./cmk.sh -b</code>
<P>
For using multiple cores to compile faster: <code>./cmk.sh -j9</code>
<P>
For rebuilding only certain parts: <code>./cmk.sh -tg</code> (only text client and
gui)
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -0,0 +1,73 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2012 (1.2)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Without .bashrc file</TITLE>
<META NAME="description" CONTENT="Without .bashrc file">
<META NAME="keywords" CONTENT="slsDetectorInstall">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2012">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="previous" HREF="Using_bashrc_file.html">
<LINK REL="up" HREF="Setting_environment_variabl.html">
<LINK REL="next" HREF="Clean_Shared_Memory.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html255"
HREF="Clean_Shared_Memory.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html251"
HREF="Setting_environment_variabl.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html247"
HREF="Using_bashrc_file.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html253"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html256"
HREF="Clean_Shared_Memory.html">Clean Shared Memory</A>
<B> Up:</B> <A NAME="tex2html252"
HREF="Setting_environment_variabl.html">Setting environment variables</A>
<B> Previous:</B> <A NAME="tex2html248"
HREF="Using_bashrc_file.html">Using .bashrc file</A>
&nbsp; <B> <A NAME="tex2html254"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION00044200000000000000">
Without .bashrc file</A>
</H3>
Go to binaries folder slsDetectorPackage/build/bin and execute the following:
<PRE>
export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
export PATH=$PWD:$PATH
</PRE>
<P>
<BR><HR>
<ADDRESS>
Thattil Dhanya
2019-04-08
</ADDRESS>
</BODY>
</HTML>

View File

@ -18,28 +18,28 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="node1.html">
<LINK REL="next" HREF="Contents.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html9"
HREF="node1.html">
<A NAME="tex2html8"
HREF="Contents.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up_g.png">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev_g.png">
<A NAME="tex2html7"
HREF="node1.html">
<A NAME="tex2html6"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html10"
HREF="node1.html">Contents</A>
&nbsp; <B> <A NAME="tex2html8"
HREF="node1.html">Contents</A></B>
<B> Next:</B> <A NAME="tex2html9"
HREF="Contents.html">Contents</A>
&nbsp; <B> <A NAME="tex2html7"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
@ -57,91 +57,91 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<A NAME="CHILD_LINKS"></A>
<UL>
<LI><A NAME="tex2html10"
HREF="Contents.html">Contents</A>
<LI><A NAME="tex2html11"
HREF="node1.html">Contents</A>
HREF="Software_Package.html">The Software Package</A>
<UL>
<LI><A NAME="tex2html12"
HREF="node2.html">The Software Package</A>
<UL>
HREF="Binaries.html">Binaries</A>
</UL>
<BR>
<LI><A NAME="tex2html13"
HREF="node3.html">Binaries</A>
</UL>
<BR>
HREF="Install_Binaries_via_Conda.html">Install Binaries via Conda</A>
<LI><A NAME="tex2html14"
HREF="node4.html">Install Binaries via Conda</A>
HREF="Install_via_Source_Code.html">Install via Source Code</A>
<UL>
<LI><A NAME="tex2html15"
HREF="node5.html">Install via Source Code</A>
<UL>
HREF="Download_Source_Code.html">Download Source Code</A>
<LI><A NAME="tex2html16"
HREF="node6.html">Download Source Code</A>
HREF="Requirements.html">Requirements</A>
<UL>
<LI><A NAME="tex2html17"
HREF="node7.html">Requirements</A>
<UL>
HREF="Qt4_Installation_GUI.html">Qt4 Installation for GUI</A>
<LI><A NAME="tex2html18"
HREF="node8.html">Qt4 Installation for GUI</A>
HREF="Qwt_Installation_GUI.html">Qwt Installation for GUI</A>
<LI><A NAME="tex2html19"
HREF="node9.html">Qwt Installation for GUI</A>
HREF="Root_Installation_Calibrati.html">Root Installation for Calibration Wizards</A>
</UL>
<LI><A NAME="tex2html20"
HREF="node10.html">Root Installation for Calibration Wizards</A>
</UL>
HREF="Compilation.html">Compilation</A>
<UL>
<LI><A NAME="tex2html21"
HREF="node11.html">Compilation</A>
<UL>
HREF="Using_script_cmk_sh.html">Using script cmk.sh</A>
<LI><A NAME="tex2html22"
HREF="node12.html">Using script cmk.sh</A>
HREF="Directly_using_cmake.html">Directly using cmake</A>
</UL>
<LI><A NAME="tex2html23"
HREF="node13.html">Directly using cmake</A>
</UL>
<LI><A NAME="tex2html24"
HREF="node14.html">Setting environment variables</A>
HREF="Setting_environment_variabl.html">Setting environment variables</A>
<UL>
<LI><A NAME="tex2html24"
HREF="Using_bashrc_file.html">Using .bashrc file</A>
<LI><A NAME="tex2html25"
HREF="node15.html">Using .bashrc file</A>
<LI><A NAME="tex2html26"
HREF="node16.html">Without .bashrc file</A>
HREF="Without_bashrc_file.html">Without .bashrc file</A>
</UL>
<LI><A NAME="tex2html27"
HREF="node17.html">Clean Shared Memory</A>
<LI><A NAME="tex2html26"
HREF="Clean_Shared_Memory.html">Clean Shared Memory</A>
</UL>
<BR>
<LI><A NAME="tex2html27"
HREF="Software_Upgrade.html">Software Upgrade</A>
<UL>
<LI><A NAME="tex2html28"
HREF="node18.html">Software Upgrade</A>
HREF="MYTHEN.html">MYTHEN</A>
<UL>
<LI><A NAME="tex2html29"
HREF="node19.html">MYTHEN</A>
<UL>
HREF="MYTHEN_Firmware.html">MYTHEN Firmware</A>
<LI><A NAME="tex2html30"
HREF="node20.html">MYTHEN Firmware</A>
HREF="MYTHEN_On_board_Software.html">MYTHEN On-board Software</A>
</UL>
<LI><A NAME="tex2html31"
HREF="node21.html">MYTHEN On-board Software</A>
</UL>
HREF="GOTTHARD.html">GOTTHARD</A>
<UL>
<LI><A NAME="tex2html32"
HREF="node22.html">GOTTHARD</A>
<UL>
HREF="GOTTHARD_Firmware.html">GOTTHARD Firmware</A>
<LI><A NAME="tex2html33"
HREF="node23.html">GOTTHARD Firmware</A>
HREF="GOTTHARD_On_board_Software.html">GOTTHARD On-board Software</A>
</UL>
<LI><A NAME="tex2html34"
HREF="node24.html">GOTTHARD On-board Software</A>
</UL>
HREF="EIGER.html">EIGER</A>
<UL>
<LI><A NAME="tex2html35"
HREF="node25.html">EIGER</A>
<UL>
HREF="EIGER_Firmware.html">EIGER Firmware</A>
<LI><A NAME="tex2html36"
HREF="node26.html">EIGER Firmware</A>
<LI><A NAME="tex2html37"
HREF="node27.html">EIGER On-board Software</A>
HREF="EIGER_On_board_Software.html">EIGER On-board Software</A>
</UL>
<LI><A NAME="tex2html38"
HREF="node28.html">JUNGFRAU</A>
<LI><A NAME="tex2html37"
HREF="JUNGFRAU.html">JUNGFRAU</A>
<UL>
<LI><A NAME="tex2html38"
HREF="JUNGFRAU_Firmware.html">JUNGFRAU Firmware</A>
<LI><A NAME="tex2html39"
HREF="node29.html">JUNGFRAU Firmware</A>
<LI><A NAME="tex2html40"
HREF="node30.html">JUNGFRAU On-board Software</A>
HREF="JUNGFRAU_On_board_Software.html">JUNGFRAU On-board Software</A>
</UL>
</UL>
<BR>
<LI><A NAME="tex2html41"
HREF="node31.html">About this document ...</A>
<LI><A NAME="tex2html40"
HREF="About_this_document.html">About this document ...</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>

View File

@ -18,28 +18,28 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<LINK REL="STYLESHEET" HREF="slsDetectorInstall.css">
<LINK REL="next" HREF="node1.html">
<LINK REL="next" HREF="Contents.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html9"
HREF="node1.html">
<A NAME="tex2html8"
HREF="Contents.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="file:/usr/share/latex2html/icons/next.png"></A>
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="file:/usr/share/latex2html/icons/up_g.png">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="file:/usr/share/latex2html/icons/prev_g.png">
<A NAME="tex2html7"
HREF="node1.html">
<A NAME="tex2html6"
HREF="Contents.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="file:/usr/share/latex2html/icons/contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html10"
HREF="node1.html">Contents</A>
&nbsp; <B> <A NAME="tex2html8"
HREF="node1.html">Contents</A></B>
<B> Next:</B> <A NAME="tex2html9"
HREF="Contents.html">Contents</A>
&nbsp; <B> <A NAME="tex2html7"
HREF="Contents.html">Contents</A></B>
<BR>
<BR>
<!--End of Navigation Panel-->
@ -57,91 +57,91 @@ original version by: Nikos Drakos, CBLU, University of Leeds
<A NAME="CHILD_LINKS"></A>
<UL>
<LI><A NAME="tex2html10"
HREF="Contents.html">Contents</A>
<LI><A NAME="tex2html11"
HREF="node1.html">Contents</A>
HREF="Software_Package.html">The Software Package</A>
<UL>
<LI><A NAME="tex2html12"
HREF="node2.html">The Software Package</A>
<UL>
HREF="Binaries.html">Binaries</A>
</UL>
<BR>
<LI><A NAME="tex2html13"
HREF="node3.html">Binaries</A>
</UL>
<BR>
HREF="Install_Binaries_via_Conda.html">Install Binaries via Conda</A>
<LI><A NAME="tex2html14"
HREF="node4.html">Install Binaries via Conda</A>
HREF="Install_via_Source_Code.html">Install via Source Code</A>
<UL>
<LI><A NAME="tex2html15"
HREF="node5.html">Install via Source Code</A>
<UL>
HREF="Download_Source_Code.html">Download Source Code</A>
<LI><A NAME="tex2html16"
HREF="node6.html">Download Source Code</A>
HREF="Requirements.html">Requirements</A>
<UL>
<LI><A NAME="tex2html17"
HREF="node7.html">Requirements</A>
<UL>
HREF="Qt4_Installation_GUI.html">Qt4 Installation for GUI</A>
<LI><A NAME="tex2html18"
HREF="node8.html">Qt4 Installation for GUI</A>
HREF="Qwt_Installation_GUI.html">Qwt Installation for GUI</A>
<LI><A NAME="tex2html19"
HREF="node9.html">Qwt Installation for GUI</A>
HREF="Root_Installation_Calibrati.html">Root Installation for Calibration Wizards</A>
</UL>
<LI><A NAME="tex2html20"
HREF="node10.html">Root Installation for Calibration Wizards</A>
</UL>
HREF="Compilation.html">Compilation</A>
<UL>
<LI><A NAME="tex2html21"
HREF="node11.html">Compilation</A>
<UL>
HREF="Using_script_cmk_sh.html">Using script cmk.sh</A>
<LI><A NAME="tex2html22"
HREF="node12.html">Using script cmk.sh</A>
HREF="Directly_using_cmake.html">Directly using cmake</A>
</UL>
<LI><A NAME="tex2html23"
HREF="node13.html">Directly using cmake</A>
</UL>
<LI><A NAME="tex2html24"
HREF="node14.html">Setting environment variables</A>
HREF="Setting_environment_variabl.html">Setting environment variables</A>
<UL>
<LI><A NAME="tex2html24"
HREF="Using_bashrc_file.html">Using .bashrc file</A>
<LI><A NAME="tex2html25"
HREF="node15.html">Using .bashrc file</A>
<LI><A NAME="tex2html26"
HREF="node16.html">Without .bashrc file</A>
HREF="Without_bashrc_file.html">Without .bashrc file</A>
</UL>
<LI><A NAME="tex2html27"
HREF="node17.html">Clean Shared Memory</A>
<LI><A NAME="tex2html26"
HREF="Clean_Shared_Memory.html">Clean Shared Memory</A>
</UL>
<BR>
<LI><A NAME="tex2html27"
HREF="Software_Upgrade.html">Software Upgrade</A>
<UL>
<LI><A NAME="tex2html28"
HREF="node18.html">Software Upgrade</A>
HREF="MYTHEN.html">MYTHEN</A>
<UL>
<LI><A NAME="tex2html29"
HREF="node19.html">MYTHEN</A>
<UL>
HREF="MYTHEN_Firmware.html">MYTHEN Firmware</A>
<LI><A NAME="tex2html30"
HREF="node20.html">MYTHEN Firmware</A>
HREF="MYTHEN_On_board_Software.html">MYTHEN On-board Software</A>
</UL>
<LI><A NAME="tex2html31"
HREF="node21.html">MYTHEN On-board Software</A>
</UL>
HREF="GOTTHARD.html">GOTTHARD</A>
<UL>
<LI><A NAME="tex2html32"
HREF="node22.html">GOTTHARD</A>
<UL>
HREF="GOTTHARD_Firmware.html">GOTTHARD Firmware</A>
<LI><A NAME="tex2html33"
HREF="node23.html">GOTTHARD Firmware</A>
HREF="GOTTHARD_On_board_Software.html">GOTTHARD On-board Software</A>
</UL>
<LI><A NAME="tex2html34"
HREF="node24.html">GOTTHARD On-board Software</A>
</UL>
HREF="EIGER.html">EIGER</A>
<UL>
<LI><A NAME="tex2html35"
HREF="node25.html">EIGER</A>
<UL>
HREF="EIGER_Firmware.html">EIGER Firmware</A>
<LI><A NAME="tex2html36"
HREF="node26.html">EIGER Firmware</A>
<LI><A NAME="tex2html37"
HREF="node27.html">EIGER On-board Software</A>
HREF="EIGER_On_board_Software.html">EIGER On-board Software</A>
</UL>
<LI><A NAME="tex2html38"
HREF="node28.html">JUNGFRAU</A>
<LI><A NAME="tex2html37"
HREF="JUNGFRAU.html">JUNGFRAU</A>
<UL>
<LI><A NAME="tex2html38"
HREF="JUNGFRAU_Firmware.html">JUNGFRAU Firmware</A>
<LI><A NAME="tex2html39"
HREF="node29.html">JUNGFRAU Firmware</A>
<LI><A NAME="tex2html40"
HREF="node30.html">JUNGFRAU On-board Software</A>
HREF="JUNGFRAU_On_board_Software.html">JUNGFRAU On-board Software</A>
</UL>
</UL>
<BR>
<LI><A NAME="tex2html41"
HREF="node31.html">About this document ...</A>
<LI><A NAME="tex2html40"
HREF="About_this_document.html">About this document ...</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>

Binary file not shown.

View File

@ -0,0 +1,18 @@
INCLUDES = -I .
SRC_REC = dummyMain.cpp
LDFLAG_REC = -L. -lSlsReceiver -L/usr/lib64/ -lpthread -lrt -L. -lzmq
DESTDIR ?= ../docs
all: dummyReceiver
dummyReceiver:$(SRC_REC)
echo "creating receiver"
g++ -o dummyReceiver $(SRC_REC) $(INCLUDES) $(LDFLAG_REC) -lm -lstdc++
clean:
echo "cleaning"
rm -rf dummyReceiver

View File

@ -0,0 +1,67 @@
#pragma once
/**
*
* @libdoc The MySocketTCP class provides a simple interface for creating and sending/receiving data over a TCP socket.
*
* @short This class provides a simple interface for creating and sending/receiving data over a TCP socket.
* @author Ian Johnson
* @version 1.0
*/
//version 1.0, base development, Ian 19/01/09
/* Modified by anna on 19.01.2009 */
/*
canceled SetupParameters() and varaibles intialized in the constructors' headers;
defined SEND_REC_MAX_SIZE (for compatibilty with mythen (and possibly other) pure C servers (i would move it to the common header file)
added #ifndef C_ONLY... to cutout class definition when including in pure C servers (can be removed if SEND_REC_MAX_SIZE is moved to the common header file)
defined private variables char hostname[1000] and int portno to store connection informations;
defined public functions int getHostname(char *name) and int getPortNumber() to retrieve connection informations
added public function int getErrorStatus() returning 1 if socketDescriptor<0
remove exits in the constructors and replace them with socketDescriptor=-1
replaced the argument of send/receive data with void (to avoid too much casting or compiler errors/warnings)
added a function which really does not close the socket between send/receive (senddataonly, receivedataonly)
*/
/* Modified by Anna on 31.10.2012
developed and
*/
#include "genericSocket.h"
#define TCP_PACKET_SIZE 4096
class MySocketTCP: public genericSocket {
public:
MySocketTCP(const char* const host_ip_or_name, unsigned short int const port_number): genericSocket(host_ip_or_name, port_number,TCP), last_keep_connection_open_action_was_a_send(0){setPacketSize(TCP_PACKET_SIZE);}; // sender (client): where to? ip
MySocketTCP(unsigned short int const port_number):genericSocket(port_number,TCP), last_keep_connection_open_action_was_a_send(0) {setPacketSize(TCP_PACKET_SIZE);}; // receiver (server) local no need for ip
//The following two functions will connectioned->send/receive->disconnect
int SendData(void* buf,int length);//length in characters
int ReceiveData(void* buf,int length);
//The following two functions stay connected, blocking other connections, and must be manually disconnected,
// when the last call is a SendData() or ReceiveData() the disconnection will be done automatically
//These function will also automatically disconnect->reconnect if
// two reads (or two writes) are called in a row to preserve the data send/receive structure
int SendDataAndKeepConnection(void* buf,int length);
int ReceiveDataAndKeepConnection(void* buf,int length);
private:
bool last_keep_connection_open_action_was_a_send;
};

View File

@ -0,0 +1,730 @@
#pragma once
/********************************************//**
* @file UDPBaseImplementation.h
* @short does all the functions for a receiver, set/get parameters, start/stop etc.
***********************************************/
//#include "sls_receiver_defs.h"
#include "UDPInterface.h"
//#include <stdio.h>
/**
* @short does all the base functions for a receiver, set/get parameters, start/stop etc.
*/
class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInterface {
public:
/*************************************************************************
* Constructor & Destructor **********************************************
* They access local cache of configuration or detector parameters *******
*************************************************************************/
/**
* Constructor
*/
UDPBaseImplementation();
/**
* Destructor
*/
virtual ~UDPBaseImplementation();
/*
* Initialize class members
*/
void initializeMembers();
/*************************************************************************
* Getters ***************************************************************
* They access local cache of configuration or detector parameters *******
*************************************************************************/
//**initial parameters***
/*
* Get multi detector size
* @return pointer to array of multi detector size in every dimension
*/
int* getMultiDetectorSize() const;
/*
* Get detector position id
* @return detector position id
*/
int getDetectorPositionId() const;
/*
* Get detector hostname
* @return NULL or hostname or NULL if uninitialized (max of 1000 characters)
*/
char *getDetectorHostname() const;
/*
* Get flipped data across 'axis'
* @return if data is flipped across 'axis'
*/
int getFlippedData(int axis=0) const;
//***file parameters***
/**
* Get File Format
* @return file format
*/
fileFormat getFileFormat() const;
/**
* Get File Name Prefix (without frame index, file index and extension (_d0_f000000000000_8.raw))
* @return NULL or file name prefix (max of 1000 characters)
*/
char *getFileName() const;
/**
* Get File Path
* @return NULL or file path (max of 1000 characters)
*/
char *getFilePath() const;
/**
* Get File Index
* @return file index of acquisition
*/
uint64_t getFileIndex() const;
/**
* Get Scan Tag
* @return scan tag //FIXME: needed? (unsigned integer?)
*/
int getScanTag() const;
/**
* Get if Frame Index is enabled (acquisition of more than 1 frame adds '_f000000000000' to file name )
* @return true if frame index needed, else false
*/
bool getFrameIndexEnable() const;
/**
* Get File Write Enable
* @return true if file write enabled, else false
*/
bool getFileWriteEnable() const;
/**
* Get File Over Write Enable
* @return true if file over write enabled, else false
*/
bool getOverwriteEnable() const;
/**
* Get data compression, by saving only hits (so far implemented only for Moench and Gotthard)
* @return true if data compression enabled, else false
*/
bool getDataCompressionEnable() const;
//***acquisition count parameters***
/**
* Get Total Frames Caught for an entire acquisition (including all scans)
* @return total number of frames caught for entire acquisition
*/
uint64_t getTotalFramesCaught() const;
/**
* Get Frames Caught for each real time acquisition (eg. for each scan)
* @return number of frames caught for each scan
*/
uint64_t getFramesCaught() const;
/**
* Get Current Frame Index for an entire acquisition (including all scans)
* @return -1 if no frames have been caught, else current frame index (represents all scans too)
*/
int64_t getAcquisitionIndex() const;
//***connection parameters***
/**
* Get UDP Port Number
* @return udp port number
*/
uint32_t getUDPPortNumber() const;
/**
* Get Second UDP Port Number (eiger specific)
* @return second udp port number
*/
uint32_t getUDPPortNumber2() const;
/**
* Get Ehernet Interface
* @ethernet interface. eg. eth0 or "" if listening to all (max of 1000 characters)
*/
char *getEthernetInterface() const;
//***acquisition parameters***
/**
* Get Short Frame Enabled, later will be moved to getROI (so far only for gotthard)
* @return index of adc enabled, else -1 if all enabled
*/
int getShortFrameEnable() const;
/**
* Get the Frequency of Frames Sent to GUI
* @return 0 for random frame requests, n for nth frame frequency
*/
uint32_t getFrameToGuiFrequency() const;
/**
* Gets the timer between frames streamed when frequency is set to 0
* @return timer between frames streamed
*/
uint32_t getFrameToGuiTimer() const;
/**
* Get the data stream enable
* @return data stream enable
*/
bool getDataStreamEnable() const;
/**
* Get Acquisition Period
* @return acquisition period
*/
uint64_t getAcquisitionPeriod() const;
/**
* Get Acquisition Time
* @return acquisition time
*/
uint64_t getAcquisitionTime() const;
/**
* Get Sub Exposure Time
* @return Sub Exposure Time
*/
uint64_t getSubExpTime() const;
/*
* Get Number of Frames expected by receiver from detector
* The data receiver status will change from running to idle when it gets this number of frames FIXME: (Not implemented)
* @return number of frames expected
*/
uint64_t getNumberOfFrames() const;
/**
* Get Dynamic Range or Number of Bits Per Pixel
* @return dynamic range that is 4, 8, 16 or 32
*/
uint32_t getDynamicRange() const;
/**
* Get Ten Giga Enable
* @return true if 10Giga enabled, else false (1G enabled)
*/
bool getTenGigaEnable() const;
/**
* Get Fifo Depth
* @return fifo depth
*/
uint32_t getFifoDepth() const;
//***receiver status***
/**
* Get Listening Status of Receiver
* @return can be idle, listening or error depending on if the receiver is listening or not
*/
runStatus getStatus() const;
/**
* Get Silent Mode
* @return silent mode
*/
uint32_t getSilentMode() const;
/**
* Get activate
* If deactivated, receiver will write dummy packets 0xFF
* (as it will receive nothing from detector)
* @return 0 for deactivated, 1 for activated
*/
int getActivate() const;
/**
* Get Streaming Port
* @return streaming port
*/
uint32_t getStreamingPort() const;
/*************************************************************************
* Setters ***************************************************************
* They modify the local cache of configuration or detector parameters ***
*************************************************************************/
//**initial parameters***
/**
* Configure command line parameters
* @param config_map mapping of config parameters passed from command line arguments
*/
void configure(map<string, string> config_map);
/*
* Set multi detector size
* @param pointer to array of multi detector size in every dimension
*/
void setMultiDetectorSize(const int* size);
/*
* Get flipped data across 'axis'
* @return if data is flipped across 'axis'
*/
void setFlippedData(int axis=0, int enable=-1);
//***file parameters***
/**
* Set File Format
* @param f fileformat binary or hdf5
*/
void setFileFormat(slsReceiverDefs::fileFormat f);
/**
* Set File Name Prefix (without frame index, file index and extension (_d0_f000000000000_8.raw))
* Does not check for file existence since it is created only at startReceiver
* @param c file name (max of 1000 characters)
*/
void setFileName(const char c[]);
/**
* Set File Path
* Checks for file directory existence before setting file path,
* If it exists, it sets it
* @param c file path (max of 1000 characters)
*/
void setFilePath(const char c[]);
/**
* Set File Index of acquisition
* @param i file index of acquisition
*/
void setFileIndex(const uint64_t i);
/**
* Set Scan Tag
* @param i scan tag //FIXME: needed? (unsigned integer?)
*/
void setScanTag(const int i);
/**
* Set Frame Index Enable (acquisition of more than 1 frame adds '_f000000000000' to file name )
* @param b true for frame index enable, else false
*/
void setFrameIndexEnable(const bool b);
/**
* Set File Write Enable
* @param b true for file write enable, else false
*/
void setFileWriteEnable(const bool b);
/**
* Set File Overwrite Enable
* @param b true for file overwrite enable, else false
*/
void setOverwriteEnable(const bool b);
/**
* Set data compression, by saving only hits (so far implemented only for Moench and Gotthard)
* @param b true for data compression enable, else false
* @return OK or FAIL
*/
int setDataCompressionEnable(const bool b);
//***connection parameters***
/**
* Set UDP Port Number
* @param i udp port number
*/
void setUDPPortNumber(const uint32_t i);
/**
* Set Second UDP Port Number (eiger specific)
* @return second udp port number
*/
void setUDPPortNumber2(const uint32_t i);
/**
* Set Ethernet Interface to listen to
* @param c ethernet inerface eg. eth0 (max of 1000 characters)
*/
void setEthernetInterface(const char* c);
//***acquisition parameters***
/**
* Set Short Frame Enabled, later will be moved to getROI (so far only for gotthard)
* @param i index of adc enabled, else -1 if all enabled
* @return OK or FAIL
*/
int setShortFrameEnable(const int i);
/**
* Set the Frequency of Frames Sent to GUI
* @param freq 0 for random frame requests, n for nth frame frequency
* @return OK or FAIL
*/
int setFrameToGuiFrequency(const uint32_t freq);
/**
* Sets the timer between frames streamed when frequency is set to 0
* @param time_in_ms timer between frames streamed
*/
void setFrameToGuiTimer(const uint32_t time_in_ms);
/**
* Set the data stream enable
* @param enable data stream enable
* @return OK or FAIL
*/
int setDataStreamEnable(const bool enable);
/**
* Set Acquisition Period
* @param i acquisition period
* @return OK or FAIL
*/
int setAcquisitionPeriod(const uint64_t i);
/**
* Set Acquisition Time
* @param i acquisition time
* @return OK or FAIL
*/
int setAcquisitionTime(const uint64_t i);
/**
* Set Sub Exposure Time
* @param i Sub Exposure Time
* @return OK or FAIL
*/
void setSubExpTime(const uint64_t i);
/**
* Set Number of Frames expected by receiver from detector
* The data receiver status will change from running to idle when it gets this number of frames
* @param i number of frames expected
* @return OK or FAIL
*/
int setNumberOfFrames(const uint64_t i);
/**
* Set Dynamic Range or Number of Bits Per Pixel
* @param i dynamic range that is 4, 8, 16 or 32
* @return OK or FAIL
*/
int setDynamicRange(const uint32_t i);
/**
* Set Ten Giga Enable
* @param b true if 10Giga enabled, else false (1G enabled)
* @return OK or FAIL
*/
int setTenGigaEnable(const bool b);
/**
* Set Fifo Depth
* @param i fifo depth value
* @return OK or FAIL
*/
int setFifoDepth(const uint32_t i);
//***receiver parameters***
/**
* Set Silent Mode
* @param i silent mode. 1 sets, 0 unsets
*/
void setSilentMode(const uint32_t i);
/*************************************************************************
* Behavioral functions***************************************************
* They may modify the status of the receiver ****************************
*************************************************************************/
//***initial functions***
/**
* Set receiver type (and corresponding detector variables in derived STANDARD class)
* It is the first function called by the client when connecting to receiver
* @param d detector type
* @return OK or FAIL
*/
int setDetectorType(const detectorType d);
/**
* Set detector position id
* @param i position id
*/
void setDetectorPositionId(const int i);
/**
* Sets detector hostname
* It is second function called by the client when connecting to receiver.
* you can call this function only once.
* @param c detector hostname
*/
void initialize(const char *c);
//***acquisition functions***
/**
* Reset acquisition parameters such as total frames caught for an entire acquisition (including all scans)
*/
void resetAcquisitionCount();
/**
* Start Listening for Packets by activating all configuration settings to receiver
* @param c error message if FAIL
* @return OK or FAIL
*/
int startReceiver(char *c=NULL);
/**
* Stop Listening for Packets
* Calls startReadout(), which stops listening and sets status to Transmitting
* When it has read every frame in buffer,it returns with the status Run_Finished
*/
void stopReceiver();
/**
* Stop Listening to Packets
* and sets status to Transmitting
*/
void startReadout();
/**
* Shuts down and deletes UDP Sockets
*/
void shutDownUDPSockets();
/**
* Get the buffer-current frame read by receiver
* @param ithread port thread index
* @param c pointer to current file name
* @param raw address of pointer, pointing to current frame to send to gui
* @param startAcq start index of the acquisition
* @param startFrame start index of the scan
*/
void readFrame(int ithread, char* c,char** raw, int64_t &startAcq, int64_t &startFrame);
/**
* abort acquisition with minimum damage: close open files, cleanup.
* does nothing if state already is 'idle'
*/
void abort(); //FIXME: needed, isn't stopReceiver enough?
/**
* Activate / Deactivate Receiver
* If deactivated, receiver will write dummy packets 0xFF
* (as it will receive nothing from detector)
*/
int setActivate(int enable = -1);
/**
* Set streaming port
* @param i streaming port
*/
void setStreamingPort(const uint32_t i);
/**
* Restream stop dummy packet from receiver
* @return OK or FAIL
*/
int restreamStop();
//***callback functions***
/**
* Call back for start acquisition
* callback arguments are
* filepath
* filename
* fileindex
* datasize
*
* return value is insignificant at the moment
* we write depending on file write enable
* users get data to write depending on call backs registered
*/
void registerCallBackStartAcquisition(int (*func)(char*, char*, uint64_t, uint32_t, void*),void *arg);
/**
* Call back for acquisition finished
* callback argument is
* total frames caught
*/
void registerCallBackAcquisitionFinished(void (*func)(uint64_t, void*),void *arg);
/**
* Call back for raw data
* args to raw data ready callback are
* frameNumber is the frame number
* expLength is the subframe number (32 bit eiger) or real time exposure time in 100ns (others)
* packetNumber is the packet number
* bunchId is the bunch id from beamline
* timestamp is the time stamp with 10 MHz clock
* modId is the unique module id (unique even for left, right, top, bottom)
* xCoord is the x coordinate in the complete detector system
* yCoord is the y coordinate in the complete detector system
* zCoord is the z coordinate in the complete detector system
* debug is for debugging purposes
* roundRNumber is the round robin set number
* detType is the detector type see :: detectorType
* version is the version number of this structure format
* dataPointer is the pointer to the data
* dataSize in bytes is the size of the data in bytes
*/
void registerCallBackRawDataReady(void (*func)(uint64_t, uint32_t, uint32_t, uint64_t, uint64_t, uint16_t, uint16_t, uint16_t, uint16_t, uint32_t, uint16_t, uint8_t, uint8_t,
char*, uint32_t, void*),void *arg);
protected:
/*************************************************************************
* Class Members *********************************************************
*************************************************************************/
//**detector parameters***
/** detector type */
detectorType myDetectorType;
/** Number of Detectors in each dimension direction */
int numDet[MAX_DIMENSIONS];
/*Detector Readout ID*/
int detID;
/** detector hostname */
char detHostname[MAX_STR_LENGTH];
/** Acquisition Period */
uint64_t acquisitionPeriod;
/** Acquisition Time */
uint64_t acquisitionTime;
/** Sub Exposure Time */
uint64_t subExpTime;
/** Frame Number */
uint64_t numberOfFrames;
/** Dynamic Range */
uint32_t dynamicRange;
/** Ten Giga Enable*/
bool tengigaEnable;
/** Fifo Depth */
uint32_t fifoDepth;
/** enable for flipping data across both axes */
int flippedData[2];
//***receiver parameters***
/** Maximum Number of Listening Threads/ UDP Ports */
const static int MAX_NUMBER_OF_LISTENING_THREADS = 2;
/** Receiver Status */
runStatus status;
/** Activated/Deactivated */
int activated;
//***connection parameters***
/** Ethernet Interface */
char eth[MAX_STR_LENGTH];
/** Server UDP Port Number*/
uint32_t udpPortNum[MAX_NUMBER_OF_LISTENING_THREADS];
//***file parameters***
/** File format */
fileFormat fileFormatType;
/** File Name without frame index, file index and extension (_d0_f000000000000_8.raw)*/
char fileName[MAX_STR_LENGTH];
/** File Path */
char filePath[MAX_STR_LENGTH];
/** File Index */
uint64_t fileIndex;
/** Scan Tag */
int scanTag;
/** Frame Index Enable */
bool frameIndexEnable;
/** File Write enable */
bool fileWriteEnable;
/** Overwrite enable */
bool overwriteEnable;
/** Data Compression Enable - save only hits */
bool dataCompressionEnable;
//***acquisition parameters***
/* Short Frame Enable or index of adc enabled, else -1 if all enabled (gotthard specific) TODO: move to setROI */
int shortFrameEnable;
/** Frequency of Frames sent to GUI */
uint32_t frameToGuiFrequency;
/** Timer of Frames sent to GUI when frequency is 0 */
uint32_t frameToGuiTimerinMS;
/** Data Stream Enable from Receiver */
bool dataStreamEnable;
/** streaming port */
uint32_t streamingPort;
//***receiver parameters***
uint32_t silentMode;
//***callback parameters***
/**
* Call back for start acquisition
* callback arguments are
* filepath
* filename
* fileindex
* datasize
*
* return value is insignificant at the moment
* we write depending on file write enable
* users get data to write depending on call backs registered
*/
int (*startAcquisitionCallBack)(char*, char*, uint64_t, uint32_t, void*);
void *pStartAcquisition;
/**
* Call back for acquisition finished
* callback argument is
* total frames caught
*/
void (*acquisitionFinishedCallBack)(uint64_t, void*);
void *pAcquisitionFinished;
/**
* Call back for raw data
* args to raw data ready callback are
* frameNumber is the frame number
* expLength is the subframe number (32 bit eiger) or real time exposure time in 100ns (others)
* packetNumber is the packet number
* bunchId is the bunch id from beamline
* timestamp is the time stamp with 10 MHz clock
* modId is the unique module id (unique even for left, right, top, bottom)
* xCoord is the x coordinate in the complete detector system
* yCoord is the y coordinate in the complete detector system
* zCoord is the z coordinate in the complete detector system
* debug is for debugging purposes
* roundRNumber is the round robin set number
* detType is the detector type see :: detectorType
* version is the version number of this structure format
* dataPointer is the pointer to the data
* dataSize in bytes is the size of the data in bytes
*/
void (*rawDataReadyCallBack)(uint64_t, uint32_t, uint32_t, uint64_t, uint64_t, uint16_t, uint16_t, uint16_t, uint16_t, uint32_t, uint16_t, uint8_t, uint8_t,
char*, uint32_t, void*);
void *pRawDataReady;
private:
};

View File

@ -0,0 +1,682 @@
#pragma once
/***********************************************
* @file UDPInterface.h
* @short Base class with all the functions for the UDP inteface of the receiver
***********************************************/
/**
* \mainpage Base class with all the functions for the UDP inteface of the receiver
*/
/**
* @short Base class with all the functions for the UDP inteface of the receiver
*/
#include <exception>
#include "sls_receiver_defs.h"
#include "receiver_defs.h"
#include "utilities.h"
#include "logger.h"
class UDPInterface {
/* abstract class that defines the UDP interface of an sls detector data receiver.
*
* Use the factory method UDPInterface::create() to get an instance:
*
* UDPInterface *udp_interface = UDPInterface::create()
*
* Sequence of Calls from client (upon setting receiver)
* -setDetectorType
* -setMultiDetectorSize
* -setDetectorPositionId
* -initialize
* -setUDPPortNumber,setUDPPortNumber2,setEthernetInterface
* -setFilePath
* -setFileName
* -setFileIndex
* -setFileFormat
* -setFileWriteEnable
* -setOverwriteEnable
* -setFrameIndexEnable
* -setAcquisitionPeriod
* -setNumberOfFrames
* -setAcquisitionTime
* -setSubExpTime
* -setDynamicRange
* -setFlippedData
* -setActivate
* -setTenGigaEnable
* -setStreamingPort
* -setDataStreamEnable
*
*
* supported sequence of method-calls:
*
* initialize() : once and only once after create()
*
* get*() : anytime after initialize(), multiples times
*
* set*() : anytime after initialize(), multiple times
*
* startReceiver(): anytime after initialize(). Will fail in TCPIP itself if state already is 'running':
*
* Only startReceiver() does change the data receiver configuration, it does pass the whole configuration cache to the data receiver.
*
* abort(), //FIXME: needed?
*
* stopReceiver() : anytime after initialize(). Will do nothing if state already is idle.
* Otherwise, sets status to transmitting when shutting down sockets
* then to run_finished when all data obtained
* then to idle when returning from this function
*
*
* getStatus() returns the actual state of the data receiver - idle, running or error, enum defined in include/sls_receiver_defs.h
*
*
*
* get*() and set*() methods access the local cache of configuration values only and *do not* modify the data receiver settings.
*
* set methods return nothing, use get methods to validate a set method success
*
* get-methods that return a char array (char *) allocate a new array at each call. The caller is responsible to free the allocated space:
*
* char *c = receiver->getFileName();
* Or
* FIXME: so that the pointers are not shared external to the class, do the following way in the calling method?
* char *c = new char[MAX_STR_LENGTH];
* strcpy(c,receiver->getFileName());
* ....
*
* delete[] c;
*
* All pointers passed in externally will be allocated and freed by the calling function
*
* OK and FAIL are defined in include/sls_receiver_defs.h for functions implementing behavior
*
*/
public:
/*************************************************************************
* Constructor & Destructor **********************************************
* They access local cache of configuration or detector parameters *******
*************************************************************************/
/**
* Constructor
* Only non virtual function implemented in this class
* Factory create method to create a standard or custom object
* @param [in] receiver_type type can be standard or custom (must be derived from base class)
* @return a UDPInterface reference to object depending on receiver type
*/
static UDPInterface *create(string receiver_type = "standard");
/**
* Destructor
*/
virtual ~UDPInterface() {};
/*************************************************************************
* Getters ***************************************************************
* They access local cache of configuration or detector parameters *******
*************************************************************************/
//**initial/detector parameters***
/*
* Get multi detector size
* @return pointer to array of multi detector size in every dimension
*/
virtual int* getMultiDetectorSize() const = 0;
/*
* Get detector position id
* @return detector position id
*/
virtual int getDetectorPositionId() const = 0;
/*
* Get detector hostname
* @return hostname or NULL if uninitialized, must be released by calling function (max of 1000 characters)
*/
virtual char *getDetectorHostname() const = 0;
/*
* Get flipped data across 'axis'
* @return if data is flipped across 'axis'
*/
virtual int getFlippedData(int axis=0) const = 0;
//***file parameters***
/**
* Get File Format
* @return file format
*/
virtual slsReceiverDefs::fileFormat getFileFormat() const = 0;
/**
* Get File Name Prefix (without frame index, file index and extension (_d0_f000000000000_8.raw))
* @return NULL or pointer to file name prefix, must be released by calling function (max of 1000 characters)
*/
virtual char *getFileName() const = 0;
/**
* Get File Path
* @return NULL or pointer to file path, must be released by calling function (max of 1000 characters)
*/
virtual char *getFilePath() const = 0;
/**
* Get File Index
* @return NULL or file index of acquisition
*/
virtual uint64_t getFileIndex() const = 0;
/**
* Get Scan Tag
* @return scan tag //FIXME: needed? (unsigned integer?)
*/
virtual int getScanTag() const = 0;
/**
* Get if Frame Index is enabled (acquisition of more than 1 frame adds '_f000000000000' to file name )
* @return true if frame index needed, else false
*/
virtual bool getFrameIndexEnable() const = 0;
/**
* Get File Write Enable
* @return true if file write enabled, else false
*/
virtual bool getFileWriteEnable() const = 0;
/**
* Get File Over Write Enable
* @return true if file over write enabled, else false
*/
virtual bool getOverwriteEnable() const = 0;
/**
* Get data compression, by saving only hits (so far implemented only for Moench and Gotthard)
* @return true if data compression enabled, else false
*/
virtual bool getDataCompressionEnable() const = 0;
//***acquisition count parameters***
/**
* Get Total Frames Caught for an entire acquisition (including all scans)
* @return total number of frames caught for entire acquisition
*/
virtual uint64_t getTotalFramesCaught() const = 0;
/**
* Get Frames Caught for each real time acquisition (eg. for each scan)
* @return number of frames caught for each scan
*/
virtual uint64_t getFramesCaught() const = 0;
/**
* Get Current Frame Index for an entire acquisition (including all scans)
* @return -1 if no frames have been caught, else current frame index (represents all scans too) or -1 if no packets caught
*/
virtual int64_t getAcquisitionIndex() const = 0;
//***connection parameters***
/**
* Get UDP Port Number
* @return udp port number
*/
virtual uint32_t getUDPPortNumber() const = 0;
/**
* Get Second UDP Port Number (eiger specific)
* @return second udp port number
*/
virtual uint32_t getUDPPortNumber2() const = 0;
/**
* Get Ehernet Interface
* @return ethernet interface. eg. eth0 (max of 1000 characters)
*/
virtual char *getEthernetInterface() const = 0;
//***acquisition parameters***
/**
* Get Short Frame Enabled, later will be moved to getROI (so far only for gotthard)
* @return index of adc enabled, else -1 if all enabled
*/
virtual int getShortFrameEnable() const = 0;
/**
* Get the Frequency of Frames Sent to GUI
* @return 0 for random frame requests, n for nth frame frequency
*/
virtual uint32_t getFrameToGuiFrequency() const = 0;
/**
* Gets the timer between frames streamed when frequency is set to 0
* @return timer between frames streamed
*/
virtual uint32_t getFrameToGuiTimer() const = 0;
/**
* Get the data stream enable
* @return data stream enable
*/
virtual bool getDataStreamEnable() const = 0;
/**
* Get Acquisition Period
* @return acquisition period
*/
virtual uint64_t getAcquisitionPeriod() const = 0;
/**
* Get Acquisition Time
* @return acquisition time
*/
virtual uint64_t getAcquisitionTime() const = 0;
/**
* Get Sub Exposure Time
* @return Sub Exposure Time
*/
virtual uint64_t getSubExpTime() const = 0;
/*
* Get Number of Frames expected by receiver from detector
* The data receiver status will change from running to idle when it gets this number of frames FIXME: (Not implemented)
* @return number of frames expected
*/
virtual uint64_t getNumberOfFrames() const = 0;
/**
* Get Dynamic Range or Number of Bits Per Pixel
* @return dynamic range that is 4, 8, 16 or 32
*/
virtual uint32_t getDynamicRange() const = 0;
/**
* Get Ten Giga Enable
* @return true if 10Giga enabled, else false (1G enabled)
*/
virtual bool getTenGigaEnable() const = 0;
/**
* Get Fifo Depth
* @return fifo depth
*/
virtual uint32_t getFifoDepth() const = 0;
//***receiver status***
/**
* Get Listening Status of Receiver
* @return can be idle, listening or error depending on if the receiver is listening or not
*/
virtual slsReceiverDefs::runStatus getStatus() const = 0;
/**
* Get Silent Mode
* @return silent mode
*/
virtual uint32_t getSilentMode() const = 0;
/**
* Get activate
* If deactivated, receiver will write dummy packets 0xFF
* (as it will receive nothing from detector)
* @return 0 for deactivated, 1 for activated
*/
virtual int getActivate() const = 0;
/**
* Get Streaming Port
* @return streaming port
*/
virtual uint32_t getStreamingPort() const = 0;
/*************************************************************************
* Setters ***************************************************************
* They modify the local cache of configuration or detector parameters ***
*************************************************************************/
//**initial parameters***
/**
* Configure command line parameters
* @param config_map mapping of config parameters passed from command line arguments
*/
virtual void configure(map<string, string> config_map) = 0;
/*
* Set multi detector size
* @param pointer to array of multi detector size in every dimension
*/
virtual void setMultiDetectorSize(const int* size) = 0;
/*
* Get flipped data across 'axis'
* @return if data is flipped across 'axis'
*/
virtual void setFlippedData(int axis=0, int enable=-1) = 0;
//***file parameters***
/**
* Set File Format
* @param f fileformat binary or hdf5
*/
virtual void setFileFormat(slsReceiverDefs::fileFormat f) = 0;
/**
* Set File Name Prefix (without frame index, file index and extension (_d0_f000000000000_8.raw))
* Does not check for file existence since it is created only at startReceiver
* @param c file name (max of 1000 characters)
*/
virtual void setFileName(const char c[]) = 0;
/**
* Set File Path
* Checks for file directory existence before setting file path
* @param c file path (max of 1000 characters)
*/
virtual void setFilePath(const char c[]) = 0;
/**
* Set File Index of acquisition
* @param i file index of acquisition
*/
virtual void setFileIndex(const uint64_t i) = 0;
/**
* Set Scan Tag
* @param i scan tag //FIXME: needed? (unsigned integer?)
*/
virtual void setScanTag(const int i) = 0;
/**
* Set Frame Index Enable (acquisition of more than 1 frame adds '_f000000000000' to file name )
* @param b true for frame index enable, else false
*/
virtual void setFrameIndexEnable(const bool b) = 0;
/**
* Set File Write Enable
* @param b true for file write enable, else false
*/
virtual void setFileWriteEnable(const bool b) = 0;
/**
* Set File Overwrite Enable
* @param b true for file overwrite enable, else false
*/
virtual void setOverwriteEnable(const bool b) = 0;
/**
* Set data compression, by saving only hits (so far implemented only for Moench and Gotthard)
* @param b true for data compression enable, else false
* @return OK or FAIL
*/
virtual int setDataCompressionEnable(const bool b) = 0;
//***connection parameters***
/**
* Set UDP Port Number
* @param i udp port number
*/
virtual void setUDPPortNumber(const uint32_t i) = 0;
/**
* Set Second UDP Port Number (eiger specific)
* @return second udp port number
*/
virtual void setUDPPortNumber2(const uint32_t i) = 0;
/**
* Set Ethernet Interface to listen to
* @param c ethernet inerface eg. eth0 (max of 1000 characters)
*/
virtual void setEthernetInterface(const char* c) = 0;
//***acquisition parameters***
/**
* Set Short Frame Enabled, later will be moved to getROI (so far only for gotthard)
* @param i index of adc enabled, else -1 if all enabled
* @return OK or FAIL
*/
virtual int setShortFrameEnable(const int i) = 0;
/**
* Set the Frequency of Frames Sent to GUI
* @param freq 0 for random frame requests, n for nth frame frequency
* @return OK or FAIL
*/
virtual int setFrameToGuiFrequency(const uint32_t freq) = 0;
/**
* Sets the timer between frames streamed when frequency is set to 0
* @param time_in_ms timer between frames streamed
*/
virtual void setFrameToGuiTimer(const uint32_t time_in_ms) = 0;
/**
* Set the data stream enable
* @param enable data stream enable
* @return OK or FAIL
*/
virtual int setDataStreamEnable(const bool enable) = 0;
/**
* Set Acquisition Period
* @param i acquisition period
* @return OK or FAIL
*/
virtual int setAcquisitionPeriod(const uint64_t i) = 0;
/**
* Set Acquisition Time
* @param i acquisition time
* @return OK or FAIL
*/
virtual int setAcquisitionTime(const uint64_t i) = 0;
/**
* Set Sub Exposure Time
* @param i Sub Exposure Time
* @return OK or FAIL
*/
virtual void setSubExpTime(const uint64_t i) = 0;
/**
* Set Number of Frames expected by receiver from detector
* The data receiver status will change from running to idle when it gets this number of frames FIXME: (Not implemented)
* @param i number of frames expected
* @return OK or FAIL
*/
virtual int setNumberOfFrames(const uint64_t i) = 0;
/**
* Set Dynamic Range or Number of Bits Per Pixel
* @param i dynamic range that is 4, 8, 16 or 32
* @return OK or FAIL
*/
virtual int setDynamicRange(const uint32_t i) = 0;
/**
* Set Ten Giga Enable
* @param b true if 10Giga enabled, else false (1G enabled)
* @return OK or FAIL
*/
virtual int setTenGigaEnable(const bool b) = 0;
/**
* Set Fifo Depth
* @param i fifo depth value
* @return OK or FAIL
*/
virtual int setFifoDepth(const uint32_t i) = 0;
//***receiver parameters***
/**
* Set Silent Mode
* @param i silent mode. 1 sets, 0 unsets
*/
virtual void setSilentMode(const uint32_t i) = 0;
/*************************************************************************
* Behavioral functions***************************************************
* They may modify the status of the receiver ****************************
*************************************************************************/
//***initial functions***
/**
* Set receiver type (and corresponding detector variables in derived STANDARD class)
* It is the first function called by the client when connecting to receiver
* @param d detector type
* @return OK or FAIL
*/
virtual int setDetectorType(const slsReceiverDefs::detectorType d) = 0;
/**
* Set detector position id
* @param i position id
*/
virtual void setDetectorPositionId(const int i) = 0;
/**
* Sets detector hostname
* It is second function called by the client when connecting to receiver.
* you can call this function only once.
* @param c detector hostname
*/
virtual void initialize(const char *c) = 0;
//***acquisition functions***
/**
* Reset acquisition parameters such as total frames caught for an entire acquisition (including all scans)
*/
virtual void resetAcquisitionCount() = 0;
/**
* Start Listening for Packets by activating all configuration settings to receiver
* @param c error message if FAIL
* @return OK or FAIL
*/
virtual int startReceiver(char *c=NULL) = 0;
/**
* Stop Listening for Packets
* Calls startReadout(), which stops listening and sets status to Transmitting
* When it has read every frame in buffer,it returns with the status Run_Finished
*/
virtual void stopReceiver() = 0;
/**
* Stop Listening to Packets
* and sets status to Transmitting
*/
virtual void startReadout() = 0;
/**
* Shuts down and deletes UDP Sockets
*/
virtual void shutDownUDPSockets() = 0;
/**
* Get the buffer-current frame read by receiver
* @param ithread port thread index
* @param c pointer to current file name
* @param raw address of pointer, pointing to current frame to send to gui
* @param startAcq start index of the acquisition
* @param startFrame start index of the scan
*/
virtual void readFrame(int ithread, char* c,char** raw, int64_t &startAcq, int64_t &startFrame)=0;
/**
* abort acquisition with minimum damage: close open files, cleanup.
* does nothing if state already is 'idle'
*/
virtual void abort() = 0; //FIXME: needed, isnt stopReceiver enough?
/**
* Activate / Deactivate Receiver
* If deactivated, receiver will write dummy packets 0xFF
* (as it will receive nothing from detector)
*/
virtual int setActivate(int enable = -1) = 0;
/**
* Set streaming port
* @param i streaming port
*/
virtual void setStreamingPort(const uint32_t i) = 0;
/**
* Restream stop dummy packet from receiver
* @return OK or FAIL
*/
virtual int restreamStop() = 0;
//***callback functions***
/**
* Call back for start acquisition
* callback arguments are
* filepath
* filename
* fileindex
* datasize
*
* return value is insignificant at the moment
* we write depending on file write enable
* users get data to write depending on call backs registered
*/
virtual void registerCallBackStartAcquisition(int (*func)(char*, char*, uint64_t, uint32_t, void*),void *arg) = 0;
/**
* Call back for acquisition finished
* callback argument is
* total frames caught
*/
virtual void registerCallBackAcquisitionFinished(void (*func)(uint64_t, void*),void *arg) = 0;
/**
* Call back for raw data
* args to raw data ready callback are
* frameNumber is the frame number
* expLength is the subframe number (32 bit eiger) or real time exposure time in 100ns (others)
* packetNumber is the packet number
* bunchId is the bunch id from beamline
* timestamp is the time stamp with 10 MHz clock
* modId is the unique module id (unique even for left, right, top, bottom)
* xCoord is the x coordinate in the complete detector system
* yCoord is the y coordinate in the complete detector system
* zCoord is the z coordinate in the complete detector system
* debug is for debugging purposes
* roundRNumber is the round robin set number
* detType is the detector type see :: detectorType
* version is the version number of this structure format
* dataPointer is the pointer to the data
* dataSize in bytes is the size of the data in bytes
*/
virtual void registerCallBackRawDataReady(void (*func)(uint64_t, uint32_t, uint32_t, uint64_t, uint64_t, uint16_t, uint16_t, uint16_t, uint16_t, uint32_t, uint16_t, uint8_t, uint8_t,
char*, uint32_t, void*),void *arg) = 0;
protected:
private:
};

View File

@ -0,0 +1,66 @@
#define RED "\x1b[31m"
#define GREEN "\x1b[32m"
#define YELLOW "\x1b[33m"
#define BLUE "\x1b[34m"
#define MAGENTA "\x1b[35m"
#define CYAN "\x1b[36m"
#define GRAY "\x1b[37m"
#define DARKGRAY "\x1b[30m"
#define BG_BLACK "\x1b[48;5;232m"
#define BG_RED "\x1b[41m"
#define BG_GREEN "\x1b[42m"
#define BG_YELLOW "\x1b[43m"
#define BG_BLUE "\x1b[44m"
#define BG_MAGENTA "\x1b[45m"
#define BG_CYAN "\x1b[46m"
#define RESET "\x1b[0m"
#define BOLD "\x1b[1m"
//on background black
#define bprintf(code, format, ...) printf(code BG_BLACK format RESET, ##__VA_ARGS__)
//normal printout
#define cprintf(code, format, ...) printf(code format RESET, ##__VA_ARGS__)
/*
Code examples
example 1 (a snippet):
#ifdef MARTIN
cprintf(BLUE, "LL Write - Len: %2d - If: %X - Data: ",buffer_len, ll->ll_fifo_base);
for (i=0; i < buffer_len/4; i++)
cprintf(BLUE, "%.8X ",*(((unsigned *) buffer)+i));
printf("\n");
#endif
#ifdef MARTIN
cprintf(CYAN, "LL Read - If: %X - Data: ",ll->ll_fifo_base);
#endif
example 2:
int main()
{
int i=1;
printf("Normal %i\n", i);
cprintf(RED, "Red\n");
cprintf(GREEN, "Green\n");
cprintf(YELLOW, "Yellow\n");
cprintf(BLUE, "Blue\n");
cprintf(MAGENTA, "Mangenta %i\n", i);
cprintf(CYAN, "Cyan %i\n", i);
cprintf(BOLD, "White %i\n", i);
cprintf(RED BOLD, "Red %i\n", i);
cprintf(GREEN BOLD, "Green\n");
cprintf(YELLOW BOLD, "Yellow\n");
cprintf(BLUE BOLD, "Blue\n");
cprintf(MAGENTA BOLD, "Mangenta %i\n", i);
cprintf(CYAN BOLD, "Cyan %i\n", i);
}
*/

View File

@ -0,0 +1,79 @@
/* A simple server in the internet domain using TCP
The port number is passed as an argument */
#include "sls_receiver_defs.h"
#include "dummyUDPInterface.h"
#include "slsReceiverTCPIPInterface.h"
#include "ansi.h"
#include <iostream>
#include <string.h>
#include <signal.h> //SIGINT
#include <cstdlib> //system
#include <sys/types.h> //wait
#include <sys/wait.h> //wait
#include <syscall.h>
using namespace std;
bool keeprunning;
void sigInterruptHandler(int p){
keeprunning = false;
}
int main(int argc, char *argv[]) {
keeprunning = true;
bprintf(BLUE,"Created [ Tid: %ld ]\n", (long)syscall(SYS_gettid));
// Catch signal SIGINT to close files and call destructors properly
struct sigaction sa;
sa.sa_flags=0; // no flags
sa.sa_handler=sigInterruptHandler; // handler function
sigemptyset(&sa.sa_mask); // dont block additional signals during invocation of handler
if (sigaction(SIGINT, &sa, NULL) == -1) {
bprintf(RED, "Could not set handler function for SIGINT\n");
}
// if socket crash, ignores SISPIPE, prevents global signal handler
// subsequent read/write to socket gives error - must handle locally
struct sigaction asa;
asa.sa_flags=0; // no flags
asa.sa_handler=SIG_IGN; // handler function
sigemptyset(&asa.sa_mask); // dont block additional signals during invocation of handler
if (sigaction(SIGPIPE, &asa, NULL) == -1) {
bprintf(RED, "Could not set handler function for SIGCHILD\n");
}
int ret = slsReceiverDefs::OK;
int tcpip_port_no = 1954;
dummyUDPInterface *udp_interface = new dummyUDPInterface();
slsReceiverTCPIPInterface *tcpipInterface = new slsReceiverTCPIPInterface(ret, udp_interface, tcpip_port_no);
if(ret==slsReceiverDefs::FAIL){
delete tcpipInterface;
bprintf(BLUE,"Exiting [ Tid: %ld ]\n", (long)syscall(SYS_gettid));
exit(EXIT_FAILURE);
}
//start tcp server thread
if (tcpipInterface->start() == slsReceiverDefs::FAIL){
delete tcpipInterface;
bprintf(BLUE,"Exiting [ Tid: %ld ]\n", (long)syscall(SYS_gettid));
exit(EXIT_FAILURE);
}
FILE_LOG(logINFO) << "Ready ... ";
bprintf(GRAY, "\n[ Press \'Ctrl+c\' to exit ]\n");
while(keeprunning)
usleep(5 * 1000 * 1000);
delete tcpipInterface;
bprintf(BLUE,"Exiting [ Tid: %ld ]\n", (long)syscall(SYS_gettid));
FILE_LOG(logINFO) << "Goodbye!";
return 0;
}

Binary file not shown.

View File

@ -0,0 +1,36 @@
#ifndef DUMMYUDPINTERFACE_H
#define DUMMYUDPINTERFACE_H
/***********************************************
* @file UDPInterface.h
* @short Base class with all the functions for the UDP inteface of the receiver
***********************************************/
/**
* \mainpage Base class with all the functions for the UDP inteface of the receiver
*/
/**
* @short Base class with all the functions for the UDP inteface of the receiver
*/
#include "UDPBaseImplementation.h"
class dummyUDPInterface : public virtual slsReceiverDefs, public UDPBaseImplementation {
public:
/** cosntructor & destructor */
dummyUDPInterface() { cout << "New dummy UDP Interface" << endl;};
~dummyUDPInterface() {cout << "Destroying dummy UDP Interface" << endl;};
protected:
private:
};
#endif /* #ifndef DUMMYUDPINTERFACE_H */

View File

@ -0,0 +1,419 @@
#ifndef DUMMYUDPINTERFACE_H
#define DUMMYUDPINTERFACE_H
/***********************************************
* @file UDPInterface.h
* @short Base class with all the functions for the UDP inteface of the receiver
***********************************************/
/**
* \mainpage Base class with all the functions for the UDP inteface of the receiver
*/
/**
* @short Base class with all the functions for the UDP inteface of the receiver
*/
#include "UDPInterface.h"
#include "sls_receiver_defs.h"
class dummyUDPInterface : public UDPInterface {
/* abstract class that defines the UDP interface of an sls detector data receiver.
*
* Use the factory method UDPInterface::create() to get an instance:
*
* UDPInterface *udp_interface = UDPInterface::create()
*
* supported sequence of method-calls:
*
* initialize() : once and only once after create()
*
* get*() : anytime after initialize(), multiples times
* set*() : anytime after initialize(), multiple times
*
* startReceiver(): anytime after initialize(). Will fail if state already is 'running'
*
* abort(),
* stopReceiver() : anytime after initialize(). Will do nothing if state already is idle.
*
* getStatus() returns the actual state of the data receiver - running or idle. All other
* get*() and set*() methods access the local cache of configuration values only and *do not* modify the data receiver settings.
*
* Only startReceiver() does change the data receiver configuration, it does pass the whole configuration cache to the data receiver.
*
* get- and set-methods that return a char array (char *) allocate a new array at each call. The caller is responsible to free the allocated space:
*
* char *c = receiver->getFileName();
* ....
* delete[] c;
*
* always: 1:YES 0:NO for int as bool-like arguments
*
*/
public:
/**
* Destructor
*/
dummyUDPInterface() : UDPInterface(), dynamicRange(16), scanTag(1000), nFrames(100), fWrite(1), fOverwrite(1), fIndex(0), fCaught(0), totfCaught(0), startAcqIndex(0), startFrameIndex(0), acqIndex(0), dataCompression(false), period(0), type(slsReceiverDefs::GENERIC), framesNeeded(100), udpPort1(1900), udpPort2(1901), shortFrame(0), nFramesToGui(0), e10G(0) {strcpy(detHostname,"none"); strcpy(fName,"run"); strcpy(fPath,"/scratch/"); strcpy(eth,"eth0"); cout << "New dummy UDP Interface" << endl;};
~dummyUDPInterface() {cout << "Destroying dummy UDP Interface" << endl;};
void del(){cout << "Destroying dummy UDP Interface" << endl;};
virtual void configure(map<string, string> config_map) {};
/**
* Initialize the Receiver
@param detectorHostName detector hostname
* you can call this function only once. You must call it before you call startReceiver() for the first time.
*/
virtual void initialize(const char *detectorHostName){ cout << "set detector hostname to" << detHostname << endl; strcpy(detHostname,detectorHostName);};
/* Returns detector hostname
/returns hostname
* caller needs to deallocate the returned char array.
* if uninitialized, it must return NULL
*/
virtual char *getDetectorHostname() const { cout << "get detector hostname " << detHostname << endl; return (char*) detHostname;};
/**
* Returns status of receiver: idle, running or error
*/
virtual slsReceiverDefs::runStatus getStatus() const { cout << "get dsummy status IDLE " << endl; return slsReceiverDefs::IDLE;};;
/**
* Returns File Name
* caller is responsible to deallocate the returned char array.
*/
virtual char *getFileName() const { cout << "get file name " << fName << endl; return (char*) fName;};
/**
* Returns File Path
* caller is responsible to deallocate the returned char array
*/
virtual char *getFilePath() const { cout << "get file path " << fPath << endl; return (char*) fPath;};;
/**
* Returns the number of bits per pixel
*/
virtual int getDynamicRange() const { cout << "get dynamic range " << dynamicRange << endl; return dynamicRange;};;
/**
* Returns scan tag
*/
virtual int getScanTag() const { cout << "get scan tag " << scanTag << endl; return scanTag;};
/*
* Returns number of frames to receive
* This is the number of frames to expect to receiver from the detector.
* The data receiver will change from running to idle when it got this number of frames
*/
virtual int getNumberOfFrames() const { cout << "get number of frames " << nFrames << endl; return nFrames;};
/**
* Returns file write enable
* 1: YES 0: NO
*/
virtual int getEnableFileWrite() const { cout << "get enable file write " << fWrite << endl; return fWrite;};
/**
* Returns file over write enable
* 1: YES 0: NO
*/
virtual int getEnableOverwrite() const { cout << "get enable file overwrite " << fOverwrite << endl; return fOverwrite;};
/**
* Set File Name (without frame index, file index and extension)
@param c file name
/returns file name
* returns NULL on failure (like bad file name)
* does not check the existence of the file - we don't know which path we'll finally use, so no point to check.
* caller is responsible to deallocate the returned char array.
*/
virtual char* setFileName(const char c[]) { strcpy(fName,c); cout << "set file name " << fName << endl; return fName; };
/**
* Set File Path
@param c file path
/returns file path
* checks the existence of the directory. returns NULL if directory does not exist or is not readable.
* caller is responsible to deallocate the returned char array.
*/
virtual char* setFilePath(const char c[]) { strcpy(fPath,c); cout << "set file path " << fPath << endl; return fPath; };
/**
* Returns the number of bits per pixel
@param dr sets dynamic range
/returns dynamic range
* returns -1 on failure
* FIXME: what are the allowd values - should we use an enum as argument?
*/
virtual int setDynamicRange(const int dr) {dynamicRange=dr; cout << "set dynamic range " << dynamicRange << endl; return dynamicRange; };
/**
* Set scan tag
@param tag scan tag
/returns scan tag (always non-negative)
* FIXME: valid range - only positive? 16bit ore 32bit?
* returns -1 on failure
*/
virtual int setScanTag(const int tag) {scanTag=tag; cout << "set scan tag " << scanTag << endl; return scanTag; };
/**
* Sets number of frames
@param fnum number of frames
/returns number of frames
*/
virtual int setNumberOfFrames(const int fnum) {nFrames=fnum; cout << "set number of frames " << nFrames << endl; return nFrames; };
/**
* Set enable file write
* @param i file write enable
/returns file write enable
*/
virtual int setEnableFileWrite(const int i) {fWrite=i; cout << "set enable file write " << fWrite << endl; return fWrite; };
/**
* Set enable file overwrite
* @param i file overwrite enable
/returns file overwrite enable
*/
virtual int setEnableOverwrite(const int i) {fOverwrite=i; cout << "set enable file overwrite " << fOverwrite << endl; return fOverwrite; };
/**
* Starts Receiver - activate all configuration settings to the eiger receiver and start to listen for packets
@param message is the error message if there is an error
/returns 0 on success or -1 on failure
*/
//FIXME: success == 0 or success == 1?
virtual int startReceiver(char *message=NULL) {cout << "dummy start receiver" << endl; return 0;};
/**
* Stops Receiver - stops listening for packets
/returns success
* same as abort(). Always returns 0.
*/
virtual int stopReceiver() {cout << "dummy stop receiver" << endl; return 0;};
/**
* abort acquisition with minimum damage: close open files, cleanup.
* does nothing if state already is 'idle'
*/
virtual void abort() {cout << "Aborting receiver" << endl; };
/*******************************************************************************************************************
**************************************** Added by Dhanya *********************************************************
*******************************************************************************************************************/
/**
* Returns File Index
*/
virtual int getFileIndex() {cout << "get file index " << fIndex << endl; return fIndex;};
/**
* Returns Total Frames Caught for an entire acquisition (including all scans)
*/
virtual int getTotalFramesCaught() {cout << "get total frames caught " << totfCaught << endl ; return totfCaught;};
/**
* Returns Frames Caught for each real time acquisition (eg. for each scan)
*/
virtual int getFramesCaught() {cout << "get frames caught " << fCaught << endl; return fCaught;};
/**
* Returns the frame index at start of entire acquisition (including all scans)
*/
virtual uint32_t getStartAcquisitionIndex(){ cout << "get start acquisition index " << startAcqIndex << endl; return startAcqIndex; };
/**
* Returns current Frame Index Caught for an entire acquisition (including all scans)
*/
virtual uint32_t getAcquisitionIndex(){ cout << "get acquisition index " << acqIndex << endl; return acqIndex; };
/**
* Returns the frame index at start of each real time acquisition (eg. for each scan)
*/
virtual uint32_t getStartFrameIndex() { cout << "get start frame index " << startFrameIndex << endl; return startFrameIndex; };
/** get data compression, by saving only hits
*/
virtual bool getDataCompression() { cout << "get data compression " << dataCompression << endl; return dataCompression;};
/**
* Set receiver type
* @param det detector type
* Returns success or FAIL
*/
virtual int setDetectorType(slsReceiverDefs::detectorType det) {type=det; cout << "set detector type " << det << endl; return slsReceiverDefs::OK;};
/**
* Set File Index
* @param i file index
*/
virtual int setFileIndex(int i) {fIndex=i; cout << "get file index " << fIndex << endl; return fIndex;};
/** set acquisition period if a positive number
*/
virtual int64_t setAcquisitionPeriod(int64_t index) {if (index>=0) {period=index; cout << "set period " << period << endl;} else { cout << "get period " << period << endl;} return period;};
/**
* Set Frame Index Needed
* @param i frame index needed
*/
virtual int setFrameIndexNeeded(int i) {framesNeeded=i; cout << "set frame index needed " << period << endl; return framesNeeded;};
/**
* Set UDP Port Number
*/
virtual void setUDPPortNo(int p){udpPort1=p; cout << "set UDP port 1 " << udpPort1 << endl; };
/**
* Set UDP Port Number
*/
virtual void setUDPPortNo2(int p) {udpPort2=p; cout << "set UDP port 2 " << udpPort2 << endl; };
/**
* Set Ethernet Interface or IP to listen to
*/
virtual void setEthernetInterface(char* c){strcpy(eth,c); cout << "set eth " << c;};
/**
* Set short frame
* @param i if shortframe i=1
*/
virtual int setShortFrame(int i){shortFrame=i; cout << " set short frame" << shortFrame << endl; return shortFrame;};
/**
* Set the variable to send every nth frame to gui
* or if 0,send frame only upon gui request
*/
virtual int setNFrameToGui(int i) {nFramesToGui=i; cout << "set nframes to gui " << nFramesToGui << endl; return nFramesToGui;};
/**
* Resets the Total Frames Caught
* This is how the receiver differentiates between entire acquisitions
* Returns 0
*/
virtual void resetTotalFramesCaught() {totfCaught=0; cout << "total frames caugh reset " << totfCaught << endl;};
/** enabl data compression, by saving only hits
/returns if failed
*/
virtual int enableDataCompression(bool enable) {dataCompression=enable; cout << "set data compression " << dataCompression<< endl; return dataCompression;};
/**
* enable 10Gbe
@param enable 1 for 10Gbe or 0 for 1 Gbe, -1 to read out
\returns enable for 10Gbe
*/
virtual int enableTenGiga(int enable = -1) {if (enable>=0) {e10G=enable; cout << "set 10Gb "<< e10G << endl;} else cout << "get 10Gb "<< e10G << endl; return e10G;};
/**
* Returns the buffer-current frame read by receiver
* @param c pointer to current file name
* @param raw address of pointer, pointing to current frame to send to gui
* @param fnum frame number for eiger as it is not in the packet
* @param startAcquisitionIndex is the start index of the acquisition
* @param startFrameIndex is the start index of the scan
*/
virtual void readFrame(char* c,char** raw, uint32_t &fnum, uint32_t &startAcquisitionIndex, uint32_t &startFrameIndex){cout << "dummy read frame" << endl; };
/** set status to transmitting and
* when fifo is empty later, sets status to run_finished
*/
virtual void startReadout(){cout << "dummy start readout" << endl; };
/**
* shuts down the udp sockets
* \returns if success or fail
*/
virtual int shutDownUDPSockets(){cout << "dummy shut down udp sockets" << endl; return slsReceiverDefs::OK;};
/**
* Closes all files
* @param ithr thread index, -1 for all threads
*/
virtual void closeFile(int ithr = -1){cout << "dummy close file" << ithr << endl; };
/**
* Call back for start acquisition
callback arguments are
filepath
filename
fileindex
datasize
return value is
0 callback takes care of open,close,wrie file
1 callback writes file, we have to open, close it
2 we open, close, write file, callback does not do anything
*/
virtual void registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg){cout << "dummy register callback start acquisition" << endl; };
/**
* Call back for acquisition finished
callback argument is
total frames caught
*/
virtual void registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg){cout << "dummy register callback acquisition finished" << endl; };
/**
* Call back for raw data
args to raw data ready callback are
framenum
datapointer
datasize in bytes
file descriptor
guidatapointer (NULL, no data required)
*/
virtual void registerCallBackRawDataReady(void (*func)(int, char*, int, FILE*, char*, void*),void *arg){cout << "dummy register callback get raw data" << endl; };
protected:
private:
char detHostname[1000];
char fName[10000];
char fPath[10000];
int dynamicRange;
int scanTag;
int nFrames;
int fWrite;
int fOverwrite;
int fIndex;
int fCaught;
int totfCaught;
int startAcqIndex;
int startFrameIndex;
int acqIndex;
bool dataCompression;
int64_t period;
slsReceiverDefs::detectorType type;
int framesNeeded;
int udpPort1;
int udpPort2;
char eth[1000];
int shortFrame;
int nFramesToGui;
int e10G;
};
#endif /* #ifndef DUMMYUDPINTERFACE_H */

View File

@ -0,0 +1,779 @@
#pragma once
/**
*
* @libdoc genericSocket provides some functions to open/close sockets both TCP and UDP
*
* @short some functions to open/close sockets both TCP and UDP
* @author Anna Bergamaschi
* @version 0.0
*/
//version 1.0, base development, Ian 19/01/09
/* Modified by anna on 19.01.2009 */
/*
canceled SetupParameters() and varaibles intialized in the constructors' headers;
defined SEND_REC_MAX_SIZE (for compatibilty with mythen (and possibly other) pure C servers (i would move it to the common header file)
added #ifndef C_ONLY... to cutout class definition when including in pure C servers (can be removed if SEND_REC_MAX_SIZE is moved to the common header file)
defined private variables char hostname[1000] and int portno to store connection informations;
defined public functions int getHostname(char *name) and int getPortNumber() to retrieve connection informations
added public function int getErrorStatus() returning 1 if socketDescriptor<0
remove exits in the constructors and replace them with socketDescriptor=-1
replaced the argument of send/receive data with void (to avoid too much casting or compiler errors/warnings)
added a function which really does not close the socket between send/receive (senddataonly, receivedataonly)
*/
#include "ansi.h"
#ifdef __CINT__
//class sockaddr_in;
class socklen_t;
class uint32_t;
class uint32_t_ss;
// CINT view of types:
class sockaddr_in;
// {
// unsigned short int sa_family;
// unsigned char sa_data[14];
// };
#else
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <ifaddrs.h>
#endif
#include <stdlib.h> /******exit */
#include <unistd.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
#define DEFAULT_PACKET_SIZE 1286
/*#define SOCKET_BUFFER_SIZE (100*1024*1024) //100MB*/
#define SOCKET_BUFFER_SIZE (2000*1024*1024) //100MB
#define DEFAULT_BACKLOG 5
class genericSocket{
public:
/**
Communication protocol
*/
enum communicationProtocol{
TCP, /**< TCP/IP */
UDP /**< UDP */
};
genericSocket(const char* const host_ip_or_name, unsigned short int const port_number, communicationProtocol p, int ps = DEFAULT_PACKET_SIZE) :
portno(port_number),
protocol(p),
is_a_server(0),
socketDescriptor(-1),
file_des(-1),
packet_size(ps),
nsending(0),
nsent(0),
total_sent(0),// sender (client): where to? ip
header_packet_size(0)
{
memset(&serverAddress, 0, sizeof(serverAddress));
memset(&clientAddress, 0, sizeof(clientAddress));
memset(lastClientIP,0,INET_ADDRSTRLEN);
memset(thisClientIP,0,INET_ADDRSTRLEN);
memset(dummyClientIP,0,INET_ADDRSTRLEN);
differentClients = 0;
struct addrinfo *result;
if (!ConvertHostnameToInternetAddress(host_ip_or_name, &result)) {
serverAddress.sin_family = result->ai_family;
memcpy((char *) &serverAddress.sin_addr.s_addr, &((struct sockaddr_in *) result->ai_addr)->sin_addr, sizeof(in_addr_t));
freeaddrinfo(result);
serverAddress.sin_port = htons(port_number);
socketDescriptor=0;
}
clientAddress_length=sizeof(clientAddress);
}
int getProtocol(communicationProtocol p) {
switch (p) {
case TCP:
return SOCK_STREAM;
break;
case UDP:
return SOCK_DGRAM;
default:
cerr << "unknown protocol " << p << endl;
return -1;
}
}
int getProtocol() {return getProtocol(protocol);};
/**
The constructor for a server
@short the contructor for a server
\param port_number port number to listen to
\param p TCP or UDP
\param eth interface name or IP address to listen to (if NULL, listen to all interfaces)
*/
genericSocket(unsigned short int const port_number, communicationProtocol p, int ps = DEFAULT_PACKET_SIZE, const char *eth=NULL, int hsize=0):
portno(port_number),
protocol(p),
is_a_server(1),
socketDescriptor(-1),
file_des(-1),
packet_size(ps),
nsending(0),
nsent(0),
total_sent(0),
header_packet_size(hsize)
{
memset(&serverAddress, 0, sizeof(serverAddress));
memset(&clientAddress, 0, sizeof(clientAddress));
/* // you can specify an IP address: */
/* // or you can let it automatically select one: */
/* myaddr.sin_addr.s_addr = INADDR_ANY; */
memset(lastClientIP,0,INET_ADDRSTRLEN);
memset(thisClientIP,0,INET_ADDRSTRLEN);
memset(dummyClientIP,0,INET_ADDRSTRLEN);
differentClients = 0;
if(serverAddress.sin_port == htons(port_number)){
socketDescriptor = -10;
return;
}
char ip[20];
strcpy(ip,"0.0.0.0");
clientAddress_length=sizeof(clientAddress);
if (eth) {
strcpy(ip,nameToIp(string(eth)).c_str());
if (string(ip)==string("0.0.0.0"))
strcpy(ip,eth);
}
// strcpy(hostname,"localhost"); //needed?!?!?!?
socketDescriptor = socket(AF_INET, getProtocol(),0); //tcp
if (socketDescriptor < 0) {
cerr << "Can not create socket "<<endl;
return;
}
// Set some fields in the serverAddress structure.
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(port_number);
serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);
if (string(ip)!=string("0.0.0.0")) {
if (inet_pton(AF_INET, ip, &(serverAddress.sin_addr)));
else
serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);
}
// reuse port
int val=1;
if (setsockopt(socketDescriptor,SOL_SOCKET,SO_REUSEADDR,&val,sizeof(int)) == -1) {
cerr << "setsockopt" << endl;
socketDescriptor=-1;
return;
}
//increase buffer size if its udp
val = SOCKET_BUFFER_SIZE;
if((p == UDP) && (setsockopt(socketDescriptor, SOL_SOCKET, SO_RCVBUF, &val, sizeof(int)) == -1))
{
cerr << "WARNING:Could not set socket receive buffer size" << endl;
//socketDescriptor=-1;
//return;
}
if(bind(socketDescriptor,(struct sockaddr *) &serverAddress,sizeof(serverAddress))<0){
cerr << "Can not bind socket "<< endl;
socketDescriptor=-1;
return;
}
if (getProtocol()==SOCK_STREAM)
listen(socketDescriptor, DEFAULT_BACKLOG);
}
/**
The destructor: disconnects and close the socket
@short the destructor
*/
~genericSocket(){ \
Disconnect();
if (socketDescriptor >= 0){ \
close(socketDescriptor); \
} \
if(is_a_server and getProtocol() == TCP){\
if(file_des>0)\
close(file_des);\
}
file_des=-1; \
serverAddress.sin_port=-1; \
};
/* /\** @short if client returns hostname for connection */
/* \param name string to write the hostname to */
/* \returns 0 if client, 1 if server (in this case ignore name return value) */
/* *\/ */
/* int getHostname(char *name){ */
/* if (is_a_server==0) { */
/* strcpy(name,getHostname().c_str()); */
/* } */
/* return is_a_server; */
/* }; */
/* /\** @short if client returns hostname for connection */
/* \returns hostname */
/* *\/ */
/* string getHostname(){return string(hostname);}; */
/* /\** @short returns port number for connection */
/* \returns port number */
/* *\/ */
/* int getPortNumber(){return portno;}; */
/** @short returns communication protocol
\returns TCP or UDP
*/
int getCommunicationProtocol(){return protocol;};
/** @short returns error status
\returns 1 if error
*/
int getErrorStatus(){if (socketDescriptor==-10) return -10; else if (socketDescriptor<0) return 1; else return 0;};
/** @short etablishes connection; disconnect should always follow
\returns 1 if error
*/
int Connect(){
if(file_des>0) return file_des;
if (protocol==UDP) return -1;
if(is_a_server && protocol==TCP){ //server tcp; the server will wait for the clients connection
if (socketDescriptor>0) {
if ((file_des = accept(socketDescriptor,(struct sockaddr *) &clientAddress, &clientAddress_length)) < 0) {
cerr << "Error: with server accept, connection refused"<<endl;
switch(errno) {
case EWOULDBLOCK:
printf("ewouldblock eagain\n");
break;
case EBADF:
printf("ebadf\n");
break;
case ECONNABORTED:
printf("econnaborted\n");
break;
case EFAULT:
printf("efault\n");
break;
case EINTR:
printf("eintr\n");
break;
case EINVAL:
printf("einval\n");
break;
case EMFILE:
printf("emfile\n");
break;
case ENFILE:
printf("enfile\n");
break;
case ENOTSOCK:
printf("enotsock\n");
break;
case EOPNOTSUPP:
printf("eOPNOTSUPP\n");
break;
case ENOBUFS:
printf("ENOBUFS\n");
break;
case ENOMEM:
printf("ENOMEM\n");
break;
case ENOSR:
printf("ENOSR\n");
break;
case EPROTO:
printf("EPROTO\n");
break;
default:
printf("unknown error\n");
}
socketDescriptor=-1;
}
else{
inet_ntop(AF_INET, &(clientAddress.sin_addr), dummyClientIP, INET_ADDRSTRLEN);
#ifdef VERY_VERBOSE
cout << "client connected "<< file_des << endl;
#endif
}
}
// file_des = socketDescriptor;
#ifdef VERY_VERBOSE
cout << "fd " << file_des << endl;
#endif
} else {
if (socketDescriptor<=0)
socketDescriptor = socket(AF_INET, getProtocol(),0);
// SetTimeOut(10);
if (socketDescriptor < 0){
cerr << "Can not create socket "<<endl;
file_des = socketDescriptor;
} else {
if(connect(socketDescriptor,(struct sockaddr *) &serverAddress,sizeof(serverAddress))<0){
cerr << "Can not connect to socket "<<endl;
file_des = -1;
} else{
file_des = socketDescriptor;
}
}
}
return file_des;
}
uint16_t getPortNumber(){
return ntohs(serverAddress.sin_port);
}
int getFileDes(){return file_des;};
int getsocketDescriptor(){return socketDescriptor;};
void exitServer(){
if(is_a_server){
if (socketDescriptor>=0){
close(socketDescriptor);
socketDescriptor = -1;
}
}
}
/** @short free connection */
void Disconnect(){
if (protocol==UDP){
close(socketDescriptor);
socketDescriptor=-1;
}
else{
if(file_des>=0){ //then was open
if(is_a_server){
close(file_des);
}
else {
//while(!shutdown(socketDescriptor, SHUT_RDWR));
close(socketDescriptor);
socketDescriptor=-1;
}
file_des=-1;
}
}
};
void ShutDownSocket(){
while(!shutdown(socketDescriptor, SHUT_RDWR));
Disconnect();
};
/** Set the socket timeout ts is in seconds */
int SetTimeOut(int ts){
if (ts<=0)
return -1;
struct timeval tout;
tout.tv_sec = 0;
tout.tv_usec = 0;
if(::setsockopt(socketDescriptor, SOL_SOCKET, SO_RCVTIMEO, &tout, sizeof(struct timeval)) <0)
{
cerr << "Error in setsockopt SO_RCVTIMEO "<< 0 << endl;
}
tout.tv_sec = ts;
tout.tv_usec = 0;
if(::setsockopt(socketDescriptor, SOL_SOCKET, SO_SNDTIMEO, &tout, sizeof(struct timeval)) < 0)
{
cerr << "Error in setsockopt SO_SNDTIMEO " << ts << endl;
}
return 0;
};
int setPacketSize(int i=-1) { if (i>=0) packet_size=i;return packet_size;};
static string ipToName(string ip) {
struct ifaddrs *addrs, *iap;
struct sockaddr_in *sa;
char buf[32];
const int buf_len = sizeof(buf);
memset(buf,0,buf_len);
strcpy(buf,"none");
getifaddrs(&addrs);
for (iap = addrs; iap != NULL; iap = iap->ifa_next) {
if (iap->ifa_addr && (iap->ifa_flags & IFF_UP) && iap->ifa_addr->sa_family == AF_INET) {
sa = (struct sockaddr_in *)(iap->ifa_addr);
inet_ntop(iap->ifa_addr->sa_family, (void *)&(sa->sin_addr), buf, buf_len);
if (ip==string(buf)) {
//printf("%s\n", iap->ifa_name);
strcpy(buf,iap->ifa_name);
break;
}
}
}
freeifaddrs(addrs);
return string(buf);
};
static string nameToMac(string inf) {
struct ifreq ifr;
int sock, j, k;
char mac[32];
const int mac_len = sizeof(mac);
memset(mac,0,mac_len);
sock=getSock(inf,&ifr);
if (-1==ioctl(sock, SIOCGIFHWADDR, &ifr)) {
perror("ioctl(SIOCGIFHWADDR) ");
return string("00:00:00:00:00:00");
}
for (j=0, k=0; j<6; j++) {
k+=snprintf(mac+k, mac_len-k-1, j ? ":%02X" : "%02X",
(int)(unsigned int)(unsigned char)ifr.ifr_hwaddr.sa_data[j]);
}
mac[mac_len-1]='\0';
if(sock!=1){
close(sock);
}
return string(mac);
};
static string nameToIp(string inf){
struct ifreq ifr;
int sock;
char *p, addr[32];
const int addr_len = sizeof(addr);
memset(addr,0,addr_len);
sock=getSock(inf,&ifr);
if (-1==ioctl(sock, SIOCGIFADDR, &ifr)) {
perror("ioctl(SIOCGIFADDR) ");
return string("0.0.0.0");
}
p=inet_ntoa(((struct sockaddr_in *)(&ifr.ifr_addr))->sin_addr);
strncpy(addr,p,addr_len-1);
addr[addr_len-1]='\0';
if(sock!=1){
close(sock);
}
return string(addr);
};
static int getSock(string inf, struct ifreq *ifr) {
int sock;
sock=socket(PF_INET, SOCK_STREAM, 0);
if (-1==sock) {
perror("socket() ");
return 1;
}
strncpy(ifr->ifr_name,inf.c_str(),sizeof(ifr->ifr_name)-1);
ifr->ifr_name[sizeof(ifr->ifr_name)-1]='\0';
return sock;
};
/**
* Convert Hostname to Internet address info structure
* One must use freeaddrinfo(res) after using it
* @param hostname hostname
* @param res address of pointer to address info structure
* @return 1 for fail, 0 for success
*/
// Do not make this static (for multi threading environment)
int ConvertHostnameToInternetAddress (const char* const hostname, struct addrinfo **res) {
// criteria in selecting socket address structures returned by res
struct addrinfo hints;
memset (&hints, 0, sizeof (hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
// get host info into res
int errcode = getaddrinfo (hostname, NULL, &hints, res);
if (errcode != 0) {
cprintf (RED,"Error: Could not convert %s hostname to internet address (zmq):"
"%s\n", hostname, gai_strerror(errcode));
} else {
if (*res == NULL) {
cprintf (RED,"Error: Could not convert %s hostname to internet address (zmq): "
"gettaddrinfo returned null\n", hostname);
} else{
return 0;
}
}
cerr << "Error: Could not convert hostname to internet address" << endl;
return 1;
};
/**
* Convert Internet Address structure pointer to ip string (char*)
* Clears the internet address structure as well
* @param res pointer to internet address structure
* @param ip pointer to char array to store result in
* @param ipsize size available in ip buffer
* @return 1 for fail, 0 for success
*/
// Do not make this static (for multi threading environment)
int ConvertInternetAddresstoIpString (struct addrinfo *res, char* ip, const int ipsize) {
if (inet_ntop (res->ai_family, &((struct sockaddr_in *) res->ai_addr)->sin_addr, ip, ipsize) != NULL) {
freeaddrinfo(res);
return 0;
}
cerr << "Error: Could not convert internet address to ip string" << endl;
return 1;
}
int ReceiveDataOnly(void* buf,int length=0){
if (buf==NULL) return -1;
total_sent=0;
switch(protocol) {
case TCP:
if (file_des<0) return -1;
while(length>0){
nsending = (length>packet_size) ? packet_size:length;
nsent = read(file_des,(char*)buf+total_sent,nsending);
if(!nsent) {
if(!total_sent) {
return -1; //to handle it
}
break;
}
length-=nsent;
total_sent+=nsent;
}
if (total_sent>0)
strcpy(thisClientIP,dummyClientIP);
if (strcmp(lastClientIP,thisClientIP))
differentClients=1;
else
differentClients=0;
break;
case UDP:
if (socketDescriptor<0) return -1;
//if length given, listens to length, else listens for packetsize till length is reached
if(length){
while(length>0){
nsending = (length>packet_size) ? packet_size:length;
nsent = recvfrom(socketDescriptor,(char*)buf+total_sent,nsending, 0, (struct sockaddr *) &clientAddress, &clientAddress_length);
if(nsent == header_packet_size)
continue;
if(nsent != nsending){
if(nsent && (nsent != -1))
cprintf(RED,"Incomplete Packet size %d\n",nsent);
break;
}
length-=nsent;
total_sent+=nsent;
}
}
//listens to only 1 packet
else{
//normal
nsending=packet_size;
while(1){
#ifdef VERYVERBOSE
cprintf(BLUE,"%d gonna listen\n", portno); fflush(stdout);
#endif
nsent = recvfrom(socketDescriptor,(char*)buf+total_sent,nsending, 0, (struct sockaddr *) &clientAddress, &clientAddress_length);
//break out of loop only if read one packets size or read didnt work (cuz of shutdown)
if(nsent<=0 || nsent == packet_size)
break;
//incomplete packets or header packets ignored and read buffer again
if(nsent != packet_size && nsent != header_packet_size)
cprintf(RED,"%d Incomplete Packet size %d\n", portno, nsent);
}
//nsent = 1040;
if(nsent > 0)total_sent+=nsent;
}
break;
default:
;
}
#ifdef VERY_VERBOSE
cout << "sent "<< total_sent << " Bytes" << endl;
#endif
return total_sent;
}
int SendDataOnly(void *buf, int length) {
#ifdef VERY_VERBOSE
cout << "want to send "<< length << " Bytes" << endl;
#endif
if (buf==NULL) return -1;
total_sent=0;
switch(protocol) {
case TCP:
if (file_des<0) return -1;
while(length>0){
nsending = (length>packet_size) ? packet_size:length;
nsent = write(file_des,(char*)buf+total_sent,nsending);
if(is_a_server && nsent < 0) {
cprintf(BG_RED, "Error writing to socket. Possible client socket crash\n");
break;
}
if(!nsent) break;
length-=nsent;
total_sent+=nsent;
}
break;
case UDP:
if (socketDescriptor<0) return -1;
while(length>0){
nsending = (length>packet_size) ? packet_size:length;
nsent = sendto(socketDescriptor,(char*)buf+total_sent,nsending, 0, (struct sockaddr *) &clientAddress, clientAddress_length);
if(!nsent) break;
length-=nsent;
total_sent+=nsent;
}
break;
default:
;
}
#ifdef VERY_VERBOSE
cout << "sent "<< total_sent << " Bytes" << endl;
#endif
return total_sent;
}
int getCurrentTotalReceived(){
return total_sent;
}
char lastClientIP[INET_ADDRSTRLEN];
char thisClientIP[INET_ADDRSTRLEN];
int differentClients;
protected:
int portno;
communicationProtocol protocol;
int is_a_server;
int socketDescriptor;
int file_des;
int packet_size;
struct sockaddr_in clientAddress, serverAddress;
socklen_t clientAddress_length;
char dummyClientIP[INET_ADDRSTRLEN];
private:
int nsending;
int nsent;
int total_sent;
int header_packet_size;
// pthread_mutex_t mp;
};

View File

@ -0,0 +1,133 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><!-- #BeginTemplate "/templates/psi_template.dwt" -->
<HEAD>
<!--#include virtual="/webbase/ssi/defaultvariables.shtml" -->
<!-- Change only the text within the 3 BeginEditable ... EndEditable Sections: -->
<!-- MetaData - Definitions - BodyContent -->
<!-- #BeginEditable "MetaData" -->
<TITLE>slsDetectorUsers Example</TITLE>
<META name="keywords" content="slsDetectorUsers">
<META name="description" content="SLS Detector Users Example">
<META name="author" content="Anna Bergamaschi">
<!-- #EndEditable -->
<!--#include virtual="/webbase/ssi/instructions.shtml" -->
<!--#include virtual="$PRJDIR/ssi/projectvariables.shtml" -->
<!-- # = Active changes to projectvariables or defaultvariables, no # = Inactive -->
<!-- #BeginEditable "Definitions" -->
<!--#set var="PAGETITLE" value='Anna Bergamaschi' -->
<!--set var="ALTLANGUAGE" value='english' -->
<!--set var="DIRLANGUAGE" value='d/' -->
<!--#set var="MAILTO" value='anna.bergamaschi@psi.&#99;&#104;' -->
<!--#set var="MAILCC" value=' ' -->
<!--set var="NAVTOP" value='/webbase/ssi/top_psi.shtml' -->
<!--#set var="NAVLEFT" value='$SSIDIR/side.shtml' -->
<!-- #EndEditable -->
<!--#include virtual="/webbase/ssi/head.shtml" -->
</head>
<!--#include virtual="/webbase/ssi/pretemplate.shtml" -->
<!-- #BeginEditable "BodyContent" -->
<H1>Custom SLS Receiver Example</H1>
<H3> Main Files </H3>
<ul>
<li>
<a href="Makefile">Makefile</a> Edit to properly link the slsDetector libraries
</li>
<li>
<a href="dummyMain.cpp">dummyMain.cpp</a> Main combining the required TCPIP interface and the custom dummy UDP implementation
</li>
<li>
<a href="dummyUDPInterface.h">dummyUDPInterface.h</a> Dummy example of UDP interface implementation -- the UDP server never start listening!
</li>
</ul>
<H3> Library Files </H3>
<ul>
<li>
<a href="libSlsReceiver.so">libSlsReceiver.so</a> Receiver Library
</li>
</ul>
<H3> Include Files </H3>
<ul>
<li>
<a href="slsReceiverTCPIPInterface.h">slsReceiverTCPIPInterface.h</a> TCP/IP Interface between client and receiver
</li>
<li>
<a href="UDPInterface.h">UDPInterface.h</a> abstract UDP Interface of the receiver
</li>
<li>
<a href="UDPBaseImplementation.h">UDPBaseImplementation.h</a> Base Implementation of UDP Interface. Dummy Interface will be a child class of this
</li>
<li>
<a href="sls_receiver_defs.h">sls_receiver_defs.h</a> Includes definitions used in the example files
</li>
<li>
<a href="sls_receiver_funcs.h">sls_receiver_funcs.h</a> Required by sls_receiver_defs.h
</li>
<li>
<a href="sls_receiver_funcs.h">sls_receiver_funcs.h</a> Required by sls_receiver_defs.h
</li>
<li>
<a href="MySocketTCP.h">MySocketTCP.h</a> To create Sockets. Required by slsReceiverTCPIPInterface.h
</li>
<li>
<a href="genericSocket.h">genericSocket.h</a> Required by MySocketTCP.h
</li>
<li>
<a href="receiver_defs.h">receiver_defs.h</a> Required by slsReceiverTCPIPInterface.h
</li>
<li>
<a href="utilities.h">utilities.h</a> Required by UDPInterface.h
</li>
<li>
<a href="logger.h">logger.h</a> Required by UDPInterface.h
</li>
<li>
<a href="ansi.h">ansi.h</a> Colored print. Required by most files
</li>
</ul>
<H3> ZMQ Include Files </H3>
<ul>
<li>
<a href="zmq.h">zmq.h</a> Public Include file for ZMQ API users.
</li>
<li>
<a href="libzmq.a">libzmq.a</a> Static libary file
</li>
</ul>
<!-- #EndEditable -->
<!--#include virtual="/webbase/ssi/posttemplate.shtml" -->
<!-- #EndTemplate -->
</HTML>

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,231 @@
#pragma once
#include <sstream>
#include <string>
#include <stdio.h>
#include <unistd.h>
#include <ansi.h>
#ifdef FIFODEBUG
#define FILELOG_MAX_LEVEL logDEBUG5
#elif VERYVERBOSE
#define FILELOG_MAX_LEVEL logDEBUG4
#elif VERBOSE
#define FILELOG_MAX_LEVEL logDEBUG
#endif
#ifndef FILELOG_MAX_LEVEL
#define FILELOG_MAX_LEVEL logINFO
#endif
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define MYCONCAT(x,y)
#define __AT__ string(__FILE__) + string("::") + string(__func__) + string("(): ")
#define __SHORT_FORM_OF_FILE__ \
(strrchr(__FILE__,'/') \
? strrchr(__FILE__,'/')+1 \
: __FILE__ \
)
#define __SHORT_AT__ string(__SHORT_FORM_OF_FILE__) + string("::") + string(__func__) + string("(): ")
inline std::string NowTime();
enum TLogLevel {logERROR, logWARNING, logINFO, logDEBUG, logDEBUG1, logDEBUG2, logDEBUG3, logDEBUG4, logDEBUG5};
template <typename T> class Log{
public:
Log();
virtual ~Log();
std::ostringstream& Get(TLogLevel level = logINFO);
static TLogLevel& ReportingLevel();
static std::string ToString(TLogLevel level);
static TLogLevel FromString(const std::string& level);
protected:
std::ostringstream os;
TLogLevel lev;
private:
Log(const Log&);
Log& operator =(const Log&);
};
class Output2FILE {
public:
static FILE*& Stream();
static void Output(const std::string& msg);
static void Output(const std::string& msg, TLogLevel level);
};
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
# if defined (BUILDING_FILELOG_DLL)
# define FILELOG_DECLSPEC __declspec (dllexport)
# elif defined (USING_FILELOG_DLL)
# define FILELOG_DECLSPEC __declspec (dllimport)
# else
# define FILELOG_DECLSPEC
# endif // BUILDING_DBSIMPLE_DLL
#else
# define FILELOG_DECLSPEC
#endif // _WIN32
class FILELOG_DECLSPEC FILELog : public Log<Output2FILE> {};
//typedef Log<Output2FILE> FILELog;
#define FILE_LOG(level) \
if (level > FILELOG_MAX_LEVEL) ; \
else if (level > FILELog::ReportingLevel() || !Output2FILE::Stream()) ; \
else FILELog().Get(level)
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
#include <windows.h>
inline std::string NowTime()
{
const int MAX_LEN = 200;
char buffer[MAX_LEN];
if (GetTimeFormatA(LOCALE_USER_DEFAULT, 0, 0,
"HH':'mm':'ss", buffer, MAX_LEN) == 0)
return "Error in NowTime()";
char result[100] = {0};
static DWORD first = GetTickCount();
sprintf(result, "%s.%03ld", buffer, (long)(GetTickCount() - first) % 1000);
return result;
}
#else
#include <sys/time.h>
inline std::string NowTime()
{
char buffer[11];
const int buffer_len = sizeof(buffer);
time_t t;
time(&t);
tm r = {0};
strftime(buffer, buffer_len, "%X", localtime_r(&t, &r));
buffer[buffer_len - 1] = 0;
struct timeval tv;
gettimeofday(&tv, 0);
char result[100];
const int result_len = sizeof(result);
snprintf(result, result_len, "%s.%03ld", buffer, (long)tv.tv_usec / 1000);
result[result_len - 1] = 0;
return result;
}
#endif //WIN32
template <typename T> Log<T>::Log():lev(logDEBUG){}
template <typename T> std::ostringstream& Log<T>::Get(TLogLevel level)
{
lev = level;
os << "- " << NowTime();
os << " " << ToString(level) << ": ";
if (level > logDEBUG)
os << std::string(level - logDEBUG, '\t');
return os;
}
template <typename T> Log<T>::~Log()
{
os << std::endl;
T::Output( os.str(),lev); // T::Output( os.str());
}
template <typename T> TLogLevel& Log<T>::ReportingLevel()
{
static TLogLevel reportingLevel = logDEBUG5;
return reportingLevel;
}
template <typename T> std::string Log<T>::ToString(TLogLevel level)
{
static const char* const buffer[] = {"ERROR", "WARNING", "INFO", "DEBUG", "DEBUG1", "DEBUG2", "DEBUG3", "DEBUG4","DEBUG5"};
return buffer[level];
}
template <typename T>
TLogLevel Log<T>::FromString(const std::string& level)
{
if (level == "DEBUG5")
return logDEBUG5;
if (level == "DEBUG4")
return logDEBUG4;
if (level == "DEBUG3")
return logDEBUG3;
if (level == "DEBUG2")
return logDEBUG2;
if (level == "DEBUG1")
return logDEBUG1;
if (level == "DEBUG")
return logDEBUG;
if (level == "INFO")
return logINFO;
if (level == "WARNING")
return logWARNING;
if (level == "ERROR")
return logERROR;
Log<T>().Get(logWARNING) << "Unknown logging level '" << level << "'. Using INFO level as default.";
return logINFO;
}
inline FILE*& Output2FILE::Stream()
{
static FILE* pStream = stderr;
return pStream;
}
inline void Output2FILE::Output(const std::string& msg)
{
FILE* pStream = Stream();
if (!pStream)
return;
fprintf(pStream, "%s", msg.c_str());
fflush(pStream);
}
inline void Output2FILE::Output(const std::string& msg, TLogLevel level)
{
FILE* pStream = Stream();
if (!pStream)
return;
bool out = true;
switch(level){
case logERROR: cprintf(RED BOLD,"%s",msg.c_str()); break;
case logWARNING: cprintf(YELLOW BOLD,"%s",msg.c_str()); break;
case logINFO: cprintf(RESET,"%s",msg.c_str()); break;
default: fprintf(pStream,"%s",msg.c_str()); out = false; break;
}
fflush(out ? stdout : pStream);
}
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
# if defined (BUILDING_FILELOG_DLL)
# define FILELOG_DECLSPEC __declspec (dllexport)
# elif defined (USING_FILELOG_DLL)
# define FILELOG_DECLSPEC __declspec (dllimport)
# else
# define FILELOG_DECLSPEC
# endif // BUILDING_DBSIMPLE_DLL
#else
# define FILELOG_DECLSPEC
#endif // _WIN32

View File

@ -0,0 +1,47 @@
#pragma once
#include "sls_receiver_defs.h"
#include <stdint.h>
#define MAX_DIMENSIONS 2
//socket
#define GOODBYE -200
#define RECEIVE_SOCKET_BUFFER_SIZE (100*1024*1024)
#define MAX_SOCKET_INPUT_PACKET_QUEUE 250000
//files
#define DO_NOTHING 0
#define DO_EVERYTHING 1
//binary
#define FILE_BUFFER_SIZE (16*1024*1024) //16mb
//fifo
#define FIFO_HEADER_NUMBYTES 4
//hdf5
#define MAX_CHUNKED_IMAGES 1
//versions
#define HDF5_WRITER_VERSION 1.0 //1 decimal places
#define BINARY_WRITER_VERSION 1.0 //1 decimal places
#define SLS_DETECTOR_HEADER_VERSION 0x1
#define SLS_DETECTOR_JSON_HEADER_VERSION 0x2
//parameters to calculate fifo depth
#define SAMPLE_TIME_IN_NS 100000000//100ms
#define MAX_JOBS_PER_THREAD 1000
//to differentiate between gotthard and short gotthard
#define GOTTHARD_PACKET_SIZE 1286
#define DUMMY_PACKET_VALUE 0xFFFFFFFF
#define LISTENER_PRIORITY 90
#define PROCESSOR_PRIORITY 70
#define STREAMER_PRIORITY 10
#define TCP_PRIORITY 10

View File

@ -0,0 +1,358 @@
#pragma once
/********************************************//**
* @file slsReceiverTCPIPInterface.h
* @short interface between receiver and client
***********************************************/
#include "sls_receiver_defs.h"
#include "receiver_defs.h"
#include "MySocketTCP.h"
#include "UDPInterface.h"
/**
*@short interface between receiver and client
*/
class slsReceiverTCPIPInterface : private virtual slsReceiverDefs {
public:
/** Destructor */
virtual ~slsReceiverTCPIPInterface();
/**
* Constructor
* reads config file, creates socket, assigns function table
* @param succecc socket creation was successfull
* @param rbase pointer to the receiver base
* @param pn port number (defaults to default port number)
*/
slsReceiverTCPIPInterface(int &success, UDPInterface* rbase, int pn=-1);
/**
* Sets the port number to listen to.
Take care that the client must know to whcih port it has to listen to, so normally it is better to use a fixes port from the instatiation or change it from the client.
@param pn port number (-1 only get)
\returns actual port number
*/
int setPortNumber(int pn=-1);
/**
* Starts listening on the TCP port for client comminication
\returns OK or FAIL
*/
int start();
/** stop listening on the TCP & UDP port for client comminication */
void stop();
/** gets version */
int64_t getReceiverVersion();
//***callback functions***
/**
* Call back for start acquisition
* callback arguments are
* filepath
* filename
* fileindex
* datasize
*
* return value is insignificant at the moment
* we write depending on file write enable
* users get data to write depending on call backs registered
*/
void registerCallBackStartAcquisition(int (*func)(char*, char*, uint64_t, uint32_t, void*),void *arg);
/**
* Call back for acquisition finished
* callback argument is
* total frames caught
*/
void registerCallBackAcquisitionFinished(void (*func)(uint64_t, void*),void *arg);
/**
* Call back for raw data
* args to raw data ready callback are
* frameNumber is the frame number
* expLength is the subframe number (32 bit eiger) or real time exposure time in 100ns (others)
* packetNumber is the packet number
* bunchId is the bunch id from beamline
* timestamp is the time stamp with 10 MHz clock
* modId is the unique module id (unique even for left, right, top, bottom)
* xCoord is the x coordinate in the complete detector system
* yCoord is the y coordinate in the complete detector system
* zCoord is the z coordinate in the complete detector system
* debug is for debugging purposes
* roundRNumber is the round robin set number
* detType is the detector type see :: detectorType
* version is the version number of this structure format
* dataPointer is the pointer to the data
* dataSize in bytes is the size of the data in bytes
*/
void registerCallBackRawDataReady(void (*func)(uint64_t, uint32_t, uint32_t, uint64_t, uint64_t, uint16_t, uint16_t, uint16_t, uint16_t, uint32_t, uint16_t, uint8_t, uint8_t,
char*, uint32_t, void*),void *arg);
private:
/**
* Static function - Thread started which is a TCP server
* Called by start()
* @param this_pointer pointer to this object
*/
static void* startTCPServerThread(void *this_pointer);
/**
* Thread started which is a TCP server
* Called by start()
*/
void startTCPServer();
/** retuns function name with function index */
const char* getFunctionName(enum recFuncs func);
/** assigns functions to the fnum enum */
int function_table();
/** Decodes Function */
int decode_function();
/** print socket read error */
int printSocketReadError();
/** receiver object is null */
void invalidReceiverObject();
/** receiver already locked */
void receiverlocked();
/** receiver not idle */
void receiverNotIdle();
/** function not implemented for specific detector */
void functionNotImplemented();
/** Unrecognized Function */
int M_nofunc();
/** Execute command */
int exec_command();
/** Exit Receiver Server */
int exit_server();
/** Locks Receiver */
int lock_receiver();
/** Get Last Client IP*/
int get_last_client_ip();
/** Set port */
int set_port();
/** Updates Client if different clients connect */
int update_client();
/** Sends the updated parameters to client */
int send_update();
/** get version, calls get_version */
int get_id();
/** Set detector type */
int set_detector_type();
/** set detector hostname */
int set_detector_hostname();
/** set short frame */
int set_short_frame();
/** Set up UDP Details */
int setup_udp();
/** set acquisition period, frame number etc */
int set_timer();
/** set dynamic range */
int set_dynamic_range();
/** Sets the receiver to send every nth frame to gui, or only upon gui request */
int set_read_frequency();
/** Gets receiver status */
int get_status();
/** Start Receiver - starts listening to udp packets from detector */
int start_receiver();
/** Stop Receiver - stops listening to udp packets from detector*/
int stop_receiver();
/** set status to transmitting and
* when fifo is empty later, sets status to run_finished */
int start_readout();
/** Reads Frame/ buffer */
int read_frame();
/** Set File path */
int set_file_dir();
/** Set File name without frame index, file index and extension */
int set_file_name();
/** Set File index */
int set_file_index();
/** Set Frame index */
int set_frame_index();
/** Gets frame index for each acquisition */
int get_frame_index();
/** Gets Total Frames Caught */
int get_frames_caught();
/** Resets Total Frames Caught */
int reset_frames_caught();
/** Enable File Write*/
int enable_file_write();
/** enable compression */
int enable_compression();
/** enable overwrite */
int enable_overwrite();
/** enable 10Gbe */
int enable_tengiga();
/** set fifo depth */
int set_fifo_depth();
/** activate/ deactivate */
int set_activate();
/* Set the data stream enable */
int set_data_stream_enable();
/** Sets the timer between frames streamed by receiver when frequency is set to 0 */
int set_read_receiver_timer();
/** enable flipped data */
int set_flipped_data();
/** set file format */
int set_file_format();
/** set position id */
int set_detector_posid();
/** set multi detector size */
int set_multi_detector_size();
/** set streaming port */
int set_streaming_port();
/** set silent mode */
int set_silent_mode();
/** restream stop packet */
int restream_stop();
/** detector type */
detectorType myDetectorType;
/** slsReceiverBase object */
UDPInterface *receiverBase;
/** Function List */
int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])();
/** Message */
char mess[MAX_STR_LENGTH];
/** success/failure */
int ret;
/** function index */
int fnum;
/** Lock Status if server locked to a client */
int lockStatus;
/** kill tcp server thread */
int killTCPServerThread;
/** thread for TCP server */
pthread_t TCPServer_thread;
/** port number */
int portNumber;
//***callback parameters***
/**
* Call back for start acquisition
* callback arguments are
* filepath
* filename
* fileindex
* datasize
*
* return value is insignificant at the moment
* we write depending on file write enable
* users get data to write depending on call backs registered
*/
int (*startAcquisitionCallBack)(char*, char*, uint64_t, uint32_t, void*);
void *pStartAcquisition;
/**
* Call back for acquisition finished
* callback argument is
* total frames caught
*/
void (*acquisitionFinishedCallBack)(uint64_t, void*);
void *pAcquisitionFinished;
/**
* Call back for raw data
* args to raw data ready callback are
* frameNumber is the frame number
* expLength is the subframe number (32 bit eiger) or real time exposure time in 100ns (others)
* packetNumber is the packet number
* bunchId is the bunch id from beamline
* timestamp is the time stamp with 10 MHz clock
* modId is the unique module id (unique even for left, right, top, bottom)
* xCoord is the x coordinate in the complete detector system
* yCoord is the y coordinate in the complete detector system
* zCoord is the z coordinate in the complete detector system
* debug is for debugging purposes
* roundRNumber is the round robin set number
* detType is the detector type see :: detectorType
* version is the version number of this structure format
* dataPointer is the pointer to the data
* dataSize in bytes is the size of the data in bytes
*/
void (*rawDataReadyCallBack)(uint64_t, uint32_t, uint32_t, uint64_t, uint64_t, uint16_t, uint16_t, uint16_t, uint16_t, uint32_t, uint16_t, uint8_t, uint8_t,
char*, uint32_t, void*);
void *pRawDataReady;
protected:
/** Socket */
MySocketTCP* mySock;
};

View File

@ -0,0 +1,260 @@
#pragma once
#ifdef __CINT__
#define MYROOT
#define __cplusplus
#endif
#include <stdint.h>
#ifdef __cplusplus
#include <string>
#endif
#include "ansi.h"
typedef double double32_t;
typedef float float32_t;
typedef int int32_t;
/** default maximum string length */
#define MAX_STR_LENGTH 1000
#define MAX_FRAMES_PER_FILE 20000
#define SHORT_MAX_FRAMES_PER_FILE 100000
#define MOENCH_MAX_FRAMES_PER_FILE 1000
#define EIGER_MAX_FRAMES_PER_FILE 2000
#define JFRAU_MAX_FRAMES_PER_FILE 10000
#define JFCTB_MAX_FRAMES_PER_FILE 100000
#define DEFAULT_STREAMING_TIMER_IN_MS 200
/** default ports */
#define DEFAULT_PORTNO 1952
#define DEFAULT_UDP_PORTNO 50001
#define DEFAULT_GUI_PORTNO 65001
#define DEFAULT_ZMQ_CL_PORTNO 30001
#define DEFAULT_ZMQ_RX_PORTNO 30001
/**
\file sls_receiver_defs.h
This file contains all the basic definitions common to the slsReceiver class
and to the server programs running on the receiver
* @author Anna Bergamaschi
* @version 0.1alpha (any string)
* @see slsDetector
$Revision: 809 $
*/
#ifdef __cplusplus
/** @short class containing all the constants and enum definitions */
class slsReceiverDefs {
public:
slsReceiverDefs(){};
#endif
/**
Type of the detector
*/
enum detectorType {
GET_DETECTOR_TYPE=-1, /**< the detector will return its type */
GENERIC, /**< generic sls detector */
MYTHEN, /**< mythen */
PILATUS, /**< pilatus */
EIGER, /**< eiger */
GOTTHARD, /**< gotthard */
PICASSO, /**< picasso */
AGIPD, /**< agipd */
MOENCH, /**< moench */
JUNGFRAU, /**< jungfrau */
JUNGFRAUCTB, /**< jungfrauCTBversion */
PROPIX /**< propix */
};
/**
return values
*/
enum {
OK, /**< function succeeded */
FAIL, /**< function failed */
FINISHED, /**< acquisition finished */
FORCE_UPDATE
};
/**
indexes for the acquisition timers
*/
enum timerIndex {
FRAME_NUMBER, /**< number of real time frames: total number of acquisitions is number or frames*number of cycles */
ACQUISITION_TIME, /**< exposure time */
FRAME_PERIOD, /**< period between exposures */
DELAY_AFTER_TRIGGER, /**< delay between trigger and start of exposure or readout (in triggered mode) */
GATES_NUMBER, /**< number of gates per frame (in gated mode) */
PROBES_NUMBER, /**< number of probe types in pump-probe mode */
CYCLES_NUMBER, /**< number of cycles: total number of acquisitions is number or frames*number of cycles */
ACTUAL_TIME, /**< Actual time of the detector's internal timer */
MEASUREMENT_TIME, /**< Time of the measurement from the detector (fifo) */
PROGRESS, /**< fraction of measurement elapsed - only get! */
MEASUREMENTS_NUMBER,
FRAMES_FROM_START,
FRAMES_FROM_START_PG,
SAMPLES_JCTB,
SUBFRAME_ACQUISITION_TIME, /**< subframe exposure time */
MAX_TIMERS
};
/**
staus mask
*/
enum runStatus {
IDLE, /**< detector ready to start acquisition - no data in memory */
ERROR, /**< error i.e. normally fifo full */
WAITING, /**< waiting for trigger or gate signal */
RUN_FINISHED, /**< acquisition not running but data in memory */
TRANSMITTING, /**< acquisition running and data in memory */
RUNNING, /**< acquisition running, no data in memory */
STOPPED /**< acquisition stopped externally */
};
/**
@short structure for a Detector Packet or Image Header
@li frameNumber is the frame number
@li expLength is the subframe number (32 bit eiger) or real time exposure time in 100ns (others)
@li packetNumber is the packet number
@li bunchId is the bunch id from beamline
@li timestamp is the time stamp with 10 MHz clock
@li modId is the unique module id (unique even for left, right, top, bottom)
@li xCoord is the x coordinate in the complete detector system
@li yCoord is the y coordinate in the complete detector system
@li zCoord is the z coordinate in the complete detector system
@li debug is for debugging purposes
@li roundRNumber is the round robin set number
@li detType is the detector type see :: detectorType
@li version is the version number of this structure format
*/
typedef struct {
uint64_t frameNumber; /**< is the frame number */
uint32_t expLength; /**< is the subframe number (32 bit eiger) or real time exposure time in 100ns (others) */
uint32_t packetNumber; /**< is the packet number */
uint64_t bunchId; /**< is the bunch id from beamline */
uint64_t timestamp; /**< is the time stamp with 10 MHz clock */
uint16_t modId; /**< is the unique module id (unique even for left, right, top, bottom) */
uint16_t xCoord; /**< is the x coordinate in the complete detector system */
uint16_t yCoord; /**< is the y coordinate in the complete detector system */
uint16_t zCoord; /**< is the z coordinate in the complete detector system */
uint32_t debug; /**< is for debugging purposes */
uint16_t roundRNumber; /**< is the round robin set number */
uint8_t detType; /**< is the detector type see :: detectorType */
uint8_t version; /**< is the version number of this structure format */
} sls_detector_header;
/**
format
*/
enum fileFormat {
GET_FILE_FORMAT=-1,/**< the receiver will return its file format */
BINARY, /**< binary format */
ASCII, /**< ascii format */
HDF5, /**< hdf5 format */
NUM_FILE_FORMATS
};
#ifdef __cplusplus
/** returns string from enabled/disabled
\param b true or false
\returns string enabled, disabled
*/
static std::string stringEnable(bool b){\
if(b) return std::string("enabled"); \
else return std::string("disabled"); \
};
/** returns detector type string from detector type index
\param t string can be Mythen, Pilatus, Eiger, Gotthard, Agipd, Unknown
\returns MYTHEN, PILATUS, EIGER, GOTTHARD, AGIPD, MÖNCH, GENERIC
*/
static std::string getDetectorType(detectorType t){ \
switch (t) { \
case MYTHEN: return std::string("Mythen"); \
case PILATUS: return std::string("Pilatus"); \
case EIGER: return std::string("Eiger"); \
case GOTTHARD: return std::string("Gotthard"); \
case AGIPD: return std::string("Agipd"); \
case MOENCH: return std::string("Moench"); \
case JUNGFRAU: return std::string("Jungfrau"); \
case JUNGFRAUCTB: return std::string("JungfrauCTB"); \
case PROPIX: return std::string("Propix"); \
default: return std::string("Unknown"); \
}};
/** returns detector type index from detector type string
\param type can be MYTHEN, PILATUS, EIGER, GOTTHARD, AGIPD, GENERIC
\returns Mythen, Pilatus, Eiger, Gotthard, Agipd, Mönch, Unknown
*/
static detectorType getDetectorType(std::string const type){\
if (type=="Mythen") return MYTHEN; \
if (type=="Pilatus") return PILATUS; \
if (type=="Eiger") return EIGER; \
if (type=="Gotthard") return GOTTHARD; \
if (type=="Agipd") return AGIPD; \
if (type=="Moench") return MOENCH; \
if (type=="Jungfrau") return JUNGFRAU; \
if (type=="JungfrauCTB") return JUNGFRAUCTB; \
if (type=="Propix") return PROPIX; \
return GENERIC; \
};
/** returns string from run status index
\param s can be ERROR, WAITING, RUNNING, TRANSMITTING, RUN_FINISHED
\returns string error, waiting, running, data, finished
*/
static std::string runStatusType(runStatus s){\
switch (s) { \
case ERROR: return std::string("error"); \
case WAITING: return std::string("waiting"); \
case RUNNING: return std::string("running"); \
case TRANSMITTING: return std::string("data"); \
case RUN_FINISHED: return std::string("finished"); \
case STOPPED: return std::string("stopped"); \
default: return std::string("idle"); \
}};
/** returns string from file format index
\param s can be BINARY, ASCII, HDF5
\returns string binary, ascii, hdf5
*/
static std::string getFileFormatType(fileFormat f){\
switch (f) { \
case ASCII: return std::string("ascii"); \
case HDF5: return std::string("hdf5"); \
case BINARY: return std::string("binary"); \
default: return std::string("unknown"); \
}};
#endif
#ifdef __cplusplus
protected:
#endif
#ifndef MYROOT
#include "sls_receiver_funcs.h"
#endif
#ifdef __cplusplus
};
#endif
;

View File

@ -0,0 +1,73 @@
#pragma once
/**
@internal
function indexes to call on the server
All set functions with argument -1 work as get, when possible
*/
#define REC_FUNC_START_INDEX 128
enum recFuncs{
//General functions
F_EXEC_RECEIVER_COMMAND=REC_FUNC_START_INDEX, /**< command is executed */
F_EXIT_RECEIVER, /**< turn off receiver server */
F_LOCK_RECEIVER, /**< Locks/Unlocks server communication to the given client */
F_GET_LAST_RECEIVER_CLIENT_IP, /**< returns the IP of the client last connected to the receiver */
F_SET_RECEIVER_PORT, /**< Changes communication port of the receiver */
F_UPDATE_RECEIVER_CLIENT, /**< Returns all the important parameters to update the shared memory of the client */
// Identification
F_GET_RECEIVER_ID, /**< get receiver id of version */
F_GET_RECEIVER_TYPE, /**< return receiver type */
F_SEND_RECEIVER_DETHOSTNAME, /**< set detector hostname to receiver */
//network functions
F_RECEIVER_SHORT_FRAME, /**< Sets receiver to receive short frames */
F_SETUP_RECEIVER_UDP, /**< sets the receiver udp connection and returns receiver mac address */
//Acquisition setup functions
F_SET_RECEIVER_TIMER, /**< set/get timer value */
F_SET_RECEIVER_DYNAMIC_RANGE, /**< set/get detector dynamic range */
F_READ_RECEIVER_FREQUENCY, /**< sets the frequency of receiver sending frames to gui */
// Acquisition functions
F_GET_RECEIVER_STATUS, /**< gets the status of receiver listening mode */
F_START_RECEIVER, /**< starts the receiver listening mode */
F_STOP_RECEIVER, /**< stops the receiver listening mode */
F_START_RECEIVER_READOUT, /**< acquisition has stopped. start remaining readout in receiver */
F_READ_RECEIVER_FRAME, /**< read one frame to gui*/
//file functions
F_SET_RECEIVER_FILE_PATH, /**< sets receiver file directory */
F_SET_RECEIVER_FILE_NAME, /**< sets receiver file name */
F_SET_RECEIVER_FILE_INDEX, /**< sets receiver file index */
F_SET_RECEIVER_FRAME_INDEX, /**< sets the receiver frame index */
F_GET_RECEIVER_FRAME_INDEX, /**< gets the receiver frame index */
F_GET_RECEIVER_FRAMES_CAUGHT, /**< gets the number of frames caught by receiver */
F_RESET_RECEIVER_FRAMES_CAUGHT, /**< resets the frames caught by receiver */
F_ENABLE_RECEIVER_FILE_WRITE, /**< sets the receiver file write */
F_ENABLE_RECEIVER_COMPRESSION, /**< enable compression in receiver */
F_ENABLE_RECEIVER_OVERWRITE, /**< set overwrite flag in receiver */
F_ENABLE_RECEIVER_TEN_GIGA, /**< enable 10Gbe in receiver */
F_SET_RECEIVER_FIFO_DEPTH, /**< set receiver fifo depth */
F_RECEIVER_ACTIVATE, /** < activate/deactivate readout */
F_STREAM_DATA_FROM_RECEIVER, /**< stream data from receiver to client */
F_READ_RECEIVER_TIMER, /** < sets the timer between each data stream in receiver */
F_SET_FLIPPED_DATA_RECEIVER, /** < sets the enable to flip data across x/y axis (bottom/top) */
F_SET_RECEIVER_FILE_FORMAT, /** < sets the receiver file format */
F_SEND_RECEIVER_DETPOSID, /** < sets the detector position id in the reveiver */
F_SEND_RECEIVER_MULTIDETSIZE, /** < sets the multi detector size to the receiver */
F_SET_RECEIVER_STREAMING_PORT, /** < sets the receiver streaming port */
F_SET_RECEIVER_SILENT_MODE, /** < sets the receiver silent mode */
F_RESTREAM_STOP_FROM_RECEIVER, /** < restream stop from receiver */
/* Always append functions hereafter!!! */
/* Always append functions before!!! */
NUM_REC_FUNCTIONS
};

View File

@ -0,0 +1,16 @@
#pragma once
#include <iostream>
#include <string>
#include <sstream>
#include <iostream>
#include <map>
using namespace std;
#include "sls_receiver_defs.h"
/* uncomment next line to enable debug output */
//#define EIGER_DEBUG
int read_config_file(string fname, int *tcpip_port_no, map<string, string> * configuration_map);

View File

@ -0,0 +1,417 @@
/*
Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file
This file is part of 0MQ.
0MQ is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
0MQ is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*************************************************************************
NOTE to contributors. This file comprises the principal public contract
for ZeroMQ API users (along with zmq_utils.h). Any change to this file
supplied in a stable release SHOULD not break existing applications.
In practice this means that the value of constants must not change, and
that old values may not be reused for new constants.
*************************************************************************
*/
#ifndef __ZMQ_H_INCLUDED__
#define __ZMQ_H_INCLUDED__
/* Version macros for compile-time API version detection */
#define ZMQ_VERSION_MAJOR 4
#define ZMQ_VERSION_MINOR 0
#define ZMQ_VERSION_PATCH 8
#define ZMQ_MAKE_VERSION(major, minor, patch) \
((major) * 10000 + (minor) * 100 + (patch))
#define ZMQ_VERSION \
ZMQ_MAKE_VERSION(ZMQ_VERSION_MAJOR, ZMQ_VERSION_MINOR, ZMQ_VERSION_PATCH)
#ifdef __cplusplus
extern "C" {
#endif
#if !defined _WIN32_WCE
#include <errno.h>
#endif
#include <stddef.h>
#include <stdio.h>
#if defined _WIN32
#include <winsock2.h>
#endif
/* Handle DSO symbol visibility */
#if defined _WIN32
# if defined ZMQ_STATIC
# define ZMQ_EXPORT
# elif defined DLL_EXPORT
# define ZMQ_EXPORT __declspec(dllexport)
# else
# define ZMQ_EXPORT __declspec(dllimport)
# endif
#else
# if defined __SUNPRO_C || defined __SUNPRO_CC
# define ZMQ_EXPORT __global
# elif (defined __GNUC__ && __GNUC__ >= 4) || defined __INTEL_COMPILER
# define ZMQ_EXPORT __attribute__ ((visibility("default")))
# else
# define ZMQ_EXPORT
# endif
#endif
/* Define integer types needed for event interface */
#if defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_OPENVMS
# include <inttypes.h>
#elif defined _MSC_VER && _MSC_VER < 1600
# ifndef int32_t
typedef __int32 int32_t;
# endif
# ifndef uint16_t
typedef unsigned __int16 uint16_t;
# endif
# ifndef uint8_t
typedef unsigned __int8 uint8_t;
# endif
#else
# include <stdint.h>
#endif
/******************************************************************************/
/* 0MQ errors. */
/******************************************************************************/
/* A number random enough not to collide with different errno ranges on */
/* different OSes. The assumption is that error_t is at least 32-bit type. */
#define ZMQ_HAUSNUMERO 156384712
/* On Windows platform some of the standard POSIX errnos are not defined. */
#ifndef ENOTSUP
#define ENOTSUP (ZMQ_HAUSNUMERO + 1)
#endif
#ifndef EPROTONOSUPPORT
#define EPROTONOSUPPORT (ZMQ_HAUSNUMERO + 2)
#endif
#ifndef ENOBUFS
#define ENOBUFS (ZMQ_HAUSNUMERO + 3)
#endif
#ifndef ENETDOWN
#define ENETDOWN (ZMQ_HAUSNUMERO + 4)
#endif
#ifndef EADDRINUSE
#define EADDRINUSE (ZMQ_HAUSNUMERO + 5)
#endif
#ifndef EADDRNOTAVAIL
#define EADDRNOTAVAIL (ZMQ_HAUSNUMERO + 6)
#endif
#ifndef ECONNREFUSED
#define ECONNREFUSED (ZMQ_HAUSNUMERO + 7)
#endif
#ifndef EINPROGRESS
#define EINPROGRESS (ZMQ_HAUSNUMERO + 8)
#endif
#ifndef ENOTSOCK
#define ENOTSOCK (ZMQ_HAUSNUMERO + 9)
#endif
#ifndef EMSGSIZE
#define EMSGSIZE (ZMQ_HAUSNUMERO + 10)
#endif
#ifndef EAFNOSUPPORT
#define EAFNOSUPPORT (ZMQ_HAUSNUMERO + 11)
#endif
#ifndef ENETUNREACH
#define ENETUNREACH (ZMQ_HAUSNUMERO + 12)
#endif
#ifndef ECONNABORTED
#define ECONNABORTED (ZMQ_HAUSNUMERO + 13)
#endif
#ifndef ECONNRESET
#define ECONNRESET (ZMQ_HAUSNUMERO + 14)
#endif
#ifndef ENOTCONN
#define ENOTCONN (ZMQ_HAUSNUMERO + 15)
#endif
#ifndef ETIMEDOUT
#define ETIMEDOUT (ZMQ_HAUSNUMERO + 16)
#endif
#ifndef EHOSTUNREACH
#define EHOSTUNREACH (ZMQ_HAUSNUMERO + 17)
#endif
#ifndef ENETRESET
#define ENETRESET (ZMQ_HAUSNUMERO + 18)
#endif
/* Native 0MQ error codes. */
#define EFSM (ZMQ_HAUSNUMERO + 51)
#define ENOCOMPATPROTO (ZMQ_HAUSNUMERO + 52)
#define ETERM (ZMQ_HAUSNUMERO + 53)
#define EMTHREAD (ZMQ_HAUSNUMERO + 54)
/* Run-time API version detection */
ZMQ_EXPORT void zmq_version (int *major, int *minor, int *patch);
/* This function retrieves the errno as it is known to 0MQ library. The goal */
/* of this function is to make the code 100% portable, including where 0MQ */
/* compiled with certain CRT library (on Windows) is linked to an */
/* application that uses different CRT library. */
ZMQ_EXPORT int zmq_errno (void);
/* Resolves system errors and 0MQ errors to human-readable string. */
ZMQ_EXPORT const char *zmq_strerror (int errnum);
/******************************************************************************/
/* 0MQ infrastructure (a.k.a. context) initialisation & termination. */
/******************************************************************************/
/* New API */
/* Context options */
#define ZMQ_IO_THREADS 1
#define ZMQ_MAX_SOCKETS 2
/* Default for new contexts */
#define ZMQ_IO_THREADS_DFLT 1
#define ZMQ_MAX_SOCKETS_DFLT 1023
ZMQ_EXPORT void *zmq_ctx_new (void);
ZMQ_EXPORT int zmq_ctx_term (void *context);
ZMQ_EXPORT int zmq_ctx_shutdown (void *ctx_);
ZMQ_EXPORT int zmq_ctx_set (void *context, int option, int optval);
ZMQ_EXPORT int zmq_ctx_get (void *context, int option);
/* Old (legacy) API */
ZMQ_EXPORT void *zmq_init (int io_threads);
ZMQ_EXPORT int zmq_term (void *context);
ZMQ_EXPORT int zmq_ctx_destroy (void *context);
/******************************************************************************/
/* 0MQ message definition. */
/******************************************************************************/
typedef struct zmq_msg_t {unsigned char _ [32];} zmq_msg_t;
typedef void (zmq_free_fn) (void *data, void *hint);
ZMQ_EXPORT int zmq_msg_init (zmq_msg_t *msg);
ZMQ_EXPORT int zmq_msg_init_size (zmq_msg_t *msg, size_t size);
ZMQ_EXPORT int zmq_msg_init_data (zmq_msg_t *msg, void *data,
size_t size, zmq_free_fn *ffn, void *hint);
ZMQ_EXPORT int zmq_msg_send (zmq_msg_t *msg, void *s, int flags);
ZMQ_EXPORT int zmq_msg_recv (zmq_msg_t *msg, void *s, int flags);
ZMQ_EXPORT int zmq_msg_close (zmq_msg_t *msg);
ZMQ_EXPORT int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src);
ZMQ_EXPORT int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src);
ZMQ_EXPORT void *zmq_msg_data (zmq_msg_t *msg);
ZMQ_EXPORT size_t zmq_msg_size (zmq_msg_t *msg);
ZMQ_EXPORT int zmq_msg_more (zmq_msg_t *msg);
ZMQ_EXPORT int zmq_msg_get (zmq_msg_t *msg, int option);
ZMQ_EXPORT int zmq_msg_set (zmq_msg_t *msg, int option, int optval);
/******************************************************************************/
/* 0MQ socket definition. */
/******************************************************************************/
/* Socket types. */
#define ZMQ_PAIR 0
#define ZMQ_PUB 1
#define ZMQ_SUB 2
#define ZMQ_REQ 3
#define ZMQ_REP 4
#define ZMQ_DEALER 5
#define ZMQ_ROUTER 6
#define ZMQ_PULL 7
#define ZMQ_PUSH 8
#define ZMQ_XPUB 9
#define ZMQ_XSUB 10
#define ZMQ_STREAM 11
/* Deprecated aliases */
#define ZMQ_XREQ ZMQ_DEALER
#define ZMQ_XREP ZMQ_ROUTER
/* Socket options. */
#define ZMQ_AFFINITY 4
#define ZMQ_IDENTITY 5
#define ZMQ_SUBSCRIBE 6
#define ZMQ_UNSUBSCRIBE 7
#define ZMQ_RATE 8
#define ZMQ_RECOVERY_IVL 9
#define ZMQ_SNDBUF 11
#define ZMQ_RCVBUF 12
#define ZMQ_RCVMORE 13
#define ZMQ_FD 14
#define ZMQ_EVENTS 15
#define ZMQ_TYPE 16
#define ZMQ_LINGER 17
#define ZMQ_RECONNECT_IVL 18
#define ZMQ_BACKLOG 19
#define ZMQ_RECONNECT_IVL_MAX 21
#define ZMQ_MAXMSGSIZE 22
#define ZMQ_SNDHWM 23
#define ZMQ_RCVHWM 24
#define ZMQ_MULTICAST_HOPS 25
#define ZMQ_RCVTIMEO 27
#define ZMQ_SNDTIMEO 28
#define ZMQ_LAST_ENDPOINT 32
#define ZMQ_ROUTER_MANDATORY 33
#define ZMQ_TCP_KEEPALIVE 34
#define ZMQ_TCP_KEEPALIVE_CNT 35
#define ZMQ_TCP_KEEPALIVE_IDLE 36
#define ZMQ_TCP_KEEPALIVE_INTVL 37
#define ZMQ_TCP_ACCEPT_FILTER 38
#define ZMQ_IMMEDIATE 39
#define ZMQ_XPUB_VERBOSE 40
#define ZMQ_ROUTER_RAW 41
#define ZMQ_IPV6 42
#define ZMQ_MECHANISM 43
#define ZMQ_PLAIN_SERVER 44
#define ZMQ_PLAIN_USERNAME 45
#define ZMQ_PLAIN_PASSWORD 46
#define ZMQ_CURVE_SERVER 47
#define ZMQ_CURVE_PUBLICKEY 48
#define ZMQ_CURVE_SECRETKEY 49
#define ZMQ_CURVE_SERVERKEY 50
#define ZMQ_PROBE_ROUTER 51
#define ZMQ_REQ_CORRELATE 52
#define ZMQ_REQ_RELAXED 53
#define ZMQ_CONFLATE 54
#define ZMQ_ZAP_DOMAIN 55
/* Message options */
#define ZMQ_MORE 1
/* Send/recv options. */
#define ZMQ_DONTWAIT 1
#define ZMQ_SNDMORE 2
/* Security mechanisms */
#define ZMQ_NULL 0
#define ZMQ_PLAIN 1
#define ZMQ_CURVE 2
/* Deprecated options and aliases */
#define ZMQ_IPV4ONLY 31
#define ZMQ_DELAY_ATTACH_ON_CONNECT ZMQ_IMMEDIATE
#define ZMQ_NOBLOCK ZMQ_DONTWAIT
#define ZMQ_FAIL_UNROUTABLE ZMQ_ROUTER_MANDATORY
#define ZMQ_ROUTER_BEHAVIOR ZMQ_ROUTER_MANDATORY
/******************************************************************************/
/* 0MQ socket events and monitoring */
/******************************************************************************/
/* Socket transport events (tcp and ipc only) */
#define ZMQ_EVENT_CONNECTED 1
#define ZMQ_EVENT_CONNECT_DELAYED 2
#define ZMQ_EVENT_CONNECT_RETRIED 4
#define ZMQ_EVENT_LISTENING 8
#define ZMQ_EVENT_BIND_FAILED 16
#define ZMQ_EVENT_ACCEPTED 32
#define ZMQ_EVENT_ACCEPT_FAILED 64
#define ZMQ_EVENT_CLOSED 128
#define ZMQ_EVENT_CLOSE_FAILED 256
#define ZMQ_EVENT_DISCONNECTED 512
#define ZMQ_EVENT_MONITOR_STOPPED 1024
#define ZMQ_EVENT_ALL ( ZMQ_EVENT_CONNECTED | ZMQ_EVENT_CONNECT_DELAYED | \
ZMQ_EVENT_CONNECT_RETRIED | ZMQ_EVENT_LISTENING | \
ZMQ_EVENT_BIND_FAILED | ZMQ_EVENT_ACCEPTED | \
ZMQ_EVENT_ACCEPT_FAILED | ZMQ_EVENT_CLOSED | \
ZMQ_EVENT_CLOSE_FAILED | ZMQ_EVENT_DISCONNECTED | \
ZMQ_EVENT_MONITOR_STOPPED)
/* Socket event data */
typedef struct {
uint16_t event; // id of the event as bitfield
int32_t value ; // value is either error code, fd or reconnect interval
} zmq_event_t;
ZMQ_EXPORT void *zmq_socket (void *, int type);
ZMQ_EXPORT int zmq_close (void *s);
ZMQ_EXPORT int zmq_setsockopt (void *s, int option, const void *optval,
size_t optvallen);
ZMQ_EXPORT int zmq_getsockopt (void *s, int option, void *optval,
size_t *optvallen);
ZMQ_EXPORT int zmq_bind (void *s, const char *addr);
ZMQ_EXPORT int zmq_connect (void *s, const char *addr);
ZMQ_EXPORT int zmq_unbind (void *s, const char *addr);
ZMQ_EXPORT int zmq_disconnect (void *s, const char *addr);
ZMQ_EXPORT int zmq_send (void *s, const void *buf, size_t len, int flags);
ZMQ_EXPORT int zmq_send_const (void *s, const void *buf, size_t len, int flags);
ZMQ_EXPORT int zmq_recv (void *s, void *buf, size_t len, int flags);
ZMQ_EXPORT int zmq_socket_monitor (void *s, const char *addr, int events);
ZMQ_EXPORT int zmq_sendmsg (void *s, zmq_msg_t *msg, int flags);
ZMQ_EXPORT int zmq_recvmsg (void *s, zmq_msg_t *msg, int flags);
/* Experimental */
struct iovec;
ZMQ_EXPORT int zmq_sendiov (void *s, struct iovec *iov, size_t count, int flags);
ZMQ_EXPORT int zmq_recviov (void *s, struct iovec *iov, size_t *count, int flags);
/******************************************************************************/
/* I/O multiplexing. */
/******************************************************************************/
#define ZMQ_POLLIN 1
#define ZMQ_POLLOUT 2
#define ZMQ_POLLERR 4
typedef struct
{
void *socket;
#if defined _WIN32
SOCKET fd;
#else
int fd;
#endif
short events;
short revents;
} zmq_pollitem_t;
#define ZMQ_POLLITEMS_DFLT 16
ZMQ_EXPORT int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout);
/* Built-in message proxy (3-way) */
ZMQ_EXPORT int zmq_proxy (void *frontend, void *backend, void *capture);
ZMQ_EXPORT int zmq_proxy_steerable (void *frontend, void *backend, void *capture, void *control);
/* Encode a binary key as printable text using ZMQ RFC 32 */
ZMQ_EXPORT char *zmq_z85_encode (char *dest, uint8_t *data, size_t size);
/* Encode a binary key from printable text per ZMQ RFC 32 */
ZMQ_EXPORT uint8_t *zmq_z85_decode (uint8_t *dest, char *string);
/* Deprecated aliases */
#define ZMQ_STREAMER 1
#define ZMQ_FORWARDER 2
#define ZMQ_QUEUE 3
/* Deprecated method */
ZMQ_EXPORT int zmq_device (int type, void *frontend, void *backend);
#undef ZMQ_EXPORT
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,6 +1,6 @@
PKGDIR = ../..
LIBDIR = $(PKGDIR)/bin
INCLUDES = -I . -I$(PKGDIR)/slsReceiverSoftware/include -I$(PKGDIR)/slsDetectorSoftware/commonFiles -I$(PKGDIR)/slsDetectorSoftware/slsDetectorAnalysis -I$(LIBDIR) -I$(PKGDIR)/slsDetectorSoftware/slsDetector
LIBDIR = $(PKGDIR)/build/bin
INCLUDES = -I . -I$(PKGDIR)/slsReceiverSoftware/include -I$(PKGDIR)/slsDetectorSoftware/slsDetectorAnalysis -I$(LIBDIR) -I$(PKGDIR)/slsDetectorSoftware/slsDetector
SRC_DET = mainClient.cpp
SRC_REC = mainReceiver.cpp
ZMQLIBDIR = $(PKGDIR)/slsReceiverSoftware/include

View File

@ -0,0 +1,66 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><!-- #BeginTemplate "/templates/psi_template.dwt" -->
<HEAD>
<!--#include virtual="/webbase/ssi/defaultvariables.shtml" -->
<!-- Change only the text within the 3 BeginEditable ... EndEditable Sections: -->
<!-- MetaData - Definitions - BodyContent -->
<!-- #BeginEditable "MetaData" -->
<TITLE>slsDetectorUsers Example</TITLE>
<META name="keywords" content="slsDetectorUsers">
<META name="description" content="SLS Detector Users Example">
<META name="author" content="Anna Bergamaschi">
<!-- #EndEditable -->
<!--#include virtual="/webbase/ssi/instructions.shtml" -->
<!--#include virtual="$PRJDIR/ssi/projectvariables.shtml" -->
<!-- # = Active changes to projectvariables or defaultvariables, no # = Inactive -->
<!-- #BeginEditable "Definitions" -->
<!--#set var="PAGETITLE" value='Anna Bergamaschi' -->
<!--set var="ALTLANGUAGE" value='english' -->
<!--set var="DIRLANGUAGE" value='d/' -->
<!--#set var="MAILTO" value='anna.bergamaschi@psi.&#99;&#104;' -->
<!--#set var="MAILCC" value=' ' -->
<!--set var="NAVTOP" value='/webbase/ssi/top_psi.shtml' -->
<!--#set var="NAVLEFT" value='$SSIDIR/side.shtml' -->
<!-- #EndEditable -->
<!--#include virtual="/webbase/ssi/head.shtml" -->
</head>
<!--#include virtual="/webbase/ssi/pretemplate.shtml" -->
<!-- #BeginEditable "BodyContent" -->
<H1>SLS Detector Users Example</H1>
<H3> Main Files </H3>
<ul>
<li>
<a href="CMakeLists.txt">CMakeLists.txt</a> This is called from main package cmake to create slsMultiReceiver.
</li>
<li>
<a href="Makefile">Makefile</a> Edit to properly link the slsDetector libraries to build/bin or bin
</li>
<li>
<a href="mainClient.cpp">mainClient.cpp</a> Example of control client
</li>
<li>
<a href="mainReceiver.cpp">mainReceiver.cpp</a> Example of receiver. Can be used in same process as client or a separate process.
</li>
</ul>
<!-- #EndEditable -->
<!--#include virtual="/webbase/ssi/posttemplate.shtml" -->
<!-- #EndTemplate -->
</HTML>

View File

@ -81,11 +81,7 @@ LATEX_HIDE_INDICES = YES
SOURCE_BROWSER = YES
PREDEFINED = __cplusplus
INPUT = ../../slsDetectorSoftware/slsDetector/slsDetectorUsers.h \
../../slDetectorSoftware/slsDetectorAnalysis/detectorData.h \
../../slsReceiverSoftware/include/slsReceiverUsers.h \
mainClient.cpp \
mainReceiver.cpp
INPUT = slsDetectorUsers.h detectorData.h slsReceiverUsers.h mainClient.cpp mainReceiver.cpp
OUTPUT_DIRECTORY = slsDetectorUsersDocs

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
icons/online_icon_24x24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
icons/tgz_22x22.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 926 B

View File

@ -1,51 +0,0 @@
DESTDIR?=docs
#manual-api manual-calwiz manual-client manual-gui manual-main
MAINDIRS= manual-main manual-api manual-calwiz manual-client manual-gui
#manual-calwiz manual-calwiz manual-gui manual-client manual-api
CLEANDIRS=$(MAINDIRS:manual-%=clean-%)
PDFDIRS=$(MAINDIRS:manual-%=pdf-%)
HTMLDIRS=$(MAINDIRS:manual-%=html-%)
ALLDIRS=$(MAINDIRS:manual-%=all-%)
all: $(ALLDIRS)
# $(shell test -d $(DESTDIR)/pdf && rm -fr $(DESTDIR)/pdf)
# mv pdf $(DESTDIR)
# $(shell test -d $(DESTDIR)/html && rm -fr $(DESTDIR)/html)
# mv html $(DESTDIR)
pdf: $(PDFDIRS)
# $(shell test -d $(DESTDIR)/pdf && rm -fr $(DESTDIR)/pdf)
# mv pdf $(DESTDIR)
html: $(HTMLDIRS)
# $(shell test -d $(DESTDIR)/html && rm -fr $(DESTDIR)/html)
# mv html $(DESTDIR)
clean: $(CLEANDIRS)
rm -fr $(DESTDIR)/pdf
rm -fr $(DESTDIR)/html
all-%:
echo
cd $(@:all-%=manual-%) && make all
pdf-%:
cd $(@:pdf-%=manual-%) && make pdf
html-%:
cd $(@:html-%=manual-%) && make html
clean-%:
cd $(@:clean-%=manual-%) && make clean
#<23><>$(@D)<29><> The directory part of the file name of the target, with the trailing slash removed. If the value of <20><>$@<40><> is dir/foo.o then <20><>$(@D)<29><> is dir. This value is . if <20><>$@<40><> does not contain a slash.
#<23><>$(@F)<29><> The file-within-directory part of the file name of the target. If the value of <20><>$@<40><> is dir/foo.o then <20><>$(@F)<29><> is foo.o. <20><>$(@F)<29><> is equivalent to <20><>$(notdir $@)<29><>.

View File

@ -1,65 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>SLS Detector Software Documentation</TITLE>
<META NAME="description" CONTENT="SLS Detector Software Documentation">
<META NAME="keywords" CONTENT="SLS Detectors">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<LINK REL="next" HREF="node1.html">
</HEAD>
<BODY >
<P>
<H1 ALIGN="CENTER">SLS Detector Software Documentation</H1>
<DIV>
</DIV>
<BR><HR>
<!--Table of Child-Links-->
<A NAME="CHILD_LINKS"></A>
<UL>
<LI><A HREF="slsDetectors-FAQ/index.html">SLS Detectors Frequently Asked Questions</A> <BR>
Documents with general remarks about the detectors and the software that all users should read.
<A HREF="../pdf/slsDetectors-FAQ.pdf">*pdf*</A> <BR>
<BR>
<LI><A HREF="slsDetectorInstall/index.html">Installation</A> <BR>
Documentation for the installation of the SLS Detectors software library
<A HREF="../pdf/slsDetectorInstall.pdf">*pdf*</A> <BR>
<BR>
<LI><A HREF="slsDetectorClientHowTo/index.html">Command Line Interface</A> <BR>
Reference documentation for the command line interface sls_detector_put, sls_detector_get, sls_detector_acquire, sls_detector_help
<A HREF="../pdf/slsDetectorClientHowTo.pdf">*pdf*</A> <BR>
<BR>
<LI><A HREF="slsDetectorGuiHowTo/index.html">Graphical Users Interface</A> <BR>
Reference documentation for the GUI
<A HREF="../pdf/slsDetectorGuiHowTo.pdf">*pdf*</A> <BR>
<BR>
<LI><A HREF="calibrationWizardsHowTo/index.html">Calibration Wizards</A>
<UL>
<LI> Energy calibration <A HREF="../pdf/energyCalibrationHowTo.pdf">*pdf*</A>
<LI> Angular calibration <A HREF="../pdf/angularCalibrationHowTo.pdf">*pdf*</A>
</UL>
<BR>
<LI><A HREF="slsDetectorUsersDocs/index.html">Application Program Interface</A> <BR>
Doxygen documentation for using the slsDetectorUsers class
<A HREF="../pdf/slsDetectorUsersDocs.pdf">*pdf*</A> <BR>
<BR>
</UL>
<BR><HR>
<ADDRESS>
Anna Bergamaschi
</ADDRESS>
</BODY>
</HTML>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,56 +0,0 @@
DESTDIR?=../docs
#manual-api manual-calwiz manual-client manual-gui manual-main
TEX=latex
MAINTEXS= angularCalibrationHowTo.tex energyCalibrationHowTo.tex
TEXS=ancCal.tex enCal.tex installation.tex
DVIS = $(MAINTEXS:.tex=.dvi)
PSS = $(MAINTEXS:.tex=.ps)
PDFS = $(MAINTEXS:.tex=.pdf)
HTMLS = $(MAINTEXS:%.tex=%)
all: pdf html
echo $(PWD)
echo $(PDFS)
echo $(HTMLS)
pdf: $(PDFS)
$(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR))
$(shell test -d $(DESTDIR)/pdf || mkdir -p $(DESTDIR)/pdf)
mv $(PDFS) $(DESTDIR)/pdf
html: $(HTMLS)
$(HTMLS): $(TEXS) $(MAINTEXS)
$(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR))
$(shell test -d $(DESTDIR)/html || mkdir -p $(DESTDIR)/html)
$(shell test -d $(DESTDIR)/html/$@ && rm -r $(DESTDIR)/html/$@)
latex $@.tex
latex2html -split 4 $@.tex
mv $@ $(DESTDIR)/html
%.dvi : %.tex $(TEXS)
latex $<
latex $<
%.ps : %.dvi
dvips -o $@ $<
%.pdf : %.ps
ps2pdf $< $@
clean:
rm -rf *.aux *.log *.toc *.out $(DVIS) $(PSS) $(PDFS) $(HTMLS)
rm -rf $(DESTDIR)/html/angularCalibrationHowTo
rm -rf $(DESTDIR)/html/energyCalibrationHowTo
rm -rf $(DESTDIR)/pdf/angularCalibrationHowTo.pdf
rm -rf $(DESTDIR)/pdf/energyCalibrationHowTo.pdf

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

View File

@ -1,171 +0,0 @@
In order to convert from strip number to 2$\theta$-angle, an accurate angular calibration of the detector must be performed (for details see the paper Bergamaschi, A. et al. (2010). J. Synchrotron Rad. 17, 653-668). \\
For this purpose, a series of patterns of a powder standard with symmetric peaks (e.g. silicon) must acquired while shifting the detector by an angular step of the order of about 2\% of the module size. During the measurement, a strong intensity peak (e.g. Si(111)) should pass through the field of view of every module such that it can be used as a reference angular position to perform the calibration of the modules position.\\
In a first step, the peak is fitted with a Gaussian in order to determine its position $C_{peak}$ in channel number for each of the acquired patterns.\\
In a second step, for each module $i$, the encoder position $\Theta_e$ is fitted as a function of the peak position $C_{peak}$ according to:
\begin{equation}\label{eq:angcal}
\Theta_e=\Theta_o^i-\arctan\Big(\frac{p \cdot (C_{peak}-C_{center}^i)}{R^i}\Big),
\end{equation}
where the parameters $\Theta_o^i$ is the angular offset with respect to the diffractometer zero position, $C_{center}^{i}$ is the central channel and $R^i$ is the distance of the module $i$ from the diffractometer center while $p=50~\mu m$ is the strip pitch of the detector. \\
Finally, the global offset of the detector system is precisely determined by refining a silicon pattern at a well-defined energy (i.e., knowing the position of the peak).
The same function of equation~\ref{eq:angcal}, with the parameters obtained from the calibration, is used in order to convert from channel number to 2$\theta$-angle.
The parallax at the borders of the modules due to the thickness of the silicon sensor is a function of the X-ray energy (higher energy X-rays are absorbed deeper inside the sensor) and is of the order of 0.2~mdeg at 12~keV and 0.5~mdeg at 30~keV. \\
The differences in pixel size due to the different portion of solid angle covered by the strips on the border of the modules and the higher efficiency due to the longer path of the X-rays in the sensor are removed by the flat field correction. This also normalizes additional differences in pixel size between channels which are also present because of mismatches in the strip sensor fabrication and in fluctuations of the channels threshold level.
Patterns acquired at different detector positions are generally merged together in order to fill the gaps between the modules and correct possibly bad functioning channels. In this procedure the data from different positions which are closer than 4~mdeg (the average pixel size) are averaged and the new position is set to the mean of the positions of the original points.
The position and width of the peaks results from a fit over several detector channels. Geometrical distortions might disturb this determination mainly because of errors in the angular calibration, fluctuations in the encoder position, variations between channels and parallax effects.\\
The resolution in locating the peak center and determining its width and integrated intensity has been estimated by acquiring several patterns of a LaB$_6$ sample in a 300~$\mu$m capillary with the detector shifted in 5~mdeg steps between 30.4 and 36.5 degrees. The 16~peaks acquired have been fitted with a Gaussian function plus background and the fluctuations on the fitted parameters have been calculated. The resulting average resolutions are 0.63$\pm$0.06~mdeg for the peak center and 0.22$\pm$0.05~mdeg for the peak Full-Width at Half-Maximum (FWHM) for an average peak FWHM of 27.0$\pm$2.5~mdeg. \\
These results show that the angular calibration allows a resolution in determining the peaks position and width which is appropriate for structural determination.
\section{Data acquisition}
The angular calibration consists in acquiring a set of diffraction patterns of a well known powder standard (e.g. Silicon) at different encoder positions. In order to facilitate the procedure, the sample should not emit fluorescent light and should present relatively symmetric peaks. \\
During the measurement, a strong intensity peak (e.g. Si(111)) should pass through the field of view of every module such that it can be used as a reference angular position to perform the calibration of the modules position. In general the highest peak will be used for the calibration, but this is not necessary in case there would be e.g. geometrical limitations for shifting the detector. \\ \textbf{Do not forget to properly position the beam stopper if the detector is scanned in front of the direct beam.}\\
The detector should be shifted of an angular step of the order of about 2\% of the module size, such that about 50 patterns can contribute to the fitting of the 3 parameters necessary for the angular calibration.\\
All the angular calibration procedure should be acquired using a trimmed detector with the threshold set at half of the X-ray energy (Assuming no fluorescent element in the standard). A flat field should also be acquired in order to precisely correct the data, while the X-ray intensity should be kept lower than about 100~kHz per strip in order to avoid the need for rate corrections.
A rough angular conversion file starting from a previous calibration or from the geometric characteristics of the mechanics is an advantage. The angular conversion file should contain a line for each module of the detector with its module number $i$, center $C_{center}^{i}$ and error, conversion radius $p/R^i$ and error, offset $\Theta_o^i$ and error:
\begin{verbatim}
module 0 center 639.5 +- 0 conversion 6.56E-05 +- 0 offset 0 +- 0
\end{verbatim}
Also the \textit{global offset} value of the beamline should be approximately known i.e. the angular position of channel 0 of module 0 when the motor is set at 0. \\
All the documentation assumes that the detector is oriented in the same direction as the encoder position i.e. large channel number at higher angles (both per module and absolute). If this is not the case, the \textit{angular direction} should be set to -1.
\subsection{Software}
For the acquisition ot the data you need to install the slsDetector software package (please refere to separate documentation). The use of the GUI is optional and all operations can be performed also using the text client.\\
Please make sure that you have edited the \\
\textit{slsDetectorSoftware/usersFunctions/angleFunction.h} \\
in order to match the angular conversion for your geometry and \\
\textit{slsDetectorSoftware/usersFunctions/usersFunctions.cpp} \\
in order to be able to move the detector and read out its position by using the slsDetector software.
In the following the command to acquire a dataset for the angular calibration with an exposure time of 1~s, and position shift
\begin{verbatim}
#setup angular calibration log mode
> sls_detector_put angcallog 1
#set exposure time to 1s
> sls_detector_put exptime 1.
#setup threshold scan
> sls_detector_put scan0script position
#setup the precision for the scan variable in the file name
> sls_detector_put scan0prec 2
#set scan range between 20deg and -60deg, step of -0.1deg
# (at 12.4 keV the Si(111) peak is at approx 19deg
> sls_detector_put scan0range 20 -60 -0.1
#acquire the data
> sls_detector_acquire
#unset angular calibration log mode
> sls_detector_put angcallog 0
\end{verbatim}
With the GUI you can obtain the same results by clicking on the \textit{Angular calibration} log button in the advanced tab (see figure~\ref{fig:guiangcallog}) and setting up the motor position scan in the Actions tab (see figure~\ref{fig:guiposscan}). The exposure time should also be set in the measurement tab.
Additional to the data files, the acquisition will produce a .angcal file containing an header and, for each step of the acquisition, the exect value of the motor position and the file name. \\
In case you forgot to enable the angcallog flag in the software, you can produce the file with the syntax as follows, assuming that you know the exact values of your encoder for each frame:
\begin{verbatim}
type Mythen
maxmod 32
nmod 32
angconv /scratch/angcal20120422/ang.off
globaloff 5.088
fineoff 0.0
angdir 1
ffdir /scratch/angcal20120422/
flatfield flatfield_E12keV_T6keV_0.raw
badchannels /scratch/cal/bad.chans
19.99998 angcal_S20.00_0
19.90001 angcal_S19.90_0
19.79999 angcal_S19.80_0
19.70002 angcal_S19.70_0
......
\end{verbatim}
\begin{figure}
\caption{Acquisition GUI window to enable the angular calibration log.} \label{fig:guiangcallog}
\includegraphics[width=\textwidth]{enable_angcal.eps}
\end{figure}
\begin{figure}
\caption{Acquisition GUI window to setup the motor position scan.} \label{fig:guiposscan}
\includegraphics[width=\textwidth]{position_scan.eps}
\end{figure}
\newpage
\section{Data analysis}
The data analysis consists in fitting with a gaussian the selected peak of the powder pattern for each position in order to determine its position is channel number as a function of the encoder position. \\
In a second step, for each module, the channel vs. encoder curve is fitted in order to extrapolate the three parameters necessary for the angular conversion and the result is written to file
\subsection{Software}
The software used for the angular calibration data analysis is based on root (see http://root.cern.ch).\\
This can be downloaded as binary or installed from sources. The version of the software should not play an important role, but up to now everything has been implemented and tested using version 5.20.
To start the data analysis simply launch:
\begin{verbatim}
> ./angularCalibrationWizard
\end{verbatim}
\begin{figure}
\caption{Overview of the nagular calibration dataset.} \label{fig:setangcal}
\includegraphics[width=\textwidth]{setupAngcal.eps}
\end{figure}
To setup the angular calibration dataset, the .angcal file should be selected (or digited) and the load button should be pressed to confirm. The parameters of the angular calibration are then read to the file and the data loaded for a quick overview (see figure~\ref{fig:setangcal}).\\
The software assumes that the data files (.raw) and the .encal file are in the same directory.\\
A 2D color plot will show a rebinned overview of the dataset. The peak to be fitted should be visible as a high intensity diagonal line passing through all the channels.
\begin{figure}
\caption{Preview of the fitting of the Si(111) peak for one of the detector positions.} \label{fig:peakfit}
\includegraphics[width=\textwidth]{peakFit.eps}
\end{figure}
For a more detailed view of the data, one can select an angular calibration step from the combo box, select the plot mode (raw data or processed data as a function of channel number, processed angular converted data, flat field data, or again an overview of the whole dataset). \\
By (right) clicking close to the axis you are able to zoom in/out, set the scale to logarithmic etc.\\
If the bad channel list, angular conversion file or flat field file are changed compared to the acquisition, they can be reloaded by editing the correspondent text entries and pressing enter.
In particular, the angular converted data should be checked in order to view the position of the selected peak. In this case, the plot will be zoomed to the angular region slected in the minimum and maximum angle entries. By pressing fit, the fit of the peak in the selected angular range will be shown (see figure~\ref{fig:peakfit}). It is useful to check that it works properly in several positions such that then the sequential fitting on all steps can give good results.
To automatically fit all positions simply press \textit{Proceed to Modules Calibration} and wait until all steps are fitted. This can take sometime, depending on the number of steps.
\begin{figure}
\caption{Window for fitting the angular calibration parameters of a module.} \label{fig:anglefit}
\includegraphics[width=\textwidth]{angleFit.eps}
\end{figure}
In the module calibration window (see figure~\ref{fig:anglefit}), you will be able to fit the channel number to encoder position curve to estimate the three angular calibration parameters for each module.\\
The entries show the angular calibration parameters used for approximate angular conversion in the previous step of the calibration. These can be edited and will be used as start parameters for the fit.
By clicking on the check box next to the parameters, the selected parameter will be set and fixed during the fit. Often the center is used as a fix parameter.\\
It is possible to navigate between modules by using the Previous and Next module buttons. To refit the current module (e.g. after changing one of the parameters) simply re-click on the module number.
After fitting all modules you can click on the \textit{Write Angular Calibration} button, select the file name to write to and save the calibration angulat calibration data. Please note that the offset of module 0 will always be 0 and the other values will be rescaled to its value. Therefore the global offset of the steup will always need to be specified for a proper angular conversion unless the home of the encoder will not be redifined.
\section{Setup calibration files}
To use the generated angular calibration files, using the text client:
\begin{verbatim}
sls_detector_put angconv /scratch/ang_new.off
\end{verbatim}
while for the GUI the file name should be specified in the configuration file (works also for the text client).
\end{document}

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

View File

@ -1,17 +0,0 @@
\documentclass{article}
\usepackage{amssymb}
\usepackage[dvips]{graphicx}
\usepackage{verbatim}
\begin{document}
\title{Angular calibration wizard manual}
\author{Anna Bergamaschi}
\date{\today}
\maketitle
\section{Introduction}
\input{ancCal.tex}
\end{document}

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

View File

@ -1,24 +0,0 @@
\documentclass{report}
\usepackage{amssymb}
\usepackage[dvips]{graphicx}
\usepackage{verbatim}
\begin{document}
\title{Calibration wizards manual}
\author{Anna Bergamaschi}
\date{\today}
\maketitle
\chapter{Installation}
\input{installation.tex}
\chapter{Energy calibration}
%\section{Introduction}
\input{enCal.tex}
\chapter{Angular calibration}
%\section{Introduction}
\input{ancCal.tex}
\end{document}

View File

@ -1,214 +0,0 @@
The choice of the level of the comparator threshold plays a very important role in counting systems since it influences the efficiency of the detector as well as its spatial resolution (for details see the paper Bergamaschi, A. et al. (2010). J. Synchrotron Rad. 17, 653-668).
Single-photon-counting detectors are sensitive to single photons and the only limitation on the fluctuations of the number of counts is given by the Poisson-like statistics of the X-ray quanta.
The digitized signal does not carry any information concerning the energy of the X-rays and all photons with an energy larger than the threshold are counted as one bit. This means that the choice of the correct comparator threshold level is critical in order to obtain good-quality data.\\
Figure~\ref{fig:thrscanexpl} shows the expected number of counts as a function of the threshold energy for $N_0$ monochromatic X-rays of energy $E_0$. This is often denominated S-curve and can be interpreted as the integral of the signal spectrum between the threshold level and infinity.
The dashed curve represents the behavior of an ideal counting system: nothing is counted for thresholds larger than the photon energy and all the $N_0$ X-rays are counted for thresholds lower than $E_0$.
The thick solid line represents the physical curve which also takes into account the electronic noise and the charge sharing between channels.
The intrinsic noise on the electronic signal is defined by the Equivalent Noise Charge ($ENC$). The $ENC$ describes noise in terms of the charge at the detector input needed to create the same output at the end of the analog chain and is normally expressed in electrons. For silicon sensors, it can be converted into energy units by considering 1~$e^-$=3.6~eV.
The value of the $ENC$ normally depends on the shaping settings of the analog chain and increases with shorter shaping times.
The resulting electronic signal spectrum is then given by a convolution between the radiation spectrum and the noise i.e., a Gaussian of standard deviation $ENC$.
The S-curve for a monochromatic radiation beam is well described by a Gaussian cumulative distribution $D$ with an additional increase at low threshold due to the baseline noise, as shown by the solid thin line.
Moreover, when a photon is absorbed in the region between two strips of the sensor, the generated charge is partially collected by the two nearest electronic channels. For this reason the physical S-curve is not flat but can be modeled by a decreasing straight line. The number of shared photons $N_S$ is given by the difference between the number of counts and the number of X-rays whose charge is completely collected by the strip (shown by the dotted line).
The number of counts in the physical case is equal to that in the ideal case for a threshold set at half the photon energy. This defines the optimal threshold level $E_t=E_0/2$.\\
The detector response $N$ as a function of the threshold energy $E_t$ is given by the sum of the noise counts $N_n$ and the counts originating from photons $N_\gamma$:
\begin{equation}
N_\gamma(E_t)=\frac{N_0}{2}\cdot\Big(1+C_s \frac{E_0-2E_t}{E_0}\Big)D \Big(\frac{E_0-E_t}{ENC} \Big), \label{eq:thrscan}
\end{equation}
where $C_s$ is the fraction of photons which produce a charge cloud which is shared between neighboring strips ($N_s=C_s N_0$).\\
By assuming a noise of Gaussian type, and considering its bandwidth limited by the shaping time $\tau_s$, the number of noise counts in the acquisition time $T$ can be approximated as:
\begin{equation}
N_n(E_t) \sim \frac{T}{\tau_s} D \Big(\frac{-E_t}{ENC} \Big). \label{eq:noisescan}
\end{equation}
The choice of the comparator threshold level $E_t$ influences not only the counting efficiency and noise performances, but also the spatial resolution and the counting statistics of the detector.
If the threshold is set at values higher than the ideal value $E_t=E_0/2$, a fraction of the photons absorbed in the sensor in the region between two strips is not counted thus reducing the detector efficiency but improving its spatial resolution (narrower strip size). On the other hand, if the threshold is set at values lower than $E_t$, part of the X-rays absorbed in the region between two strips are counted by both of them, resulting in a deterioration of the spatial resolution of the detector and of the fluctuations on the number of photons because of the increased multiplicity.
Furthermore, the threshold uniformity is particularly critical with regards to fluorescent radiation emitted by the sample under investigation. Since the emission of fluorescent light is isotropic, the data quality will be improved by setting the threshold high enough in order to discard the fluorescence background (see figure~\ref{fig:thrscanfluo}). \\
Moreover, setting the threshold too close to the energy of the fluorescent light gives rise to large fluctuations between channels in the number of counts since the threshold sits on the steepest part of the threshold scan curve for the fluorescent background. These differences cannot be corrected by using a flat-field normalization since the fluorescent component is not present in the reference image. For this reason, it is extremely important that the threshold uniformity over the whole detector is optimized. The threshold level must be set at least $\Sigma>3\,ENC$ away from both the fluorescent energy level and the X-ray energy in order to remove the fluorescence background while efficiently count the diffracted photons.
The comparator threshold is given by a global level which can be set on a module basis and adds to a component which is individually adjustable for each channel. In order to optimize the uniformity of the detector response it is important to properly adjust the threshold for all channels. \\
Since both the signal amplification stages and the comparator are linear, it is necessary to calibrate the detector offset $O$ and gain $G$ in order to correctly set its comparator threshold $V_t$ at the desired energy $E_t$:
\begin{equation}
V_{t}=O+G \cdot E_t.\label{eq:encal}
\end{equation}
This is initially performed by acquiring measurements while scanning the global threshold using different X-ray energies and calculating the median of the counts at each threshold value for each module $i$. The curves obtained for one of the detector modules at three energies are shown in figure~\ref{fig:modulecalibration}. The experimental data are then fitted according to equation~\ref{eq:thrscan} and for each module a linear relation is found between the X-ray energy and the estimated inflection point, as shown in the inset of figure~\ref{fig:modulecalibration}. The resulting offset $O_i$ and gain $G_i$ are used as a conversion factor between the threshold level and the energy.
\begin{figure}
\caption{Expected counts as a function of a threshold energy for a monochromatic beam of energy $E_0$=12~keV. $N_0$=10000 is the number of photons absorbed by the detector during the acquisition time. The dashed line represents the curve in an ideal case without electronic noise and charge sharing, the solid thin line with noise $ENC$=1~keV but without charge sharing and the solid thick line is the physical case with noise and $CS=$22~\% charge sharing. $N_S$ is the number of photons whose charge is shared between neighbouring strips ($CS=\frac{N_S}{N_0}$). The dotted line represents the number of photons whose charge is completely collected by a single strip.}\label{fig:thrscanexpl}
\includegraphics[width=\textwidth]{fig4.eps}
\end{figure}
\begin{figure}
\caption{Measured threshold scan at 12.5~keV with the three different settings. In the inset the fit of the experimental data with the expected curve as in function~\ref{eq:thrscan} is shown in the region of the inflection point.} \label{fig:expthrscan}
\includegraphics[width=\textwidth]{fig5.eps}
\end{figure}
\begin{figure}
\caption{Number of counts as a function of the threshold measured from a sample containing iron ($E_f$=5.9~keV) when using X-rays of energy $E_0$=12~keV. In this case, setting the threshold at $E_0/2$, which is very close to $E_f$, would give $\Delta \sim$10\% counts from the fluorescense background. Therefore the threshold should be set at an intermediate level $E_t$ between the two energy components with a distance of at least $\Sigma>3ENC$ from both $E_f$ and $E_0$.}\label{fig:thrscanfluo}
\includegraphics[width=\textwidth]{fig7.eps}
\end{figure}
Differences in gain and offset are present also between individual channels within a module and therefore the use of threshold equalization techniques (trimming) using the internal 6-bit DAC is needed in order to reduce the threshold dispersion.
Since both gain and offset have variations between channels, the optimal trimming should be performed as a function of the threshold energy.
Please not that trimming of the channels of the detector should be performed in advanced and is extremely important for a succeful energy calibration of the detector.
All energy calibration procedures should be applied to a trimmed detector and only an improvement of the existing trimbits can be performed afterwards, since it does not significatively affect the energy calibration.
\begin{figure}
\caption{Median of the number of counts as a function of the threshold for X-rays of 12.5, 17.5 and 25~keV for one of the detector modules using \textit{standard} settings. The solid line represents the fit of the experimental points with equation~\ref{eq:thrscan}. In the inset the linear fit between the X-ray energy and the position of the inflection point of the curves is shown.}\label{fig:modulecalibration}
\includegraphics[width=\textwidth]{fig8.eps}
\end{figure}
\newpage
\section{Data acquisition}
The energy calibration consists in acquiring threshold scans using the detector at at least 2 (better 3) energies. A monochromatic beam is ideal in this procedure, but beam obtained from some fluorescent sample is also good.\\
Please note that the statistic is important to succesfully analyze the data. Normally the exposure time for each step should be chosen in order to achieve at least 1000 counts per step.
If this is not possible it is better to reduce the scan range or enlarge the scan step rather than acquiring data with a too low statics.
With a quick acquisition or threshold scan it is useful to define the range of the scan and the exposure time. It is important to start from a threshold high enough that (almost) all channels of the detector have a negligible number of counts and that the plateau of the S-curve is long enough to correctly estimate the number of photons.
\subsection{Software}
For the acquisition ot the data you need to install the slsDetector software package (please refere to separate documentation). The use of the GUI is optional and all operations can be performed also using the text client.\\
In the following the command to acquire a dataset for the energy calibration with an exposure time of 1~s, and threshold scan range between 200 and 850 with a setp of 1 DAC unit.
\begin{verbatim}
> sls_detector_put encallog 1 #setup energy calibration
> sls_detector_put exptime 1. #set exposure time to 1s
> sls_detector_put scan0script threshold #setup threshold scan
> sls_detector_put scan0range 200 850 1 #set scan range between 200 and 850, step of 1
> sls_detector_acquire #acquire the data
> sls_detector_put encallog 0 #unset energy calibration
\end{verbatim}
With the GUI you can obtain the same results by clicking on the \textit{Energy Calibration} log button in the advanced tab (see figure~\ref{fig:guiencallog}) and setting up the threshold scan in the Actions tab (see figure~\ref{fig:guithrscan}). the exposure time should also be set in the measurement tab.
This procedure should be executed at at least 2 (better 3) energies.
Additional to the data files, the acquisition will produce a .encal file containing an header and, for each step of the acquisition, the threshold value and the file name. \\
In case you forgot to enable the encallog flag in the software, you can produce the file with the syntax as follows:
\begin{verbatim}
settings standard
type Mythen+
nmod 12
modulenumber:0 000
modulenumber:1 111
modulenumber:2 222
modulenumber:3 333
modulenumber:4 444
modulenumber:5 555
modulenumber:6 666
modulenumber:7 777
modulenumber:8 888
modulenumber:9 999
modulenumber:10 aaa
modulenumber:11 bbb
450 standard_12_4keV_S450_0
460 standard_12_4keV_S460_0
470 standard_12_4keV_S470_0
480 standard_12_4keV_S480_0
490 standard_12_4keV_S490_0
500 standard_12_4keV_S500_0
510 standard_12_4keV_S510_0
520 standard_12_4keV_S520_0
...
...
\end{verbatim}
\begin{figure}
\caption{Acquisition GUI window to enable the energy calibration log.} \label{fig:guiencallog}
\includegraphics[width=\textwidth]{GUI_Advanced.eps}
\end{figure}
\begin{figure}
\caption{Acquisition GUI window to setup the threshold scan.} \label{fig:guithrscan}
\includegraphics[width=\textwidth]{GUI_ThresholdScan.eps}
\end{figure}
\newpage
\section{Data analysis}
The data analysis consists in fitting the S-curves obtained from the datasets acquired as above and then performing a linear fit between the energy values and the inflection points.
\subsection{Software}
The software used for the energy calibration data analysis is based on root (see http://root.cern.ch).\\
This can be downloaded as binary or installed from sources. The version of the software should not play an important role, but up to now everything has been implemented and tested using version 5.20.
To start the data analysis simply launch:
\begin{verbatim}
> ./energyCalibrationWizard
\end{verbatim}
To add anew energy write the energy value and select (or digit) the name of the .encal file corresponding to that energy (see figure~\ref{fig:addenergy}).\\
The software assumes that the data files (.raw) and the .encal file are in the same directory.
Press \textit{Preview} and a 2D color plot will be displayed, showing the channel numbers on the X-axis, the threshold on the Y-axis, and the number of counts as a color scale.
By (right) clicking close to the axis you are able to zoom in/out, set the scale to logarithmic etc.\\
If the plot corresponds to your expectations press \textit{Add to list}. The energy value will be shown in the combo box on top and labels will display the settings of the detector, the number of modules, the number of channels per module and the modules serial numbers.
Add then all the other energies to the calibration always by editing the energy value and .encal file name, pressing \textit{preview} and \textit{add to list}.\\
If the settings, number of modules or serial numbers do not match, you will not be llowed to add the energy.\\
By using the \textit{selected energy actions} you can navigate in the combo box with list of energies, view the plots and eventually remove the ones you don't want to use in your calibration.\\
Once you have uploaded at least 2 energies, you will be allowed to \textit{proceed to module calibration}.
\begin{figure}
\caption{Window to add energies to the calibration.} \label{fig:addenergy}
\includegraphics[width=\textwidth]{addEnergy.eps}
\end{figure}
In the module calibration window (see figure~\ref{fig:calibratemodule}), you are still able to look at the calibration summary, and eventually return to the previous windown by pressing \textit{Back to energy setup}.\\
The canvas will show the plot of the S-curves relative to the median of the selected module, fitted with equation~\ref{eq:thrscan} and the linear fit between the energy values and the fitted inflection points.
Normally the points lie on a straight line (although often not perfect), therefore it should be simple to spot if there are problems in the fitting of some of the data.\\
If \textit{Manual save} is unclicked, the calibration files will be saved locally, with the extension automatically generated by using the modules serial numbers, every time a linear fit is performed (i.e. if you mess up wiht the linear fit you overwrite a previous good file!). If you click the checkbox, you need to save the calibration by pressing \textit{Write to file} for each module once you are happy with the fit.
To change the Y scale of the plot, edit the \textit{Counts} entry. After clicking of the energy button (eventually twice) the maximum of the histogram will be set to three times the value.
To re-fit one energy with modified range or start parameters, you should press the central button with the energy value once the energy is selected. The text color tells you which curve you are referring to.\\
You should set the range of the fit. In particular the maximum should be limited in order to avoid to enter the noise range (and can be pretty different for the various modules).\\
Normally the data are acquired by collecting holes from the detector and therefore the \textit{Invert axis} check button should be ckecked. Uncheck it in case your detector collects electrons (e.g. CdTe, Si n in p)
You can change the start values of the parameters of the fits by editing the number eneries. The label nearby will show you the actual value of the fitted parameters.\\
By checking the checkboxes you can fix the values to the ones you specify.\\
Normally it can be useful to fix the pedestal and pedestal slope to 0, unless you have a lot of 3rd armnonics contribution, primary beam background or similar.\\
Changing the starting value of the inflection point or of the number of counts can often help the fit to converge.\\
Normally it is not very useful to change the starting value for the noise or charge sharing slope.
The button \textit{Finished} will be enebled only once the calibration files have been generated for all modules.
\begin{figure}
\caption{Window to calibrate the modules.} \label{fig:calibratemodule}
\includegraphics[width=\textwidth]{calibrateModule.eps}
\end{figure}
\newpage
\section{Setup calibration files}
To use the genrated calibration files as default ones, copy them into your default \textit{caldir/settings} renaming them calibration.snxxx, where snxxx is the extension that the genrated files already have, which corresponds to the module serial number.\\
Fot this scope, a script as following can be used:
\begin{verbatim}
for i in $(ls newcal_standard.sn* | awk -F "." '{print $2}'); do \
mv newcal_standard.$i caldir/standard/calibration.$i; \
done
\end{verbatim}
By reloading the default detector settings, the calibration coefficients will be automatically loaded.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

View File

@ -1,16 +0,0 @@
\documentclass{article}
\usepackage{amssymb}
\usepackage[dvips]{graphicx}
\usepackage{verbatim}
\begin{document}
\title{Energy calibration wizard manual}
\author{Anna Bergamaschi}
\date{\today}
\maketitle
\section{Introduction}
\input{enCal.tex}
\end{document}

View File

@ -1,135 +0,0 @@
%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 0 0 567 550
%%Title: /afs/psi.ch/project/mythen/mythen_datasheet/article/thrscan_expl.eps: c1
%%Creator: ROOT Version 5.17/02
%%CreationDate: Tue Oct 28 10:15:04 2008
%%EndComments
%%BeginProlog
80 dict begin
/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
/mp {newpath /y exch def /x exch def} def
/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
0 w3 neg d w3 neg 0 d cl s } def
/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl fill gr} def
/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl s gr} def
/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
sub m w w d s} def
/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
/reencdict 24 dict def /ReEncode {reencdict begin /nco&na exch def
/nfnam exch def /basefontname exch def /basefontdict basefontname findfont def
/newfont basefontdict maxlength dict def basefontdict {exch dup /FID ne
{dup /Encoding eq {exch dup length array copy newfont 3 1 roll put} {exch
newfont 3 1 roll put} ifelse} {pop pop} ifelse } forall newfont
/FontName nfnam put nco&na aload pop nco&na length 2 idiv {newfont
/Encoding get 3 1 roll put} repeat nfnam newfont definefont pop end } def
/accvec [ 176 /agrave 181 /Agrave 190 /acircumflex 192 /Acircumflex
201 /adieresis 204 /Adieresis 209 /ccedilla 210 /Ccedilla 211 /eacute
212 /Eacute 213 /egrave 214 /Egrave 215 /ecircumflex 216 /Ecircumflex
217 /edieresis 218 /Edieresis 219 /icircumflex 220 /Icircumflex
221 /idieresis 222 /Idieresis 223 /ntilde 224 /Ntilde 226 /ocircumflex
228 /Ocircumflex 230 /Odieresis 231 /ucircumflex 236 /Ucircumflex
237 /udieresis 238 /Udieresis 239 /aring 240 /odieresis 242 /Aring 243 /ydieresis
244 /Ydieresis 246 /aacute 247 /Aacute 252 /ugrave 253 /Ugrave
127 /atilde 128 /Atilde 129 /oacute 130 /Oacute 131 /iacute
132 /Iacute 133 /igrave 134 /Igrave 135 /otilde 136 /Otilde
137 /uacute 138 /Uacute] def
/Times-Roman /Times-Roman accvec ReEncode
/Times-Italic /Times-Italic accvec ReEncode
/Times-Bold /Times-Bold accvec ReEncode
/Times-BoldItalic /Times-BoldItalic accvec ReEncode
/Helvetica /Helvetica accvec ReEncode
/Helvetica-Oblique /Helvetica-Oblique accvec ReEncode
/Helvetica-Bold /Helvetica-Bold accvec ReEncode
/Helvetica-BoldOblique /Helvetica-BoldOblique accvec ReEncode
/Courier /Courier accvec ReEncode
/Courier-Oblique /Courier-Oblique accvec ReEncode
/Courier-Bold /Courier-Bold accvec ReEncode
/Courier-BoldOblique /Courier-BoldOblique accvec ReEncode
/oshow {gsave [] 0 sd true charpath stroke gr} def
/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
text sw pop xs add /xs exch def} def
/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
pop neg xs add /xs exch def} def
/accspe [ 65 /plusminus 66 /bar 67 /existential 68 /universal
69 /exclam 70 /numbersign 71 /greater 72 /question 73 /integral
74 /colon 75 /semicolon 76 /less 77 /bracketleft 78 /bracketright
79 /greaterequal 80 /braceleft 81 /braceright 82 /radical
83 /spade 84 /heart 85 /diamond 86 /club 87 /lessequal
88 /multiply 89 /percent 90 /infinity 48 /circlemultiply 49 /circleplus
50 /emptyset 51 /lozenge 52 /bullet 53 /arrowright 54 /arrowup
55 /arrowleft 56 /arrowdown 57 /arrowboth 48 /degree 44 /comma 43 /plus 45 /angle 42 /angleleft 47 /divide 61 /notequal 40 /equivalence 41 /second 97 /approxequal 98 /congruent 99 /perpendicular 100 /partialdiff 101 /florin 102 /intersection
103 /union 104 /propersuperset 105 /reflexsuperset 106 /notsubset 107 /propersubset 108 /reflexsubset 109 /element 110 /notelement 111 /gradient 112 /logicaland 113 /logicalor 114 /arrowdblboth 115 /arrowdblleft 116 /arrowdblup 117 /arrowdblright
118 /arrowdbldown 119 /ampersand 120 /omega1 121 /similar 122 /aleph ] def
/Symbol /Special accspe ReEncode
%%EndProlog
%%BeginSetup
%%EndSetup
newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 3 lw 1 1 1 c 2268 2199 0 0 bf black 1 1 1 c 1815 1761 339 319 bf black 1815 1761 339 319 bl 1 1 1 c 1815 1761 339 319 bf black 1815 1761 339 319 bl 1 1 1 c black 339 319 m 1815 X s 339 319 m
1815 X s
gsave 2268 2199 0 0 C 1652 151 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (Energy \(keV\)) show NC gr 339 372 m -53 Y s 392 345 m -26 Y s 446 345 m -26 Y s 499 345 m -26 Y s 553 372 m -53 Y s 606 345 m -26 Y s 659 345 m -26 Y s 713 345 m -26
Y s 766 372 m -53 Y s 819 345 m -26 Y s 873 345 m -26 Y s 926 345 m -26 Y s 980 372 m -53 Y s 1033 345 m -26 Y s 1086 345 m -26 Y s 1140 345 m -26 Y s 1193 372 m -53 Y s 1246 345 m -26 Y s 1300 345 m -26 Y s 1353 345 m -26 Y s 1407 372 m -53 Y s
1460 345 m -26 Y s 1513 345 m -26 Y s 1567 345 m -26 Y s 1620 372 m -53 Y s 1673 345 m -26 Y s 1727 345 m -26 Y s 1780 345 m -26 Y s 1834 372 m -53 Y s 1887 345 m -26 Y s 1940 345 m -26 Y s 1994 345 m -26 Y s 2047 372 m -53 Y s 2047 372 m -53 Y s
2100 345 m -26 Y s 2154 345 m -26 Y s
gsave 2268 2199 0 0 C 316 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 527 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (2) show NC gr
gsave 2268 2199 0 0 C 741 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (4) show NC gr
gsave 2268 2199 0 0 C 954 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (6) show NC gr
gsave 2268 2199 0 0 C 1168 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (8) show NC gr
gsave 2268 2199 0 0 C 1359 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (10) show NC gr
gsave 2268 2199 0 0 C 1573 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (12) show NC gr
gsave 2268 2199 0 0 C 1786 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (14) show NC gr
gsave 2268 2199 0 0 C 2000 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (16) show NC gr 339 319 m 1761 Y s
gsave 2268 2199 0 0 C 85 1798 t 90 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (Counts) show NC gr 393 319 m -54 X s 366 363 m -27 X s 366 407 m -27 X s 366 451 m -27 X s 393 495 m -54 X s 366 539 m -27 X s 366 583 m -27 X s 366 627 m -27 X s 393
671 m -54 X s 366 715 m -27 X s 366 759 m -27 X s 366 803 m -27 X s 393 847 m -54 X s 366 891 m -27 X s 366 935 m -27 X s 366 979 m -27 X s 393 1023 m -54 X s 366 1067 m -27 X s 366 1111 m -27 X s 366 1155 m -27 X s 393 1199 m -54 X s 366 1243 m
-27 X s 366 1287 m -27 X s 366 1331 m -27 X s 393 1375 m -54 X s 366 1419 m -27 X s 366 1463 m -27 X s 366 1507 m -27 X s 393 1552 m -54 X s 366 1596 m -27 X s 366 1640 m -27 X s 366 1684 m -27 X s 393 1728 m -54 X s 366 1772 m -27 X s 366 1816 m
-27 X s 366 1860 m -27 X s 393 1904 m -54 X s 366 1948 m -27 X s 366 1992 m -27 X s 366 2036 m -27 X s 393 2080 m -54 X s
gsave 2268 2199 0 0 C 285 282 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 145 459 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (2000) show NC gr
gsave 2268 2199 0 0 C 145 635 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (4000) show NC gr
gsave 2268 2199 0 0 C 145 812 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (6000) show NC gr
gsave 2268 2199 0 0 C 145 989 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (8000) show NC gr
gsave 2268 2199 0 0 C 100 1162 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (10000) show NC gr
gsave 2268 2199 0 0 C 100 1339 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (12000) show NC gr
gsave 2268 2199 0 0 C 100 1516 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (14000) show NC gr
gsave 2268 2199 0 0 C 100 1692 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (16000) show NC gr
gsave 2268 2199 0 0 C 100 1869 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (18000) show NC gr
gsave 2268 2199 0 0 C 100 2043 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (20000) show NC gr 9 lw 0.95 0.95 0.95 c black 584 2080 m 18 -143 d 18 -243 d 18 -158 d 19 -101 d 18 -63 d 18 -40 d 18 -25 d 18 -16 d 18 -12 d 18 -9 d 19 -7 d 18 -7 d
18 -6 d 18 -6 d 18 -5 d 18 -6 d 19 -6 d 18 -6 d 18 -6 d 18 -5 d 18 -6 d 18 -6 d 18 -6 d 19 -5 d 18 -6 d 18 -6 d 18 -6 d 18 -5 d 18 -6 d 18 -6 d 19 -6 d 18 -5 d 18 -6 d 18 -6 d 18 -6 d 18 -6 d 18 -5 d 19 -6 d 18 -7 d 18 -6 d 18 -7 d 18 -7 d 18 -8 d
18 -9 d 19 -11 d 18 -13 d 18 -16 d 18 -19 d 18 -22 d s 1473 981 m 18 -26 d 19 -31 d 18 -36 d 18 -39 d 18 -44 d 18 -46 d 18 -48 d 18 -49 d 19 -48 d 18 -46 d 18 -44 d 18 -39 d 18 -34 d 18 -30 d 18 -25 d 19 -20 d 18 -16 d 18 -12 d 18 -9 d 18 -7 d 18
-4 d 18 -3 d 19 -3 d 18 -1 d 18 -1 d 18 X 18 -1 d 182 X s[ 4 8] 0 sd 0.95 0.95 0.95 c black 348 996 m 889 X s 1237 996 m 37 X 18 -1 d 18 X 18 -1 d 18 -1 d 18 -3 d 18 -3 d 19 -5 d 18 -6 d 18 -9 d 18 -13 d 18 -16 d 18 -20 d 19 -24 d 18 -29 d 18 -34 d
18 -38 d 18 -42 d 18 -44 d 18 -45 d 19 -46 d 18 -44 d 18 -42 d 18 -39 d 18 -35 d 18 -30 d 18 -25 d 19 -21 d 18 -17 d 18 -12 d 18 -10 d 18 -7 d 18 -5 d 18 -4 d 19 -2 d 18 -2 d 18 -1 d 36 X 18 -1 d 146 X s 2127 319 m 18 X s[ ] 0 sd 3 lw 0.95 0.95
0.95 c black 584 2080 m 18 -263 d 18 -237 d 18 -152 d 19 -95 d 18 -58 d 18 -34 d 18 -19 d 18 -11 d 18 -6 d 18 -3 d 19 -1 d 18 -1 d 36 X 18 -1 d 418 X 18 -1 d 18 X 18 -1 d 18 -2 d 18 -3 d 18 -4 d 19 -6 d 18 -9 d 18 -12 d 18 -16 d 18 -21 d s 1473
1124 m 18 -26 d 19 -32 d 18 -38 d 18 -44 d 18 -49 d 18 -54 d 18 -57 d 18 -60 d 19 -59 d 18 -58 d 18 -54 d 18 -51 d 18 -44 d 18 -40 d 18 -33 d 19 -27 d 18 -21 d 18 -17 d 18 -13 d 18 -9 d 18 -6 d 18 -5 d 19 -3 d 18 -2 d 18 -1 d 18 -1 d 18 X 18 -1 d
164 X s[ 12 12] 0 sd 6 lw 339 1199 m 1281 X s 1620 1199 m -880 Y s 1620 319 m 534 X s[ 12 16 4 16] 0 sd 980 319 m 880 Y s
gsave 2268 2199 0 0 C 1695 319 t 0 r /Helvetica-Bold findfont 68.3734 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 1630 348 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (E) show NC gr
gsave 2268 2199 0 0 C 1054 319 t 0 r /Helvetica-Bold findfont 68.3734 sf 0 0 m (t) show NC gr
gsave 2268 2199 0 0 C 989 348 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (E) show NC gr
gsave 2268 2199 0 0 C 439 1199 t 0 r /Helvetica-Bold findfont 68.3734 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 370 1228 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (N) show NC gr [ ] 0 sd 1545 1067 m 43 X s 3 lw 1588 1086 m 32 -19 d -32 -18 d f 6 lw 1588 1086 m 32 -19 d -32 -18 d 37 Y cl s 3 lw 1545 1049 m -32 18 d 32 19 d f 6 lw
1545 1049 m -32 18 d 32 19 d -37 Y cl s
gsave 2268 2199 0 0 C 1501 1094 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (ENC) show NC gr 926 1029 m 139 Y s 3 lw 908 1168 m 18 31 d 18 -31 d f 6 lw 908 1168 m 18 31 d 18 -31 d -36 X cl s 3 lw 944 1029 m -18 -32 d -18 32 d f 6 lw 944 1029 m
-18 -32 d -18 32 d 36 X cl s
gsave 2268 2199 0 0 C 855 1048 t 0 r /Helvetica-Bold findfont 68.3734 sf 0 0 m (S) show NC gr
gsave 2268 2199 0 0 C 786 1077 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (N) show NC gr
gr gr
showpage
end
%%EOF

View File

@ -1,150 +0,0 @@
%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 0 0 567 550
%%Title: /afs/psi.ch/user/b/bergamaschi/root_macros/paper/thrscanSettings.eps: c1_n4
%%Creator: ROOT Version 5.20/00
%%CreationDate: Wed Dec 3 14:58:49 2008
%%EndComments
%%BeginProlog
80 dict begin
/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
/mp {newpath /y exch def /x exch def} def
/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
0 w3 neg d w3 neg 0 d cl s } def
/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl fill gr} def
/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl s gr} def
/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
sub m w w d s} def
/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
/reEncode {exch findfont dup length dict begin {1 index /FID eq {pop pop} {def} ifelse } forall /Encoding exch def currentdict end dup /FontName get exch definefont pop } def [/Times-Bold /Times-Italic /Times-BoldItalic /Helvetica
/Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique /Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Times-Roman /AvantGarde-Book /AvantGarde-BookOblique /AvantGarde-Demi /AvantGarde-DemiOblique /Bookman-Demi
/Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic /Helvetica-Narrow /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique /Helvetica-Narrow-Oblique /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold
/NewCenturySchlbk-BoldItalic /NewCenturySchlbk-Italic /Palatino-Bold /Palatino-BoldItalic /Palatino-Italic /Palatino-Roman ] {ISOLatin1Encoding reEncode } forall
/oshow {gsave [] 0 sd true charpath stroke gr} def
/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
text sw pop xs add /xs exch def} def
/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
pop neg xs add /xs exch def} def
%%EndProlog
%%BeginSetup
%%EndSetup
newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 6 lw 1 1 1 c 2268 2199 0 0 bf black 3 lw 1 1 1 c 1814 1759 340 330 bf black 1814 1759 340 330 bl 1 1 1 c 1814 1759 340 330 bf black 1814 1759 340 330 bl 1 1 1 c black 340 330 m 1814 X s 6 lw
340 330 m 1814 X s
gsave 2268 2199 0 0 C 1530 123 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (Energy \(keV\)) show NC gr 340 383 m -53 Y s 392 356 m -26 Y s 444 356 m -26 Y s 496 356 m -26 Y s 547 383 m -53 Y s 599 356 m -26 Y s 651 356 m -26 Y s 703 356 m -26
Y s 755 383 m -53 Y s 807 356 m -26 Y s 858 356 m -26 Y s 910 356 m -26 Y s 962 383 m -53 Y s 1014 356 m -26 Y s 1066 356 m -26 Y s 1118 356 m -26 Y s 1169 383 m -53 Y s 1221 356 m -26 Y s 1273 356 m -26 Y s 1325 356 m -26 Y s 1377 383 m -53 Y s
1429 356 m -26 Y s 1480 356 m -26 Y s 1532 356 m -26 Y s 1584 383 m -53 Y s 1636 356 m -26 Y s 1688 356 m -26 Y s 1740 356 m -26 Y s 1791 383 m -53 Y s 1843 356 m -26 Y s 1895 356 m -26 Y s 1947 356 m -26 Y s 1999 383 m -53 Y s 1999 383 m -53 Y s
2051 356 m -26 Y s 2102 356 m -26 Y s 2154 356 m -26 Y s
gsave 2268 2199 0 0 C 316 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 524 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (2) show NC gr
gsave 2268 2199 0 0 C 729 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (4) show NC gr
gsave 2268 2199 0 0 C 937 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (6) show NC gr
gsave 2268 2199 0 0 C 1145 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (8) show NC gr
gsave 2268 2199 0 0 C 1330 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (10) show NC gr
gsave 2268 2199 0 0 C 1538 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (12) show NC gr
gsave 2268 2199 0 0 C 1744 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (14) show NC gr
gsave 2268 2199 0 0 C 1951 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (16) show NC gr 340 330 m 1759 Y s
gsave 2268 2199 0 0 C 94 1177 t 90 r /Helvetica-Bold findfont 102.56 sf 0 0 m (Normalized counts) show NC gr 395 330 m -55 X s 367 374 m -27 X s 367 418 m -27 X s 367 462 m -27 X s 395 506 m -55 X s 367 550 m -27 X s 367 594 m -27 X s 367 638 m
-27 X s 395 682 m -55 X s 367 726 m -27 X s 367 770 m -27 X s 367 814 m -27 X s 395 858 m -55 X s 367 902 m -27 X s 367 946 m -27 X s 367 990 m -27 X s 395 1034 m -55 X s 367 1078 m -27 X s 367 1122 m -27 X s 367 1166 m -27 X s 395 1210 m -55 X s
367 1254 m -27 X s 367 1298 m -27 X s 367 1342 m -27 X s 395 1386 m -55 X s 367 1430 m -27 X s 367 1474 m -27 X s 367 1518 m -27 X s 395 1562 m -55 X s 367 1606 m -27 X s 367 1650 m -27 X s 367 1693 m -27 X s 395 1737 m -55 X s 367 1781 m -27 X s
367 1825 m -27 X s 367 1869 m -27 X s 395 1913 m -55 X s 367 1957 m -27 X s 367 2001 m -27 X s 367 2045 m -27 X s 395 2089 m -55 X s
gsave 2268 2199 0 0 C 285 293 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 217 470 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0.2) show NC gr
gsave 2268 2199 0 0 C 214 647 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0.4) show NC gr
gsave 2268 2199 0 0 C 214 823 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0.6) show NC gr
gsave 2268 2199 0 0 C 214 997 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0.8) show NC gr
gsave 2268 2199 0 0 C 293 1171 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (1) show NC gr
gsave 2268 2199 0 0 C 217 1348 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (1.2) show NC gr
gsave 2268 2199 0 0 C 214 1524 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (1.4) show NC gr
gsave 2268 2199 0 0 C 214 1701 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (1.6) show NC gr
gsave 2268 2199 0 0 C 214 1877 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (1.8) show NC gr
gsave 2268 2199 0 0 C 285 2051 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (2) show NC gr 1 1 1 c 1112 857 1020 1210 bf 1020 1210 m 4 4 d 849 Y 1104 X 4 4 d -1112 X -857 Y f 1020 1210 m 4 4 d 1104 X 849 Y 4 4 d -857 Y -1112 X f black 3 lw 1 1
1 c 977 755 1132 1295 bf black 977 755 1132 1295 bl 1 1 1 c 977 755 1132 1295 bf black 977 755 1132 1295 bl 1 1 1 c black 1132 1295 m 977 X s 6 lw 1132 1295 m 977 X s 1132 1318 m -23 Y s 1156 1307 m -12 Y s 1180 1307 m -12 Y s 1205 1307 m -12 Y s
1229 1307 m -12 Y s 1254 1318 m -23 Y s 1278 1307 m -12 Y s 1303 1307 m -12 Y s 1327 1307 m -12 Y s 1352 1307 m -12 Y s 1376 1318 m -23 Y s 1400 1307 m -12 Y s 1425 1307 m -12 Y s 1449 1307 m -12 Y s 1474 1307 m -12 Y s 1498 1318 m -23 Y s 1523
1307 m -12 Y s 1547 1307 m -12 Y s 1572 1307 m -12 Y s 1596 1307 m -12 Y s 1621 1318 m -23 Y s 1645 1307 m -12 Y s 1669 1307 m -12 Y s 1694 1307 m -12 Y s 1718 1307 m -12 Y s 1743 1318 m -23 Y s 1767 1307 m -12 Y s 1792 1307 m -12 Y s 1816 1307 m
-12 Y s 1841 1307 m -12 Y s 1865 1318 m -23 Y s 1889 1307 m -12 Y s 1914 1307 m -12 Y s 1938 1307 m -12 Y s 1963 1307 m -12 Y s 1987 1318 m -23 Y s 2012 1307 m -12 Y s 2036 1307 m -12 Y s 2061 1307 m -12 Y s 2085 1307 m -12 Y s 2109 1318 m -23 Y s
gsave 1112 857 1020 1210 C 1100 1265 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (10.5) show NC gr
gsave 1112 857 1020 1210 C 1239 1265 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (11) show NC gr
gsave 1112 857 1020 1210 C 1345 1265 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (11.5) show NC gr
gsave 1112 857 1020 1210 C 1479 1265 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (12) show NC gr
gsave 1112 857 1020 1210 C 1587 1265 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (12.5) show NC gr
gsave 1112 857 1020 1210 C 1724 1265 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (13) show NC gr
gsave 1112 857 1020 1210 C 1832 1265 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (13.5) show NC gr
gsave 1112 857 1020 1210 C 1969 1265 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (14) show NC gr
gsave 1112 857 1020 1210 C 2077 1265 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (14.5) show NC gr 1132 1295 m 755 Y s 1161 1295 m -29 X s 1146 1314 m -14 X s 1146 1333 m -14 X s 1146 1352 m -14 X s 1146 1371 m -14 X s 1161 1390 m -29 X s
1146 1409 m -14 X s 1146 1428 m -14 X s 1146 1446 m -14 X s 1146 1465 m -14 X s 1161 1484 m -29 X s 1146 1503 m -14 X s 1146 1522 m -14 X s 1146 1541 m -14 X s 1146 1560 m -14 X s 1161 1578 m -29 X s 1146 1597 m -14 X s 1146 1616 m -14 X s 1146
1635 m -14 X s 1146 1654 m -14 X s 1161 1673 m -29 X s 1146 1692 m -14 X s 1146 1711 m -14 X s 1146 1729 m -14 X s 1146 1748 m -14 X s 1161 1767 m -29 X s 1146 1786 m -14 X s 1146 1805 m -14 X s 1146 1824 m -14 X s 1146 1843 m -14 X s 1161 1862 m
-29 X s 1146 1880 m -14 X s 1146 1899 m -14 X s 1146 1918 m -14 X s 1146 1937 m -14 X s 1161 1956 m -29 X s 1146 1975 m -14 X s 1146 1994 m -14 X s 1146 2012 m -14 X s 1146 2031 m -14 X s 1161 2050 m -29 X s
gsave 1112 857 1020 1210 C 1108 1285 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (0) show NC gr
gsave 1112 857 1020 1210 C 1085 1379 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (0.1) show NC gr
gsave 1112 857 1020 1210 C 1083 1473 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (0.2) show NC gr
gsave 1112 857 1020 1210 C 1083 1570 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (0.3) show NC gr
gsave 1112 857 1020 1210 C 1080 1664 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (0.4) show NC gr
gsave 1112 857 1020 1210 C 1083 1758 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (0.5) show NC gr
gsave 1112 857 1020 1210 C 1083 1852 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (0.6) show NC gr
gsave 1112 857 1020 1210 C 1083 1946 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (0.7) show NC gr
gsave 1112 857 1020 1210 C 1083 2040 t 0 r /Helvetica-Bold findfont 31.3461 sf 0 0 m (0.8) show NC gr 3 lw 1 1 1 c black /w 24 def /w2 {w 2 div} def /w3 {w 3 div} def 1147 1989 1177 1978 1208 1964 1239 1951 1269 1934 1300 1916 1330 1896 1361 1874
1391 1850 1422 1824 1452 1795 1483 1764 1514 1730 1544 1695 1575 1659 1605 1621 1636 1583 1666 1547 1697 1513 1727 1480 1758 1449 1789 1422 1819 1398 1850 1376 1880 1358 1911 1344 1941 1332 1972 1323 2002 1315 2033 1310 2064 1306 2094 1303 32 { m20
} R 9 lw 0.95 0.95 0.95 c black 1136 1998 m 10 -3 d 10 -3 d 10 -4 d 10 -4 d 9 -3 d 10 -4 d 10 -4 d 10 -4 d 9 -4 d 10 -5 d 10 -5 d 10 -4 d 10 -5 d 9 -6 d 10 -5 d 10 -6 d 10 -6 d 9 -6 d 10 -7 d 10 -6 d 10 -7 d 10 -8 d 9 -7 d 10 -8 d 10 -8 d 10 -8 d 9
-9 d 10 -9 d 10 -9 d 10 -10 d 10 -10 d 9 -10 d 10 -10 d 10 -10 d 10 -11 d 10 -11 d 9 -11 d 10 -11 d 10 -12 d 10 -12 d 9 -11 d 10 -12 d 10 -12 d 10 -12 d 10 -12 d 9 -13 d 10 -12 d 10 -12 d 10 -12 d s 1616 1605 m 9 -12 d 10 -12 d 10 -12 d 10 -11 d 10
-12 d 9 -11 d 10 -11 d 10 -11 d 10 -11 d 9 -11 d 10 -10 d 10 -10 d 10 -10 d 10 -9 d 9 -9 d 10 -9 d 10 -8 d 10 -8 d 9 -8 d 10 -8 d 10 -7 d 10 -6 d 10 -7 d 9 -6 d 10 -6 d 10 -6 d 10 -5 d 9 -5 d 10 -4 d 10 -5 d 10 -4 d 10 -3 d 9 -4 d 10 -3 d 10 -3 d
10 -3 d 9 -3 d 10 -2 d 10 -2 d 10 -3 d 10 -1 d 9 -2 d 10 -2 d 10 -1 d 10 -1 d 9 -2 d 10 -1 d 10 -1 d 10 -1 d s 2095 1303 m 10 X s[ 12 12] 0 sd 3 lw 1 1 1 c black[ ] 0 sd 1147 1972 1177 1960 1208 1944 1239 1929 1269 1911 1300 1891 1330 1870 1361
1847 1391 1822 1422 1795 1452 1767 1483 1737 1514 1704 1544 1672 1575 1639 1605 1607 1636 1573 1666 1541 1697 1510 1727 1481 1758 1454 1789 1429 1819 1407 1850 1388 1880 1370 1911 1355 1941 1343 1972 1332 2002 1324 2033 1317 2064 1312 2094 1308 32
{ m24} R[ 12 12] 0 sd 9 lw 0.95 0.95 0.95 c black 1136 1982 m 10 -4 d 10 -3 d 10 -5 d 10 -4 d 9 -4 d 10 -5 d 10 -5 d 10 -5 d 9 -5 d 10 -5 d 10 -6 d 10 -5 d 10 -6 d 9 -6 d 10 -6 d 10 -6 d 10 -7 d 9 -7 d 10 -7 d 10 -7 d 10 -8 d 10 -7 d 9 -8 d 10 -8 d
10 -9 d 10 -8 d 9 -9 d 10 -9 d 10 -9 d 10 -9 d 10 -10 d 9 -9 d 10 -10 d 10 -10 d 10 -10 d 10 -10 d 9 -10 d 10 -11 d 10 -11 d 10 -10 d 9 -11 d 10 -10 d 10 -11 d 10 -11 d 10 -11 d 9 -11 d 10 -10 d 10 -11 d 10 -11 d s 1616 1592 m 9 -10 d 10 -11 d 10
-10 d 10 -10 d 10 -10 d 9 -10 d 10 -10 d 10 -10 d 10 -10 d 9 -9 d 10 -9 d 10 -9 d 10 -8 d 10 -9 d 9 -8 d 10 -8 d 10 -7 d 10 -8 d 9 -7 d 10 -7 d 10 -7 d 10 -6 d 10 -7 d 9 -5 d 10 -6 d 10 -6 d 10 -5 d 9 -4 d 10 -5 d 10 -5 d 10 -4 d 10 -4 d 9 -4 d 10
-3 d 10 -3 d 10 -4 d 9 -3 d 10 -2 d 10 -3 d 10 -2 d 10 -3 d 9 -2 d 10 -2 d 10 -2 d 10 -1 d 9 -2 d 10 -1 d 10 -2 d 10 -1 d s 2095 1308 m 10 -1 d s[ 4 8] 0 sd 3 lw 1 1 1 c black[ ] 0 sd 1147 2002 1177 1989 1208 1983 1239 1966 1269 1957 1300 1940
1330 1925 1361 1904 1391 1886 1422 1863 1452 1834 1483 1804 1514 1767 1544 1731 1575 1686 1605 1646 1636 1597 1666 1556 1697 1511 1727 1473 1758 1436 1789 1405 1819 1381 1850 1358 1880 1343 1911 1329 1941 1321 1972 1313 2002 1311 2033 1306 2064
1306 2094 1304 32 { m28} R[ 4 8] 0 sd 9 lw 0.95 0.95 0.95 c black 1136 2004 m 10 -3 d 10 -2 d 10 -3 d 10 -3 d 9 -3 d 10 -3 d 10 -3 d 10 -3 d 9 -4 d 10 -3 d 10 -4 d 10 -3 d 10 -4 d 9 -4 d 10 -4 d 10 -5 d 10 -4 d 9 -5 d 10 -5 d 10 -5 d 10 -6 d 10 -6
d 9 -6 d 10 -7 d 10 -7 d 10 -7 d 9 -7 d 10 -9 d 10 -8 d 10 -8 d 10 -10 d 9 -10 d 10 -10 d 10 -10 d 10 -11 d 10 -11 d 9 -11 d 10 -13 d 10 -12 d 10 -13 d 9 -13 d 10 -13 d 10 -14 d 10 -13 d 10 -14 d 9 -15 d 10 -14 d 10 -14 d 10 -14 d s 1616 1625 m 9
-15 d 10 -14 d 10 -14 d 10 -14 d 10 -14 d 9 -13 d 10 -14 d 10 -13 d 10 -13 d 9 -12 d 10 -12 d 10 -12 d 10 -11 d 10 -11 d 9 -10 d 10 -11 d 10 -9 d 10 -8 d 9 -9 d 10 -8 d 10 -8 d 10 -7 d 10 -7 d 9 -5 d 10 -6 d 10 -6 d 10 -5 d 9 -4 d 10 -4 d 10 -4 d
10 -3 d 10 -3 d 9 -3 d 10 -3 d 10 -2 d 10 -2 d 9 -2 d 10 -2 d 10 -1 d 10 -2 d 10 -1 d 9 -1 d 10 -1 d 10 -1 d 10 X 9 -1 d 10 X 10 -1 d 10 X s 2095 1303 m 10 -1 d s[ ] 0 sd 3 lw 1 1 1 c black 632 2089 645 1978 658 1730 671 1586 684 1490 697 1427 709
1390 722 1364 735 1345 748 1334 761 1324 774 1315 787 1309 800 1302 813 1295 826 1289 839 1282 852 1277 865 1270 878 1264 891 1258 904 1251 917 1246 930 1240 943 1234 956 1229 969 1222 982 1216 995 1210 1008 1204 1020 1196 1033 1193 1046 1186 1059
1180 1072 1173 1085 1169 1098 1163 1111 1156 1124 1150 1137 1145 1150 1140 1163 1133 1176 1127 1189 1120 1202 1115 1215 1109 1228 1101 1241 1095 1254 1087 1267 1081 50 { m20} R 632 2089 m 13 -111 d 13 -248 d 13 -144 d 13 -96 d 13 -63 d 12 -37 d 13
-26 d 13 -19 d 13 -11 d 13 -10 d 13 -9 d 13 -6 d 13 -7 d 13 -7 d 13 -6 d 13 -7 d 13 -5 d 13 -7 d 13 -6 d 13 -6 d 13 -7 d 13 -5 d 13 -6 d 13 -6 d 13 -5 d 13 -7 d 13 -6 d 13 -6 d 13 -6 d 12 -8 d 13 -3 d 13 -7 d 13 -6 d 13 -7 d 13 -4 d 13 -6 d 13 -7 d
13 -6 d 13 -5 d 13 -5 d 13 -7 d 13 -6 d 13 -7 d 13 -5 d 13 -6 d 13 -8 d 13 -6 d 13 -8 d 13 -6 d s 1267 1081 1280 1075 1293 1068 1306 1060 1319 1052 1331 1046 1344 1038 1357 1031 1370 1022 1383 1015 1396 1006 1409 998 1422 987 1435 977 1448 966 1461
954 1474 941 1487 925 1500 909 1513 890 1526 869 1539 847 1552 823 1565 796 1578 767 1591 735 1604 702 1617 668 1630 634 1642 598 1655 565 1668 532 1681 502 1694 473 1707 448 1720 425 1733 405 1746 389 1759 375 1772 364 1785 355 1798 348 1811 343
1824 340 1837 337 1850 335 1863 334 1876 333 1889 332 1902 332 50 { m20} R 1267 1081 m 13 -6 d 13 -7 d 13 -8 d 13 -8 d 12 -6 d 13 -8 d 13 -7 d 13 -9 d 13 -7 d 13 -9 d 13 -8 d 13 -11 d 13 -10 d 13 -11 d 13 -12 d 13 -13 d 13 -16 d 13 -16 d 13 -19 d
13 -21 d 13 -22 d 13 -24 d 13 -27 d 13 -29 d 13 -32 d 13 -33 d 13 -34 d 13 -34 d 12 -36 d 13 -33 d 13 -33 d 13 -30 d 13 -29 d 13 -25 d 13 -23 d 13 -20 d 13 -16 d 13 -14 d 13 -11 d 13 -9 d 13 -7 d 13 -5 d 13 -3 d 13 -3 d 13 -2 d 13 -1 d 13 -1 d 13
-1 d 13 X s 1902 332 1915 331 1928 331 1941 331 1953 331 1966 331 1979 331 1992 331 2005 331 2018 331 2031 331 2044 331 2057 331 2070 331 2083 331 2096 331 2109 331 2122 331 2135 331 2148 331 20 { m20} R 1902 332 m 13 -1 d 233 X s[ 12 12] 0 sd 1 1
1 c black[ ] 0 sd 748 2089 761 1386 774 1361 787 1345 800 1325 813 1319 826 1305 839 1294 852 1286 865 1279 878 1270 891 1263 904 1254 917 1247 930 1242 943 1235 956 1229 969 1223 982 1215 995 1210 1008 1204 1020 1197 1033 1191 1046 1185 1059 1181
1072 1174 1085 1168 1098 1161 1111 1155 1124 1148 1137 1142 1150 1136 1163 1130 1176 1124 1189 1116 1202 1110 1215 1104 1228 1097 1241 1091 1254 1083 1267 1076 1280 1069 1293 1061 1306 1054 1319 1046 1331 1038 1344 1030 1357 1022 1370 1011 1383
1004 50 { m24} R[ 12 12] 0 sd 748 2089 m 13 -703 d 13 -25 d 13 -16 d 13 -20 d 13 -6 d 13 -14 d 13 -11 d 13 -8 d 13 -7 d 13 -9 d 13 -7 d 13 -9 d 13 -7 d 13 -5 d 13 -7 d 13 -6 d 13 -6 d 13 -8 d 13 -5 d 13 -6 d 12 -7 d 13 -6 d 13 -6 d 13 -4 d 13 -7 d
13 -6 d 13 -7 d 13 -6 d 13 -7 d 13 -6 d 13 -6 d 13 -6 d 13 -6 d 13 -8 d 13 -6 d 13 -6 d 13 -7 d 13 -6 d 13 -8 d 13 -7 d 13 -7 d 13 -8 d 13 -7 d 13 -8 d 12 -8 d 13 -8 d 13 -8 d 13 -11 d 13 -7 d s[ ] 0 sd 1383 1004 1396 994 1409 983 1422 972 1435
961 1448 949 1461 935 1474 921 1487 903 1500 885 1513 866 1526 845 1539 821 1552 796 1565 769 1578 742 1591 711 1604 681 1617 651 1630 620 1642 589 1655 559 1668 530 1681 503 1694 477 1707 455 1720 434 1733 416 1746 400 1759 386 1772 374 1785 364
1798 356 1811 350 1824 345 1837 341 1850 339 1863 336 1876 334 1889 333 1902 332 1915 332 1928 331 1941 331 1953 331 1966 331 1979 331 1992 331 2005 331 2018 331 50 { m24} R[ 12 12] 0 sd 1383 1004 m 13 -10 d 13 -11 d 13 -11 d 13 -11 d 13 -12 d 13
-14 d 13 -14 d 13 -18 d 13 -18 d 13 -19 d 13 -21 d 13 -24 d 13 -25 d 13 -27 d 13 -27 d 13 -31 d 13 -30 d 13 -30 d 13 -31 d 12 -31 d 13 -30 d 13 -29 d 13 -27 d 13 -26 d 13 -22 d 13 -21 d 13 -18 d 13 -16 d 13 -14 d 13 -12 d 13 -10 d 13 -8 d 13 -6 d
13 -5 d 13 -4 d 13 -2 d 13 -3 d 13 -2 d 13 -1 d 13 -1 d 13 X 13 -1 d 90 X s[ ] 0 sd 2018 331 2031 331 2044 330 2057 330 2070 330 2083 330 2096 330 2109 330 2122 330 2135 330 2148 330 11 { m24} R[ 12 12] 0 sd 2018 331 m 13 X 13 -1 d 104 X s[ 4 8
] 0 sd 1 1 1 c black[ ] 0 sd 515 2089 528 2040 541 1779 554 1647 567 1615 580 1504 593 1472 606 1483 619 1425 632 1409 645 1423 658 1386 671 1377 684 1362 697 1374 709 1345 722 1340 735 1340 748 1322 761 1315 774 1314 787 1301 800 1295 813 1295 826
1281 839 1278 852 1268 865 1269 878 1256 891 1254 904 1249 917 1240 930 1235 943 1233 956 1228 969 1219 982 1217 995 1210 1008 1206 1020 1197 1033 1197 1046 1185 1059 1184 1072 1178 1085 1171 1098 1167 1111 1157 1124 1158 1137 1146 1150 1144 50 {
m28} R[ 4 8] 0 sd 515 2089 m 13 -49 d 13 -261 d 13 -132 d 13 -32 d 13 -111 d 13 -32 d 13 11 d 13 -58 d 13 -16 d 13 14 d 13 -37 d 13 -9 d 13 -15 d 13 12 d 12 -29 d 13 -5 d 13 X 13 -18 d 13 -7 d 13 -1 d 13 -13 d 13 -6 d 13 X 13 -14 d 13 -3 d 13 -10 d
13 1 d 13 -13 d 13 -2 d 13 -5 d 13 -9 d 13 -5 d 13 -2 d 13 -5 d 13 -9 d 13 -2 d 13 -7 d 13 -4 d 12 -9 d 13 X 13 -12 d 13 -1 d 13 -6 d 13 -7 d 13 -4 d 13 -10 d 13 1 d 13 -12 d 13 -2 d s[ ] 0 sd 1150 1144 1163 1135 1176 1133 1189 1123 1202 1122 1215
1111 1228 1108 1241 1103 1254 1091 1267 1088 1280 1077 1293 1076 1306 1063 1319 1059 1331 1050 1344 1044 1357 1034 1370 1031 1383 1019 1396 1014 1409 1006 1422 996 1435 989 1448 976 1461 971 1474 955 1487 947 1500 931 1513 917 1526 897 1539 881
1552 859 1565 832 1578 804 1591 770 1604 736 1617 694 1630 657 1642 612 1655 573 1668 531 1681 496 1694 461 1707 432 1720 409 1733 388 1746 374 1759 362 1772 354 1785 346 50 { m28} R[ 4 8] 0 sd 1150 1144 m 13 -9 d 13 -2 d 13 -10 d 13 -1 d 13 -11 d
13 -3 d 13 -5 d 13 -12 d 13 -3 d 13 -11 d 13 -1 d 13 -13 d 13 -4 d 12 -9 d 13 -6 d 13 -10 d 13 -3 d 13 -12 d 13 -5 d 13 -8 d 13 -10 d 13 -7 d 13 -13 d 13 -5 d 13 -16 d 13 -8 d 13 -16 d 13 -14 d 13 -20 d 13 -16 d 13 -22 d 13 -27 d 13 -28 d 13 -34 d
13 -34 d 13 -42 d 13 -37 d 12 -45 d 13 -39 d 13 -42 d 13 -35 d 13 -35 d 13 -29 d 13 -23 d 13 -21 d 13 -14 d 13 -12 d 13 -8 d 13 -8 d s[ ] 0 sd 1785 346 1798 345 1811 340 1824 340 1837 338 1850 337 1863 337 1876 335 1889 336 1902 335 1915 335 1928
335 1941 335 1953 334 1966 335 1979 335 1992 334 2005 334 2018 334 2031 334 2044 333 2057 334 2070 333 2083 333 2096 333 2109 333 2122 333 2135 333 2148 333 29 { m28} R[ 4 8] 0 sd 1785 346 m 13 -1 d 13 -5 d 13 X 13 -2 d 13 -1 d 13 X 13 -2 d 13 1 d
13 -1 d 39 X 12 -1 d 13 1 d 13 X 13 -1 d 39 X 13 -1 d 13 1 d 13 -1 d 78 X s[ ] 0 sd 6 lw 1 1 1 c 680 440 454 440 bf black 454 440 m 680 X s 1134 440 m 440 Y s 1134 880 m -680 X s 454 880 m -440 Y s
gsave 2268 2199 0 0 C 470 798 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (Settings) show NC gr
gsave 2268 2199 0 0 C 621 678 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (standard) show NC gr 3 lw 479 715 m 119 X s 539 715 m20
gsave 2268 2199 0 0 C 621 567 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (fast) show NC gr [ 12 12] 0 sd 479 605 m 119 X s[ ] 0 sd 539 605 m24[ 12 12] 0 sd
gsave 2268 2199 0 0 C 621 470 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (highgain) show NC gr [ 4 8] 0 sd 479 495 m 119 X s[ ] 0 sd 539 495 m28[ 4 8] 0 sd
gr gr
showpage
end
%%EOF

View File

@ -1,103 +0,0 @@
%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 0 0 567 564
%%Title: /afs/psi.ch/project/mythen/root_macros20100305/paper/fluoExp.eps: c1
%%Creator: ROOT Version 5.24/00
%%CreationDate: Thu Mar 11 12:55:25 2010
%%EndComments
%%BeginProlog
80 dict begin
/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
/mp {newpath /y exch def /x exch def} def
/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
0 w3 neg d w3 neg 0 d cl s } def
/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl fill gr} def
/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl s gr} def
/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
sub m w w d s} def
/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
/reEncode {exch findfont dup length dict begin {1 index /FID eq {pop pop} {def} ifelse } forall /Encoding exch def currentdict end dup /FontName get exch definefont pop } def [/Times-Bold /Times-Italic /Times-BoldItalic /Helvetica
/Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique /Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Times-Roman /AvantGarde-Book /AvantGarde-BookOblique /AvantGarde-Demi /AvantGarde-DemiOblique /Bookman-Demi
/Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic /Helvetica-Narrow /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique /Helvetica-Narrow-Oblique /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold
/NewCenturySchlbk-BoldItalic /NewCenturySchlbk-Italic /Palatino-Bold /Palatino-BoldItalic /Palatino-Italic /Palatino-Roman ] {ISOLatin1Encoding reEncode } forall
/oshow {gsave [] 0 sd true charpath stroke gr} def
/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
text sw pop xs add /xs exch def} def
/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
pop neg xs add /xs exch def} def
%%EndProlog
%%BeginSetup
%%EndSetup
newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 6 lw 1 1 1 c 2268 2256 0 0 bf black 3 lw 1 1 1 c 1814 1806 340 338 bf black 1814 1806 340 338 bl 1 1 1 c 1814 1806 340 338 bf black 1814 1806 340 338 bl 1 1 1 c black /w 24
def /w2 {w 2 div} def /w3 {w 3 div} def 539 2040 548 1949 556 1891 565 1845 573 1812 582 1788 590 1767 599 1757 607 1741 616 1732 624 1722 633 1712 641 1704 650 1700 658 1685 667 1678 675 1671 683 1663 692 1659 700 1652 709 1642 717 1636 726 1631
734 1628 743 1618 751 1610 760 1610 768 1599 777 1597 785 1589 794 1584 802 1580 811 1571 819 1565 828 1561 836 1553 845 1546 853 1539 862 1531 870 1528 878 1515 887 1513 895 1506 904 1497 912 1493 921 1490 929 1478 938 1474 946 1468 955 1457 50 {
m2} R 955 1457 963 1451 972 1445 980 1434 989 1427 997 1421 1006 1405 1014 1400 1023 1385 1031 1373 1040 1368 1048 1356 1057 1345 1065 1331 1073 1324 1082 1310 1090 1304 1099 1291 1107 1278 1116 1268 1124 1256 1133 1248 1141 1240 1150 1231 1158
1222 1167 1208 1175 1204 1184 1197 1192 1186 1201 1185 1209 1177 1218 1172 1226 1163 1235 1152 1243 1155 1251 1147 1260 1142 1268 1137 1277 1133 1285 1132 1294 1123 1302 1124 1311 1118 1319 1113 1328 1109 1336 1103 1345 1100 1353 1094 1362 1095
1370 1092 50 { m2} R 1370 1092 1379 1088 1387 1085 1396 1079 1404 1073 1413 1064 1421 1063 1430 1058 1438 1054 1446 1053 1455 1048 1463 1043 1472 1038 1480 1034 1489 1032 1497 1026 1506 1020 1514 1018 1523 1009 1531 1007 1540 998 1548 994 1557 989
1565 983 1574 976 1582 966 1591 960 1599 951 1608 943 1616 935 1624 929 1633 915 1641 903 1650 893 1658 882 1667 869 1675 856 1684 846 1692 832 1701 814 1709 798 1718 779 1726 763 1735 745 1743 725 1752 704 1760 682 1769 661 1777 638 1786 619 50 {
m2} R 1786 619 1794 597 1803 579 1811 558 1819 536 1828 518 1836 500 1845 483 1853 467 1862 453 1870 438 1879 426 1887 415 1896 404 1904 394 1913 386 1921 378 1930 372 1938 367 1947 362 1955 359 1964 356 1972 352 1981 350 1989 348 1997 347 2006 345
2014 344 2023 343 2031 343 2040 343 2048 342 2057 342 2065 342 2074 341 2082 341 2091 341 2099 341 2108 341 2116 341 2125 341 2133 341 2142 341 2150 341 44 { m2} R 9 lw 0.95 0.95 0.95 c black 715 1630 m 15 -9 d 14 -9 d 14 -9 d 15 -9 d 14 -9 d 15 -9
d 14 -9 d 14 -9 d 15 -9 d 14 -10 d 15 -10 d 14 -11 d 15 -11 d 14 -11 d 14 -12 d 15 -13 d 14 -15 d 15 -15 d 14 -16 d 15 -16 d 14 -18 d 14 -18 d 15 -19 d 14 -19 d 15 -18 d 14 -19 d 14 -18 d 15 -17 d 14 -16 d 15 -15 d 14 -13 d 15 -13 d 14 -12 d 14 -11
d 15 -10 d 14 -10 d 15 -9 d 14 -9 d 15 -8 d 14 -8 d 14 -8 d 15 -8 d 14 -7 d 15 -8 d 14 -7 d 14 -8 d 15 -8 d 14 -7 d 15 -8 d s 1422 1060 m 14 -7 d 15 -8 d 14 -7 d 14 -8 d 15 -8 d 14 -8 d 15 -8 d 14 -8 d 15 -9 d 14 -10 d 14 -10 d 15 -11 d 14 -13 d 15
-14 d 14 -17 d 14 -18 d 15 -21 d 14 -23 d 15 -26 d 14 -29 d 15 -31 d 14 -34 d 14 -35 d 15 -36 d 14 -36 d 15 -35 d 14 -35 d 15 -32 d 14 -31 d 14 -27 d 15 -24 d 14 -21 d 15 -18 d 14 -14 d 14 -12 d 15 -10 d 14 -7 d 15 -5 d 14 -4 d 15 -3 d 14 -2 d 14
-2 d 15 -1 d 14 X 15 -1 d 57 X s 2128 341 m 15 X s 6 lw 340 338 m 1814 X s
gsave 2268 2256 0 0 C 1368 130 t 0 r /Helvetica-Bold findfont 104.36 sf 0 0 m (Threshold \(keV\)) show NC gr 347 393 m -55 Y s 407 366 m -28 Y s 468 366 m -28 Y s 528 366 m -28 Y s 588 393 m -55 Y s 648 366 m -28 Y s 708 366 m -28 Y s 768 366 m
-28 Y s 828 393 m -55 Y s 888 366 m -28 Y s 948 366 m -28 Y s 1008 366 m -28 Y s 1068 393 m -55 Y s 1129 366 m -28 Y s 1189 366 m -28 Y s 1249 366 m -28 Y s 1309 393 m -55 Y s 1369 366 m -28 Y s 1429 366 m -28 Y s 1489 366 m -28 Y s 1549 393 m -55
Y s 1609 366 m -28 Y s 1669 366 m -28 Y s 1729 366 m -28 Y s 1789 393 m -55 Y s 1850 366 m -28 Y s 1910 366 m -28 Y s 1970 366 m -28 Y s 2030 393 m -55 Y s 347 393 m -55 Y s 2030 393 m -55 Y s 2090 366 m -28 Y s 2150 366 m -28 Y s
gsave 2268 2256 0 0 C 324 257 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (0) show NC gr
gsave 2268 2256 0 0 C 564 257 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (2) show NC gr
gsave 2268 2256 0 0 C 804 257 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (4) show NC gr
gsave 2268 2256 0 0 C 1044 257 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (6) show NC gr
gsave 2268 2256 0 0 C 1286 257 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (8) show NC gr
gsave 2268 2256 0 0 C 1503 257 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (10) show NC gr
gsave 2268 2256 0 0 C 1743 257 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (12) show NC gr
gsave 2268 2256 0 0 C 1980 257 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (14) show NC gr 340 338 m 1806 Y s
gsave 2268 2256 0 0 C 166 908 t 90 r /Helvetica-Bold findfont 104.36 sf 0 0 m (Normalized counts \(A.U.\)) show NC gr 395 338 m -55 X s 367 384 m -27 X s 367 429 m -27 X s 367 474 m -27 X s 395 519 m -55 X s 367 564 m -27 X s 367 609 m -27 X s
367 654 m -27 X s 395 699 m -55 X s 367 745 m -27 X s 367 790 m -27 X s 367 835 m -27 X s 395 880 m -55 X s 367 925 m -27 X s 367 970 m -27 X s 367 1015 m -27 X s 395 1061 m -55 X s 367 1106 m -27 X s 367 1151 m -27 X s 367 1196 m -27 X s 395 1241
m -55 X s 367 1286 m -27 X s 367 1331 m -27 X s 367 1376 m -27 X s 395 1422 m -55 X s 367 1467 m -27 X s 367 1512 m -27 X s 367 1557 m -27 X s 395 1602 m -55 X s 367 1647 m -27 X s 367 1692 m -27 X s 367 1737 m -27 X s 395 1783 m -55 X s 367 1828 m
-27 X s 367 1873 m -27 X s 367 1918 m -27 X s 395 1963 m -55 X s 367 2008 m -27 X s 367 2053 m -27 X s 367 2098 m -27 X s 395 2144 m -55 X s
gsave 2268 2256 0 0 C 282 307 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (0) show NC gr
gsave 2268 2256 0 0 C 212 488 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (0.2) show NC gr
gsave 2268 2256 0 0 C 209 668 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (0.4) show NC gr
gsave 2268 2256 0 0 C 212 849 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (0.6) show NC gr
gsave 2268 2256 0 0 C 212 1029 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (0.8) show NC gr
gsave 2268 2256 0 0 C 293 1207 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (1) show NC gr
gsave 2268 2256 0 0 C 212 1388 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (1.2) show NC gr
gsave 2268 2256 0 0 C 209 1568 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (1.4) show NC gr
gsave 2268 2256 0 0 C 212 1752 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (1.6) show NC gr
gsave 2268 2256 0 0 C 212 1932 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (1.8) show NC gr
gsave 2268 2256 0 0 C 282 2110 t 0 r /Helvetica-Bold findfont 84.6163 sf 0 0 m (2) show NC gr [ 12 12] 0 sd 9 lw 0.95 0.95 0.95 c black 715 1449 m 15 -8 d 14 -8 d 14 -7 d 15 -8 d 14 -8 d 15 -8 d 14 -8 d 14 -8 d 15 -8 d 14 -8 d 15 -8 d 14 -7 d 15
-8 d 14 -8 d 14 -8 d 15 -8 d 14 -8 d 15 -8 d 14 -8 d 15 -8 d 14 -7 d 14 -8 d 15 -8 d 14 -8 d 15 -8 d 14 -8 d 14 -8 d 15 -8 d 14 -8 d 15 -8 d 14 -7 d 15 -8 d 14 -8 d 14 -8 d 15 -8 d 14 -8 d 15 -8 d 14 -8 d 15 -8 d 14 -7 d 14 -8 d 15 -8 d 14 -8 d 15
-8 d 14 -8 d 14 -8 d 15 -8 d 14 -8 d 15 -8 d s 1422 1062 m 14 -7 d 15 -8 d 14 -8 d 14 -8 d 15 -8 d 14 -9 d 15 -8 d 14 -9 d 15 -9 d 14 -10 d 14 -10 d 15 -11 d 14 -13 d 15 -14 d 14 -16 d 14 -18 d 15 -21 d 14 -23 d 15 -26 d 14 -29 d 15 -31 d 14 -33 d
14 -35 d 15 -36 d 14 -36 d 15 -36 d 14 -35 d 15 -32 d 14 -31 d 14 -27 d 15 -24 d 14 -21 d 15 -18 d 14 -15 d 14 -12 d 15 -9 d 14 -7 d 15 -5 d 14 -4 d 15 -3 d 14 -2 d 14 -2 d 15 -1 d 14 X 15 -1 d 57 X s 2128 341 m 15 X s[ 4 8] 0 sd 6 lw 1068 338 m
993 Y s 1429 338 m 720 Y s 1789 338 m 281 Y s[ 12 16 4 16] 0 sd 347 1331 m 721 X s 347 1256 m 721 X s
gsave 2268 2256 0 0 C 1842 601 t 0 r /Helvetica-Bold findfont 70.5136 sf 0 0 m (0) show NC gr
gsave 2268 2256 0 0 C 1777 629 t 0 r /Helvetica-Bold findfont 104.36 sf 0 0 m (E) show NC gr
gsave 2268 2256 0 0 C 1470 1061 t 0 r /Helvetica-Bold findfont 70.5136 sf 0 0 m (t) show NC gr
gsave 2268 2256 0 0 C 1405 1089 t 0 r /Helvetica-Bold findfont 104.36 sf 0 0 m (E) show NC gr
gsave 2268 2256 0 0 C 1108 1328 t 0 r /Helvetica-Bold findfont 70.5136 sf 0 0 m (f) show NC gr
gsave 2268 2256 0 0 C 1044 1360 t 0 r /Helvetica-Bold findfont 104.36 sf 0 0 m (E) show NC gr [ ] 0 sd 1068 519 m 361 X s 1397 537 m 32 -18 d -32 -18 d s 1100 501 m -32 18 d 32 18 d s 1429 519 m 360 X s 1758 537 m 31 -18 d -31 -18 d s 1461 501 m
-32 18 d 32 18 d s
gsave 2268 2256 0 0 C 1247 564 t 0 r /Symbol findfont 104.36 sf 0 0 m (S) show NC gr
gsave 2268 2256 0 0 C 1608 564 t 0 r /Symbol findfont 104.36 sf 0 0 m (S) show NC gr 588 1331 m -75 Y s 597 1272 m -9 -16 d -9 16 d s 579 1315 m 9 16 d 9 -16 d s
gsave 2268 2256 0 0 C 609 1269 t 0 r /Symbol findfont 84.6163 sf 0 0 m (D) show NC gr
gr gr
showpage
end
%%EOF

View File

@ -1,146 +0,0 @@
%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 0 0 567 550
%%Title: /afs/psi.ch/user/b/bergamaschi/root_macros/paper/moduleCalibration.eps: c1_n3
%%Creator: ROOT Version 5.20/00
%%CreationDate: Tue Feb 24 16:20:36 2009
%%EndComments
%%BeginProlog
80 dict begin
/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
/mp {newpath /y exch def /x exch def} def
/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
0 w3 neg d w3 neg 0 d cl s } def
/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl fill gr} def
/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl s gr} def
/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
sub m w w d s} def
/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
/reEncode {exch findfont dup length dict begin {1 index /FID eq {pop pop} {def} ifelse } forall /Encoding exch def currentdict end dup /FontName get exch definefont pop } def [/Times-Bold /Times-Italic /Times-BoldItalic /Helvetica
/Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique /Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique /Times-Roman /AvantGarde-Book /AvantGarde-BookOblique /AvantGarde-Demi /AvantGarde-DemiOblique /Bookman-Demi
/Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic /Helvetica-Narrow /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique /Helvetica-Narrow-Oblique /NewCenturySchlbk-Roman /NewCenturySchlbk-Bold
/NewCenturySchlbk-BoldItalic /NewCenturySchlbk-Italic /Palatino-Bold /Palatino-BoldItalic /Palatino-Italic /Palatino-Roman ] {ISOLatin1Encoding reEncode } forall
/oshow {gsave [] 0 sd true charpath stroke gr} def
/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
text sw pop xs add /xs exch def} def
/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
pop neg xs add /xs exch def} def
%%EndProlog
%%BeginSetup
%%EndSetup
newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 6 lw 1 1 1 c 2268 2199 0 0 bf black 3 lw 1 1 1 c 1814 1759 340 330 bf black 1814 1759 340 330 bl 1 1 1 c 1814 1759 340 330 bf black 1814 1759 340 330 bl 1 1 1 c black 340 330 m 1814 X s 6 lw
340 330 m 1814 X s
gsave 2268 2199 0 0 C 1279 123 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (Threshold \(DACu\)) show NC gr 340 383 m -53 Y s 392 356 m -26 Y s 444 356 m -26 Y s 496 356 m -26 Y s 547 356 m -26 Y s 599 383 m -53 Y s 651 356 m -26 Y s 703 356 m
-26 Y s 755 356 m -26 Y s 807 356 m -26 Y s 858 383 m -53 Y s 910 356 m -26 Y s 962 356 m -26 Y s 1014 356 m -26 Y s 1066 356 m -26 Y s 1118 383 m -53 Y s 1169 356 m -26 Y s 1221 356 m -26 Y s 1273 356 m -26 Y s 1325 356 m -26 Y s 1377 383 m -53 Y
s 1429 356 m -26 Y s 1480 356 m -26 Y s 1532 356 m -26 Y s 1584 356 m -26 Y s 1636 383 m -53 Y s 1688 356 m -26 Y s 1740 356 m -26 Y s 1791 356 m -26 Y s 1843 356 m -26 Y s 1895 383 m -53 Y s 1947 356 m -26 Y s 1999 356 m -26 Y s 2051 356 m -26 Y s
2102 356 m -26 Y s 2154 383 m -53 Y s
gsave 2268 2199 0 0 C 271 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (400) show NC gr
gsave 2268 2199 0 0 C 530 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (450) show NC gr
gsave 2268 2199 0 0 C 789 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (500) show NC gr
gsave 2268 2199 0 0 C 1048 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (550) show NC gr
gsave 2268 2199 0 0 C 1308 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (600) show NC gr
gsave 2268 2199 0 0 C 1567 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (650) show NC gr
gsave 2268 2199 0 0 C 1826 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (700) show NC gr
gsave 2268 2199 0 0 C 2085 251 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (750) show NC gr 340 330 m 1759 Y s
gsave 2268 2199 0 0 C 100 1439 t 90 r /Helvetica-Bold findfont 102.56 sf 0 0 m (Counts \(A.U.\)) show NC gr 395 330 m -55 X s 367 374 m -27 X s 367 418 m -27 X s 367 462 m -27 X s 395 506 m -55 X s 367 550 m -27 X s 367 594 m -27 X s 367 638 m
-27 X s 395 682 m -55 X s 367 726 m -27 X s 367 770 m -27 X s 367 814 m -27 X s 395 858 m -55 X s 367 902 m -27 X s 367 946 m -27 X s 367 990 m -27 X s 395 1034 m -55 X s 367 1078 m -27 X s 367 1122 m -27 X s 367 1166 m -27 X s 395 1210 m -55 X s
367 1254 m -27 X s 367 1298 m -27 X s 367 1342 m -27 X s 395 1386 m -55 X s 367 1430 m -27 X s 367 1474 m -27 X s 367 1518 m -27 X s 395 1562 m -55 X s 367 1606 m -27 X s 367 1650 m -27 X s 367 1693 m -27 X s 395 1737 m -55 X s 367 1781 m -27 X s
367 1825 m -27 X s 367 1869 m -27 X s 395 1913 m -55 X s 367 1957 m -27 X s 367 2001 m -27 X s 367 2045 m -27 X s 395 2089 m -55 X s
gsave 2268 2199 0 0 C 285 293 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 194 470 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (200) show NC gr
gsave 2268 2199 0 0 C 194 647 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (400) show NC gr
gsave 2268 2199 0 0 C 194 823 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (600) show NC gr
gsave 2268 2199 0 0 C 194 997 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (800) show NC gr
gsave 2268 2199 0 0 C 145 1174 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (1000) show NC gr
gsave 2268 2199 0 0 C 145 1350 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (1200) show NC gr
gsave 2268 2199 0 0 C 145 1527 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (1400) show NC gr
gsave 2268 2199 0 0 C 145 1701 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (1600) show NC gr
gsave 2268 2199 0 0 C 145 1877 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (1800) show NC gr
gsave 2268 2199 0 0 C 145 2054 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (2000) show NC gr 3 lw 1 1 1 c black /w 24 def /w2 {w 2 div} def /w3 {w 3 div} def 858 330 864 330 869 330 874 330 879 330 884 330 889 330 895 330 900 330 905 330 910
330 915 330 920 330 926 330 931 330 936 330 941 330 946 330 951 330 957 330 962 330 967 330 972 330 977 330 982 330 988 330 993 330 998 330 1003 330 1008 330 1013 330 1019 330 1024 330 1029 330 1034 330 1039 330 1044 330 1050 330 1055 330 1060 330
1065 330 1070 330 1075 330 1081 330 1086 330 1091 330 1096 330 1101 330 1106 330 1112 330 50 { m26} R 1112 330 1117 330 1122 330 1127 330 1132 330 1137 330 1143 330 1148 330 1153 330 1158 330 1163 330 1168 330 1174 330 1179 330 1184 330 1189 330
1194 330 1199 330 1205 330 1210 330 1215 330 1220 330 1225 331 1230 331 1236 331 1241 331 1246 331 1251 331 1256 331 1261 331 1267 331 1272 331 1277 331 1282 331 1287 331 1292 331 1298 332 1303 332 1308 332 1313 333 1318 334 1323 335 1329 336 1334
338 1339 340 1344 343 1349 346 1354 349 1360 354 1365 360 50 { m26} R 1365 360 1370 366 1375 374 1380 383 1385 393 1391 405 1396 418 1401 433 1406 448 1411 464 1416 483 1422 501 1427 524 1432 545 1437 568 1442 591 1447 613 1453 635 1458 661 1463
685 1468 706 1473 728 1478 751 1484 771 1489 790 1494 810 1499 827 1504 844 1509 859 1515 874 1520 887 1525 900 1530 911 1535 922 1540 932 1546 943 1551 951 1556 960 1561 969 1566 977 1571 985 1577 991 1582 998 1587 1004 1592 1010 1597 1016 1602
1022 1608 1028 1613 1034 1618 1038 50 { m26} R 1618 1038 1623 1044 1628 1048 1633 1054 1639 1059 1644 1063 1649 1068 1654 1072 1659 1078 1664 1082 1670 1086 1675 1092 1680 1096 1685 1102 1690 1106 1695 1110 1701 1115 1706 1118 1711 1124 1716 1128
1721 1133 1726 1137 1732 1141 1737 1145 1742 1149 1747 1153 1752 1160 1757 1162 1763 1167 1768 1169 1773 1173 1778 1177 1783 1182 1788 1186 1794 1190 1799 1195 1804 1199 1809 1202 1814 1206 1819 1210 1825 1215 1830 1217 1835 1222 1840 1226 1845
1231 1850 1235 1856 1238 1861 1243 1866 1249 1871 1251 50 { m26} R 1871 1251 1876 1256 1881 1259 1887 1263 1892 1267 1897 1272 1902 1277 1907 1279 1912 1285 1918 1290 1923 1292 1928 1298 1933 1302 1938 1305 1943 1312 1949 1316 1954 1320 1959 1325
1964 1330 1969 1333 1974 1338 1980 1345 1985 1351 1990 1357 1995 1363 2000 1372 2005 1384 2011 1397 2016 1419 2021 1441 2026 1473 2031 1519 2036 1584 2042 1680 2047 1822 2052 2020 2057 2089 37 { m26} R 2150 2089 m26 9 lw 0.95 0.95 0.95 c black 782
330 m 434 X 16 1 d 48 X 16 1 d 16 1 d 16 4 d 16 7 d 17 12 d 16 21 d 16 32 d 16 45 d 16 58 d 16 68 d 16 73 d 16 74 d 16 68 d 16 58 d 16 47 d 16 37 d 16 28 d 16 22 d s 1569 987 m 16 18 d 17 16 d 16 14 d 16 15 d 16 14 d 16 13 d 16 14 d 16 14 d 16 14 d
16 14 d 16 14 d 16 14 d 16 13 d 16 14 d 16 14 d 16 14 d 17 14 d 16 14 d 16 13 d 16 14 d 16 14 d 16 14 d 16 14 d s[ 12 12] 0 sd 3 lw 1447 330 m 283 Y s[ ] 0 sd 1447 613 m20[ 12 12] 0 sd[ ] 0 sd 1 1 1 c black 864 330 889 330 900 330 905 330 910 330
915 330 920 330 926 330 931 330 936 330 941 330 946 330 951 330 957 330 962 330 967 330 972 331 977 331 982 331 988 331 993 331 998 332 1003 333 1008 333 1013 335 1019 336 1024 338 1029 340 1034 342 1039 345 1044 349 1050 353 1055 359 1060 366 1065
373 1070 382 1075 391 1081 402 1086 413 1091 428 1096 442 1101 456 1106 474 1112 493 1117 511 1122 532 1127 552 1132 571 1137 593 1143 614 50 { m27} R 1143 614 1148 634 1153 659 1158 677 1163 697 1168 717 1174 738 1179 757 1184 773 1189 788 1194
802 1199 820 1205 830 1210 842 1215 856 1220 870 1225 879 1230 888 1236 896 1241 904 1246 909 1251 918 1256 924 1261 930 1267 936 1272 942 1277 950 1282 955 1287 963 1292 968 1298 972 1303 974 1308 979 1313 985 1318 987 1323 991 1329 995 1334 1000
1339 1004 1344 1011 1349 1012 1354 1016 1360 1020 1365 1024 1370 1026 1375 1032 1380 1038 1385 1040 1391 1045 1396 1046 50 { m27} R 1396 1046 1401 1051 1406 1053 1411 1056 1416 1055 1422 1058 1427 1063 1432 1067 1437 1073 1442 1073 1447 1080 1453
1083 1458 1084 1463 1090 1468 1095 1473 1098 1478 1099 1484 1104 1489 1111 1494 1113 1499 1118 1504 1118 1509 1122 1515 1123 1520 1126 1525 1129 1530 1133 1535 1136 1540 1138 1546 1140 1551 1142 1556 1149 1561 1150 1566 1152 1571 1157 1577 1161
1582 1161 1587 1164 1592 1169 1597 1172 1602 1174 1608 1176 1613 1178 1618 1180 1623 1183 1628 1184 1633 1190 1639 1190 1644 1195 1649 1196 50 { m27} R 1649 1196 1654 1196 1659 1205 1664 1206 1670 1210 1675 1214 1680 1217 1685 1222 1690 1221 1695
1225 1701 1228 1706 1234 1711 1236 1716 1240 1721 1242 1726 1242 1732 1247 1737 1250 1742 1252 1747 1256 1752 1256 1757 1258 1763 1267 1768 1268 1773 1270 1778 1276 1783 1277 1788 1275 1794 1282 1799 1286 1804 1287 1809 1285 1814 1289 1819 1297
1825 1299 1830 1302 1835 1306 1840 1311 1845 1311 1850 1309 1856 1313 1861 1319 1866 1321 1871 1321 1876 1322 1881 1327 1887 1328 1892 1331 1897 1337 1902 1343 50 { m27} R 1902 1343 1907 1350 1912 1351 1918 1354 1923 1362 1928 1359 1933 1365 1938
1366 1943 1371 1949 1370 1954 1377 1959 1382 1964 1384 1969 1389 1974 1392 1980 1401 1985 1401 1990 1412 1995 1417 2000 1432 2005 1448 2011 1465 2016 1491 2021 1535 2026 1589 2031 1673 2036 1806 2042 2003 2047 2089 29 { m27} R 2150 2089 m27 9 lw
0.95 0.95 0.95 c black 348 330 m 601 X 16 1 d 15 X 16 1 d 16 3 d 16 5 d 16 10 d 15 16 d 16 24 d 16 35 d 16 46 d 16 57 d s 1123 528 m 16 64 d 15 67 d 16 66 d 16 59 d 16 51 d 16 40 d 15 32 d 16 24 d 16 18 d 16 14 d 16 12 d 15 11 d 16 10 d 16 10 d 16
10 d 16 10 d 15 10 d 16 10 d 16 9 d 16 10 d 16 10 d 16 10 d 15 10 d 16 10 d 16 9 d 16 10 d 16 10 d 15 10 d 16 10 d 16 9 d 16 10 d 16 10 d 15 10 d 16 10 d 16 9 d 16 10 d 16 10 d 15 10 d 16 10 d 16 10 d 16 9 d 16 10 d 16 10 d 15 10 d 16 10 d 16 9 d
16 10 d 16 10 d 15 10 d s 1897 1350 m 16 10 d s[ 12 12] 0 sd 3 lw 1140 330 m 284 Y s[ ] 0 sd 1140 614 m20[ 12 12] 0 sd[ ] 0 sd 1 1 1 c black 516 331 521 331 526 331 531 331 537 332 542 332 547 334 552 334 557 335 562 336 568 339 573 341 578 343
583 347 588 351 594 356 599 361 604 367 609 374 614 383 619 391 625 400 630 411 635 423 640 439 645 450 650 465 656 482 661 498 666 516 671 537 676 550 681 569 687 591 692 608 697 628 702 645 707 663 712 681 718 698 723 711 728 727 733 743 738 757
743 769 749 784 754 795 759 807 764 817 769 826 50 { m28} R 769 826 774 837 780 843 785 854 790 863 795 870 800 875 805 881 811 887 816 896 821 903 826 903 831 912 837 914 842 920 847 924 852 928 857 933 862 936 868 941 873 946 878 948 883 952 888
956 893 961 899 964 904 968 909 970 914 972 919 973 924 977 930 981 935 987 940 992 945 994 950 998 955 999 961 1002 966 1004 971 1009 976 1008 981 1009 986 1012 992 1016 997 1020 1002 1025 1007 1029 1012 1034 1017 1035 1023 1037 50 { m28} R 1023
1037 1028 1037 1033 1044 1038 1042 1043 1048 1048 1057 1054 1060 1059 1064 1064 1068 1069 1067 1074 1066 1080 1067 1085 1071 1090 1071 1095 1073 1100 1074 1105 1079 1111 1080 1116 1080 1121 1085 1126 1087 1131 1092 1136 1094 1142 1095 1147 1098
1152 1099 1157 1100 1162 1106 1167 1106 1173 1111 1178 1111 1183 1115 1188 1117 1193 1119 1198 1119 1204 1120 1209 1122 1214 1122 1219 1128 1224 1128 1229 1128 1235 1132 1240 1136 1245 1140 1250 1142 1255 1142 1260 1148 1266 1149 1271 1151 1276
1149 50 { m28} R 1276 1149 1281 1154 1286 1154 1292 1153 1297 1160 1302 1159 1307 1162 1312 1163 1317 1164 1323 1169 1328 1168 1333 1170 1338 1175 1343 1174 1348 1180 1354 1178 1359 1178 1364 1179 1369 1181 1374 1183 1379 1186 1385 1189 1390 1190
1395 1197 1400 1199 1405 1201 1410 1201 1416 1200 1421 1202 1426 1207 1431 1207 1436 1212 1441 1212 1447 1210 1452 1213 1457 1217 1462 1217 1467 1222 1472 1224 1478 1226 1483 1229 1488 1234 1493 1232 1498 1234 1503 1233 1509 1237 1514 1239 1519
1240 1524 1242 1529 1245 50 { m28} R 1529 1245 1535 1250 1540 1253 1545 1255 1550 1261 1555 1266 1560 1267 1566 1270 1571 1272 1576 1276 1581 1275 1586 1276 1591 1276 1597 1279 1602 1283 1607 1282 1612 1286 1617 1292 1622 1295 1628 1295 1633 1296
1638 1297 1643 1297 1648 1292 1653 1297 1659 1296 1664 1303 1669 1304 1674 1303 1679 1304 1684 1302 1690 1308 1695 1307 1700 1313 1705 1320 1710 1320 1715 1314 1721 1313 1726 1322 1731 1328 1736 1329 1741 1338 1747 1338 1752 1340 1757 1341 1762
1341 1767 1343 1772 1343 1778 1343 1783 1347 50 { m28} R 1783 1347 1788 1355 1793 1354 1798 1365 1803 1362 1809 1370 1814 1372 1819 1367 1824 1376 1829 1377 1834 1382 1840 1379 1845 1384 1850 1386 1855 1386 1860 1392 1865 1399 1871 1399 1876 1400
1881 1403 1886 1407 1891 1411 1896 1416 1902 1416 1907 1419 1912 1425 1917 1429 1922 1431 1927 1437 1933 1440 1938 1442 1943 1441 1948 1446 1953 1447 1958 1448 1964 1457 1969 1464 1974 1470 1979 1483 1984 1493 1990 1507 1995 1520 2000 1537 2005
1565 2010 1602 2015 1665 2021 1761 2026 1901 2031 2089 49 { m28} R 2150 2089 m28 9 lw 0.95 0.95 0.95 c black 348 330 m 155 X 16 1 d 16 1 d 15 3 d 16 5 d 15 8 d 16 12 d 15 19 d 16 26 d 15 35 d 16 44 d 15 51 d 16 56 d 16 59 d 15 57 d 16 53 d 15 46 d
16 39 d 15 31 d 16 24 d 15 18 d 16 14 d 16 11 d 15 9 d 16 8 d 15 7 d 16 8 d 15 7 d 16 7 d 15 6 d 16 7 d 15 7 d 16 7 d 16 7 d 15 7 d 16 7 d 15 7 d 16 7 d 15 6 d 16 7 d s 1110 1064 m 15 7 d 16 7 d 16 7 d 15 7 d 16 7 d 15 7 d 16 7 d 15 7 d 16 6 d 15 7
d 16 7 d 15 7 d 16 7 d 16 7 d 15 7 d 16 7 d 15 7 d 16 6 d 15 7 d 16 7 d 15 7 d 16 7 d 16 7 d 15 7 d 16 7 d 15 7 d 16 6 d 15 7 d 16 7 d 15 7 d 16 7 d 15 7 d 16 7 d 16 7 d 15 7 d 16 7 d 15 6 d 16 7 d 15 7 d 16 7 d 15 7 d 16 7 d 16 7 d 15 7 d 16 7 d
15 6 d 16 7 d 15 7 d 16 7 d s 1872 1402 m 15 7 d s[ 12 12] 0 sd 3 lw 693 330 m 278 Y s[ ] 0 sd 693 608 m20[ 12 12] 0 sd[ ] 0 sd 6 lw 1 1 1 c 1088 725 386 1320 bf black 3 lw 1 1 1 c 947 631 516 1407 bf black 947 631 516 1407 bl 1 1 1 c 947 631 516
1407 bf black 947 631 516 1407 bl 6 lw 516 1407 m 947 X s
gsave 1088 725 386 1320 C 1131 1336 t 0 r /Helvetica-Bold findfont 54.2909 sf 0 0 m (Energy \(keV\)) show NC gr 525 1426 m -19 Y s 553 1416 m -9 Y s 581 1416 m -9 Y s 609 1416 m -9 Y s 638 1426 m -19 Y s 666 1416 m -9 Y s 694 1416 m -9 Y s 722
1416 m -9 Y s 750 1426 m -19 Y s 779 1416 m -9 Y s 807 1416 m -9 Y s 835 1416 m -9 Y s 863 1426 m -19 Y s 891 1416 m -9 Y s 920 1416 m -9 Y s 948 1416 m -9 Y s 976 1426 m -19 Y s 1004 1416 m -9 Y s 1032 1416 m -9 Y s 1061 1416 m -9 Y s 1089 1426 m
-19 Y s 1117 1416 m -9 Y s 1145 1416 m -9 Y s 1173 1416 m -9 Y s 1202 1426 m -19 Y s 1230 1416 m -9 Y s 1258 1416 m -9 Y s 1286 1416 m -9 Y s 1314 1426 m -19 Y s 1343 1416 m -9 Y s 1371 1416 m -9 Y s 1399 1416 m -9 Y s 1427 1426 m -19 Y s 525 1426
m -19 Y s 1427 1426 m -19 Y s 1455 1416 m -9 Y s
gsave 1088 725 386 1320 C 510 1382 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (10) show NC gr
gsave 1088 725 386 1320 C 621 1382 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (12) show NC gr
gsave 1088 725 386 1320 C 735 1382 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (14) show NC gr
gsave 1088 725 386 1320 C 846 1382 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (16) show NC gr
gsave 1088 725 386 1320 C 960 1382 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (18) show NC gr
gsave 1088 725 386 1320 C 1074 1382 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (20) show NC gr
gsave 1088 725 386 1320 C 1185 1382 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (22) show NC gr
gsave 1088 725 386 1320 C 1299 1382 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (24) show NC gr
gsave 1088 725 386 1320 C 1410 1382 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (26) show NC gr 516 1407 m 631 Y s
gsave 1088 725 386 1320 C 447 1578 t 90 r /Helvetica-Bold findfont 54.2909 sf 0 0 m (Threshold \(DACu\)) show NC gr 545 1411 m -29 X s 530 1438 m -14 X s 530 1465 m -14 X s 530 1493 m -14 X s 530 1520 m -14 X s 545 1548 m -29 X s 530 1575 m -14 X
s 530 1602 m -14 X s 530 1630 m -14 X s 530 1657 m -14 X s 545 1685 m -29 X s 530 1712 m -14 X s 530 1740 m -14 X s 530 1767 m -14 X s 530 1794 m -14 X s 545 1822 m -29 X s 530 1849 m -14 X s 530 1877 m -14 X s 530 1904 m -14 X s 530 1931 m -14 X s
545 1959 m -29 X s 545 1411 m -29 X s 545 1959 m -29 X s 530 1986 m -14 X s 530 2014 m -14 X s
gsave 1088 725 386 1320 C 467 1402 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (450) show NC gr
gsave 1088 725 386 1320 C 467 1538 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (500) show NC gr
gsave 1088 725 386 1320 C 467 1675 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (550) show NC gr
gsave 1088 725 386 1320 C 467 1812 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (600) show NC gr
gsave 1088 725 386 1320 C 467 1949 t 0 r /Helvetica-Bold findfont 25.7167 sf 0 0 m (650) show NC gr 3 lw 666 1859 948 1697 1371 1460 3 { m20} R 6 lw 9 lw 0.95 0.95 0.95 c black 668 1856 m 7 -4 d 7 -4 d 7 -4 d 7 -4 d 8 -4 d 7 -4 d 7 -4 d 7 -4 d 7
-4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 8 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 8 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4
d 7 -4 d 8 -4 d 7 -4 d 7 -4 d 7 -4 d s 1015 1660 m 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 8 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 8 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7
-4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 8 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d 7 -4 d s 1361 1464 m 7 -4 d s 6 lw 1 1 1 c 454 440 1587 440 bf black
gsave 2268 2199 0 0 C 1598 803 t 0 r /Helvetica-Bold findfont 65.5245 sf 0 0 m (Energy) show NC gr
gsave 2268 2199 0 0 C 1701 687 t 0 r /Helvetica-Bold findfont 65.5245 sf 0 0 m (12.50 keV) show NC gr 3 lw 1644 715 m26 6 lw
gsave 2268 2199 0 0 C 1701 578 t 0 r /Helvetica-Bold findfont 65.5245 sf 0 0 m (17.50 keV) show NC gr 3 lw 1644 605 m27 6 lw
gsave 2268 2199 0 0 C 1701 467 t 0 r /Helvetica-Bold findfont 65.5245 sf 0 0 m (25.00 keV) show NC gr 3 lw 1644 495 m28 6 lw
gr gr
showpage
end
%%EOF

View File

@ -1,18 +0,0 @@
The calibration wizards are based on the \textit{Root} software developed at CERN.\\
To install it, simply download it from the url \textit{http://root.cern.ch}.\\
You can either download the binaries for your system or install from source (which is time consuming, but possibly more stable).\\
The development and debugging of the wizards have been done using the root version 5.20, but it should be working also with newer versions.
After installing the root software, edit your .bashrc file to define the ROOTSYS enviroment variable, and add the binaries and libraries to your path, e.g.:
\begin{verbatim}
export ROOTSYS=/usr/local/root_sl5_32bit
export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH
export PATH=$ROOTSYS/bin:$PATH
\end{verbatim}
Then enter the calibrationWizards directory and compile:
\begin{verbatim}
make clean && make
\end{verbatim}
The two executables \textit{energyCalibrationWizard} and \textit{angularCalibrationWizard} should be generated, together with some documentation in pdf format inside the \textit{manual} directory.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 KiB

View File

@ -1,135 +0,0 @@
%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 0 0 567 550
%%Title: /import/exchange/home/msdetect/Projects/detcalMCS/article/spectrum_expl.eps: c1_n2
%%Creator: ROOT Version 5.13/02
%%CreationDate: Thu Apr 26 09:47:57 2007
%%EndComments
%%BeginProlog
80 dict begin
/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
/mp {newpath /y exch def /x exch def} def
/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
0 w3 neg d w3 neg 0 d cl s } def
/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl fill gr} def
/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl s gr} def
/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
sub m w w d s} def
/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
/reencdict 24 dict def /ReEncode {reencdict begin /nco&na exch def
/nfnam exch def /basefontname exch def /basefontdict basefontname findfont def
/newfont basefontdict maxlength dict def basefontdict {exch dup /FID ne
{dup /Encoding eq {exch dup length array copy newfont 3 1 roll put} {exch
newfont 3 1 roll put} ifelse} {pop pop} ifelse } forall newfont
/FontName nfnam put nco&na aload pop nco&na length 2 idiv {newfont
/Encoding get 3 1 roll put} repeat nfnam newfont definefont pop end } def
/accvec [ 176 /agrave 181 /Agrave 190 /acircumflex 192 /Acircumflex
201 /adieresis 204 /Adieresis 209 /ccedilla 210 /Ccedilla 211 /eacute
212 /Eacute 213 /egrave 214 /Egrave 215 /ecircumflex 216 /Ecircumflex
217 /edieresis 218 /Edieresis 219 /icircumflex 220 /Icircumflex
221 /idieresis 222 /Idieresis 223 /ntilde 224 /Ntilde 226 /ocircumflex
228 /Ocircumflex 230 /Odieresis 231 /ucircumflex 236 /Ucircumflex
237 /udieresis 238 /Udieresis 239 /aring 240 /odieresis 242 /Aring 243 /ydieresis
244 /Ydieresis 246 /aacute 247 /Aacute 252 /ugrave 253 /Ugrave
127 /atilde 128 /Atilde 129 /oacute 130 /Oacute 131 /iacute
132 /Iacute 133 /igrave 134 /Igrave 135 /otilde 136 /Otilde
137 /uacute 138 /Uacute] def
/Times-Roman /Times-Roman accvec ReEncode
/Times-Italic /Times-Italic accvec ReEncode
/Times-Bold /Times-Bold accvec ReEncode
/Times-BoldItalic /Times-BoldItalic accvec ReEncode
/Helvetica /Helvetica accvec ReEncode
/Helvetica-Oblique /Helvetica-Oblique accvec ReEncode
/Helvetica-Bold /Helvetica-Bold accvec ReEncode
/Helvetica-BoldOblique /Helvetica-BoldOblique accvec ReEncode
/Courier /Courier accvec ReEncode
/Courier-Oblique /Courier-Oblique accvec ReEncode
/Courier-Bold /Courier-Bold accvec ReEncode
/Courier-BoldOblique /Courier-BoldOblique accvec ReEncode
/oshow {gsave [] 0 sd true charpath stroke gr} def
/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
text sw pop xs add /xs exch def} def
/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
pop neg xs add /xs exch def} def
/accspe [ 65 /plusminus 66 /bar 67 /existential 68 /universal
69 /exclam 70 /numbersign 71 /greater 72 /question 73 /integral
74 /colon 75 /semicolon 76 /less 77 /bracketleft 78 /bracketright
79 /greaterequal 80 /braceleft 81 /braceright 82 /radical
83 /spade 84 /heart 85 /diamond 86 /club 87 /lessequal
88 /multiply 89 /percent 90 /infinity 48 /circlemultiply 49 /circleplus
50 /emptyset 51 /lozenge 52 /bullet 53 /arrowright 54 /arrowup
55 /arrowleft 56 /arrowdown 57 /arrowboth 48 /degree 44 /comma 43 /plus 45 /angle 42 /angleleft 47 /divide 61 /notequal 40 /equivalence 41 /second 97 /approxequal 98 /congruent 99 /perpendicular 100 /partialdiff 101 /florin 102 /intersection
103 /union 104 /propersuperset 105 /reflexsuperset 106 /notsubset 107 /propersubset 108 /reflexsubset 109 /element 110 /notelement 111 /gradient 112 /logicaland 113 /logicalor 114 /arrowdblboth 115 /arrowdblleft 116 /arrowdblup 117 /arrowdblright
118 /arrowdbldown 119 /ampersand 120 /omega1 121 /similar 122 /aleph ] def
/Symbol /Special accspe ReEncode
%%EndProlog
%%BeginSetup
%%EndSetup
newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 6 lw 1 1 1 c 2268 2199 0 0 bf black 3 lw 1 1 1 c 1588 1539 340 330 bf black 1588 1539 340 330 bl 1 1 1 c 1588 1539 340 330 bf black 1588 1539 340 330 bl 9 lw 1 1 1 c black 348 469 m 619 X 16
1 d 48 X 8 1 d 15 X 4 1 d 4 X 6 1 d 3 X 4 1 d 3 X 4 1 d 4 1 d 3 1 d 3 X 2 1 d 3 1 d 3 1 d 3 1 d 3 1 d 2 1 d 2 1 d 3 1 d 2 1 d 2 1 d 3 2 d 2 1 d 2 1 d 2 1 d s 1126 492 m 13 11 d 3 3 d 12 15 d 4 5 d 11 18 d 5 10 d 9 22 d 6 17 d 9 27 d 7 25 d 8 32 d 8
35 d 8 40 d 8 43 d 8 49 d 8 51 d 9 62 d 7 53 d 11 85 d 5 42 d 16 134 d 15 134 d 12 92 d 4 35 d 10 68 d 6 42 d 7 42 d 6 30 d 3 13 d 6 23 d 5 17 d 5 13 d 5 10 d 6 5 d 5 1 d 5 -3 d 6 -8 d 5 -11 d 5 -17 d 6 -22 d 5 -20 d 6 -32 d 6 -40 d 3 -20 d 7 -50 d
9 -69 d 7 -55 d 9 -81 d 16 -145 d 16 -146 d 11 -100 d 5 -39 d 9 -71 d 7 -55 d 8 -57 d 8 -54 d 7 -47 d 8 -46 d 8 -39 d 8 -36 d 8 -32 d 8 -27 d 9 -27 d 7 -18 d 10 -22 d 6 -10 d 11 -18 d 5 -6 d 13 -13 d 3 -2 d 16 -11 d 15 -7 d 16 -4 d 16 -3 d 16 -1 d
16 -1 d 16 -1 d 127 X s 1904 330 m 16 X s 6 lw 340 330 m 1588 X s
gsave 1285 123
t 0 r 0 0 m /Helvetica-Bold findfont 102.56 sf 0 0 m (Energy \(KeV\)) show gr 340 376 m -46 Y s 393 353 m -23 Y s 446 353 m -23 Y s 499 353 m -23 Y s 552 376 m -46 Y s 605 353 m -23 Y s 658 353 m -23 Y s 711 353 m -23 Y s 763 376 m -46 Y s 816
353 m -23 Y s 869 353 m -23 Y s 922 353 m -23 Y s 975 376 m -46 Y s 1028 353 m -23 Y s 1081 353 m -23 Y s 1134 353 m -23 Y s 1187 376 m -46 Y s 1240 353 m -23 Y s 1293 353 m -23 Y s 1346 353 m -23 Y s 1398 376 m -46 Y s 1451 353 m -23 Y s 1504 353
m -23 Y s 1557 353 m -23 Y s 1610 376 m -46 Y s 1663 353 m -23 Y s 1716 353 m -23 Y s 1769 353 m -23 Y s 1822 376 m -46 Y s 1822 376 m -46 Y s 1875 353 m -23 Y s 1928 353 m -23 Y s
gsave 316 251
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (0) show gr
gsave 527 251
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (2) show gr
gsave 738 251
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (4) show gr
gsave 952 251
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (6) show gr
gsave 1162 251
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (8) show gr
gsave 1350 251
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (10) show gr
gsave 1564 251
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (12) show gr
gsave 1775 251
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (14) show gr 340 330 m 1539 Y s
gsave 97 1450
t 90 r 0 0 m /Helvetica-Bold findfont 102.56 sf 0 0 m (Intensity) show gr 388 330 m -48 X s 364 400 m -24 X s 364 469 m -24 X s 364 539 m -24 X s 388 609 m -48 X s 364 679 m -24 X s 364 749 m -24 X s 364 818 m -24 X s 388 888 m -48 X s 364 958 m
-24 X s 364 1028 m -24 X s 364 1097 m -24 X s 388 1167 m -48 X s 364 1237 m -24 X s 364 1307 m -24 X s 364 1376 m -24 X s 388 1446 m -48 X s 364 1516 m -24 X s 364 1586 m -24 X s 364 1656 m -24 X s 388 1725 m -48 X s 388 1725 m -48 X s 364 1795 m
-24 X s 364 1865 m -24 X s
gsave 285 293
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (0) show gr
gsave 194 573
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (200) show gr
gsave 194 852
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (400) show gr
gsave 194 1131
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (600) show gr
gsave 194 1410
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (800) show gr
gsave 145 1689
t 0 r 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (1000) show gr 3 lw 875 469 m 285 X 11 -1 d 10 X 11 -1 d 11 X 10 -1 d 11 -1 d 10 -1 d 9 -2 d 2 X 8 -1 d 3 -1 d 8 -2 d 2 X 8 -2 d 3 -1 d 7 -2 d 3 -1 d 8 -2 d 3 -1 d 7 -2 d 3 -2 d 8 -3 d 3 -1 d
8 -3 d 3 -1 d 8 -4 d 2 -1 d 9 -5 d 2 -1 d 9 -4 d 1 -1 d 11 -6 d 11 -6 d 10 -6 d -73 Y -518 X f 875 469 m 285 X 11 -1 d 10 X 11 -1 d 11 X 10 -1 d 11 -1 d 10 -1 d 9 -2 d 2 X 8 -1 d 3 -1 d 8 -2 d 2 X 8 -2 d 3 -1 d 7 -2 d 3 -1 d 8 -2 d 3 -1 d 7 -2 d 3
-2 d 8 -3 d 3 -1 d 8 -3 d 3 -1 d 8 -4 d 2 -1 d 9 -5 d 2 -1 d 9 -4 d 1 -1 d 11 -6 d 11 -6 d 10 -6 d s 1393 403 m 11 -6 d 10 -7 d 11 -6 d 10 -5 d 11 -6 d 9 -4 d 2 -1 d 8 -4 d 2 -1 d 8 -4 d 3 -1 d 8 -3 d 2 -1 d 8 -3 d 3 -1 d 8 -2 d 3 -1 d 7 -2 d 3 -1
d 8 -2 d 3 -1 d 8 -1 d 2 -1 d 9 -1 d 2 -1 d 10 -1 d 11 -1 d 11 -1 d 10 -1 d 11 -1 d 10 -1 d 32 X 11 -1 d 254 X -519 X f 1393 403 m 11 -6 d 10 -7 d 11 -6 d 10 -5 d 11 -6 d 9 -4 d 2 -1 d 8 -4 d 2 -1 d 8 -4 d 3 -1 d 8 -3 d 2 -1 d 8 -3 d 3 -1 d 8 -2 d
3 -1 d 7 -2 d 3 -1 d 8 -2 d 3 -1 d 8 -1 d 2 -1 d 9 -1 d 2 -1 d 10 -1 d 11 -1 d 11 -1 d 10 -1 d 11 -1 d 10 -1 d 32 X 11 -1 d 254 X s 1912 330 m 10 X -10 X f 1912 330 m 10 X s 6 lw 1335 1294 m 116 1 d s 3 lw 1451 1306 m 32 -11 d -31 -12 d f 6 lw 1451
1306 m 32 -11 d -31 -12 d -1 23 d cl s 3 lw 1335 1282 m -32 12 d 32 11 d f 6 lw 1335 1282 m -32 12 d 32 11 d -23 Y cl s
/xs 0 def (ENC) /Helvetica-Bold 82.6178 stwn gsave 1398 1139
t 0 r xs 2 div neg 0 t 0 0 m /Helvetica-Bold findfont 82.6178 sf 0 0 m (ENC) show gr
gr gr
showpage
end
%%EOF

View File

@ -1,125 +0,0 @@
%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 0 0 567 550
%%Title: /afs/psi.ch/project/mythen/mythen_datasheet/article/thr_scan_expl.eps: c1
%%Creator: ROOT Version 5.17/02
%%CreationDate: Mon Oct 27 10:29:18 2008
%%EndComments
%%BeginProlog
80 dict begin
/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
/c {setrgbcolor} def /black {0 setgray} def /sd {setdash} def
/cl {closepath} def /sf {scalefont setfont} def /lw {setlinewidth} def
/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
/mp {newpath /y exch def /x exch def} def
/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26{mt s} def
/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
0 w3 neg d w3 neg 0 d cl s } def
/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl fill gr} def
/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
4 {side} repeat cl s gr} def
/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d x w2 sub y w2 add m w w neg d x w2 sub y w2
sub m w w d s} def
/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
/reencdict 24 dict def /ReEncode {reencdict begin /nco&na exch def
/nfnam exch def /basefontname exch def /basefontdict basefontname findfont def
/newfont basefontdict maxlength dict def basefontdict {exch dup /FID ne
{dup /Encoding eq {exch dup length array copy newfont 3 1 roll put} {exch
newfont 3 1 roll put} ifelse} {pop pop} ifelse } forall newfont
/FontName nfnam put nco&na aload pop nco&na length 2 idiv {newfont
/Encoding get 3 1 roll put} repeat nfnam newfont definefont pop end } def
/accvec [ 176 /agrave 181 /Agrave 190 /acircumflex 192 /Acircumflex
201 /adieresis 204 /Adieresis 209 /ccedilla 210 /Ccedilla 211 /eacute
212 /Eacute 213 /egrave 214 /Egrave 215 /ecircumflex 216 /Ecircumflex
217 /edieresis 218 /Edieresis 219 /icircumflex 220 /Icircumflex
221 /idieresis 222 /Idieresis 223 /ntilde 224 /Ntilde 226 /ocircumflex
228 /Ocircumflex 230 /Odieresis 231 /ucircumflex 236 /Ucircumflex
237 /udieresis 238 /Udieresis 239 /aring 240 /odieresis 242 /Aring 243 /ydieresis
244 /Ydieresis 246 /aacute 247 /Aacute 252 /ugrave 253 /Ugrave
127 /atilde 128 /Atilde 129 /oacute 130 /Oacute 131 /iacute
132 /Iacute 133 /igrave 134 /Igrave 135 /otilde 136 /Otilde
137 /uacute 138 /Uacute] def
/Times-Roman /Times-Roman accvec ReEncode
/Times-Italic /Times-Italic accvec ReEncode
/Times-Bold /Times-Bold accvec ReEncode
/Times-BoldItalic /Times-BoldItalic accvec ReEncode
/Helvetica /Helvetica accvec ReEncode
/Helvetica-Oblique /Helvetica-Oblique accvec ReEncode
/Helvetica-Bold /Helvetica-Bold accvec ReEncode
/Helvetica-BoldOblique /Helvetica-BoldOblique accvec ReEncode
/Courier /Courier accvec ReEncode
/Courier-Oblique /Courier-Oblique accvec ReEncode
/Courier-Bold /Courier-Bold accvec ReEncode
/Courier-BoldOblique /Courier-BoldOblique accvec ReEncode
/oshow {gsave [] 0 sd true charpath stroke gr} def
/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
text sw pop xs add /xs exch def} def
/stwb { /fs exch def /fn exch def /nbas exch def /textf exch deftextf length /tlen exch def nbas tlen gt {/nbas tlendef} iffn findfont fs sf textf dup length nbas sub nbas getinterval sw
pop neg xs add /xs exch def} def
/accspe [ 65 /plusminus 66 /bar 67 /existential 68 /universal
69 /exclam 70 /numbersign 71 /greater 72 /question 73 /integral
74 /colon 75 /semicolon 76 /less 77 /bracketleft 78 /bracketright
79 /greaterequal 80 /braceleft 81 /braceright 82 /radical
83 /spade 84 /heart 85 /diamond 86 /club 87 /lessequal
88 /multiply 89 /percent 90 /infinity 48 /circlemultiply 49 /circleplus
50 /emptyset 51 /lozenge 52 /bullet 53 /arrowright 54 /arrowup
55 /arrowleft 56 /arrowdown 57 /arrowboth 48 /degree 44 /comma 43 /plus 45 /angle 42 /angleleft 47 /divide 61 /notequal 40 /equivalence 41 /second 97 /approxequal 98 /congruent 99 /perpendicular 100 /partialdiff 101 /florin 102 /intersection
103 /union 104 /propersuperset 105 /reflexsuperset 106 /notsubset 107 /propersubset 108 /reflexsubset 109 /element 110 /notelement 111 /gradient 112 /logicaland 113 /logicalor 114 /arrowdblboth 115 /arrowdblleft 116 /arrowdblup 117 /arrowdblright
118 /arrowdbldown 119 /ampersand 120 /omega1 121 /similar 122 /aleph ] def
/Symbol /Special accspe ReEncode
%%EndProlog
%%BeginSetup
%%EndSetup
newpath gsave .25 .25 scale gsave 0 0 t black[ ] 0 sd 3 lw 1 1 1 c 2268 2199 0 0 bf black 1 1 1 c 1815 1761 339 319 bf black 1815 1761 339 319 bl 1 1 1 c 1815 1761 339 319 bf black 1815 1761 339 319 bl 9 lw 0.95 0.95 0.95 c black 348 1996 m 18
-9 d 18 -9 d 19 -9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 19 -8 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 19 -9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 19 -9 d 18 -8 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 19 -9 d 18 -9 d 18
-9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 19 -9 d 18 -9 d 18 -8 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 19 -9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d 18 -9 d s 1237 1558 m 18 -9 d 19 -9 d 18 -10 d 18 -10 d 18 -10 d 18 -12 d 18 -12 d 18 -15 d 19 -17 d 18 -20 d 18
-24 d 18 -29 d 18 -35 d 18 -41 d 19 -48 d 18 -55 d 18 -61 d 18 -67 d 18 -72 d 18 -75 d 18 -76 d 19 -74 d 18 -72 d 18 -67 d 18 -61 d 18 -54 d 18 -46 d 18 -38 d 19 -32 d 18 -24 d 18 -19 d 18 -14 d 18 -10 d 18 -7 d 18 -5 d 19 -4 d 18 -2 d 18 -1 d 18
-1 d 18 X 18 -1 d 146 X s 2127 319 m 18 X s 3 lw 339 319 m 1815 X s 339 372 m -53 Y s 392 345 m -26 Y s 446 345 m -26 Y s 499 345 m -26 Y s 553 372 m -53 Y s 606 345 m -26 Y s 659 345 m -26 Y s 713 345 m -26 Y s 766 372 m -53 Y s 819 345 m -26 Y s
873 345 m -26 Y s 926 345 m -26 Y s 980 372 m -53 Y s 1033 345 m -26 Y s 1086 345 m -26 Y s 1140 345 m -26 Y s 1193 372 m -53 Y s 1246 345 m -26 Y s 1300 345 m -26 Y s 1353 345 m -26 Y s 1407 372 m -53 Y s 1460 345 m -26 Y s 1513 345 m -26 Y s 1567
345 m -26 Y s 1620 372 m -53 Y s 1673 345 m -26 Y s 1727 345 m -26 Y s 1780 345 m -26 Y s 1834 372 m -53 Y s 1887 345 m -26 Y s 1940 345 m -26 Y s 1994 345 m -26 Y s 2047 372 m -53 Y s 2047 372 m -53 Y s 2100 345 m -26 Y s 2154 345 m -26 Y s
gsave 2268 2199 0 0 C 316 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 527 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (2) show NC gr
gsave 2268 2199 0 0 C 741 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (4) show NC gr
gsave 2268 2199 0 0 C 954 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (6) show NC gr
gsave 2268 2199 0 0 C 1168 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (8) show NC gr
gsave 2268 2199 0 0 C 1359 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (10) show NC gr
gsave 2268 2199 0 0 C 1573 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (12) show NC gr
gsave 2268 2199 0 0 C 1786 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (14) show NC gr
gsave 2268 2199 0 0 C 2000 239 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (16) show NC gr 339 319 m 1761 Y s 393 319 m -54 X s 366 387 m -27 X s 366 456 m -27 X s 366 524 m -27 X s 393 592 m -54 X s 366 661 m -27 X s 366 729 m -27 X s 366
797 m -27 X s 393 865 m -54 X s 366 934 m -27 X s 366 1002 m -27 X s 366 1070 m -27 X s 393 1139 m -54 X s 366 1207 m -27 X s 366 1275 m -27 X s 366 1344 m -27 X s 393 1412 m -54 X s 366 1480 m -27 X s 366 1548 m -27 X s 366 1617 m -27 X s 393 1685
m -54 X s 366 1753 m -27 X s 366 1822 m -27 X s 366 1890 m -27 X s 393 1958 m -54 X s 393 1958 m -54 X s 366 2027 m -27 X s
gsave 2268 2199 0 0 C 285 282 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 145 556 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (2000) show NC gr
gsave 2268 2199 0 0 C 145 829 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (4000) show NC gr
gsave 2268 2199 0 0 C 145 1103 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (6000) show NC gr
gsave 2268 2199 0 0 C 145 1376 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (8000) show NC gr
gsave 2268 2199 0 0 C 100 1650 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (10000) show NC gr
gsave 2268 2199 0 0 C 100 1923 t 0 r /Helvetica-Bold findfont 82.6178 sf 0 0 m (12000) show NC gr [ 4 8] 0 sd 6 lw 339 1370 m 1121 X s[ ] 0 sd 3 lw 0.95 0.95 0.95 c black 348 1685 m 889 X s 1237 1685 m 18 X 19 -1 d 18 X 18 -2 d 18 -1 d 18 -3 d 18
-5 d 18 -6 d 19 -10 d 18 -13 d 18 -19 d 18 -24 d 18 -32 d 18 -41 d 19 -49 d 18 -59 d 18 -69 d 18 -76 d 18 -84 d 18 -89 d 18 -92 d 19 -92 d 18 -89 d 18 -85 d 18 -78 d 18 -70 d 18 -61 d 18 -51 d 19 -42 d 18 -33 d 18 -26 d 18 -20 d 18 -14 d 18 -10 d
18 -7 d 19 -5 d 18 -3 d 18 -2 d 18 -1 d 18 -1 d 18 X 19 -1 d 127 X s 2127 319 m 18 X s[ 12 12] 0 sd 6 lw 339 1685 m 1281 X s 1620 1685 m -1366 Y s 1620 319 m 534 X s[ 4 8] 0 sd 977 319 m 1368 Y s
gsave 2268 2199 0 0 C 1695 333 t 0 r /Helvetica-Bold findfont 68.3734 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 1630 362 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (E) show NC gr
gsave 2268 2199 0 0 C 1054 333 t 0 r /Helvetica-Bold findfont 68.3734 sf 0 0 m (t) show NC gr
gsave 2268 2199 0 0 C 989 362 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (E) show NC gr
gsave 2268 2199 0 0 C 439 1698 t 0 r /Helvetica-Bold findfont 68.3734 sf 0 0 m (0) show NC gr
gsave 2268 2199 0 0 C 370 1726 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (N) show NC gr [ ] 0 sd 1545 1480 m 43 X s 3 lw 1588 1499 m 32 -19 d -32 -18 d f 6 lw 1588 1499 m 32 -19 d -32 -18 d 37 Y cl s 3 lw 1545 1462 m -32 18 d 32 19 d f 6 lw
1545 1462 m -32 18 d 32 19 d -37 Y cl s
gsave 2268 2199 0 0 C 1501 1521 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (ENC) show NC gr 926 1403 m 250 Y s 3 lw 908 1653 m 18 32 d 18 -32 d f 6 lw 908 1653 m 18 32 d 18 -32 d -36 X cl s 3 lw 944 1403 m -18 -32 d -18 32 d f 6 lw 944 1403 m
-18 -32 d -18 32 d 36 X cl s
gsave 2268 2199 0 0 C 855 1467 t 0 r /Helvetica-Bold findfont 68.3734 sf 0 0 m (S) show NC gr
gsave 2268 2199 0 0 C 786 1496 t 0 r /Helvetica-Bold findfont 102.56 sf 0 0 m (N) show NC gr
gr gr
showpage
end
%%EOF

Some files were not shown because too many files have changed in this diff Show More