1 | // **************************************************************************
|
---|
2 | /** @mainpage
|
---|
3 |
|
---|
4 | @brief FACT++ - The FACT slow control software
|
---|
5 |
|
---|
6 | @author thomas.bretz@epfl.ch et al.
|
---|
7 | <!--@version 1.0-->
|
---|
8 |
|
---|
9 | <hr width="100%">
|
---|
10 |
|
---|
11 | @section toc Table of contents
|
---|
12 | <table border='1' bgcolor=#FAFAFA width='100%'>
|
---|
13 | <tr>
|
---|
14 | <td>
|
---|
15 | <ul>
|
---|
16 | <li> @ref install_sec
|
---|
17 | <ul>
|
---|
18 | <li> @ref rootwarning
|
---|
19 | <li> @ref packages
|
---|
20 | <li> @ref installroot
|
---|
21 | </ul>
|
---|
22 | <li> @ref demos
|
---|
23 | <li> @ref dimremarks
|
---|
24 | <li> @ref addtab
|
---|
25 | <li> @ref Documentation
|
---|
26 | <li> @ref References
|
---|
27 | <ul>
|
---|
28 | <li> @ref generalref
|
---|
29 | <li> @ref boostref
|
---|
30 | <li> @ref fitsref
|
---|
31 | <li> @ref qtroot
|
---|
32 | </ul>
|
---|
33 | <li> @ref availableprograms
|
---|
34 | <li> @ref Examples
|
---|
35 | </ul>
|
---|
36 | </tr>
|
---|
37 | </td>
|
---|
38 | </table>
|
---|
39 |
|
---|
40 | @section install_sec Installation
|
---|
41 |
|
---|
42 | FACT++ can be downloaded from the svn by
|
---|
43 |
|
---|
44 | \verbatim
|
---|
45 | svn checkout https://www.fact-project.org/svn/trunk/FACT++ [localdir]
|
---|
46 | \endverbatim
|
---|
47 |
|
---|
48 | it includes a dim version which is automatically compiled.
|
---|
49 |
|
---|
50 | For compilation use
|
---|
51 |
|
---|
52 | \verbatim
|
---|
53 | ./configure
|
---|
54 | make
|
---|
55 | \endverbatim
|
---|
56 |
|
---|
57 | Check the \b ./configure options with \b --help. It might look
|
---|
58 | confusing, but some features like FITS or QT4 can be switched off,
|
---|
59 | if the necessary library is not at hand and the feature is not needed.
|
---|
60 | For example, if the GUI is not needed its compilation can be switched
|
---|
61 | off by disabling QT4 support with \b --without-qt4.
|
---|
62 |
|
---|
63 | If you use a custom built root version on your system without QT
|
---|
64 | support, but have a distribution packe (e.g. debian package) with
|
---|
65 | QT support available, you can give the path to root executables,
|
---|
66 | for example, with <B>--with-rootsys=/usr/bin</B>. All other paths
|
---|
67 | are extracted from subsequent calls to \b root-config.
|
---|
68 |
|
---|
69 | Running \b ./configure will take some time. It tries to really check
|
---|
70 | carefully that everything needed is available on your system, so that you
|
---|
71 | get errors before you start compilation.
|
---|
72 |
|
---|
73 | If \b ./configure fails and you send a bug report please attach
|
---|
74 | the file config.log.
|
---|
75 |
|
---|
76 | If \b make fails and you send a bug report please attach
|
---|
77 | the complete output of <B>make V=1</B>.
|
---|
78 |
|
---|
79 | \b Reminder: These programs use shared libraries, i.e. whenever you re-compile
|
---|
80 | part of the project some of them might be re-compiled as well. As a result
|
---|
81 | already running programs might crash unexpectedly! This is \b not a bug.
|
---|
82 |
|
---|
83 | In principle configure also supports
|
---|
84 |
|
---|
85 | \verbatim
|
---|
86 | make install
|
---|
87 | \endverbatim
|
---|
88 |
|
---|
89 | which would install the package and the libraries in your system,
|
---|
90 | although at the moment this is not recommended
|
---|
91 |
|
---|
92 | @subsection rootwarning ROOT warnings during compilation
|
---|
93 |
|
---|
94 | During compilation of the GUI you get some warning from root's TQtWidget.h.
|
---|
95 | These warnings are completely harmless and can be ignored. However, it is sometimes
|
---|
96 | advicable to get rid of them to get a clean compiler run which makes development
|
---|
97 | easier.
|
---|
98 |
|
---|
99 | Therefore replace
|
---|
100 | \verbatim
|
---|
101 | inline void resize(const QSize &size) { QPixmap newSize(size); *(QPixmap *)this = newSize; }
|
---|
102 | \endverbatim
|
---|
103 | by
|
---|
104 | \verbatim
|
---|
105 | inline void resize(const QSize &sz) { QPixmap newSize(sz); *(QPixmap *)this = newSize; }
|
---|
106 | \endverbatim
|
---|
107 | in TQtWidget.h
|
---|
108 |
|
---|
109 |
|
---|
110 | @subsection packages Required packages
|
---|
111 |
|
---|
112 | The following section gives a list of packages which were necessary after
|
---|
113 | a fresh Ubuntu 11.04 installation. In addition to all the development
|
---|
114 | packages the corresponding package with the library is needed.
|
---|
115 |
|
---|
116 | Note that a recent C++ compiler is needed supporting the latest C++0x
|
---|
117 | standard.
|
---|
118 |
|
---|
119 | <i>Required (configure will fail without them)</i>
|
---|
120 | - subversion
|
---|
121 | - gcc
|
---|
122 | - g++
|
---|
123 | - make
|
---|
124 | - libreadline6-dev
|
---|
125 | - libboost-all-dev
|
---|
126 | - libx11-dev (needed for lesstif, qt4, root)
|
---|
127 |
|
---|
128 | <i>FITS file support (datalogger, event builder)</i>
|
---|
129 | - libccfits-dev
|
---|
130 |
|
---|
131 | <i>MySQL support (command line options, scheduler)</i>
|
---|
132 | - libmysqlclient-dev (optional for MySQL support)
|
---|
133 | - libmysql++-dev (option for MySQL support)
|
---|
134 |
|
---|
135 | <i>If you want 'did'</i>
|
---|
136 | - lesstif2-dev
|
---|
137 |
|
---|
138 | <i>For JavaScrip support</i>
|
---|
139 | - libv8-dev
|
---|
140 |
|
---|
141 | <i>To compile the GUIs</i>
|
---|
142 | - libqt4-dev
|
---|
143 | - root (see section about root, currently recommended versions 5.18/00b-5.26/00e)
|
---|
144 |
|
---|
145 | <i>To compile the raw data viewer</i>
|
---|
146 | - libglu1-mesa-dev
|
---|
147 |
|
---|
148 | <i>To compile smartfact with astronomy support and moon</i>
|
---|
149 | - libnova-dev
|
---|
150 |
|
---|
151 | <i>To compile tngweather</i>
|
---|
152 | - libsoprano-dev
|
---|
153 |
|
---|
154 | <i>To compile skypeclient</i>
|
---|
155 | - libdbus-1-dev
|
---|
156 | - libdbus-glib-1-dev
|
---|
157 |
|
---|
158 | <i>To create your own documentation</i>
|
---|
159 | - graphviz
|
---|
160 | - doxygen
|
---|
161 | - help2man
|
---|
162 | - groff
|
---|
163 | - ps2pdf
|
---|
164 |
|
---|
165 | <i>To create JavaScript documentation</i>
|
---|
166 | - jsdoc-toolkit
|
---|
167 |
|
---|
168 | <i>For developers</i>
|
---|
169 | - autoconf
|
---|
170 | - autoconf-archive
|
---|
171 | - libtool
|
---|
172 | - qt4-designer
|
---|
173 |
|
---|
174 | If you intend to change only Makefile.am but not configure.ac the \b automake
|
---|
175 | package instead of the \b autoconf package should be enough.
|
---|
176 |
|
---|
177 | <i>Some nice to have (FACT++)</i>
|
---|
178 | - colorgcc
|
---|
179 | - colordiff
|
---|
180 |
|
---|
181 | <i>Some nice to have (system)</i>
|
---|
182 | - fte
|
---|
183 | - efte
|
---|
184 | - htop
|
---|
185 |
|
---|
186 | <i>Documentation (usually accessible through http://localhost/ for the tools above:</I>
|
---|
187 | - autoconf-doc
|
---|
188 | - gcc-doc
|
---|
189 | - graphviz-doc
|
---|
190 | - libboost-doc
|
---|
191 | - libmysql++-doc
|
---|
192 | - libtool-doc
|
---|
193 | - make-doc
|
---|
194 | - qt4-dev-tools [qt4-assistant]
|
---|
195 | - qt4-doc-html
|
---|
196 |
|
---|
197 |
|
---|
198 | <!--
|
---|
199 | VIEWER
|
---|
200 | libqwt5-qt4-dev
|
---|
201 | libqwt5-doc
|
---|
202 | -->
|
---|
203 |
|
---|
204 | @subsection installroot How to install root 5.26/00 on Ubuntu 11.04 (natty)
|
---|
205 |
|
---|
206 | - install gpp4.4, gcc4.4, g++4.4 (root does not compile with gcc4.5)
|
---|
207 | - make links to hidden X11 libraries:
|
---|
208 | <B><pre>
|
---|
209 | cd /usr/local
|
---|
210 | sudo ln -s x86_64-linux-gnu/libX* .
|
---|
211 | </pre></B>
|
---|
212 | - in the root source directory
|
---|
213 | <B><pre>
|
---|
214 | ./configure --enable-qt --with-cc=gcc-4.4 --with-cxx=g++-4.4 --with-xrootd-opts=--syslibs=/usr/lib/x86_64-linux-gnu --prefix=/usr/local
|
---|
215 | </pre></B>
|
---|
216 | - \b make
|
---|
217 | - <b>sudo make install</b>
|
---|
218 | - pray
|
---|
219 | - don't forget to set LD_LIBRARY_PATH correctly before you try to start the fact gui
|
---|
220 |
|
---|
221 |
|
---|
222 | @section demos Current demonstration programs
|
---|
223 |
|
---|
224 | - \b dserver2: A virtual board (A TCP/IP server). It is sending a
|
---|
225 | "hello" message after accepting a communication and then in 3s
|
---|
226 | intervals the current UTC time. The board can be set to state 1 or back
|
---|
227 | to state 0 (just as a demonstration)
|
---|
228 | - \b dclient5: A control program. It accesses two viratual boards (start them
|
---|
229 | with 'dserver2 5000' and 'dserver2 4001') If both boards are connected the START
|
---|
230 | command can be issued to get them to state 'Running'. In this state
|
---|
231 | an asynchronous time stamp can be requested sending the TIME command.
|
---|
232 | to get back from Running to Connected use STOP.
|
---|
233 | - \b test3: a dim console which allows to control all dim servers
|
---|
234 | by sending commands via the dim network.
|
---|
235 | - Both, \b dclient5 and \b test3 accept the command line options -c0, -c1, -c2
|
---|
236 | to switch between different console types (or no console in the case of
|
---|
237 | \b dclient5). In the console you get help with 'h' and the available
|
---|
238 | command with 'c' You get the avilable command-line options with --help
|
---|
239 |
|
---|
240 | First start the two dserver2s. Then start a dclient5 (if you want it
|
---|
241 | with console use one of the -c options) and a test3 console (with one
|
---|
242 | of the console options if you like) you can now control the hardware
|
---|
243 | boards with the START, STOP and TIME commands or stop (Ctrl-C) and
|
---|
244 | start one of the programs to see what's happening. In the test3 case
|
---|
245 | you first have to \e cd to the server to which you want to talk by \b
|
---|
246 | DATA_LOGGER. Don't forget to start \b dns if you want to control dclient5
|
---|
247 | from test3 via Dim.
|
---|
248 |
|
---|
249 | @section dimremarks Remarks about Dim usage
|
---|
250 |
|
---|
251 | To be able to write all received data directly to the FITS files,
|
---|
252 | padding has been disabled calling dic_diable_padding() and
|
---|
253 | dis_disable_padding(). This is done in our own error handler
|
---|
254 | DimErrorRedirecter. Since this should be one of the first
|
---|
255 | objects created in any environment it is quite save. However, every
|
---|
256 | Dim client or server in our network which does not use the
|
---|
257 | DimErrorRedirecter \b must call these two functions as early as
|
---|
258 | possible.
|
---|
259 |
|
---|
260 | <!--
|
---|
261 | @section exitcodes Exit Code
|
---|
262 | @section newcommand How to add a new command?
|
---|
263 | @section description How to add help textes to services and commands?
|
---|
264 | -->
|
---|
265 |
|
---|
266 | @section blocking Blocking programs at startup
|
---|
267 |
|
---|
268 | At startup most programs try to resolve the name of the dim-dns
|
---|
269 | as well as their local IP address. After this Dim is initialized
|
---|
270 | and tries to contact the dns. These are so far the only blocking operations.
|
---|
271 | Be patient at program startup. They will usually timeout after a while and
|
---|
272 | give you proper informations.
|
---|
273 |
|
---|
274 |
|
---|
275 | @section addtab How to add a new tab in the gui?
|
---|
276 |
|
---|
277 | Do the following steps in exactly this order:
|
---|
278 | - Insert the new page from the context menu of the QTabWidget
|
---|
279 | - Copy the QDockWidget from one of the other tabs to the clipboard
|
---|
280 | - Paste the copied QDockWidget and add it to the new tab (only the tab should be highlited)
|
---|
281 | - Now click on the context menu of the region in the tab (QWidget) and change the layout to grid layout
|
---|
282 |
|
---|
283 |
|
---|
284 | @section Documentation
|
---|
285 |
|
---|
286 | Each program has an extensive help text (except the examples). This
|
---|
287 | help text can be displayed with the \b --help option. For each program
|
---|
288 | a man-page is automatically created (from the help-output), which (at
|
---|
289 | the moment) can be accessed with <B>man ./program.man</B> (Don't forget
|
---|
290 | the ./ before the filename). With <B>make program.html</B> and
|
---|
291 | <B>make program.pdf</B> a HTML page and a pdf document can be created
|
---|
292 | from the man-page.
|
---|
293 |
|
---|
294 | With <B>make doxygen-doc</B> the HTML documentation as well as a pdf
|
---|
295 | with the whole code documentation can be created.
|
---|
296 |
|
---|
297 | @subsection FACT++ programs
|
---|
298 |
|
---|
299 | Each documentation is also available with <B>program --help</B> or
|
---|
300 | <B>man ./program.man</B>.
|
---|
301 |
|
---|
302 | In alphabetic order:
|
---|
303 |
|
---|
304 | - <A HREF="man/biasctrl.html">biasctrl</A> [<A HREF="pdf/biasctrl.pdf">pdf</A>]
|
---|
305 | - <A HREF="man/datalogger.html">datalogger</A> [<A HREF="pdf/datalogger.pdf">pdf</A>]
|
---|
306 | - <A HREF="man/dimctrl.html">dimctrl</A> [<A HREF="pdf/dimctrl.pdf">pdf</A>]
|
---|
307 | - <A HREF="man/drivctrl.html">drivectrl</A> [<A HREF="pdf/drivctrl.pdf">pdf</A>]
|
---|
308 | - <A HREF="man/fadctrl.html">fadctrl</A> [<A HREF="pdf/fadctrl.pdf">pdf</A>]
|
---|
309 | - <A HREF="man/feedback.html">feedback</A> [<A HREF="pdf/feedback.pdf">pdf</A>]
|
---|
310 | - <A HREF="man/fitsdump.html">fitsdump</A> [<A HREF="pdf/fitsdump.pdf">pdf</A>]
|
---|
311 | - <A HREF="man/fscctrl.html">fscctrl</A> [<A HREF="pdf/fscctrl.pdf">pdf</A>]
|
---|
312 | - <A HREF="man/ftmctrl.html">ftmctrl</A> [<A HREF="pdf/ftmctrl.pdf">pdf</A>]
|
---|
313 | - <A HREF="man/gpsctrl.html">gpsctrl</A> [<A HREF="pdf/gpsctrl.pdf">pdf</A>]
|
---|
314 | - <A HREF="man/lidctrl.html">lidctrl</A> [<A HREF="pdf/lidctrl.pdf">pdf</A>]
|
---|
315 | - <A HREF="man/magiclidar.html">magiclidar</A> [<A HREF="pdf/magiclidar.pdf">pdf</A>]
|
---|
316 | - <A HREF="man/magicweather.html">magicweather</A> [<A HREF="pdf/magicweather.pdf">pdf</A>]
|
---|
317 | - <A HREF="man/mcp.html">mcp</A> [<A HREF="pdf/mcp.pdf">pdf</A>]
|
---|
318 | - <A HREF="man/nsa.html">nsa</A> [<A HREF="pdf/nsa.pdf">pdf</A>]
|
---|
319 | - <A HREF="man/pwrctrl.html">pwrctrl</A> [<A HREF="pdf/pwrctrl.pdf">pdf</A>]
|
---|
320 | - <A HREF="man/ratecontrol.html">ratecontrol</A> [<A HREF="pdf/ratecontrol.pdf">pdf</A>]
|
---|
321 | - <A HREF="man/ratescan.html">ratescan</A> [<A HREF="pdf/ratescan.pdf">pdf</A>]
|
---|
322 | - <A HREF="man/showlog.html">showlog</A> [<A HREF="pdf/showlog.pdf">pdf</A>]
|
---|
323 | - <A HREF="man/smartfact.html">smartfact</A> [<A HREF="pdf/smartfact.pdf">pdf</A>]
|
---|
324 | - <A HREF="man/temperature.html">temperature</A> [<A HREF="pdf/temperature.pdf">pdf</A>]
|
---|
325 | - <A HREF="man/timecheck.html">timecheck</A> [<A HREF="pdf/timecheck.pdf">pdf</A>]
|
---|
326 | - <A HREF="man/tngweather.html">tngweather</A> [<A HREF="pdf/tngweather.pdf">pdf</A>]
|
---|
327 |
|
---|
328 |
|
---|
329 | @section References
|
---|
330 |
|
---|
331 | @subsection generalref General references
|
---|
332 | - <A HREF="http://www.cplusplus.com/reference">The C++ reference</A>
|
---|
333 | - <A HREF="http://www.boost.org">boost.org: The boost C++ libraries</A>
|
---|
334 | - <A HREF="http://www.highscore.de/cpp/boost/titelseite.html">Boris Schäling: Die Boost C++ Bibliotheken</A>
|
---|
335 | - <A HREF="http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html">GNU Readline</A>
|
---|
336 | - <A HREF="http://www.gnu.org/software/ncurses">GNU Ncurses</A>
|
---|
337 | - <A HREF="http://dim.web.cern.ch/">Distributed Information Management (DIM)</A>
|
---|
338 | - <A HREF="http://dim.web.cern.ch/dim/cpp_doc/DimCpp.html">Distributed Information Management (DIM) - C++ reference</A>
|
---|
339 | - <A HREF="http://qt.nokia.com/">Qt homepage</A>
|
---|
340 | - <A HREF="http://qt.nokia.com/downloads/">Qt downloads</A>
|
---|
341 |
|
---|
342 | @subsection boostref Boost references
|
---|
343 | - <A HREF="http://www.boost.org/doc/libs/1_45_0/libs/bind/bind.html">boost::bind (V1.45.0)</A>
|
---|
344 | - <A HREF="http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio.html">boost asio (V1.45.0)</A>
|
---|
345 | - <A HREF="http://www.boost.org/doc/libs/1_45_0/doc/html/date_time.html">boost date_time (V1.45.0)</A>
|
---|
346 | - <A HREF="http://www.boost.org/doc/libs/1_45_0/doc/html/program_options.html">boost program_options (V1.45.0)</A>
|
---|
347 | - <A HREF="http://www.boost.org/doc/libs/1_45_0/libs/filesystem/v3/doc/index.htm">boost filesystem (V1.45.0)</A>
|
---|
348 | - <A HREF="http://www.boost.org/doc/libs/1_45_0/libs/regex/doc/html/index.html">boost regex (V1.45.0)</A>
|
---|
349 | - <A HREF="http://www.boost.org/doc/libs/1_45_0/libs/system/doc/index.html">boost system (error codes) (V1.45.0)</A>
|
---|
350 | - <A HREF="http://www.boost.org/doc/libs/1_45_0/doc/html/thread.html">boost thread (V1.45.0)</A>
|
---|
351 | - <A HREF="http://www.boost.org/doc/libs/1_45_0/libs/conversion/lexical_cast.htm">boost lexical_cast (V1.45.0)</A>
|
---|
352 |
|
---|
353 | @subsection fitsref FITS references
|
---|
354 | - <A HREF="http://heasarc.gsfc.nasa.gov/docs/heasarc/fits.html">The FITS data format</A>
|
---|
355 | - <A HREF="http://heasarc.gsfc.nasa.gov/fitsio/">FITS homepage</A>
|
---|
356 | - <A HREF="http://heasarc.gsfc.nasa.gov/fitsio/CCfits/">CCfits - A C++ wrapper to cfitsio</A>
|
---|
357 | - <A HREF="http://heasarc.gsfc.nasa.gov/docs/software/ftools/fv/">fv - A very simple viewer to FITS file contents</A>
|
---|
358 | - <A HREF="http://www.star.bris.ac.uk/~mbt/topcat/">topcat - <B>T</B>ool for <B>OP</B>erations on <B>C</B>atalogues <B>A</B>nd <B>T</B>ables
|
---|
359 |
|
---|
360 | @subsection qtroot How to integrate root in QT?
|
---|
361 |
|
---|
362 | - <A HREF="http://doc.trolltech.com/4.3/designer-creating-custom-widgets.html">QT4: Creating custom widgets</A>
|
---|
363 | - <A HREF="http://root.cern.ch/download/doc/26ROOTandQt.pdf">root: QT integration (pdf)</A>
|
---|
364 |
|
---|
365 |
|
---|
366 | @section availableprograms Available programs
|
---|
367 |
|
---|
368 | - dns: Dim's domain-name-server (needed for any communication between Dim servers and clients)
|
---|
369 | - did: A simple graphical interface to analyse everything in a Dim network
|
---|
370 |
|
---|
371 | @section Examples
|
---|
372 |
|
---|
373 | There are a few example programs
|
---|
374 | - \b ./argv: Example for usage of the class Configure (command line options, configuration file)
|
---|
375 | - \b ./time: Example for the usage of the class Time (time input/output, conversion)
|
---|
376 | - \b ./log, \b ./logtime: A simple Dim-Service/-Client combination using MessageDimRX/MessageDimTX
|
---|
377 |
|
---|
378 | **/
|
---|
379 | // **************************************************************************
|
---|