diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 00000000..c808f8c3 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Andreas Suter diff --git a/COPYING b/COPYING new file mode 120000 index 00000000..71537690 --- /dev/null +++ b/COPYING @@ -0,0 +1 @@ +/usr/share/automake-1.9/COPYING \ No newline at end of file diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 00000000..a9ae8d19 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,3 @@ +musrfit 0.5.0 + +- Initial release supporting building by autotools diff --git a/INSTALL b/INSTALL new file mode 100644 index 00000000..8c10d556 --- /dev/null +++ b/INSTALL @@ -0,0 +1,18 @@ +#--------------------------------------------------------------------- +# INSTALL +# Andreas Suter, 2008/01/15 +# $Id: README 3854 2009-04-14 19:32:35Z nemu $ +#--------------------------------------------------------------------- + +To get it all build: + + ./autogen.sh + ./configure --prefix=/apps/cern/root + make + make install + +In the optimal case, everything is setup ;-) + +#--------------------------------------------------------------------- +# this is the end ... +#--------------------------------------------------------------------- diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 00000000..1c2930f1 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,5 @@ +## Process this file with automake to create Makefile.in + +SUBDIRS = src + +EXTRA_DIST = autogen.sh acinclude.m4 diff --git a/NEWS b/NEWS new file mode 100644 index 00000000..e69de29b diff --git a/src/README b/README similarity index 62% rename from src/README rename to README index 04fd9f83..965d336b 100644 --- a/src/README +++ b/README @@ -1,21 +1,14 @@ #--------------------------------------------------------------------- # README # Andreas Suter, 2008/01/15 -# $Id$ +# $Id: README 3854 2009-04-14 19:32:35Z nemu $ #--------------------------------------------------------------------- To get it all build: -1) go to the subdiretory 'classes' and execute - - make -f Makefile.PMusr - make -f Makefile.PMusr install (as root) - -2) if the privous step worked execute in the current directory (in which - you found this README) - - make clean - make + ./autogen.sh + ./configure --prefix=/apps/cern/root + make make install In the optimal case, everything is setup ;-) diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 00000000..4b6e4e16 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,128 @@ +dnl -*- mode: autoconf -*- +dnl +dnl $Id: root.m4,v 1.3 2005/03/21 21:42:21 rdm Exp $ +dnl $Author: rdm $ +dnl $Date: 2005/03/21 21:42:21 $ +dnl +dnl Autoconf macro to check for existence or ROOT on the system +dnl Synopsis: +dnl +dnl ROOT_PATH([MINIMUM-VERSION, [ACTION-IF-FOUND, [ACTION-IF-NOT-FOUND]]]) +dnl +dnl Some examples: +dnl +dnl ROOT_PATH(3.03/05, , AC_MSG_ERROR(Your ROOT version is too old)) +dnl ROOT_PATH(, AC_DEFINE([HAVE_ROOT])) +dnl +dnl The macro defines the following substitution variables +dnl +dnl ROOTCONF full path to root-config +dnl ROOTEXEC full path to root +dnl ROOTCINT full path to rootcint +dnl ROOTLIBDIR Where the ROOT libraries are +dnl ROOTINCDIR Where the ROOT headers are +dnl ROOTETCDIR Where the ROOT configuration is +dnl ROOTCFLAGS Extra compiler flags +dnl ROOTLIBS ROOT basic libraries +dnl ROOTGLIBS ROOT basic + GUI libraries +dnl ROOTAUXLIBS Auxilary libraries and linker flags for ROOT +dnl ROOTAUXCFLAGS Auxilary compiler flags +dnl ROOTRPATH Same as ROOTLIBDIR +dnl +dnl The macro will fail if root-config and rootcint isn't found. +dnl +dnl Christian Holm Christensen +dnl +AC_DEFUN([ROOT_PATH], +[ + AC_ARG_WITH([rootsys], + [AC_HELP_STRING([--with-rootsys], + [top of the ROOT installation directory])], + [user_rootsys=$withval], + [user_rootsys="none"]) + if test ! x"$user_rootsys" = xnone; then + rootbin="$user_rootsys/bin" + elif test ! x"$ROOTSYS" = x ; then + rootbin="$ROOTSYS/bin" + else + rootbin=$PATH + fi + AC_PATH_PROG(ROOTCONF, root-config , no, $rootbin) + AC_PATH_PROG(ROOTEXEC, root , no, $rootbin) + AC_PATH_PROG(ROOTCINT, rootcint , no, $rootbin) + + if test ! x"$ROOTCONF" = "xno" && \ + test ! x"$ROOTCINT" = "xno" ; then + + # define some variables + ROOTLIBDIR=`$ROOTCONF --libdir` + ROOTINCDIR=`$ROOTCONF --incdir` + ROOTINCDIR=`$ROOTCONF --etcdir` + ROOTCFLAGS=`$ROOTCONF --noauxcflags --cflags` + ROOTLIBS=`$ROOTCONF --noauxlibs --noldflags --libs` + ROOTGLIBS=`$ROOTCONF --noauxlibs --noldflags --glibs` + ROOTAUXCFLAGS=`$ROOTCONF --auxcflags` + ROOTAUXLIBS=`$ROOTCONF --auxlibs` + ROOTRPATH=$ROOTLIBDIR + ROOTVERSION=`$ROOTCONF --version` + ROOTSOVERSION=`dirname $ROOTVERSION` + + if test $1 ; then + AC_MSG_CHECKING(wether ROOT version >= [$1]) + vers=`$ROOTCONF --version | tr './' ' ' | awk 'BEGIN { FS = " "; } { printf "%d", ($''1 * 1000 + $''2) * 1000 + $''3;}'` + requ=`echo $1 | tr './' ' ' | awk 'BEGIN { FS = " "; } { printf "%d", ($''1 * 1000 + $''2) * 1000 + $''3;}'` + if test $vers -lt $requ ; then + AC_MSG_RESULT(no) + no_root="yes" + else + AC_MSG_RESULT(yes) + fi + fi + else + # otherwise, we say no_root + no_root="yes" + fi + + AC_SUBST(ROOTLIBDIR) + AC_SUBST(ROOTINCDIR) + AC_SUBST(ROOTETCDIR) + AC_SUBST(ROOTCFLAGS) + AC_SUBST(ROOTLIBS) + AC_SUBST(ROOTGLIBS) + AC_SUBST(ROOTAUXLIBS) + AC_SUBST(ROOTAUXCFLAGS) + AC_SUBST(ROOTRPATH) + AC_SUBST(ROOTVERSION) + AC_SUBST(ROOTSOVERSION) + + if test "x$no_root" = "x" ; then + ifelse([$2], , :, [$2]) + else + ifelse([$3], , :, [$3]) + fi +]) + +# +# Macro to check if ROOT has a specific feature: +# +# ROOT_FEATURE(FEATURE,[ACTION_IF_HAVE,[ACTION_IF_NOT]]) +# +# For example +# +# ROOT_FEATURE([ldap],[AC_DEFINE([HAVE_ROOT_LDAP])]) +# +AC_DEFUN([ROOT_FEATURE], +[ + AC_REQUIRE([ROOT_PATH]) + feat=$1 + res=`$ROOTCONF --has-$feat` + if test "x$res" = "xyes" ; then + ifelse([$2], , :, [$2]) + else + ifelse([$3], , :, [$3]) + fi +]) + +# +# EOF +# diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 00000000..8f8c335a --- /dev/null +++ b/autogen.sh @@ -0,0 +1,48 @@ +#! /bin/sh + +# $Id: autogen.sh,v 1.4 2002/12/02 01:39:49 murrayc Exp $ +# +# Copyright (c) 2009 BMW +# +# Based on a autogen.sh script written by Daniel Elstner +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License VERSION 2 as +# published by the Free Software Foundation. You are not allowed to +# use any other version of the license; unless you got the explicit +# permission from the author to do so. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +dir=`echo "$0" | sed 's,[^/]*$,,'` +test "x${dir}" = "x" && dir='.' + +if test "x`cd "${dir}" 2>/dev/null && pwd`" != "x`pwd`" +then + echo "This script must be executed directly from the source directory." + exit 1 +fi + +rm -f config.cache acconfig.h + +echo "--> libtoolize" && \ +libtoolize --force && \ +echo "--> aclocal" && \ +aclocal && \ +echo "--> autoconf" && \ +autoconf && \ +echo "--> autoheader" && \ +autoheader && \ +echo "--> automake" && \ +automake --add-missing --gnu && exit 0 + +exit 1 + diff --git a/config.h.in b/config.h.in new file mode 100644 index 00000000..3f77c9eb --- /dev/null +++ b/config.h.in @@ -0,0 +1,119 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the `floor' function. */ +#undef HAVE_FLOOR + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the `pow' function. */ +#undef HAVE_POW + +/* Define to 1 if you have the `sqrt' function. */ +#undef HAVE_SQRT + +/* Define to 1 if `stat' has the bug that it succeeds when given the + zero-length file name argument. */ +#undef HAVE_STAT_EMPTY_STRING_BUG + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDDEF_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strstr' function. */ +#undef HAVE_STRSTR + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#undef LSTAT_FOLLOWS_SLASHED_SYMLINK + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* Version number of package */ +#undef VERSION + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a + `char[]'. */ +#undef YYTEXT_POINTER + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to `unsigned' if does not define. */ +#undef size_t diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..422dc764 --- /dev/null +++ b/configure.ac @@ -0,0 +1,266 @@ +AC_PREREQ(2.59) +AC_INIT(musrfit, 0.5.0, andreas.suter@psi.ch) +AC_CONFIG_AUX_DIR(admin) + +dnl ----------------------------------------------- +dnl Package names and version numbers +dnl ----------------------------------------------- + +MUSR_PROGRAM_NAME=musrfit +MUSR_LIBRARY_NAME=PMusr +LEM_LIBRARY_NAME=TLemRunHeader + +#release versioning +MUSR_MAJOR_VERSION=0 +MUSR_MINOR_VERSION=5 +MUSR_MICRO_VERSION=0 + +#release versioning +LEM_MAJOR_VERSION=1 +LEM_MINOR_VERSION=5 +LEM_MICRO_VERSION=0 + +#API version +MUSR_API_VERSION=MUSR_MAJOR_VERSION.MUSR_MINOR_VERSION +AC_SUBST(MUSR_API_VERSION) + +LEM_API_VERSION=LEM_MAJOR_VERSION.LEM_MINOR_VERSION +AC_SUBST(LEM_API_VERSION) + +#shared library versioning +LEM_LIBRARY_VERSION=1:5:0 +MUSR_LIBRARY_VERSION=0:5:0 +# | | | +# +------+ | +---+ +# | | | +# current:revision:age +# | | | +# | | +- increment if interfaces have been added +# | | set to zero if interfaces have been removed +# or changed +# | +- increment if source code has changed +# | set to zero if current is incremented +# +- increment if interfaces have been added, removed or changed + +AC_SUBST(MUSR_LIBRARY_VERSION) +AC_SUBST(LEM_LIBRARY_VERSION) + +PACKAGE=$MUSR_PROGRAM_NAME +AC_SUBST(MUSR_LIBRARY_NAME) +AC_SUBST(LEM_LIBRARY_NAME) + +LEM_VERSION=$LEM_MAJOR_VERSION.$LEM_MINOR_VERSION.$LEM_MICRO_VERSION +LEM_RELEASE=$LEM_MAJOR_VERSION.$LEM_MINOR_VERSION +AC_SUBST(LEM_RELEASE) +AC_SUBST(LEM_VERSION) + +MUSR_VERSION=$MUSR_MAJOR_VERSION.$MUSR_MINOR_VERSION.$MUSR_MICRO_VERSION +MUSR_RELEASE=$MUSR_MAJOR_VERSION.$MUSR_MINOR_VERSION +AC_SUBST(MUSR_RELEASE) +AC_SUBST(MUSR_VERSION) + +VERSION=$MUSR_VERSION + +dnl ----------------------------------------------- +dnl Automake initialization and program checks +dnl ----------------------------------------------- + +AM_INIT_AUTOMAKE(@PACKAGE_NAME@, @PACKAGE_VERSION@) +AC_CONFIG_HEADER([config.h]) +AC_LANG(C++) + +# Checks for programs. +AC_PROG_AWK +AC_PROG_CXX +AC_PROG_CC +AC_PROG_LEX +AC_PROG_LN_S +AC_PROG_YACC +AC_PROG_INSTALL +AM_PROG_LIBTOOL +ROOT_PATH + +dnl ----------------------------------------------- +dnl Ask user for path to fftw3 stuff +dnl ----------------------------------------------- + +FFTW3_FOUND=0 +AC_ARG_WITH(fftw3, + [ --with-fftw3= prefix of FFTW3 installation. e.g. /usr/local or /usr], + [FFTW3_PREFIX=$with_fftw3 + if !(test -r ${FFTW3_PREFIX}/include/fftw3.h); then + AC_MSG_ERROR(FFTW3 cannot be found at the specified path!) + fi + AC_MSG_RESULT([using ${FFTW3_PREFIX} as prefix of the FFTW3 installation...])], + [PKG_CHECK_MODULES(FFTW3, fftw3 >= 3.1.0, [FFTW3_FOUND=1], + [if test -r /usr/local/include/fftw3.h; then + FFTW3_PREFIX="/usr/local" + AC_MSG_RESULT([using ${FFTW3_PREFIX} as prefix of the FFTW3 installation... (ignore the no just above)]) + else if test -r /usr/include/fftw3.h; then + FFTW3_PREFIX="/usr" + AC_MSG_RESULT([using ${FFTW3_PREFIX} as prefix of the FFTW3 installation... (ignore the no just above)]) + else + AC_MSG_ERROR( + [FFTW3 not found. Please call configure with the --with-fftw3 option. + This tells configure where to find the FFTW3 C libraries and headers. + e.g. --with-fftw3=/usr/local or --with-fftw3=/usr] + ) + fi + fi + ] + ) + ] +) +AC_SUBST(FFTW3_PREFIX) +if test "${FFTW3_FOUND}" != "1"; then + FFTW3_LIBS="-L${FFTW3_PREFIX}/lib -lfftw3 -lm" + FFTW3_CFLAGS="-I${FFTW3_PREFIX}/include" +fi +AC_SUBST(FFTW3_LIBS) +AC_SUBST(FFTW3_CFLAGS) + + +dnl ----------------------------------------------- +dnl Ask user for path to gsl stuff +dnl ----------------------------------------------- + +GSL_FOUND=0 +AC_ARG_WITH(gsl, + [ --with-gsl= prefix of GSL installation. e.g. /usr/local or /usr], + [GSL_PREFIX=$with_gsl + if !(test -r ${GSL_PREFIX}/include/gsl/gsl_sf_hyperg.h); then + AC_MSG_ERROR(GSL cannot be found at the specified path!) + fi + AC_MSG_RESULT([using ${GSL_PREFIX} as prefix of the GSL installation...])], + [PKG_CHECK_MODULES(GSL, gsl >= 1.9 gslcblas >= 1.9, [GSL_FOUND=1], + [if test -r /usr/local/include/gsl/gsl_sf_hyperg.h; then + GSL_PREFIX="/usr/local" + AC_MSG_RESULT([using ${GSL_PREFIX} as prefix of the GSL installation... (ignore the no just above)]) + else if test -r /usr/include/gsl/gsl_sf_hyperg.h; then + GSL_PREFIX="/usr" + AC_MSG_RESULT([using ${GSL_PREFIX} as prefix of the GSL installation... (ignore the no just above)]) + else + AC_MSG_ERROR( + [GSL not found. Please call configure with the --with-gsl option. + This tells configure where to find the GSL C libraries and headers. + e.g. --with-gsl=/usr/local or --with-gsl=/usr] + ) + fi + fi + ] + ) + ] +) +AC_SUBST(GSL_PREFIX) +if test "${GSL_FOUND}" != "1"; then + GSL_LIBS="-L${GSL_PREFIX}/lib -lgsl -lgslcblas -lm" + GSL_CFLAGS="-I${GSL_PREFIX}/include/gsl" +fi +AC_SUBST(GSL_LIBS) +AC_SUBST(GSL_CFLAGS) + + +dnl ----------------------------------------------- +dnl Ask user for path to boost stuff +dnl ----------------------------------------------- + +BOOST_FOUND=0 +AC_ARG_WITH(boostinc, + [ --with-boostinc= path to the header files of the Boost installation. e.g. /usr/local/include or /usr/include], + [BOOST_INCLUDE=$with_boostinc + if !(test -r ${BOOST_INCLUDE}/boost/spirit.hpp); then + AC_MSG_ERROR(Boost cannot be found at the specified path!) + fi + AC_MSG_RESULT([using ${BOOST_INCLUDE} as include path for the Boost headers...])], + [PKG_CHECK_MODULES(BOOST, boost >= 1.30, [BOOST_FOUND=1], + [if test -r /usr/local/include/boost/spirit.hpp; then + BOOST_INCLUDE="/usr/local/include" + AC_MSG_RESULT([using ${BOOST_INCLUDE} as include path for the Boost headers... (ignore the no just above)]) + else if test -r /usr/include/boost/spirit.hpp; then + BOOST_INCLUDE="/usr/include" + AC_MSG_RESULT([using ${BOOST_INCLUDE} as include path for the Boost headers... (ignore the no just above)]) + else + AC_MSG_ERROR( + [Boost not found. Please call configure with the --with-boostinc option. + This tells configure where to find the Boost C++ headers. + e.g. --with-boostinc=/usr/local/include or --with-boostinc=/usr/include or --with-boostinc=/usr/include/boost-1_33_0] + ) + fi + fi + ] + ) + ] +) +AC_SUBST(BOOST_INCLUDE) +if test "${BOOST_FOUND}" != "1"; then + BOOST_LIBS="" + BOOST_CFLAGS="-I${BOOST_INCLUDE}" +fi +AC_SUBST(BOOST_LIBS) +AC_SUBST(BOOST_CFLAGS) + + +dnl ----------------------------------------------- +dnl Check for ROOT +dnl ----------------------------------------------- + +ROOT_PATH([5.22/00], [], AC_MSG_ERROR([Either ROOT is not installed correctly or the version is too old... please check!])) + +ROOT_LIBS="-L@ROOTLIBDIR@ @ROOTGLIBS@ -lMinuit2 -lMathMore -lXMLParser " +ROOT_CFLAGS="-I@ROOTINCDIR@ @ROOTCFLAGS@" +AC_SUBST(ROOT_LIBS) +AC_SUBST(ROOT_CFLAGS) + + +dnl ----------------------------------------------- +dnl Set some paths and flags for PMusr and TLemRunHeader +dnl ----------------------------------------------- + +SRCDIR="$(pwd)" + +LEM_SRCDIR="${SRCDIR}/src/external/TLemRunHeader" +LEM_LIBS="-L${LEM_SRCDIR} -l${LEM_LIBRARY_NAME}" +LEM_CFLAGS="-I${LEM_SRCDIR}" +AC_SUBST(LEM_LIBS) +AC_SUBST(LEM_CFLAGS) + +PMUSR_LIBS="-L${SRCDIR}/src/classes -l${MUSR_LIBRARY_NAME}" +PMUSR_CFLAGS="-I${SRCDIR}/src/include" +AC_SUBST(PMUSR_LIBS) +AC_SUBST(PMUSR_CFLAGS) + + +dnl ----------------------------------------------- +dnl Some standard checks for header files and libraries +dnl ----------------------------------------------- + +# Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stddef.h stdlib.h string.h sys/time.h unistd.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_HEADER_STDBOOL +AC_C_CONST +AC_C_INLINE +AC_TYPE_SIZE_T +AC_HEADER_TIME + +# Checks for library functions. +AC_FUNC_MALLOC +AC_FUNC_STAT +AC_CHECK_FUNCS([floor gettimeofday memset pow sqrt strstr]) + + +dnl ----------------------------------------------- +dnl Specify the files that are going to be created by configure +dnl ----------------------------------------------- + +AC_CONFIG_FILES([Makefile \ + src/Makefile \ + src/classes/Makefile \ + src/classes/PMusr.pc \ + src/external/Makefile \ + src/external/TLemRunHeader/Makefile \ + src/external/TLemRunHeader/TLemRunHeader.pc \ + src/external/scripts/Makefile]) +AC_OUTPUT diff --git a/copying b/copying deleted file mode 100755 index 5b6e7c66..00000000 --- a/copying +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 00000000..41ee2e76 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,20 @@ +## Process this file with automake to create Makefile.in + +SUBDIRS = classes external + +bin_PROGRAMS = musrfit musrview musrt0 musrparam msr2msr +musrfit_SOURCES = musrfit.cpp +musrview_SOURCES = musrview.cpp +musrt0_SOURCES = musrt0.cpp +musrparam_SOURCES = musrparam.cpp +msr2msr_SOURCES = msr2msr.cpp + +xmldir = $(bindir) +xml_DATA = musrfit_startup.xml + +LIBADD = $(LEM_LIBS) $(PMUSR_LIBS) + +AM_CFLAGS = -g -O3 -Wall -Wno-trigraphs +INCLUDES = $(PMUSR_CFLAGS) $(FFTW3_CFLAGS) $(GSL_CFLAGS) $(BOOST_CFLAGS) $(ROOT_CFLAGS) +LIBS = $(LEM_LIBS) $(PMUSR_LIBS) $(FFTW3_LIBS) $(GSL_LIBS) $(ROOT_LIBS) + diff --git a/src/Makefile b/src/Makefile.musrfit similarity index 100% rename from src/Makefile rename to src/Makefile.musrfit diff --git a/src/classes/Makefile.PMusr b/src/classes/Makefile.PMusr index a5f492ae..7473efb8 100644 --- a/src/classes/Makefile.PMusr +++ b/src/classes/Makefile.PMusr @@ -44,7 +44,7 @@ endif # -- Linux ifeq ($(OS),LINUX) -CXX = g++ +CXX = g++-4.2.4 CXXFLAGS = -O3 -Wall -Wno-trigraphs -fPIC PMUSRPATH = ../include MNPATH = $(ROOTSYS)/include @@ -54,7 +54,7 @@ FFTW3PATH = /usr/include LEMPATH = ../external/TLemRunHeader PSIBINPATH = ../external/MuSR_software/Class_MuSR_PSI INCLUDES = -I$(PMUSRPATH) -I$(MNPATH) -I$(GSLPATH) -I$(BOOSTPATH) -I$(LEMPATH) -I$(PSIBINPATH) -I$(FFTW3PATH) -LD = g++ +LD = g++-4.2.4 LDFLAGS = -O SOFLAGS = -shared LEMLIB = libTLemRunHeader.so diff --git a/src/classes/Makefile.PUserFcn b/src/classes/Makefile.PUserFcn index 4ec31d92..d19e37ee 100644 --- a/src/classes/Makefile.PUserFcn +++ b/src/classes/Makefile.PUserFcn @@ -34,10 +34,10 @@ endif # -- Linux ifeq ($(OS),LINUX) -CXX = g++ +CXX = g++-4.3.3 CXXFLAGS = -Wall -Wno-trigraphs -fPIC INCLUDES = -I../include -LD = g++ +LD = g++-4.3.3 LDFLAGS = -g SOFLAGS = -O -shared endif diff --git a/src/classes/Makefile.am b/src/classes/Makefile.am new file mode 100644 index 00000000..8ac75cb4 --- /dev/null +++ b/src/classes/Makefile.am @@ -0,0 +1,90 @@ +## Process this file with automake to create Makefile.in + +h_sources = \ + ../include/PFitterFcn.h \ + ../include/PFitter.h \ + ../include/PFourier.h \ + ../include/PFunctionGrammar.h \ + ../include/PFunction.h \ + ../include/PFunctionHandler.h \ + ../include/PMsrHandler.h \ + ../include/PMusrCanvas.h \ + ../include/PMusr.h \ + ../include/PMusrT0.h \ + ../include/PRunAsymmetry.h \ + ../include/PRunBase.h \ + ../include/PRunDataHandler.h \ + ../include/PRunListCollection.h \ + ../include/PRunNonMusr.h \ + ../include/PRunRRF.h \ + ../include/PRunSingleHisto.h \ + ../include/PStartupHandler.h \ + ../include/PTheory.h \ + ../include/PUserFcnBase.h + +h_linkdef = \ + ../include/PMusrCanvasLinkDef.h \ + ../include/PMusrT0LinkDef.h \ + ../include/PStartupHandlerLinkDef.h \ + ../include/PUserFcnBaseLinkDef.h + +dict_h_sources = \ + PMusrCanvasDict.h \ + PMusrT0Dict.h \ + PStartupHandlerDict.h \ + PUserFcnBaseDict.h + +cpp_sources = \ + PFitter.cpp \ + PFitterFcn.cpp \ + PFourier.cpp \ + PFunction.cpp \ + PFunctionHandler.cpp \ + PMsrHandler.cpp \ + PMusrCanvas.cpp \ + PMusrT0.cpp \ + PRunAsymmetry.cpp \ + PRunBase.cpp \ + PRunDataHandler.cpp \ + PRunListCollection.cpp \ + PRunNonMusr.cpp \ + PRunRRF.cpp \ + PRunSingleHisto.cpp \ + PStartupHandler.cpp \ + PTheory.cpp \ + PUserFcnBase.cpp + +dict_cpp_sources = \ + PMusrCanvasDict.cpp \ + PMusrT0Dict.cpp \ + PStartupHandlerDict.cpp \ + PUserFcnBaseDict.cpp + +ext_source_dir = $(top_srcdir)/src/external/MuSR_software/Class_MuSR_PSI +ext_h_sources = $(ext_source_dir)/MuSR_td_PSI_bin.h $(ext_source_dir)/tydefs.h +ext_cpp_sources = $(ext_source_dir)/MuSR_td_PSI_bin.cpp + +include_HEADERS = $(h_sources) $(ext_h_sources) +noinst_HEADERS = $(h_linkdef) $(dict_h_sources) +INCLUDES = -I$(top_srcdir)/src/include -I$(ext_source_dir) $(LEM_CFLAGS) $(FFTW3_CFLAGS) $(GSL_CFLAGS) $(BOOST_CFLAGS) $(ROOT_CFLAGS) +AM_CXXFLAGS = -g -O3 -Wall -Wno-trigraphs + +BUILT_SOURCES = $(dict_cpp_sources) $(dict_h_sources) +AM_CPPFLAGS = -I@ROOTINCDIR@ +AM_LDFLAGS = -L@ROOTLIBDIR@ +CLEANFILES = *Dict.cpp *Dict.h *~ core + +%Dict.cpp %Dict.h: ../include/%.h ../include/%LinkDef.h + @ROOTCINT@ -v -f $*Dict.cpp -c -p $(INCLUDES) $(AM_CPPFLAGS) $^ + +lib_LTLIBRARIES = libPMusr.la + +LIBADD = $(LEM_LIBS) + +libPMusr_la_SOURCES = $(h_sources) $(cpp_sources) $(dict_h_sources) $(dict_cpp_sources) $(ext_h_sources) $(ext_cpp_sources) +libPMusr_la_LIBADD = $(FFTW3_LIBS) $(GSL_LIBS) $(ROOT_LIBS) +libPMusr_la_LDFLAGS = -version-info $(MUSR_LIBRARY_VERSION) -release $(MUSR_RELEASE) + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = PMusr.pc + diff --git a/src/classes/PFitter.cpp b/src/classes/PFitter.cpp index 9a5f2317..6349c37a 100644 --- a/src/classes/PFitter.cpp +++ b/src/classes/PFitter.cpp @@ -31,6 +31,7 @@ #include #include +#include using namespace std; #include @@ -408,8 +409,11 @@ bool PFitter::ExecuteHesse() // create the hesse object ROOT::Minuit2::MnHesse hesse; + // specify maximal number of function calls + unsigned int maxfcn = numeric_limits::max(); + // call hesse - ROOT::Minuit2::MnUserParameterState mnState = hesse((*fFitterFcn), fMnUserParams); + ROOT::Minuit2::MnUserParameterState mnState = hesse((*fFitterFcn), fMnUserParams, maxfcn); if (!mnState.IsValid()) { cout << endl << "**WARNING** PFitter::ExecuteHesse(): Hesse encountered some problems!"; @@ -453,7 +457,7 @@ bool PFitter::ExecuteMigrad() // minimize // maxfcn is MINUIT2 Default maxfcn - unsigned int maxfcn = (200 + 100*fParams.size() + 5*fParams.size()*fParams.size()); + unsigned int maxfcn = numeric_limits::max(); // tolerance = MINUIT2 Default tolerance double tolerance = 0.1; ROOT::Minuit2::FunctionMinimum min = migrad(maxfcn, tolerance); @@ -521,7 +525,7 @@ bool PFitter::ExecuteMinimize() // minimize // maxfcn is MINUIT2 Default maxfcn - unsigned int maxfcn = (200 + 100*fParams.size() + 5*fParams.size()*fParams.size()); + unsigned int maxfcn = numeric_limits::max(); //cout << endl << "maxfcn=" << maxfcn << endl; // tolerance = MINUIT2 Default tolerance double tolerance = 0.1; @@ -896,7 +900,7 @@ bool PFitter::ExecuteSimplex() // minimize // maxfcn is 10*MINUIT2 Default maxfcn - unsigned int maxfcn = 10*(200 + 100*fParams.size() + 5*fParams.size()*fParams.size()); + unsigned int maxfcn = numeric_limits::max(); // tolerance = MINUIT2 Default tolerance double tolerance = 0.1; ROOT::Minuit2::FunctionMinimum min = simplex(maxfcn, tolerance); diff --git a/src/classes/PMusr.pc.in b/src/classes/PMusr.pc.in new file mode 100644 index 00000000..0aa008cd --- /dev/null +++ b/src/classes/PMusr.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: PMusr +Description: C++ shared library providing musr classes +Version: @VERSION@ +Libs: -L${libdir} -l@GENERIC_LIBRARY_NAME@ +Cflags: -I${includedir}/@GENERIC_LIBRARY_NAME@ -I${libdir}/include diff --git a/src/external/Makefile.am b/src/external/Makefile.am new file mode 100644 index 00000000..5cf1da6f --- /dev/null +++ b/src/external/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = TLemRunHeader scripts diff --git a/src/external/TFitPofB-lib/classes/TBofZCalc.cpp b/src/external/TFitPofB-lib/classes/TBofZCalc.cpp index 55821d29..7c23855a 100644 --- a/src/external/TFitPofB-lib/classes/TBofZCalc.cpp +++ b/src/external/TFitPofB-lib/classes/TBofZCalc.cpp @@ -152,11 +152,16 @@ TLondon1D_1L::TLondon1D_1L(const vector ¶m, unsigned int steps) fMinB = -1.0; // thicknesses have to be greater or equal to zero - for(unsigned int i(1); i<3; i++) - assert(param[i]>=0.); + for(unsigned int i(1); i<3; i++){ + if(param[i] < 0.){ + fParam[i] = 0.; + } + } // lambdas have to be greater than zero - assert(param[3]!=0.); + if(param[3] < 0.1){ + fParam[3] = 0.1; + } // Calculate the coefficients of the exponentials double N0(param[0]/(1.0+exp(param[2]/param[3]))); @@ -194,7 +199,10 @@ double TLondon1D_1L::GetBmin() const void TLondon1D_1L::SetBmin() { double b_a(fCoeff[1]/fCoeff[0]); - assert (b_a>0.); +// assert(b_a>0.); + if(b_a<10E-7){ + b_a = 10E-7; + } double minZ; // check if the minimum is in the first layer @@ -205,7 +213,14 @@ void TLondon1D_1L::SetBmin() return; } - assert(fMinZ > 0. && fMinB > 0.); +// assert(fMinZ > 0. && fMinB > 0.); + if(fMinZ <= 0.){ + fMinZ = 0.; + } + if(fMinB <= 0.){ + fMinB = 0.; + } + return; } diff --git a/src/external/TFitPofB-lib/classes/TLondon1D.cpp b/src/external/TFitPofB-lib/classes/TLondon1D.cpp index fb65280c..0b1089f7 100644 --- a/src/external/TFitPofB-lib/classes/TLondon1D.cpp +++ b/src/external/TFitPofB-lib/classes/TLondon1D.cpp @@ -204,6 +204,8 @@ double TLondon1DHS::operator()(double t, const vector &par) const { if(t<0.0) return cos(par[0]*0.017453293); + bool dead_layer_changed(false); + // check if the function is called the first time and if yes, read in parameters if(fFirstCall){ @@ -217,7 +219,8 @@ double TLondon1DHS::operator()(double t, const vector &par) const { fParForBofZ.push_back(fPar[i]); // cout << "fParForBofZ[" << i-2 << "] = " << fParForBofZ[i-2] << endl; } - fFirstCall=false; + fFirstCall = false; + dead_layer_changed = true; // cout << this << endl; } @@ -232,11 +235,11 @@ double TLondon1DHS::operator()(double t, const vector &par) const { par_changed = true; if (i == 0) { only_phase_changed = true; - } else if (i == 3) { - fDeadLayerChanged = true; - only_phase_changed = false; } else { only_phase_changed = false; + if (i == 3) { + dead_layer_changed = true; + } } } } @@ -261,12 +264,11 @@ double TLondon1DHS::operator()(double t, const vector &par) const { fParForPofB[3] = par[2]; // Bkg-Field //fParForPofB[4] = 0.005; // Bkg-width (in principle zero) - if(fDeadLayerChanged){ + if(dead_layer_changed){ vector interfaces; interfaces.push_back(par[3]);// dead layer fParForPofB[5] = fImpProfile->LayerFraction(par[1], 1, interfaces); // Fraction of muons in the deadlayer interfaces.clear(); - fDeadLayerChanged = false; } TLondon1D_HS BofZ(fParForBofZ); @@ -615,7 +617,9 @@ TProximity1D1LHS::TProximity1D1LHS() : fCalcNeeded(true), fFirstCall(true) { fParForPofB.push_back(startupHandler->GetDeltat()); fParForPofB.push_back(startupHandler->GetDeltaB()); fParForPofB.push_back(0.0); -// fParForPofB.push_back(0.0); + fParForPofB.push_back(0.0); // Bkg-Field + fParForPofB.push_back(0.005); // Bkg-width + fParForPofB.push_back(0.0); // Bkg-weight TTrimSPData *x = new TTrimSPData(rge_path, energy_vec); fImpProfile = x; @@ -652,6 +656,7 @@ double TProximity1D1LHS::operator()(double t, const vector &par) const { // check if the function is called the first time and if yes, read in parameters bool width_changed(false); + bool dead_layer_changed(false); if(fFirstCall){ fPar = par; @@ -666,6 +671,7 @@ double TProximity1D1LHS::operator()(double t, const vector &par) const { } fFirstCall=false; width_changed = true; + dead_layer_changed = true; // cout << this << endl; } @@ -685,6 +691,9 @@ double TProximity1D1LHS::operator()(double t, const vector &par) const { if (i == 7){ width_changed = true; } + if (i == 4){ + dead_layer_changed = true; + } } } } @@ -705,11 +714,19 @@ double TProximity1D1LHS::operator()(double t, const vector &par) const { for (unsigned int i(2); iConvolveGss(par[7], par[1]); - width_changed = false; + } + + fParForPofB[2] = par[1]; // energy + fParForPofB[3] = par[2]; // Bkg-Field + //fParForPofB[4] = 0.005; // Bkg-width (in principle zero) + + if(dead_layer_changed){ + vector interfaces; + interfaces.push_back(par[4]);// dead layer + fParForPofB[5] = fImpProfile->LayerFraction(par[1], 1, interfaces); // Fraction of muons in the deadlayer + interfaces.clear(); } TProximity1D_1LHS BofZ(fParForBofZ); diff --git a/src/external/TFitPofB-lib/classes/TPofBCalc.cpp b/src/external/TFitPofB-lib/classes/TPofBCalc.cpp index c8b9493d..d2a42216 100644 --- a/src/external/TFitPofB-lib/classes/TPofBCalc.cpp +++ b/src/external/TFitPofB-lib/classes/TPofBCalc.cpp @@ -186,7 +186,8 @@ TPofBCalc::TPofBCalc( const TBofZCalcInverse &BofZ, const TTrimSPData &dataTrimS for (unsigned int i(firstZerosEnd); i fParForPofT; mutable vector fParForBofZ; mutable vector fParForPofB; diff --git a/src/external/TLemRunHeader/Makefile.am b/src/external/TLemRunHeader/Makefile.am new file mode 100644 index 00000000..88e44219 --- /dev/null +++ b/src/external/TLemRunHeader/Makefile.am @@ -0,0 +1,43 @@ +## Process this file with automake to create Makefile.in + +h_sources = \ + TLemStats.h \ + TLemRunHeader.h + +h_linkdef = \ + TLemStatsLinkDef.h \ + TLemRunHeaderLinkDef.h + +dict_h_sources = \ + TLemStatsDict.h \ + TLemRunHeaderDict.h + +cpp_sources = \ + TLemStats.cxx \ + TLemRunHeader.cxx + +dict_cpp_sources = \ + TLemStatsDict.cxx \ + TLemRunHeaderDict.cxx + +include_HEADERS = $(h_sources) +noinst_HEADERS = $(h_linkdef) $(dict_h_sources) +INCLUDES = -I. $(ROOT_CFLAGS) + +BUILT_SOURCES = $(dict_cpp_sources) $(dist_h_sources) +AM_CPPFLAGS = -I@ROOTINCDIR@ +AM_LDFLAGS = -L@ROOTLIBDIR@ +CLEANFILES = *Dict.cxx *Dict.h *~ core + +%Dict.cxx %Dict.h: %.h %LinkDef.h + @ROOTCINT@ -v -f $*Dict.cxx -c -p $(INCLUDES) $(AM_CPPFLAGS) $^ + +lib_LTLIBRARIES = libTLemRunHeader.la + +libTLemRunHeader_la_SOURCES = $(h_sources) $(cpp_sources) $(dict_h_sources) $(dict_cpp_sources) +libTLemRunHeader_la_LIBADD = $(ROOT_LIBS) +libTLemRunHeader_la_LDFLAGS = -version-info $(LEM_LIBRARY_VERSION) -release $(LEM_RELEASE) + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = TLemRunHeader.pc + diff --git a/src/external/TLemRunHeader/TLemRunHeader.pc.in b/src/external/TLemRunHeader/TLemRunHeader.pc.in new file mode 100644 index 00000000..8d17b77e --- /dev/null +++ b/src/external/TLemRunHeader/TLemRunHeader.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: TLemRunHeader +Description: C++ shared library providing the LEM Run Header class +Version: @VERSION@ +Libs: -L${libdir} -l@GENERIC_LIBRARY_NAME@ +Cflags: -I${includedir} diff --git a/src/external/scripts/Makefile.am b/src/external/scripts/Makefile.am new file mode 100644 index 00000000..5ca6daca --- /dev/null +++ b/src/external/scripts/Makefile.am @@ -0,0 +1 @@ +bin_SCRIPTS = msr2data diff --git a/src/musrgui/musrgui.pro b/src/musrgui/musrgui.pro index 1dd2dae2..8044a327 100644 --- a/src/musrgui/musrgui.pro +++ b/src/musrgui/musrgui.pro @@ -9,8 +9,8 @@ exists( /usr/bin/cygwin1.dll ) { } INSTALLS += target -QMAKE_CC = gcc -QMAKE_CXX = g++ +QMAKE_CC = gcc-4.2.4 +QMAKE_CXX = g++-4.2.4 # install path for the XML configuration file unix:xml.path = $(ROOTSYS)/bin/