mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-19 08:17:13 +02:00
functions splitted in many sub-files
git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@167 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
87
slsDetectorSoftware/slsDetectorAnalysis/Makefile
Normal file
87
slsDetectorSoftware/slsDetectorAnalysis/Makefile
Normal file
@ -0,0 +1,87 @@
|
||||
#---------------------------------------------------
|
||||
|
||||
|
||||
include Makefile.arch
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
SLSDETO = TSlsDetectorDict.$(ObjSuf) energyCalibration.$(ObjSuf) angularCalibration.$(ObjSuf)
|
||||
|
||||
SLSDETSO = libTSlsDetector.$(DllSuf)
|
||||
|
||||
CXXFLAGS += -Wno-deprecated
|
||||
#LIBS += -L../slsDetectorSoftware -lSlsDetector -pthread
|
||||
|
||||
CXXFLAGS += -I ../usersFunctions
|
||||
|
||||
HEADERS= energyCalibration.h angularCalibration.h
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
#----------- do the shared library
|
||||
$(SLSDETSO): $(SLSDETO)
|
||||
@echo "Generating shared library $@..."
|
||||
$(LD) $(SOFLAGS) $(LDFLAGS) -o $@ $(LIBS) $^
|
||||
|
||||
|
||||
# ---------- Default rule
|
||||
|
||||
%.$(ObjSuf): %.cpp
|
||||
@echo "Compiling source $@..."
|
||||
$(CXX) $(CXXFLAGS) -c $<
|
||||
|
||||
|
||||
#----------- do the dictionary
|
||||
TSlsDetectorDict.$(SrcSuf): $(HEADERS)
|
||||
@echo "Generating dictionary $@..."
|
||||
rootcint -f $@ -c -p $^
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
all: $(SLSDETSO)
|
||||
|
||||
clean:
|
||||
@rm -f $(SLSDETO) core
|
||||
|
||||
distclean: clean
|
||||
@rm -f *Dict.* *.so *.o
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
575
slsDetectorSoftware/slsDetectorAnalysis/Makefile.arch
Normal file
575
slsDetectorSoftware/slsDetectorAnalysis/Makefile.arch
Normal file
@ -0,0 +1,575 @@
|
||||
# -*- mode: makefile -*-
|
||||
#
|
||||
# Makefile containing platform dependencies for ROOT based projects.
|
||||
#
|
||||
# Copyright (c) 2000 Rene Brun and Fons Rademakers
|
||||
#
|
||||
# Author: Fons Rademakers, 29/2/2000
|
||||
|
||||
ROOTCONFIG := root-config
|
||||
|
||||
ARCH := $(shell $(ROOTCONFIG) --arch)
|
||||
PLATFORM := $(shell $(ROOTCONFIG) --platform)
|
||||
ALTCC := $(shell $(ROOTCONFIG) --cc)
|
||||
ALTCXX := $(shell $(ROOTCONFIG) --cxx)
|
||||
ALTF77 := $(shell $(ROOTCONFIG) --f77)
|
||||
ALTLD := $(shell $(ROOTCONFIG) --ld)
|
||||
|
||||
#CXX =
|
||||
ObjSuf = o
|
||||
SrcSuf = cpp
|
||||
ExeSuf =
|
||||
DllSuf = so
|
||||
OutPutOpt = -o # keep whitespace after "-o"
|
||||
|
||||
ifeq (debug,$(findstring debug,$(ROOTBUILD)))
|
||||
OPT = -g
|
||||
OPT2 = -g
|
||||
else
|
||||
ifneq ($(findstring debug, $(strip $(shell $(ROOTCONFIG) --config))),)
|
||||
OPT = -g
|
||||
OPT2 = -g
|
||||
else
|
||||
OPT = -O
|
||||
OPT2 = -O2
|
||||
endif
|
||||
endif
|
||||
|
||||
ROOTCFLAGS := $(shell $(ROOTCONFIG) --cflags)
|
||||
ROOTLDFLAGS := $(shell $(ROOTCONFIG) --ldflags)
|
||||
ROOTLIBS := $(shell $(ROOTCONFIG) --libs)
|
||||
ROOTGLIBS := $(shell $(ROOTCONFIG) --glibs)
|
||||
HASTHREAD := $(shell $(ROOTCONFIG) --has-thread)
|
||||
ROOTDICTTYPE := $(shell $(ROOTCONFIG) --dicttype)
|
||||
NOSTUBS := $(shell $(ROOTCONFIG) --nostubs)
|
||||
ROOTCINT := rootcint
|
||||
|
||||
# Stub Functions Generation
|
||||
ifeq ($(NOSTUBS),yes)
|
||||
ROOTCINT = export CXXFLAGS="$(CXXFLAGS)"; $(ROOTSYS)/core/utils/src/rootcint_nostubs.sh -$(ROOTDICTTYPE)
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),hpuxacc)
|
||||
# HP-UX 10.x with aCC
|
||||
CXX = aCC
|
||||
CXXFLAGS = $(OPT) +Z
|
||||
LD = aCC
|
||||
LDFLAGS = $(OPT) -z
|
||||
SOFLAGS = -b
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),hpuxia64acc)
|
||||
# HP-UX 11i 1.5 (IA-64) with aCC
|
||||
CXX = aCC
|
||||
CXXFLAGS = +DD64 $(OPT) +Z
|
||||
LD = aCC
|
||||
LDFLAGS = +DD64 $(OPT) -z
|
||||
SOFLAGS = -b
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),hpuxgcc)
|
||||
# HP-UX 10.x with g++
|
||||
CXXFLAGS = $(OPT) -fPIC
|
||||
CXX = g++
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -fPIC -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),hurddeb)
|
||||
# GNU/Hurd
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT2)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),aix)
|
||||
# IBM AIX xlC 4.x
|
||||
CXX = xlC
|
||||
CXXFLAGS = $(OPT)
|
||||
LD = xlC
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS =
|
||||
DllSuf = a
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),aix5)
|
||||
# IBM AIX xlC 5.x
|
||||
CXX = xlC
|
||||
CXXFLAGS = $(OPT)
|
||||
LD = xlC
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS =
|
||||
DllSuf = a
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),aixgcc)
|
||||
# IBM AIX with GCC
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT)
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared
|
||||
DllSuf = a
|
||||
EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),solaris)
|
||||
# Solaris CC
|
||||
CXX = /opt/SUNWspro/bin/CC
|
||||
CXXFLAGS = $(OPT) -KPIC
|
||||
LD = /opt/SUNWspro/bin/CC
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -G
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),solarisCC5)
|
||||
# Solaris CC 5.0
|
||||
CXX = CC
|
||||
CXXFLAGS = $(OPT) -KPIC
|
||||
LD = CC
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -G
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),solarisgcc)
|
||||
# Solaris gcc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT) -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),solariskcc)
|
||||
# Solaris kcc
|
||||
CXX = KCC --one_instantiation_per_object
|
||||
CXXFLAGS = -O4 -KPIC
|
||||
LD = KCC
|
||||
LDFLAGS = -O4
|
||||
SOFLAGS =
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),solarisx86)
|
||||
# Solaris CC on Intel
|
||||
CXX = CC
|
||||
CXXFLAGS = $(OPT) -KPIC
|
||||
LD = CC
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -G
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),sgicc)
|
||||
# SGI
|
||||
CXX = CC -n32 -I/usr/include/CC.sgi
|
||||
CXXFLAGS = $(OPT)
|
||||
LD = CC -n32 -LANG:std -I/usr/include/CC.sgi
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),sgicc64)
|
||||
# SGI
|
||||
CXX = CC -64 -I/usr/include/CC.sgi
|
||||
CXXFLAGS = $(OPT)
|
||||
LD = CC -64 -LANG:std -I/usr/include/CC.sgi
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),sgigcc)
|
||||
# SGI 6.x with gcc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT) -Wl,-u,__builtin_new -Wl,-u,__builtin_delete -Wl,-u,__nw__FUiPv
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),sgin32gcc)
|
||||
# SGI 6.x with gcc for n32 ABI
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT) -L/usr/lib32 -Wl,-woff,134 -lgen
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),sgikcc)
|
||||
# SGI with KCC
|
||||
CXX = KCC -n32 --one_instantiation_per_object
|
||||
CXXFLAGS = $(OPT)
|
||||
LD = KCC -n32
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS =
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),alphagcc)
|
||||
# Alpha/OSF with gcc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT2)
|
||||
SOFLAGS = -Wl,-expect_unresolved,* -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),alphakcc)
|
||||
# Alpha/OSF with kai compiler (not yet valid)
|
||||
CXX = KCC --one_instantiation_per_object
|
||||
CXXFLAGS = $(OPT) -fPIC
|
||||
LD = KCC
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -Wl,-expect_unresolved,* -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),alphacxx6)
|
||||
# Alpha/OSF with cxx6
|
||||
CXX = cxx
|
||||
CXXFLAGS = $(OPT)
|
||||
LD = cxx
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared -nocxxstd -Wl,-expect_unresolved,*,-msym
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxdeb2ppc)
|
||||
# Debian/Linux on the PowerPC
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT2)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linux)
|
||||
# Linux with egcs, gcc 2.9x, gcc 3.x
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT2)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxkcc)
|
||||
# Linux with the KAI compiler
|
||||
CXX = KCC --one_instantiation_per_object
|
||||
CXXFLAGS = $(OPT) -fPIC +K0
|
||||
LD = KCC
|
||||
LDFLAGS = $(OPT) $(shell $(ROOTCONFIG) --cflags)
|
||||
SOFLAGS =
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxicc)
|
||||
# Linux with Intel icc compiler
|
||||
ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
|
||||
cut -d'.' -f1)
|
||||
ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
|
||||
cut -d'.' -f2)
|
||||
CXX = icc
|
||||
CXXFLAGS = $(OPT) -fPIC -wd1476
|
||||
LD = icpc
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxppcgcc)
|
||||
# PPC Linux with gcc and glibc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT2)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxia64gcc)
|
||||
# Itanium Linux with gcc 2.9x
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT2)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxia64sgi)
|
||||
# Itanium Linux with sgiCC
|
||||
CXX = sgiCC
|
||||
CXXFLAGS = $(OPT) -Wall -fPIC
|
||||
LD = gsgiCC
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxia64ecc)
|
||||
# Itanium Linux with Intel icc (was ecc)
|
||||
ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
|
||||
cut -d'.' -f1)
|
||||
ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
|
||||
cut -d'.' -f2)
|
||||
CXX = icc
|
||||
CXXFLAGS = $(OPT) -fPIC -wd1476 -ftz
|
||||
LD = icpc
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxx8664gcc)
|
||||
# AMD Opteron and Intel EM64T (64 bit mode) Linux with gcc 3.x
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT2)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxppc64gcc)
|
||||
# PPC64 Linux with gcc 3.x
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxx8664icc)
|
||||
# AMD Opteron and Intel EM64T (64 bit mode) Linux with Intel icc compiler
|
||||
CXX = icc
|
||||
CXXFLAGS = $(OPT) -fPIC -wd1476 -wd1572
|
||||
LD = icpc
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxalphagcc)
|
||||
# Alpha Linux with gcc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT2)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxmips)
|
||||
# GNU/Linux on mips (BE/LE, O32/N32/N64) with gcc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT2)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxhppa)
|
||||
# GNU/Linux on hppa with gcc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT2)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),linuxarm)
|
||||
# ARM Linux with egcs
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT) -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),freebsd4)
|
||||
# FreeBSD with glibc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT) -W -Wall -fPIC
|
||||
LD = $(CXX)
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared -Wl,-x
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),freebsd5)
|
||||
# FreeBSD with glibc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT) -W -Wall -fPIC
|
||||
LD = $(CXX)
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared -Wl,-x
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),freebsd7)
|
||||
# FreeBSD with libc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT) -W -Wall -fPIC
|
||||
LD = $(CXX)
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared -Wl,-x
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),openbsd)
|
||||
# OpenBSD with libc
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT) -pipe -W -Wall -fPIC
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT)
|
||||
SOFLAGS = -shared -Wl,-x
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),macosx)
|
||||
# MacOS X with cc (GNU cc 2.95.2 and gcc 3.3)
|
||||
MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
|
||||
MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR)
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -pipe -Wall -W -Woverloaded-virtual
|
||||
LD = $(MACOSXTARGET) g++
|
||||
LDFLAGS = $(OPT2)
|
||||
# The SOFLAGS will be used to create the .dylib,
|
||||
# the .so will be created separately
|
||||
ifeq ($(subst $(MACOSX_MINOR),,1234),1234)
|
||||
DllSuf = so
|
||||
else
|
||||
DllSuf = dylib
|
||||
endif
|
||||
UNDEFOPT = dynamic_lookup
|
||||
ifneq ($(subst $(MACOSX_MINOR),,12),12)
|
||||
UNDEFOPT = suppress
|
||||
LD = g++
|
||||
endif
|
||||
SOFLAGS = -dynamiclib -single_module -undefined $(UNDEFOPT) -install_name $(CURDIR)/
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),macosxicc)
|
||||
# MacOS X with Intel icc compiler
|
||||
MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
|
||||
MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR)
|
||||
ifeq ($(MACOSX_MINOR),5)
|
||||
MACOSX_MINOR := 4
|
||||
endif
|
||||
CXX = icc
|
||||
CXXFLAGS = $(OPT) -fPIC -wd1476
|
||||
LD = $(MACOSXTARGET) icpc
|
||||
LDFLAGS = $(OPT)
|
||||
# The SOFLAGS will be used to create the .dylib,
|
||||
# the .so will be created separately
|
||||
ifeq ($(subst $(MACOSX_MINOR),,1234),1234)
|
||||
DllSuf = so
|
||||
else
|
||||
DllSuf = dylib
|
||||
endif
|
||||
SOFLAGS = -dynamiclib -single_module -undefined dynamic_lookup -install_name $(CURDIR)/
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),macosx64)
|
||||
# MacOS X >= 10.4 with gcc 64 bit mode (GNU gcc 4.*)
|
||||
# Only specific option (-m64) comes from root-config
|
||||
MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
|
||||
MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR)
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT2) -pipe -Wall -W -Woverloaded-virtual
|
||||
LD = $(MACOSXTARGET) g++
|
||||
LDFLAGS = $(OPT2)
|
||||
# The SOFLAGS will be used to create the .dylib,
|
||||
# the .so will be created separately
|
||||
ifeq ($(subst $(MACOSX_MINOR),,1234),1234)
|
||||
DllSuf = so
|
||||
else
|
||||
DllSuf = dylib
|
||||
endif
|
||||
SOFLAGS = -dynamiclib -single_module -undefined dynamic_lookup -install_name $(CURDIR)/
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),macosxxlc)
|
||||
# MacOS X with IBM xlC compiler
|
||||
MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
|
||||
MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR)
|
||||
CXX = xlC
|
||||
CXXFLAGS = $(OPT)
|
||||
LD = $(MACOSXTARGET) xlC
|
||||
LDFLAGS = $(OPT) -Wl,-bind_at_load
|
||||
# The SOFLAGS will be used to create the .dylib,
|
||||
# the .so will be created separately
|
||||
DllSuf = dylib
|
||||
UNDEFOPT = dynamic_lookup
|
||||
ifneq ($(subst $(MACOSX_MINOR),,12),12)
|
||||
UNDEFOPT = suppress
|
||||
LD = xlC
|
||||
endif
|
||||
SOFLAGS = -qmkshrobj -single_module -undefined $(UNDEFOPT) -install_name $(CURDIR)/
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),win32)
|
||||
# Windows with the VC++ compiler
|
||||
VC_MAJOR := $(shell unset VS_UNICODE_OUTPUT; cl.exe 2>&1 | awk '{ if (NR==1) print $$8 }' | \
|
||||
cut -d'.' -f1)
|
||||
ObjSuf = obj
|
||||
SrcSuf = cxx
|
||||
ExeSuf = .exe
|
||||
DllSuf = dll
|
||||
OutPutOpt = -out:
|
||||
CXX = cl
|
||||
ifeq (debug,$(findstring debug,$(ROOTBUILD)))
|
||||
CXXOPT = -Z7
|
||||
LDOPT = -debug
|
||||
else
|
||||
ifneq ($(findstring debug, $(strip $(shell $(ROOTCONFIG) --config))),)
|
||||
CXXOPT = -Z7
|
||||
LDOPT = -debug
|
||||
else
|
||||
CXXOPT = -O2
|
||||
LDOPT = -opt:ref
|
||||
endif
|
||||
endif
|
||||
ROOTINCDIR := -I$(shell cygpath -m `$(ROOTCONFIG) --incdir`)
|
||||
CXXFLAGS = $(CXXOPT) -nologo $(ROOTINCDIR) -FIw32pragma.h
|
||||
LD = link
|
||||
LDFLAGS = $(LDOPT) -nologo
|
||||
SOFLAGS = -DLL
|
||||
|
||||
EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
|
||||
ifneq (,$(findstring $(VC_MAJOR),14 15))
|
||||
MT_EXE = mt -nologo -manifest $@.manifest -outputresource:$@\;1; rm -f $@.manifest
|
||||
MT_DLL = mt -nologo -manifest $@.manifest -outputresource:$@\;2; rm -f $@.manifest
|
||||
else
|
||||
MT_EXE =
|
||||
MT_DLL =
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),win32gcc)
|
||||
# Windows with gcc
|
||||
DllSuf = dll
|
||||
ExeSuf = .exe
|
||||
CXX = g++
|
||||
CXXFLAGS = $(OPT) -pipe -Wall -Woverloaded-virtual -I/usr/X11R6/include
|
||||
LD = g++
|
||||
LDFLAGS = $(OPT) -Wl,--enable-auto-import \
|
||||
-Wl,--enable-runtime-pseudo-reloc \
|
||||
-L/usr/X11R6/lib
|
||||
SOFLAGS = -shared -Wl,--enable-auto-image-base \
|
||||
-Wl,--export-all-symbols
|
||||
EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
|
||||
endif
|
||||
|
||||
ifeq ($(CXX),)
|
||||
$(error $(ARCH) invalid architecture)
|
||||
endif
|
||||
|
||||
CXXFLAGS += $(ROOTCFLAGS)
|
||||
LDFLAGS += $(ROOTLDFLAGS)
|
||||
LIBS = $(ROOTLIBS) $(SYSLIBS)
|
||||
GLIBS = $(ROOTGLIBS) $(SYSLIBS)
|
||||
|
||||
ifneq ($(ALTCC),)
|
||||
CC = $(ALTCC)
|
||||
endif
|
||||
ifneq ($(ALTCXX),)
|
||||
CXX = $(ALTCXX)
|
||||
endif
|
||||
ifneq ($(ALTF77),)
|
||||
F77 = $(ALTF77)
|
||||
endif
|
||||
ifneq ($(ALTLD),)
|
||||
LD = $(ALTLD)
|
||||
endif
|
||||
|
||||
ifneq ($(findstring g++, $(CXX)),)
|
||||
GCC_MAJOR := $(shell $(CXX) -dumpversion 2>&1 | cut -d'.' -f1)
|
||||
GCC_MINOR := $(shell $(CXX) -dumpversion 2>&1 | cut -d'.' -f2)
|
||||
endif
|
691
slsDetectorSoftware/slsDetectorAnalysis/TSlsDetectorDict.cpp
Normal file
691
slsDetectorSoftware/slsDetectorAnalysis/TSlsDetectorDict.cpp
Normal file
@ -0,0 +1,691 @@
|
||||
//
|
||||
// File generated by rootcint at Thu Mar 29 16:09:00 2012
|
||||
|
||||
// Do NOT change. Changes will be lost next time file is generated
|
||||
//
|
||||
|
||||
#include "RConfig.h" //rootcint 4834
|
||||
#if !defined(R__ACCESS_IN_SYMBOL)
|
||||
//Break the privacy of classes -- Disabled for the moment
|
||||
#define private public
|
||||
#define protected public
|
||||
#endif
|
||||
|
||||
// Since CINT ignores the std namespace, we need to do so in this file.
|
||||
namespace std {} using namespace std;
|
||||
#include "TSlsDetectorDict.h"
|
||||
|
||||
#include "TClass.h"
|
||||
#include "TBuffer.h"
|
||||
#include "TMemberInspector.h"
|
||||
#include "TError.h"
|
||||
|
||||
#ifndef G__ROOT
|
||||
#define G__ROOT
|
||||
#endif
|
||||
|
||||
#include "RtypesImp.h"
|
||||
#include "TIsAProxy.h"
|
||||
|
||||
// START OF SHADOWS
|
||||
|
||||
namespace ROOT {
|
||||
namespace Shadow {
|
||||
} // of namespace Shadow
|
||||
} // of namespace ROOT
|
||||
// END OF SHADOWS
|
||||
|
||||
namespace ROOT {
|
||||
void energyCalibration_ShowMembers(void *obj, TMemberInspector &R__insp, char *R__parent);
|
||||
static void energyCalibration_Dictionary();
|
||||
static void *new_energyCalibration(void *p = 0);
|
||||
static void *newArray_energyCalibration(Long_t size, void *p);
|
||||
static void delete_energyCalibration(void *p);
|
||||
static void deleteArray_energyCalibration(void *p);
|
||||
static void destruct_energyCalibration(void *p);
|
||||
|
||||
// Function generating the singleton type initializer
|
||||
static TGenericClassInfo *GenerateInitInstanceLocal(const ::energyCalibration*)
|
||||
{
|
||||
::energyCalibration *ptr = 0;
|
||||
static ::TVirtualIsAProxy* isa_proxy = new ::TIsAProxy(typeid(::energyCalibration),0);
|
||||
static ::ROOT::TGenericClassInfo
|
||||
instance("energyCalibration", "./energyCalibration.h", 168,
|
||||
typeid(::energyCalibration), DefineBehavior(ptr, ptr),
|
||||
0, &energyCalibration_Dictionary, isa_proxy, 0,
|
||||
sizeof(::energyCalibration) );
|
||||
instance.SetNew(&new_energyCalibration);
|
||||
instance.SetNewArray(&newArray_energyCalibration);
|
||||
instance.SetDelete(&delete_energyCalibration);
|
||||
instance.SetDeleteArray(&deleteArray_energyCalibration);
|
||||
instance.SetDestructor(&destruct_energyCalibration);
|
||||
return &instance;
|
||||
}
|
||||
TGenericClassInfo *GenerateInitInstance(const ::energyCalibration*)
|
||||
{
|
||||
return GenerateInitInstanceLocal((::energyCalibration*)0);
|
||||
}
|
||||
// Static variable to force the class initialization
|
||||
static ::ROOT::TGenericClassInfo *_R__UNIQUE_(Init) = GenerateInitInstanceLocal((const ::energyCalibration*)0x0); R__UseDummy(_R__UNIQUE_(Init));
|
||||
|
||||
// Dictionary for non-ClassDef classes
|
||||
static void energyCalibration_Dictionary() {
|
||||
::ROOT::GenerateInitInstanceLocal((const ::energyCalibration*)0x0)->GetClass();
|
||||
}
|
||||
|
||||
} // end of namespace ROOT
|
||||
|
||||
namespace ROOT {
|
||||
void angularCalibration_ShowMembers(void *obj, TMemberInspector &R__insp, char *R__parent);
|
||||
static void angularCalibration_Dictionary();
|
||||
static void *new_angularCalibration(void *p = 0);
|
||||
static void *newArray_angularCalibration(Long_t size, void *p);
|
||||
static void delete_angularCalibration(void *p);
|
||||
static void deleteArray_angularCalibration(void *p);
|
||||
static void destruct_angularCalibration(void *p);
|
||||
|
||||
// Function generating the singleton type initializer
|
||||
static TGenericClassInfo *GenerateInitInstanceLocal(const ::angularCalibration*)
|
||||
{
|
||||
::angularCalibration *ptr = 0;
|
||||
static ::TVirtualIsAProxy* isa_proxy = new ::TIsAProxy(typeid(::angularCalibration),0);
|
||||
static ::ROOT::TGenericClassInfo
|
||||
instance("angularCalibration", "./angularCalibration.h", 35,
|
||||
typeid(::angularCalibration), DefineBehavior(ptr, ptr),
|
||||
0, &angularCalibration_Dictionary, isa_proxy, 0,
|
||||
sizeof(::angularCalibration) );
|
||||
instance.SetNew(&new_angularCalibration);
|
||||
instance.SetNewArray(&newArray_angularCalibration);
|
||||
instance.SetDelete(&delete_angularCalibration);
|
||||
instance.SetDeleteArray(&deleteArray_angularCalibration);
|
||||
instance.SetDestructor(&destruct_angularCalibration);
|
||||
return &instance;
|
||||
}
|
||||
TGenericClassInfo *GenerateInitInstance(const ::angularCalibration*)
|
||||
{
|
||||
return GenerateInitInstanceLocal((::angularCalibration*)0);
|
||||
}
|
||||
// Static variable to force the class initialization
|
||||
static ::ROOT::TGenericClassInfo *_R__UNIQUE_(Init) = GenerateInitInstanceLocal((const ::angularCalibration*)0x0); R__UseDummy(_R__UNIQUE_(Init));
|
||||
|
||||
// Dictionary for non-ClassDef classes
|
||||
static void angularCalibration_Dictionary() {
|
||||
::ROOT::GenerateInitInstanceLocal((const ::angularCalibration*)0x0)->GetClass();
|
||||
}
|
||||
|
||||
} // end of namespace ROOT
|
||||
|
||||
namespace ROOT {
|
||||
// Wrappers around operator new
|
||||
static void *new_energyCalibration(void *p) {
|
||||
return p ? ::new((::ROOT::TOperatorNewHelper*)p) ::energyCalibration : new ::energyCalibration;
|
||||
}
|
||||
static void *newArray_energyCalibration(Long_t nElements, void *p) {
|
||||
return p ? ::new((::ROOT::TOperatorNewHelper*)p) ::energyCalibration[nElements] : new ::energyCalibration[nElements];
|
||||
}
|
||||
// Wrapper around operator delete
|
||||
static void delete_energyCalibration(void *p) {
|
||||
delete ((::energyCalibration*)p);
|
||||
}
|
||||
static void deleteArray_energyCalibration(void *p) {
|
||||
delete [] ((::energyCalibration*)p);
|
||||
}
|
||||
static void destruct_energyCalibration(void *p) {
|
||||
typedef ::energyCalibration current_t;
|
||||
((current_t*)p)->~current_t();
|
||||
}
|
||||
} // end of namespace ROOT for class ::energyCalibration
|
||||
|
||||
namespace ROOT {
|
||||
// Wrappers around operator new
|
||||
static void *new_angularCalibration(void *p) {
|
||||
return p ? ::new((::ROOT::TOperatorNewHelper*)p) ::angularCalibration : new ::angularCalibration;
|
||||
}
|
||||
static void *newArray_angularCalibration(Long_t nElements, void *p) {
|
||||
return p ? ::new((::ROOT::TOperatorNewHelper*)p) ::angularCalibration[nElements] : new ::angularCalibration[nElements];
|
||||
}
|
||||
// Wrapper around operator delete
|
||||
static void delete_angularCalibration(void *p) {
|
||||
delete ((::angularCalibration*)p);
|
||||
}
|
||||
static void deleteArray_angularCalibration(void *p) {
|
||||
delete [] ((::angularCalibration*)p);
|
||||
}
|
||||
static void destruct_angularCalibration(void *p) {
|
||||
typedef ::angularCalibration current_t;
|
||||
((current_t*)p)->~current_t();
|
||||
}
|
||||
} // end of namespace ROOT for class ::angularCalibration
|
||||
|
||||
/********************************************************
|
||||
* TSlsDetectorDict.cpp
|
||||
* CAUTION: DON'T CHANGE THIS FILE. THIS FILE IS AUTOMATICALLY GENERATED
|
||||
* FROM HEADER FILES LISTED IN G__setup_cpp_environmentXXX().
|
||||
* CHANGE THOSE HEADER FILES AND REGENERATE THIS FILE.
|
||||
********************************************************/
|
||||
|
||||
#ifdef G__MEMTEST
|
||||
#undef malloc
|
||||
#undef free
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__) && (__GNUC__ > 3) && (__GNUC_MINOR__ > 1)
|
||||
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
|
||||
#endif
|
||||
|
||||
extern "C" void G__cpp_reset_tagtableTSlsDetectorDict();
|
||||
|
||||
extern "C" void G__set_cpp_environmentTSlsDetectorDict() {
|
||||
G__add_compiledheader("TObject.h");
|
||||
G__add_compiledheader("TMemberInspector.h");
|
||||
G__add_compiledheader("energyCalibration.h");
|
||||
G__add_compiledheader("angularCalibration.h");
|
||||
G__cpp_reset_tagtableTSlsDetectorDict();
|
||||
}
|
||||
#include <new>
|
||||
extern "C" int G__cpp_dllrevTSlsDetectorDict() { return(30051515); }
|
||||
|
||||
/*********************************************************
|
||||
* Member function Interface Method
|
||||
*********************************************************/
|
||||
|
||||
/* energyCalibration */
|
||||
static int G__TSlsDetectorDict_85_0_1(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
energyCalibration* p = NULL;
|
||||
char* gvp = (char*) G__getgvp();
|
||||
int n = G__getaryconstruct();
|
||||
if (n) {
|
||||
if ((gvp == (char*)G__PVOID) || (gvp == 0)) {
|
||||
p = new energyCalibration[n];
|
||||
} else {
|
||||
p = new((void*) gvp) energyCalibration[n];
|
||||
}
|
||||
} else {
|
||||
if ((gvp == (char*)G__PVOID) || (gvp == 0)) {
|
||||
p = new energyCalibration;
|
||||
} else {
|
||||
p = new((void*) gvp) energyCalibration;
|
||||
}
|
||||
}
|
||||
result7->obj.i = (long) p;
|
||||
result7->ref = (long) p;
|
||||
result7->type = 'u';
|
||||
result7->tagnum = G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration);
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
static int G__TSlsDetectorDict_85_0_2(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
switch (libp->paran) {
|
||||
case 1:
|
||||
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setPlotFlag((int) G__int(libp->para[0])));
|
||||
break;
|
||||
case 0:
|
||||
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setPlotFlag());
|
||||
break;
|
||||
}
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
static int G__TSlsDetectorDict_85_0_3(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
switch (libp->paran) {
|
||||
case 1:
|
||||
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setScanSign((int) G__int(libp->para[0])));
|
||||
break;
|
||||
case 0:
|
||||
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setScanSign());
|
||||
break;
|
||||
}
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
static int G__TSlsDetectorDict_85_0_4(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
switch (libp->paran) {
|
||||
case 1:
|
||||
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setChargeSharing((int) G__int(libp->para[0])));
|
||||
break;
|
||||
case 0:
|
||||
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setChargeSharing());
|
||||
break;
|
||||
}
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
// automatic copy constructor
|
||||
static int G__TSlsDetectorDict_85_0_5(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
|
||||
{
|
||||
energyCalibration* p;
|
||||
void* tmp = (void*) G__int(libp->para[0]);
|
||||
p = new energyCalibration(*(energyCalibration*) tmp);
|
||||
result7->obj.i = (long) p;
|
||||
result7->ref = (long) p;
|
||||
result7->type = 'u';
|
||||
result7->tagnum = G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration);
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
// automatic destructor
|
||||
typedef energyCalibration G__TenergyCalibration;
|
||||
static int G__TSlsDetectorDict_85_0_6(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
char* gvp = (char*) G__getgvp();
|
||||
long soff = G__getstructoffset();
|
||||
int n = G__getaryconstruct();
|
||||
//
|
||||
//has_a_delete: 0
|
||||
//has_own_delete1arg: 0
|
||||
//has_own_delete2arg: 0
|
||||
//
|
||||
if (!soff) {
|
||||
return(1);
|
||||
}
|
||||
if (n) {
|
||||
if (gvp == (char*)G__PVOID) {
|
||||
delete[] (energyCalibration*) soff;
|
||||
} else {
|
||||
G__setgvp((long) G__PVOID);
|
||||
for (int i = n - 1; i >= 0; --i) {
|
||||
((energyCalibration*) (soff+(sizeof(energyCalibration)*i)))->~G__TenergyCalibration();
|
||||
}
|
||||
G__setgvp((long)gvp);
|
||||
}
|
||||
} else {
|
||||
if (gvp == (char*)G__PVOID) {
|
||||
delete (energyCalibration*) soff;
|
||||
} else {
|
||||
G__setgvp((long) G__PVOID);
|
||||
((energyCalibration*) (soff))->~G__TenergyCalibration();
|
||||
G__setgvp((long)gvp);
|
||||
}
|
||||
}
|
||||
G__setnull(result7);
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
// automatic assignment operator
|
||||
static int G__TSlsDetectorDict_85_0_7(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
energyCalibration* dest = (energyCalibration*) G__getstructoffset();
|
||||
*dest = *(energyCalibration*) libp->para[0].ref;
|
||||
const energyCalibration& obj = *dest;
|
||||
result7->ref = (long) (&obj);
|
||||
result7->obj.i = (long) (&obj);
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
|
||||
/* angularCalibration */
|
||||
static int G__TSlsDetectorDict_87_0_1(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
angularCalibration* p = NULL;
|
||||
char* gvp = (char*) G__getgvp();
|
||||
int n = G__getaryconstruct();
|
||||
if (n) {
|
||||
if ((gvp == (char*)G__PVOID) || (gvp == 0)) {
|
||||
p = new angularCalibration[n];
|
||||
} else {
|
||||
p = new((void*) gvp) angularCalibration[n];
|
||||
}
|
||||
} else {
|
||||
if ((gvp == (char*)G__PVOID) || (gvp == 0)) {
|
||||
p = new angularCalibration;
|
||||
} else {
|
||||
p = new((void*) gvp) angularCalibration;
|
||||
}
|
||||
}
|
||||
result7->obj.i = (long) p;
|
||||
result7->ref = (long) p;
|
||||
result7->type = 'u';
|
||||
result7->tagnum = G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration);
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
static int G__TSlsDetectorDict_87_0_2(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
switch (libp->paran) {
|
||||
case 1:
|
||||
G__letint(result7, 105, (long) ((angularCalibration*) G__getstructoffset())->setDirection((int) G__int(libp->para[0])));
|
||||
break;
|
||||
case 0:
|
||||
G__letint(result7, 105, (long) ((angularCalibration*) G__getstructoffset())->setDirection());
|
||||
break;
|
||||
}
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
static int G__TSlsDetectorDict_87_0_3(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
G__letdouble(result7, 102, (double) ((angularCalibration*) G__getstructoffset())->setEncoder((float) G__double(libp->para[0])));
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
static int G__TSlsDetectorDict_87_0_4(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
G__letdouble(result7, 102, (double) ((angularCalibration*) G__getstructoffset())->getEncoder());
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
static int G__TSlsDetectorDict_87_0_5(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
G__letdouble(result7, 102, (double) ((angularCalibration*) G__getstructoffset())->setTotalOffset((float) G__double(libp->para[0])));
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
static int G__TSlsDetectorDict_87_0_6(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
G__letdouble(result7, 102, (double) ((angularCalibration*) G__getstructoffset())->getTotalOffset());
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
static int G__TSlsDetectorDict_87_0_7(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
((angularCalibration*) G__getstructoffset())->setAngularRange((float) G__double(libp->para[0]), (float) G__double(libp->para[1]));
|
||||
G__setnull(result7);
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
static int G__TSlsDetectorDict_87_0_8(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
((angularCalibration*) G__getstructoffset())->getAngularRange(*(float*) G__Floatref(&libp->para[0]), *(float*) G__Floatref(&libp->para[1]));
|
||||
G__setnull(result7);
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
// automatic copy constructor
|
||||
static int G__TSlsDetectorDict_87_0_9(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
|
||||
{
|
||||
angularCalibration* p;
|
||||
void* tmp = (void*) G__int(libp->para[0]);
|
||||
p = new angularCalibration(*(angularCalibration*) tmp);
|
||||
result7->obj.i = (long) p;
|
||||
result7->ref = (long) p;
|
||||
result7->type = 'u';
|
||||
result7->tagnum = G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration);
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
// automatic destructor
|
||||
typedef angularCalibration G__TangularCalibration;
|
||||
static int G__TSlsDetectorDict_87_0_10(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
char* gvp = (char*) G__getgvp();
|
||||
long soff = G__getstructoffset();
|
||||
int n = G__getaryconstruct();
|
||||
//
|
||||
//has_a_delete: 0
|
||||
//has_own_delete1arg: 0
|
||||
//has_own_delete2arg: 0
|
||||
//
|
||||
if (!soff) {
|
||||
return(1);
|
||||
}
|
||||
if (n) {
|
||||
if (gvp == (char*)G__PVOID) {
|
||||
delete[] (angularCalibration*) soff;
|
||||
} else {
|
||||
G__setgvp((long) G__PVOID);
|
||||
for (int i = n - 1; i >= 0; --i) {
|
||||
((angularCalibration*) (soff+(sizeof(angularCalibration)*i)))->~G__TangularCalibration();
|
||||
}
|
||||
G__setgvp((long)gvp);
|
||||
}
|
||||
} else {
|
||||
if (gvp == (char*)G__PVOID) {
|
||||
delete (angularCalibration*) soff;
|
||||
} else {
|
||||
G__setgvp((long) G__PVOID);
|
||||
((angularCalibration*) (soff))->~G__TangularCalibration();
|
||||
G__setgvp((long)gvp);
|
||||
}
|
||||
}
|
||||
G__setnull(result7);
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
// automatic assignment operator
|
||||
static int G__TSlsDetectorDict_87_0_11(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
|
||||
{
|
||||
angularCalibration* dest = (angularCalibration*) G__getstructoffset();
|
||||
*dest = *(angularCalibration*) libp->para[0].ref;
|
||||
const angularCalibration& obj = *dest;
|
||||
result7->ref = (long) (&obj);
|
||||
result7->obj.i = (long) (&obj);
|
||||
return(1 || funcname || hash || result7 || libp) ;
|
||||
}
|
||||
|
||||
|
||||
/* Setting up global function */
|
||||
|
||||
/*********************************************************
|
||||
* Member function Stub
|
||||
*********************************************************/
|
||||
|
||||
/* energyCalibration */
|
||||
|
||||
/* angularCalibration */
|
||||
|
||||
/*********************************************************
|
||||
* Global function Stub
|
||||
*********************************************************/
|
||||
|
||||
/*********************************************************
|
||||
* Get size of pointer to member function
|
||||
*********************************************************/
|
||||
class G__Sizep2memfuncTSlsDetectorDict {
|
||||
public:
|
||||
G__Sizep2memfuncTSlsDetectorDict(): p(&G__Sizep2memfuncTSlsDetectorDict::sizep2memfunc) {}
|
||||
size_t sizep2memfunc() { return(sizeof(p)); }
|
||||
private:
|
||||
size_t (G__Sizep2memfuncTSlsDetectorDict::*p)();
|
||||
};
|
||||
|
||||
size_t G__get_sizep2memfuncTSlsDetectorDict()
|
||||
{
|
||||
G__Sizep2memfuncTSlsDetectorDict a;
|
||||
G__setsizep2memfunc((int)a.sizep2memfunc());
|
||||
return((size_t)a.sizep2memfunc());
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************
|
||||
* virtual base class offset calculation interface
|
||||
*********************************************************/
|
||||
|
||||
/* Setting up class inheritance */
|
||||
|
||||
/*********************************************************
|
||||
* Inheritance information setup/
|
||||
*********************************************************/
|
||||
extern "C" void G__cpp_setup_inheritanceTSlsDetectorDict() {
|
||||
|
||||
/* Setting up class inheritance */
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* typedef information setup/
|
||||
*********************************************************/
|
||||
extern "C" void G__cpp_setup_typetableTSlsDetectorDict() {
|
||||
|
||||
/* Setting up typedef entry */
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* Data Member information setup/
|
||||
*********************************************************/
|
||||
|
||||
/* Setting up class,struct,union tag member variable */
|
||||
|
||||
/* energyCalibration */
|
||||
static void G__setup_memvarenergyCalibration(void) {
|
||||
G__tag_memvar_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration));
|
||||
{ energyCalibration *p; p=(energyCalibration*)0x1000; if (p) { }
|
||||
G__memvar_setup((void*)0,85,0,0,G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibrationFunctions),-1,-1,4,"funcs=",0,(char*)NULL);
|
||||
G__memvar_setup((void*)0,105,0,0,-1,-1,-1,4,"plot_flag=",0,"*< 0 does not plot, >0 plots (flags?) */");
|
||||
G__memvar_setup((void*)0,105,0,0,-1,-1,-1,4,"cs_flag=",0,"*< 0 functions without charge sharing contribution, >0 with charge sharing contribution */");
|
||||
}
|
||||
G__tag_memvar_reset();
|
||||
}
|
||||
|
||||
|
||||
/* angularCalibration */
|
||||
static void G__setup_memvarangularCalibration(void) {
|
||||
G__tag_memvar_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration));
|
||||
{ angularCalibration *p; p=(angularCalibration*)0x1000; if (p) { }
|
||||
G__memvar_setup((void*)0,105,0,0,-1,-1,-1,4,"direction=",0,"*< angulat direction of the detector -can be +1 or -1 */");
|
||||
G__memvar_setup((void*)0,102,0,0,-1,-1,-1,4,"encoder=",0,"*< position of the detector encoder */");
|
||||
G__memvar_setup((void*)0,102,0,0,-1,-1,-1,4,"totalOffset=",0,"*< total offset of the detector */");
|
||||
G__memvar_setup((void*)0,102,0,0,-1,-1,-1,4,"ang_min=",0,"*< minimum of the angular range for peak fitting*/");
|
||||
G__memvar_setup((void*)0,102,0,0,-1,-1,-1,4,"ang_max=",0,"*< maximum of the angular range for peak fitting */");
|
||||
}
|
||||
G__tag_memvar_reset();
|
||||
}
|
||||
|
||||
extern "C" void G__cpp_setup_memvarTSlsDetectorDict() {
|
||||
}
|
||||
/***********************************************************
|
||||
************************************************************
|
||||
************************************************************
|
||||
************************************************************
|
||||
************************************************************
|
||||
************************************************************
|
||||
************************************************************
|
||||
***********************************************************/
|
||||
|
||||
/*********************************************************
|
||||
* Member function information setup for each class
|
||||
*********************************************************/
|
||||
static void G__setup_memfuncenergyCalibration(void) {
|
||||
/* energyCalibration */
|
||||
G__tag_memfunc_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration));
|
||||
G__memfunc_setup("energyCalibration",1778,G__TSlsDetectorDict_85_0_1, 105, G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration), -1, 0, 0, 1, 1, 0, "", (char*)NULL, (void*) NULL, 0);
|
||||
G__memfunc_setup("setPlotFlag",1125,G__TSlsDetectorDict_85_0_2, 105, -1, -1, 0, 1, 1, 1, 0, "i - - 0 '-1' p", (char*)NULL, (void*) NULL, 0);
|
||||
G__memfunc_setup("setScanSign",1122,G__TSlsDetectorDict_85_0_3, 105, -1, -1, 0, 1, 1, 1, 0, "i - - 0 '0' s", (char*)NULL, (void*) NULL, 0);
|
||||
G__memfunc_setup("setChargeSharing",1634,G__TSlsDetectorDict_85_0_4, 105, -1, -1, 0, 1, 1, 1, 0, "i - - 0 '-1' p", (char*)NULL, (void*) NULL, 0);
|
||||
// automatic copy constructor
|
||||
G__memfunc_setup("energyCalibration", 1778, G__TSlsDetectorDict_85_0_5, (int) ('i'), G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration), -1, 0, 1, 1, 1, 0, "u 'energyCalibration' - 11 - -", (char*) NULL, (void*) NULL, 0);
|
||||
// automatic destructor
|
||||
G__memfunc_setup("~energyCalibration", 1904, G__TSlsDetectorDict_85_0_6, (int) ('y'), -1, -1, 0, 0, 1, 1, 0, "", (char*) NULL, (void*) NULL, 0);
|
||||
// automatic assignment operator
|
||||
G__memfunc_setup("operator=", 937, G__TSlsDetectorDict_85_0_7, (int) ('u'), G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration), -1, 1, 1, 1, 1, 0, "u 'energyCalibration' - 11 - -", (char*) NULL, (void*) NULL, 0);
|
||||
G__tag_memfunc_reset();
|
||||
}
|
||||
|
||||
static void G__setup_memfuncangularCalibration(void) {
|
||||
/* angularCalibration */
|
||||
G__tag_memfunc_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration));
|
||||
G__memfunc_setup("angularCalibration",1874,G__TSlsDetectorDict_87_0_1, 105, G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration), -1, 0, 0, 1, 1, 0, "", (char*)NULL, (void*) NULL, 0);
|
||||
G__memfunc_setup("setDirection",1261,G__TSlsDetectorDict_87_0_2, 105, -1, -1, 0, 1, 1, 1, 0, "i - - 0 '0' d", (char*)NULL, (void*) NULL, 0);
|
||||
G__memfunc_setup("setEncoder",1036,G__TSlsDetectorDict_87_0_3, 102, -1, -1, 0, 1, 1, 1, 0, "f - - 0 - f", (char*)NULL, (void*) NULL, 0);
|
||||
G__memfunc_setup("getEncoder",1024,G__TSlsDetectorDict_87_0_4, 102, -1, -1, 0, 0, 1, 1, 0, "", (char*)NULL, (void*) NULL, 0);
|
||||
G__memfunc_setup("setTotalOffset",1463,G__TSlsDetectorDict_87_0_5, 102, -1, -1, 0, 1, 1, 1, 0, "f - - 0 - f", (char*)NULL, (void*) NULL, 0);
|
||||
G__memfunc_setup("getTotalOffset",1451,G__TSlsDetectorDict_87_0_6, 102, -1, -1, 0, 0, 1, 1, 0, "", (char*)NULL, (void*) NULL, 0);
|
||||
G__memfunc_setup("setAngularRange",1539,G__TSlsDetectorDict_87_0_7, 121, -1, -1, 0, 2, 1, 1, 0,
|
||||
"f - - 0 - mi f - - 0 - ma", (char*)NULL, (void*) NULL, 0);
|
||||
G__memfunc_setup("getAngularRange",1527,G__TSlsDetectorDict_87_0_8, 121, -1, -1, 0, 2, 1, 1, 0,
|
||||
"f - - 1 - mi f - - 1 - ma", (char*)NULL, (void*) NULL, 0);
|
||||
// automatic copy constructor
|
||||
G__memfunc_setup("angularCalibration", 1874, G__TSlsDetectorDict_87_0_9, (int) ('i'), G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration), -1, 0, 1, 1, 1, 0, "u 'angularCalibration' - 11 - -", (char*) NULL, (void*) NULL, 0);
|
||||
// automatic destructor
|
||||
G__memfunc_setup("~angularCalibration", 2000, G__TSlsDetectorDict_87_0_10, (int) ('y'), -1, -1, 0, 0, 1, 1, 0, "", (char*) NULL, (void*) NULL, 0);
|
||||
// automatic assignment operator
|
||||
G__memfunc_setup("operator=", 937, G__TSlsDetectorDict_87_0_11, (int) ('u'), G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration), -1, 1, 1, 1, 1, 0, "u 'angularCalibration' - 11 - -", (char*) NULL, (void*) NULL, 0);
|
||||
G__tag_memfunc_reset();
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************
|
||||
* Member function information setup
|
||||
*********************************************************/
|
||||
extern "C" void G__cpp_setup_memfuncTSlsDetectorDict() {
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* Global variable information setup for each class
|
||||
*********************************************************/
|
||||
static void G__cpp_setup_global0() {
|
||||
|
||||
/* Setting up global variables */
|
||||
G__resetplocal();
|
||||
|
||||
|
||||
G__resetglobalenv();
|
||||
}
|
||||
extern "C" void G__cpp_setup_globalTSlsDetectorDict() {
|
||||
G__cpp_setup_global0();
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* Global function information setup for each class
|
||||
*********************************************************/
|
||||
static void G__cpp_setup_func0() {
|
||||
G__lastifuncposition();
|
||||
|
||||
}
|
||||
|
||||
static void G__cpp_setup_func1() {
|
||||
}
|
||||
|
||||
static void G__cpp_setup_func2() {
|
||||
|
||||
G__resetifuncposition();
|
||||
}
|
||||
|
||||
extern "C" void G__cpp_setup_funcTSlsDetectorDict() {
|
||||
G__cpp_setup_func0();
|
||||
G__cpp_setup_func1();
|
||||
G__cpp_setup_func2();
|
||||
}
|
||||
|
||||
/*********************************************************
|
||||
* Class,struct,union,enum tag information setup
|
||||
*********************************************************/
|
||||
/* Setup class/struct taginfo */
|
||||
G__linked_taginfo G__TSlsDetectorDictLN_energyCalibrationFunctions = { "energyCalibrationFunctions" , 99 , -1 };
|
||||
G__linked_taginfo G__TSlsDetectorDictLN_energyCalibration = { "energyCalibration" , 99 , -1 };
|
||||
G__linked_taginfo G__TSlsDetectorDictLN_angularCalibration = { "angularCalibration" , 99 , -1 };
|
||||
|
||||
/* Reset class/struct taginfo */
|
||||
extern "C" void G__cpp_reset_tagtableTSlsDetectorDict() {
|
||||
G__TSlsDetectorDictLN_energyCalibrationFunctions.tagnum = -1 ;
|
||||
G__TSlsDetectorDictLN_energyCalibration.tagnum = -1 ;
|
||||
G__TSlsDetectorDictLN_angularCalibration.tagnum = -1 ;
|
||||
}
|
||||
|
||||
|
||||
extern "C" void G__cpp_setup_tagtableTSlsDetectorDict() {
|
||||
|
||||
/* Setting up class,struct,union tag entry */
|
||||
G__get_linked_tagnum_fwd(&G__TSlsDetectorDictLN_energyCalibrationFunctions);
|
||||
G__tagtable_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration),sizeof(energyCalibration),-1,1280,(char*)NULL,G__setup_memvarenergyCalibration,G__setup_memfuncenergyCalibration);
|
||||
G__tagtable_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration),sizeof(angularCalibration),-1,1280,(char*)NULL,G__setup_memvarangularCalibration,G__setup_memfuncangularCalibration);
|
||||
}
|
||||
extern "C" void G__cpp_setupTSlsDetectorDict(void) {
|
||||
G__check_setup_version(30051515,"G__cpp_setupTSlsDetectorDict()");
|
||||
G__set_cpp_environmentTSlsDetectorDict();
|
||||
G__cpp_setup_tagtableTSlsDetectorDict();
|
||||
|
||||
G__cpp_setup_inheritanceTSlsDetectorDict();
|
||||
|
||||
G__cpp_setup_typetableTSlsDetectorDict();
|
||||
|
||||
G__cpp_setup_memvarTSlsDetectorDict();
|
||||
|
||||
G__cpp_setup_memfuncTSlsDetectorDict();
|
||||
G__cpp_setup_globalTSlsDetectorDict();
|
||||
G__cpp_setup_funcTSlsDetectorDict();
|
||||
|
||||
if(0==G__getsizep2memfunc()) G__get_sizep2memfuncTSlsDetectorDict();
|
||||
return;
|
||||
}
|
||||
class G__cpp_setup_initTSlsDetectorDict {
|
||||
public:
|
||||
G__cpp_setup_initTSlsDetectorDict() { G__add_setup_func("TSlsDetectorDict",(G__incsetup)(&G__cpp_setupTSlsDetectorDict)); G__call_setup_funcs(); }
|
||||
~G__cpp_setup_initTSlsDetectorDict() { G__remove_setup_func("TSlsDetectorDict"); }
|
||||
};
|
||||
G__cpp_setup_initTSlsDetectorDict G__cpp_setup_initializerTSlsDetectorDict;
|
||||
|
42
slsDetectorSoftware/slsDetectorAnalysis/TSlsDetectorDict.h
Normal file
42
slsDetectorSoftware/slsDetectorAnalysis/TSlsDetectorDict.h
Normal file
@ -0,0 +1,42 @@
|
||||
/********************************************************************
|
||||
* TSlsDetectorDict.h
|
||||
* CAUTION: DON'T CHANGE THIS FILE. THIS FILE IS AUTOMATICALLY GENERATED
|
||||
* FROM HEADER FILES LISTED IN G__setup_cpp_environmentXXX().
|
||||
* CHANGE THOSE HEADER FILES AND REGENERATE THIS FILE.
|
||||
********************************************************************/
|
||||
#ifdef __CINT__
|
||||
#error TSlsDetectorDict.h/C is only for compilation. Abort cint.
|
||||
#endif
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
#define G__ANSIHEADER
|
||||
#define G__DICTIONARY
|
||||
#include "cint/G__ci.h"
|
||||
extern "C" {
|
||||
extern void G__cpp_setup_tagtableTSlsDetectorDict();
|
||||
extern void G__cpp_setup_inheritanceTSlsDetectorDict();
|
||||
extern void G__cpp_setup_typetableTSlsDetectorDict();
|
||||
extern void G__cpp_setup_memvarTSlsDetectorDict();
|
||||
extern void G__cpp_setup_globalTSlsDetectorDict();
|
||||
extern void G__cpp_setup_memfuncTSlsDetectorDict();
|
||||
extern void G__cpp_setup_funcTSlsDetectorDict();
|
||||
extern void G__set_cpp_environmentTSlsDetectorDict();
|
||||
}
|
||||
|
||||
|
||||
#include "TObject.h"
|
||||
#include "TMemberInspector.h"
|
||||
#include "energyCalibration.h"
|
||||
#include "angularCalibration.h"
|
||||
|
||||
#ifndef G__MEMFUNCBODY
|
||||
#endif
|
||||
|
||||
extern G__linked_taginfo G__TSlsDetectorDictLN_energyCalibrationFunctions;
|
||||
extern G__linked_taginfo G__TSlsDetectorDictLN_energyCalibration;
|
||||
extern G__linked_taginfo G__TSlsDetectorDictLN_angularCalibration;
|
||||
|
||||
/* STUB derived class for protected member access */
|
471
slsDetectorSoftware/slsDetectorAnalysis/angularCalibration.cpp
Normal file
471
slsDetectorSoftware/slsDetectorAnalysis/angularCalibration.cpp
Normal file
@ -0,0 +1,471 @@
|
||||
#include "angularCalibration.h"
|
||||
|
||||
#include <iostream>
|
||||
#ifdef ROOT
|
||||
#include <TMath.h>
|
||||
#include <TH1.h>
|
||||
#endif
|
||||
|
||||
#include "usersFunctions.h"
|
||||
|
||||
#ifdef __CINT
|
||||
#include "usersFunctions.cpp"
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
|
||||
angularCalibration::angularCalibration(int nm): direction(1),
|
||||
#ifdef ROOT
|
||||
fpeak(NULL),
|
||||
fangle(NULL),
|
||||
#endif
|
||||
encoder(0),
|
||||
totalOffset(0),
|
||||
ang_min(-180),
|
||||
ang_max(180),
|
||||
nmod(nm),
|
||||
nchmod(1280),
|
||||
angConv(NULL)
|
||||
{
|
||||
|
||||
#ifdef ROOT
|
||||
// Creates a Root function based on function peakfunction
|
||||
TF1 *fpeak = new TF1("fpeak",this,&angularCalibration::peakFunction,ang_min,ang_max,5,"angularCalibration","peakFunction");
|
||||
|
||||
// Sets initial values and parameter names
|
||||
// func->SetParameters((Double_t) PEAKHEIGHT, (Double_t) maxch,(Double_t) PEAKWIDTH,(Double_t) PEAKBACK);
|
||||
fpeak->SetParNames("Number of Photons","Peak Position","Peak Width RMS","Background Offset", "Background Slope");
|
||||
|
||||
|
||||
TF1 *fangle = new TF1("fangle",this,&angularCalibration::angleFunction,0,1280,3,"angularCalibration","angleFunction");
|
||||
fangle->SetParNames("Center","Conversion Radius","Offset");
|
||||
|
||||
#endif
|
||||
|
||||
angConv=new angleConversionConstant[nmod];
|
||||
|
||||
}
|
||||
|
||||
angularCalibration::~angularCalibration(){
|
||||
#ifdef ROOT
|
||||
delete fpeak;
|
||||
delete fangle;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
angleConversionConstant* angularCalibration::getAngularConversionConstant(int imod) {
|
||||
if (imod>=0 && imod<nmod)
|
||||
return angConv+imod;
|
||||
else
|
||||
return NULL;
|
||||
|
||||
}
|
||||
angleConversionConstant* angularCalibration::setAngularConversionConstant(angleConversionConstant *a, int imod) {
|
||||
|
||||
if (imod>=0 && imod<nmod) {
|
||||
angConv[imod].center=a->center;
|
||||
angConv[imod].ecenter=a->ecenter;
|
||||
angConv[imod].r_conversion=a->r_conversion;
|
||||
angConv[imod].er_conversion=a->er_conversion;
|
||||
angConv[imod].offset=a->offset;
|
||||
angConv[imod].eoffset=a->eoffset;
|
||||
angConv[imod].tilt=a->tilt;
|
||||
angConv[imod].etilt=a->etilt;
|
||||
|
||||
return angConv+imod;
|
||||
}
|
||||
return NULL;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef ROOT
|
||||
|
||||
Double_t angularCalibration::peakFunction(Double_t *x, Double_t *par) {
|
||||
Double_t arg = 0;
|
||||
if (par[2] != 0) arg = (x[0] - par[1])/par[2];
|
||||
return par[0]*TMath::Exp(-0.5*arg*arg)+par[3]+par[4]*(x[0]-par[1]);
|
||||
|
||||
}
|
||||
|
||||
Double_t angularCalibration::angleFunction(Double_t *x, Double_t *par) {
|
||||
return par[2]-angle((int)x[0],0,0,par[1],par[0],0,0,direction);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
TF1 *fitPeak(TH1 *h) {
|
||||
|
||||
TF1 *fitfun=NULL;
|
||||
int chmod, imod;
|
||||
float ang;
|
||||
|
||||
// reads in a run and fits a gaussian to the peak as function
|
||||
// of channel number also reads optical encoder
|
||||
|
||||
|
||||
// find angular range in channels
|
||||
|
||||
// is it necessary to discard fit with too many points?
|
||||
for (int i=0;i<h->GetNbinsX();i++) {
|
||||
imod=i/nchmod;
|
||||
chmod=i%(imod*nchmod);
|
||||
ang=angle(chmod,encoder,totalOffset,angConv[imod].r_conversion, angConv[imod].center, angConv[imod].offset, angConv[imod].tilt, direction);
|
||||
if ((ang>ang_min) && (ang<ang_max)) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// for (i=0;i<nchannel;i++) {
|
||||
// if ( (angle(i)>minang) && (angle(i)<maxang) ) {
|
||||
// x[npoints]=(float) i;
|
||||
// y[npoints]=(float) data[i];
|
||||
// ex[npoints]=0.001;
|
||||
// ey[npoints]=dataerror[i];
|
||||
// anglefit[npoints]=angle(i);
|
||||
// npoints++;
|
||||
|
||||
// if (npoints>MAXINPEAK) {
|
||||
// printf("too many points in angular range !\n");
|
||||
// return -1; // too many points in range
|
||||
// }
|
||||
// if ( data[i]> max) {
|
||||
// max = (int) data[i];
|
||||
// maxch = i;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } else
|
||||
// return -1;
|
||||
|
||||
// npoints--;
|
||||
// chmin= (int) x[0];
|
||||
// chmax= (int) x[npoints];
|
||||
|
||||
// printf("number of points in range %f-%f: %i \n",minang,maxang,npoints);
|
||||
// printf("channel from minang to maxang %i - %i \n",chmin,chmax);
|
||||
// printf("channel with max intensity %i \n",maxch);
|
||||
|
||||
// TCanvas *c1;
|
||||
|
||||
// TGraph *gr1 = new TGraph(npoints,anglefit,y);
|
||||
// TGraph *gr2 = new TGraph(npoints,x,y);
|
||||
// if (plotflag) {
|
||||
// /* create canvas */
|
||||
|
||||
// c1 = new TCanvas();
|
||||
// c1->SetTitle("Si calibration data");
|
||||
// c1->Divide(1,2);
|
||||
|
||||
// /* create graph */
|
||||
|
||||
// sprintf(name,"run number %i",nr);
|
||||
// gr1->SetTitle(name);
|
||||
// gr2->SetTitle(name);
|
||||
|
||||
// c1->cd(1);
|
||||
// gr1->Draw("AL*");
|
||||
// c1->cd(2);
|
||||
// gr2->Draw("AL*");
|
||||
// }
|
||||
|
||||
// /* do not fit if peak is close to edge of module */
|
||||
// if (abs(modfromchannel(maxch)*NCHMOD-maxch)<DISTANCE) {
|
||||
// printf("peak too close to border of module\n");
|
||||
// return -1;
|
||||
// }
|
||||
|
||||
// /* do not fit if peak is close to edge of range */
|
||||
// if ( ((maxch-chmin)<DISTANCE) || ( (chmax-maxch)<DISTANCE) ) {
|
||||
// printf("peak too close to border of range\n");
|
||||
// return -1;
|
||||
// }
|
||||
|
||||
// /* do not fit if nr of points is to small */
|
||||
// if (npoints<10) {
|
||||
// printf("too few points in range\n");
|
||||
// return -1;
|
||||
// }
|
||||
|
||||
// if (plotflag)
|
||||
// gr2->Fit("fitpeak","B");
|
||||
// else
|
||||
// gr2->Fit("fitpeak","B0");
|
||||
|
||||
// TF1 *fit = gr2->GetFunction("fitpeak");
|
||||
|
||||
// // writes the fit results into the par array
|
||||
// fit->GetParameters(mypar);
|
||||
|
||||
// printf("\n");
|
||||
// for (i=0;i<4;i++) {
|
||||
// myerr[i] = fit->GetParError(i); // obtain fit parameter errors
|
||||
// printf("parameter %i: %f +- %f \n",i,mypar[i],myerr[i]);
|
||||
// }
|
||||
|
||||
// chi2=fit->GetChisquare();
|
||||
// printf("chi2: %e\n",chi2);
|
||||
// printf("\n\n");
|
||||
|
||||
// if (chi2>CHIMAX) {
|
||||
// printf("chi2 too large!\n");
|
||||
// return -1;
|
||||
// }
|
||||
|
||||
// if (plotflag)
|
||||
// c1->Update(); // necessary for axis titles!
|
||||
// // c1->WaitPrimitive();
|
||||
|
||||
// return 0;
|
||||
|
||||
return fitfun;
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// //
|
||||
// // for detector angular calibration
|
||||
// //
|
||||
// // loops over runs fits a peak in each run and then fits the parameters for
|
||||
// // the angular calibration to the fitted peak and optical encoder values
|
||||
// //
|
||||
// //
|
||||
// // note:
|
||||
// // setting global offset is important to find peak in peak fitting!
|
||||
// // also set peak height,width and background in defines at beginning
|
||||
// //
|
||||
|
||||
// void fitangle(char fname[80],char extension[10], int start, int stop, float startangle, float stopangle) {
|
||||
|
||||
// int i,nfit,mod,npoints,nnpoints;
|
||||
// float x[MAXINMODULE],y[MAXINMODULE],ex[MAXINMODULE],ey[MAXINMODULE],min,max;
|
||||
// float xx[MAXINMODULE],yy[MAXINMODULE],exx[MAXINMODULE],eyy[MAXINMODULE];
|
||||
|
||||
// double channelfit[MAXRUN], channelerror[MAXRUN], encoderfit[MAXRUN];
|
||||
// int runnrfit[MAXRUN], modulenr[MAXRUN];
|
||||
|
||||
|
||||
// FILE *fp;
|
||||
// char name[80];
|
||||
// TCanvas *c1,*c2;
|
||||
// gROOT->Reset(); // reset root
|
||||
// // gStyle->SetOptFit(1110);
|
||||
|
||||
// nfit=0;
|
||||
// for (i=start;i<stop;i++) {
|
||||
// // sprintf(name,"%s%i",fname,i);
|
||||
// if (fitpeak(fname,extension,i,startangle,stopangle)!=-1) {
|
||||
// printf("nfit %i encoder %f\n",nfit,encoder);
|
||||
// channelfit[nfit]=(double) mypar[1];
|
||||
// channelerror[nfit]=(double) myerr[1];
|
||||
// encoderfit[nfit]=(double) encoder;
|
||||
// modulenr[nfit]=modfromchannel( channelfit[nfit] );
|
||||
// runnrfit[nfit]=i;
|
||||
|
||||
// // only use value if sigma is reasonable
|
||||
// if (channelerror[nfit]<MAXSIGMA) {
|
||||
// nfit++;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// printf(" %i usable peak fits \n\n",nfit);
|
||||
|
||||
// for (i=0;i<nfit;i++) {
|
||||
// printf("i %i run %i encoder %f fit %f module %i \n",i,runnrfit[i],encoderfit[i],channelfit[i],modulenr[i]);
|
||||
// }
|
||||
|
||||
// TGraph *gr3 = new TGraph(nfit,channelfit,encoderfit);
|
||||
// if (plotflag) {
|
||||
// /* create canvas */
|
||||
// TCanvas *c1 = new TCanvas();
|
||||
// c1->SetTitle("Si calibration data");
|
||||
// /* create graph for angle vs fitted channel number */
|
||||
// gr3->Draw("AL*");
|
||||
|
||||
// c1->Update(); // necessary for axis titles!
|
||||
// c1->WaitPrimitive();
|
||||
|
||||
// delete c1;
|
||||
// }
|
||||
// TH1F *herr=new TH1F("herr","",100,0,0.002);
|
||||
|
||||
|
||||
// for (mod=0;mod<NMOD;mod++) {
|
||||
// npoints=0;
|
||||
// for (i=0;i<nfit;i++) {
|
||||
// if (modulenr[i]==mod) {
|
||||
// x[npoints]=channelfit[i]-mod*1280;
|
||||
// ex[npoints]=channelerror[i];
|
||||
// y[npoints]=encoderfit[i];
|
||||
// ey[npoints]=ENCODERERROR;
|
||||
// npoints++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (npoints>5) {
|
||||
|
||||
// // create canvas
|
||||
// if (plotflag) {
|
||||
// TCanvas *c2 = new TCanvas();
|
||||
// c2->SetTitle("Si calibration data");
|
||||
// c2->Divide(1,3);
|
||||
// }
|
||||
// // create graph
|
||||
// TGraphErrors *gr1 = new TGraphErrors(npoints,x,y,ex,ey);
|
||||
// sprintf(name,"module number %i",mod);
|
||||
// gr1->SetTitle(name);
|
||||
// if (plotflag) {
|
||||
// c2->cd(1);
|
||||
// gr1->Draw("ALP");
|
||||
// }
|
||||
|
||||
|
||||
// // Creates a Root function based on function anglefunction
|
||||
// if (x[0]>x[npoints-1]) {
|
||||
// min=x[npoints-1];
|
||||
// max=x[0];
|
||||
// } else {
|
||||
// max=x[npoints-1];
|
||||
// min=x[0];
|
||||
// }
|
||||
|
||||
|
||||
// TF1 *func = new TF1("fitangle",anglefunction,min,max,3);
|
||||
|
||||
// // Sets initial values and parameter names
|
||||
// func->SetParameters(640,0.0000656,-mod*5.0);
|
||||
// func->SetParNames("center","conversion","offset");
|
||||
// func->FixParameter(0,640.0);
|
||||
// if (plotflag) {
|
||||
// gr1->Fit("fitangle"); // fit the function
|
||||
// } else
|
||||
// gr1->Fit("fitangle","0"); // fit the function
|
||||
|
||||
|
||||
// // calculate the deviations of data points from fitted function and plot them
|
||||
// for (i=0;i<npoints;i++) {
|
||||
// ey[i]=func->Eval(x[i])-y[i];
|
||||
// }
|
||||
// TGraph *gr4 = new TGraph(npoints,x,ey);
|
||||
// sprintf(name,"module number %i deviations from fit",mod);
|
||||
// gr4->SetTitle(name);
|
||||
|
||||
// if (plotflag) {
|
||||
// gr4->SetMarkerStyle(24);
|
||||
// c2->cd(2);
|
||||
// gr4->Draw("ALP");
|
||||
// }
|
||||
|
||||
|
||||
// // iterate fit with outlying points excluded
|
||||
// nnpoints=0;
|
||||
// for (i=0;i<npoints;i++) {
|
||||
// if (fabs(ey[i])<DIFFANGLEFIT) {
|
||||
// xx[nnpoints]=x[i];
|
||||
// yy[nnpoints]=y[i];
|
||||
// exx[nnpoints]=ex[i];
|
||||
// eyy[nnpoints]=ENCODERERROR;
|
||||
// nnpoints++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// TGraphErrors *gr3 = new TGraphErrors(nnpoints,xx,yy,exx,eyy); // create graph
|
||||
// if (plotflag) {
|
||||
// gr3->Fit("fitangle"); // fit the function
|
||||
// } else
|
||||
// gr3->Fit("fitangle","0"); // fit the function
|
||||
|
||||
|
||||
// // calculate the deviations of data points from fitted function and plot them
|
||||
// for (i=0;i<nnpoints;i++) {
|
||||
// eyy[i]=func->Eval(xx[i])-yy[i];
|
||||
// herr->Fill(eyy[i]);
|
||||
// }
|
||||
|
||||
// TGraph *gr5 = new TGraph(nnpoints,xx,eyy);
|
||||
// sprintf(name,"module number %i deviations from fit second iteration",mod);
|
||||
// if (plotflag) {
|
||||
// c2->cd(3);
|
||||
// gr5->SetTitle(name);
|
||||
// gr5->SetMarkerStyle(24);
|
||||
|
||||
// gr5->Draw("ALP");
|
||||
|
||||
|
||||
// c2->Update(); // necessary for axis titles?
|
||||
// c2->WaitPrimitive();
|
||||
|
||||
// }
|
||||
|
||||
// // writes the fit results into the par array
|
||||
// //
|
||||
// // get fit parameter
|
||||
// func->GetParameters(mypar);
|
||||
|
||||
// for (i=0;i<3;i++) {
|
||||
// myerr[i] = func->GetParError(i); // obtain fit parameter errors
|
||||
// printf("parameter %i: %E +- %E \n",i,mypar[i],myerr[i]);
|
||||
// }
|
||||
// printf("\n\n");
|
||||
|
||||
// center[mod]=mypar[0];
|
||||
// errcenter[mod]=myerr[0];
|
||||
// conversion[mod]=mypar[1];
|
||||
// errconversion[mod]=myerr[1];
|
||||
// moffset[mod]=mypar[2];
|
||||
// erroff[mod]=myerr[2];
|
||||
|
||||
// delete gr1;
|
||||
// delete gr4;
|
||||
// delete gr5;
|
||||
// delete func;
|
||||
// delete c2;
|
||||
// }
|
||||
// }
|
||||
// //herr->GetXaxis()->SetMaxDigits(3);
|
||||
// herr->GetXaxis()->SetTitle("Deviations from fit (deg)");
|
||||
// herr->Draw();
|
||||
|
||||
|
||||
// printf("\n\n\n");
|
||||
// for (mod=0;mod<NMOD;mod++) {
|
||||
// printf(" module %i center %.3E +- %.2E conversion %.4E +- %.2E offset %.5f +- %.5f \n",mod,center[mod],errcenter[mod],conversion[mod],errconversion[mod],moffset[mod],erroff[mod]);
|
||||
// }
|
||||
|
||||
|
||||
// // write file with offsets
|
||||
// fp = fopen("ang.off","w");
|
||||
// if (fp == NULL) {
|
||||
// printf("cant open parameter file !\n");
|
||||
// exit(1);
|
||||
// }
|
||||
|
||||
// for (mod=0;mod<NMOD;mod++) {
|
||||
// fprintf(fp," module %i center %.3E +- %.2E conversion %.4E +- %.2E offset %.5f +- %.5f \n",mod,center[mod],errcenter[mod],conversion[mod],errconversion[mod],moffset[0]-moffset[mod],erroff[mod]);
|
||||
// }
|
||||
|
||||
// fclose (fp);
|
||||
|
||||
// }
|
||||
|
170
slsDetectorSoftware/slsDetectorAnalysis/angularCalibration.h
Normal file
170
slsDetectorSoftware/slsDetectorAnalysis/angularCalibration.h
Normal file
@ -0,0 +1,170 @@
|
||||
|
||||
#ifndef ANGULARCALIBRATION_H
|
||||
#define ANGULARCALIBRATION_H
|
||||
|
||||
|
||||
//#include "usersFunctions.h"
|
||||
|
||||
|
||||
#ifdef ROOT
|
||||
#include <TROOT.h>
|
||||
#include <TF1.h>
|
||||
class TH1;
|
||||
#endif
|
||||
|
||||
//float angle(int ichan, float encoder, float totalOffset, float conv_r, float center, float offset, float tilt, int direction)
|
||||
|
||||
|
||||
|
||||
/**
|
||||
angular conversion constant for a module
|
||||
*/
|
||||
typedef struct {
|
||||
float center; /**< center of the module (channel at which the radius is perpendicular to the module surface) */
|
||||
float ecenter; /**< error in the center determination */
|
||||
float r_conversion; /**< detector pixel size (or strip pitch) divided by the diffractometer radius */
|
||||
float er_conversion; /**< error in the r_conversion determination */
|
||||
float offset; /**< the module offset i.e. the position of channel 0 with respect to the diffractometer 0 */
|
||||
float eoffset; /**< error in the offset determination */
|
||||
float tilt; /**< ossible tilt in the orthogonal direction (unused)*/
|
||||
float etilt; /**< error in the tilt determination */
|
||||
} angleConversionConstant;
|
||||
|
||||
|
||||
|
||||
class angularCalibration {
|
||||
|
||||
public:
|
||||
angularCalibration(int nm=48);
|
||||
~angularCalibration();
|
||||
|
||||
/**
|
||||
sets the angular direction of the detector
|
||||
\par d 1 or -1 set the angular direction, other valuse simply get
|
||||
\returns the angular direction of the detector
|
||||
*/
|
||||
int setDirection(int d=0){if (d==-1 || d==1) direction=d; return direction;};
|
||||
|
||||
/**
|
||||
sets the encoder position
|
||||
\param f encoder position to be set
|
||||
\returns current encoder position
|
||||
*/
|
||||
float setEncoder(float f) {encoder=f; return encoder;};
|
||||
|
||||
/**
|
||||
gets the encoder position
|
||||
\returns encoder position
|
||||
*/
|
||||
float getEncoder() {return encoder;};
|
||||
|
||||
/**
|
||||
sets the totalOffset of the detector
|
||||
\param f total offset to be set
|
||||
\returns current total offset
|
||||
*/
|
||||
float setTotalOffset(float f) {totalOffset=f; return totalOffset;};
|
||||
|
||||
/**
|
||||
gets the encoder position
|
||||
\returns encoder position
|
||||
*/
|
||||
float getTotalOffset() {return totalOffset;};
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
sets the angular range for peak fitting
|
||||
\param mi minimum of the angular range
|
||||
\param ma maximum of the angular range
|
||||
*/
|
||||
void setAngularRange(float mi, float ma){ang_min=mi; ang_max=ma;};
|
||||
|
||||
|
||||
/**
|
||||
gets the angular range for peak fitting
|
||||
\param mi reference to the minimum of the angular range
|
||||
\param ma reference to the maximum of the angular range
|
||||
*/
|
||||
void getAngularRange(float &mi, float &ma){mi=ang_min; ma=ang_max;};
|
||||
|
||||
|
||||
/** sets and returns the number of modules
|
||||
\param nm number of modules to be set (<0 gets)
|
||||
\return current number of modules
|
||||
*/
|
||||
int setNumberOfModules(int nm=-1) {if (nm>=0) nmod=nm; return nmod;};
|
||||
|
||||
/** sets and returns the number of channels per module
|
||||
\param n number of channels per module to be set (<0 gets)
|
||||
\return current number of channels per module
|
||||
*/
|
||||
int setChannelsPerModule(int n=-1) {if (n>0) nchmod=n; return nchmod;};
|
||||
|
||||
angleConversionConstant *getAngularConversionConstant(int imod=0);
|
||||
angleConversionConstant *setAngularConversionConstant(angleConversionConstant *a, int imod=0);
|
||||
|
||||
|
||||
#ifdef ROOT
|
||||
|
||||
/**
|
||||
Gaussian with pedestal describing a peak
|
||||
par[0] is the heigh of the pean
|
||||
par[1] is the peak position
|
||||
par[2] is the peak width
|
||||
par[3] is the background offset
|
||||
par[4] is the background slope
|
||||
*/
|
||||
Double_t peakFunction(Double_t *x, Double_t *par);
|
||||
|
||||
|
||||
/**
|
||||
Angular conversion function
|
||||
par[0] is the module center
|
||||
par[1] is the conversion radius (pitch/radius)
|
||||
par[2] is the module offset
|
||||
*/
|
||||
Double_t angleFunction(Double_t *x, Double_t *par);
|
||||
|
||||
/**
|
||||
Fits a peak for the angular calibration
|
||||
\param h histogram channels versus intensity
|
||||
\returns fitted function or NULL if fit failed
|
||||
*/
|
||||
TF1 *fitPeak(TH1 *h);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
private:
|
||||
|
||||
int direction; /**< angular direction of the detector -can be +1 or -1 */
|
||||
|
||||
#ifdef ROOT
|
||||
TF1 *fpeak; /**< Root function based on function peakFunction */
|
||||
|
||||
TF1 *fangle; /**< Root function based on function angleFunction */
|
||||
|
||||
#endif
|
||||
float encoder; /**< position of the detector encoder */
|
||||
float totalOffset; /**< total offset of the detector */
|
||||
float ang_min; /**< minimum of the angular range for peak fitting*/
|
||||
float ang_max; /**< maximum of the angular range for peak fitting */
|
||||
|
||||
int nmod;
|
||||
int nchmod;
|
||||
|
||||
angleConversionConstant *angConv;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* void fitangle(char fname[80],char extension[10], int start, int stop, float startangle, float stopangle); //fits all datasets and extracts the constants */
|
||||
/* int fitpeak(char fname[80],char extension[10], int nr, float minang, float maxang); // fits a peak from a pattern using nominal calibration constant */
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
481
slsDetectorSoftware/slsDetectorAnalysis/angularConversion.cpp
Normal file
481
slsDetectorSoftware/slsDetectorAnalysis/angularConversion.cpp
Normal file
@ -0,0 +1,481 @@
|
||||
#include "angularConversion.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <math.h>
|
||||
#include "usersFunctions.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
angularConversion::angularConversion(): currentPosition(0),
|
||||
currentPositionIndex(0)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
angularConversion::~angularConversion(){
|
||||
|
||||
}
|
||||
|
||||
// int angularConversion::setAngularConversionPointer(angleConversionConstant *p, int *nm, int nch, int idet) {
|
||||
// if (p) {
|
||||
// angOff[idet]=p;
|
||||
// nMods[idet]=nm;
|
||||
// nCh[idet]=nch;
|
||||
// } else {
|
||||
// angOff[idet]=NULL;
|
||||
// nMods[idet]=NULL;
|
||||
// }
|
||||
|
||||
// return OK;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
float* angularConversion::convertAngles(float pos) {
|
||||
int imod;
|
||||
float *ang=new float[getTotalNumberOfChannels()];
|
||||
float enc=pos;
|
||||
angleConversionConstant *p=NULL;
|
||||
for (int ip=0; ip<getTotalNumberOfChannels(); ip++) {
|
||||
imod=ip/(getChansPerMod(0)); // always for module 0?????
|
||||
p=getAngularConversionPointer(imod);
|
||||
|
||||
if (getMoveFlag(imod)==0)
|
||||
enc=0;
|
||||
else
|
||||
enc=pos;
|
||||
|
||||
if (p)
|
||||
ang[ip]=angle(ip%(getChansPerMod()), \
|
||||
enc, \
|
||||
(*fineOffset)+(*globalOffset), \
|
||||
p->r_conversion, \
|
||||
p->center, \
|
||||
p->offset, \
|
||||
p->tilt, \
|
||||
*angDirection );
|
||||
}
|
||||
return ang;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//static!
|
||||
int angularConversion::readAngularConversion(string fname, int nmod, angleConversionConstant *angOff) {
|
||||
|
||||
ifstream infile;
|
||||
string ss;
|
||||
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "Opening file "<< fname << std::endl;
|
||||
#endif
|
||||
infile.open(fname.c_str(), ios_base::in);
|
||||
if (infile.is_open()) {
|
||||
readAngularConversion(infile, nmod, angOff);
|
||||
infile.close();
|
||||
} else {
|
||||
std::cout<< "Could not open calibration file "<< fname << std::endl;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//static
|
||||
int angularConversion::readAngularConversion( ifstream& infile, int nmod, angleConversionConstant *angOff) {
|
||||
string str;
|
||||
int mod;
|
||||
float center, ecenter;
|
||||
float r_conv, er_conv;
|
||||
float off, eoff;
|
||||
string ss;
|
||||
int interrupt=0;
|
||||
int nm=0;
|
||||
//" module %i center %E +- %E conversion %E +- %E offset %f +- %f \n"
|
||||
while (infile.good() and interrupt==0) {
|
||||
getline(infile,str);
|
||||
#ifdef VERBOSE
|
||||
cout << "** mod " << nm << " " ;
|
||||
std::cout<< str << std::endl;
|
||||
#endif
|
||||
istringstream ssstr(str);
|
||||
ssstr >> ss >> mod;
|
||||
ssstr >> ss >> center;
|
||||
ssstr >> ss >> ecenter;
|
||||
ssstr >> ss >> r_conv;
|
||||
ssstr >> ss >> er_conv;
|
||||
ssstr >> ss >> off;
|
||||
ssstr >> ss >> eoff;
|
||||
if (nm<nmod && nm>=0 ) {
|
||||
angOff[nm].center=center;
|
||||
angOff[nm].r_conversion=r_conv;
|
||||
angOff[nm].offset=off;
|
||||
angOff[nm].ecenter=ecenter;
|
||||
angOff[nm].er_conversion=er_conv;
|
||||
angOff[nm].eoffset=eoff;
|
||||
} else
|
||||
break;
|
||||
//cout << nm<<" " << angOff[nm].offset << endl;
|
||||
nm++;
|
||||
if (nm>=nmod)
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
return nm;
|
||||
}
|
||||
|
||||
//static
|
||||
int angularConversion:: writeAngularConversion(string fname, int nmod, angleConversionConstant *angOff) {
|
||||
|
||||
ofstream outfile;
|
||||
outfile.open (fname.c_str(),ios_base::out);
|
||||
if (outfile.is_open())
|
||||
{
|
||||
writeAngularConversion(outfile, nmod, angOff);
|
||||
outfile.close();
|
||||
} else {
|
||||
std::cout<< "Could not open file " << fname << "for writing"<< std::endl;
|
||||
return -1;
|
||||
}
|
||||
//" module %i center %E +- %E conversion %E +- %E offset %f +- %f \n"
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//static
|
||||
int angularConversion:: writeAngularConversion(ofstream& outfile, int nmod, angleConversionConstant *angOff) {
|
||||
|
||||
for (int imod=0; imod<nmod; imod++) {
|
||||
outfile << " module " << imod << " center "<< angOff[imod].center<<" +- "<< angOff[imod].ecenter<<" conversion "<< angOff[imod].r_conversion << " +- "<< angOff[imod].er_conversion << " offset "<< angOff[imod].offset << " +- "<< angOff[imod].eoffset << std::endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//static
|
||||
int angularConversion::resetMerging(float *mp, float *mv, float *me, int *mm, int nb) {
|
||||
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << "creating merging arrays "<< nb << endl;
|
||||
#endif
|
||||
|
||||
|
||||
for (int ibin=0; ibin<nb; ibin++) {
|
||||
mp[ibin]=0;
|
||||
mv[ibin]=0;
|
||||
me[ibin]=0;
|
||||
mm[ibin]=0;
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
//static
|
||||
int angularConversion::finalizeMerging(float *mp, float *mv, float *me, int *mm,int nb) {
|
||||
int np=0;
|
||||
for (int ibin=0; ibin<nb; ibin++) {
|
||||
if (mm[ibin]>0) {
|
||||
mp[np]=mp[ibin]/mm[ibin];
|
||||
mv[np]=mv[ibin]/mm[ibin];
|
||||
me[np]=me[ibin]/mm[ibin];
|
||||
me[np]=sqrt(me[ibin]);
|
||||
mm[np]=mm[ibin];
|
||||
np++;
|
||||
}
|
||||
}
|
||||
return np;
|
||||
}
|
||||
|
||||
//static
|
||||
int angularConversion::addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm, int nchans, float binsize,int nbins, int *badChanMask ) {
|
||||
|
||||
float binmi=-180.;
|
||||
int ibin=0;
|
||||
|
||||
if (p1==NULL)
|
||||
return 0;
|
||||
if (v1==NULL)
|
||||
return FAIL;
|
||||
|
||||
if (mp==NULL) //can be changed if we want to use a fixed bin algorithm!
|
||||
return FAIL;
|
||||
|
||||
if (mv==NULL)
|
||||
return FAIL;
|
||||
if (me==NULL)
|
||||
return FAIL;
|
||||
if (mm==NULL)
|
||||
return FAIL;
|
||||
if (nchans==0)
|
||||
return FAIL;
|
||||
|
||||
if (binsize==0)
|
||||
return FAIL;
|
||||
if (nbins==0)
|
||||
return FAIL;
|
||||
|
||||
|
||||
for (int ip=0; ip<nchans; ip++) {
|
||||
if (badChanMask) {
|
||||
if (badChanMask[ip]) {
|
||||
#ifdef VERBOSE
|
||||
cout << "channel " << ip << " is bad " << endl;
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
}
|
||||
ibin=(int)((p1[ip]-binmi)/binsize);
|
||||
|
||||
if (ibin<nbins && ibin>=0) {
|
||||
mp[ibin]+=p1[ip];
|
||||
mv[ibin]+=v1[ip];
|
||||
if (e1)
|
||||
me[ibin]+=(e1[ip]*e1[ip]);
|
||||
else
|
||||
me[ibin]+=v1[ip];
|
||||
mm[ibin]++;
|
||||
} else
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
|
||||
return OK;
|
||||
|
||||
}
|
||||
|
||||
int angularConversion::deleteMerging() {
|
||||
|
||||
if (mergingBins)
|
||||
delete [] mergingBins;
|
||||
|
||||
if (mergingCounts)
|
||||
delete [] mergingCounts;
|
||||
|
||||
if (mergingErrors)
|
||||
delete [] mergingErrors;
|
||||
|
||||
}
|
||||
|
||||
|
||||
int angularConversion::resetMerging() {
|
||||
|
||||
mergingBins=new float[nBins];
|
||||
|
||||
|
||||
mergingCounts=new float[nBins];
|
||||
|
||||
|
||||
mergingErrors=new float[nBins];
|
||||
|
||||
|
||||
mergingMultiplicity=new int[nBins];
|
||||
|
||||
return resetMerging(mergingBins, mergingCounts, mergingErrors, mergingMultiplicity);
|
||||
|
||||
}
|
||||
|
||||
int angularConversion::resetMerging(float *mp, float *mv, float *me, int *mm) {
|
||||
if (nBins)
|
||||
return resetMerging(mp, mv, me, mm,nBins);
|
||||
else
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int angularConversion::finalizeMerging() {
|
||||
int np=finalizeMerging(mergingBins, mergingCounts, mergingErrors, mergingMultiplicity);
|
||||
|
||||
if (mergingMultiplicity)
|
||||
delete [] mergingMultiplicity;
|
||||
|
||||
return np;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int angularConversion::finalizeMerging(float *mp, float *mv, float *me, int *mm) {
|
||||
|
||||
if (nBins)
|
||||
return finalizeMerging(mp, mv, me, mm, nBins);
|
||||
else
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
int angularConversion::addToMerging(float *p1, float *v1, float *e1, int *badChanMask ) {
|
||||
|
||||
return addToMerging(p1,v1,e1,mergingBins,mergingCounts, mergingErrors, mergingMultiplicity, badChanMask);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
int angularConversion::addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm, int *badChanMask ) {
|
||||
|
||||
|
||||
int del=0;
|
||||
|
||||
if (*binSize==0)
|
||||
return FAIL;
|
||||
|
||||
if (nBins==0)
|
||||
return FAIL;
|
||||
|
||||
if (p1==NULL) {
|
||||
del=1;
|
||||
p1=convertAngles();
|
||||
}
|
||||
|
||||
int ret=addToMerging(p1, v1, e1, mp, mv,me, mm,getTotalNumberOfChannels(), *binSize,nBins, badChanMask );
|
||||
|
||||
|
||||
if (del) {
|
||||
delete [] p1;
|
||||
p1=NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
sets the value of s angular conversion parameter
|
||||
\param c can be ANGULAR_DIRECTION, GLOBAL_OFFSET, FINE_OFFSET, BIN_SIZE
|
||||
\param v the value to be set
|
||||
\returns the actual value
|
||||
*/
|
||||
|
||||
float angularConversion::setAngularConversionParameter(angleConversionParameter c, float v){
|
||||
|
||||
|
||||
switch (c) {
|
||||
case ANGULAR_DIRECTION:
|
||||
if (v<0)
|
||||
*angDirection=-1;
|
||||
else
|
||||
*angDirection=1;
|
||||
return *angDirection;
|
||||
case GLOBAL_OFFSET:
|
||||
*globalOffset=v;
|
||||
return *globalOffset;
|
||||
case FINE_OFFSET:
|
||||
*fineOffset=v;
|
||||
return *fineOffset;
|
||||
case BIN_SIZE:
|
||||
if (v>0) {
|
||||
*binSize=v;
|
||||
nBins=360./(*binSize);
|
||||
}
|
||||
return *binSize;
|
||||
case MOVE_FLAG:
|
||||
if (moveFlag) {
|
||||
if (v>0)
|
||||
*moveFlag=1;
|
||||
else if (v==0)
|
||||
*moveFlag=0;
|
||||
return *moveFlag;
|
||||
}
|
||||
return -1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
returns the value of an angular conversion parameter
|
||||
\param c can be ANGULAR_DIRECTION, GLOBAL_OFFSET, FINE_OFFSET, BIN_SIZE
|
||||
\returns the actual value
|
||||
|
||||
*/
|
||||
|
||||
float angularConversion::getAngularConversionParameter(angleConversionParameter c) {
|
||||
|
||||
switch (c) {
|
||||
case ANGULAR_DIRECTION:
|
||||
return *angDirection;
|
||||
case GLOBAL_OFFSET:
|
||||
return *globalOffset;
|
||||
case FINE_OFFSET:
|
||||
return *fineOffset;
|
||||
case BIN_SIZE:
|
||||
return *binSize;
|
||||
case MOVE_FLAG:
|
||||
return *moveFlag;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int angularConversion::setAngularConversionFile(string fname) {
|
||||
if (fname=="") {
|
||||
setAngularCorrectionMask(0);
|
||||
#ifdef VERBOSE
|
||||
std::cout << "Unsetting angular conversion" << std::endl;
|
||||
#endif
|
||||
} else {
|
||||
if (fname=="default") {
|
||||
fname=string(angConvFile);
|
||||
}
|
||||
|
||||
#ifdef VERBOSE
|
||||
std::cout << "Setting angular conversion to " << fname << std:: endl;
|
||||
#endif
|
||||
if (readAngularConversionFile(fname)>=0) {
|
||||
setAngularCorrectionMask(1);
|
||||
strcpy(angConvFile,fname.c_str());
|
||||
}
|
||||
}
|
||||
return setAngularCorrectionMask();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
set positions for the acquisition
|
||||
\param nPos number of positions
|
||||
\param pos array with the encoder positions
|
||||
\returns number of positions
|
||||
*/
|
||||
int angularConversion::setPositions(int nPos, float *pos){
|
||||
if (nPos>=0)
|
||||
*numberOfPositions=nPos;
|
||||
for (int ip=0; ip<nPos; ip++)
|
||||
detPositions[ip]=pos[ip];
|
||||
|
||||
return *numberOfPositions;
|
||||
}
|
||||
/*
|
||||
get positions for the acquisition
|
||||
\param pos array which will contain the encoder positions
|
||||
\returns number of positions
|
||||
*/
|
||||
int angularConversion::getPositions(float *pos){
|
||||
if (pos) {
|
||||
for (int ip=0; ip<(*numberOfPositions); ip++)
|
||||
pos[ip]=detPositions[ip];
|
||||
}
|
||||
|
||||
return *numberOfPositions;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
316
slsDetectorSoftware/slsDetectorAnalysis/angularConversion.h
Normal file
316
slsDetectorSoftware/slsDetectorAnalysis/angularConversion.h
Normal file
@ -0,0 +1,316 @@
|
||||
|
||||
#ifndef ANGULARCONVERSION_H
|
||||
#define ANGULARCONVERSION_H
|
||||
|
||||
|
||||
#include "sls_detector_defs.h"
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
|
||||
|
||||
|
||||
//float angle(int ichan, float encoder, float totalOffset, float conv_r, float center, float offset, float tilt, int direction)
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
angular conversion constant for a module
|
||||
*/
|
||||
typedef struct {
|
||||
float center; /**< center of the module (channel at which the radius is perpendicular to the module surface) */
|
||||
float ecenter; /**< error in the center determination */
|
||||
float r_conversion; /**< detector pixel size (or strip pitch) divided by the diffractometer radius */
|
||||
float er_conversion; /**< error in the r_conversion determination */
|
||||
float offset; /**< the module offset i.e. the position of channel 0 with respect to the diffractometer 0 */
|
||||
float eoffset; /**< error in the offset determination */
|
||||
float tilt; /**< ossible tilt in the orthogonal direction (unused)*/
|
||||
float etilt; /**< error in the tilt determination */
|
||||
} angleConversionConstant;
|
||||
|
||||
|
||||
/**
|
||||
class containing the methods to set/unset the angular conversion and merge the data
|
||||
The angular conversion itself is stored in the slsDetector/multiSlsDetector class!
|
||||
|
||||
*/
|
||||
class angularConversion : public slsDetectorDefs {
|
||||
|
||||
public:
|
||||
angularConversion();
|
||||
virtual ~angularConversion();
|
||||
|
||||
|
||||
|
||||
//virtual int readAngularConversion(string fname)=0;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
reads an angular conversion file
|
||||
\param fname file to be read
|
||||
*/
|
||||
static int readAngularConversion(string fname, int nmod, angleConversionConstant *angOff);
|
||||
|
||||
/**
|
||||
|
||||
MOVE TO ANGULAR CALIBRATION?!?!??!?
|
||||
reads an angular conversion file
|
||||
\param fname file to be read
|
||||
*/
|
||||
static int readAngularConversion(ifstream& ifs, int nmod, angleConversionConstant *angOff);
|
||||
/**
|
||||
MOVE TO ANGULAR CALIBRATION?!?!??!?
|
||||
writes an angular conversion file
|
||||
\param fname file to be written
|
||||
\sa angleConversionConstant mythenDetector::writeAngularConversion
|
||||
*/
|
||||
static int writeAngularConversion(string fname, int nmod, angleConversionConstant *angOff);
|
||||
/**
|
||||
MOVE TO ANGULAR CALIBRATION?!?!??!?
|
||||
writes an angular conversion file
|
||||
\param fname file to be written
|
||||
\sa angleConversionConstant mythenDetector::writeAngularConversion
|
||||
*/
|
||||
static int writeAngularConversion(ofstream& ofs, int nmod, angleConversionConstant *angOff);
|
||||
|
||||
virtual int writeAngularConversion(string fname)=0;
|
||||
|
||||
/**
|
||||
MOVE TO ANGULAR CALIBRATION?!?!??!?
|
||||
sets the arrays of the merged data to 0. NB The array should be created with size >= 360./getBinSize();
|
||||
\param mp already merged postions
|
||||
\param mv already merged data
|
||||
\param me already merged errors (squared sum)
|
||||
\param mm multiplicity of merged arrays
|
||||
\returns OK or FAIL
|
||||
\sa mythenDetector::resetMerging
|
||||
*/
|
||||
static int resetMerging(float *mp, float *mv,float *me, int *mm, int nbins);
|
||||
int resetMerging(float *mp, float *mv,float *me, int *mm);
|
||||
int resetMerging();
|
||||
|
||||
/**
|
||||
merge dataset
|
||||
\param p1 angular positions of dataset
|
||||
\param v1 data
|
||||
\param e1 errors
|
||||
\param mp already merged postions
|
||||
\param mv already merged data
|
||||
\param me already merged errors (squared sum)
|
||||
\param mm multiplicity of merged arrays
|
||||
\param nchans number of channels
|
||||
\param binsize size of angular bin
|
||||
\param nb number of angular bins
|
||||
\param badChanMask badchannelmask (if NULL does not correct for bad channels)
|
||||
\returns OK or FAIL
|
||||
*/
|
||||
|
||||
static int addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm, int nchans, float binsize,int nb, int *badChanMask );
|
||||
|
||||
int addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm, int *badChanMask);
|
||||
|
||||
int addToMerging(float *p1, float *v1, float *e1,int *badChanMask);
|
||||
|
||||
/**
|
||||
MOVE TO ANGULAR CALIBRATION?!?!??!?
|
||||
calculates the "final" positions, data value and errors for the emrged data
|
||||
\param mp already merged postions
|
||||
\param mv already merged data
|
||||
\param me already merged errors (squared sum)
|
||||
\param mm multiplicity of merged arrays
|
||||
\returns FAIL or the number of non empty bins (i.e. points belonging to the pattern)
|
||||
\sa mythenDetector::finalizeMerging
|
||||
*/
|
||||
|
||||
static int finalizeMerging(float *mp, float *mv,float *me, int *mm, int nb);
|
||||
|
||||
int finalizeMerging(float *mp, float *mv,float *me, int *mm);
|
||||
int finalizeMerging();
|
||||
|
||||
|
||||
/**
|
||||
pure virtual function
|
||||
set detector global offset
|
||||
\sa mythenDetector::setGlobalOffset
|
||||
*/
|
||||
float setGlobalOffset(float f){return setAngularConversionParameter(GLOBAL_OFFSET,f);};
|
||||
|
||||
/**
|
||||
pure virtual function
|
||||
set detector fine offset
|
||||
\sa mythenDetector::setFineOffset
|
||||
*/
|
||||
float setFineOffset(float f){return setAngularConversionParameter(FINE_OFFSET,f);};
|
||||
/**
|
||||
pure virtual function
|
||||
get detector fine offset
|
||||
\sa mythenDetector::getFineOffset
|
||||
*/
|
||||
float getFineOffset(){return getAngularConversionParameter(FINE_OFFSET);};
|
||||
|
||||
/**
|
||||
pure virtual function
|
||||
get detector global offset
|
||||
\sa mythenDetector::getGlobalOffset
|
||||
*/
|
||||
float getGlobalOffset(){return getAngularConversionParameter(GLOBAL_OFFSET);};
|
||||
|
||||
/**
|
||||
|
||||
set detector bin size used for merging (approx angular resolution)
|
||||
\param bs bin size in degrees
|
||||
\returns current bin size
|
||||
\sa mythenDetector::setBinSize
|
||||
*/
|
||||
float setBinSize(float bs){return setAngularConversionParameter(BIN_SIZE,bs);};
|
||||
|
||||
/**
|
||||
return detector bin size used for merging (approx angular resolution)
|
||||
\sa mythenDetector::getBinSize
|
||||
*/
|
||||
float getBinSize() {return getAngularConversionParameter(BIN_SIZE);};
|
||||
|
||||
|
||||
|
||||
int getAngularDirection(){return (int)getAngularConversionParameter(ANGULAR_DIRECTION);};
|
||||
|
||||
|
||||
int setAngularDirection(int d){return (int)setAngularConversionParameter(ANGULAR_DIRECTION, (float)d);};
|
||||
|
||||
|
||||
int getNumberOfAngularBins(){return nBins;};
|
||||
|
||||
/**
|
||||
get angular conversion
|
||||
\param direction reference to diffractometer direction
|
||||
\param angconv array that will be filled with the angular conversion constants
|
||||
\returns 0 if angular conversion disabled, >0 otherwise
|
||||
*/
|
||||
virtual int getAngularConversion(int &direction, angleConversionConstant *angconv=NULL)=0;
|
||||
|
||||
float setAngularConversionParameter(angleConversionParameter c, float v);
|
||||
|
||||
float getAngularConversionParameter(angleConversionParameter c);
|
||||
|
||||
|
||||
virtual int getTotalNumberOfChannels()=0;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
set positions for the acquisition
|
||||
\param nPos number of positions
|
||||
\param pos array with the encoder positions
|
||||
\returns number of positions
|
||||
*/
|
||||
virtual int setPositions(int nPos, float *pos);
|
||||
/**
|
||||
get positions for the acquisition
|
||||
\param pos array which will contain the encoder positions
|
||||
\returns number of positions
|
||||
*/
|
||||
virtual int getPositions(float *pos=NULL);
|
||||
|
||||
int deleteMerging();
|
||||
|
||||
float *getMergedPositions(){return mergingBins;};
|
||||
float *getMergedCounts(){return mergingCounts;};
|
||||
float *getMergedErrors(){return mergingErrors;};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
sets the angular conversion file
|
||||
\param fname file to read
|
||||
\returns angular conversion flag
|
||||
*/
|
||||
|
||||
int setAngularConversionFile(string fname);
|
||||
|
||||
|
||||
/**
|
||||
returns the angular conversion file
|
||||
*/
|
||||
string getAngularConversionFile(){if (setAngularCorrectionMask()) return string(angConvFile); else return string("none");};
|
||||
|
||||
|
||||
virtual int readAngularConversionFile(string fname="")=0;
|
||||
|
||||
|
||||
// int setAngularConversionPointer(angleConversionConstant *p, int *nm, int nch, int idet=0);
|
||||
|
||||
|
||||
|
||||
|
||||
virtual int getNMods()=0;
|
||||
virtual int getChansPerMod(int imod=0)=0;
|
||||
virtual angleConversionConstant *getAngularConversionPointer(int imod=0)=0;
|
||||
|
||||
float* convertAngles(float pos);
|
||||
|
||||
float *convertAngles(){return convertAngles(currentPosition);};
|
||||
|
||||
virtual int getMoveFlag(int imod)=0;
|
||||
|
||||
int getCurrentPositionIndex() {return currentPositionIndex;};
|
||||
int getNumberOfPositions() {return *numberOfPositions;};
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
int *numberOfPositions;
|
||||
float *detPositions;
|
||||
|
||||
char *angConvFile;
|
||||
|
||||
float *binSize;
|
||||
float *fineOffset;
|
||||
float *globalOffset;
|
||||
int *angDirection;
|
||||
int *moveFlag;
|
||||
|
||||
|
||||
int nBins;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
current position of the detector
|
||||
*/
|
||||
float currentPosition;
|
||||
|
||||
/**
|
||||
current position index of the detector
|
||||
*/
|
||||
int currentPositionIndex;
|
||||
|
||||
virtual int setAngularCorrectionMask(int i=-1)=0;
|
||||
|
||||
|
||||
private:
|
||||
/** merging bins */
|
||||
float *mergingBins;
|
||||
|
||||
/** merging counts */
|
||||
float *mergingCounts;
|
||||
|
||||
/** merging errors */
|
||||
float *mergingErrors;
|
||||
|
||||
/** merging multiplicity */
|
||||
int *mergingMultiplicity;
|
||||
|
||||
/** pointer to the angular conversion constants for the (multi)detector class*/
|
||||
|
||||
/* angleConversionConstant *angOff[MAXDET]; */
|
||||
/* int *nMods[MAXDET]; */
|
||||
/* int nCh[MAXDET]; */
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
32
slsDetectorSoftware/slsDetectorAnalysis/detectorData.h
Normal file
32
slsDetectorSoftware/slsDetectorAnalysis/detectorData.h
Normal file
@ -0,0 +1,32 @@
|
||||
|
||||
#include <unistd.h>
|
||||
#include <cstring>
|
||||
|
||||
/**
|
||||
data structure to hold the detector data after postprocessing (e.g. to plot, store in a root tree etc.)
|
||||
*/
|
||||
class detectorData {
|
||||
public:
|
||||
/** The constructor
|
||||
\param val pointer to the data
|
||||
\param err pointer to errors
|
||||
\param ang pointer to the angles
|
||||
\param f_ind file index
|
||||
\param fname file name to which the data are saved
|
||||
\param np number of points defaults to the number of detector channels
|
||||
*/
|
||||
detectorData(float *val=NULL, float *err=NULL, float *ang=NULL, float p_ind=-1, const char *fname="", int np=-1) : values(val), errors(err), angles(ang), progressIndex(p_ind), npoints(np){strcpy(fileName,fname);};
|
||||
/**
|
||||
the destructor
|
||||
deletes also the arrays pointing to data/errors/angles if not NULL
|
||||
*/
|
||||
~detectorData() {if (values) delete [] values; if (errors) delete [] errors; if (angles) delete [] angles;};
|
||||
//private:
|
||||
float *values; /**< pointer to the data */
|
||||
float *errors; /**< pointer to the errors */
|
||||
float *angles;/**< pointer to the angles */
|
||||
float progressIndex;/**< file index */
|
||||
char fileName[1000];/**< file name */
|
||||
int npoints;/**< number of points */
|
||||
};
|
||||
|
@ -0,0 +1,28 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Class List</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li id="current"><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="current"><a href="annotated.html"><span>Class List</span></a></li>
|
||||
<li><a href="functions.html"><span>Class Members</span></a></li>
|
||||
</ul></div>
|
||||
<h1>Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
|
||||
<tr><td class="indexkey"><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td class="indexvalue"></td></tr>
|
||||
<tr><td class="indexkey"><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td class="indexvalue">Energy calibration functions </td></tr>
|
||||
</table>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,55 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Member List</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li id="current"><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="annotated.html"><span>Class List</span></a></li>
|
||||
<li><a href="functions.html"><span>Class Members</span></a></li>
|
||||
</ul></div>
|
||||
<h1>energyCalibration Member List</h1>This is the complete list of members for <a class="el" href="classenergyCalibration.html">energyCalibration</a>, including all inherited members.<p><table>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#77b954cd513271d2cfafee6033435584">ampl</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#aa11f256a8b0a94c28a98d068013b327">bg_offset</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#9676e5cc2757c723c2262d641fb4b8b4">bg_slope</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#378daeddde40b6127ee6ed595506928c">calibrate</a>(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff, int integral=1)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#6f5ee6771522a31e4fe1eca143e2aa9b">calibrateScurves</a>(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [inline]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#092637f656c0b88d57797e3ebd0f3e58">calibrateSpectra</a>(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [inline]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#ce0be11dcc8418db3c7c2b139a015c96">cs_flag</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#ca1efedbfea0ad5c9ea2d794e3fb368d">cs_slope</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#16f0658d2b526f52784057b2166efd22">energyCalibration</a>()</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#e979386a3f787ef706f4a9ec5bf41d7d">fit_max</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#262f574732186cdd8d3a11344d03d0bb">fit_min</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#fe1c6dc5f56d12fe06569f401da19729">fitFunction</a>(TF1 *fun, TH1 *h1, Double_t *mypar, Double_t *emypar)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#0dcd8e06e31f7b70488a012db12b2bf8">fitSCurve</a>(TH1 *h1, Double_t *mypar, Double_t *emypar)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#7d22b28cd2fad3d334f15f3d6dc7975a">fitSpectrum</a>(TH1 *h1, Double_t *mypar, Double_t *emypar)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#b99d770f1c9af68d591ed20847813ad1">flex</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#57706a328324c25dd9f8ba6d1486e4ce">fscurve</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#2ee734ab28b78dc5786a7ba430f8baa5">fspectrum</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#e9b3307bf858331241871bde42fdd24e">funcs</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#bfb02327a6897bd97525c01697a1ba4f">getFitRange</a>(Double_t &mi, Double_t &ma)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [inline]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#fc7411b7a3191748dfcc90f86b823bf4">getStartParameters</a>(Double_t *par)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#3e84328c11772b6263224340ec924e37">initFitFunction</a>(TF1 *fun, TH1 *h1)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#c7f46f2d051f28211681e851f99d3fc4">linearCalibration</a>(int nscan, Double_t *en, Double_t *een, Double_t *fl, Double_t *efl, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#4461206397e2442c92be9151ee231ec5">noise</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#4edfb157df3624be677177dec0f9555b">plot_flag</a></td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#e2809b419799e8b199944f185d4ebab8">setChargeSharing</a>(int p=-1)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#695cef5428a833d515172d987774f67b">setFitRange</a>(Double_t mi, Double_t ma)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [inline]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#3d9af0857f7a68b7e4519917ea97e6be">setPlotFlag</a>(int p=-1)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [inline]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#7dbf1676b30ffe90c5aa917f1b2b77ee">setScanSign</a>(int s=0)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td><code> [inline]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#ba156f5290f7b404d7b8ea735fd7e7bf">setStartParameters</a>(Double_t *par)</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibration.html#3bae2b9c26893daa8f583758509c844f">~energyCalibration</a>()</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a></td><td></td></tr>
|
||||
</table><hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,38 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Member List</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li id="current"><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="annotated.html"><span>Class List</span></a></li>
|
||||
<li><a href="functions.html"><span>Class Members</span></a></li>
|
||||
</ul></div>
|
||||
<h1>energyCalibrationFunctions Member List</h1>This is the complete list of members for <a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a>, including all inherited members.<p><table>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#8c17162b89f3b2e642004e7c88a22ac2">energyCalibrationFunctions</a>(int s=-1)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td><code> [inline]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#a5fbe9da48bc2ef90b699e06ea8c5111">erfFuncFluo</a>(Double_t *x, Double_t *par)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#2da1e3b9a10d23233256f8c2234f2457">erfFunction</a>(Double_t *x, Double_t *par)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#8d1b3d0f8b30423dad56d8ce5323a4a8">erfFunctionChargeSharing</a>(Double_t *x, Double_t *par)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#e9582e5c46d27ad25d6139d0386698f7">gaussChargeSharing</a>(Double_t *x, Double_t *par)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#7d9a7b8d0c8ff69638a5fbb9f4c04b90">kth_smallest</a>(int *a, int n, int k)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td><code> [static]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#37f557bacb75213073c8d421cc1240f4">median</a>(float *x, int n)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td><code> [static]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#a3ab0e7c3c862fb51dfda78f1b09a55c">quick_select</a>(int arr[], int n)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td><code> [static]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#e220482622e88a46b12498b0e4d8113a">scurve</a>(Double_t *x, Double_t *par)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#4eba39623b518d67a63192970a78f530">scurveFluo</a>(Double_t *x, Double_t *par)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#716759a1ae09ea3c841f824af3ece415">setScanSign</a>(int s=0)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td><code> [inline]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#4fc7c435169b5bf4672cf654270097d0">sign</a></td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td><code> [private]</code></td></tr>
|
||||
<tr class="memlist"><td><a class="el" href="classenergyCalibrationFunctions.html#015eb05dc34b77642ab2a2a9f126f170">spectrum</a>(Double_t *x, Double_t *par)</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td><td></td></tr>
|
||||
</table><hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,428 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>energyCalibrationFunctions Class Reference</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li id="current"><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="annotated.html"><span>Class List</span></a></li>
|
||||
<li><a href="functions.html"><span>Class Members</span></a></li>
|
||||
</ul></div>
|
||||
<h1>energyCalibrationFunctions Class Reference</h1><!-- doxytag: class="energyCalibrationFunctions" -->Energy calibration functions.
|
||||
<a href="#_details">More...</a>
|
||||
<p>
|
||||
<code>#include <<a class="el" href="energyCalibration_8h-source.html">energyCalibration.h</a>></code>
|
||||
<p>
|
||||
<a href="classenergyCalibrationFunctions-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr><td></td></tr>
|
||||
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#8c17162b89f3b2e642004e7c88a22ac2">energyCalibrationFunctions</a> (int s=-1)</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#716759a1ae09ea3c841f824af3ece415">setScanSign</a> (int s=0)</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">Double_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#e9582e5c46d27ad25d6139d0386698f7">gaussChargeSharing</a> (Double_t *x, Double_t *par)</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">Double_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#2da1e3b9a10d23233256f8c2234f2457">erfFunction</a> (Double_t *x, Double_t *par)</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">Double_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#8d1b3d0f8b30423dad56d8ce5323a4a8">erfFunctionChargeSharing</a> (Double_t *x, Double_t *par)</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">Double_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#a5fbe9da48bc2ef90b699e06ea8c5111">erfFuncFluo</a> (Double_t *x, Double_t *par)</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">Double_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#015eb05dc34b77642ab2a2a9f126f170">spectrum</a> (Double_t *x, Double_t *par)</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">Double_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#e220482622e88a46b12498b0e4d8113a">scurve</a> (Double_t *x, Double_t *par)</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">Double_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#4eba39623b518d67a63192970a78f530">scurveFluo</a> (Double_t *x, Double_t *par)</td></tr>
|
||||
|
||||
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">static float </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#37f557bacb75213073c8d421cc1240f4">median</a> (float *x, int n)</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#a3ab0e7c3c862fb51dfda78f1b09a55c">quick_select</a> (int arr[], int n)</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#7d9a7b8d0c8ff69638a5fbb9f4c04b90">kth_smallest</a> (int *a, int n, int k)</td></tr>
|
||||
|
||||
<tr><td colspan="2"><br><h2>Private Attributes</h2></td></tr>
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html#4fc7c435169b5bf4672cf654270097d0">sign</a></td></tr>
|
||||
|
||||
</table>
|
||||
<hr><a name="_details"></a><h2>Detailed Description</h2>
|
||||
Energy calibration functions.
|
||||
<p>
|
||||
class containing all the possible energy calibration functions (scurves with and without charge sharing, gaussian spectrum with and without charge sharing, possibility of chosing the sign of the X-axis)
|
||||
<p>
|
||||
<hr><h2>Constructor & Destructor Documentation</h2>
|
||||
<a class="anchor" name="8c17162b89f3b2e642004e7c88a22ac2"></a><!-- doxytag: member="energyCalibrationFunctions::energyCalibrationFunctions" ref="8c17162b89f3b2e642004e7c88a22ac2" args="(int s=-1)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">energyCalibrationFunctions::energyCalibrationFunctions </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"> <em>s</em> = <code>-1</code> </td>
|
||||
<td> ) </td>
|
||||
<td width="100%"><code> [inline]</code></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
|
||||
</div>
|
||||
</div><p>
|
||||
<hr><h2>Member Function Documentation</h2>
|
||||
<a class="anchor" name="a5fbe9da48bc2ef90b699e06ea8c5111"></a><!-- doxytag: member="energyCalibrationFunctions::erfFuncFluo" ref="a5fbe9da48bc2ef90b699e06ea8c5111" args="(Double_t *x, Double_t *par)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Double_t energyCalibrationFunctions::erfFuncFluo </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>x</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>par</em></td><td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td><td width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
Double Erf function with charge sharing slope par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point of the first energy par[3] is the RMS of the first energy par[4] is the amplitude of the first energy par[5] is the angual coefficient of the charge sharing slope of the first energy (scales with par[3]) par[6] is the inflection point of the second energy par[7] is the RMS of the second energy par[8] is the amplitude of the second energy par[9] is the angual coefficient of the charge sharing slope of the second energy (scales with par[8])
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="2da1e3b9a10d23233256f8c2234f2457"></a><!-- doxytag: member="energyCalibrationFunctions::erfFunction" ref="2da1e3b9a10d23233256f8c2234f2457" args="(Double_t *x, Double_t *par)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Double_t energyCalibrationFunctions::erfFunction </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>x</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>par</em></td><td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td><td width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
Basic erf function par[0] is the inflection point par[1] is the RMS par[2] is the amplitude
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="8d1b3d0f8b30423dad56d8ce5323a4a8"></a><!-- doxytag: member="energyCalibrationFunctions::erfFunctionChargeSharing" ref="8d1b3d0f8b30423dad56d8ce5323a4a8" args="(Double_t *x, Double_t *par)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Double_t energyCalibrationFunctions::erfFunctionChargeSharing </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>x</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>par</em></td><td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td><td width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
Erf function with charge sharing slope par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point par[3] is the RMS par[4] is the amplitude par[5] is the angual coefficient of the charge sharing slope (scales with par[3])
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="e9582e5c46d27ad25d6139d0386698f7"></a><!-- doxytag: member="energyCalibrationFunctions::gaussChargeSharing" ref="e9582e5c46d27ad25d6139d0386698f7" args="(Double_t *x, Double_t *par)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Double_t energyCalibrationFunctions::gaussChargeSharing </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>x</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>par</em></td><td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td><td width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
Gaussian Function with charge sharing pedestal par[0] is the absolute height of the background pedestal par[1] is the slope of the background pedestal par[2] is the gaussian peak position par[3] is the RMS of the gaussian (and of the pedestal) par[4] is the height of the function par[5] is the fractional height of the charge sharing pedestal (scales with par[3])
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="7d9a7b8d0c8ff69638a5fbb9f4c04b90"></a><!-- doxytag: member="energyCalibrationFunctions::kth_smallest" ref="7d9a7b8d0c8ff69638a5fbb9f4c04b90" args="(int *a, int n, int k)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">static int energyCalibrationFunctions::kth_smallest </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">int * </td>
|
||||
<td class="paramname"> <em>a</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"> <em>n</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"> <em>k</em></td><td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td><td width="100%"><code> [static]</code></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
Calculates the median of an array of n elements (swaps the arrays!)
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="37f557bacb75213073c8d421cc1240f4"></a><!-- doxytag: member="energyCalibrationFunctions::median" ref="37f557bacb75213073c8d421cc1240f4" args="(float *x, int n)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">static float energyCalibrationFunctions::median </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">float * </td>
|
||||
<td class="paramname"> <em>x</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"> <em>n</em></td><td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td><td width="100%"><code> [static]</code></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
Calculates the median of an array of n elements
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="a3ab0e7c3c862fb51dfda78f1b09a55c"></a><!-- doxytag: member="energyCalibrationFunctions::quick_select" ref="a3ab0e7c3c862fb51dfda78f1b09a55c" args="(int arr[], int n)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">static int energyCalibrationFunctions::quick_select </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"> <em>arr</em>[], </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"> <em>n</em></td><td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td><td width="100%"><code> [static]</code></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
Calculates the median of an array of n elements (swaps the arrays!)
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="e220482622e88a46b12498b0e4d8113a"></a><!-- doxytag: member="energyCalibrationFunctions::scurve" ref="e220482622e88a46b12498b0e4d8113a" args="(Double_t *x, Double_t *par)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Double_t energyCalibrationFunctions::scurve </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>x</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>par</em></td><td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td><td width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
Erf function with charge sharing slope with the correct scan sign par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point par[3] is the RMS par[4] is the amplitude par[5] is the angual coefficient of the charge sharing slope (scales with par[3])
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="4eba39623b518d67a63192970a78f530"></a><!-- doxytag: member="energyCalibrationFunctions::scurveFluo" ref="4eba39623b518d67a63192970a78f530" args="(Double_t *x, Double_t *par)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Double_t energyCalibrationFunctions::scurveFluo </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>x</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>par</em></td><td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td><td width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
Double Erf function with charge sharing slope par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point of the first energy par[3] is the RMS of the first energy par[4] is the amplitude of the first energy par[5] is the angual coefficient of the charge sharing slope of the first energy (scales with par[3]) par[6] is the inflection point of the second energy par[7] is the RMS of the second energy par[8] is the amplitude of the second energy par[9] is the angual coefficient of the charge sharing slope of the second energy (scales with par[8])
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="716759a1ae09ea3c841f824af3ece415"></a><!-- doxytag: member="energyCalibrationFunctions::setScanSign" ref="716759a1ae09ea3c841f824af3ece415" args="(int s=0)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">int energyCalibrationFunctions::setScanSign </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">int </td>
|
||||
<td class="paramname"> <em>s</em> = <code>0</code> </td>
|
||||
<td> ) </td>
|
||||
<td width="100%"><code> [inline]</code></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
sets scan sign <dl compact><dt><b>Parameters:</b></dt><dd>
|
||||
<table border="0" cellspacing="2" cellpadding="0">
|
||||
<tr><td valign="top"></td><td valign="top"><em>s</em> </td><td>can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) otherwise gets </td></tr>
|
||||
</table>
|
||||
</dl>
|
||||
<dl compact><dt><b>Returns:</b></dt><dd>current scan sign can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) </dd></dl>
|
||||
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="015eb05dc34b77642ab2a2a9f126f170"></a><!-- doxytag: member="energyCalibrationFunctions::spectrum" ref="015eb05dc34b77642ab2a2a9f126f170" args="(Double_t *x, Double_t *par)" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">Double_t energyCalibrationFunctions::spectrum </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>x</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">Double_t * </td>
|
||||
<td class="paramname"> <em>par</em></td><td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td><td width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
static function Gaussian with charge sharing pedestal with the correct scan sign par[0] is the absolute height of the background pedestal par[1] is the fractional height of the charge sharing pedestal (scales with par[3] par[2] is the gaussian peak position par[3] is the RMS of the gaussian (and of the pedestal) par[4] is the height of the function
|
||||
</div>
|
||||
</div><p>
|
||||
<hr><h2>Member Data Documentation</h2>
|
||||
<a class="anchor" name="4fc7c435169b5bf4672cf654270097d0"></a><!-- doxytag: member="energyCalibrationFunctions::sign" ref="4fc7c435169b5bf4672cf654270097d0" args="" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">int <a class="el" href="classenergyCalibrationFunctions.html#4fc7c435169b5bf4672cf654270097d0">energyCalibrationFunctions::sign</a><code> [private]</code> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
|
||||
</div>
|
||||
</div><p>
|
||||
<hr>The documentation for this class was generated from the following file:<ul>
|
||||
<li><a class="el" href="energyCalibration_8h-source.html">energyCalibration.h</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,69 @@
|
||||
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
|
||||
<title>Alphabetical List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javaScript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body onload='searchBox.OnSelectItem(0);'>
|
||||
<!-- Generated by Doxygen 1.6.0 -->
|
||||
<script type="text/javascript"><!--
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
--></script>
|
||||
<div class="navigation" id="top">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<img id="MSearchSelect" src="search/search.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="annotated.html"><span>Class List</span></a></li>
|
||||
<li><a href="functions.html"><span>Class Members</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contents">
|
||||
<h1>Class Index</h1><div class="qindex"><a class="qindex" href="#letter_E">E</a></div>
|
||||
<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr><td><a name="letter_E"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah"> E </div></td></tr></table>
|
||||
</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a> </td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a> </td></tr></table><div class="qindex"><a class="qindex" href="#letter_E">E</a></div>
|
||||
</div>
|
||||
<!--- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<hr size="1"/><address style="text-align: right;"><small>Generated on Tue Mar 20 17:21:14 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.0 </small></address>
|
||||
</body>
|
||||
</html>
|
358
slsDetectorSoftware/slsDetectorAnalysis/docs/html/doxygen.css
Normal file
358
slsDetectorSoftware/slsDetectorAnalysis/docs/html/doxygen.css
Normal file
@ -0,0 +1,358 @@
|
||||
BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
|
||||
font-family: Geneva, Arial, Helvetica, sans-serif;
|
||||
}
|
||||
BODY,TD {
|
||||
font-size: 90%;
|
||||
}
|
||||
H1 {
|
||||
text-align: center;
|
||||
font-size: 160%;
|
||||
}
|
||||
H2 {
|
||||
font-size: 120%;
|
||||
}
|
||||
H3 {
|
||||
font-size: 100%;
|
||||
}
|
||||
CAPTION { font-weight: bold }
|
||||
DIV.qindex {
|
||||
width: 100%;
|
||||
background-color: #e8eef2;
|
||||
border: 1px solid #84b0c7;
|
||||
text-align: center;
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
line-height: 140%;
|
||||
}
|
||||
DIV.nav {
|
||||
width: 100%;
|
||||
background-color: #e8eef2;
|
||||
border: 1px solid #84b0c7;
|
||||
text-align: center;
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
line-height: 140%;
|
||||
}
|
||||
DIV.navtab {
|
||||
background-color: #e8eef2;
|
||||
border: 1px solid #84b0c7;
|
||||
text-align: center;
|
||||
margin: 2px;
|
||||
margin-right: 15px;
|
||||
padding: 2px;
|
||||
}
|
||||
TD.navtab {
|
||||
font-size: 70%;
|
||||
}
|
||||
A.qindex {
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
color: #1A419D;
|
||||
}
|
||||
A.qindex:visited {
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
color: #1A419D
|
||||
}
|
||||
A.qindex:hover {
|
||||
text-decoration: none;
|
||||
background-color: #ddddff;
|
||||
}
|
||||
A.qindexHL {
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
background-color: #6666cc;
|
||||
color: #ffffff;
|
||||
border: 1px double #9295C2;
|
||||
}
|
||||
A.qindexHL:hover {
|
||||
text-decoration: none;
|
||||
background-color: #6666cc;
|
||||
color: #ffffff;
|
||||
}
|
||||
A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
|
||||
A.el { text-decoration: none; font-weight: bold }
|
||||
A.elRef { font-weight: bold }
|
||||
A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
|
||||
A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
|
||||
A.codeRef:link { font-weight: normal; color: #0000FF}
|
||||
A.codeRef:visited { font-weight: normal; color: #0000FF}
|
||||
A:hover { text-decoration: none; background-color: #f2f2ff }
|
||||
DL.el { margin-left: -1cm }
|
||||
.fragment {
|
||||
font-family: monospace, fixed;
|
||||
font-size: 95%;
|
||||
}
|
||||
PRE.fragment {
|
||||
border: 1px solid #CCCCCC;
|
||||
background-color: #f5f5f5;
|
||||
margin-top: 4px;
|
||||
margin-bottom: 4px;
|
||||
margin-left: 2px;
|
||||
margin-right: 8px;
|
||||
padding-left: 6px;
|
||||
padding-right: 6px;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
|
||||
|
||||
DIV.groupHeader {
|
||||
margin-left: 16px;
|
||||
margin-top: 12px;
|
||||
margin-bottom: 6px;
|
||||
font-weight: bold;
|
||||
}
|
||||
DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
|
||||
BODY {
|
||||
background: white;
|
||||
color: black;
|
||||
margin-right: 20px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
TD.indexkey {
|
||||
background-color: #e8eef2;
|
||||
font-weight: bold;
|
||||
padding-right : 10px;
|
||||
padding-top : 2px;
|
||||
padding-left : 10px;
|
||||
padding-bottom : 2px;
|
||||
margin-left : 0px;
|
||||
margin-right : 0px;
|
||||
margin-top : 2px;
|
||||
margin-bottom : 2px;
|
||||
border: 1px solid #CCCCCC;
|
||||
}
|
||||
TD.indexvalue {
|
||||
background-color: #e8eef2;
|
||||
font-style: italic;
|
||||
padding-right : 10px;
|
||||
padding-top : 2px;
|
||||
padding-left : 10px;
|
||||
padding-bottom : 2px;
|
||||
margin-left : 0px;
|
||||
margin-right : 0px;
|
||||
margin-top : 2px;
|
||||
margin-bottom : 2px;
|
||||
border: 1px solid #CCCCCC;
|
||||
}
|
||||
TR.memlist {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
P.formulaDsp { text-align: center; }
|
||||
IMG.formulaDsp { }
|
||||
IMG.formulaInl { vertical-align: middle; }
|
||||
SPAN.keyword { color: #008000 }
|
||||
SPAN.keywordtype { color: #604020 }
|
||||
SPAN.keywordflow { color: #e08000 }
|
||||
SPAN.comment { color: #800000 }
|
||||
SPAN.preprocessor { color: #806020 }
|
||||
SPAN.stringliteral { color: #002080 }
|
||||
SPAN.charliteral { color: #008080 }
|
||||
.mdescLeft {
|
||||
padding: 0px 8px 4px 8px;
|
||||
font-size: 80%;
|
||||
font-style: italic;
|
||||
background-color: #FAFAFA;
|
||||
border-top: 1px none #E0E0E0;
|
||||
border-right: 1px none #E0E0E0;
|
||||
border-bottom: 1px none #E0E0E0;
|
||||
border-left: 1px none #E0E0E0;
|
||||
margin: 0px;
|
||||
}
|
||||
.mdescRight {
|
||||
padding: 0px 8px 4px 8px;
|
||||
font-size: 80%;
|
||||
font-style: italic;
|
||||
background-color: #FAFAFA;
|
||||
border-top: 1px none #E0E0E0;
|
||||
border-right: 1px none #E0E0E0;
|
||||
border-bottom: 1px none #E0E0E0;
|
||||
border-left: 1px none #E0E0E0;
|
||||
margin: 0px;
|
||||
}
|
||||
.memItemLeft {
|
||||
padding: 1px 0px 0px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
border-top-color: #E0E0E0;
|
||||
border-right-color: #E0E0E0;
|
||||
border-bottom-color: #E0E0E0;
|
||||
border-left-color: #E0E0E0;
|
||||
border-top-style: solid;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-left-style: none;
|
||||
background-color: #FAFAFA;
|
||||
font-size: 80%;
|
||||
}
|
||||
.memItemRight {
|
||||
padding: 1px 8px 0px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
border-top-color: #E0E0E0;
|
||||
border-right-color: #E0E0E0;
|
||||
border-bottom-color: #E0E0E0;
|
||||
border-left-color: #E0E0E0;
|
||||
border-top-style: solid;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-left-style: none;
|
||||
background-color: #FAFAFA;
|
||||
font-size: 80%;
|
||||
}
|
||||
.memTemplItemLeft {
|
||||
padding: 1px 0px 0px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
border-top-color: #E0E0E0;
|
||||
border-right-color: #E0E0E0;
|
||||
border-bottom-color: #E0E0E0;
|
||||
border-left-color: #E0E0E0;
|
||||
border-top-style: none;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-left-style: none;
|
||||
background-color: #FAFAFA;
|
||||
font-size: 80%;
|
||||
}
|
||||
.memTemplItemRight {
|
||||
padding: 1px 8px 0px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
border-top-color: #E0E0E0;
|
||||
border-right-color: #E0E0E0;
|
||||
border-bottom-color: #E0E0E0;
|
||||
border-left-color: #E0E0E0;
|
||||
border-top-style: none;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-left-style: none;
|
||||
background-color: #FAFAFA;
|
||||
font-size: 80%;
|
||||
}
|
||||
.memTemplParams {
|
||||
padding: 1px 0px 0px 8px;
|
||||
margin: 4px;
|
||||
border-top-width: 1px;
|
||||
border-right-width: 1px;
|
||||
border-bottom-width: 1px;
|
||||
border-left-width: 1px;
|
||||
border-top-color: #E0E0E0;
|
||||
border-right-color: #E0E0E0;
|
||||
border-bottom-color: #E0E0E0;
|
||||
border-left-color: #E0E0E0;
|
||||
border-top-style: solid;
|
||||
border-right-style: none;
|
||||
border-bottom-style: none;
|
||||
border-left-style: none;
|
||||
color: #606060;
|
||||
background-color: #FAFAFA;
|
||||
font-size: 80%;
|
||||
}
|
||||
.search { color: #003399;
|
||||
font-weight: bold;
|
||||
}
|
||||
FORM.search {
|
||||
margin-bottom: 0px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
INPUT.search { font-size: 75%;
|
||||
color: #000080;
|
||||
font-weight: normal;
|
||||
background-color: #e8eef2;
|
||||
}
|
||||
TD.tiny { font-size: 75%;
|
||||
}
|
||||
a {
|
||||
color: #1A41A8;
|
||||
}
|
||||
a:visited {
|
||||
color: #2A3798;
|
||||
}
|
||||
.dirtab { padding: 4px;
|
||||
border-collapse: collapse;
|
||||
border: 1px solid #84b0c7;
|
||||
}
|
||||
TH.dirtab { background: #e8eef2;
|
||||
font-weight: bold;
|
||||
}
|
||||
HR { height: 1px;
|
||||
border: none;
|
||||
border-top: 1px solid black;
|
||||
}
|
||||
|
||||
/* Style for detailed member documentation */
|
||||
.memtemplate {
|
||||
font-size: 80%;
|
||||
color: #606060;
|
||||
font-weight: normal;
|
||||
}
|
||||
.memnav {
|
||||
background-color: #e8eef2;
|
||||
border: 1px solid #84b0c7;
|
||||
text-align: center;
|
||||
margin: 2px;
|
||||
margin-right: 15px;
|
||||
padding: 2px;
|
||||
}
|
||||
.memitem {
|
||||
padding: 4px;
|
||||
background-color: #eef3f5;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: #dedeee;
|
||||
-moz-border-radius: 8px 8px 8px 8px;
|
||||
}
|
||||
.memname {
|
||||
white-space: nowrap;
|
||||
font-weight: bold;
|
||||
}
|
||||
.memdoc{
|
||||
padding-left: 10px;
|
||||
}
|
||||
.memproto {
|
||||
background-color: #d5e1e8;
|
||||
width: 100%;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: #84b0c7;
|
||||
font-weight: bold;
|
||||
-moz-border-radius: 8px 8px 8px 8px;
|
||||
}
|
||||
.paramkey {
|
||||
text-align: right;
|
||||
}
|
||||
.paramtype {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.paramname {
|
||||
color: #602020;
|
||||
font-style: italic;
|
||||
}
|
||||
/* End Styling for detailed member documentation */
|
||||
|
||||
/* for the tree view */
|
||||
.ftvtree {
|
||||
font-family: sans-serif;
|
||||
margin:0.5em;
|
||||
}
|
||||
.directory { font-size: 9pt; font-weight: bold; }
|
||||
.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
|
||||
.directory > h3 { margin-top: 0; }
|
||||
.directory p { margin: 0px; white-space: nowrap; }
|
||||
.directory div { display: none; margin: 0px; }
|
||||
.directory img { vertical-align: -30%; }
|
||||
|
BIN
slsDetectorSoftware/slsDetectorAnalysis/docs/html/doxygen.png
Normal file
BIN
slsDetectorSoftware/slsDetectorAnalysis/docs/html/doxygen.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
@ -0,0 +1,164 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>energyCalibration.h Source File</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li id="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>File Members</span></a></li>
|
||||
</ul></div>
|
||||
<h1>energyCalibration.h</h1><a href="energyCalibration_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
|
||||
<a name="l00002"></a>00002 <span class="preprocessor">#ifndef ENERGYCALIBRATION_H</span>
|
||||
<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="preprocessor">#define ENERGYCALIBRATION_H</span>
|
||||
<a name="l00004"></a>00004 <span class="preprocessor"></span>
|
||||
<a name="l00005"></a>00005 <span class="preprocessor">#include <TROOT.h></span>
|
||||
<a name="l00006"></a>00006 <span class="preprocessor">#include <TF1.h></span>
|
||||
<a name="l00007"></a>00007
|
||||
<a name="l00008"></a>00008 <span class="keyword">using namespace </span>std;
|
||||
<a name="l00009"></a>00009
|
||||
<a name="l00010"></a>00010 <span class="keyword">class </span>TH1F;
|
||||
<a name="l00011"></a>00011 <span class="keyword">class </span>TGraphErrors;
|
||||
<a name="l00012"></a>00012
|
||||
<a name="l00013"></a>00013
|
||||
<a name="l00014"></a>00014
|
||||
<a name="l00015"></a>00015
|
||||
<a name="l00016"></a>00016
|
||||
<a name="l00017"></a><a class="code" href="energyCalibration_8h.html#a48a6c1eb7d418c5d0618fbb161ae321">00017</a> <span class="keyword">const</span> <span class="keywordtype">float</span> <a class="code" href="energyCalibration_8h.html#a48a6c1eb7d418c5d0618fbb161ae321">conven</a>=1000./3.6;
|
||||
<a name="l00018"></a><a class="code" href="energyCalibration_8h.html#d1db7b454cab6ae1749310d7f444849b">00018</a> <span class="keyword">const</span> <span class="keywordtype">float</span> <a class="code" href="energyCalibration_8h.html#d1db7b454cab6ae1749310d7f444849b">el</a>=1.67E-4;
|
||||
<a name="l00050"></a><a class="code" href="classenergyCalibrationFunctions.html">00050</a> <span class="keyword">class </span><a class="code" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a> {
|
||||
<a name="l00051"></a>00051
|
||||
<a name="l00052"></a>00052 <span class="keyword">public</span>:
|
||||
<a name="l00053"></a>00053
|
||||
<a name="l00054"></a><a class="code" href="classenergyCalibrationFunctions.html#8c17162b89f3b2e642004e7c88a22ac2">00054</a> <a class="code" href="classenergyCalibrationFunctions.html#8c17162b89f3b2e642004e7c88a22ac2">energyCalibrationFunctions</a>(<span class="keywordtype">int</span> s=-1) {<a class="code" href="classenergyCalibrationFunctions.html#716759a1ae09ea3c841f824af3ece415">setScanSign</a>(s);};
|
||||
<a name="l00055"></a>00055
|
||||
<a name="l00060"></a><a class="code" href="classenergyCalibrationFunctions.html#716759a1ae09ea3c841f824af3ece415">00060</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibrationFunctions.html#716759a1ae09ea3c841f824af3ece415">setScanSign</a>(<span class="keywordtype">int</span> s=0) {<span class="keywordflow">if</span> (s==1 || s==-1) <a class="code" href="classenergyCalibrationFunctions.html#4fc7c435169b5bf4672cf654270097d0">sign</a>=s; <span class="keywordflow">return</span> <a class="code" href="classenergyCalibrationFunctions.html#4fc7c435169b5bf4672cf654270097d0">sign</a>;};;
|
||||
<a name="l00061"></a>00061
|
||||
<a name="l00062"></a>00062
|
||||
<a name="l00072"></a>00072 Double_t <a class="code" href="classenergyCalibrationFunctions.html#e9582e5c46d27ad25d6139d0386698f7">gaussChargeSharing</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00073"></a>00073
|
||||
<a name="l00080"></a>00080 Double_t <a class="code" href="classenergyCalibrationFunctions.html#2da1e3b9a10d23233256f8c2234f2457">erfFunction</a>(Double_t *x, Double_t *par) ;
|
||||
<a name="l00081"></a>00081
|
||||
<a name="l00090"></a>00090 Double_t <a class="code" href="classenergyCalibrationFunctions.html#8d1b3d0f8b30423dad56d8ce5323a4a8">erfFunctionChargeSharing</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00091"></a>00091
|
||||
<a name="l00105"></a>00105 Double_t <a class="code" href="classenergyCalibrationFunctions.html#a5fbe9da48bc2ef90b699e06ea8c5111">erfFuncFluo</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00106"></a>00106
|
||||
<a name="l00107"></a>00107
|
||||
<a name="l00109"></a>00109 <span class="keyword">static</span> <span class="keywordtype">float</span> <a class="code" href="classenergyCalibrationFunctions.html#37f557bacb75213073c8d421cc1240f4">median</a>(<span class="keywordtype">float</span> *x, <span class="keywordtype">int</span> n);
|
||||
<a name="l00111"></a>00111 <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibrationFunctions.html#a3ab0e7c3c862fb51dfda78f1b09a55c">quick_select</a>(<span class="keywordtype">int</span> arr[], <span class="keywordtype">int</span> n);
|
||||
<a name="l00113"></a>00113 <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibrationFunctions.html#7d9a7b8d0c8ff69638a5fbb9f4c04b90">kth_smallest</a>(<span class="keywordtype">int</span> *a, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> k);
|
||||
<a name="l00114"></a>00114
|
||||
<a name="l00115"></a>00115
|
||||
<a name="l00124"></a>00124 Double_t <a class="code" href="classenergyCalibrationFunctions.html#015eb05dc34b77642ab2a2a9f126f170">spectrum</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00125"></a>00125
|
||||
<a name="l00126"></a>00126
|
||||
<a name="l00135"></a>00135 Double_t <a class="code" href="classenergyCalibrationFunctions.html#e220482622e88a46b12498b0e4d8113a">scurve</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00136"></a>00136
|
||||
<a name="l00137"></a>00137
|
||||
<a name="l00138"></a>00138
|
||||
<a name="l00151"></a>00151 Double_t <a class="code" href="classenergyCalibrationFunctions.html#4eba39623b518d67a63192970a78f530">scurveFluo</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00152"></a>00152
|
||||
<a name="l00153"></a>00153
|
||||
<a name="l00154"></a>00154 <span class="keyword">private</span>:
|
||||
<a name="l00155"></a><a class="code" href="classenergyCalibrationFunctions.html#4fc7c435169b5bf4672cf654270097d0">00155</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibrationFunctions.html#4fc7c435169b5bf4672cf654270097d0">sign</a>;
|
||||
<a name="l00156"></a>00156
|
||||
<a name="l00157"></a>00157
|
||||
<a name="l00158"></a>00158 };
|
||||
<a name="l00159"></a>00159
|
||||
<a name="l00165"></a><a class="code" href="classenergyCalibration.html">00165</a> <span class="keyword">class </span><a class="code" href="classenergyCalibration.html">energyCalibration</a> {
|
||||
<a name="l00166"></a>00166
|
||||
<a name="l00167"></a>00167
|
||||
<a name="l00168"></a>00168 <span class="keyword">public</span>:
|
||||
<a name="l00172"></a>00172 <a class="code" href="classenergyCalibration.html#16f0658d2b526f52784057b2166efd22">energyCalibration</a>();
|
||||
<a name="l00173"></a>00173
|
||||
<a name="l00177"></a>00177 <a class="code" href="classenergyCalibration.html#3bae2b9c26893daa8f583758509c844f">~energyCalibration</a>();
|
||||
<a name="l00178"></a>00178
|
||||
<a name="l00183"></a><a class="code" href="classenergyCalibration.html#3d9af0857f7a68b7e4519917ea97e6be">00183</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibration.html#3d9af0857f7a68b7e4519917ea97e6be">setPlotFlag</a>(<span class="keywordtype">int</span> p=-1) {<span class="keywordflow">if</span> (p>=0) <a class="code" href="classenergyCalibration.html#4edfb157df3624be677177dec0f9555b">plot_flag</a>=p; <span class="keywordflow">return</span> <a class="code" href="classenergyCalibration.html#4edfb157df3624be677177dec0f9555b">plot_flag</a>;};
|
||||
<a name="l00184"></a>00184
|
||||
<a name="l00189"></a><a class="code" href="classenergyCalibration.html#7dbf1676b30ffe90c5aa917f1b2b77ee">00189</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibration.html#7dbf1676b30ffe90c5aa917f1b2b77ee">setScanSign</a>(<span class="keywordtype">int</span> s=0) {<span class="keywordflow">return</span> <a class="code" href="classenergyCalibration.html#e9b3307bf858331241871bde42fdd24e">funcs</a>-><a class="code" href="classenergyCalibrationFunctions.html#716759a1ae09ea3c841f824af3ece415">setScanSign</a>(s);};
|
||||
<a name="l00190"></a>00190
|
||||
<a name="l00195"></a>00195 <span class="keywordtype">int</span> <a class="code" href="classenergyCalibration.html#e2809b419799e8b199944f185d4ebab8">setChargeSharing</a>(<span class="keywordtype">int</span> p=-1);
|
||||
<a name="l00196"></a>00196
|
||||
<a name="l00201"></a><a class="code" href="classenergyCalibration.html#695cef5428a833d515172d987774f67b">00201</a> <span class="keywordtype">void</span> <a class="code" href="classenergyCalibration.html#695cef5428a833d515172d987774f67b">setFitRange</a>(Double_t mi, Double_t ma){<a class="code" href="classenergyCalibration.html#262f574732186cdd8d3a11344d03d0bb">fit_min</a>=mi; <a class="code" href="classenergyCalibration.html#e979386a3f787ef706f4a9ec5bf41d7d">fit_max</a>=ma;};
|
||||
<a name="l00202"></a>00202
|
||||
<a name="l00207"></a><a class="code" href="classenergyCalibration.html#bfb02327a6897bd97525c01697a1ba4f">00207</a> <span class="keywordtype">void</span> <a class="code" href="classenergyCalibration.html#bfb02327a6897bd97525c01697a1ba4f">getFitRange</a>(Double_t &mi, Double_t &ma){mi=<a class="code" href="classenergyCalibration.html#262f574732186cdd8d3a11344d03d0bb">fit_min</a>; ma=<a class="code" href="classenergyCalibration.html#e979386a3f787ef706f4a9ec5bf41d7d">fit_max</a>;};
|
||||
<a name="l00208"></a>00208
|
||||
<a name="l00209"></a>00209
|
||||
<a name="l00219"></a>00219 <span class="keywordtype">void</span> <a class="code" href="classenergyCalibration.html#ba156f5290f7b404d7b8ea735fd7e7bf">setStartParameters</a>(Double_t *par);
|
||||
<a name="l00220"></a>00220
|
||||
<a name="l00230"></a>00230 <span class="keywordtype">void</span> <a class="code" href="classenergyCalibration.html#fc7411b7a3191748dfcc90f86b823bf4">getStartParameters</a>(Double_t *par);
|
||||
<a name="l00231"></a>00231
|
||||
<a name="l00239"></a>00239 TF1 *<a class="code" href="classenergyCalibration.html#0dcd8e06e31f7b70488a012db12b2bf8">fitSCurve</a>(TH1 *h1, Double_t *mypar, Double_t *emypar);
|
||||
<a name="l00240"></a>00240
|
||||
<a name="l00241"></a>00241
|
||||
<a name="l00249"></a>00249 TF1 *<a class="code" href="classenergyCalibration.html#7d22b28cd2fad3d334f15f3d6dc7975a">fitSpectrum</a>(TH1 *h1, Double_t *mypar, Double_t *emypar);
|
||||
<a name="l00250"></a>00250
|
||||
<a name="l00251"></a>00251
|
||||
<a name="l00265"></a>00265 TGraphErrors* <a class="code" href="classenergyCalibration.html#c7f46f2d051f28211681e851f99d3fc4">linearCalibration</a>(<span class="keywordtype">int</span> nscan, Double_t *en, Double_t *een, Double_t *fl, Double_t *efl, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff);
|
||||
<a name="l00266"></a>00266
|
||||
<a name="l00279"></a><a class="code" href="classenergyCalibration.html#6f5ee6771522a31e4fe1eca143e2aa9b">00279</a> TGraphErrors* <a class="code" href="classenergyCalibration.html#6f5ee6771522a31e4fe1eca143e2aa9b">calibrateScurves</a>(<span class="keywordtype">int</span> nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff){<span class="keywordflow">return</span> <a class="code" href="classenergyCalibration.html#378daeddde40b6127ee6ed595506928c">calibrate</a>(nscan, en, een, h1, gain, off, egain, eoff, 1);};
|
||||
<a name="l00280"></a>00280
|
||||
<a name="l00293"></a><a class="code" href="classenergyCalibration.html#092637f656c0b88d57797e3ebd0f3e58">00293</a> TGraphErrors* <a class="code" href="classenergyCalibration.html#092637f656c0b88d57797e3ebd0f3e58">calibrateSpectra</a>(<span class="keywordtype">int</span> nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff){<span class="keywordflow">return</span> <a class="code" href="classenergyCalibration.html#378daeddde40b6127ee6ed595506928c">calibrate</a>(nscan, en, een, h1, gain, off, egain, eoff, 0);};
|
||||
<a name="l00294"></a>00294
|
||||
<a name="l00295"></a>00295
|
||||
<a name="l00296"></a>00296
|
||||
<a name="l00297"></a>00297 <span class="keyword">private</span>:
|
||||
<a name="l00309"></a>00309 TGraphErrors* <a class="code" href="classenergyCalibration.html#378daeddde40b6127ee6ed595506928c">calibrate</a>(<span class="keywordtype">int</span> nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff, <span class="keywordtype">int</span> integral=1);
|
||||
<a name="l00310"></a>00310
|
||||
<a name="l00311"></a>00311
|
||||
<a name="l00319"></a>00319 <span class="keywordtype">void</span> <a class="code" href="classenergyCalibration.html#3e84328c11772b6263224340ec924e37">initFitFunction</a>(TF1 *fun, TH1 *h1);
|
||||
<a name="l00320"></a>00320
|
||||
<a name="l00321"></a>00321
|
||||
<a name="l00330"></a>00330 TF1 *<a class="code" href="classenergyCalibration.html#fe1c6dc5f56d12fe06569f401da19729">fitFunction</a>(TF1 *fun, TH1 *h1, Double_t *mypar, Double_t *emypar);
|
||||
<a name="l00331"></a>00331
|
||||
<a name="l00332"></a>00332
|
||||
<a name="l00333"></a><a class="code" href="classenergyCalibration.html#4edfb157df3624be677177dec0f9555b">00333</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibration.html#4edfb157df3624be677177dec0f9555b">plot_flag</a>;
|
||||
<a name="l00335"></a><a class="code" href="classenergyCalibration.html#ce0be11dcc8418db3c7c2b139a015c96">00335</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibration.html#ce0be11dcc8418db3c7c2b139a015c96">cs_flag</a>;
|
||||
<a name="l00337"></a><a class="code" href="classenergyCalibration.html#262f574732186cdd8d3a11344d03d0bb">00337</a> Double_t <a class="code" href="classenergyCalibration.html#262f574732186cdd8d3a11344d03d0bb">fit_min</a>;
|
||||
<a name="l00338"></a><a class="code" href="classenergyCalibration.html#e979386a3f787ef706f4a9ec5bf41d7d">00338</a> Double_t <a class="code" href="classenergyCalibration.html#e979386a3f787ef706f4a9ec5bf41d7d">fit_max</a>;
|
||||
<a name="l00340"></a><a class="code" href="classenergyCalibration.html#aa11f256a8b0a94c28a98d068013b327">00340</a> Double_t <a class="code" href="classenergyCalibration.html#aa11f256a8b0a94c28a98d068013b327">bg_offset</a>;
|
||||
<a name="l00341"></a><a class="code" href="classenergyCalibration.html#9676e5cc2757c723c2262d641fb4b8b4">00341</a> Double_t <a class="code" href="classenergyCalibration.html#9676e5cc2757c723c2262d641fb4b8b4">bg_slope</a>;
|
||||
<a name="l00342"></a><a class="code" href="classenergyCalibration.html#b99d770f1c9af68d591ed20847813ad1">00342</a> Double_t <a class="code" href="classenergyCalibration.html#b99d770f1c9af68d591ed20847813ad1">flex</a>;
|
||||
<a name="l00343"></a><a class="code" href="classenergyCalibration.html#4461206397e2442c92be9151ee231ec5">00343</a> Double_t <a class="code" href="classenergyCalibration.html#4461206397e2442c92be9151ee231ec5">noise</a>;
|
||||
<a name="l00344"></a><a class="code" href="classenergyCalibration.html#77b954cd513271d2cfafee6033435584">00344</a> Double_t <a class="code" href="classenergyCalibration.html#77b954cd513271d2cfafee6033435584">ampl</a>;
|
||||
<a name="l00345"></a><a class="code" href="classenergyCalibration.html#ca1efedbfea0ad5c9ea2d794e3fb368d">00345</a> Double_t <a class="code" href="classenergyCalibration.html#ca1efedbfea0ad5c9ea2d794e3fb368d">cs_slope</a>;
|
||||
<a name="l00347"></a><a class="code" href="classenergyCalibration.html#e9b3307bf858331241871bde42fdd24e">00347</a> <a class="code" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a> *<a class="code" href="classenergyCalibration.html#e9b3307bf858331241871bde42fdd24e">funcs</a>;
|
||||
<a name="l00348"></a>00348
|
||||
<a name="l00349"></a><a class="code" href="classenergyCalibration.html#57706a328324c25dd9f8ba6d1486e4ce">00349</a> TF1 *<a class="code" href="classenergyCalibration.html#57706a328324c25dd9f8ba6d1486e4ce">fscurve</a>;
|
||||
<a name="l00351"></a><a class="code" href="classenergyCalibration.html#2ee734ab28b78dc5786a7ba430f8baa5">00351</a> TF1 *<a class="code" href="classenergyCalibration.html#2ee734ab28b78dc5786a7ba430f8baa5">fspectrum</a>;
|
||||
<a name="l00354"></a>00354 };
|
||||
<a name="l00355"></a>00355
|
||||
<a name="l00356"></a>00356 <span class="preprocessor">#endif</span>
|
||||
<a name="l00357"></a>00357 <span class="preprocessor"></span>
|
||||
<a name="l00358"></a>00358
|
||||
<a name="l00359"></a>00359
|
||||
<a name="l00360"></a>00360
|
||||
<a name="l00361"></a>00361
|
||||
<a name="l00362"></a>00362
|
||||
<a name="l00363"></a>00363
|
||||
<a name="l00364"></a>00364
|
||||
<a name="l00365"></a>00365
|
||||
<a name="l00366"></a>00366
|
||||
<a name="l00367"></a>00367
|
||||
<a name="l00368"></a>00368
|
||||
<a name="l00369"></a>00369
|
||||
<a name="l00370"></a>00370
|
||||
<a name="l00371"></a>00371
|
||||
<a name="l00372"></a>00372
|
||||
<a name="l00373"></a>00373
|
||||
<a name="l00374"></a>00374
|
||||
<a name="l00375"></a>00375
|
||||
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,76 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>energyCalibration.h File Reference</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li id="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>File Members</span></a></li>
|
||||
</ul></div>
|
||||
<h1>energyCalibration.h File Reference</h1><code>#include <TROOT.h></code><br>
|
||||
<code>#include <TF1.h></code><br>
|
||||
|
||||
<p>
|
||||
<a href="energyCalibration_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr><td></td></tr>
|
||||
<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacestd.html">std</a></td></tr>
|
||||
|
||||
<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td></tr>
|
||||
|
||||
<tr><td class="mdescLeft"> </td><td class="mdescRight">Energy calibration functions. <a href="classenergyCalibrationFunctions.html#_details">More...</a><br></td></tr>
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibration.html">energyCalibration</a></td></tr>
|
||||
|
||||
<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">const float </td><td class="memItemRight" valign="bottom"><a class="el" href="energyCalibration_8h.html#a48a6c1eb7d418c5d0618fbb161ae321">conven</a> = 1000./3.6</td></tr>
|
||||
|
||||
<tr><td class="memItemLeft" nowrap align="right" valign="top">const float </td><td class="memItemRight" valign="bottom"><a class="el" href="energyCalibration_8h.html#d1db7b454cab6ae1749310d7f444849b">el</a> = 1.67E-4</td></tr>
|
||||
|
||||
</table>
|
||||
<hr><h2>Variable Documentation</h2>
|
||||
<a class="anchor" name="a48a6c1eb7d418c5d0618fbb161ae321"></a><!-- doxytag: member="energyCalibration.h::conven" ref="a48a6c1eb7d418c5d0618fbb161ae321" args="" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const float <a class="el" href="energyCalibration_8h.html#a48a6c1eb7d418c5d0618fbb161ae321">conven</a> = 1000./3.6 </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
electrons/keV
|
||||
</div>
|
||||
</div><p>
|
||||
<a class="anchor" name="d1db7b454cab6ae1749310d7f444849b"></a><!-- doxytag: member="energyCalibration.h::el" ref="d1db7b454cab6ae1749310d7f444849b" args="" -->
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const float <a class="el" href="energyCalibration_8h.html#d1db7b454cab6ae1749310d7f444849b">el</a> = 1.67E-4 </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="memdoc">
|
||||
|
||||
<p>
|
||||
electron charge in fC
|
||||
</div>
|
||||
</div><p>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,190 @@
|
||||
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
|
||||
<title>energyCalibration.h Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javaScript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body onload='searchBox.OnSelectItem(0);'>
|
||||
<!-- Generated by Doxygen 1.6.0 -->
|
||||
<script type="text/javascript"><!--
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
--></script>
|
||||
<div class="navigation" id="top">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<img id="MSearchSelect" src="search/search.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>File Members</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<h1>energyCalibration.h</h1><a href="energyCalibration_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//#include "NewMythenMacros.h"</span>
|
||||
<a name="l00002"></a>00002 <span class="preprocessor">#ifndef ENERGYCALIBRATION_H</span>
|
||||
<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="preprocessor">#define ENERGYCALIBRATION_H</span>
|
||||
<a name="l00004"></a>00004 <span class="preprocessor"></span>
|
||||
<a name="l00005"></a>00005 <span class="preprocessor">#include <TROOT.h></span>
|
||||
<a name="l00006"></a>00006 <span class="preprocessor">#include <TF1.h></span>
|
||||
<a name="l00007"></a>00007
|
||||
<a name="l00008"></a>00008 <span class="keyword">using namespace </span>std;
|
||||
<a name="l00009"></a>00009
|
||||
<a name="l00010"></a>00010 <span class="keyword">class </span>TH1F;
|
||||
<a name="l00011"></a>00011 <span class="keyword">class </span>TGraphErrors;
|
||||
<a name="l00012"></a>00012
|
||||
<a name="l00013"></a>00013
|
||||
<a name="l00014"></a>00014
|
||||
<a name="l00015"></a>00015
|
||||
<a name="l00016"></a>00016
|
||||
<a name="l00017"></a><a class="code" href="energyCalibration_8h.html#aa48a6c1eb7d418c5d0618fbb161ae321">00017</a> <span class="keyword">const</span> <span class="keywordtype">float</span> <a class="code" href="energyCalibration_8h.html#aa48a6c1eb7d418c5d0618fbb161ae321">conven</a>=1000./3.6;
|
||||
<a name="l00018"></a><a class="code" href="energyCalibration_8h.html#ad1db7b454cab6ae1749310d7f444849b">00018</a> <span class="keyword">const</span> <span class="keywordtype">float</span> <a class="code" href="energyCalibration_8h.html#ad1db7b454cab6ae1749310d7f444849b">el</a>=1.67E-4;
|
||||
<a name="l00047"></a><a class="code" href="classenergyCalibrationFunctions.html">00047</a> <span class="keyword">class </span><a class="code" href="classenergyCalibrationFunctions.html" title="Energy calibration functions.">energyCalibrationFunctions</a> {
|
||||
<a name="l00048"></a>00048
|
||||
<a name="l00049"></a>00049 <span class="keyword">public</span>:
|
||||
<a name="l00050"></a>00050
|
||||
<a name="l00051"></a><a class="code" href="classenergyCalibrationFunctions.html#a8c17162b89f3b2e642004e7c88a22ac2">00051</a> <a class="code" href="classenergyCalibrationFunctions.html#a8c17162b89f3b2e642004e7c88a22ac2">energyCalibrationFunctions</a>(<span class="keywordtype">int</span> s=-1) {<a class="code" href="classenergyCalibrationFunctions.html#a716759a1ae09ea3c841f824af3ece415">setScanSign</a>(s);};
|
||||
<a name="l00052"></a>00052
|
||||
<a name="l00057"></a><a class="code" href="classenergyCalibrationFunctions.html#a716759a1ae09ea3c841f824af3ece415">00057</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibrationFunctions.html#a716759a1ae09ea3c841f824af3ece415">setScanSign</a>(<span class="keywordtype">int</span> s=0) {<span class="keywordflow">if</span> (s==1 || s==-1) <a class="code" href="classenergyCalibrationFunctions.html#a4fc7c435169b5bf4672cf654270097d0">sign</a>=s; <span class="keywordflow">return</span> <a class="code" href="classenergyCalibrationFunctions.html#a4fc7c435169b5bf4672cf654270097d0">sign</a>;};;
|
||||
<a name="l00058"></a>00058
|
||||
<a name="l00059"></a>00059
|
||||
<a name="l00068"></a>00068 Double_t <a class="code" href="classenergyCalibrationFunctions.html#ae9582e5c46d27ad25d6139d0386698f7">gaussChargeSharing</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00069"></a>00069
|
||||
<a name="l00075"></a>00075 Double_t <a class="code" href="classenergyCalibrationFunctions.html#a2da1e3b9a10d23233256f8c2234f2457">erfFunction</a>(Double_t *x, Double_t *par) ;
|
||||
<a name="l00076"></a>00076
|
||||
<a name="l00085"></a>00085 Double_t <a class="code" href="classenergyCalibrationFunctions.html#a8d1b3d0f8b30423dad56d8ce5323a4a8">erfFunctionChargeSharing</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00086"></a>00086
|
||||
<a name="l00100"></a>00100 Double_t <a class="code" href="classenergyCalibrationFunctions.html#aa5fbe9da48bc2ef90b699e06ea8c5111">erfFuncFluo</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00101"></a>00101
|
||||
<a name="l00102"></a>00102
|
||||
<a name="l00104"></a>00104 <span class="keyword">static</span> <span class="keywordtype">float</span> <a class="code" href="classenergyCalibrationFunctions.html#a37f557bacb75213073c8d421cc1240f4">median</a>(<span class="keywordtype">float</span> *x, <span class="keywordtype">int</span> n);
|
||||
<a name="l00106"></a>00106 <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibrationFunctions.html#aa3ab0e7c3c862fb51dfda78f1b09a55c">quick_select</a>(<span class="keywordtype">int</span> arr[], <span class="keywordtype">int</span> n);
|
||||
<a name="l00108"></a>00108 <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibrationFunctions.html#a7d9a7b8d0c8ff69638a5fbb9f4c04b90">kth_smallest</a>(<span class="keywordtype">int</span> *a, <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> k);
|
||||
<a name="l00109"></a>00109
|
||||
<a name="l00110"></a>00110
|
||||
<a name="l00119"></a>00119 Double_t <a class="code" href="classenergyCalibrationFunctions.html#a015eb05dc34b77642ab2a2a9f126f170">spectrum</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00120"></a>00120
|
||||
<a name="l00121"></a>00121
|
||||
<a name="l00130"></a>00130 Double_t <a class="code" href="classenergyCalibrationFunctions.html#ae220482622e88a46b12498b0e4d8113a">scurve</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00131"></a>00131
|
||||
<a name="l00132"></a>00132
|
||||
<a name="l00133"></a>00133
|
||||
<a name="l00146"></a>00146 Double_t <a class="code" href="classenergyCalibrationFunctions.html#a4eba39623b518d67a63192970a78f530">scurveFluo</a>(Double_t *x, Double_t *par);
|
||||
<a name="l00147"></a>00147
|
||||
<a name="l00148"></a>00148
|
||||
<a name="l00149"></a>00149 <span class="keyword">private</span>:
|
||||
<a name="l00150"></a><a class="code" href="classenergyCalibrationFunctions.html#a4fc7c435169b5bf4672cf654270097d0">00150</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibrationFunctions.html#a4fc7c435169b5bf4672cf654270097d0">sign</a>;
|
||||
<a name="l00151"></a>00151
|
||||
<a name="l00152"></a>00152
|
||||
<a name="l00153"></a>00153 };
|
||||
<a name="l00154"></a>00154
|
||||
<a name="l00155"></a>00155
|
||||
<a name="l00156"></a>00156
|
||||
<a name="l00157"></a><a class="code" href="classenergyCalibration.html">00157</a> <span class="keyword">class </span><a class="code" href="classenergyCalibration.html">energyCalibration</a> {
|
||||
<a name="l00158"></a>00158
|
||||
<a name="l00159"></a>00159
|
||||
<a name="l00160"></a>00160 <span class="keyword">public</span>:
|
||||
<a name="l00164"></a>00164 <a class="code" href="classenergyCalibration.html#a16f0658d2b526f52784057b2166efd22">energyCalibration</a>();
|
||||
<a name="l00165"></a>00165
|
||||
<a name="l00169"></a>00169 <a class="code" href="classenergyCalibration.html#a3bae2b9c26893daa8f583758509c844f">~energyCalibration</a>();
|
||||
<a name="l00170"></a>00170
|
||||
<a name="l00175"></a><a class="code" href="classenergyCalibration.html#a3d9af0857f7a68b7e4519917ea97e6be">00175</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibration.html#a3d9af0857f7a68b7e4519917ea97e6be">setPlotFlag</a>(<span class="keywordtype">int</span> p=-1) {<span class="keywordflow">if</span> (p>=0) <a class="code" href="classenergyCalibration.html#a4edfb157df3624be677177dec0f9555b">plot_flag</a>=p; <span class="keywordflow">return</span> <a class="code" href="classenergyCalibration.html#a4edfb157df3624be677177dec0f9555b">plot_flag</a>;};
|
||||
<a name="l00176"></a>00176
|
||||
<a name="l00181"></a><a class="code" href="classenergyCalibration.html#a7dbf1676b30ffe90c5aa917f1b2b77ee">00181</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibration.html#a7dbf1676b30ffe90c5aa917f1b2b77ee">setScanSign</a>(<span class="keywordtype">int</span> s=0) {<span class="keywordflow">return</span> <a class="code" href="classenergyCalibration.html#ae9b3307bf858331241871bde42fdd24e">funcs</a>-><a class="code" href="classenergyCalibrationFunctions.html#a716759a1ae09ea3c841f824af3ece415">setScanSign</a>(s);};
|
||||
<a name="l00182"></a>00182
|
||||
<a name="l00183"></a>00183
|
||||
<a name="l00188"></a><a class="code" href="classenergyCalibration.html#a695cef5428a833d515172d987774f67b">00188</a> <span class="keywordtype">void</span> <a class="code" href="classenergyCalibration.html#a695cef5428a833d515172d987774f67b">setFitRange</a>(Double_t mi, Double_t ma){<a class="code" href="classenergyCalibration.html#a262f574732186cdd8d3a11344d03d0bb">fit_min</a>=mi; <a class="code" href="classenergyCalibration.html#ae979386a3f787ef706f4a9ec5bf41d7d">fit_max</a>=ma;};
|
||||
<a name="l00189"></a>00189
|
||||
<a name="l00194"></a><a class="code" href="classenergyCalibration.html#abfb02327a6897bd97525c01697a1ba4f">00194</a> <span class="keywordtype">void</span> <a class="code" href="classenergyCalibration.html#abfb02327a6897bd97525c01697a1ba4f">getFitRange</a>(Double_t &mi, Double_t &ma){mi=<a class="code" href="classenergyCalibration.html#a262f574732186cdd8d3a11344d03d0bb">fit_min</a>; ma=<a class="code" href="classenergyCalibration.html#ae979386a3f787ef706f4a9ec5bf41d7d">fit_max</a>;};
|
||||
<a name="l00195"></a>00195
|
||||
<a name="l00196"></a>00196
|
||||
<a name="l00206"></a>00206 <span class="keywordtype">void</span> <a class="code" href="classenergyCalibration.html#aba156f5290f7b404d7b8ea735fd7e7bf">setStartParameters</a>(Double_t *par);
|
||||
<a name="l00207"></a>00207
|
||||
<a name="l00217"></a>00217 <span class="keywordtype">void</span> <a class="code" href="classenergyCalibration.html#afc7411b7a3191748dfcc90f86b823bf4">getStartParameters</a>(Double_t *par);
|
||||
<a name="l00218"></a>00218
|
||||
<a name="l00226"></a>00226 TF1 *<a class="code" href="classenergyCalibration.html#a0dcd8e06e31f7b70488a012db12b2bf8">fitSCurve</a>(TH1 *h1, Double_t *mypar, Double_t *emypar);
|
||||
<a name="l00227"></a>00227
|
||||
<a name="l00228"></a>00228
|
||||
<a name="l00240"></a>00240 TGraphErrors* <a class="code" href="classenergyCalibration.html#ac7f46f2d051f28211681e851f99d3fc4">linearCalibration</a>(<span class="keywordtype">int</span> nscan, Double_t *en, Double_t *een, Double_t *fl, Double_t *efl, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff);
|
||||
<a name="l00241"></a>00241
|
||||
<a name="l00252"></a>00252 TGraphErrors* <a class="code" href="classenergyCalibration.html#aa6e7624f6cafb8c3a22c821aee2c6fc4">calibrate</a>(<span class="keywordtype">int</span> nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff);
|
||||
<a name="l00253"></a>00253
|
||||
<a name="l00254"></a>00254
|
||||
<a name="l00255"></a>00255
|
||||
<a name="l00256"></a>00256 <span class="keyword">private</span>:
|
||||
<a name="l00257"></a>00257
|
||||
<a name="l00258"></a>00258
|
||||
<a name="l00259"></a><a class="code" href="classenergyCalibration.html#a4edfb157df3624be677177dec0f9555b">00259</a> <span class="keywordtype">int</span> <a class="code" href="classenergyCalibration.html#a4edfb157df3624be677177dec0f9555b">plot_flag</a>;
|
||||
<a name="l00261"></a><a class="code" href="classenergyCalibration.html#a262f574732186cdd8d3a11344d03d0bb">00261</a> Double_t <a class="code" href="classenergyCalibration.html#a262f574732186cdd8d3a11344d03d0bb">fit_min</a>;
|
||||
<a name="l00262"></a><a class="code" href="classenergyCalibration.html#ae979386a3f787ef706f4a9ec5bf41d7d">00262</a> Double_t <a class="code" href="classenergyCalibration.html#ae979386a3f787ef706f4a9ec5bf41d7d">fit_max</a>;
|
||||
<a name="l00264"></a><a class="code" href="classenergyCalibration.html#aaa11f256a8b0a94c28a98d068013b327">00264</a> Double_t <a class="code" href="classenergyCalibration.html#aaa11f256a8b0a94c28a98d068013b327">bg_offset</a>;
|
||||
<a name="l00265"></a><a class="code" href="classenergyCalibration.html#a9676e5cc2757c723c2262d641fb4b8b4">00265</a> Double_t <a class="code" href="classenergyCalibration.html#a9676e5cc2757c723c2262d641fb4b8b4">bg_slope</a>;
|
||||
<a name="l00266"></a><a class="code" href="classenergyCalibration.html#ab99d770f1c9af68d591ed20847813ad1">00266</a> Double_t <a class="code" href="classenergyCalibration.html#ab99d770f1c9af68d591ed20847813ad1">flex</a>;
|
||||
<a name="l00267"></a><a class="code" href="classenergyCalibration.html#a4461206397e2442c92be9151ee231ec5">00267</a> Double_t <a class="code" href="classenergyCalibration.html#a4461206397e2442c92be9151ee231ec5">noise</a>;
|
||||
<a name="l00268"></a><a class="code" href="classenergyCalibration.html#a77b954cd513271d2cfafee6033435584">00268</a> Double_t <a class="code" href="classenergyCalibration.html#a77b954cd513271d2cfafee6033435584">ampl</a>;
|
||||
<a name="l00269"></a><a class="code" href="classenergyCalibration.html#aca1efedbfea0ad5c9ea2d794e3fb368d">00269</a> Double_t <a class="code" href="classenergyCalibration.html#aca1efedbfea0ad5c9ea2d794e3fb368d">cs_slope</a>;
|
||||
<a name="l00271"></a><a class="code" href="classenergyCalibration.html#ae9b3307bf858331241871bde42fdd24e">00271</a> <a class="code" href="classenergyCalibrationFunctions.html" title="Energy calibration functions.">energyCalibrationFunctions</a> *<a class="code" href="classenergyCalibration.html#ae9b3307bf858331241871bde42fdd24e">funcs</a>;
|
||||
<a name="l00272"></a>00272
|
||||
<a name="l00273"></a><a class="code" href="classenergyCalibration.html#a57706a328324c25dd9f8ba6d1486e4ce">00273</a> TF1 *<a class="code" href="classenergyCalibration.html#a57706a328324c25dd9f8ba6d1486e4ce">fscurve</a>;
|
||||
<a name="l00276"></a>00276 };
|
||||
<a name="l00277"></a>00277
|
||||
<a name="l00278"></a>00278 <span class="preprocessor">#endif</span>
|
||||
<a name="l00279"></a>00279 <span class="preprocessor"></span>
|
||||
<a name="l00280"></a>00280
|
||||
<a name="l00281"></a>00281
|
||||
<a name="l00282"></a>00282
|
||||
<a name="l00283"></a>00283
|
||||
<a name="l00284"></a>00284
|
||||
<a name="l00285"></a>00285
|
||||
<a name="l00286"></a>00286
|
||||
<a name="l00287"></a>00287
|
||||
<a name="l00288"></a>00288
|
||||
<a name="l00289"></a>00289
|
||||
<a name="l00290"></a>00290
|
||||
<a name="l00291"></a>00291
|
||||
<a name="l00292"></a>00292
|
||||
<a name="l00293"></a>00293
|
||||
<a name="l00294"></a>00294
|
||||
<a name="l00295"></a>00295
|
||||
<a name="l00296"></a>00296
|
||||
<a name="l00297"></a>00297
|
||||
</pre></div></div>
|
||||
<!--- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<hr size="1"/><address style="text-align: right;"><small>Generated on Tue Mar 20 17:21:14 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.0 </small></address>
|
||||
</body>
|
||||
</html>
|
27
slsDetectorSoftware/slsDetectorAnalysis/docs/html/files.html
Normal file
27
slsDetectorSoftware/slsDetectorAnalysis/docs/html/files.html
Normal file
@ -0,0 +1,27 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>File Index</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li id="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="current"><a href="files.html"><span>File List</span></a></li>
|
||||
<li><a href="globals.html"><span>File Members</span></a></li>
|
||||
</ul></div>
|
||||
<h1>File List</h1>Here is a list of all files with brief descriptions:<table>
|
||||
<tr><td class="indexkey"><a class="el" href="energyCalibration_8h.html">energyCalibration.h</a> <a href="energyCalibration_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
|
||||
</table>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
126
slsDetectorSoftware/slsDetectorAnalysis/docs/html/functions.html
Normal file
126
slsDetectorSoftware/slsDetectorAnalysis/docs/html/functions.html
Normal file
@ -0,0 +1,126 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Class Members</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li id="current"><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="annotated.html"><span>Class List</span></a></li>
|
||||
<li id="current"><a href="functions.html"><span>Class Members</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="current"><a href="functions.html"><span>All</span></a></li>
|
||||
<li><a href="functions_func.html"><span>Functions</span></a></li>
|
||||
<li><a href="functions_vars.html"><span>Variables</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="#index_a"><span>a</span></a></li>
|
||||
<li><a href="#index_b"><span>b</span></a></li>
|
||||
<li><a href="#index_c"><span>c</span></a></li>
|
||||
<li><a href="#index_e"><span>e</span></a></li>
|
||||
<li><a href="#index_f"><span>f</span></a></li>
|
||||
<li><a href="#index_g"><span>g</span></a></li>
|
||||
<li><a href="#index_i"><span>i</span></a></li>
|
||||
<li><a href="#index_k"><span>k</span></a></li>
|
||||
<li><a href="#index_l"><span>l</span></a></li>
|
||||
<li><a href="#index_m"><span>m</span></a></li>
|
||||
<li><a href="#index_n"><span>n</span></a></li>
|
||||
<li><a href="#index_p"><span>p</span></a></li>
|
||||
<li><a href="#index_q"><span>q</span></a></li>
|
||||
<li><a href="#index_s"><span>s</span></a></li>
|
||||
<li><a href="#index_~"><span>~</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Here is a list of all class members with links to the classes they belong to:
|
||||
<p>
|
||||
<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
|
||||
<li>ampl
|
||||
: <a class="el" href="classenergyCalibration.html#77b954cd513271d2cfafee6033435584">energyCalibration</a></ul>
|
||||
<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
|
||||
<li>bg_offset
|
||||
: <a class="el" href="classenergyCalibration.html#aa11f256a8b0a94c28a98d068013b327">energyCalibration</a><li>bg_slope
|
||||
: <a class="el" href="classenergyCalibration.html#9676e5cc2757c723c2262d641fb4b8b4">energyCalibration</a></ul>
|
||||
<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
|
||||
<li>calibrate()
|
||||
: <a class="el" href="classenergyCalibration.html#378daeddde40b6127ee6ed595506928c">energyCalibration</a><li>calibrateScurves()
|
||||
: <a class="el" href="classenergyCalibration.html#6f5ee6771522a31e4fe1eca143e2aa9b">energyCalibration</a><li>calibrateSpectra()
|
||||
: <a class="el" href="classenergyCalibration.html#092637f656c0b88d57797e3ebd0f3e58">energyCalibration</a><li>cs_flag
|
||||
: <a class="el" href="classenergyCalibration.html#ce0be11dcc8418db3c7c2b139a015c96">energyCalibration</a><li>cs_slope
|
||||
: <a class="el" href="classenergyCalibration.html#ca1efedbfea0ad5c9ea2d794e3fb368d">energyCalibration</a></ul>
|
||||
<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
|
||||
<li>energyCalibration()
|
||||
: <a class="el" href="classenergyCalibration.html#16f0658d2b526f52784057b2166efd22">energyCalibration</a><li>energyCalibrationFunctions()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#8c17162b89f3b2e642004e7c88a22ac2">energyCalibrationFunctions</a><li>erfFuncFluo()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#a5fbe9da48bc2ef90b699e06ea8c5111">energyCalibrationFunctions</a><li>erfFunction()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#2da1e3b9a10d23233256f8c2234f2457">energyCalibrationFunctions</a><li>erfFunctionChargeSharing()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#8d1b3d0f8b30423dad56d8ce5323a4a8">energyCalibrationFunctions</a></ul>
|
||||
<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
|
||||
<li>fit_max
|
||||
: <a class="el" href="classenergyCalibration.html#e979386a3f787ef706f4a9ec5bf41d7d">energyCalibration</a><li>fit_min
|
||||
: <a class="el" href="classenergyCalibration.html#262f574732186cdd8d3a11344d03d0bb">energyCalibration</a><li>fitFunction()
|
||||
: <a class="el" href="classenergyCalibration.html#fe1c6dc5f56d12fe06569f401da19729">energyCalibration</a><li>fitSCurve()
|
||||
: <a class="el" href="classenergyCalibration.html#0dcd8e06e31f7b70488a012db12b2bf8">energyCalibration</a><li>fitSpectrum()
|
||||
: <a class="el" href="classenergyCalibration.html#7d22b28cd2fad3d334f15f3d6dc7975a">energyCalibration</a><li>flex
|
||||
: <a class="el" href="classenergyCalibration.html#b99d770f1c9af68d591ed20847813ad1">energyCalibration</a><li>fscurve
|
||||
: <a class="el" href="classenergyCalibration.html#57706a328324c25dd9f8ba6d1486e4ce">energyCalibration</a><li>fspectrum
|
||||
: <a class="el" href="classenergyCalibration.html#2ee734ab28b78dc5786a7ba430f8baa5">energyCalibration</a><li>funcs
|
||||
: <a class="el" href="classenergyCalibration.html#e9b3307bf858331241871bde42fdd24e">energyCalibration</a></ul>
|
||||
<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
|
||||
<li>gaussChargeSharing()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#e9582e5c46d27ad25d6139d0386698f7">energyCalibrationFunctions</a><li>getFitRange()
|
||||
: <a class="el" href="classenergyCalibration.html#bfb02327a6897bd97525c01697a1ba4f">energyCalibration</a><li>getStartParameters()
|
||||
: <a class="el" href="classenergyCalibration.html#fc7411b7a3191748dfcc90f86b823bf4">energyCalibration</a></ul>
|
||||
<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
|
||||
<li>initFitFunction()
|
||||
: <a class="el" href="classenergyCalibration.html#3e84328c11772b6263224340ec924e37">energyCalibration</a></ul>
|
||||
<h3><a class="anchor" name="index_k">- k -</a></h3><ul>
|
||||
<li>kth_smallest()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#7d9a7b8d0c8ff69638a5fbb9f4c04b90">energyCalibrationFunctions</a></ul>
|
||||
<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
|
||||
<li>linearCalibration()
|
||||
: <a class="el" href="classenergyCalibration.html#c7f46f2d051f28211681e851f99d3fc4">energyCalibration</a></ul>
|
||||
<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
|
||||
<li>median()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#37f557bacb75213073c8d421cc1240f4">energyCalibrationFunctions</a></ul>
|
||||
<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
|
||||
<li>noise
|
||||
: <a class="el" href="classenergyCalibration.html#4461206397e2442c92be9151ee231ec5">energyCalibration</a></ul>
|
||||
<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
|
||||
<li>plot_flag
|
||||
: <a class="el" href="classenergyCalibration.html#4edfb157df3624be677177dec0f9555b">energyCalibration</a></ul>
|
||||
<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
|
||||
<li>quick_select()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#a3ab0e7c3c862fb51dfda78f1b09a55c">energyCalibrationFunctions</a></ul>
|
||||
<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
|
||||
<li>scurve()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#e220482622e88a46b12498b0e4d8113a">energyCalibrationFunctions</a><li>scurveFluo()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#4eba39623b518d67a63192970a78f530">energyCalibrationFunctions</a><li>setChargeSharing()
|
||||
: <a class="el" href="classenergyCalibration.html#e2809b419799e8b199944f185d4ebab8">energyCalibration</a><li>setFitRange()
|
||||
: <a class="el" href="classenergyCalibration.html#695cef5428a833d515172d987774f67b">energyCalibration</a><li>setPlotFlag()
|
||||
: <a class="el" href="classenergyCalibration.html#3d9af0857f7a68b7e4519917ea97e6be">energyCalibration</a><li>setScanSign()
|
||||
: <a class="el" href="classenergyCalibration.html#7dbf1676b30ffe90c5aa917f1b2b77ee">energyCalibration</a>, <a class="el" href="classenergyCalibrationFunctions.html#716759a1ae09ea3c841f824af3ece415">energyCalibrationFunctions</a><li>setStartParameters()
|
||||
: <a class="el" href="classenergyCalibration.html#ba156f5290f7b404d7b8ea735fd7e7bf">energyCalibration</a><li>sign
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#4fc7c435169b5bf4672cf654270097d0">energyCalibrationFunctions</a><li>spectrum()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#015eb05dc34b77642ab2a2a9f126f170">energyCalibrationFunctions</a></ul>
|
||||
<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
|
||||
<li>~energyCalibration()
|
||||
: <a class="el" href="classenergyCalibration.html#3bae2b9c26893daa8f583758509c844f">energyCalibration</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,63 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Class Members - Functions</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li id="current"><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="annotated.html"><span>Class List</span></a></li>
|
||||
<li id="current"><a href="functions.html"><span>Class Members</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="functions.html"><span>All</span></a></li>
|
||||
<li id="current"><a href="functions_func.html"><span>Functions</span></a></li>
|
||||
<li><a href="functions_vars.html"><span>Variables</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<ul>
|
||||
<li>calibrate()
|
||||
: <a class="el" href="classenergyCalibration.html#378daeddde40b6127ee6ed595506928c">energyCalibration</a><li>calibrateScurves()
|
||||
: <a class="el" href="classenergyCalibration.html#6f5ee6771522a31e4fe1eca143e2aa9b">energyCalibration</a><li>calibrateSpectra()
|
||||
: <a class="el" href="classenergyCalibration.html#092637f656c0b88d57797e3ebd0f3e58">energyCalibration</a><li>energyCalibration()
|
||||
: <a class="el" href="classenergyCalibration.html#16f0658d2b526f52784057b2166efd22">energyCalibration</a><li>energyCalibrationFunctions()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#8c17162b89f3b2e642004e7c88a22ac2">energyCalibrationFunctions</a><li>erfFuncFluo()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#a5fbe9da48bc2ef90b699e06ea8c5111">energyCalibrationFunctions</a><li>erfFunction()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#2da1e3b9a10d23233256f8c2234f2457">energyCalibrationFunctions</a><li>erfFunctionChargeSharing()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#8d1b3d0f8b30423dad56d8ce5323a4a8">energyCalibrationFunctions</a><li>fitFunction()
|
||||
: <a class="el" href="classenergyCalibration.html#fe1c6dc5f56d12fe06569f401da19729">energyCalibration</a><li>fitSCurve()
|
||||
: <a class="el" href="classenergyCalibration.html#0dcd8e06e31f7b70488a012db12b2bf8">energyCalibration</a><li>fitSpectrum()
|
||||
: <a class="el" href="classenergyCalibration.html#7d22b28cd2fad3d334f15f3d6dc7975a">energyCalibration</a><li>gaussChargeSharing()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#e9582e5c46d27ad25d6139d0386698f7">energyCalibrationFunctions</a><li>getFitRange()
|
||||
: <a class="el" href="classenergyCalibration.html#bfb02327a6897bd97525c01697a1ba4f">energyCalibration</a><li>getStartParameters()
|
||||
: <a class="el" href="classenergyCalibration.html#fc7411b7a3191748dfcc90f86b823bf4">energyCalibration</a><li>initFitFunction()
|
||||
: <a class="el" href="classenergyCalibration.html#3e84328c11772b6263224340ec924e37">energyCalibration</a><li>kth_smallest()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#7d9a7b8d0c8ff69638a5fbb9f4c04b90">energyCalibrationFunctions</a><li>linearCalibration()
|
||||
: <a class="el" href="classenergyCalibration.html#c7f46f2d051f28211681e851f99d3fc4">energyCalibration</a><li>median()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#37f557bacb75213073c8d421cc1240f4">energyCalibrationFunctions</a><li>quick_select()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#a3ab0e7c3c862fb51dfda78f1b09a55c">energyCalibrationFunctions</a><li>scurve()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#e220482622e88a46b12498b0e4d8113a">energyCalibrationFunctions</a><li>scurveFluo()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#4eba39623b518d67a63192970a78f530">energyCalibrationFunctions</a><li>setChargeSharing()
|
||||
: <a class="el" href="classenergyCalibration.html#e2809b419799e8b199944f185d4ebab8">energyCalibration</a><li>setFitRange()
|
||||
: <a class="el" href="classenergyCalibration.html#695cef5428a833d515172d987774f67b">energyCalibration</a><li>setPlotFlag()
|
||||
: <a class="el" href="classenergyCalibration.html#3d9af0857f7a68b7e4519917ea97e6be">energyCalibration</a><li>setScanSign()
|
||||
: <a class="el" href="classenergyCalibration.html#7dbf1676b30ffe90c5aa917f1b2b77ee">energyCalibration</a>, <a class="el" href="classenergyCalibrationFunctions.html#716759a1ae09ea3c841f824af3ece415">energyCalibrationFunctions</a><li>setStartParameters()
|
||||
: <a class="el" href="classenergyCalibration.html#ba156f5290f7b404d7b8ea735fd7e7bf">energyCalibration</a><li>spectrum()
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#015eb05dc34b77642ab2a2a9f126f170">energyCalibrationFunctions</a><li>~energyCalibration()
|
||||
: <a class="el" href="classenergyCalibration.html#3bae2b9c26893daa8f583758509c844f">energyCalibration</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,49 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Class Members - Variables</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li id="current"><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="annotated.html"><span>Class List</span></a></li>
|
||||
<li id="current"><a href="functions.html"><span>Class Members</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="functions.html"><span>All</span></a></li>
|
||||
<li><a href="functions_func.html"><span>Functions</span></a></li>
|
||||
<li id="current"><a href="functions_vars.html"><span>Variables</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<ul>
|
||||
<li>ampl
|
||||
: <a class="el" href="classenergyCalibration.html#77b954cd513271d2cfafee6033435584">energyCalibration</a><li>bg_offset
|
||||
: <a class="el" href="classenergyCalibration.html#aa11f256a8b0a94c28a98d068013b327">energyCalibration</a><li>bg_slope
|
||||
: <a class="el" href="classenergyCalibration.html#9676e5cc2757c723c2262d641fb4b8b4">energyCalibration</a><li>cs_flag
|
||||
: <a class="el" href="classenergyCalibration.html#ce0be11dcc8418db3c7c2b139a015c96">energyCalibration</a><li>cs_slope
|
||||
: <a class="el" href="classenergyCalibration.html#ca1efedbfea0ad5c9ea2d794e3fb368d">energyCalibration</a><li>fit_max
|
||||
: <a class="el" href="classenergyCalibration.html#e979386a3f787ef706f4a9ec5bf41d7d">energyCalibration</a><li>fit_min
|
||||
: <a class="el" href="classenergyCalibration.html#262f574732186cdd8d3a11344d03d0bb">energyCalibration</a><li>flex
|
||||
: <a class="el" href="classenergyCalibration.html#b99d770f1c9af68d591ed20847813ad1">energyCalibration</a><li>fscurve
|
||||
: <a class="el" href="classenergyCalibration.html#57706a328324c25dd9f8ba6d1486e4ce">energyCalibration</a><li>fspectrum
|
||||
: <a class="el" href="classenergyCalibration.html#2ee734ab28b78dc5786a7ba430f8baa5">energyCalibration</a><li>funcs
|
||||
: <a class="el" href="classenergyCalibration.html#e9b3307bf858331241871bde42fdd24e">energyCalibration</a><li>noise
|
||||
: <a class="el" href="classenergyCalibration.html#4461206397e2442c92be9151ee231ec5">energyCalibration</a><li>plot_flag
|
||||
: <a class="el" href="classenergyCalibration.html#4edfb157df3624be677177dec0f9555b">energyCalibration</a><li>sign
|
||||
: <a class="el" href="classenergyCalibrationFunctions.html#4fc7c435169b5bf4672cf654270097d0">energyCalibrationFunctions</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,36 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Class Members</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li id="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li id="current"><a href="globals.html"><span>File Members</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="current"><a href="globals.html"><span>All</span></a></li>
|
||||
<li><a href="globals_vars.html"><span>Variables</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
Here is a list of all file members with links to the files they belong to:
|
||||
<p>
|
||||
<ul>
|
||||
<li>conven
|
||||
: <a class="el" href="energyCalibration_8h.html#a48a6c1eb7d418c5d0618fbb161ae321">energyCalibration.h</a><li>el
|
||||
: <a class="el" href="energyCalibration_8h.html#d1db7b454cab6ae1749310d7f444849b">energyCalibration.h</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,36 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Class Members</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li id="current"><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
<li id="current"><a href="globals.html"><span>File Members</span></a></li>
|
||||
</ul></div>
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="globals.html"><span>All</span></a></li>
|
||||
<li id="current"><a href="globals_vars.html"><span>Variables</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<ul>
|
||||
<li>conven
|
||||
: <a class="el" href="energyCalibration_8h.html#a48a6c1eb7d418c5d0618fbb161ae321">energyCalibration.h</a><li>el
|
||||
: <a class="el" href="energyCalibration_8h.html#d1db7b454cab6ae1749310d7f444849b">energyCalibration.h</a></ul>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
25
slsDetectorSoftware/slsDetectorAnalysis/docs/html/index.html
Normal file
25
slsDetectorSoftware/slsDetectorAnalysis/docs/html/index.html
Normal file
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Common Root library for SLS detectors data analysis</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="current"><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<h1>Common Root library for SLS detectors data analysis</h1>
|
||||
<p>
|
||||
<h2><a class="anchor" name="intro_sec">
|
||||
Introduction</a></h2>
|
||||
We know very well s-curves etc. but at the end everybody uses different functions ;-).<h3><a class="anchor" name="mot_sec">
|
||||
Motivation</a></h3>
|
||||
It would be greate to use everybody the same functions... <hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
117
slsDetectorSoftware/slsDetectorAnalysis/docs/html/installdox
Executable file
117
slsDetectorSoftware/slsDetectorAnalysis/docs/html/installdox
Executable file
@ -0,0 +1,117 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
%subst = ( );
|
||||
$quiet = 0;
|
||||
|
||||
if (open(F,"search.cfg"))
|
||||
{
|
||||
$_=<F> ; s/[ \t\n]*$//g ; $subst{"_doc"} = $_;
|
||||
$_=<F> ; s/[ \t\n]*$//g ; $subst{"_cgi"} = $_;
|
||||
}
|
||||
|
||||
while ( @ARGV ) {
|
||||
$_ = shift @ARGV;
|
||||
if ( s/^-// ) {
|
||||
if ( /^l(.*)/ ) {
|
||||
$v = ($1 eq "") ? shift @ARGV : $1;
|
||||
($v =~ /\/$/) || ($v .= "/");
|
||||
$_ = $v;
|
||||
if ( /(.+)\@(.+)/ ) {
|
||||
if ( exists $subst{$1} ) {
|
||||
$subst{$1} = $2;
|
||||
} else {
|
||||
print STDERR "Unknown tag file $1 given with option -l\n";
|
||||
&usage();
|
||||
}
|
||||
} else {
|
||||
print STDERR "Argument $_ is invalid for option -l\n";
|
||||
&usage();
|
||||
}
|
||||
}
|
||||
elsif ( /^q/ ) {
|
||||
$quiet = 1;
|
||||
}
|
||||
elsif ( /^\?|^h/ ) {
|
||||
&usage();
|
||||
}
|
||||
else {
|
||||
print STDERR "Illegal option -$_\n";
|
||||
&usage();
|
||||
}
|
||||
}
|
||||
else {
|
||||
push (@files, $_ );
|
||||
}
|
||||
}
|
||||
|
||||
foreach $sub (keys %subst)
|
||||
{
|
||||
if ( $subst{$sub} eq "" )
|
||||
{
|
||||
print STDERR "No substitute given for tag file `$sub'\n";
|
||||
&usage();
|
||||
}
|
||||
elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" )
|
||||
{
|
||||
print "Substituting $subst{$sub} for each occurence of tag file $sub\n";
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! @files ) {
|
||||
if (opendir(D,".")) {
|
||||
foreach $file ( readdir(D) ) {
|
||||
$match = ".html";
|
||||
next if ( $file =~ /^\.\.?$/ );
|
||||
($file =~ /$match/) && (push @files, $file);
|
||||
($file =~ "tree.js") && (push @files, $file);
|
||||
}
|
||||
closedir(D);
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! @files ) {
|
||||
print STDERR "Warning: No input files given and none found!\n";
|
||||
}
|
||||
|
||||
foreach $f (@files)
|
||||
{
|
||||
if ( ! $quiet ) {
|
||||
print "Editing: $f...\n";
|
||||
}
|
||||
$oldf = $f;
|
||||
$f .= ".bak";
|
||||
unless (rename $oldf,$f) {
|
||||
print STDERR "Error: cannot rename file $oldf\n";
|
||||
exit 1;
|
||||
}
|
||||
if (open(F,"<$f")) {
|
||||
unless (open(G,">$oldf")) {
|
||||
print STDERR "Error: opening file $oldf for writing\n";
|
||||
exit 1;
|
||||
}
|
||||
if ($oldf ne "tree.js") {
|
||||
while (<F>) {
|
||||
s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g;
|
||||
print G "$_";
|
||||
}
|
||||
}
|
||||
else {
|
||||
while (<F>) {
|
||||
s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g;
|
||||
print G "$_";
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
print STDERR "Warning file $f does not exist\n";
|
||||
}
|
||||
unlink $f;
|
||||
}
|
||||
|
||||
sub usage {
|
||||
print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n";
|
||||
print STDERR "Options:\n";
|
||||
print STDERR " -l tagfile\@linkName tag file + URL or directory \n";
|
||||
print STDERR " -q Quiet mode\n\n";
|
||||
exit 1;
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>Namespace Index</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<h1>Namespace List</h1>Here is a list of all namespaces with brief descriptions:<table>
|
||||
<tr><td class="indexkey"><a class="el" href="namespacestd.html">std</a></td><td class="indexvalue"></td></tr>
|
||||
</table>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,24 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
|
||||
<title>std Namespace Reference</title>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css">
|
||||
</head><body>
|
||||
<!-- Generated by Doxygen 1.4.7 -->
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li id="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
|
||||
<li><a href="annotated.html"><span>Classes</span></a></li>
|
||||
<li><a href="files.html"><span>Files</span></a></li>
|
||||
</ul></div>
|
||||
<h1>std Namespace Reference</h1>
|
||||
<p>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr><td></td></tr>
|
||||
</table>
|
||||
<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 27 16:32:29 2012 by
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_ampl">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a77b954cd513271d2cfafee6033435584" target="_parent">ampl</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_bg_5foffset">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#aaa11f256a8b0a94c28a98d068013b327" target="_parent">bg_offset</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_bg_5fslope">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#a9676e5cc2757c723c2262d641fb4b8b4" target="_parent">bg_slope</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_calibrate">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#aa6e7624f6cafb8c3a22c821aee2c6fc4" target="_parent">calibrate</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_conven">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../energyCalibration_8h.html#aa48a6c1eb7d418c5d0618fbb161ae321" target="_parent">conven</a>
|
||||
<span class="SRScope">energyCalibration.h</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_cs_5fslope">
|
||||
<div class="SREntry">
|
||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#aca1efedbfea0ad5c9ea2d794e3fb368d" target="_parent">cs_slope</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_el">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../energyCalibration_8h.html#ad1db7b454cab6ae1749310d7f444849b" target="_parent">el</a>
|
||||
<span class="SRScope">energyCalibration.h</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_energycalibration">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="javascript:searchResults.Toggle('SR_energycalibration')">energyCalibration</a>
|
||||
<div class="SRChildren">
|
||||
<a id="Item1_c0" onkeydown="return searchResults.NavChild(event,1,0)" onkeypress="return searchResults.NavChild(event,1,0)" onkeyup="return searchResults.NavChild(event,1,0)" class="SRScope" href="../classenergyCalibration.html" target="_parent">energyCalibration</a>
|
||||
<a id="Item1_c1" onkeydown="return searchResults.NavChild(event,1,1)" onkeypress="return searchResults.NavChild(event,1,1)" onkeyup="return searchResults.NavChild(event,1,1)" class="SRScope" href="../classenergyCalibration.html#a16f0658d2b526f52784057b2166efd22" target="_parent">energyCalibration::energyCalibration()</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_energycalibration_2eh">
|
||||
<div class="SREntry">
|
||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../energyCalibration_8h.html" target="_parent">energyCalibration.h</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_energycalibrationfunctions">
|
||||
<div class="SREntry">
|
||||
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="javascript:searchResults.Toggle('SR_energycalibrationfunctions')">energyCalibrationFunctions</a>
|
||||
<div class="SRChildren">
|
||||
<a id="Item3_c0" onkeydown="return searchResults.NavChild(event,3,0)" onkeypress="return searchResults.NavChild(event,3,0)" onkeyup="return searchResults.NavChild(event,3,0)" class="SRScope" href="../classenergyCalibrationFunctions.html" target="_parent">energyCalibrationFunctions</a>
|
||||
<a id="Item3_c1" onkeydown="return searchResults.NavChild(event,3,1)" onkeypress="return searchResults.NavChild(event,3,1)" onkeyup="return searchResults.NavChild(event,3,1)" class="SRScope" href="../classenergyCalibrationFunctions.html#a8c17162b89f3b2e642004e7c88a22ac2" target="_parent">energyCalibrationFunctions::energyCalibrationFunctions()</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_erffuncfluo">
|
||||
<div class="SREntry">
|
||||
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#aa5fbe9da48bc2ef90b699e06ea8c5111" target="_parent">erfFuncFluo</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_erffunction">
|
||||
<div class="SREntry">
|
||||
<a id="Item5" onkeydown="return searchResults.Nav(event,5)" onkeypress="return searchResults.Nav(event,5)" onkeyup="return searchResults.Nav(event,5)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a2da1e3b9a10d23233256f8c2234f2457" target="_parent">erfFunction</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_erffunctionchargesharing">
|
||||
<div class="SREntry">
|
||||
<a id="Item6" onkeydown="return searchResults.Nav(event,6)" onkeypress="return searchResults.Nav(event,6)" onkeyup="return searchResults.Nav(event,6)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a8d1b3d0f8b30423dad56d8ce5323a4a8" target="_parent">erfFunctionChargeSharing</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,55 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_fit_5fmax">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#ae979386a3f787ef706f4a9ec5bf41d7d" target="_parent">fit_max</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_fit_5fmin">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#a262f574732186cdd8d3a11344d03d0bb" target="_parent">fit_min</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_fitscurve">
|
||||
<div class="SREntry">
|
||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#a0dcd8e06e31f7b70488a012db12b2bf8" target="_parent">fitSCurve</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_flex">
|
||||
<div class="SREntry">
|
||||
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="../classenergyCalibration.html#ab99d770f1c9af68d591ed20847813ad1" target="_parent">flex</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_fscurve">
|
||||
<div class="SREntry">
|
||||
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="../classenergyCalibration.html#a57706a328324c25dd9f8ba6d1486e4ce" target="_parent">fscurve</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_funcs">
|
||||
<div class="SREntry">
|
||||
<a id="Item5" onkeydown="return searchResults.Nav(event,5)" onkeypress="return searchResults.Nav(event,5)" onkeyup="return searchResults.Nav(event,5)" class="SRSymbol" href="../classenergyCalibration.html#ae9b3307bf858331241871bde42fdd24e" target="_parent">funcs</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_gausschargesharing">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#ae9582e5c46d27ad25d6139d0386698f7" target="_parent">gaussChargeSharing</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_getfitrange">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#abfb02327a6897bd97525c01697a1ba4f" target="_parent">getFitRange</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_getstartparameters">
|
||||
<div class="SREntry">
|
||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#afc7411b7a3191748dfcc90f86b823bf4" target="_parent">getStartParameters</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_kth_5fsmallest">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a7d9a7b8d0c8ff69638a5fbb9f4c04b90" target="_parent">kth_smallest</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_linearcalibration">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#ac7f46f2d051f28211681e851f99d3fc4" target="_parent">linearCalibration</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_median">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a37f557bacb75213073c8d421cc1240f4" target="_parent">median</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_noise">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a4461206397e2442c92be9151ee231ec5" target="_parent">noise</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_plot_5fflag">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a4edfb157df3624be677177dec0f9555b" target="_parent">plot_flag</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_quick_5fselect">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#aa3ab0e7c3c862fb51dfda78f1b09a55c" target="_parent">quick_select</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,70 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_scurve">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#ae220482622e88a46b12498b0e4d8113a" target="_parent">scurve</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_scurvefluo">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a4eba39623b518d67a63192970a78f530" target="_parent">scurveFluo</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_setfitrange">
|
||||
<div class="SREntry">
|
||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#a695cef5428a833d515172d987774f67b" target="_parent">setFitRange</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_setplotflag">
|
||||
<div class="SREntry">
|
||||
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="../classenergyCalibration.html#a3d9af0857f7a68b7e4519917ea97e6be" target="_parent">setPlotFlag</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_setscansign">
|
||||
<div class="SREntry">
|
||||
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="javascript:searchResults.Toggle('SR_setscansign')">setScanSign</a>
|
||||
<div class="SRChildren">
|
||||
<a id="Item4_c0" onkeydown="return searchResults.NavChild(event,4,0)" onkeypress="return searchResults.NavChild(event,4,0)" onkeyup="return searchResults.NavChild(event,4,0)" class="SRScope" href="../classenergyCalibrationFunctions.html#a716759a1ae09ea3c841f824af3ece415" target="_parent">energyCalibrationFunctions::setScanSign()</a>
|
||||
<a id="Item4_c1" onkeydown="return searchResults.NavChild(event,4,1)" onkeypress="return searchResults.NavChild(event,4,1)" onkeyup="return searchResults.NavChild(event,4,1)" class="SRScope" href="../classenergyCalibration.html#a7dbf1676b30ffe90c5aa917f1b2b77ee" target="_parent">energyCalibration::setScanSign()</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_setstartparameters">
|
||||
<div class="SREntry">
|
||||
<a id="Item5" onkeydown="return searchResults.Nav(event,5)" onkeypress="return searchResults.Nav(event,5)" onkeyup="return searchResults.Nav(event,5)" class="SRSymbol" href="../classenergyCalibration.html#aba156f5290f7b404d7b8ea735fd7e7bf" target="_parent">setStartParameters</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_sign">
|
||||
<div class="SREntry">
|
||||
<a id="Item6" onkeydown="return searchResults.Nav(event,6)" onkeypress="return searchResults.Nav(event,6)" onkeyup="return searchResults.Nav(event,6)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a4fc7c435169b5bf4672cf654270097d0" target="_parent">sign</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_spectrum">
|
||||
<div class="SREntry">
|
||||
<a id="Item7" onkeydown="return searchResults.Nav(event,7)" onkeypress="return searchResults.Nav(event,7)" onkeyup="return searchResults.Nav(event,7)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a015eb05dc34b77642ab2a2a9f126f170" target="_parent">spectrum</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR__7eenergycalibration">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a3bae2b9c26893daa8f583758509c844f" target="_parent">~energyCalibration</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,29 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_energycalibration">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html" target="_parent">energyCalibration</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_energycalibrationfunctions">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibrationFunctions.html" target="_parent">energyCalibrationFunctions</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
After Width: | Height: | Size: 273 B |
@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_energycalibration_2eh">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../energyCalibration_8h.html" target="_parent">energyCalibration.h</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_calibrate">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#aa6e7624f6cafb8c3a22c821aee2c6fc4" target="_parent">calibrate</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_energycalibration">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a16f0658d2b526f52784057b2166efd22" target="_parent">energyCalibration</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_energycalibrationfunctions">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a8c17162b89f3b2e642004e7c88a22ac2" target="_parent">energyCalibrationFunctions</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_erffuncfluo">
|
||||
<div class="SREntry">
|
||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#aa5fbe9da48bc2ef90b699e06ea8c5111" target="_parent">erfFuncFluo</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_erffunction">
|
||||
<div class="SREntry">
|
||||
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a2da1e3b9a10d23233256f8c2234f2457" target="_parent">erfFunction</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_erffunctionchargesharing">
|
||||
<div class="SREntry">
|
||||
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a8d1b3d0f8b30423dad56d8ce5323a4a8" target="_parent">erfFunctionChargeSharing</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_fitscurve">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a0dcd8e06e31f7b70488a012db12b2bf8" target="_parent">fitSCurve</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_gausschargesharing">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#ae9582e5c46d27ad25d6139d0386698f7" target="_parent">gaussChargeSharing</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_getfitrange">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#abfb02327a6897bd97525c01697a1ba4f" target="_parent">getFitRange</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_getstartparameters">
|
||||
<div class="SREntry">
|
||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#afc7411b7a3191748dfcc90f86b823bf4" target="_parent">getStartParameters</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_kth_5fsmallest">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a7d9a7b8d0c8ff69638a5fbb9f4c04b90" target="_parent">kth_smallest</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_linearcalibration">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#ac7f46f2d051f28211681e851f99d3fc4" target="_parent">linearCalibration</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_median">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a37f557bacb75213073c8d421cc1240f4" target="_parent">median</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_quick_5fselect">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#aa3ab0e7c3c862fb51dfda78f1b09a55c" target="_parent">quick_select</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_scurve">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#ae220482622e88a46b12498b0e4d8113a" target="_parent">scurve</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_scurvefluo">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a4eba39623b518d67a63192970a78f530" target="_parent">scurveFluo</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_setfitrange">
|
||||
<div class="SREntry">
|
||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#a695cef5428a833d515172d987774f67b" target="_parent">setFitRange</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_setplotflag">
|
||||
<div class="SREntry">
|
||||
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="../classenergyCalibration.html#a3d9af0857f7a68b7e4519917ea97e6be" target="_parent">setPlotFlag</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_setscansign">
|
||||
<div class="SREntry">
|
||||
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="javascript:searchResults.Toggle('SR_setscansign')">setScanSign</a>
|
||||
<div class="SRChildren">
|
||||
<a id="Item4_c0" onkeydown="return searchResults.NavChild(event,4,0)" onkeypress="return searchResults.NavChild(event,4,0)" onkeyup="return searchResults.NavChild(event,4,0)" class="SRScope" href="../classenergyCalibrationFunctions.html#a716759a1ae09ea3c841f824af3ece415" target="_parent">energyCalibrationFunctions::setScanSign()</a>
|
||||
<a id="Item4_c1" onkeydown="return searchResults.NavChild(event,4,1)" onkeypress="return searchResults.NavChild(event,4,1)" onkeyup="return searchResults.NavChild(event,4,1)" class="SRScope" href="../classenergyCalibration.html#a7dbf1676b30ffe90c5aa917f1b2b77ee" target="_parent">energyCalibration::setScanSign()</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_setstartparameters">
|
||||
<div class="SREntry">
|
||||
<a id="Item5" onkeydown="return searchResults.Nav(event,5)" onkeypress="return searchResults.Nav(event,5)" onkeyup="return searchResults.Nav(event,5)" class="SRSymbol" href="../classenergyCalibration.html#aba156f5290f7b404d7b8ea735fd7e7bf" target="_parent">setStartParameters</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_spectrum">
|
||||
<div class="SREntry">
|
||||
<a id="Item6" onkeydown="return searchResults.Nav(event,6)" onkeypress="return searchResults.Nav(event,6)" onkeyup="return searchResults.Nav(event,6)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a015eb05dc34b77642ab2a2a9f126f170" target="_parent">spectrum</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR__7eenergycalibration">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a3bae2b9c26893daa8f583758509c844f" target="_parent">~energyCalibration</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,198 @@
|
||||
/*---------------- Search Box */
|
||||
|
||||
#MSearchBox {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
border: none;
|
||||
border: 1px solid #84B0C7;
|
||||
white-space: nowrap;
|
||||
-moz-border-radius: 8px;
|
||||
-webkit-border-top-left-radius: 8px;
|
||||
-webkit-border-top-right-radius: 8px;
|
||||
-webkit-border-bottom-left-radius: 8px;
|
||||
-webkit-border-bottom-right-radius: 8px;
|
||||
}
|
||||
#MSearchField {
|
||||
font: 9pt Arial, Verdana, sans-serif;
|
||||
color: #999999;
|
||||
background-color: #FFFFFF;
|
||||
font-style: normal;
|
||||
cursor: text;
|
||||
padding: 1px 1px;
|
||||
margin: 0px 6px 0px 0px;
|
||||
border: none;
|
||||
outline: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.MSearchBoxActive #MSearchField {
|
||||
color: #000000;
|
||||
}
|
||||
#MSearchSelect {
|
||||
float : none;
|
||||
display : inline;
|
||||
background : none;
|
||||
font: 9pt Verdana, sans-serif;
|
||||
border: none;
|
||||
margin: 0px 0px 0px 6px;
|
||||
vertical-align: middle;
|
||||
padding: 0px 0px;
|
||||
}
|
||||
|
||||
#MSearchClose {
|
||||
float : none;
|
||||
display : none;
|
||||
background : none;
|
||||
border: none;
|
||||
margin: 0px 4px 0px 0px;
|
||||
padding: 0px 0px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#MSearchCloseImg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.MSearchBoxLeft {
|
||||
display: block;
|
||||
text-align: left;
|
||||
float: left;
|
||||
margin-left: 6px;
|
||||
}
|
||||
.MSearchBoxRight {
|
||||
display: block;
|
||||
float: right;
|
||||
text-align: right;
|
||||
margin-right: 6px;
|
||||
}
|
||||
.MSearchBoxSpacer {
|
||||
font-size: 0px;
|
||||
clear: both;
|
||||
}
|
||||
.MSearchBoxRow {
|
||||
font-size: 0px;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/*---------------- Search filter selection */
|
||||
|
||||
#MSearchSelectWindow {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
border: 1px solid #A0A0A0;
|
||||
background-color: #FAFAFA;
|
||||
z-index: 1;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.SelectItem {
|
||||
font: 8pt Arial, Verdana, sans-serif;
|
||||
padding-left: 2px;
|
||||
padding-right: 12px;
|
||||
border: 0px;
|
||||
}
|
||||
span.SelectionMark {
|
||||
margin-right: 4px;
|
||||
font-family: monospace;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
a.SelectItem {
|
||||
display: block;
|
||||
outline-style: none;
|
||||
color: #000000;
|
||||
text-decoration: none;
|
||||
padding-left: 6px;
|
||||
padding-right: 12px;
|
||||
}
|
||||
a.SelectItem:focus,
|
||||
a.SelectItem:active {
|
||||
color: #000000;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
a.SelectItem:hover {
|
||||
color: #FFFFFF;
|
||||
background-color: #2A50E4;
|
||||
outline-style: none;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*---------------- Search results window */
|
||||
|
||||
iframe#MSearchResults {
|
||||
width: 60ex;
|
||||
height: 15em;
|
||||
}
|
||||
#MSearchResultsWindow {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0; top: 0;
|
||||
border: 1px solid #000000;
|
||||
background-color: #EEF3F5;
|
||||
}
|
||||
|
||||
/* ----------------------------------- */
|
||||
|
||||
|
||||
#SRIndex {
|
||||
clear:both;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.SREntry {
|
||||
font-size: 10pt;
|
||||
padding-left: 1ex;
|
||||
}
|
||||
.SRPage .SREntry {
|
||||
font-size: 8pt;
|
||||
padding: 1px 5px;
|
||||
}
|
||||
body.SRPage {
|
||||
margin: 5px 2px;
|
||||
}
|
||||
|
||||
.SRChildren {
|
||||
padding-left: 3ex; padding-bottom: .5em
|
||||
}
|
||||
.SRPage .SRChildren {
|
||||
display: none;
|
||||
}
|
||||
.SRSymbol {
|
||||
font-weight: bold; color: #153788;
|
||||
font-family: Arial, Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a.SRScope {
|
||||
display: block;
|
||||
color: #153788;
|
||||
font-family: Arial, Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a.SRSymbol:focus, a.SRSymbol:active,
|
||||
a.SRScope:focus, a.SRScope:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.SRPage .SRStatus {
|
||||
padding: 2px 5px;
|
||||
font-size: 8pt;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.SRResult {
|
||||
display: none;
|
||||
}
|
||||
|
@ -0,0 +1,734 @@
|
||||
// Search script generated by doxygen
|
||||
// Copyright (C) 2009 by Dimitri van Heesch.
|
||||
|
||||
// The code in this file is loosly based on main.js, part of Natural Docs,
|
||||
// which is Copyright (C) 2003-2008 Greg Valure
|
||||
// Natural Docs is licensed under the GPL.
|
||||
|
||||
var indexSectionsWithContent =
|
||||
{
|
||||
0: "000000000000000000000000000000000000000000000000000000000000000001110111000111101101000000000010",
|
||||
1: "000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000",
|
||||
2: "000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000",
|
||||
3: "000000000000000000000000000000000000000000000000000000000000000000010111000111000101000000000010",
|
||||
4: "000000000000000000000000000000000000000000000000000000000000000001110110000000101001000000000000"
|
||||
};
|
||||
|
||||
var indexSectionNames =
|
||||
{
|
||||
0: "all",
|
||||
1: "classes",
|
||||
2: "files",
|
||||
3: "functions",
|
||||
4: "variables"
|
||||
};
|
||||
|
||||
function convertToId(search)
|
||||
{
|
||||
var result = '';
|
||||
for (i=0;i<search.length;i++)
|
||||
{
|
||||
var c = search.charAt(i);
|
||||
var cn = c.charCodeAt(0);
|
||||
if (c.match(/[a-z0-9]/))
|
||||
{
|
||||
result+=c;
|
||||
}
|
||||
else if (cn<16)
|
||||
{
|
||||
result+="_0"+cn.toString(16);
|
||||
}
|
||||
else
|
||||
{
|
||||
result+="_"+cn.toString(16);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function getXPos(item)
|
||||
{
|
||||
var x = 0;
|
||||
if (item.offsetWidth)
|
||||
{
|
||||
while (item && item!=document.body)
|
||||
{
|
||||
x += item.offsetLeft;
|
||||
item = item.offsetParent;
|
||||
}
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
function getYPos(item)
|
||||
{
|
||||
var y = 0;
|
||||
if (item.offsetWidth)
|
||||
{
|
||||
while (item && item!=document.body)
|
||||
{
|
||||
y += item.offsetTop;
|
||||
item = item.offsetParent;
|
||||
}
|
||||
}
|
||||
return y;
|
||||
}
|
||||
|
||||
/* A class handling everything associated with the search panel.
|
||||
|
||||
Parameters:
|
||||
name - The name of the global variable that will be
|
||||
storing this instance. Is needed to be able to set timeouts.
|
||||
resultPath - path to use for external files
|
||||
*/
|
||||
function SearchBox(name, resultsPath, inFrame, label)
|
||||
{
|
||||
if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
|
||||
|
||||
// ---------- Instance variables
|
||||
this.name = name;
|
||||
this.resultsPath = resultsPath;
|
||||
this.keyTimeout = 0;
|
||||
this.keyTimeoutLength = 500;
|
||||
this.closeSelectionTimeout = 300;
|
||||
this.lastSearchValue = "";
|
||||
this.lastResultsPage = "";
|
||||
this.hideTimeout = 0;
|
||||
this.searchIndex = 0;
|
||||
this.searchActive = false;
|
||||
this.insideFrame = inFrame;
|
||||
this.searchLabel = label;
|
||||
|
||||
// ----------- DOM Elements
|
||||
|
||||
this.DOMSearchField = function()
|
||||
{ return document.getElementById("MSearchField"); }
|
||||
|
||||
this.DOMSearchSelect = function()
|
||||
{ return document.getElementById("MSearchSelect"); }
|
||||
|
||||
this.DOMSearchSelectWindow = function()
|
||||
{ return document.getElementById("MSearchSelectWindow"); }
|
||||
|
||||
this.DOMPopupSearchResults = function()
|
||||
{ return document.getElementById("MSearchResults"); }
|
||||
|
||||
this.DOMPopupSearchResultsWindow = function()
|
||||
{ return document.getElementById("MSearchResultsWindow"); }
|
||||
|
||||
this.DOMSearchClose = function()
|
||||
{ return document.getElementById("MSearchClose"); }
|
||||
|
||||
this.DOMSearchBox = function()
|
||||
{ return document.getElementById("MSearchBox"); }
|
||||
|
||||
// ------------ Event Handlers
|
||||
|
||||
// Called when focus is added or removed from the search field.
|
||||
this.OnSearchFieldFocus = function(isActive)
|
||||
{
|
||||
this.Activate(isActive);
|
||||
}
|
||||
|
||||
this.OnSearchSelectShow = function()
|
||||
{
|
||||
var searchSelectWindow = this.DOMSearchSelectWindow();
|
||||
var searchField = this.DOMSearchSelect();
|
||||
|
||||
if (this.insideFrame)
|
||||
{
|
||||
var left = getXPos(searchField);
|
||||
var top = getYPos(searchField);
|
||||
left += searchField.offsetWidth + 6;
|
||||
top += searchField.offsetHeight;
|
||||
|
||||
// show search selection popup
|
||||
searchSelectWindow.style.display='block';
|
||||
left -= searchSelectWindow.offsetWidth;
|
||||
searchSelectWindow.style.left = left + 'px';
|
||||
searchSelectWindow.style.top = top + 'px';
|
||||
}
|
||||
else
|
||||
{
|
||||
var left = getXPos(searchField);
|
||||
var top = getYPos(searchField);
|
||||
top += searchField.offsetHeight;
|
||||
|
||||
// show search selection popup
|
||||
searchSelectWindow.style.display='block';
|
||||
searchSelectWindow.style.left = left + 'px';
|
||||
searchSelectWindow.style.top = top + 'px';
|
||||
}
|
||||
|
||||
// stop selection hide timer
|
||||
if (this.hideTimeout)
|
||||
{
|
||||
clearTimeout(this.hideTimeout);
|
||||
this.hideTimeout=0;
|
||||
}
|
||||
return false; // to avoid "image drag" default event
|
||||
}
|
||||
|
||||
this.OnSearchSelectHide = function()
|
||||
{
|
||||
this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
|
||||
this.closeSelectionTimeout);
|
||||
}
|
||||
|
||||
// Called when the content of the search field is changed.
|
||||
this.OnSearchFieldChange = function(evt)
|
||||
{
|
||||
if (this.keyTimeout) // kill running timer
|
||||
{
|
||||
clearTimeout(this.keyTimeout);
|
||||
this.keyTimeout = 0;
|
||||
}
|
||||
|
||||
var e = (evt) ? evt : window.event; // for IE
|
||||
if (e.keyCode==40 || e.keyCode==13)
|
||||
{
|
||||
if (e.shiftKey==1)
|
||||
{
|
||||
this.OnSearchSelectShow();
|
||||
var win=this.DOMSearchSelectWindow();
|
||||
for (i=0;i<win.childNodes.length;i++)
|
||||
{
|
||||
var child = win.childNodes[i]; // get span within a
|
||||
if (child.className=='SelectItem')
|
||||
{
|
||||
child.focus();
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (window.frames.MSearchResults.searchResults)
|
||||
{
|
||||
var elem = window.frames.MSearchResults.searchResults.NavNext(0);
|
||||
if (elem) elem.focus();
|
||||
}
|
||||
}
|
||||
else if (e.keyCode==27) // Escape out of the search field
|
||||
{
|
||||
this.DOMSearchField().blur();
|
||||
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
||||
this.DOMSearchClose().style.display = 'none';
|
||||
this.lastSearchValue = '';
|
||||
this.Activate(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// strip whitespaces
|
||||
var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
|
||||
|
||||
if (searchValue != this.lastSearchValue) // search value has changed
|
||||
{
|
||||
if (searchValue != "") // non-empty search
|
||||
{
|
||||
// set timer for search update
|
||||
this.keyTimeout = setTimeout(this.name + '.Search()',
|
||||
this.keyTimeoutLength);
|
||||
}
|
||||
else // empty search field
|
||||
{
|
||||
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
||||
this.DOMSearchClose().style.display = 'none';
|
||||
this.lastSearchValue = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.SelectItemCount = function(id)
|
||||
{
|
||||
var count=0;
|
||||
var win=this.DOMSearchSelectWindow();
|
||||
for (i=0;i<win.childNodes.length;i++)
|
||||
{
|
||||
var child = win.childNodes[i]; // get span within a
|
||||
if (child.className=='SelectItem')
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
this.SelectItemSet = function(id)
|
||||
{
|
||||
var i,j=0;
|
||||
var win=this.DOMSearchSelectWindow();
|
||||
for (i=0;i<win.childNodes.length;i++)
|
||||
{
|
||||
var child = win.childNodes[i]; // get span within a
|
||||
if (child.className=='SelectItem')
|
||||
{
|
||||
var node = child.firstChild;
|
||||
if (j==id)
|
||||
{
|
||||
node.innerHTML='•';
|
||||
}
|
||||
else
|
||||
{
|
||||
node.innerHTML=' ';
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Called when an search filter selection is made.
|
||||
// set item with index id as the active item
|
||||
this.OnSelectItem = function(id)
|
||||
{
|
||||
this.searchIndex = id;
|
||||
this.SelectItemSet(id);
|
||||
var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
|
||||
if (searchValue!="" && this.searchActive) // something was found -> do a search
|
||||
{
|
||||
this.Search();
|
||||
}
|
||||
}
|
||||
|
||||
this.OnSearchSelectKey = function(evt)
|
||||
{
|
||||
var e = (evt) ? evt : window.event; // for IE
|
||||
if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
|
||||
{
|
||||
this.searchIndex++;
|
||||
this.OnSelectItem(this.searchIndex);
|
||||
}
|
||||
else if (e.keyCode==38 && this.searchIndex>0) // Up
|
||||
{
|
||||
this.searchIndex--;
|
||||
this.OnSelectItem(this.searchIndex);
|
||||
}
|
||||
else if (e.keyCode==13 || e.keyCode==27)
|
||||
{
|
||||
this.OnSelectItem(this.searchIndex);
|
||||
this.CloseSelectionWindow();
|
||||
this.DOMSearchField().focus();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// --------- Actions
|
||||
|
||||
// Closes the results window.
|
||||
this.CloseResultsWindow = function()
|
||||
{
|
||||
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
||||
this.DOMSearchClose().style.display = 'none';
|
||||
this.Activate(false);
|
||||
}
|
||||
|
||||
this.CloseSelectionWindow = function()
|
||||
{
|
||||
this.DOMSearchSelectWindow().style.display = 'none';
|
||||
}
|
||||
|
||||
// Performs a search.
|
||||
this.Search = function()
|
||||
{
|
||||
this.keyTimeout = 0;
|
||||
|
||||
// strip leading whitespace
|
||||
var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
|
||||
|
||||
var code = searchValue.toLowerCase().charCodeAt(0);
|
||||
var hexCode;
|
||||
if (code<16)
|
||||
{
|
||||
hexCode="0"+code.toString(16);
|
||||
}
|
||||
else
|
||||
{
|
||||
hexCode=code.toString(16);
|
||||
}
|
||||
|
||||
var resultsPage;
|
||||
var resultsPageWithSearch;
|
||||
var hasResultsPage;
|
||||
|
||||
if (indexSectionsWithContent[this.searchIndex].charAt(code-32) == '1')
|
||||
{
|
||||
resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
|
||||
resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
|
||||
hasResultsPage = true;
|
||||
}
|
||||
else // nothing available for this search term
|
||||
{
|
||||
resultsPage = this.resultsPath + '/nomatches.html';
|
||||
resultsPageWithSearch = resultsPage;
|
||||
hasResultsPage = false;
|
||||
}
|
||||
|
||||
window.frames.MSearchResults.location.href = resultsPageWithSearch;
|
||||
var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
|
||||
|
||||
if (domPopupSearchResultsWindow.style.display!='block')
|
||||
{
|
||||
var domSearchBox = this.DOMSearchBox();
|
||||
this.DOMSearchClose().style.display = 'inline';
|
||||
if (this.insideFrame)
|
||||
{
|
||||
var domPopupSearchResults = this.DOMPopupSearchResults();
|
||||
domPopupSearchResultsWindow.style.position = 'relative';
|
||||
domPopupSearchResultsWindow.style.display = 'block';
|
||||
var width = document.body.clientWidth - 8; // the -8 is for IE :-(
|
||||
domPopupSearchResultsWindow.style.width = width + 'px';
|
||||
domPopupSearchResults.style.width = width + 'px';
|
||||
}
|
||||
else
|
||||
{
|
||||
var domPopupSearchResults = this.DOMPopupSearchResults();
|
||||
var left = getXPos(domSearchBox) + domSearchBox.offsetWidth;
|
||||
var top = getYPos(domSearchBox) + domSearchBox.offsetHeight + 1;
|
||||
domPopupSearchResultsWindow.style.display = 'block';
|
||||
left -= domPopupSearchResults.offsetWidth;
|
||||
domPopupSearchResultsWindow.style.top = top + 'px';
|
||||
domPopupSearchResultsWindow.style.left = left + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
this.lastSearchValue = searchValue;
|
||||
this.lastResultsPage = resultsPage;
|
||||
}
|
||||
|
||||
// -------- Activation Functions
|
||||
|
||||
// Activates or deactivates the search panel, resetting things to
|
||||
// their default values if necessary.
|
||||
this.Activate = function(isActive)
|
||||
{
|
||||
if (isActive || // open it
|
||||
this.DOMPopupSearchResultsWindow().style.display == 'block'
|
||||
)
|
||||
{
|
||||
this.DOMSearchBox().className = 'MSearchBoxActive';
|
||||
|
||||
var searchField = this.DOMSearchField();
|
||||
|
||||
if (searchField.value == this.searchLabel) // clear "Search" term upon entry
|
||||
{
|
||||
searchField.value = '';
|
||||
this.searchActive = true;
|
||||
}
|
||||
}
|
||||
else if (!isActive) // directly remove the panel
|
||||
{
|
||||
this.DOMSearchBox().className = 'MSearchBoxInactive';
|
||||
this.DOMSearchField().value = this.searchLabel;
|
||||
this.searchActive = false;
|
||||
this.lastSearchValue = ''
|
||||
this.lastResultsPage = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
// The class that handles everything on the search results page.
|
||||
function SearchResults(name)
|
||||
{
|
||||
// The number of matches from the last run of <Search()>.
|
||||
this.lastMatchCount = 0;
|
||||
this.lastKey = 0;
|
||||
this.repeatOn = false;
|
||||
|
||||
// Toggles the visibility of the passed element ID.
|
||||
this.FindChildElement = function(id)
|
||||
{
|
||||
var parentElement = document.getElementById(id);
|
||||
var element = parentElement.firstChild;
|
||||
|
||||
while (element && element!=parentElement)
|
||||
{
|
||||
if (element.nodeName == 'DIV' && element.className == 'SRChildren')
|
||||
{
|
||||
return element;
|
||||
}
|
||||
|
||||
if (element.nodeName == 'DIV' && element.hasChildNodes())
|
||||
{
|
||||
element = element.firstChild;
|
||||
}
|
||||
else if (element.nextSibling)
|
||||
{
|
||||
element = element.nextSibling;
|
||||
}
|
||||
else
|
||||
{
|
||||
do
|
||||
{
|
||||
element = element.parentNode;
|
||||
}
|
||||
while (element && element!=parentElement && !element.nextSibling);
|
||||
|
||||
if (element && element!=parentElement)
|
||||
{
|
||||
element = element.nextSibling;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.Toggle = function(id)
|
||||
{
|
||||
var element = this.FindChildElement(id);
|
||||
if (element)
|
||||
{
|
||||
if (element.style.display == 'block')
|
||||
{
|
||||
element.style.display = 'none';
|
||||
}
|
||||
else
|
||||
{
|
||||
element.style.display = 'block';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Searches for the passed string. If there is no parameter,
|
||||
// it takes it from the URL query.
|
||||
//
|
||||
// Always returns true, since other documents may try to call it
|
||||
// and that may or may not be possible.
|
||||
this.Search = function(search)
|
||||
{
|
||||
if (!search) // get search word from URL
|
||||
{
|
||||
search = window.location.search;
|
||||
search = search.substring(1); // Remove the leading '?'
|
||||
search = unescape(search);
|
||||
}
|
||||
|
||||
search = search.replace(/^ +/, ""); // strip leading spaces
|
||||
search = search.replace(/ +$/, ""); // strip trailing spaces
|
||||
search = search.toLowerCase();
|
||||
search = convertToId(search);
|
||||
|
||||
var resultRows = document.getElementsByTagName("div");
|
||||
var matches = 0;
|
||||
|
||||
var i = 0;
|
||||
while (i < resultRows.length)
|
||||
{
|
||||
var row = resultRows.item(i);
|
||||
if (row.className == "SRResult")
|
||||
{
|
||||
var rowMatchName = row.id.toLowerCase();
|
||||
rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
|
||||
|
||||
if (search.length<=rowMatchName.length &&
|
||||
rowMatchName.substr(0, search.length)==search)
|
||||
{
|
||||
row.style.display = 'block';
|
||||
matches++;
|
||||
}
|
||||
else
|
||||
{
|
||||
row.style.display = 'none';
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
document.getElementById("Searching").style.display='none';
|
||||
if (matches == 0) // no results
|
||||
{
|
||||
document.getElementById("NoMatches").style.display='block';
|
||||
}
|
||||
else // at least one result
|
||||
{
|
||||
document.getElementById("NoMatches").style.display='none';
|
||||
}
|
||||
this.lastMatchCount = matches;
|
||||
return true;
|
||||
}
|
||||
|
||||
// return the first item with index index or higher that is visible
|
||||
this.NavNext = function(index)
|
||||
{
|
||||
var focusItem;
|
||||
while (1)
|
||||
{
|
||||
var focusName = 'Item'+index;
|
||||
focusItem = document.getElementById(focusName);
|
||||
if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (!focusItem) // last element
|
||||
{
|
||||
break;
|
||||
}
|
||||
focusItem=null;
|
||||
index++;
|
||||
}
|
||||
return focusItem;
|
||||
}
|
||||
|
||||
this.NavPrev = function(index)
|
||||
{
|
||||
var focusItem;
|
||||
while (1)
|
||||
{
|
||||
var focusName = 'Item'+index;
|
||||
focusItem = document.getElementById(focusName);
|
||||
if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (!focusItem) // last element
|
||||
{
|
||||
break;
|
||||
}
|
||||
focusItem=null;
|
||||
index--;
|
||||
}
|
||||
return focusItem;
|
||||
}
|
||||
|
||||
this.ProcessKeys = function(e)
|
||||
{
|
||||
if (e.type == "keydown")
|
||||
{
|
||||
this.repeatOn = false;
|
||||
this.lastKey = e.keyCode;
|
||||
}
|
||||
else if (e.type == "keypress")
|
||||
{
|
||||
if (!this.repeatOn)
|
||||
{
|
||||
if (this.lastKey) this.repeatOn = true;
|
||||
return false; // ignore first keypress after keydown
|
||||
}
|
||||
}
|
||||
else if (e.type == "keyup")
|
||||
{
|
||||
this.lastKey = 0;
|
||||
this.repeatOn = false;
|
||||
}
|
||||
return this.lastKey!=0;
|
||||
}
|
||||
|
||||
this.Nav = function(evt,itemIndex)
|
||||
{
|
||||
var e = (evt) ? evt : window.event; // for IE
|
||||
if (e.keyCode==13) return true;
|
||||
if (!this.ProcessKeys(e)) return false;
|
||||
|
||||
if (this.lastKey==38) // Up
|
||||
{
|
||||
var newIndex = itemIndex-1;
|
||||
var focusItem = this.NavPrev(newIndex);
|
||||
if (focusItem)
|
||||
{
|
||||
var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
|
||||
if (child && child.style.display == 'block') // children visible
|
||||
{
|
||||
var n=0;
|
||||
var tmpElem;
|
||||
while (1) // search for last child
|
||||
{
|
||||
tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
|
||||
if (tmpElem)
|
||||
{
|
||||
focusItem = tmpElem;
|
||||
}
|
||||
else // found it!
|
||||
{
|
||||
break;
|
||||
}
|
||||
n++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (focusItem)
|
||||
{
|
||||
focusItem.focus();
|
||||
}
|
||||
else // return focus to search field
|
||||
{
|
||||
parent.document.getElementById("MSearchField").focus();
|
||||
}
|
||||
}
|
||||
else if (this.lastKey==40) // Down
|
||||
{
|
||||
var newIndex = itemIndex+1;
|
||||
var focusItem;
|
||||
var item = document.getElementById('Item'+itemIndex);
|
||||
var elem = this.FindChildElement(item.parentNode.parentNode.id);
|
||||
if (elem && elem.style.display == 'block') // children visible
|
||||
{
|
||||
focusItem = document.getElementById('Item'+itemIndex+'_c0');
|
||||
}
|
||||
if (!focusItem) focusItem = this.NavNext(newIndex);
|
||||
if (focusItem) focusItem.focus();
|
||||
}
|
||||
else if (this.lastKey==39) // Right
|
||||
{
|
||||
var item = document.getElementById('Item'+itemIndex);
|
||||
var elem = this.FindChildElement(item.parentNode.parentNode.id);
|
||||
if (elem) elem.style.display = 'block';
|
||||
}
|
||||
else if (this.lastKey==37) // Left
|
||||
{
|
||||
var item = document.getElementById('Item'+itemIndex);
|
||||
var elem = this.FindChildElement(item.parentNode.parentNode.id);
|
||||
if (elem) elem.style.display = 'none';
|
||||
}
|
||||
else if (this.lastKey==27) // Escape
|
||||
{
|
||||
parent.searchBox.CloseResultsWindow();
|
||||
parent.document.getElementById("MSearchField").focus();
|
||||
}
|
||||
else if (this.lastKey==13) // Enter
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
this.NavChild = function(evt,itemIndex,childIndex)
|
||||
{
|
||||
var e = (evt) ? evt : window.event; // for IE
|
||||
if (e.keyCode==13) return true;
|
||||
if (!this.ProcessKeys(e)) return false;
|
||||
|
||||
if (this.lastKey==38) // Up
|
||||
{
|
||||
if (childIndex>0)
|
||||
{
|
||||
var newIndex = childIndex-1;
|
||||
document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
|
||||
}
|
||||
else // already at first child, jump to parent
|
||||
{
|
||||
document.getElementById('Item'+itemIndex).focus();
|
||||
}
|
||||
}
|
||||
else if (this.lastKey==40) // Down
|
||||
{
|
||||
var newIndex = childIndex+1;
|
||||
var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
|
||||
if (!elem) // last child, jump to parent next parent
|
||||
{
|
||||
elem = this.NavNext(itemIndex+1);
|
||||
}
|
||||
if (elem)
|
||||
{
|
||||
elem.focus();
|
||||
}
|
||||
}
|
||||
else if (this.lastKey==27) // Escape
|
||||
{
|
||||
parent.searchBox.CloseResultsWindow();
|
||||
parent.document.getElementById("MSearchField").focus();
|
||||
}
|
||||
else if (this.lastKey==13) // Enter
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 527 B |
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_ampl">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a77b954cd513271d2cfafee6033435584" target="_parent">ampl</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_bg_5foffset">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#aaa11f256a8b0a94c28a98d068013b327" target="_parent">bg_offset</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_bg_5fslope">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#a9676e5cc2757c723c2262d641fb4b8b4" target="_parent">bg_slope</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_conven">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../energyCalibration_8h.html#aa48a6c1eb7d418c5d0618fbb161ae321" target="_parent">conven</a>
|
||||
<span class="SRScope">energyCalibration.h</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_cs_5fslope">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#aca1efedbfea0ad5c9ea2d794e3fb368d" target="_parent">cs_slope</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_el">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../energyCalibration_8h.html#ad1db7b454cab6ae1749310d7f444849b" target="_parent">el</a>
|
||||
<span class="SRScope">energyCalibration.h</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_fit_5fmax">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#ae979386a3f787ef706f4a9ec5bf41d7d" target="_parent">fit_max</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_fit_5fmin">
|
||||
<div class="SREntry">
|
||||
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#a262f574732186cdd8d3a11344d03d0bb" target="_parent">fit_min</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_flex">
|
||||
<div class="SREntry">
|
||||
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#ab99d770f1c9af68d591ed20847813ad1" target="_parent">flex</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_fscurve">
|
||||
<div class="SREntry">
|
||||
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="../classenergyCalibration.html#a57706a328324c25dd9f8ba6d1486e4ce" target="_parent">fscurve</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRResult" id="SR_funcs">
|
||||
<div class="SREntry">
|
||||
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="../classenergyCalibration.html#ae9b3307bf858331241871bde42fdd24e" target="_parent">funcs</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_noise">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a4461206397e2442c92be9151ee231ec5" target="_parent">noise</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_plot_5fflag">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a4edfb157df3624be677177dec0f9555b" target="_parent">plot_flag</a>
|
||||
<span class="SRScope">energyCalibration</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div class="SRResult" id="SR_sign">
|
||||
<div class="SREntry">
|
||||
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a4fc7c435169b5bf4672cf654270097d0" target="_parent">sign</a>
|
||||
<span class="SRScope">energyCalibrationFunctions</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
BIN
slsDetectorSoftware/slsDetectorAnalysis/docs/html/tab_b.gif
Normal file
BIN
slsDetectorSoftware/slsDetectorAnalysis/docs/html/tab_b.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 35 B |
BIN
slsDetectorSoftware/slsDetectorAnalysis/docs/html/tab_l.gif
Normal file
BIN
slsDetectorSoftware/slsDetectorAnalysis/docs/html/tab_l.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 706 B |
BIN
slsDetectorSoftware/slsDetectorAnalysis/docs/html/tab_r.gif
Normal file
BIN
slsDetectorSoftware/slsDetectorAnalysis/docs/html/tab_r.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
102
slsDetectorSoftware/slsDetectorAnalysis/docs/html/tabs.css
Normal file
102
slsDetectorSoftware/slsDetectorAnalysis/docs/html/tabs.css
Normal file
@ -0,0 +1,102 @@
|
||||
/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
|
||||
|
||||
DIV.tabs
|
||||
{
|
||||
float : left;
|
||||
width : 100%;
|
||||
background : url("tab_b.gif") repeat-x bottom;
|
||||
margin-bottom : 4px;
|
||||
}
|
||||
|
||||
DIV.tabs UL
|
||||
{
|
||||
margin : 0px;
|
||||
padding-left : 10px;
|
||||
list-style : none;
|
||||
}
|
||||
|
||||
DIV.tabs LI, DIV.tabs FORM
|
||||
{
|
||||
display : inline;
|
||||
margin : 0px;
|
||||
padding : 0px;
|
||||
}
|
||||
|
||||
DIV.tabs FORM
|
||||
{
|
||||
float : right;
|
||||
}
|
||||
|
||||
DIV.tabs A
|
||||
{
|
||||
float : left;
|
||||
background : url("tab_r.gif") no-repeat right top;
|
||||
border-bottom : 1px solid #84B0C7;
|
||||
font-size : x-small;
|
||||
font-weight : bold;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
DIV.tabs A:hover
|
||||
{
|
||||
background-position: 100% -150px;
|
||||
}
|
||||
|
||||
DIV.tabs A:link, DIV.tabs A:visited,
|
||||
DIV.tabs A:active, DIV.tabs A:hover
|
||||
{
|
||||
color: #1A419D;
|
||||
}
|
||||
|
||||
DIV.tabs SPAN
|
||||
{
|
||||
float : left;
|
||||
display : block;
|
||||
background : url("tab_l.gif") no-repeat left top;
|
||||
padding : 5px 9px;
|
||||
white-space : nowrap;
|
||||
}
|
||||
|
||||
DIV.tabs INPUT
|
||||
{
|
||||
float : right;
|
||||
display : inline;
|
||||
font-size : 1em;
|
||||
}
|
||||
|
||||
DIV.tabs TD
|
||||
{
|
||||
font-size : x-small;
|
||||
font-weight : bold;
|
||||
text-decoration : none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Commented Backslash Hack hides rule from IE5-Mac \*/
|
||||
DIV.tabs SPAN {float : none;}
|
||||
/* End IE5-Mac hack */
|
||||
|
||||
DIV.tabs A:hover SPAN
|
||||
{
|
||||
background-position: 0% -150px;
|
||||
}
|
||||
|
||||
DIV.tabs LI#current A
|
||||
{
|
||||
background-position: 100% -150px;
|
||||
border-width : 0px;
|
||||
}
|
||||
|
||||
DIV.tabs LI#current SPAN
|
||||
{
|
||||
background-position: 0% -150px;
|
||||
padding-bottom : 6px;
|
||||
}
|
||||
|
||||
DIV.nav
|
||||
{
|
||||
background : none;
|
||||
border : none;
|
||||
border-bottom : 1px solid #84B0C7;
|
||||
}
|
BIN
slsDetectorSoftware/slsDetectorAnalysis/docs/latex/FreeSans.ttf
Normal file
BIN
slsDetectorSoftware/slsDetectorAnalysis/docs/latex/FreeSans.ttf
Normal file
Binary file not shown.
39
slsDetectorSoftware/slsDetectorAnalysis/docs/latex/Makefile
Normal file
39
slsDetectorSoftware/slsDetectorAnalysis/docs/latex/Makefile
Normal file
@ -0,0 +1,39 @@
|
||||
all: clean refman.dvi
|
||||
|
||||
ps: refman.ps
|
||||
|
||||
pdf: refman.pdf
|
||||
|
||||
ps_2on1: refman_2on1.ps
|
||||
|
||||
pdf_2on1: refman_2on1.pdf
|
||||
|
||||
refman.ps: refman.dvi
|
||||
dvips -o refman.ps refman.dvi
|
||||
|
||||
refman.pdf: refman.ps
|
||||
ps2pdf refman.ps refman.pdf
|
||||
|
||||
refman.dvi: refman.tex doxygen.sty
|
||||
echo "Running latex..."
|
||||
latex refman.tex
|
||||
echo "Running makeindex..."
|
||||
makeindex refman.idx
|
||||
echo "Rerunning latex...."
|
||||
latex refman.tex
|
||||
latex_count=5 ; \
|
||||
while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
|
||||
do \
|
||||
echo "Rerunning latex...." ;\
|
||||
latex refman.tex ;\
|
||||
latex_count=`expr $$latex_count - 1` ;\
|
||||
done
|
||||
|
||||
refman_2on1.ps: refman.ps
|
||||
psnup -2 refman.ps >refman_2on1.ps
|
||||
|
||||
refman_2on1.pdf: refman_2on1.ps
|
||||
ps2pdf refman_2on1.ps refman_2on1.pdf
|
||||
|
||||
clean:
|
||||
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf
|
@ -0,0 +1,5 @@
|
||||
\section{Class List}
|
||||
Here are the classes, structs, unions and interfaces with brief descriptions:\begin{CompactList}
|
||||
\item\contentsline{section}{\bf{energy\-Calibration} }{\pageref{classenergyCalibration}}{}
|
||||
\item\contentsline{section}{\bf{energy\-Calibration\-Functions} (Energy calibration functions )}{\pageref{classenergyCalibrationFunctions}}{}
|
||||
\end{CompactList}
|
@ -0,0 +1,337 @@
|
||||
\section{energy\-Calibration Class Reference}
|
||||
\label{classenergyCalibration}\index{energyCalibration@{energyCalibration}}
|
||||
{\tt \#include $<$energy\-Calibration.h$>$}
|
||||
|
||||
\subsection*{Public Member Functions}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
\bf{energy\-Calibration} ()
|
||||
\item
|
||||
\bf{$\sim$energy\-Calibration} ()
|
||||
\item
|
||||
int \bf{set\-Plot\-Flag} (int p=-1)
|
||||
\item
|
||||
int \bf{set\-Scan\-Sign} (int s=0)
|
||||
\item
|
||||
int \bf{set\-Charge\-Sharing} (int p=-1)
|
||||
\item
|
||||
void \bf{set\-Fit\-Range} (Double\_\-t mi, Double\_\-t ma)
|
||||
\item
|
||||
void \bf{get\-Fit\-Range} (Double\_\-t \&mi, Double\_\-t \&ma)
|
||||
\item
|
||||
void \bf{set\-Start\-Parameters} (Double\_\-t $\ast$par)
|
||||
\item
|
||||
void \bf{get\-Start\-Parameters} (Double\_\-t $\ast$par)
|
||||
\item
|
||||
TF1 $\ast$ \bf{fit\-SCurve} (TH1 $\ast$h1, Double\_\-t $\ast$mypar, Double\_\-t $\ast$emypar)
|
||||
\item
|
||||
TF1 $\ast$ \bf{fit\-Spectrum} (TH1 $\ast$h1, Double\_\-t $\ast$mypar, Double\_\-t $\ast$emypar)
|
||||
\item
|
||||
TGraph\-Errors $\ast$ \bf{linear\-Calibration} (int nscan, Double\_\-t $\ast$en, Double\_\-t $\ast$een, Double\_\-t $\ast$fl, Double\_\-t $\ast$efl, Double\_\-t \&gain, Double\_\-t \&off, Double\_\-t \&egain, Double\_\-t \&eoff)
|
||||
\item
|
||||
TGraph\-Errors $\ast$ \bf{calibrate\-Scurves} (int nscan, Double\_\-t $\ast$en, Double\_\-t $\ast$een, TH1F $\ast$$\ast$h1, Double\_\-t \&gain, Double\_\-t \&off, Double\_\-t \&egain, Double\_\-t \&eoff)
|
||||
\item
|
||||
TGraph\-Errors $\ast$ \bf{calibrate\-Spectra} (int nscan, Double\_\-t $\ast$en, Double\_\-t $\ast$een, TH1F $\ast$$\ast$h1, Double\_\-t \&gain, Double\_\-t \&off, Double\_\-t \&egain, Double\_\-t \&eoff)
|
||||
\end{CompactItemize}
|
||||
\subsection*{Private Member Functions}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
TGraph\-Errors $\ast$ \bf{calibrate} (int nscan, Double\_\-t $\ast$en, Double\_\-t $\ast$een, TH1F $\ast$$\ast$h1, Double\_\-t \&gain, Double\_\-t \&off, Double\_\-t \&egain, Double\_\-t \&eoff, int integral=1)
|
||||
\item
|
||||
void \bf{init\-Fit\-Function} (TF1 $\ast$fun, TH1 $\ast$h1)
|
||||
\item
|
||||
TF1 $\ast$ \bf{fit\-Function} (TF1 $\ast$fun, TH1 $\ast$h1, Double\_\-t $\ast$mypar, Double\_\-t $\ast$emypar)
|
||||
\end{CompactItemize}
|
||||
\subsection*{Private Attributes}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
int \bf{plot\_\-flag}
|
||||
\item
|
||||
int \bf{cs\_\-flag}
|
||||
\item
|
||||
Double\_\-t \bf{fit\_\-min}
|
||||
\item
|
||||
Double\_\-t \bf{fit\_\-max}
|
||||
\item
|
||||
Double\_\-t \bf{bg\_\-offset}
|
||||
\item
|
||||
Double\_\-t \bf{bg\_\-slope}
|
||||
\item
|
||||
Double\_\-t \bf{flex}
|
||||
\item
|
||||
Double\_\-t \bf{noise}
|
||||
\item
|
||||
Double\_\-t \bf{ampl}
|
||||
\item
|
||||
Double\_\-t \bf{cs\_\-slope}
|
||||
\item
|
||||
\bf{energy\-Calibration\-Functions} $\ast$ \bf{funcs}
|
||||
\item
|
||||
TF1 $\ast$ \bf{fscurve}
|
||||
\item
|
||||
TF1 $\ast$ \bf{fspectrum}
|
||||
\end{CompactItemize}
|
||||
|
||||
|
||||
\subsection{Detailed Description}
|
||||
class alowing the energy calibration of photon counting and anlogue detectors
|
||||
|
||||
|
||||
|
||||
\subsection{Constructor \& Destructor Documentation}
|
||||
\index{energyCalibration@{energy\-Calibration}!energyCalibration@{energyCalibration}}
|
||||
\index{energyCalibration@{energyCalibration}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}energy\-Calibration::energy\-Calibration ()}\label{classenergyCalibration_16f0658d2b526f52784057b2166efd22}
|
||||
|
||||
|
||||
default constructor - creates the function with which the s-curves will be fitted \index{energyCalibration@{energy\-Calibration}!~energyCalibration@{$\sim$energyCalibration}}
|
||||
\index{~energyCalibration@{$\sim$energyCalibration}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}energy\-Calibration::$\sim$energy\-Calibration ()}\label{classenergyCalibration_3bae2b9c26893daa8f583758509c844f}
|
||||
|
||||
|
||||
default destructor - deletes the function with which the s-curves will be fitted
|
||||
|
||||
\subsection{Member Function Documentation}
|
||||
\index{energyCalibration@{energy\-Calibration}!calibrate@{calibrate}}
|
||||
\index{calibrate@{calibrate}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TGraph\-Errors$\ast$ energy\-Calibration::calibrate (int {\em nscan}, Double\_\-t $\ast$ {\em en}, Double\_\-t $\ast$ {\em een}, TH1F $\ast$$\ast$ {\em h1}, Double\_\-t \& {\em gain}, Double\_\-t \& {\em off}, Double\_\-t \& {\em egain}, Double\_\-t \& {\em eoff}, int {\em integral} = {\tt 1})\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_378daeddde40b6127ee6ed595506928c}
|
||||
|
||||
|
||||
calculates gain and offset for the set of energies \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em nscan}]number of energy scans \item[{\em en}]array of energies (nscan long) \item[{\em een}]array of errors on energies (nscan long) - can be NULL! \item[{\em h1}]array of TH1 \item[{\em gain}]reference to gain resulting from the fit \item[{\em offset}]reference to offset resulting from the fit \item[{\em integral}]1 is an s-curve set (default), 0 spectra \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]graph energy vs peak/inflection point \end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!calibrateScurves@{calibrateScurves}}
|
||||
\index{calibrateScurves@{calibrateScurves}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TGraph\-Errors$\ast$ energy\-Calibration::calibrate\-Scurves (int {\em nscan}, Double\_\-t $\ast$ {\em en}, Double\_\-t $\ast$ {\em een}, TH1F $\ast$$\ast$ {\em h1}, Double\_\-t \& {\em gain}, Double\_\-t \& {\em off}, Double\_\-t \& {\em egain}, Double\_\-t \& {\em eoff})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_6f5ee6771522a31e4fe1eca143e2aa9b}
|
||||
|
||||
|
||||
calculates gain and offset for the set of energy scans \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em nscan}]number of energy scans \item[{\em en}]array of energies (nscan long) \item[{\em een}]array of errors on energies (nscan long) - can be NULL! \item[{\em h1}]array of TH1 \item[{\em gain}]reference to gain resulting from the fit \item[{\em off}]reference to offset resulting from the fit \item[{\em egain}]reference to error on the gain resulting from the fit \item[{\em eoff}]reference to the error on the offset resulting from the fit \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]graph energy vs inflection point \end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!calibrateSpectra@{calibrateSpectra}}
|
||||
\index{calibrateSpectra@{calibrateSpectra}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TGraph\-Errors$\ast$ energy\-Calibration::calibrate\-Spectra (int {\em nscan}, Double\_\-t $\ast$ {\em en}, Double\_\-t $\ast$ {\em een}, TH1F $\ast$$\ast$ {\em h1}, Double\_\-t \& {\em gain}, Double\_\-t \& {\em off}, Double\_\-t \& {\em egain}, Double\_\-t \& {\em eoff})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_092637f656c0b88d57797e3ebd0f3e58}
|
||||
|
||||
|
||||
calculates gain and offset for the set of energy spectra \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em nscan}]number of energy scans \item[{\em en}]array of energies (nscan long) \item[{\em een}]array of errors on energies (nscan long) - can be NULL! \item[{\em h1}]array of TH1 \item[{\em gain}]reference to gain resulting from the fit \item[{\em off}]reference to offset resulting from the fit \item[{\em egain}]reference to error on the gain resulting from the fit \item[{\em eoff}]reference to the error on the offset resulting from the fit \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]graph energy vs peak \end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!fitFunction@{fitFunction}}
|
||||
\index{fitFunction@{fitFunction}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TF1$\ast$ energy\-Calibration::fit\-Function (TF1 $\ast$ {\em fun}, TH1 $\ast$ {\em h1}, Double\_\-t $\ast$ {\em mypar}, Double\_\-t $\ast$ {\em emypar})\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_fe1c6dc5f56d12fe06569f401da19729}
|
||||
|
||||
|
||||
Perfors the fit according to the flags specified and returns the fitted function \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em fun}]function to fit \item[{\em h1}]histogram to fit \item[{\em mypar}]pointer to fit parameters array \item[{\em emypar}]pointer to fit parameter errors \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]the fitted function - can be used e.g. to get the Chi2 or similar \end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!fitSCurve@{fitSCurve}}
|
||||
\index{fitSCurve@{fitSCurve}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TF1$\ast$ energy\-Calibration::fit\-SCurve (TH1 $\ast$ {\em h1}, Double\_\-t $\ast$ {\em mypar}, Double\_\-t $\ast$ {\em emypar})}\label{classenergyCalibration_0dcd8e06e31f7b70488a012db12b2bf8}
|
||||
|
||||
|
||||
fits histogram with the s-curve function \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em h1}]1d-histogram to be fitted \item[{\em mypar}]pointer to fit parameters array \item[{\em emypar}]pointer to fit parameter errors \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]the fitted function - can be used e.g. to get the Chi2 or similar \end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!fitSpectrum@{fitSpectrum}}
|
||||
\index{fitSpectrum@{fitSpectrum}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TF1$\ast$ energy\-Calibration::fit\-Spectrum (TH1 $\ast$ {\em h1}, Double\_\-t $\ast$ {\em mypar}, Double\_\-t $\ast$ {\em emypar})}\label{classenergyCalibration_7d22b28cd2fad3d334f15f3d6dc7975a}
|
||||
|
||||
|
||||
fits histogram with the spectrum \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em h1}]1d-histogram to be fitted \item[{\em mypar}]pointer to fit parameters array \item[{\em emypar}]pointer to fit parameter errors \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]the fitted function - can be used e.g. to get the Chi2 or similar \end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!getFitRange@{getFitRange}}
|
||||
\index{getFitRange@{getFitRange}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void energy\-Calibration::get\-Fit\-Range (Double\_\-t \& {\em mi}, Double\_\-t \& {\em ma})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_bfb02327a6897bd97525c01697a1ba4f}
|
||||
|
||||
|
||||
gets the s-curve fit range \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em mi}]reference for minimum of the fit range (-1 is histogram x-min) \item[{\em ma}]reference for maximum of the fit range (-1 is histogram x-max) \end{description}
|
||||
\end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!getStartParameters@{getStartParameters}}
|
||||
\index{getStartParameters@{getStartParameters}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void energy\-Calibration::get\-Start\-Parameters (Double\_\-t $\ast$ {\em par})}\label{classenergyCalibration_fc7411b7a3191748dfcc90f86b823bf4}
|
||||
|
||||
|
||||
get start parameters for the s-curve function \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em par}]parameters, -1 means auto-calculated par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point par[3] is the RMS par[4] is the amplitude par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) -- always positive \end{description}
|
||||
\end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!initFitFunction@{initFitFunction}}
|
||||
\index{initFitFunction@{initFitFunction}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void energy\-Calibration::init\-Fit\-Function (TF1 $\ast$ {\em fun}, TH1 $\ast$ {\em h1})\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_3e84328c11772b6263224340ec924e37}
|
||||
|
||||
|
||||
Initializes the start parameters and the range of the fit depending on the histogram characteristics and/or on the start parameters specified by the user \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em fun}]pointer to function to be initialized \item[{\em h1}]histogram from which to extract the range and start parameters, if not already specified by the user \end{description}
|
||||
\end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!linearCalibration@{linearCalibration}}
|
||||
\index{linearCalibration@{linearCalibration}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TGraph\-Errors$\ast$ energy\-Calibration::linear\-Calibration (int {\em nscan}, Double\_\-t $\ast$ {\em en}, Double\_\-t $\ast$ {\em een}, Double\_\-t $\ast$ {\em fl}, Double\_\-t $\ast$ {\em efl}, Double\_\-t \& {\em gain}, Double\_\-t \& {\em off}, Double\_\-t \& {\em egain}, Double\_\-t \& {\em eoff})}\label{classenergyCalibration_c7f46f2d051f28211681e851f99d3fc4}
|
||||
|
||||
|
||||
calculates gain and offset for the set of inflection points \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em nscan}]number of energy scans \item[{\em en}]array of energies (nscan long) \item[{\em een}]array of errors on energies (nscan long) - can be NULL! \item[{\em fl}]array of inflection points (nscan long) \item[{\em efl}]array of errors on the inflection points (nscan long) \item[{\em gain}]reference to gain resulting from the fit \item[{\em off}]reference to offset resulting from the fit \item[{\em egain}]reference to error on the gain resulting from the fit \item[{\em eoff}]reference to the error on the offset resulting from the fit \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]graph energy vs inflection point \end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!setChargeSharing@{setChargeSharing}}
|
||||
\index{setChargeSharing@{setChargeSharing}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int energy\-Calibration::set\-Charge\-Sharing (int {\em p} = {\tt -1})}\label{classenergyCalibration_e2809b419799e8b199944f185d4ebab8}
|
||||
|
||||
|
||||
sets plot flag \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em p}]plot flag (-1 gets, 0 unsets, $>$0 plot) \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]current plot flag \end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!setFitRange@{setFitRange}}
|
||||
\index{setFitRange@{setFitRange}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void energy\-Calibration::set\-Fit\-Range (Double\_\-t {\em mi}, Double\_\-t {\em ma})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_695cef5428a833d515172d987774f67b}
|
||||
|
||||
|
||||
sets the s-curve fit range \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em mi}]minimum of the fit range (-1 is histogram x-min) \item[{\em ma}]maximum of the fit range (-1 is histogram x-max) \end{description}
|
||||
\end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!setPlotFlag@{setPlotFlag}}
|
||||
\index{setPlotFlag@{setPlotFlag}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int energy\-Calibration::set\-Plot\-Flag (int {\em p} = {\tt -1})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_3d9af0857f7a68b7e4519917ea97e6be}
|
||||
|
||||
|
||||
sets plot flag \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em p}]plot flag (-1 gets, 0 unsets, $>$0 plot) \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]current plot flag \end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!setScanSign@{setScanSign}}
|
||||
\index{setScanSign@{setScanSign}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int energy\-Calibration::set\-Scan\-Sign (int {\em s} = {\tt 0})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_7dbf1676b30ffe90c5aa917f1b2b77ee}
|
||||
|
||||
|
||||
sets scan sign \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em s}]can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) otherwise gets \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]current scan sign can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) \end{Desc}
|
||||
\index{energyCalibration@{energy\-Calibration}!setStartParameters@{setStartParameters}}
|
||||
\index{setStartParameters@{setStartParameters}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void energy\-Calibration::set\-Start\-Parameters (Double\_\-t $\ast$ {\em par})}\label{classenergyCalibration_ba156f5290f7b404d7b8ea735fd7e7bf}
|
||||
|
||||
|
||||
set start parameters for the s-curve function \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em par}]parameters, -1 sets to auto-calculation par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point par[3] is the RMS par[4] is the amplitude par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) -- always positive \end{description}
|
||||
\end{Desc}
|
||||
|
||||
|
||||
\subsection{Member Data Documentation}
|
||||
\index{energyCalibration@{energy\-Calibration}!ampl@{ampl}}
|
||||
\index{ampl@{ampl}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::ampl}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_77b954cd513271d2cfafee6033435584}
|
||||
|
||||
|
||||
start value for the number of photons \index{energyCalibration@{energy\-Calibration}!bg_offset@{bg\_\-offset}}
|
||||
\index{bg_offset@{bg\_\-offset}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::bg\_\-offset}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_aa11f256a8b0a94c28a98d068013b327}
|
||||
|
||||
|
||||
start value for the background pedestal \index{energyCalibration@{energy\-Calibration}!bg_slope@{bg\_\-slope}}
|
||||
\index{bg_slope@{bg\_\-slope}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::bg\_\-slope}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_9676e5cc2757c723c2262d641fb4b8b4}
|
||||
|
||||
|
||||
start value for the background slope \index{energyCalibration@{energy\-Calibration}!cs_flag@{cs\_\-flag}}
|
||||
\index{cs_flag@{cs\_\-flag}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int \bf{energy\-Calibration::cs\_\-flag}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_ce0be11dcc8418db3c7c2b139a015c96}
|
||||
|
||||
|
||||
0 functions without charge sharing contribution, $>$0 with charge sharing contribution \index{energyCalibration@{energy\-Calibration}!cs_slope@{cs\_\-slope}}
|
||||
\index{cs_slope@{cs\_\-slope}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::cs\_\-slope}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_ca1efedbfea0ad5c9ea2d794e3fb368d}
|
||||
|
||||
|
||||
start value for the charge sharing slope \index{energyCalibration@{energy\-Calibration}!fit_max@{fit\_\-max}}
|
||||
\index{fit_max@{fit\_\-max}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::fit\_\-max}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_e979386a3f787ef706f4a9ec5bf41d7d}
|
||||
|
||||
|
||||
maximum of the s-curve fitting range, -1 is histogram x-max \index{energyCalibration@{energy\-Calibration}!fit_min@{fit\_\-min}}
|
||||
\index{fit_min@{fit\_\-min}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::fit\_\-min}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_262f574732186cdd8d3a11344d03d0bb}
|
||||
|
||||
|
||||
minimum of the s-curve fitting range, -1 is histogram x-min \index{energyCalibration@{energy\-Calibration}!flex@{flex}}
|
||||
\index{flex@{flex}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::flex}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_b99d770f1c9af68d591ed20847813ad1}
|
||||
|
||||
|
||||
start value for the inflection point \index{energyCalibration@{energy\-Calibration}!fscurve@{fscurve}}
|
||||
\index{fscurve@{fscurve}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TF1$\ast$ \bf{energy\-Calibration::fscurve}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_57706a328324c25dd9f8ba6d1486e4ce}
|
||||
|
||||
|
||||
function with which the s-curve will be fitted \index{energyCalibration@{energy\-Calibration}!fspectrum@{fspectrum}}
|
||||
\index{fspectrum@{fspectrum}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TF1$\ast$ \bf{energy\-Calibration::fspectrum}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_2ee734ab28b78dc5786a7ba430f8baa5}
|
||||
|
||||
|
||||
function with which the spectrum will be fitted \index{energyCalibration@{energy\-Calibration}!funcs@{funcs}}
|
||||
\index{funcs@{funcs}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}\bf{energy\-Calibration\-Functions}$\ast$ \bf{energy\-Calibration::funcs}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_e9b3307bf858331241871bde42fdd24e}
|
||||
|
||||
|
||||
\index{energyCalibration@{energy\-Calibration}!noise@{noise}}
|
||||
\index{noise@{noise}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::noise}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_4461206397e2442c92be9151ee231ec5}
|
||||
|
||||
|
||||
start value for the noise \index{energyCalibration@{energy\-Calibration}!plot_flag@{plot\_\-flag}}
|
||||
\index{plot_flag@{plot\_\-flag}!energyCalibration@{energy\-Calibration}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int \bf{energy\-Calibration::plot\_\-flag}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_4edfb157df3624be677177dec0f9555b}
|
||||
|
||||
|
||||
0 does not plot, $>$0 plots (flags?)
|
||||
|
||||
The documentation for this class was generated from the following file:\begin{CompactItemize}
|
||||
\item
|
||||
\bf{energy\-Calibration.h}\end{CompactItemize}
|
@ -0,0 +1,135 @@
|
||||
\section{energy\-Calibration\-Functions Class Reference}
|
||||
\label{classenergyCalibrationFunctions}\index{energyCalibrationFunctions@{energyCalibrationFunctions}}
|
||||
Energy calibration functions.
|
||||
|
||||
|
||||
{\tt \#include $<$energy\-Calibration.h$>$}
|
||||
|
||||
\subsection*{Public Member Functions}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
\bf{energy\-Calibration\-Functions} (int s=-1)
|
||||
\item
|
||||
int \bf{set\-Scan\-Sign} (int s=0)
|
||||
\item
|
||||
Double\_\-t \bf{gauss\-Charge\-Sharing} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
|
||||
\item
|
||||
Double\_\-t \bf{erf\-Function} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
|
||||
\item
|
||||
Double\_\-t \bf{erf\-Function\-Charge\-Sharing} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
|
||||
\item
|
||||
Double\_\-t \bf{erf\-Func\-Fluo} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
|
||||
\item
|
||||
Double\_\-t \bf{spectrum} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
|
||||
\item
|
||||
Double\_\-t \bf{scurve} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
|
||||
\item
|
||||
Double\_\-t \bf{scurve\-Fluo} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
|
||||
\end{CompactItemize}
|
||||
\subsection*{Static Public Member Functions}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
static float \bf{median} (float $\ast$x, int n)
|
||||
\item
|
||||
static int \bf{quick\_\-select} (int arr[$\,$], int n)
|
||||
\item
|
||||
static int \bf{kth\_\-smallest} (int $\ast$a, int n, int k)
|
||||
\end{CompactItemize}
|
||||
\subsection*{Private Attributes}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
int \bf{sign}
|
||||
\end{CompactItemize}
|
||||
|
||||
|
||||
\subsection{Detailed Description}
|
||||
Energy calibration functions.
|
||||
|
||||
class containing all the possible energy calibration functions (scurves with and without charge sharing, gaussian spectrum with and without charge sharing, possibility of chosing the sign of the X-axis)
|
||||
|
||||
|
||||
|
||||
\subsection{Constructor \& Destructor Documentation}
|
||||
\index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!energyCalibrationFunctions@{energyCalibrationFunctions}}
|
||||
\index{energyCalibrationFunctions@{energyCalibrationFunctions}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}energy\-Calibration\-Functions::energy\-Calibration\-Functions (int {\em s} = {\tt -1})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibrationFunctions_8c17162b89f3b2e642004e7c88a22ac2}
|
||||
|
||||
|
||||
|
||||
|
||||
\subsection{Member Function Documentation}
|
||||
\index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!erfFuncFluo@{erfFuncFluo}}
|
||||
\index{erfFuncFluo@{erfFuncFluo}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::erf\-Func\-Fluo (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_a5fbe9da48bc2ef90b699e06ea8c5111}
|
||||
|
||||
|
||||
Double Erf function with charge sharing slope par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point of the first energy par[3] is the RMS of the first energy par[4] is the amplitude of the first energy par[5] is the angual coefficient of the charge sharing slope of the first energy (scales with par[3]) par[6] is the inflection point of the second energy par[7] is the RMS of the second energy par[8] is the amplitude of the second energy par[9] is the angual coefficient of the charge sharing slope of the second energy (scales with par[8]) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!erfFunction@{erfFunction}}
|
||||
\index{erfFunction@{erfFunction}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::erf\-Function (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_2da1e3b9a10d23233256f8c2234f2457}
|
||||
|
||||
|
||||
Basic erf function par[0] is the inflection point par[1] is the RMS par[2] is the amplitude \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!erfFunctionChargeSharing@{erfFunctionChargeSharing}}
|
||||
\index{erfFunctionChargeSharing@{erfFunctionChargeSharing}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::erf\-Function\-Charge\-Sharing (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_8d1b3d0f8b30423dad56d8ce5323a4a8}
|
||||
|
||||
|
||||
Erf function with charge sharing slope par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point par[3] is the RMS par[4] is the amplitude par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!gaussChargeSharing@{gaussChargeSharing}}
|
||||
\index{gaussChargeSharing@{gaussChargeSharing}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::gauss\-Charge\-Sharing (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_e9582e5c46d27ad25d6139d0386698f7}
|
||||
|
||||
|
||||
Gaussian Function with charge sharing pedestal par[0] is the absolute height of the background pedestal par[1] is the slope of the background pedestal par[2] is the gaussian peak position par[3] is the RMS of the gaussian (and of the pedestal) par[4] is the height of the function par[5] is the fractional height of the charge sharing pedestal (scales with par[3]) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!kth_smallest@{kth\_\-smallest}}
|
||||
\index{kth_smallest@{kth\_\-smallest}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}static int energy\-Calibration\-Functions::kth\_\-smallest (int $\ast$ {\em a}, int {\em n}, int {\em k})\hspace{0.3cm}{\tt [static]}}\label{classenergyCalibrationFunctions_7d9a7b8d0c8ff69638a5fbb9f4c04b90}
|
||||
|
||||
|
||||
Calculates the median of an array of n elements (swaps the arrays!) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!median@{median}}
|
||||
\index{median@{median}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}static float energy\-Calibration\-Functions::median (float $\ast$ {\em x}, int {\em n})\hspace{0.3cm}{\tt [static]}}\label{classenergyCalibrationFunctions_37f557bacb75213073c8d421cc1240f4}
|
||||
|
||||
|
||||
Calculates the median of an array of n elements \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!quick_select@{quick\_\-select}}
|
||||
\index{quick_select@{quick\_\-select}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}static int energy\-Calibration\-Functions::quick\_\-select (int {\em arr}[$\,$], int {\em n})\hspace{0.3cm}{\tt [static]}}\label{classenergyCalibrationFunctions_a3ab0e7c3c862fb51dfda78f1b09a55c}
|
||||
|
||||
|
||||
Calculates the median of an array of n elements (swaps the arrays!) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!scurve@{scurve}}
|
||||
\index{scurve@{scurve}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::scurve (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_e220482622e88a46b12498b0e4d8113a}
|
||||
|
||||
|
||||
Erf function with charge sharing slope with the correct scan sign par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point par[3] is the RMS par[4] is the amplitude par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!scurveFluo@{scurveFluo}}
|
||||
\index{scurveFluo@{scurveFluo}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::scurve\-Fluo (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_4eba39623b518d67a63192970a78f530}
|
||||
|
||||
|
||||
Double Erf function with charge sharing slope par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point of the first energy par[3] is the RMS of the first energy par[4] is the amplitude of the first energy par[5] is the angual coefficient of the charge sharing slope of the first energy (scales with par[3]) par[6] is the inflection point of the second energy par[7] is the RMS of the second energy par[8] is the amplitude of the second energy par[9] is the angual coefficient of the charge sharing slope of the second energy (scales with par[8]) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!setScanSign@{setScanSign}}
|
||||
\index{setScanSign@{setScanSign}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int energy\-Calibration\-Functions::set\-Scan\-Sign (int {\em s} = {\tt 0})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibrationFunctions_716759a1ae09ea3c841f824af3ece415}
|
||||
|
||||
|
||||
sets scan sign \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em s}]can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) otherwise gets \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]current scan sign can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) \end{Desc}
|
||||
\index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!spectrum@{spectrum}}
|
||||
\index{spectrum@{spectrum}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::spectrum (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_015eb05dc34b77642ab2a2a9f126f170}
|
||||
|
||||
|
||||
static function Gaussian with charge sharing pedestal with the correct scan sign par[0] is the absolute height of the background pedestal par[1] is the fractional height of the charge sharing pedestal (scales with par[3] par[2] is the gaussian peak position par[3] is the RMS of the gaussian (and of the pedestal) par[4] is the height of the function
|
||||
|
||||
\subsection{Member Data Documentation}
|
||||
\index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!sign@{sign}}
|
||||
\index{sign@{sign}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int \bf{energy\-Calibration\-Functions::sign}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibrationFunctions_4fc7c435169b5bf4672cf654270097d0}
|
||||
|
||||
|
||||
|
||||
|
||||
The documentation for this class was generated from the following file:\begin{CompactItemize}
|
||||
\item
|
||||
\bf{energy\-Calibration.h}\end{CompactItemize}
|
@ -0,0 +1,78 @@
|
||||
\NeedsTeXFormat{LaTeX2e}
|
||||
\ProvidesPackage{doxygen}
|
||||
\RequirePackage{calc}
|
||||
\RequirePackage{array}
|
||||
\pagestyle{fancyplain}
|
||||
\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}}
|
||||
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
|
||||
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
|
||||
\lhead[\fancyplain{}{\bfseries\thepage}]
|
||||
{\fancyplain{}{\bfseries\rightmark}}
|
||||
\rhead[\fancyplain{}{\bfseries\leftmark}]
|
||||
{\fancyplain{}{\bfseries\thepage}}
|
||||
\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Tue Mar 27 16:32:29 2012 by Doxygen }]{}
|
||||
\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Tue Mar 27 16:32:29 2012 by Doxygen }}
|
||||
\cfoot{}
|
||||
\newenvironment{Code}
|
||||
{\footnotesize}
|
||||
{\normalsize}
|
||||
\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})}
|
||||
\newenvironment{DocInclude}
|
||||
{\footnotesize}
|
||||
{\normalsize}
|
||||
\newenvironment{VerbInclude}
|
||||
{\footnotesize}
|
||||
{\normalsize}
|
||||
\newenvironment{Image}
|
||||
{\begin{figure}[H]}
|
||||
{\end{figure}}
|
||||
\newenvironment{ImageNoCaption}{}{}
|
||||
\newenvironment{CompactList}
|
||||
{\begin{list}{}{
|
||||
\setlength{\leftmargin}{0.5cm}
|
||||
\setlength{\itemsep}{0pt}
|
||||
\setlength{\parsep}{0pt}
|
||||
\setlength{\topsep}{0pt}
|
||||
\renewcommand{\makelabel}{\hfill}}}
|
||||
{\end{list}}
|
||||
\newenvironment{CompactItemize}
|
||||
{
|
||||
\begin{itemize}
|
||||
\setlength{\itemsep}{-3pt}
|
||||
\setlength{\parsep}{0pt}
|
||||
\setlength{\topsep}{0pt}
|
||||
\setlength{\partopsep}{0pt}
|
||||
}
|
||||
{\end{itemize}}
|
||||
\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}
|
||||
\newlength{\tmplength}
|
||||
\newenvironment{TabularC}[1]
|
||||
{
|
||||
\setlength{\tmplength}
|
||||
{\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}
|
||||
\par\begin{tabular*}{\linewidth}
|
||||
{*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}
|
||||
}
|
||||
{\end{tabular*}\par}
|
||||
\newcommand{\entrylabel}[1]{
|
||||
{\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\vspace{1.5\baselineskip}}}}
|
||||
\newenvironment{Desc}
|
||||
{\begin{list}{}
|
||||
{
|
||||
\settowidth{\labelwidth}{40pt}
|
||||
\setlength{\leftmargin}{\labelwidth}
|
||||
\setlength{\parsep}{0pt}
|
||||
\setlength{\itemsep}{-4pt}
|
||||
\renewcommand{\makelabel}{\entrylabel}
|
||||
}
|
||||
}
|
||||
{\end{list}}
|
||||
\newenvironment{Indent}
|
||||
{\begin{list}{}{\setlength{\leftmargin}{0.5cm}}
|
||||
\item[]\ignorespaces}
|
||||
{\unskip\end{list}}
|
||||
\setlength{\parindent}{0cm}
|
||||
\setlength{\parskip}{0.2cm}
|
||||
\addtocounter{secnumdepth}{1}
|
||||
\sloppy
|
||||
\usepackage[T1]{fontenc}
|
@ -0,0 +1,37 @@
|
||||
\section{energy\-Calibration.h File Reference}
|
||||
\label{energyCalibration_8h}\index{energyCalibration.h@{energyCalibration.h}}
|
||||
{\tt \#include $<$TROOT.h$>$}\par
|
||||
{\tt \#include $<$TF1.h$>$}\par
|
||||
\subsection*{Namespaces}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
namespace \bf{std}
|
||||
\end{CompactItemize}
|
||||
\subsection*{Classes}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
class \bf{energy\-Calibration\-Functions}
|
||||
\begin{CompactList}\small\item\em Energy calibration functions. \item\end{CompactList}\item
|
||||
class \bf{energy\-Calibration}
|
||||
\end{CompactItemize}
|
||||
\subsection*{Variables}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
const float \bf{conven} = 1000./3.6
|
||||
\item
|
||||
const float \bf{el} = 1.67E-4
|
||||
\end{CompactItemize}
|
||||
|
||||
|
||||
\subsection{Variable Documentation}
|
||||
\index{energyCalibration.h@{energy\-Calibration.h}!conven@{conven}}
|
||||
\index{conven@{conven}!energyCalibration.h@{energy\-Calibration.h}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}const float \bf{conven} = 1000./3.6}\label{energyCalibration_8h_a48a6c1eb7d418c5d0618fbb161ae321}
|
||||
|
||||
|
||||
electrons/ke\-V \index{energyCalibration.h@{energy\-Calibration.h}!el@{el}}
|
||||
\index{el@{el}!energyCalibration.h@{energy\-Calibration.h}}
|
||||
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}const float \bf{el} = 1.67E-4}\label{energyCalibration_8h_d1db7b454cab6ae1749310d7f444849b}
|
||||
|
||||
|
||||
electron charge in f\-C
|
@ -0,0 +1,4 @@
|
||||
\section{File List}
|
||||
Here is a list of all files with brief descriptions:\begin{CompactList}
|
||||
\item\contentsline{section}{\bf{energy\-Calibration.h} }{\pageref{energyCalibration_8h}}{}
|
||||
\end{CompactList}
|
@ -0,0 +1,3 @@
|
||||
\section{Introduction}\label{index_intro_sec}
|
||||
We know very well s-curves etc. but at the end everybody uses different functions ;-).\subsection{Motivation}\label{index_mot_sec}
|
||||
It would be greate to use everybody the same functions...
|
@ -0,0 +1,4 @@
|
||||
\section{Namespace List}
|
||||
Here is a list of all namespaces with brief descriptions:\begin{CompactList}
|
||||
\item\contentsline{section}{\bf{std} }{\pageref{namespacestd}}{}
|
||||
\end{CompactList}
|
@ -0,0 +1,4 @@
|
||||
\section{std Namespace Reference}
|
||||
\label{namespacestd}\index{std@{std}}
|
||||
|
||||
|
@ -0,0 +1,46 @@
|
||||
\documentclass[a4paper]{book}
|
||||
\usepackage{a4wide}
|
||||
\usepackage{makeidx}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{multicol}
|
||||
\usepackage{float}
|
||||
\usepackage{textcomp}
|
||||
\usepackage{alltt}
|
||||
\usepackage{doxygen}
|
||||
\makeindex
|
||||
\setcounter{tocdepth}{1}
|
||||
\renewcommand{\footrulewidth}{0.4pt}
|
||||
\begin{document}
|
||||
\begin{titlepage}
|
||||
\vspace*{7cm}
|
||||
\begin{center}
|
||||
{\Large Reference Manual}\\
|
||||
\vspace*{1cm}
|
||||
{\large Generated by Doxygen 1.4.7}\\
|
||||
\vspace*{0.5cm}
|
||||
{\small Tue Mar 27 16:32:29 2012}\\
|
||||
\end{center}
|
||||
\end{titlepage}
|
||||
\clearemptydoublepage
|
||||
\pagenumbering{roman}
|
||||
\tableofcontents
|
||||
\clearemptydoublepage
|
||||
\pagenumbering{arabic}
|
||||
\chapter{Common Root library for SLS detectors data analysis }
|
||||
\label{index}\input{index}
|
||||
\chapter{Namespace Index}
|
||||
\input{namespaces}
|
||||
\chapter{Class Index}
|
||||
\input{annotated}
|
||||
\chapter{File Index}
|
||||
\input{files}
|
||||
\chapter{Namespace Documentation}
|
||||
\input{namespacestd}
|
||||
\chapter{Class Documentation}
|
||||
\input{classenergyCalibration}
|
||||
\include{classenergyCalibrationFunctions}
|
||||
\chapter{File Documentation}
|
||||
\input{energyCalibration_8h}
|
||||
\printindex
|
||||
\end{document}
|
65
slsDetectorSoftware/slsDetectorAnalysis/doxy.config
Normal file
65
slsDetectorSoftware/slsDetectorAnalysis/doxy.config
Normal file
@ -0,0 +1,65 @@
|
||||
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
|
||||
# documentation are documented, even if no documentation was available.
|
||||
# Private class members and static file members will be hidden unless
|
||||
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
|
||||
|
||||
EXTRACT_ALL = YES
|
||||
|
||||
# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
|
||||
# will be included in the documentation.
|
||||
|
||||
EXTRACT_PRIVATE = YES
|
||||
|
||||
# If the EXTRACT_STATIC tag is set to YES all static members of a file
|
||||
# will be included in the documentation.
|
||||
|
||||
EXTRACT_STATIC = YES
|
||||
|
||||
# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
|
||||
# defined locally in source files will be included in the documentation.
|
||||
# If set to NO only classes defined in header files are included.
|
||||
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
|
||||
# This flag is only useful for Objective-C code. When set to YES local
|
||||
# methods, which are defined in the implementation section but not in
|
||||
# the interface are included in the documentation.
|
||||
# If set to NO (the default) only methods in the interface are included.
|
||||
|
||||
EXTRACT_LOCAL_METHODS = YES
|
||||
|
||||
# If this flag is set to YES, the members of anonymous namespaces will be
|
||||
# extracted and appear in the documentation as a namespace called
|
||||
# 'anonymous_namespace{file}', where file will be replaced with the base
|
||||
# name of the file that contains the anonymous namespace. By default
|
||||
# anonymous namespace are hidden.
|
||||
|
||||
EXTRACT_ANON_NSPACES = NO
|
||||
|
||||
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
|
||||
# undocumented members of documented classes, files or namespaces.
|
||||
# If set to NO (the default) these members will be included in the
|
||||
# various overviews, but no documentation section is generated.
|
||||
# This option has no effect if EXTRACT_ALL is enabled.
|
||||
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
|
||||
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
|
||||
# undocumented classes that are normally visible in the class hierarchy.
|
||||
# If set to NO (the default) these classes will be included in the various
|
||||
# overviews. This option has no effect if EXTRACT_ALL is enabled.
|
||||
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
|
||||
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
|
||||
# friend (class|struct|union) declarations.
|
||||
# If set to NO (the default) these declarations will be included in the
|
||||
# documentation.
|
||||
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
|
||||
INPUT = energyCalibration.h
|
||||
|
||||
|
||||
OUTPUT_DIRECTORY = docs
|
||||
|
393
slsDetectorSoftware/slsDetectorAnalysis/energyCalibration.cpp
Normal file
393
slsDetectorSoftware/slsDetectorAnalysis/energyCalibration.cpp
Normal file
@ -0,0 +1,393 @@
|
||||
#include "energyCalibration.h"
|
||||
|
||||
#ifdef ROOT
|
||||
#include <TMath.h>
|
||||
#include <TH1F.h>
|
||||
#include <TGraphErrors.h>
|
||||
#endif
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#define max(a,b) ((a) > (b) ? (a) : (b))
|
||||
#define min(a,b) ((a) < (b) ? (a) : (b))
|
||||
#define ELEM_SWAP(a,b) { register int t=(a);(a)=(b);(b)=t; }
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
#ifdef ROOT
|
||||
Double_t energyCalibrationFunctions::gaussChargeSharing(Double_t *x, Double_t *par) {
|
||||
Double_t f, arg=0;
|
||||
if (par[3]!=0) arg=(x[0]-par[2])/par[3];
|
||||
f=par[4]*TMath::Exp(-1*arg*arg/2.);
|
||||
f=f+par[5]*(par[4]/2*(TMath::Erfc(sign*arg/(TMath::Sqrt(2.)))))+par[0]-par[1]*sign*x[0];
|
||||
return f;
|
||||
}
|
||||
|
||||
// basic erf function
|
||||
Double_t energyCalibrationFunctions::erfFunction(Double_t *x, Double_t *par) {
|
||||
float arg=0;
|
||||
if (par[1]!=0) arg=(par[0]-x[0])/par[1];
|
||||
return ((par[2]/2.*(1+TMath::Erf(sign*arg/(TMath::Sqrt(2))))));
|
||||
};
|
||||
|
||||
|
||||
Double_t energyCalibrationFunctions::erfFunctionChargeSharing(Double_t *x, Double_t *par) {
|
||||
Double_t f;
|
||||
|
||||
f=erfFunction(x, par+2)*(1+par[5]*(par[2]-x[0]))+par[0]-par[1]*x[0]*sign;
|
||||
return f;
|
||||
};
|
||||
|
||||
|
||||
Double_t energyCalibrationFunctions::erfFuncFluo(Double_t *x, Double_t *par) {
|
||||
Double_t f;
|
||||
f=erfFunctionChargeSharing(x, par)+erfFunction(x, par+6)*(1+par[9]*(par[6]-x[0]));
|
||||
return f;
|
||||
};
|
||||
#endif
|
||||
|
||||
float energyCalibrationFunctions::median(float *x, int n){
|
||||
// sorts x into xmed array and returns median
|
||||
// n is number of values already in the xmed array
|
||||
float xmed[n];
|
||||
int k,i,j;
|
||||
|
||||
for (i=0; i<n; i++) {
|
||||
k=0;
|
||||
for (j=0; j<n; j++) {
|
||||
if(*(x+i)>*(x+j))
|
||||
k++;
|
||||
if (*(x+i)==*(x+j)) {
|
||||
if (i>j)
|
||||
k++;
|
||||
}
|
||||
}
|
||||
xmed[k]=*(x+i);
|
||||
}
|
||||
k=n/2;
|
||||
return xmed[k];
|
||||
}
|
||||
|
||||
|
||||
int energyCalibrationFunctions::quick_select(int arr[], int n){
|
||||
int low, high ;
|
||||
int median;
|
||||
int middle, ll, hh;
|
||||
|
||||
low = 0 ; high = n-1 ; median = (low + high) / 2;
|
||||
for (;;) {
|
||||
if (high <= low) /* One element only */
|
||||
return arr[median] ;
|
||||
|
||||
if (high == low + 1) { /* Two elements only */
|
||||
if (arr[low] > arr[high])
|
||||
ELEM_SWAP(arr[low], arr[high]) ;
|
||||
return arr[median] ;
|
||||
}
|
||||
|
||||
/* Find median of low, middle and high items; swap into position low */
|
||||
middle = (low + high) / 2;
|
||||
if (arr[middle] > arr[high]) ELEM_SWAP(arr[middle], arr[high]) ;
|
||||
if (arr[low] > arr[high]) ELEM_SWAP(arr[low], arr[high]) ;
|
||||
if (arr[middle] > arr[low]) ELEM_SWAP(arr[middle], arr[low]) ;
|
||||
|
||||
/* Swap low item (now in position middle) into position (low+1) */
|
||||
ELEM_SWAP(arr[middle], arr[low+1]) ;
|
||||
|
||||
/* Nibble from each end towards middle, swapping items when stuck */
|
||||
ll = low + 1;
|
||||
hh = high;
|
||||
for (;;) {
|
||||
do ll++; while (arr[low] > arr[ll]) ;
|
||||
do hh--; while (arr[hh] > arr[low]) ;
|
||||
|
||||
if (hh < ll)
|
||||
break;
|
||||
|
||||
ELEM_SWAP(arr[ll], arr[hh]) ;
|
||||
}
|
||||
|
||||
/* Swap middle item (in position low) back into correct position */
|
||||
ELEM_SWAP(arr[low], arr[hh]) ;
|
||||
|
||||
/* Re-set active partition */
|
||||
if (hh <= median)
|
||||
low = ll;
|
||||
if (hh >= median)
|
||||
high = hh - 1;
|
||||
}
|
||||
}
|
||||
|
||||
int energyCalibrationFunctions::kth_smallest(int *a, int n, int k){
|
||||
register int i,j,l,m ;
|
||||
register float x ;
|
||||
|
||||
l=0 ; m=n-1 ;
|
||||
while (l<m) {
|
||||
x=a[k] ;
|
||||
i=l ;
|
||||
j=m ;
|
||||
do {
|
||||
while (a[i]<x) i++ ;
|
||||
while (x<a[j]) j-- ;
|
||||
if (i<=j) {
|
||||
ELEM_SWAP(a[i],a[j]) ;
|
||||
i++ ; j-- ;
|
||||
}
|
||||
} while (i<=j) ;
|
||||
if (j<k) l=i ;
|
||||
if (k<i) m=j ;
|
||||
}
|
||||
return a[k] ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef ROOT
|
||||
Double_t energyCalibrationFunctions::spectrum(Double_t *x, Double_t *par) {
|
||||
return gaussChargeSharing(x,par);
|
||||
}
|
||||
|
||||
|
||||
Double_t energyCalibrationFunctions::scurve(Double_t *x, Double_t *par) {
|
||||
return erfFunctionChargeSharing(x,par);
|
||||
}
|
||||
|
||||
|
||||
Double_t energyCalibrationFunctions::scurveFluo(Double_t *x, Double_t *par) {
|
||||
return erfFuncFluo(x,par);
|
||||
}
|
||||
#endif
|
||||
|
||||
energyCalibration::energyCalibration() :
|
||||
#ifdef ROOT
|
||||
fit_min(-1),
|
||||
fit_max(-1),
|
||||
bg_offset(-1),
|
||||
bg_slope(-1),
|
||||
flex(-1),
|
||||
noise(-1),
|
||||
ampl(-1),
|
||||
cs_slope(-1),
|
||||
fscurve(NULL),
|
||||
fspectrum(NULL),
|
||||
#endif
|
||||
funcs(NULL),
|
||||
plot_flag(1),
|
||||
cs_flag(1)
|
||||
{
|
||||
|
||||
#ifdef ROOT
|
||||
funcs=new energyCalibrationFunctions();
|
||||
|
||||
fscurve=new TF1("fscurve",funcs,&energyCalibrationFunctions::scurve,0,1000,6,"energyCalibrationFunctions","scurve");
|
||||
fscurve->SetParNames("Background Offset","Background Slope","Inflection Point","Noise RMS", "Number of Photons","Charge Sharing Slope");
|
||||
|
||||
fspectrum=new TF1("fspectrum",funcs,&energyCalibrationFunctions::spectrum,0,1000,6,"energyCalibrationFunctions","spectrum");
|
||||
fspectrum->SetParNames("Background Pedestal","Background slope", "Peak position","Noise RMS", "Number of Photons","Charge Sharing Pedestal");
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
energyCalibration::~energyCalibration(){
|
||||
#ifdef ROOT
|
||||
delete fscurve;
|
||||
delete fspectrum;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#ifdef ROOT
|
||||
void energyCalibration::setStartParameters(Double_t *par){
|
||||
bg_offset=par[0];
|
||||
bg_slope=par[1];
|
||||
flex=par[2];
|
||||
noise=par[3];
|
||||
ampl=par[4];
|
||||
cs_slope=par[5];
|
||||
}
|
||||
|
||||
|
||||
void energyCalibration::getStartParameters(Double_t *par){
|
||||
par[0]=bg_offset;
|
||||
par[1]=bg_slope;
|
||||
par[2]=flex;
|
||||
par[3]=noise;
|
||||
par[4]=ampl;
|
||||
par[5]=cs_slope;
|
||||
}
|
||||
|
||||
#endif
|
||||
int energyCalibration::setChargeSharing(int p) {
|
||||
if (p>=0) {
|
||||
cs_flag=p;
|
||||
#ifdef ROOT
|
||||
if (p) {
|
||||
fscurve->ReleaseParameter(5);
|
||||
fspectrum->ReleaseParameter(1);
|
||||
} else {
|
||||
fscurve->FixParameter(5,0);
|
||||
fspectrum->FixParameter(1,0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
return cs_flag;
|
||||
}
|
||||
|
||||
|
||||
#ifdef ROOT
|
||||
void energyCalibration::initFitFunction(TF1 *fun, TH1 *h1) {
|
||||
|
||||
Double_t min=fit_min, max=fit_max;
|
||||
|
||||
Double_t mypar[6];
|
||||
|
||||
if (max==-1)
|
||||
max=h1->GetXaxis()->GetXmax();
|
||||
|
||||
if (min==-1)
|
||||
min=h1->GetXaxis()->GetXmin();
|
||||
|
||||
|
||||
if (bg_offset==-1)
|
||||
mypar[0]=0;
|
||||
else
|
||||
mypar[0]=bg_offset;
|
||||
|
||||
|
||||
if (bg_slope==-1)
|
||||
mypar[1]=0;
|
||||
else
|
||||
mypar[1]=bg_slope;
|
||||
|
||||
|
||||
if (flex==-1)
|
||||
mypar[2]=(min+max)/2.;
|
||||
else
|
||||
mypar[2]=flex;
|
||||
|
||||
|
||||
if (noise==-1)
|
||||
mypar[3]=0.1;
|
||||
else
|
||||
mypar[3]=noise;
|
||||
|
||||
if (ampl==-1)
|
||||
mypar[4]=h1->GetBinContent(h1->GetXaxis()->FindBin(0.5*(max+min)));
|
||||
else
|
||||
mypar[4]=ampl;
|
||||
|
||||
if (cs_slope==-1)
|
||||
mypar[5]=0;
|
||||
else
|
||||
mypar[5]=cs_slope;
|
||||
|
||||
fun->SetParameters(mypar);
|
||||
|
||||
fun->SetRange(min,max);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
TF1* energyCalibration::fitFunction(TF1 *fun, TH1 *h1, Double_t *mypar, Double_t *emypar) {
|
||||
|
||||
|
||||
TF1* fitfun;
|
||||
|
||||
char fname[100];
|
||||
|
||||
strcpy(fname, fun->GetName());
|
||||
|
||||
if (plot_flag) {
|
||||
h1->Fit(fname,"R");
|
||||
} else
|
||||
h1->Fit(fname,"R0Q");
|
||||
|
||||
|
||||
fitfun= h1->GetFunction(fname);
|
||||
fitfun->GetParameters(mypar);
|
||||
for (int ip=0; ip<6; ip++) {
|
||||
emypar[ip]=fitfun->GetParError(ip);
|
||||
}
|
||||
return fitfun;
|
||||
}
|
||||
|
||||
TF1* energyCalibration::fitSCurve(TH1 *h1, Double_t *mypar, Double_t *emypar) {
|
||||
|
||||
|
||||
|
||||
initFitFunction(fscurve,h1);
|
||||
return fitFunction(fscurve, h1, mypar, emypar);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
TF1* energyCalibration::fitSpectrum(TH1 *h1, Double_t *mypar, Double_t *emypar) {
|
||||
initFitFunction(fspectrum,h1);
|
||||
return fitFunction(fspectrum, h1, mypar, emypar);
|
||||
}
|
||||
|
||||
|
||||
|
||||
TGraphErrors* energyCalibration::linearCalibration(int nscan, Double_t *en, Double_t *een, Double_t *fl, Double_t *efl, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff) {
|
||||
|
||||
TGraphErrors *gr;
|
||||
|
||||
Double_t mypar[2];
|
||||
|
||||
gr = new TGraphErrors(nscan,en,fl,een,efl);
|
||||
|
||||
if (plot_flag) {
|
||||
gr->Fit("pol1");
|
||||
gr->SetMarkerStyle(20);
|
||||
} else
|
||||
gr->Fit("pol1","0Q");
|
||||
|
||||
TF1 *fitfun= gr->GetFunction("pol1");
|
||||
fitfun->GetParameters(mypar);
|
||||
|
||||
egain=fitfun->GetParError(1);
|
||||
eoff=fitfun->GetParError(0);
|
||||
|
||||
gain=funcs->setScanSign()*mypar[1];
|
||||
off=mypar[0];
|
||||
|
||||
return gr;
|
||||
}
|
||||
|
||||
|
||||
TGraphErrors* energyCalibration::calibrate(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff, int integral) {
|
||||
|
||||
TH1F *h;
|
||||
|
||||
Double_t mypar[6], emypar[6];
|
||||
Double_t fl[nscan], efl[nscan];
|
||||
|
||||
|
||||
for (int ien=0; ien<nscan; ien++) {
|
||||
h=h1[ien];
|
||||
if (integral)
|
||||
fitSCurve(h,mypar,emypar);
|
||||
else
|
||||
fitSpectrum(h,mypar,emypar);
|
||||
|
||||
fl[ien]=mypar[2];
|
||||
efl[ien]=emypar[2];
|
||||
}
|
||||
return linearCalibration(nscan,en,een,fl,efl,gain,off, egain, eoff);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
386
slsDetectorSoftware/slsDetectorAnalysis/energyCalibration.h
Normal file
386
slsDetectorSoftware/slsDetectorAnalysis/energyCalibration.h
Normal file
@ -0,0 +1,386 @@
|
||||
|
||||
#ifndef ENERGYCALIBRATION_H
|
||||
#define ENERGYCALIBRATION_H
|
||||
|
||||
|
||||
#ifdef ROOT
|
||||
#include <TROOT.h>
|
||||
#include <TF1.h>
|
||||
class TH1F;
|
||||
class TGraphErrors;
|
||||
#endif
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
|
||||
|
||||
const float conven=1000./3.6; /**< electrons/keV */
|
||||
const float el=1.67E-4; /**< electron charge in fC */
|
||||
|
||||
|
||||
|
||||
/**
|
||||
\mainpage Common Root library for SLS detectors data analysis
|
||||
*
|
||||
* \section intro_sec Introduction
|
||||
We know very well s-curves etc. but at the end everybody uses different functions ;-).
|
||||
|
||||
* \subsection mot_sec Motivation
|
||||
It would be greate to use everybody the same functions...
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
@libdoc The energiCalibration class contains all the necessary functions for s-curve fitting and linear calibration of the threshold.
|
||||
*
|
||||
* @short Energy calibration functions
|
||||
* @author Anna Bergamaschi
|
||||
* @version 0.1alpha
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
class containing all the possible energy calibration functions (scurves with and without charge sharing, gaussian spectrum with and without charge sharing, possibility of chosing the sign of the X-axis)
|
||||
|
||||
*/
|
||||
class energyCalibrationFunctions {
|
||||
|
||||
public:
|
||||
|
||||
energyCalibrationFunctions(int s=-1) {setScanSign(s);};
|
||||
|
||||
/** sets scan sign
|
||||
\param s can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) otherwise gets
|
||||
\returns current scan sign can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions)
|
||||
*/
|
||||
int setScanSign(int s=0) {if (s==1 || s==-1) sign=s; return sign;};;
|
||||
|
||||
|
||||
#ifdef ROOT
|
||||
/**
|
||||
Gaussian Function with charge sharing pedestal
|
||||
par[0] is the absolute height of the background pedestal
|
||||
par[1] is the slope of the background pedestal
|
||||
par[2] is the gaussian peak position
|
||||
par[3] is the RMS of the gaussian (and of the pedestal)
|
||||
par[4] is the height of the function
|
||||
par[5] is the fractional height of the charge sharing pedestal (scales with par[3])
|
||||
*/
|
||||
Double_t gaussChargeSharing(Double_t *x, Double_t *par);
|
||||
|
||||
/**
|
||||
Basic erf function
|
||||
par[0] is the inflection point
|
||||
par[1] is the RMS
|
||||
par[2] is the amplitude
|
||||
*/
|
||||
Double_t erfFunction(Double_t *x, Double_t *par) ;
|
||||
|
||||
/** Erf function with charge sharing slope
|
||||
par[0] is the pedestal
|
||||
par[1] is the slope of the pedestal
|
||||
par[2] is the inflection point
|
||||
par[3] is the RMS
|
||||
par[4] is the amplitude
|
||||
par[5] is the angual coefficient of the charge sharing slope (scales with par[3])
|
||||
*/
|
||||
Double_t erfFunctionChargeSharing(Double_t *x, Double_t *par);
|
||||
|
||||
/** Double Erf function with charge sharing slope
|
||||
par[0] is the pedestal
|
||||
par[1] is the slope of the pedestal
|
||||
par[2] is the inflection point of the first energy
|
||||
par[3] is the RMS of the first energy
|
||||
par[4] is the amplitude of the first energy
|
||||
par[5] is the angual coefficient of the charge sharing slope of the first energy (scales with par[3])
|
||||
par[6] is the inflection point of the second energy
|
||||
par[7] is the RMS of the second energy
|
||||
par[8] is the amplitude of the second energy
|
||||
par[9] is the angual coefficient of the charge sharing slope of the second energy (scales with par[8])
|
||||
*/
|
||||
|
||||
Double_t erfFuncFluo(Double_t *x, Double_t *par);
|
||||
|
||||
|
||||
/**
|
||||
static function Gaussian with charge sharing pedestal with the correct scan sign
|
||||
par[0] is the absolute height of the background pedestal
|
||||
par[1] is the fractional height of the charge sharing pedestal (scales with par[3]
|
||||
par[2] is the gaussian peak position
|
||||
par[3] is the RMS of the gaussian (and of the pedestal)
|
||||
par[4] is the height of the function
|
||||
*/
|
||||
Double_t spectrum(Double_t *x, Double_t *par);
|
||||
|
||||
|
||||
/** Erf function with charge sharing slope with the correct scan sign
|
||||
par[0] is the pedestal
|
||||
par[1] is the slope of the pedestal
|
||||
par[2] is the inflection point
|
||||
par[3] is the RMS
|
||||
par[4] is the amplitude
|
||||
par[5] is the angual coefficient of the charge sharing slope (scales with par[3])
|
||||
*/
|
||||
Double_t scurve(Double_t *x, Double_t *par);
|
||||
|
||||
|
||||
|
||||
/** Double Erf function with charge sharing slope
|
||||
par[0] is the pedestal
|
||||
par[1] is the slope of the pedestal
|
||||
par[2] is the inflection point of the first energy
|
||||
par[3] is the RMS of the first energy
|
||||
par[4] is the amplitude of the first energy
|
||||
par[5] is the angual coefficient of the charge sharing slope of the first energy (scales with par[3])
|
||||
par[6] is the inflection point of the second energy
|
||||
par[7] is the RMS of the second energy
|
||||
par[8] is the amplitude of the second energy
|
||||
par[9] is the angual coefficient of the charge sharing slope of the second energy (scales with par[8])
|
||||
*/
|
||||
Double_t scurveFluo(Double_t *x, Double_t *par);
|
||||
|
||||
#endif
|
||||
|
||||
/** Calculates the median of an array of n elements */
|
||||
static float median(float *x, int n);
|
||||
/** Calculates the median of an array of n elements (swaps the arrays!)*/
|
||||
static int quick_select(int arr[], int n);
|
||||
/** Calculates the median of an array of n elements (swaps the arrays!)*/
|
||||
static int kth_smallest(int *a, int n, int k);
|
||||
|
||||
private:
|
||||
int sign;
|
||||
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
class alowing the energy calibration of photon counting and anlogue detectors
|
||||
|
||||
*/
|
||||
|
||||
class energyCalibration {
|
||||
|
||||
|
||||
public:
|
||||
/**
|
||||
default constructor - creates the function with which the s-curves will be fitted
|
||||
*/
|
||||
energyCalibration();
|
||||
|
||||
/**
|
||||
default destructor - deletes the function with which the s-curves will be fitted
|
||||
*/
|
||||
~energyCalibration();
|
||||
|
||||
/** sets plot flag
|
||||
\param p plot flag (-1 gets, 0 unsets, >0 plot)
|
||||
\returns current plot flag
|
||||
*/
|
||||
int setPlotFlag(int p=-1) {if (p>=0) plot_flag=p; return plot_flag;};
|
||||
|
||||
/** sets scan sign
|
||||
\param s can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) otherwise gets
|
||||
\returns current scan sign can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions)
|
||||
*/
|
||||
int setScanSign(int s=0) {return funcs->setScanSign(s);};
|
||||
|
||||
/** sets plot flag
|
||||
\param p plot flag (-1 gets, 0 unsets, >0 plot)
|
||||
\returns current plot flag
|
||||
*/
|
||||
int setChargeSharing(int p=-1);
|
||||
|
||||
#ifdef ROOT
|
||||
/** sets the s-curve fit range
|
||||
\param mi minimum of the fit range (-1 is histogram x-min)
|
||||
\param ma maximum of the fit range (-1 is histogram x-max)
|
||||
*/
|
||||
void setFitRange(Double_t mi, Double_t ma){fit_min=mi; fit_max=ma;};
|
||||
|
||||
/** gets the s-curve fit range
|
||||
\param mi reference for minimum of the fit range (-1 is histogram x-min)
|
||||
\param ma reference for maximum of the fit range (-1 is histogram x-max)
|
||||
*/
|
||||
void getFitRange(Double_t &mi, Double_t &ma){mi=fit_min; ma=fit_max;};
|
||||
|
||||
|
||||
/** set start parameters for the s-curve function
|
||||
\param par parameters, -1 sets to auto-calculation
|
||||
par[0] is the pedestal
|
||||
par[1] is the slope of the pedestal
|
||||
par[2] is the inflection point
|
||||
par[3] is the RMS
|
||||
par[4] is the amplitude
|
||||
par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) -- always positive
|
||||
*/
|
||||
void setStartParameters(Double_t *par);
|
||||
|
||||
/** get start parameters for the s-curve function
|
||||
\param par parameters, -1 means auto-calculated
|
||||
par[0] is the pedestal
|
||||
par[1] is the slope of the pedestal
|
||||
par[2] is the inflection point
|
||||
par[3] is the RMS
|
||||
par[4] is the amplitude
|
||||
par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) -- always positive
|
||||
*/
|
||||
void getStartParameters(Double_t *par);
|
||||
|
||||
/**
|
||||
fits histogram with the s-curve function
|
||||
\param h1 1d-histogram to be fitted
|
||||
\param mypar pointer to fit parameters array
|
||||
\param emypar pointer to fit parameter errors
|
||||
\returns the fitted function - can be used e.g. to get the Chi2 or similar
|
||||
*/
|
||||
TF1 *fitSCurve(TH1 *h1, Double_t *mypar, Double_t *emypar);
|
||||
|
||||
|
||||
/**
|
||||
fits histogram with the spectrum
|
||||
\param h1 1d-histogram to be fitted
|
||||
\param mypar pointer to fit parameters array
|
||||
\param emypar pointer to fit parameter errors
|
||||
\returns the fitted function - can be used e.g. to get the Chi2 or similar
|
||||
*/
|
||||
TF1 *fitSpectrum(TH1 *h1, Double_t *mypar, Double_t *emypar);
|
||||
|
||||
|
||||
/**
|
||||
calculates gain and offset for the set of inflection points
|
||||
\param nscan number of energy scans
|
||||
\param en array of energies (nscan long)
|
||||
\param een array of errors on energies (nscan long) - can be NULL!
|
||||
\param fl array of inflection points (nscan long)
|
||||
\param efl array of errors on the inflection points (nscan long)
|
||||
\param gain reference to gain resulting from the fit
|
||||
\param off reference to offset resulting from the fit
|
||||
\param egain reference to error on the gain resulting from the fit
|
||||
\param eoff reference to the error on the offset resulting from the fit
|
||||
\returns graph energy vs inflection point
|
||||
*/
|
||||
TGraphErrors* linearCalibration(int nscan, Double_t *en, Double_t *een, Double_t *fl, Double_t *efl, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff);
|
||||
|
||||
/**
|
||||
calculates gain and offset for the set of energy scans
|
||||
\param nscan number of energy scans
|
||||
\param en array of energies (nscan long)
|
||||
\param een array of errors on energies (nscan long) - can be NULL!
|
||||
\param h1 array of TH1
|
||||
\param gain reference to gain resulting from the fit
|
||||
\param off reference to offset resulting from the fit
|
||||
\param egain reference to error on the gain resulting from the fit
|
||||
\param eoff reference to the error on the offset resulting from the fit
|
||||
\returns graph energy vs inflection point
|
||||
*/
|
||||
TGraphErrors* calibrateScurves(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff){return calibrate(nscan, en, een, h1, gain, off, egain, eoff, 1);};
|
||||
|
||||
/**
|
||||
calculates gain and offset for the set of energy spectra
|
||||
\param nscan number of energy scans
|
||||
\param en array of energies (nscan long)
|
||||
\param een array of errors on energies (nscan long) - can be NULL!
|
||||
\param h1 array of TH1
|
||||
\param gain reference to gain resulting from the fit
|
||||
\param off reference to offset resulting from the fit
|
||||
\param egain reference to error on the gain resulting from the fit
|
||||
\param eoff reference to the error on the offset resulting from the fit
|
||||
\returns graph energy vs peak
|
||||
*/
|
||||
TGraphErrors* calibrateSpectra(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff){return calibrate(nscan, en, een, h1, gain, off, egain, eoff, 0);};
|
||||
|
||||
|
||||
#endif
|
||||
private:
|
||||
|
||||
#ifdef ROOT
|
||||
/**
|
||||
calculates gain and offset for the set of energies
|
||||
\param nscan number of energy scans
|
||||
\param en array of energies (nscan long)
|
||||
\param een array of errors on energies (nscan long) - can be NULL!
|
||||
\param h1 array of TH1
|
||||
\param gain reference to gain resulting from the fit
|
||||
\param off reference to offset resulting from the fit
|
||||
\param egain reference to error on the gain resulting from the fit
|
||||
\param eoff reference to the error on the offset resulting from the fit
|
||||
\param integral 1 is an s-curve set (default), 0 spectra
|
||||
\returns graph energy vs peak/inflection point
|
||||
*/
|
||||
TGraphErrors* calibrate(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff, int integral=1);
|
||||
|
||||
|
||||
/**
|
||||
Initializes the start parameters and the range of the fit depending on the histogram characteristics and/or on the start parameters specified by the user
|
||||
\param fun pointer to function to be initialized
|
||||
\param h1 histogram from which to extract the range and start parameters, if not already specified by the user
|
||||
|
||||
*/
|
||||
|
||||
void initFitFunction(TF1 *fun, TH1 *h1);
|
||||
|
||||
|
||||
/**
|
||||
Perfors the fit according to the flags specified and returns the fitted function
|
||||
\param fun function to fit
|
||||
\param h1 histogram to fit
|
||||
\param mypar pointer to fit parameters array
|
||||
\param emypar pointer to fit parameter errors
|
||||
\returns the fitted function - can be used e.g. to get the Chi2 or similar
|
||||
*/
|
||||
TF1 *fitFunction(TF1 *fun, TH1 *h1, Double_t *mypar, Double_t *emypar);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef ROOT
|
||||
Double_t fit_min; /**< minimum of the s-curve fitting range, -1 is histogram x-min */
|
||||
Double_t fit_max; /**< maximum of the s-curve fitting range, -1 is histogram x-max */
|
||||
|
||||
Double_t bg_offset; /**< start value for the background pedestal */
|
||||
Double_t bg_slope; /**< start value for the background slope */
|
||||
Double_t flex; /**< start value for the inflection point */
|
||||
Double_t noise; /**< start value for the noise */
|
||||
Double_t ampl; /**< start value for the number of photons */
|
||||
Double_t cs_slope; /**< start value for the charge sharing slope */
|
||||
|
||||
|
||||
TF1 *fscurve; /**< function with which the s-curve will be fitted */
|
||||
|
||||
TF1 *fspectrum; /**< function with which the spectrum will be fitted */
|
||||
|
||||
#endif
|
||||
|
||||
energyCalibrationFunctions *funcs;
|
||||
int plot_flag; /**< 0 does not plot, >0 plots (flags?) */
|
||||
|
||||
int cs_flag; /**< 0 functions without charge sharing contribution, >0 with charge sharing contribution */
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,24 @@
|
||||
{
|
||||
|
||||
TH1F *h1[3];
|
||||
TH2F *h2=createScan("/scratch/stability_test/ag_source_S%d_10.raw",500,900,10,1280*2);
|
||||
h1[0]=getCh(h2,500);
|
||||
h1[1]=getCh(h2,300);
|
||||
h1[2]=getCh(h2,700);
|
||||
Double_t gain, offset, eg, eo;
|
||||
Double_t en[3]={20,22,24};
|
||||
TH1F *h;
|
||||
energyCalibration *e=new energyCalibration();
|
||||
e->setFitRange(500,700);
|
||||
Double_t mypar[6];
|
||||
mypar[0]=0; //pedestal
|
||||
mypar[1]=0; //pedestal slope
|
||||
mypar[2]=-1; //inflection point - must be free for all energies and will be set at half of the scan range
|
||||
mypar[3]=10; //noise rms
|
||||
mypar[4]=1000; //number of photons
|
||||
mypar[5]=0; //charge sharing slope
|
||||
e->setFitParameters(mypar);
|
||||
|
||||
TGraphErrors *gr=e->calibrate(3,en,NULL,h1,gain,offset,eg,eo);
|
||||
|
||||
}
|
317
slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp
Normal file
317
slsDetectorSoftware/slsDetectorAnalysis/energyConversion.cpp
Normal file
@ -0,0 +1,317 @@
|
||||
#include "energyConversion.h"
|
||||
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
|
||||
|
||||
int energyConversion::readCalibrationFile(string fname, float &gain, float &offset){
|
||||
|
||||
string str;
|
||||
ifstream infile;
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "Opening file "<< fname << std::endl;
|
||||
#endif
|
||||
infile.open(fname.c_str(), ios_base::in);
|
||||
if (infile.is_open()) {
|
||||
getline(infile,str);
|
||||
#ifdef VERBOSE
|
||||
std::cout<< str << std::endl;
|
||||
#endif
|
||||
istringstream ssstr(str);
|
||||
ssstr >> offset >> gain;
|
||||
infile.close();
|
||||
} else {
|
||||
std::cout<< "Could not open calibration file "<< fname << std::endl;
|
||||
gain=0.;
|
||||
offset=0.;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
int energyConversion::writeCalibrationFile(string fname, float gain, float offset){
|
||||
//std::cout<< "Function not yet implemented " << std::endl;
|
||||
ofstream outfile;
|
||||
|
||||
outfile.open (fname.c_str());
|
||||
|
||||
// >> i/o operations here <<
|
||||
if (outfile.is_open()) {
|
||||
outfile << offset << " " << gain << std::endl;
|
||||
} else {
|
||||
std::cout<< "Could not open calibration file "<< fname << " for writing" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
outfile.close();
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* I/O */
|
||||
|
||||
|
||||
slsDetectorDefs::sls_detector_module* energyConversion::readSettingsFile(string fname, detectorType myDetectorType, sls_detector_module *myMod){
|
||||
|
||||
int nflag=0;
|
||||
|
||||
|
||||
if (myMod==NULL) {
|
||||
myMod=createModule(myDetectorType);
|
||||
nflag=1;
|
||||
}
|
||||
|
||||
string myfname;
|
||||
string str;
|
||||
ifstream infile;
|
||||
ostringstream oss;
|
||||
int iline=0;
|
||||
string sargname;
|
||||
int ival;
|
||||
int ichan=0, ichip=0, idac=0;
|
||||
int nch=((myMod->nchan)/(myMod->nchip));
|
||||
|
||||
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "reading settings file for module number "<< myMod->module << std::endl;
|
||||
#endif
|
||||
myfname=fname;
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "file name is "<< myfname << std::endl;
|
||||
#endif
|
||||
infile.open(myfname.c_str(), ios_base::in);
|
||||
if (infile.is_open()) {
|
||||
|
||||
|
||||
switch (myDetectorType) {
|
||||
|
||||
case MYTHEN:
|
||||
|
||||
for (int iarg=0; iarg<myMod->ndac; iarg++) {
|
||||
getline(infile,str);
|
||||
iline++;
|
||||
istringstream ssstr(str);
|
||||
ssstr >> sargname >> ival;
|
||||
#ifdef VERBOSE
|
||||
std::cout<< sargname << " dac nr. " << idac << " is " << ival << std::endl;
|
||||
#endif
|
||||
myMod->dacs[idac]=ival;
|
||||
idac++;
|
||||
}
|
||||
for (ichip=0; ichip<myMod->nchip; ichip++) {
|
||||
getline(infile,str);
|
||||
iline++;
|
||||
#ifdef VERBOSE
|
||||
// std::cout<< str << std::endl;
|
||||
#endif
|
||||
istringstream ssstr(str);
|
||||
ssstr >> sargname >> ival;
|
||||
#ifdef VERBOSE
|
||||
// std::cout<< "chip " << ichip << " " << sargname << " is " << ival << std::endl;
|
||||
#endif
|
||||
|
||||
myMod->chipregs[ichip]=ival;
|
||||
for (ichan=0; ichan<nch; ichan++) {
|
||||
getline(infile,str);
|
||||
#ifdef VERBOSE
|
||||
// std::cout<< str << std::endl;
|
||||
#endif
|
||||
istringstream ssstr(str);
|
||||
|
||||
#ifdef VERBOSE
|
||||
// std::cout<< "channel " << ichan+ichip*thisDetector->nChans <<" iline " << iline<< std::endl;
|
||||
#endif
|
||||
iline++;
|
||||
myMod->chanregs[ichip*nch+ichan]=0;
|
||||
for (int iarg=0; iarg<6 ; iarg++) {
|
||||
ssstr >> ival;
|
||||
//if (ssstr.good()) {
|
||||
switch (iarg) {
|
||||
case 0:
|
||||
#ifdef VERBOSE
|
||||
// std::cout<< "trimbits " << ival ;
|
||||
#endif
|
||||
myMod->chanregs[ichip*nch+ichan]|=ival&0x3f;
|
||||
break;
|
||||
case 1:
|
||||
#ifdef VERBOSE
|
||||
//std::cout<< " compen " << ival ;
|
||||
#endif
|
||||
myMod->chanregs[ichip*nch+ichan]|=ival<<9;
|
||||
break;
|
||||
case 2:
|
||||
#ifdef VERBOSE
|
||||
//std::cout<< " anen " << ival ;
|
||||
#endif
|
||||
myMod->chanregs[ichip*nch+ichan]|=ival<<8;
|
||||
break;
|
||||
case 3:
|
||||
#ifdef VERBOSE
|
||||
//std::cout<< " calen " << ival ;
|
||||
#endif
|
||||
myMod->chanregs[ichip*nch+ichan]|=ival<<7;
|
||||
break;
|
||||
case 4:
|
||||
#ifdef VERBOSE
|
||||
//std::cout<< " outcomp " << ival ;
|
||||
#endif
|
||||
myMod->chanregs[ichip*nch+ichan]|=ival<<10;
|
||||
break;
|
||||
case 5:
|
||||
#ifdef VERBOSE
|
||||
//std::cout<< " counts " << ival << std::endl;
|
||||
#endif
|
||||
myMod->chanregs[ichip*nch+ichan]|=ival<<11;
|
||||
break;
|
||||
default:
|
||||
std::cout<< " too many columns" << std::endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "read " << ichan*ichip << " channels" <<std::endl;
|
||||
#endif
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case GOTTHARD:
|
||||
//---------------dacs---------------
|
||||
for (int iarg=0; iarg<myMod->ndac; iarg++) {
|
||||
getline(infile,str);
|
||||
iline++;
|
||||
#ifdef VERBOSE
|
||||
std::cout<< str << std::endl;
|
||||
#endif
|
||||
istringstream ssstr(str);
|
||||
ssstr >> sargname >> ival;
|
||||
#ifdef VERBOSE
|
||||
std::cout<< sargname << " dac nr. " << idac << " is " << ival << std::endl;
|
||||
#endif
|
||||
myMod->dacs[idac]=ival;
|
||||
idac++;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
std::cout<< "Unknown detector type - don't know how to read file" << myfname << std::endl;
|
||||
infile.close();
|
||||
deleteModule(myMod);
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
infile.close();
|
||||
strcpy(settingsFile,fname.c_str());
|
||||
return myMod;
|
||||
|
||||
} else {
|
||||
std::cout<< "could not open settings file " << myfname << std::endl;
|
||||
|
||||
if (nflag)
|
||||
deleteModule(myMod);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
int energyConversion::writeSettingsFile(string fname, detectorType myDetectorType, sls_detector_module mod){
|
||||
|
||||
ofstream outfile;
|
||||
|
||||
int nch=((mod.nchan)/(mod.nchip));
|
||||
|
||||
string names[100];
|
||||
int id=0;
|
||||
switch (myDetectorType) {
|
||||
case MYTHEN:
|
||||
names[id++]="Vtrim";
|
||||
names[id++]="Vthresh";
|
||||
names[id++]="Rgsh1";
|
||||
names[id++]="Rgsh2";
|
||||
names[id++]="Rgpr";
|
||||
names[id++]="Vcal";
|
||||
names[id++]="outBuffEnable";
|
||||
break;
|
||||
case GOTTHARD:
|
||||
names[id++]="Vref";
|
||||
names[id++]="VcascN";
|
||||
names[id++]="VcascP";
|
||||
names[id++]="Vout";
|
||||
names[id++]="Vcasc";
|
||||
names[id++]="Vin";
|
||||
names[id++]="Vref_comp";
|
||||
names[id++]="Vib_test";
|
||||
names[id++]="config";
|
||||
names[id++]="HV";
|
||||
names[id++]="macaddress";
|
||||
names[id++]="ipaddress";
|
||||
break;
|
||||
default:
|
||||
cout << "Unknown detector type - unknown format for settings file" << endl;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
int iv, ichan, ichip;
|
||||
int iv1, idac;
|
||||
int nb;
|
||||
outfile.open(fname.c_str(), ios_base::out);
|
||||
|
||||
if (outfile.is_open()) {
|
||||
for (idac=0; idac<mod.ndac; idac++) {
|
||||
iv=(int)mod.dacs[idac];
|
||||
outfile << names[idac] << " " << iv << std::endl;
|
||||
}
|
||||
|
||||
for (ichip=0; ichip<mod.nchip; ichip++) {
|
||||
iv1=mod.chipregs[ichip]&1;
|
||||
outfile << names[idac] << " " << iv1 << std::endl;
|
||||
for (ichan=0; ichan<nch; ichan++) {
|
||||
iv=mod.chanregs[ichip*nch+ichan];
|
||||
iv1= (iv&0x3f);
|
||||
outfile <<iv1 << " ";
|
||||
nb=9;
|
||||
iv1=((iv&(1<<nb))>>nb);
|
||||
outfile << iv1 << " ";
|
||||
nb=8;
|
||||
iv1=((iv&(1<<nb))>>nb);
|
||||
outfile << iv1 << " ";
|
||||
nb=7;
|
||||
iv1=((iv&(1<<nb))>>nb);
|
||||
outfile <<iv1 << " ";
|
||||
nb=10;
|
||||
iv1=((iv&(1<<nb))>>nb);
|
||||
outfile << iv1 << " ";
|
||||
nb=11;
|
||||
iv1= ((iv&0xfffff800)>>nb);
|
||||
outfile << iv1 << std::endl;
|
||||
}
|
||||
}
|
||||
outfile.close();
|
||||
return OK;
|
||||
} else {
|
||||
std::cout<< "could not open SETTINGS file " << fname << std::endl;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
68
slsDetectorSoftware/slsDetectorAnalysis/energyConversion.h
Normal file
68
slsDetectorSoftware/slsDetectorAnalysis/energyConversion.h
Normal file
@ -0,0 +1,68 @@
|
||||
#ifndef ENERGYCONVERSION_H
|
||||
#define ENERGYCONVERSION_H
|
||||
|
||||
#include "sls_detector_defs.h"
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
|
||||
class energyConversion: public slsDetectorDefs {
|
||||
|
||||
public:
|
||||
energyConversion(){};
|
||||
virtual ~energyConversion(){};
|
||||
|
||||
|
||||
/**
|
||||
|
||||
reads a calibration file MOVE TO ENERGY CALIBRATION?!?!??!?
|
||||
\param fname file to be read
|
||||
\param gain reference to the gain variable
|
||||
\offset reference to the offset variable
|
||||
*/
|
||||
static int readCalibrationFile(string fname, float &gain, float &offset);
|
||||
|
||||
/**
|
||||
|
||||
writes a calibration file MOVE TO ENERGY CALIBRATION?!?!??!?
|
||||
\param fname file to be written
|
||||
\param gain
|
||||
\param offset
|
||||
*/
|
||||
static int writeCalibrationFile(string fname, float gain, float offset);
|
||||
|
||||
|
||||
/**
|
||||
reads a trim/settings file
|
||||
\param fname name of the file to be read
|
||||
\param myMod pointer to the module structure which has to be set. <BR> If it is NULL a new module structure will be created
|
||||
\returns the pointer to myMod or NULL if reading the file failed
|
||||
\sa mythenDetector::readSettingsFile
|
||||
*/
|
||||
|
||||
sls_detector_module* readSettingsFile(string fname, detectorType myDetectorType, sls_detector_module* myMod=NULL);
|
||||
|
||||
/**
|
||||
writes a trim/settings file
|
||||
\param fname name of the file to be written
|
||||
\param mod module structure which has to be written to file
|
||||
\returns OK or FAIL if the file could not be written
|
||||
|
||||
\sa ::sls_detector_module mythenDetector::writeSettingsFile(string, sls_detector_module)
|
||||
*/
|
||||
int writeSettingsFile(string fname, detectorType myDetectorType, sls_detector_module mod);
|
||||
|
||||
|
||||
virtual sls_detector_module* createModule(detectorType myDetectorType)=0;
|
||||
|
||||
virtual void deleteModule(sls_detector_module *myMod)=0;
|
||||
|
||||
protected:
|
||||
char *settingsFile;
|
||||
|
||||
|
||||
|
||||
};
|
||||
#endif
|
646
slsDetectorSoftware/slsDetectorAnalysis/fileIO.cpp
Normal file
646
slsDetectorSoftware/slsDetectorAnalysis/fileIO.cpp
Normal file
@ -0,0 +1,646 @@
|
||||
#include "fileIO.h"
|
||||
|
||||
|
||||
|
||||
|
||||
string fileIO::createFileName(char *filepath, char *filename, int aMask, float sv0, int prec0, float sv1, int prec1, int pindex, int npos, int findex) {
|
||||
ostringstream osfn;
|
||||
// string fn;
|
||||
/*directory name +root file name */
|
||||
osfn << filepath << "/" << filename;
|
||||
|
||||
// cout << osfn.str() << endl;
|
||||
|
||||
// scan level 0
|
||||
if ( aMask& (1 << (MAX_ACTIONS)))
|
||||
osfn << "_S" << fixed << setprecision(prec0) << sv0;
|
||||
|
||||
//cout << osfn.str() << endl;
|
||||
|
||||
//scan level 1
|
||||
if (aMask & (1 << (MAX_ACTIONS+1)))
|
||||
osfn << "_s" << fixed << setprecision(prec1) << sv1;
|
||||
|
||||
//cout << osfn.str() << endl;
|
||||
|
||||
|
||||
//position
|
||||
if (pindex>0 && pindex<=npos)
|
||||
osfn << "_p" << pindex;
|
||||
|
||||
//cout << osfn.str() << endl;
|
||||
|
||||
// file index
|
||||
osfn << "_" << findex;
|
||||
|
||||
//cout << osfn.str() << endl;
|
||||
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << "created file name " << osfn.str() << endl;
|
||||
#endif
|
||||
|
||||
//cout << osfn.str() << endl;
|
||||
//fn=oosfn.str()sfn.str();
|
||||
return osfn.str();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* I/O */
|
||||
|
||||
/* generates file name without extension*/
|
||||
|
||||
string fileIO::createFileName() {
|
||||
return createFileName(filePath, \
|
||||
fileName, \
|
||||
getActionMask(), \
|
||||
getCurrentScanVariable(0), \
|
||||
getScanPrecision(0), \
|
||||
getCurrentScanVariable(1), \
|
||||
getScanPrecision(1), \
|
||||
getCurrentPositionIndex(), \
|
||||
getNumberOfPositions(), \
|
||||
*fileIndex \
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
int fileIO::getFileIndexFromFileName(string fname) {
|
||||
int i;
|
||||
size_t dot=fname.rfind(".");
|
||||
if (dot==string::npos)
|
||||
return -1;
|
||||
size_t uscore=fname.rfind("_");
|
||||
if (uscore==string::npos)
|
||||
return -1;
|
||||
|
||||
if (sscanf( fname.substr(uscore+1,dot-uscore-1).c_str(),"%d",&i)) {
|
||||
|
||||
return i;
|
||||
}
|
||||
//#ifdef VERBOSE
|
||||
cout << "******************************** cannot parse file index" << endl;
|
||||
//#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fileIO::getVariablesFromFileName(string fname, int &index, int &p_index, float &sv0, float &sv1) {
|
||||
|
||||
int i;
|
||||
float f;
|
||||
string s;
|
||||
|
||||
|
||||
index=-1;
|
||||
p_index=-1;
|
||||
sv0=-1;
|
||||
sv1=-1;
|
||||
|
||||
|
||||
// size_t dot=fname.rfind(".");
|
||||
//if (dot==string::npos)
|
||||
// return -1;
|
||||
size_t uscore=fname.rfind("_");
|
||||
if (uscore==string::npos)
|
||||
return -1;
|
||||
s=fname;
|
||||
|
||||
//if (sscanf(s.substr(uscore+1,dot-uscore-1).c_str(),"%d",&i)) {
|
||||
if (sscanf(s.substr(uscore+1,s.size()-uscore-1).c_str(),"%d",&i)) {
|
||||
index=i;
|
||||
#ifdef VERBOSE
|
||||
cout << "******************************** file index is " << index << endl;
|
||||
#endif
|
||||
//return i;
|
||||
s=fname.substr(0,uscore);
|
||||
}
|
||||
else
|
||||
cout << "******************************** cannot parse file index" << endl;
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << s << endl;
|
||||
#endif
|
||||
|
||||
|
||||
uscore=s.rfind("_");
|
||||
|
||||
|
||||
|
||||
|
||||
if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"p%d",&i)) {
|
||||
p_index=i;
|
||||
#ifdef VERBOSE
|
||||
cout << "******************************** position index is " << p_index << endl;
|
||||
#endif
|
||||
s=fname.substr(0,uscore);
|
||||
}
|
||||
else
|
||||
cout << "******************************** cannot parse position index" << endl;
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << s << endl;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
uscore=s.rfind("_");
|
||||
|
||||
|
||||
|
||||
|
||||
if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"s%f",&f)) {
|
||||
sv1=f;
|
||||
#ifdef VERBOSE
|
||||
cout << "******************************** scan variable 1 is " << sv1 << endl;
|
||||
#endif
|
||||
s=fname.substr(0,uscore);
|
||||
}
|
||||
else
|
||||
cout << "******************************** cannot parse scan varable 1" << endl;
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << s << endl;
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
uscore=s.rfind("_");
|
||||
|
||||
|
||||
|
||||
|
||||
if (sscanf( s.substr(uscore+1,s.size()-uscore-1).c_str(),"S%f",&f)) {
|
||||
sv0=f;
|
||||
#ifdef VERBOSE
|
||||
cout << "******************************** scan variable 0 is " << sv0 << endl;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
cout << "******************************** cannot parse scan varable 0" << endl;
|
||||
|
||||
#ifdef VERBOSE
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int fileIO::writeDataFile(string fname, int nch, float *data, float *err, float *ang, char dataformat){
|
||||
|
||||
|
||||
ofstream outfile;
|
||||
// int idata;
|
||||
if (data==NULL)
|
||||
return FAIL;
|
||||
|
||||
// args|=0x10; // one line per channel!
|
||||
|
||||
outfile.open (fname.c_str(),ios_base::out);
|
||||
if (outfile.is_open())
|
||||
{
|
||||
writeDataFile(outfile, nch, data, err, ang, dataformat, 0);
|
||||
outfile.close();
|
||||
return OK;
|
||||
} else {
|
||||
std::cout<< "Could not open file " << fname << "for writing"<< std::endl;
|
||||
return FAIL;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
int fileIO::writeDataFile(ofstream &outfile, int nch, float *data, float *err, float *ang, char dataformat, int offset){
|
||||
|
||||
|
||||
int idata;
|
||||
if (data==NULL)
|
||||
return FAIL;
|
||||
|
||||
// args|=0x10; // one line per channel!
|
||||
|
||||
|
||||
for (int ichan=0; ichan<nch; ichan++) {
|
||||
if (ang==NULL) {
|
||||
outfile << ichan+offset << " ";
|
||||
} else {
|
||||
outfile << ang[ichan] << " ";
|
||||
}
|
||||
|
||||
switch (dataformat) {
|
||||
case 'f':
|
||||
outfile << *(data+ichan)<< " ";
|
||||
break;
|
||||
case 'i':
|
||||
default:
|
||||
idata=(int)(*(data+ichan));
|
||||
outfile << idata << " ";
|
||||
}
|
||||
if (err) {
|
||||
outfile << *(err+ichan)<< " ";
|
||||
}
|
||||
// if (args&0x10) {
|
||||
outfile << std::endl;
|
||||
// }
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*writes raw data file */
|
||||
int fileIO::writeDataFile(string fname, int nch, int *data){
|
||||
ofstream outfile;
|
||||
if (data==NULL)
|
||||
return FAIL;
|
||||
|
||||
outfile.open (fname.c_str(),ios_base::out);
|
||||
if (outfile.is_open())
|
||||
{
|
||||
writeDataFile(outfile, nch, data, 0);
|
||||
outfile.close();
|
||||
return OK;
|
||||
} else {
|
||||
std::cout<< "Could not open file " << fname << "for writing"<< std::endl;
|
||||
return FAIL;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*writes raw data file */
|
||||
int fileIO::writeDataFile(ofstream &outfile, int nch, int *data, int offset){
|
||||
if (data==NULL)
|
||||
return FAIL;
|
||||
|
||||
for (int ichan=0; ichan<nch; ichan++)
|
||||
outfile << ichan+offset << " " << *(data+ichan) << std::endl;
|
||||
|
||||
return OK;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*writes raw data file */
|
||||
int fileIO::writeDataFile(string fname, int nch, short int *data){
|
||||
ofstream outfile;
|
||||
if (data==NULL)
|
||||
return FAIL;
|
||||
|
||||
outfile.open (fname.c_str(),ios_base::out);
|
||||
if (outfile.is_open())
|
||||
{
|
||||
writeDataFile(outfile, nch, data, 0);
|
||||
outfile.close();
|
||||
return OK;
|
||||
} else {
|
||||
std::cout<< "Could not open file " << fname << "for writing"<< std::endl;
|
||||
return FAIL;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*writes raw data file */
|
||||
int fileIO::writeDataFile(ofstream &outfile, int nch, short int *data, int offset){
|
||||
if (data==NULL)
|
||||
return FAIL;
|
||||
|
||||
for (int ichan=0; ichan<nch; ichan++)
|
||||
outfile << ichan+offset << " " << *(data+ichan) << std::endl;
|
||||
|
||||
return OK;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int fileIO::readDataFile(int nch, string fname, float *data, float *err, float *ang, char dataformat){
|
||||
|
||||
|
||||
ifstream infile;
|
||||
int iline=0;//ichan,
|
||||
//int interrupt=0;
|
||||
//float fdata, ferr, fang;
|
||||
int maxchans;
|
||||
//int ich;
|
||||
string str;
|
||||
|
||||
|
||||
maxchans=nch;
|
||||
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "Opening file "<< fname << std::endl;
|
||||
#endif
|
||||
infile.open(fname.c_str(), ios_base::in);
|
||||
if (infile.is_open()) {
|
||||
iline=readDataFile(nch, infile, data, err, ang, dataformat, 0);
|
||||
infile.close();
|
||||
} else {
|
||||
std::cout<< "Could not read file " << fname << std::endl;
|
||||
return -1;
|
||||
}
|
||||
return iline;
|
||||
};
|
||||
|
||||
|
||||
int fileIO::readDataFile(int nch, ifstream &infile, float *data, float *err, float *ang, char dataformat, int offset){
|
||||
|
||||
|
||||
int ichan,iline=0;
|
||||
int interrupt=0;
|
||||
float fdata, ferr, fang;
|
||||
int maxchans;
|
||||
int ich;
|
||||
string str;
|
||||
|
||||
|
||||
maxchans=nch;
|
||||
|
||||
|
||||
while (infile.good() and interrupt==0) {
|
||||
getline(infile,str);
|
||||
#ifdef VERBOSE
|
||||
std::cout<< str << std::endl;
|
||||
#endif
|
||||
istringstream ssstr(str);
|
||||
if (ang==NULL) {
|
||||
ssstr >> ichan >> fdata;
|
||||
//ich=ichan;
|
||||
if (ssstr.fail() || ssstr.bad()) {
|
||||
interrupt=1;
|
||||
break;
|
||||
}
|
||||
// if (ich!=iline)
|
||||
// std::cout<< "Channel number " << ichan << " does not match with line number " << iline << " " << dataformat << std::endl;
|
||||
ich=iline;
|
||||
if (ichan<offset)
|
||||
continue;
|
||||
} else {
|
||||
ssstr >> fang >> fdata;
|
||||
ich=iline;
|
||||
}
|
||||
if (ssstr.fail() || ssstr.bad()) {
|
||||
interrupt=1;
|
||||
break;
|
||||
}
|
||||
if (err)
|
||||
ssstr >> ferr;
|
||||
if (ssstr.fail() || ssstr.bad()) {
|
||||
interrupt=1;
|
||||
break;
|
||||
}
|
||||
if (ich<maxchans) {
|
||||
if (ang) {
|
||||
ang[ich]=fang;
|
||||
}
|
||||
data[ich]=fdata;
|
||||
if (err)
|
||||
err[ich]=ferr;
|
||||
iline++;
|
||||
} // else {
|
||||
// std::cout<< " too many lines in file: "<< iline << " instead of " << maxchans << std::endl;
|
||||
// interrupt=1;
|
||||
// break;
|
||||
// }
|
||||
if (iline>=nch) {
|
||||
interrupt=1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return iline;
|
||||
};
|
||||
|
||||
|
||||
|
||||
int fileIO::readDataFile(string fname, int *data, int nch){
|
||||
|
||||
ifstream infile;
|
||||
int iline=0;//ichan, idata,
|
||||
//int interrupt=0;
|
||||
string str;
|
||||
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "Opening file "<< fname << std::endl;
|
||||
#endif
|
||||
infile.open(fname.c_str(), ios_base::in);
|
||||
if (infile.is_open()) {
|
||||
iline=readDataFile(infile, data, nch, 0);
|
||||
infile.close();
|
||||
} else {
|
||||
std::cout<< "Could not read file " << fname << std::endl;
|
||||
return -1;
|
||||
}
|
||||
return iline;
|
||||
};
|
||||
|
||||
int fileIO::readDataFile(ifstream &infile, int *data, int nch, int offset){
|
||||
|
||||
int ichan, idata, iline=0;
|
||||
int interrupt=0;
|
||||
string str;
|
||||
|
||||
|
||||
while (infile.good() and interrupt==0) {
|
||||
getline(infile,str);
|
||||
#ifdef VERBOSE
|
||||
std::cout<< str << std::endl;
|
||||
#endif
|
||||
istringstream ssstr(str);
|
||||
ssstr >> ichan >> idata;
|
||||
if (ssstr.fail() || ssstr.bad()) {
|
||||
interrupt=1;
|
||||
break;
|
||||
}
|
||||
// if (ichan!=iline) {
|
||||
// std::cout<< " Expected channel "<< iline <<" but read channel "<< ichan << std::endl;
|
||||
// interrupt=1;
|
||||
// break;
|
||||
// } else {
|
||||
if (iline<nch) {
|
||||
if (ichan>=offset) {
|
||||
data[iline]=idata;
|
||||
iline++;
|
||||
}
|
||||
} else {
|
||||
interrupt=1;
|
||||
break;
|
||||
}
|
||||
// }
|
||||
}
|
||||
return iline;
|
||||
};
|
||||
|
||||
|
||||
int fileIO::readDataFile(string fname, short int *data, int nch){
|
||||
|
||||
ifstream infile;
|
||||
int iline=0;//ichan,
|
||||
//int interrupt=0;
|
||||
string str;
|
||||
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "Opening file "<< fname << std::endl;
|
||||
#endif
|
||||
infile.open(fname.c_str(), ios_base::in);
|
||||
if (infile.is_open()) {
|
||||
iline=readDataFile(infile, data, nch, 0);
|
||||
infile.close();
|
||||
} else {
|
||||
std::cout<< "Could not read file " << fname << std::endl;
|
||||
return -1;
|
||||
}
|
||||
return iline;
|
||||
};
|
||||
|
||||
int fileIO::readDataFile(ifstream &infile, short int *data, int nch, int offset){
|
||||
|
||||
int ichan, iline=0;
|
||||
short int idata;
|
||||
int interrupt=0;
|
||||
string str;
|
||||
while (infile.good() and interrupt==0) {
|
||||
getline(infile,str);
|
||||
#ifdef VERBOSE
|
||||
;//std::cout<< str << std::endl;
|
||||
#endif
|
||||
istringstream ssstr(str);
|
||||
ssstr >> ichan >> idata;
|
||||
if (ssstr.fail() || ssstr.bad()) {
|
||||
interrupt=1;
|
||||
break;
|
||||
}
|
||||
// if (ichan!=iline) {
|
||||
// std::cout<< " Expected channel "<< iline <<" but read channel "<< ichan << std::endl;
|
||||
// interrupt=1;
|
||||
// break;
|
||||
// } else {
|
||||
if (iline<nch) {
|
||||
if (ichan>=offset) {
|
||||
data[iline]=idata;
|
||||
iline++;
|
||||
}
|
||||
} else {
|
||||
interrupt=1;
|
||||
break;
|
||||
}
|
||||
// }
|
||||
#ifdef VERBOSE
|
||||
;//std::cout<< "read " << iline <<" channels " << std::endl;
|
||||
#endif
|
||||
}
|
||||
return iline;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*writes raw data file */
|
||||
|
||||
int fileIO::writeDataFile(string fname, float *data, float *err, float *ang, char dataformat, int nch){
|
||||
if (nch==-1)
|
||||
nch=getTotalNumberOfChannels();
|
||||
|
||||
return writeDataFile(fname, nch, data, err, ang, dataformat);
|
||||
|
||||
}
|
||||
int fileIO::writeDataFile(ofstream &outfile, float *data, float *err, float *ang, char dataformat, int nch, int offset){
|
||||
if (nch==-1)
|
||||
nch=getTotalNumberOfChannels();
|
||||
|
||||
return writeDataFile(outfile, nch, data, err, ang, dataformat, offset);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int fileIO::writeDataFile(string fname, int *data){
|
||||
|
||||
return writeDataFile(fname, getTotalNumberOfChannels(), data);
|
||||
}
|
||||
|
||||
int fileIO::writeDataFile(ofstream &outfile, int *data, int offset){
|
||||
|
||||
return writeDataFile(outfile, getTotalNumberOfChannels(), data, offset);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int fileIO::writeDataFile(string fname, short int *data){
|
||||
|
||||
return writeDataFile(fname, getTotalNumberOfChannels(), data);
|
||||
}
|
||||
|
||||
int fileIO::writeDataFile(ofstream &outfile, short int *data, int offset){
|
||||
|
||||
return writeDataFile(outfile, getTotalNumberOfChannels(), data, offset);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int fileIO::readDataFile(string fname, float *data, float *err, float *ang, char dataformat) {
|
||||
return readDataFile(getTotalNumberOfChannels(), fname, data, err, ang, dataformat);
|
||||
|
||||
}
|
||||
|
||||
int fileIO::readDataFile(ifstream &infile, float *data, float *err, float *ang, char dataformat, int offset) {
|
||||
return readDataFile(getTotalNumberOfChannels(), infile, data, err, ang, dataformat, offset);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
int fileIO::readDataFile(string fname, int *data){
|
||||
|
||||
return readDataFile(fname, data, getTotalNumberOfChannels());
|
||||
};
|
||||
|
||||
|
||||
int fileIO::readDataFile(ifstream &infile, int *data, int offset){
|
||||
|
||||
return readDataFile(infile, data, getTotalNumberOfChannels(), offset);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int fileIO::readDataFile(string fname, short int *data){
|
||||
|
||||
return readDataFile(fname, data, getTotalNumberOfChannels());
|
||||
};
|
||||
|
||||
|
||||
int fileIO::readDataFile(ifstream &infile, short int *data, int offset){
|
||||
|
||||
return readDataFile(infile, data, getTotalNumberOfChannels(),offset);
|
||||
};
|
||||
|
284
slsDetectorSoftware/slsDetectorAnalysis/fileIO.h
Normal file
284
slsDetectorSoftware/slsDetectorAnalysis/fileIO.h
Normal file
@ -0,0 +1,284 @@
|
||||
#ifndef FILEIO_H
|
||||
#define FILEIO_H
|
||||
|
||||
#include "sls_detector_defs.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <queue>
|
||||
#include <math.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class fileIO : public slsDetectorDefs {
|
||||
|
||||
|
||||
|
||||
public:
|
||||
fileIO(){};
|
||||
virtual ~fileIO(){};
|
||||
|
||||
|
||||
/**
|
||||
sets the default output files path
|
||||
*/
|
||||
string setFilePath(string s) {sprintf(filePath, s.c_str()); return string(filePath);};
|
||||
|
||||
/**
|
||||
sets the default output files root name
|
||||
*/
|
||||
string setFileName(string s) {sprintf(fileName, s.c_str()); return string(fileName);};
|
||||
|
||||
/**
|
||||
sets the default output file index
|
||||
*/
|
||||
int setFileIndex(int i) {*fileIndex=i; return *fileIndex;};
|
||||
|
||||
/**
|
||||
returns the default output files path
|
||||
\sa sharedSlsDetector
|
||||
*/
|
||||
string getFilePath() {return string(filePath);};
|
||||
|
||||
/**
|
||||
returns the default output files root name
|
||||
*/
|
||||
string getFileName() {return string(fileName);};
|
||||
|
||||
/**
|
||||
returns the default output file index
|
||||
*/
|
||||
int getFileIndex() {return *fileIndex;};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** generates file name without extension
|
||||
|
||||
always appends to file path and file name the run index.
|
||||
|
||||
in case also appends the position index
|
||||
|
||||
Filenames will be of the form: filepath/filename(_px)_i
|
||||
where x is the position index and i is the run index
|
||||
\param filepath outdir
|
||||
\param filename file root name
|
||||
\param aMask action mask (scans, positions)
|
||||
\param sv0 scan variable 0
|
||||
\param prec0 scan precision 0
|
||||
\param sv1 scan variable 1
|
||||
\param prec1 scan precision 1
|
||||
\param pindex position index
|
||||
\param number of positions
|
||||
\param findex file index
|
||||
\returns file name without extension
|
||||
*/
|
||||
static string createFileName(char *filepath, char *filename, int aMask, float sv0, int prec0, float sv1, int prec1, int pindex, int npos, int findex);
|
||||
|
||||
virtual string createFileName();
|
||||
|
||||
|
||||
/** static function that returns the file index from the file name
|
||||
\param fname file name
|
||||
\returns file index*/
|
||||
static int getFileIndexFromFileName(string fname);
|
||||
|
||||
/** static function that returns the variables from the file name
|
||||
\param fname file name
|
||||
\param index reference to index
|
||||
\param p_index reference to position index
|
||||
\param sv0 reference to scan variable 0
|
||||
\param sv1 reference to scan variable 1
|
||||
\returns file index
|
||||
*/
|
||||
static int getVariablesFromFileName(string fname, int &index, int &p_index, float &sv0, float &sv1);
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
writes a data file
|
||||
\param name of the file to be written
|
||||
\param data array of data values
|
||||
\param err array of arrors on the data. If NULL no errors will be written
|
||||
|
||||
\param ang array of angular values. If NULL data will be in the form chan-val(-err) otherwise ang-val(-err)
|
||||
\param dataformat format of the data: can be 'i' integer or 'f' float (default)
|
||||
\param nch number of channels to be written to file. if -1 defaults to the number of installed channels of the detector
|
||||
\returns OK or FAIL if it could not write the file or data=NULL
|
||||
|
||||
*/
|
||||
virtual int writeDataFile(string fname, float *data, float *err=NULL, float *ang=NULL, char dataformat='f', int nch=-1);
|
||||
int writeDataFile(ofstream &outfile, float *data, float *err=NULL, float *ang=NULL, char dataformat='f', int nch=-1, int offset=0);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
writes a data file
|
||||
\param name of the file to be written
|
||||
\param data array of data values
|
||||
\returns OK or FAIL if it could not write the file or data=NULL
|
||||
\sa mythenDetector::writeDataFile
|
||||
*/
|
||||
virtual int writeDataFile(string fname, int *data);
|
||||
int writeDataFile(ofstream &outfile, int *data, int offset=0);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
writes a data file
|
||||
\param name of the file to be written
|
||||
\param data array of data values
|
||||
\returns OK or FAIL if it could not write the file or data=NULL
|
||||
\sa mythenDetector::writeDataFile
|
||||
*/
|
||||
virtual int writeDataFile(string fname, short int *data);
|
||||
int writeDataFile(ofstream &outfile, short int *data, int offset=0);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
reads a data file
|
||||
\param name of the file to be read
|
||||
\param data array of data values to be filled
|
||||
\param err array of arrors on the data. If NULL no errors are expected on the file
|
||||
|
||||
\param ang array of angular values. If NULL data are expected in the form chan-val(-err) otherwise ang-val(-err)
|
||||
\param dataformat format of the data: can be 'i' integer or 'f' float (default)
|
||||
\param nch number of channels to be written to file. if <=0 defaults to the number of installed channels of the detector
|
||||
\returns OK or FAIL if it could not read the file or data=NULL
|
||||
|
||||
*/
|
||||
virtual int readDataFile(string fname, float *data, float *err=NULL, float *ang=NULL, char dataformat='f');
|
||||
int readDataFile(ifstream& infile, float *data, float *err=NULL, float *ang=NULL, char dataformat='f', int offset=0);
|
||||
|
||||
/**
|
||||
|
||||
reads a data file
|
||||
\param name of the file to be read
|
||||
\param data array of data values
|
||||
\returns OK or FAIL if it could not read the file or data=NULL
|
||||
*/
|
||||
virtual int readDataFile(string fname, int *data);
|
||||
int readDataFile(ifstream &infile, int *data, int offset=0);
|
||||
|
||||
/**
|
||||
|
||||
reads a data file
|
||||
\param name of the file to be read
|
||||
\param data array of data values
|
||||
\returns OK or FAIL if it could not read the file or data=NULL
|
||||
*/
|
||||
virtual int readDataFile(string fname, short int *data);
|
||||
int readDataFile(ifstream &infile, short int *data, int offset=0);
|
||||
|
||||
/**
|
||||
|
||||
writes a data file
|
||||
\param name of the file to be written
|
||||
\param data array of data values
|
||||
\param err array of arrors on the data. If NULL no errors will be written
|
||||
|
||||
\param ang array of angular values. If NULL data will be in the form chan-val(-err) otherwise ang-val(-err)
|
||||
\param dataformat format of the data: can be 'i' integer or 'f' float (default)
|
||||
\param nch number of channels to be written to file. if -1 defaults to the number of installed channels of the detector
|
||||
\returns OK or FAIL if it could not write the file or data=NULL
|
||||
\sa mythenDetector::writeDataFile
|
||||
|
||||
*/
|
||||
|
||||
static int writeDataFile(string fname, int nch, float *data, float *err=NULL, float *ang=NULL, char dataformat='f');
|
||||
static int writeDataFile(ofstream &outfile, int nch, float *data, float *err=NULL, float *ang=NULL, char dataformat='f', int offset=0);
|
||||
|
||||
/**
|
||||
|
||||
writes a data file
|
||||
\param name of the file to be written
|
||||
\param data array of data values
|
||||
\returns OK or FAIL if it could not write the file or data=NULL
|
||||
\sa mythenDetector::writeDataFile
|
||||
*/
|
||||
static int writeDataFile(string fname,int nch, int *data);
|
||||
static int writeDataFile(ofstream &outfile,int nch, int *data, int offset=0);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
writes a data file
|
||||
\param name of the file to be written
|
||||
\param data array of data values
|
||||
\returns OK or FAIL if it could not write the file or data=NULL
|
||||
\sa mythenDetector::writeDataFile
|
||||
*/
|
||||
static int writeDataFile(string fname,int nch, short int *data);
|
||||
static int writeDataFile(ofstream &outfile,int nch, short int *data, int offset=0);
|
||||
/**
|
||||
|
||||
reads a data file
|
||||
\param name of the file to be read
|
||||
\param data array of data values to be filled
|
||||
\param err array of arrors on the data. If NULL no errors are expected on the file
|
||||
|
||||
\param ang array of angular values. If NULL data are expected in the form chan-val(-err) otherwise ang-val(-err)
|
||||
\param dataformat format of the data: can be 'i' integer or 'f' float (default)
|
||||
\param nch number of channels to be written to file. if <=0 defaults to the number of installed channels of the detector
|
||||
\returns number of channels read or -1 if it could not read the file or data=NULL
|
||||
|
||||
\sa mythenDetector::readDataFile
|
||||
*/
|
||||
static int readDataFile(int nch, string fname, float *data, float *err=NULL, float *ang=NULL, char dataformat='f');
|
||||
static int readDataFile(int nch, ifstream &infile, float *data, float *err=NULL, float *ang=NULL, char dataformat='f', int offset=0);
|
||||
|
||||
/**
|
||||
|
||||
reads a data file
|
||||
\param name of the file to be read
|
||||
\param data array of data values
|
||||
\returns OK or FAIL if it could not read the file or data=NULL
|
||||
*/
|
||||
static int readDataFile(string fname, int *data, int nch);
|
||||
static int readDataFile(ifstream &infile, int *data, int nch, int offset);
|
||||
|
||||
/**
|
||||
|
||||
reads a data file
|
||||
\param name of the file to be read
|
||||
\param data array of data values
|
||||
\returns OK or FAIL if it could not read the file or data=NULL
|
||||
\sa mythenDetector::readDataFile
|
||||
*/
|
||||
static int readDataFile(string fname, short int *data, int nch);
|
||||
static int readDataFile(ifstream &infile, short int *data, int nch, int offset);
|
||||
|
||||
|
||||
virtual int getActionMask() {return 0;};
|
||||
|
||||
virtual float getCurrentScanVariable(int index) {return 0;};
|
||||
virtual int getScanPrecision(int index) {return 0;};
|
||||
|
||||
virtual int getCurrentPositionIndex() {return 0;};
|
||||
virtual int getNumberOfPositions() {return 0;};
|
||||
|
||||
virtual int getTotalNumberOfChannels()=0;
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
char *filePath;
|
||||
char *fileName;
|
||||
int *fileIndex;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
557
slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp
Normal file
557
slsDetectorSoftware/slsDetectorAnalysis/postProcessing.cpp
Normal file
@ -0,0 +1,557 @@
|
||||
#include "postProcessing.h"
|
||||
|
||||
|
||||
postProcessing::postProcessing(){
|
||||
pthread_mutex_t mp1 = PTHREAD_MUTEX_INITIALIZER;
|
||||
mp=mp1;
|
||||
pthread_mutex_init(&mp, NULL);
|
||||
mg=mp1;
|
||||
pthread_mutex_init(&mg, NULL);
|
||||
}
|
||||
|
||||
|
||||
int postProcessing::flatFieldCorrect(float datain, float errin, float &dataout, float &errout, float ffcoefficient, float fferr){
|
||||
float e;
|
||||
|
||||
dataout=datain*ffcoefficient;
|
||||
|
||||
if (errin==0 && datain>=0)
|
||||
e=sqrt(datain);
|
||||
else
|
||||
e=errin;
|
||||
|
||||
if (dataout>0)
|
||||
errout=sqrt(e*ffcoefficient*e*ffcoefficient+datain*fferr*datain*fferr);
|
||||
else
|
||||
errout=1.;
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
||||
int postProcessing::rateCorrect(float datain, float errin, float &dataout, float &errout, float tau, float t){
|
||||
|
||||
// float data;
|
||||
float e;
|
||||
|
||||
dataout=(datain*exp(tau*datain/t));
|
||||
|
||||
if (errin==0 && datain>=0)
|
||||
e=sqrt(datain);
|
||||
else
|
||||
e=errin;
|
||||
|
||||
if (dataout>0)
|
||||
errout=e*dataout*sqrt((1/(datain*datain)+tau*tau/(t*t)));
|
||||
else
|
||||
errout=1.;
|
||||
return 0;
|
||||
|
||||
};
|
||||
|
||||
|
||||
int postProcessing::setBadChannelCorrection(string fname, int &nbad, int *badlist){
|
||||
ifstream infile;
|
||||
string str;
|
||||
int interrupt=0;
|
||||
int ich;
|
||||
int chmin,chmax;
|
||||
#ifdef VERBOSE
|
||||
std::cout << "Setting bad channel correction to " << fname << std::endl;
|
||||
#endif
|
||||
|
||||
if (fname=="" || fname=="none") {
|
||||
nbad=0;
|
||||
return 0;
|
||||
} else {
|
||||
infile.open(fname.c_str(), ios_base::in);
|
||||
if (infile.is_open()==0) {
|
||||
std::cout << "could not open file " << fname <<std::endl;
|
||||
return -1;
|
||||
}
|
||||
nbad=0;
|
||||
while (infile.good() and interrupt==0) {
|
||||
getline(infile,str);
|
||||
#ifdef VERBOSE
|
||||
std::cout << str << std::endl;
|
||||
#endif
|
||||
istringstream ssstr;
|
||||
ssstr.str(str);
|
||||
if (ssstr.bad() || ssstr.fail() || infile.eof()) {
|
||||
interrupt=1;
|
||||
break;
|
||||
}
|
||||
if (str.find('-')!=string::npos) {
|
||||
ssstr >> chmin ;
|
||||
ssstr.str(str.substr(str.find('-')+1,str.size()));
|
||||
ssstr >> chmax;
|
||||
#ifdef VERBOSE
|
||||
std::cout << "channels between"<< chmin << " and " << chmax << std::endl;
|
||||
#endif
|
||||
for (ich=chmin; ich<=chmax; ich++) {
|
||||
if (nbad<MAX_BADCHANS) {
|
||||
badlist[nbad]=ich;
|
||||
nbad++;
|
||||
#ifdef VERBOSE
|
||||
std::cout<< nbad << " Found bad channel "<< ich << std::endl;
|
||||
#endif
|
||||
} else
|
||||
interrupt=1;
|
||||
}
|
||||
} else {
|
||||
ssstr >> ich;
|
||||
#ifdef VERBOSE
|
||||
std::cout << "channel "<< ich << std::endl;
|
||||
#endif
|
||||
if (nbad<MAX_BADCHANS) {
|
||||
badlist[nbad]=ich;
|
||||
nbad++;
|
||||
#ifdef VERBOSE
|
||||
std::cout << nbad << " Found bad channel "<< ich << std::endl;
|
||||
#endif
|
||||
} else
|
||||
interrupt=1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
infile.close();
|
||||
if (nbad>0 && nbad<MAX_BADCHANS) {
|
||||
return nbad;
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void postProcessing::processFrame(int *myData, int delflag) {
|
||||
|
||||
string fname;
|
||||
float *fdata;
|
||||
|
||||
|
||||
incrementProgress();
|
||||
|
||||
/** decode data */
|
||||
fdata=decodeData(myData);
|
||||
|
||||
fname=createFileName();
|
||||
|
||||
|
||||
//uses static function?!?!?!?
|
||||
// writeDataFile (fname+string(".raw"), getTotalNumberOfChannels(),fdata, NULL, NULL, 'i');
|
||||
writeDataFile (fname+string(".raw"),fdata, NULL, NULL, 'i');
|
||||
|
||||
doProcessing(fdata,delflag);
|
||||
|
||||
delete [] myData;
|
||||
myData=NULL;
|
||||
#ifdef VERBOSE
|
||||
// cout << "Pop data queue " << *fileIndex << endl;
|
||||
#endif
|
||||
|
||||
pthread_mutex_lock(&mp);
|
||||
dataQueue.pop(); //remove the data from the queue
|
||||
queuesize=dataQueue.size();
|
||||
pthread_mutex_unlock(&mp);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void postProcessing::doProcessing(float *fdata, int delflag) {
|
||||
|
||||
|
||||
float *rcdata=NULL, *rcerr=NULL;
|
||||
float *ffcdata=NULL, *ffcerr=NULL;
|
||||
float *ang=NULL;
|
||||
// int imod;
|
||||
int np;
|
||||
string ext;
|
||||
string fname;
|
||||
detectorData *thisData;
|
||||
|
||||
|
||||
|
||||
if (*correctionMask!=0) {
|
||||
ext=".dat";
|
||||
} else {
|
||||
ext=".raw";
|
||||
}
|
||||
|
||||
fname=createFileName();
|
||||
|
||||
/** write raw data file */
|
||||
if (*correctionMask==0 && delflag==1) {
|
||||
delete [] fdata;
|
||||
} else {
|
||||
|
||||
/** rate correction */
|
||||
if (*correctionMask&(1<<RATE_CORRECTION)) {
|
||||
rcdata=new float[getTotalNumberOfChannels()];
|
||||
rcerr=new float[getTotalNumberOfChannels()];
|
||||
rateCorrect(fdata,NULL,rcdata,rcerr);
|
||||
delete [] fdata;
|
||||
fdata=NULL;
|
||||
} else {
|
||||
rcdata=fdata;
|
||||
fdata=NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** flat field correction */
|
||||
if (*correctionMask&(1<<FLAT_FIELD_CORRECTION)) {
|
||||
|
||||
ffcdata=new float[getTotalNumberOfChannels()];
|
||||
ffcerr=new float[getTotalNumberOfChannels()];
|
||||
flatFieldCorrect(rcdata,rcerr,ffcdata,ffcerr);
|
||||
delete [] rcdata;
|
||||
rcdata=NULL;
|
||||
if (rcerr)
|
||||
delete [] rcerr;
|
||||
rcerr=NULL;
|
||||
} else {
|
||||
ffcdata=rcdata;
|
||||
ffcerr=rcerr;
|
||||
rcdata=NULL;
|
||||
rcerr=NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// writes angualr converted files
|
||||
|
||||
if (*correctionMask!=0) {
|
||||
if (*correctionMask&(1<< ANGULAR_CONVERSION))
|
||||
ang=convertAngles(currentPosition);
|
||||
writeDataFile (fname+string(".dat"), ffcdata, ffcerr,ang);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (*correctionMask&(1<< ANGULAR_CONVERSION) && (*numberOfPositions)>0) {
|
||||
#ifdef VERBOSE
|
||||
cout << "**************Current position index is " << currentPositionIndex << endl;
|
||||
#endif
|
||||
// if (*numberOfPositions>0) {
|
||||
if (currentPositionIndex<=1) {
|
||||
|
||||
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << "reset merging " << endl;
|
||||
#endif
|
||||
resetMerging();
|
||||
}
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << "add to merging "<< currentPositionIndex << endl;
|
||||
#endif
|
||||
|
||||
if (*correctionMask&(1<< ANGULAR_CONVERSION))
|
||||
addToMerging(ang, ffcdata, ffcerr, badChannelMask );
|
||||
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << currentPositionIndex << " " << (*numberOfPositions) << endl;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
pthread_mutex_lock(&mp);
|
||||
if ((currentPositionIndex>=(*numberOfPositions) && posfinished==1 && queuesize==1)) {
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << "finalize merging " << currentPositionIndex<< endl;
|
||||
#endif
|
||||
np=finalizeMerging();
|
||||
/** file writing */
|
||||
|
||||
currentPositionIndex++;
|
||||
pthread_mutex_unlock(&mp);
|
||||
|
||||
|
||||
fname=createFileName();
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << "writing merged data file" << endl;
|
||||
#endif
|
||||
writeDataFile (fname+string(".dat"),np,getMergedCounts(), getMergedErrors(), getMergedPositions(),'f');
|
||||
#ifdef VERBOSE
|
||||
cout << " done" << endl;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
if (delflag) {
|
||||
deleteMerging();
|
||||
} else {
|
||||
thisData=new detectorData(getMergedCounts(),getMergedErrors(),getMergedPositions(),getCurrentProgress(),(fname+string(ext)).c_str(),np);
|
||||
|
||||
pthread_mutex_lock(&mg);
|
||||
finalDataQueue.push(thisData);
|
||||
pthread_mutex_unlock(&mg);
|
||||
}
|
||||
pthread_mutex_lock(&mp);
|
||||
}
|
||||
pthread_mutex_unlock(&mp);
|
||||
|
||||
if (ffcdata)
|
||||
delete [] ffcdata;
|
||||
ffcdata=NULL;
|
||||
|
||||
if (ffcerr)
|
||||
delete [] ffcerr;
|
||||
ffcerr=NULL;
|
||||
|
||||
if (ang)
|
||||
delete [] ang;
|
||||
ang=NULL;
|
||||
|
||||
} else {
|
||||
if (delflag) {
|
||||
if (ffcdata)
|
||||
delete [] ffcdata;
|
||||
if (ffcerr)
|
||||
delete [] ffcerr;
|
||||
if ( ang)
|
||||
delete [] ang;
|
||||
} else {
|
||||
thisData=new detectorData(ffcdata,ffcerr,NULL,getCurrentProgress(),(fname+string(ext)).c_str(),getTotalNumberOfChannels());
|
||||
pthread_mutex_lock(&mg);
|
||||
finalDataQueue.push(thisData);
|
||||
pthread_mutex_unlock(&mg);
|
||||
}
|
||||
}
|
||||
}
|
||||
incrementFileIndex();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int postProcessing::fillBadChannelMask() {
|
||||
|
||||
int nbad=0;
|
||||
|
||||
|
||||
|
||||
if (*correctionMask&(1<< DISCARD_BAD_CHANNELS)) {
|
||||
nbad=getBadChannelCorrection();
|
||||
#ifdef VERBOSE
|
||||
cout << "number of bad channels is " << nbad << endl;
|
||||
#endif
|
||||
if (nbad>0) {
|
||||
|
||||
int *badChansList=new int[nbad];
|
||||
getBadChannelCorrection(badChansList);
|
||||
|
||||
if (badChannelMask)
|
||||
delete [] badChannelMask;
|
||||
badChannelMask=new int[getTotalNumberOfChannels()];
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << " pointer to bad channel mask is " << badChannelMask << endl;
|
||||
#endif
|
||||
for (int ichan=0; ichan<getTotalNumberOfChannels(); ichan++)
|
||||
badChannelMask[ichan]=0;
|
||||
#ifdef VERBOSE
|
||||
cout << " badChanMask has be reset" << badChannelMask << endl;
|
||||
#endif
|
||||
for (int ichan=0; ichan<nbad; ichan++) {
|
||||
if (badChansList[ichan]<getTotalNumberOfChannels() && badChansList[ichan]>=0 ) {
|
||||
if (badChannelMask[badChansList[ichan]]==0)
|
||||
nbad++;
|
||||
badChannelMask[badChansList[ichan]]=1;
|
||||
|
||||
}
|
||||
}
|
||||
delete [] badChansList;
|
||||
|
||||
} else {
|
||||
if (badChannelMask) {
|
||||
#ifdef VERBOSE
|
||||
cout << "deleting bad channel mask beacuse number of bad channels is 0" << endl;
|
||||
#endif
|
||||
|
||||
delete [] badChannelMask;
|
||||
badChannelMask=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
#ifdef VERBOSE
|
||||
cout << "bad channel correction is disabled " << nbad << endl;
|
||||
#endif
|
||||
if (badChannelMask) {
|
||||
#ifdef VERBOSE
|
||||
cout << "deleting bad channel mask beacuse no bad channel correction is selected" << endl;
|
||||
#endif
|
||||
delete [] badChannelMask;
|
||||
badChannelMask=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef VERBOSE
|
||||
cout << "number of bad channels is " << nbad << endl;
|
||||
#endif
|
||||
return nbad;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void* postProcessing::processData(int delflag) {
|
||||
|
||||
|
||||
#ifdef VERBOSE
|
||||
std::cout<< " processing data - threaded mode " << *threadedProcessing << endl;
|
||||
#endif
|
||||
|
||||
setTotalProgress();
|
||||
pthread_mutex_lock(&mp);
|
||||
queuesize=dataQueue.size();
|
||||
pthread_mutex_unlock(&mp);
|
||||
|
||||
int *myData;
|
||||
int dum=1;
|
||||
|
||||
|
||||
|
||||
while(dum | *threadedProcessing) { // ????????????????????????
|
||||
|
||||
|
||||
pthread_mutex_lock(&mp);
|
||||
while((queuesize=dataQueue.size())>0) {
|
||||
|
||||
/** Pop data queue */
|
||||
myData=dataQueue.front(); // get the data from the queue
|
||||
pthread_mutex_unlock(&mp);
|
||||
|
||||
|
||||
if (myData) {
|
||||
|
||||
processFrame(myData,delflag);
|
||||
|
||||
usleep(1000);
|
||||
}
|
||||
pthread_mutex_unlock(&mp);
|
||||
usleep(1000);
|
||||
|
||||
}
|
||||
|
||||
|
||||
pthread_mutex_unlock(&mp);
|
||||
pthread_mutex_lock(&mp);
|
||||
if (jointhread) {
|
||||
if (dataQueue.size()==0) {
|
||||
pthread_mutex_unlock(&mp);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
pthread_mutex_unlock(&mp);
|
||||
} else {
|
||||
pthread_mutex_unlock(&mp);
|
||||
}
|
||||
dum=0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int* postProcessing::popDataQueue() {
|
||||
int *retval=NULL;
|
||||
if( !dataQueue.empty() ) {
|
||||
retval=dataQueue.front();
|
||||
dataQueue.pop();
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
detectorData* postProcessing::popFinalDataQueue() {
|
||||
detectorData *retval=NULL;
|
||||
pthread_mutex_unlock(&mg);
|
||||
if( !finalDataQueue.empty() ) {
|
||||
retval=finalDataQueue.front();
|
||||
finalDataQueue.pop();
|
||||
}
|
||||
pthread_mutex_unlock(&mg);
|
||||
return retval;
|
||||
}
|
||||
|
||||
void postProcessing::resetDataQueue() {
|
||||
int *retval=NULL;
|
||||
while( !dataQueue.empty() ) {
|
||||
retval=dataQueue.front();
|
||||
dataQueue.pop();
|
||||
delete [] retval;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void postProcessing::resetFinalDataQueue() {
|
||||
detectorData *retval=NULL;
|
||||
pthread_mutex_lock(&mg);
|
||||
while( !finalDataQueue.empty() ) {
|
||||
retval=finalDataQueue.front();
|
||||
finalDataQueue.pop();
|
||||
delete retval;
|
||||
}
|
||||
pthread_mutex_unlock(&mg);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void postProcessing::startThread(int delflag) {
|
||||
pthread_attr_t tattr;
|
||||
int ret;
|
||||
sched_param param, mparam;
|
||||
int policy= SCHED_OTHER;
|
||||
|
||||
|
||||
// set the priority; others are unchanged
|
||||
//newprio = 30;
|
||||
mparam.sched_priority =1;
|
||||
param.sched_priority =1;
|
||||
|
||||
|
||||
/* Initialize and set thread detached attribute */
|
||||
pthread_attr_init(&tattr);
|
||||
pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_JOINABLE);
|
||||
|
||||
|
||||
|
||||
// param.sched_priority = 5;
|
||||
// scheduling parameters of main thread
|
||||
ret = pthread_setschedparam(pthread_self(), policy, &mparam);
|
||||
//#ifdef VERBOSE
|
||||
// printf("current priority is %d\n",param.sched_priority);
|
||||
//#endif
|
||||
if (delflag)
|
||||
ret = pthread_create(&dataProcessingThread, &tattr,startProcessData, (void*)this);
|
||||
else
|
||||
ret = pthread_create(&dataProcessingThread, &tattr,startProcessDataNoDelete, (void*)this);
|
||||
|
||||
pthread_attr_destroy(&tattr);
|
||||
// scheduling parameters of target thread
|
||||
ret = pthread_setschedparam(dataProcessingThread, policy, ¶m);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
379
slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h
Normal file
379
slsDetectorSoftware/slsDetectorAnalysis/postProcessing.h
Normal file
@ -0,0 +1,379 @@
|
||||
#ifndef POSTPROCESSING_H
|
||||
#define POSTPROCESSING_H
|
||||
|
||||
|
||||
#include "sls_detector_defs.h"
|
||||
#include "detectorData.h"
|
||||
#include "angularConversion.h"
|
||||
#include "fileIO.h"
|
||||
#include <string>
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <queue>
|
||||
#include <math.h>
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define MAX_BADCHANS 2000
|
||||
|
||||
|
||||
#define defaultTDead {170,90,750} /**< should be changed in order to have it separate for the different detector types */
|
||||
|
||||
class postProcessing : public angularConversion, public fileIO {
|
||||
|
||||
|
||||
|
||||
public:
|
||||
postProcessing();
|
||||
virtual ~postProcessing(){};
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
get bad channels correction
|
||||
\param bad pointer to array that if bad!=NULL will be filled with the bad channel list
|
||||
\returns 0 if bad channel disabled or no bad channels, >0 otherwise
|
||||
*/
|
||||
virtual int getBadChannelCorrection(int *bad=NULL)=0;
|
||||
|
||||
|
||||
/**
|
||||
get flat field corrections
|
||||
\param corr if !=NULL will be filled with the correction coefficients
|
||||
\param ecorr if !=NULL will be filled with the correction coefficients errors
|
||||
\returns 0 if ff correction disabled, >0 otherwise
|
||||
*/
|
||||
virtual int getFlatFieldCorrection(float *corr=NULL, float *ecorr=NULL)=0;
|
||||
|
||||
/**
|
||||
set flat field corrections
|
||||
\param corr if !=NULL the flat field corrections will be filled with corr (NULL usets ff corrections)
|
||||
\param ecorr if !=NULL the flat field correction errors will be filled with ecorr (1 otherwise)
|
||||
\returns 0 if ff correction disabled, >0 otherwise
|
||||
*/
|
||||
virtual int setFlatFieldCorrection(float *corr, float *ecorr=NULL)=0;
|
||||
|
||||
/**
|
||||
set bad channels correction
|
||||
\param fname file with bad channel list ("" disable)
|
||||
\returns 0 if bad channel disabled, >0 otherwise
|
||||
*/
|
||||
virtual int setBadChannelCorrection(string fname="")=0;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
set bad channels correction
|
||||
\param fname file with bad channel list ("" disable)
|
||||
\param nbad reference to number of bad channels
|
||||
\param badlist array of badchannels
|
||||
\returns 0 if bad channel disabled, >0 otherwise
|
||||
*/
|
||||
static int setBadChannelCorrection(string fname, int &nbad, int *badlist);
|
||||
|
||||
|
||||
/**
|
||||
set bad channels correction
|
||||
\param nch number of bad channels
|
||||
\param chs array of channels
|
||||
\param ff 0 if normal bad channels, 1 if ff bad channels
|
||||
\returns 0 if bad channel disabled, >0 otherwise
|
||||
*/
|
||||
virtual int setBadChannelCorrection(int nch, int *chs, int ff=0)=0;
|
||||
|
||||
/**
|
||||
flat field correct data
|
||||
\param datain data
|
||||
\param errin error on data (if<=0 will default to sqrt(datain)
|
||||
\param dataout corrected data
|
||||
\param errout error on corrected data
|
||||
\param ffcoefficient flat field correction coefficient
|
||||
\param fferr erro on ffcoefficient
|
||||
\returns 0
|
||||
*/
|
||||
static int flatFieldCorrect(float datain, float errin, float &dataout, float &errout, float ffcoefficient, float fferr);
|
||||
|
||||
/**
|
||||
rate correct data
|
||||
\param datain data
|
||||
\param errin error on data (if<=0 will default to sqrt(datain)
|
||||
\param dataout corrected data
|
||||
\param errout error on corrected data
|
||||
\param tau dead time 9in ns)
|
||||
\param t acquisition time (in ns)
|
||||
\returns 0
|
||||
*/
|
||||
static int rateCorrect(float datain, float errin, float &dataout, float &errout, float tau, float t);
|
||||
|
||||
|
||||
|
||||
|
||||
int setAngularCorrectionMask(int i=-1){if (i==0) (*correctionMask)&=~(1<< ANGULAR_CONVERSION); if (i>0) (*correctionMask)|=(1<< ANGULAR_CONVERSION); return ((*correctionMask)&(1<< ANGULAR_CONVERSION));};
|
||||
|
||||
|
||||
|
||||
int enableAngularConversion(int i=-1) {if (i>0) return setAngularConversionFile("default"); if (i==0) return setAngularConversionFile(""); return setAngularCorrectionMask();}
|
||||
|
||||
|
||||
int enableBadChannelCorrection(int i=-1) {if (i>0) return setBadChannelCorrection("default"); if (i==0) return setBadChannelCorrection(""); return ((*correctionMask)&(1<< DISCARD_BAD_CHANNELS));}
|
||||
|
||||
|
||||
|
||||
|
||||
/** returns the bad channel list file */
|
||||
string getBadChannelCorrectionFile() {if ((*correctionMask)&(1<< DISCARD_BAD_CHANNELS)) return string(badChanFile); else return string("none");};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
get flat field corrections file directory
|
||||
\returns flat field correction file directory
|
||||
*/
|
||||
string getFlatFieldCorrectionDir(){return string(flatFieldDir);};
|
||||
/**
|
||||
set flat field corrections file directory
|
||||
\param flat field correction file directory
|
||||
\returns flat field correction file directory
|
||||
*/
|
||||
string setFlatFieldCorrectionDir(string dir){strcpy(flatFieldDir,dir.c_str()); return string(flatFieldDir);};
|
||||
|
||||
/**
|
||||
get flat field corrections file name
|
||||
\returns flat field correction file name
|
||||
*/
|
||||
string getFlatFieldCorrectionFile(){ if ((*correctionMask)&(1<<FLAT_FIELD_CORRECTION)) return string(flatFieldFile); else return string("none");};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
set/get if the data processing and file writing should be done by a separate thread
|
||||
s
|
||||
\param b 0 sequencial data acquisition and file writing, 1 separate thread, -1 get
|
||||
\returns thread flag
|
||||
*/
|
||||
|
||||
int setThreadedProcessing(int b=-1) {if (b>=0) *threadedProcessing=b; return *threadedProcessing;}
|
||||
|
||||
|
||||
|
||||
|
||||
/** processes the data
|
||||
\param delflag 0 leaves the data in the final data queue
|
||||
\returns nothing
|
||||
|
||||
*/
|
||||
void *processData(int delflag);
|
||||
|
||||
/** processes the data
|
||||
\param delflag 0 leaves the data in the final data queue
|
||||
\returns nothing
|
||||
|
||||
*/
|
||||
void processFrame(int* myData, int delflag);
|
||||
|
||||
/** processes the data
|
||||
\param delflag 0 leaves the data in the final data queue
|
||||
\returns nothing
|
||||
|
||||
*/
|
||||
void doProcessing(float* myData, int delflag);
|
||||
|
||||
|
||||
/**
|
||||
pops the data from the data queue
|
||||
\returns pointer to the popped data or NULL if the queue is empty.
|
||||
\sa dataQueue
|
||||
*/
|
||||
int* popDataQueue();
|
||||
|
||||
/**
|
||||
pops the data from thepostprocessed data queue
|
||||
\returns pointer to the popped data or NULL if the queue is empty.
|
||||
\sa finalDataQueue
|
||||
*/
|
||||
detectorData* popFinalDataQueue();
|
||||
|
||||
|
||||
/**
|
||||
resets the raw data queue
|
||||
\sa dataQueue
|
||||
*/
|
||||
void resetDataQueue();
|
||||
|
||||
/**
|
||||
resets the postprocessed data queue
|
||||
\sa finalDataQueue
|
||||
*/
|
||||
void resetFinalDataQueue();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int fillBadChannelMask();
|
||||
|
||||
|
||||
|
||||
|
||||
virtual void incrementProgress()=0;
|
||||
virtual float getCurrentProgress()=0;
|
||||
virtual void incrementFileIndex()=0;
|
||||
virtual int setTotalProgress()=0;
|
||||
|
||||
|
||||
virtual float* decodeData(int *datain)=0;
|
||||
virtual int getTotalNumberOfChannels()=0;
|
||||
|
||||
|
||||
|
||||
|
||||
virtual int rateCorrect(float*, float*, float*, float*)=0;
|
||||
virtual int flatFieldCorrect(float*, float*, float*, float*)=0;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
int *threadedProcessing;
|
||||
|
||||
int *correctionMask;
|
||||
|
||||
char *flatFieldDir;
|
||||
char *flatFieldFile;
|
||||
|
||||
char *badChanFile;
|
||||
int *nBadChans;
|
||||
int *badChansList;
|
||||
int *nBadFF;
|
||||
int *badFFList;
|
||||
|
||||
|
||||
/** mutex to synchronize main and data processing threads */
|
||||
pthread_mutex_t mp;
|
||||
|
||||
|
||||
/** mutex to synchronizedata processing and plotting threads */
|
||||
pthread_mutex_t mg;
|
||||
|
||||
/** sets when the acquisition is finished */
|
||||
int jointhread;
|
||||
|
||||
/** sets when the position is finished */
|
||||
int posfinished;
|
||||
|
||||
/**
|
||||
data queue
|
||||
*/
|
||||
queue<int*> dataQueue;
|
||||
/**
|
||||
queue containing the postprocessed data
|
||||
*/
|
||||
queue<detectorData*> finalDataQueue;
|
||||
|
||||
|
||||
/** data queue size */
|
||||
int queuesize;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
start data processing thread
|
||||
*/
|
||||
void startThread(int delflag=1); //
|
||||
/** the data processing thread */
|
||||
|
||||
pthread_t dataProcessingThread;
|
||||
|
||||
|
||||
|
||||
/** pointer to bad channel mask 0 is channel is good 1 if it is bad \sa fillBadChannelMask() */
|
||||
int *badChannelMask;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
I0 measured
|
||||
*/
|
||||
float currentI0;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
static void* startProcessData(void *n){\
|
||||
postProcessing *myDet=(postProcessing*)n;\
|
||||
myDet->processData(1);\
|
||||
pthread_exit(NULL);\
|
||||
|
||||
};
|
||||
|
||||
static void* startProcessDataNoDelete(void *n){\
|
||||
postProcessing *myDet=(postProcessing*)n;\
|
||||
myDet->processData(0);\
|
||||
pthread_exit(NULL);\
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user