refactored ONLY THE CLIENT first stage, compiles

This commit is contained in:
2018-10-02 15:15:35 +02:00
parent def79807f6
commit c248b12455
150 changed files with 2756 additions and 29940 deletions

View File

@ -4,19 +4,12 @@ set(SOURCES
slsDetector/slsDetectorUsers.cpp
slsDetector/slsDetectorUtils.cpp
slsDetector/slsDetectorCommand.cpp
slsDetector/slsDetectorActions.cpp
slsDetector/slsDetector.cpp
slsDetectorAnalysis/angularConversion.cpp
slsDetectorAnalysis/angularConversionStatic.cpp
slsDetectorAnalysis/energyConversion.cpp
slsDetectorAnalysis/fileIO.cpp
slsDetectorAnalysis/postProcessing.cpp
slsDetectorAnalysis/postProcessingFuncs.cpp
slsReceiverInterface/receiverInterface.cpp
threadFiles/CondVar.cpp
threadFiles/Mutex.cpp
threadFiles/ThreadPool.cpp
usersFunctions/usersFunctions.cpp
)
set(HEADERS
@ -32,7 +25,6 @@ slsDetectorCommand
slsDetectorAnalysis
slsReceiverInterface
threadFiles
usersFunctions
../slsReceiverSoftware/include
../slsReceiverSoftware/MySocketTCP
)
@ -55,6 +47,17 @@ add_library(slsDetectorShared SHARED
${HEADERS}
)
add_library(zmq STATIC IMPORTED GLOBAL)
set(ZMQ_STATIC_ARCHIVE ${CMAKE_CURRENT_SOURCE_DIR}/../slsReceiverSoftware/include/libzmq.a)
set_target_properties(zmq PROPERTIES
IMPORTED_LOCATION ${ZMQ_STATIC_ARCHIVE}
)
target_link_libraries(slsDetectorShared
zmq
)
set(PUBLICHEADERS
commonFiles/sls_detector_defs.h
commonFiles/sls_detector_funcs.h
@ -63,18 +66,10 @@ set(PUBLICHEADERS
sharedMemory/SharedMemory.h
slsDetector/slsDetectorUtils.h
slsDetector/slsDetector.h
slsDetector/slsDetectorActions.h
slsDetector/slsDetectorBase.h
slsDetector/slsDetectorUsers.h
slsDetectorAnalysis/postProcessing.h
slsDetectorAnalysis/detectorData.h
slsDetectorAnalysis/angularConversion.h
slsDetectorAnalysis/angularConversionStatic.h
slsDetectorAnalysis/angleConversionConstant.h
slsDetectorAnalysis/badChannelCorrections.h
slsDetectorAnalysis/energyConversion.h
slsDetectorAnalysis/fileIO.h
slsDetectorAnalysis/fileIOStatic.h
multiSlsDetector/multiSlsDetector.h
slsReceiverInterface/receiverInterface.h
../slsReceiverSoftware/include/sls_receiver_exceptions.h
@ -98,6 +93,10 @@ if(DOXYGEN_FOUND)
)
endif()
install(FILES ${ZMQ_STATIC_ARCHIVE}
DESTINATION lib)
install(TARGETS slsDetectorShared slsDetectorStatic
LIBRARY DESTINATION lib
PUBLIC_HEADER DESTINATION include

View File

@ -9,15 +9,15 @@ CFLAGS= -g -DC_ONLY -fPIC
DFLAGS= -g -DDACS_INT
INCLUDES?= -IcommonFiles -IslsDetector -I../slsReceiverSoftware/MySocketTCP -IusersFunctions -ImultiSlsDetector -IslsDetectorUtils -IslsDetectorCommand -IslsDetectorAnalysis -IslsReceiverInterface -I../slsReceiverSoftware/include -IthreadFiles -IsharedMemory -I$(ASM)
INCLUDES?= -IcommonFiles -IslsDetector -I../slsReceiverSoftware/MySocketTCP -ImultiSlsDetector -IslsDetectorUtils -IslsDetectorCommand -IslsDetectorAnalysis -IslsReceiverInterface -I../slsReceiverSoftware/include -IthreadFiles -IsharedMemory -I$(ASM)
#EPICSFLAGS=-D EPICS -I/usr/local/epics/base/include/ -I /usr/local/epics/base/include/os/Linux/ -L /usr/local/epics/base/lib/$(EPICS_HOST_ARCH) -Wl,-R/usr/local/epics/base/lib/$(EPICS_HOST_ARCH) -lca -lCom
LIBZMQDIR = ../slsReceiverSoftware/include
LIBZMQ = -L$(LIBZMQDIR) -Wl,-rpath=$(LIBZMQDIR) -lzmq
SRC_CLNT=slsDetectorAnalysis/fileIO.cpp usersFunctions/usersFunctions.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/angularConversion.cpp slsDetectorAnalysis/angularConversionStatic.cpp slsDetectorAnalysis/energyConversion.cpp slsDetector/slsDetectorActions.cpp slsDetectorAnalysis/postProcessing.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsDetectorAnalysis/postProcessingFuncs.cpp slsReceiverInterface/receiverInterface.cpp slsDetector/slsDetectorUsers.cpp threadFiles/CondVar.cpp threadFiles/Mutex.cpp threadFiles/ThreadPool.cpp sharedMemory/SharedMemory.cpp #../slsReceiverSoftware/MySocketTCP/MySocketTCP.cpp
DEPSINCLUDES = $(LIBZMQDIR)/sls_receiver_defs.h $(LIBZMQDIR)/sls_receiver_funcs.h $(LIBZMQDIR)/ansi.h commonFiles/sls_detector_defs.h commonFiles/sls_detector_funcs.h commonFiles/error_defs.h slsDetector/slsDetectorBase.h slsDetectorAnalysis/angCalLogClass.h slsDetectorAnalysis/angleConversionConstant.h slsDetectorAnalysis/badChannelCorrections.h slsDetectorAnalysis/detectorData.h slsDetectorAnalysis/enCalLogClass.h slsDetectorAnalysis/fileIOStatic.h slsDetectorAnalysis/movingStat.h slsDetectorAnalysis/runningStat.h slsDetectorAnalysis/single_photon_hit.h threadFiles/Global.h threadFiles/Task.h usersFunctions/angleFunction.h sharedMemory/SharedMemory.h $(LIBZMQDIR)/sls_receiver_exceptions.h commonFiles/versionAPI.h
SRC_CLNT= slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/postProcessing.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsReceiverInterface/receiverInterface.cpp slsDetector/slsDetectorUsers.cpp threadFiles/CondVar.cpp threadFiles/Mutex.cpp threadFiles/ThreadPool.cpp sharedMemory/SharedMemory.cpp #../slsReceiverSoftware/MySocketTCP/MySocketTCP.cpp
DEPSINCLUDES = $(LIBZMQDIR)/sls_receiver_defs.h $(LIBZMQDIR)/sls_receiver_funcs.h $(LIBZMQDIR)/ansi.h commonFiles/sls_detector_defs.h commonFiles/sls_detector_funcs.h commonFiles/error_defs.h slsDetector/slsDetectorBase.h slsDetectorAnalysis/detectorData.h threadFiles/Global.h threadFiles/Task.h sharedMemory/SharedMemory.h $(LIBZMQDIR)/sls_receiver_exceptions.h commonFiles/versionAPI.h

View File

@ -1,68 +0,0 @@
CFLAGS= -DC_ONLY
#FLAGS= -DVERBOSE -DVERYVERBOSE
INCLUDES= -IcommonFiles -IslsDetector -IMySocketTCP -IusersFunctions -ImultiSlsDetector -IslsDetectorUtils -IslsDetectorCommand -IslsDetectorAnalysis
#EPICSFLAGS=-D EPICS -I/usr/local/epics/base/include/ -I /usr/local/epics/base/include/os/Linux/ -L /usr/local/epics/base/lib/SL5-x86/ -Wl,-R/usr/local/epics/base/lib/SL5-x86 -lca -lCom
CC=gcc
CXX=g++
SRC_CLNT= slsDetectorAnalysis/FileIO_Standalone.cpp MySocketTCP/MySocketTCP.cpp usersFunctions/usersFunctions.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/AngularConversion_Standalone.cpp slsDetectorAnalysis/energyConversion.cpp slsDetector/slsDetectorActions.cpp slsDetectorAnalysis/postProcessingFileIO_Standalone.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp
OBJS = $(SRC_CLNT:.cpp=.o)
HEADERS = $(SRC_CLNT:.cpp=.h) commonFiles/sls_detector_defs.h slsDetectorAnalysis/detectorData.h slsDetector/slsDetectorBase.h slsDetector/slsDetectorUsers.h multiSlsDetector/multiSlsDetectorCommand.h
SRC_MYTHEN_SVC = mythenDetectorServer/server.c mythenDetectorServer/server_funcs.c mythenDetectorServer/communication_funcs.c mythenDetectorServer/firmware_funcs.c mythenDetectorServer/mcb_funcs.c mythenDetectorServer/trimming_funcs.c
all: package $(SRC_CLNT)
echo "compiling all"
doc: $(SRC_H) $(SRC_CLNT)
doxygen doxy.config
mythenServer: $(SRC_MYTHEN_SVC)
$(CC) $(SRC_MYTHEN_SVC) $(CFLAGS) $(FLAGS) $(INCLUDES) -ImythenDetectorServer -DVIRTUAL -lm -D MCB_FUNCS -DC_ONLY -DVERBOSE
mv a.out mythenServer
picassoServer: $(SRC_MYTHEN_SVC)
$(CC) $(SRC_MYTHEN_SVC) $(CFLAGS) $(FLAGS) $(INCLUDES) -ImythenDetectorServer -D VIRTUAL -lm -DMCB_FUNCS -DPICASSOD -DC_ONLY
mv a.out picassoServer
%.o : %.cpp %.h
$(CXX) -Wall -o $@ -c $< $(INCLUDES) $(FLAGS) $(EPICSFLAGS)
package: $(OBJS)
$(CXX) -shared -Wl,-soname,libSlsDetector.so -o libSlsDetector.so $(OBJS) -lc $(INCLUDES) $(FLAGS) $(EPICSFLAGS)
ar rcs libSlsDetector.a $(OBJS)
clean:
rm -rf libSlsDetector.a libSlsDetector.so core docs/* $(OBJS)
#-------------------------------------------------------------------------------
lib: package
# added install target, HBl
install_lib: lib
$(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR))
cp -P libSlsDetector.so $(DESTDIR)
install_inc:
$(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR))
cp -P $(HEADERS) $(DESTDIR)
install_doc: doc
$(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR))
cp -Pr docs/* $(DESTDIR)

View File

@ -1,87 +0,0 @@
CFLAGS= -DC_ONLY -fPIC
#FLAGS+= #-DVERBOSE -DVERYVERBOSE
DFLAGS= -DDACS_INT -DTHIS_PATH='"$(shell pwd)"' -DSLS_RECEIVER_FUNCTION_LIST
#ASM=$(shell echo "/lib/modules/`uname -r`/build/include")
INCLUDES?= -IcommonFiles -IslsDetector -IMySocketTCP -IusersFunctions -ImultiSlsDetector -IslsDetectorUtils -IslsDetectorCommand -IslsDetectorAnalysis -IslsReceiverInterface -IslsReceiver -I$(ASM)
EPICSFLAGS=-D EPICS -I/usr/local/epics/base/include/ -I /usr/local/epics/base/include/os/Linux/ -L /usr/local/epics/base/lib/SL5-x86/ -Wl,-R/usr/local/epics/base/lib/SL5-x86 -lca -lCom
CC=g++
SRC_CLNT= slsDetectorAnalysis/fileIO.cpp MySocketTCP/MySocketTCP.cpp usersFunctions/usersFunctions.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/angularConversion.cpp slsDetectorAnalysis/angularConversionStatic.cpp slsDetectorAnalysis/energyConversion.cpp slsDetector/slsDetectorActions.cpp slsDetectorAnalysis/postProcessing.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsDetector/slsDetectorUsers.cpp slsDetectorAnalysis/postProcessingFuncs.cpp slsReceiverInterface/receiverInterface.cpp slsReceiver/slsReceiverFunctionList.cpp slsReceiver/slsReceiver_funcs.cpp slsReceiver/slsReceiverUsers.cpp
OBJS = $(SRC_CLNT:.cpp=.o)
HEADERS = $(SRC_CLNT:.cpp=.h) commonFiles/sls_detector_defs.h slsDetectorAnalysis/detectorData.h slsDetector/slsDetectorBase.h multiSlsDetector/multiSlsDetectorCommand.h slsDetectorAnalysis/enCalLogClass.h slsDetectorAnalysis/angCalLogClass.h slsDetectorAnalysis/angleConversionConstant.h usersFunctions/angleFunction.h slsReceiverInterface/receiverInterface.h slsDetector/svnInfoLib.h slsReceiver/circularFifo.h slsReceiver/slsReceiver_funcs.h slsReceiver/svnInfoReceiverTmp.h slsReceiver/receiver_defs.h slsReceiver/slsReceiverFunctionList.h slsReceiver/slsReceiverUsers.h slsReceiver/svnInfoReceiver.h
DESTDIR ?= bin
DOCDIR ?= docs
all: package $(SRC_CLNT)
echo "compiling all"
intdoc: $(SRC_H) $(SRC_CLNT)
doxygen doxy.config
doc: $(DOCDIR)/pdf/slsDetectorUsersDocs.pdf
$(DOCDIR)/pdf/slsDetectorUsersDocs.pdf: slsDetectorUsersDocs
cd slsDetectorUsersDocs/latex && make
$(shell test -d $(DOCDIR) || mkdir -p $(DOCDIR))
$(shell test -d $(DOCDIR)/pdf || mkdir -p $(DOCDIR)/pdf)
cp slsDetectorUsersDocs/latex/refman.pdf $(DOCDIR)/pdf/slsDetectorUsersDocs.pdf
htmldoc: $(DOCDIR)/html/slsDetectorUsersDocs
$(DOCDIR)/html/slsDetectorUsersDocs: slsDetectorUsersDocs
$(shell test -d $(DOCDIR) || mkdir -p $(DOCDIR))
$(shell test -d $(DOCDIR)/html || mkdir -p $(DOCDIR)/html)
$(shell test -d $(DOCDIR)/html/slsDetectorUsersDocs && rm -r $(DOCDIR)/html/slsDetectorUsersDocs)
cp -r slsDetectorUsersDocs/html $(DOCDIR)/html/slsDetectorUsersDocs
slsDetectorUsersDocs: slsDetectorUsers.doxy slsDetector/slsDetectorUsers.h slsDetector/slsDetectorUsers.cpp slsDetectorAnalysis/detectorData.h
doxygen slsDetectorUsers.doxy
mythenVirtualServer: $(SRC_MYTHEN_SVC)
cd mythenDetectorServer && make -f Makefile.virtual DESTDIR=$(DESTDIR)
gotthardVirtualServer: $(SRC_MYTHEN_SVC)
cd gotthardDetectorServer && make -f Makefile.virtual DESTDIR=$(DESTDIR)
%.o : %.cpp %.h Makefile
$(CXX) -Wall -o $@ -c $< $(INCLUDES) $(DFLAGS) $(FLAGS) -fPIC $(EPICSFLAGS) -L/usr/lib64/
package: $(OBJS) $(DESTDIR)/libSlsDetector.so $(DESTDIR)/libSlsDetector.a
$(DESTDIR)/libSlsDetector.so: $(OBJS)
$(CXX) -shared -Wl,-soname,libSlsDetector.so -o libSlsDetector.so $(OBJS) -lc $(INCLUDES) $(DFLAGS) $(FLAGS) $(EPICSFLAGS) -L/usr/lib64/
$(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR))
mv libSlsDetector.so $(DESTDIR)
$(DESTDIR)/libSlsDetector.a: $(OBJS)
ar rcs libSlsDetector.a $(OBJS)
mv libSlsDetector.a $(DESTDIR)
clean:
rm -rf libSlsDetector.a libSlsDetector.so core docs/* slsDetectorUsersDocs $(OBJS)
#-------------------------------------------------------------------------------
install: package
install_inc:
$(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR))
cp -P slsDetector/slsDetectorUsers.h slsDetectorAnalysis/detectorData.h $(DESTDIR) slsReceiver/slsReceiverUsers.h

View File

@ -38,20 +38,18 @@
#define FILE_PATH_DOES_NOT_EXIST 0x0200000000000000ULL
#define COULDNOT_CREATE_UDP_SOCKET 0x0100000000000000ULL
#define COULDNOT_CREATE_FILE 0x0080000000000000ULL
#define COULDNOT_ENABLE_COMPRESSION 0x0040000000000000ULL
#define RECEIVER_DET_HOSTNAME_NOT_SET 0x0020000000000000ULL
#define RECEIVER_DET_HOSTTYPE_NOT_SET 0x0010000000000000ULL
#define DETECTOR_TEN_GIGA 0x0008000000000000ULL
#define DETECTOR_ACTIVATE 0x0004000000000000ULL
#define COULD_NOT_CONFIGURE_MAC 0x0002000000000000ULL
#define COULDNOT_START_RECEIVER 0x0001000000000000ULL // default error like starting threads
#define COULDNOT_STOP_RECEIVER 0x0000800000000000ULL
#define RECEIVER_DET_POSID_NOT_SET 0x0000400000000000ULL
#define RECEIVER_MULTI_DET_SIZE_NOT_SET 0x0000200000000000ULL
#define PREPARE_ACQUISITION 0x0000100000000000ULL
#define CLEANUP_ACQUISITION 0x0000080000000000ULL
#define REGISER_WRITE_READ 0x0000040000000000ULL
#define VERSION_COMPATIBILITY 0x0000020000000000ULL
#define RECEIVER_DET_HOSTNAME_NOT_SET 0x0040000000000000ULL
#define RECEIVER_DET_HOSTTYPE_NOT_SET 0x0020000000000000ULL
#define DETECTOR_TEN_GIGA 0x0010000000000000ULL
#define DETECTOR_ACTIVATE 0x0008000000000000ULL
#define COULD_NOT_CONFIGURE_MAC 0x0004000000000000ULL
#define COULDNOT_START_RECEIVER 0x0002000000000000ULL // default error like starting threads
#define COULDNOT_STOP_RECEIVER 0x0001000000000000ULL
#define RECEIVER_DET_POSID_NOT_SET 0x0000800000000000ULL
#define RECEIVER_MULTI_DET_SIZE_NOT_SET 0x0000400000000000ULL
#define PREPARE_ACQUISITION 0x0000200000000000ULL
#define REGISER_WRITE_READ 0x0000100000000000ULL
#define VERSION_COMPATIBILITY 0x0000080000000000ULL
// 0xFFFFFF0000000000ULL
// 0x000000FFFFFFFFFFULL
@ -141,9 +139,6 @@ public:
if(slsErrorMask&COULDNOT_CREATE_FILE)
retval.append("Could not create file to start receiver.\nCheck permissions of output directory or the overwrite flag\n");
if(slsErrorMask&COULDNOT_ENABLE_COMPRESSION)
retval.append("Could not enable/disable data compression in receiver.\nThread creation failed or recompile code with MYROOT1 flag.\n");
if(slsErrorMask&RECEIVER_DET_HOSTNAME_NOT_SET)
retval.append("Could not send the detector hostname to the receiver.\n");
@ -165,9 +160,6 @@ public:
if(slsErrorMask&PREPARE_ACQUISITION)
retval.append("Could not prepare acquisition in detector\n");
if(slsErrorMask&CLEANUP_ACQUISITION)
retval.append("Could not clean up after acquisition in detector\n");
if(slsErrorMask&REGISER_WRITE_READ)
retval.append("Could not read/write register in detector\n");

View File

@ -10,14 +10,6 @@
//#include <stdint.h>
#include "sls_receiver_defs.h"
/** default maximum string length */
#define MAX_SCAN_STEPS 2000
/** maxmimum number of modules per controller*/
#define MAXMODS 24
/** maxmimum number of detectors ina multidetector structure*/
#define MAXDET 100
/** header length for data :gotthard*/
#define HEADERLENGTH 12
/** maximum rois */
#define MAX_ROIS 100
@ -28,20 +20,10 @@
/** maximum unit size of program sent to detector */
#define MAX_FPGAPROGRAMSIZE (2 * 1024 *1024)
#define MAX_SCAN_LEVELS 2
typedef char mystring[MAX_STR_LENGTH];
typedef double mysteps[MAX_SCAN_STEPS];
#ifndef DACS_FLOAT
typedef int dacs_t;
#else
typedef float dacs_t;
#endif
#define DEFAULT_DET_MAC "00:aa:bb:cc:dd:ee"
#define DEFAULT_DET_IP "129.129.202.46"
@ -57,8 +39,6 @@ and to the server programs running on the detector
* @version 0.1alpha (any string)
* @see slsDetector
$Revision: 824 $
*/
@ -77,40 +57,6 @@ class slsDetectorDefs: public virtual slsReceiverDefs{
#endif
enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript, enCalLog, angCalLog, MAX_ACTIONS};
/**
@short structure for a detector channel
should not be used by unexperienced users
\see ::channelRegisterBit
*/
typedef struct {
int chan; /**< is the channel number */
int chip; /**< is the chip number */
int module; /**< is the module number */
int64_t reg; /**< is the is the channel register (e.g. trimbits, calibration enable, comparator enable...) */
} sls_detector_channel;
/**
@short structure for a detector chip
should not be used by unexperienced users
\see ::chipRegisterBit ::channelRegisterBit
*/
typedef struct {
int chip; /**< is the chip number */
int module; /**< is the module number */
int nchan; /**< is the number of channels in the chip */
int reg; /**<is the chip register (e.g. output analogue buffer enable)
\see ::chipRegisterBit */
int *chanregs; /**< is the pointer to the array of the channel registers
\see ::channelRegisterBit */
} sls_detector_chip;
/**
@short structure for a detector module
@ -127,7 +73,6 @@ class slsDetectorDefs: public virtual slsReceiverDefs{
@li offset is the module offset
*/
typedef struct {
int module; /**< is the module number */
int serialnumber; /**< is the module serial number */
int nchan; /**< is the number of channels on the module*/
int nchip; /**< is the number of chips on the module */
@ -146,25 +91,6 @@ typedef struct {
} sls_detector_module;
/* /\* */
/* @short structure for a generic integer array */
/* *\/ */
/* typedef struct { */
/* int len; /\**< is the number of elements of the array *\/ */
/* int *iptr; /\**< is the pointer to the array *\/ */
/* } iarray ; */
/* /\** */
/* Communication protocol (normally TCP) */
/* *\/ */
/* enum communicationProtocol{ */
/* TCP, /\**< TCP/IP *\/ */
/* UDP /\**< UDP *\/ */
/* }; */
/**
network parameters
*/
@ -293,17 +219,10 @@ enum digitalTestMode {
MODULE_FIRMWARE_TEST, /**< test module firmware */
DETECTOR_FIRMWARE_TEST, /**< test detector system firmware */
DETECTOR_MEMORY_TEST, /**< test detector system memory */
DETECTOR_BUS_TEST, /**< test detector system CPU-FPGA bus */
DETECTOR_SOFTWARE_TEST, /**< test detector system software */
DIGITAL_BIT_TEST /**< gotthard digital bit test */
};
/**
detector analogue test modes
*/
enum analogTestMode {
CALIBRATION_PULSES, /**< test using calibration pulses */
MY_ANALOG_TEST_MODE /**< other possible test modes */
};
/**
detector dacs indexes
@ -332,14 +251,6 @@ enum dacIndex {
G_VIN_CM, /**< gotthard */
G_VREF_COMP, /**< gotthard */
G_IB_TESTC, /**< gotthard */
V_DAC0, /**< moench */
V_DAC1, /**< moench */
V_DAC2, /**< moench */
V_DAC3, /**< moench */
V_DAC4, /**< moench */
V_DAC5, /**< moench */
V_DAC6, /**< moench */
V_DAC7, /**< moench */
E_SvP, /**< eiger */
E_SvN, /**< eiger */
E_Vtr, /**< eiger */
@ -414,33 +325,9 @@ enum detectorSettings{
UNDEFINED=200, /**< undefined or custom settings */
UNINITIALIZED /**< uninitialiazed (status at startup) */
};
/**
meaning of the channel register bits
\see ::sls_detector_channel
*/
enum channelRegisterBit {
TRIMBIT_OFF=0, /**< offset of trimbit value in the channel register */
COMPARATOR_ENABLE=0x100, /**< mask of the comparator enable bit */
ANALOG_SIGNAL_ENABLE=0x200, /**< mask of the analogue output enable bit */
CALIBRATION_ENABLE=0x300, /**< mask of the calibration input enable bit */
};
#define TRIMBITMASK 0x3f
/**
meaning of the chip register bits
\see ::sls_detector_chip
*/
enum chipRegisterBit {
ENABLE_ANALOG_OUTPUT=0x1, /**< mask of the analogue output enable bit */
CHIP_OUTPUT_WIDTH=0x2 /**< mask of the chip output width */
};
/**
meaning of the module register bits
*/
enum moduleRegisterBit {
MY_MODULE_REGISTER_BIT, /**< possible module register bit meaning */
MODULE_OUTPUT_WIDTH /**< possibly module dynamic range */
};
/**
@ -448,10 +335,6 @@ enum moduleRegisterBit {
*/
enum speedVariable {
CLOCK_DIVIDER, /**< readout clock divider */
WAIT_STATES, /**< wait states for bus read */
TOT_CLOCK_DIVIDER, /**< wait states for bus read */
TOT_DUTY_CYCLE, /**< wait states for bus read */
SET_SIGNAL_LENGTH, /**< set/clear signal length */
PHASE_SHIFT, /**< adds phase shift */
OVERSAMPLING, /**< oversampling for analog detectors */
ADC_CLOCK, /**< adc clock divider */
@ -485,29 +368,8 @@ enum readOutFlags {
SHOW_OVERFLOW=0x400000, /** eiger 32 bit mode, show saturated for overflow of single subframes */
NOOVERFLOW=0x800000 /** eiger 32 bit mode, do not show saturated for overflow of single subframes */
};
/**
trimming modes
*/
enum trimMode {
NOISE_TRIMMING, /**< trim with noise */
BEAM_TRIMMING, /**< trim with x-rays (on all 63 bits) */
IMPROVE_TRIMMING, /**< trim with x-rays (on a limited range of bits - should start from an already trimmed mode) */
FIXEDSETTINGS_TRIMMING,/**< trim without optimizing the threshold and the trimbit size */
OFFLINE_TRIMMING /**< trimming is performed offline */
};
/**
data correction flags
*/
enum correctionFlags {
DISCARD_BAD_CHANNELS, /**< bad channels are discarded */
AVERAGE_NEIGHBOURS_FOR_BAD_CHANNELS, /**< bad channels are replaced with the avergae of the neighbours */
FLAT_FIELD_CORRECTION, /**< data are flat field corrected */
RATE_CORRECTION, /**< data are rate corrected */
ANGULAR_CONVERSION,/**< angular conversion is calculated */
WRITE_FILE, /**< file write enable */
I0_NORMALIZATION,
OVERWRITE_FILE /**< file over write enable */
};
/** port type */
enum portType {
CONTROL_PORT, /**< control port */
@ -523,14 +385,6 @@ enum masterFlags {
IS_SLAVE /**< is slave */
};
/** synchronization in a multidetector structure, if any */
enum synchronizationMode {
GET_SYNCHRONIZATION_MODE=-1, /**< the multidetector will return its synchronization mode */
NO_SYNCHRONIZATION, /**< all detectors are independent (no cabling) */
MASTER_GATES, /**< the master gates the other detectors */
MASTER_TRIGGERS, /**< the master triggers the other detectors */
SLAVE_STARTS_WHEN_MASTER_STOPS /**< the slave acquires when the master finishes, to avoid deadtime */
};
enum imageType {
DARK_IMAGE, /**< dark image */
@ -538,45 +392,6 @@ enum imageType {
};
/* /\** */
/* angular conversion constant for a module */
/* *\/ */
/* typedef struct { */
/* double center; /\**< center of the module (channel at which the radius is perpendicular to the module surface) *\/ */
/* double ecenter; /\**< error in the center determination *\/ */
/* double r_conversion; /\**< detector pixel size (or strip pitch) divided by the diffractometer radius *\/ */
/* double er_conversion; /\**< error in the r_conversion determination *\/ */
/* double offset; /\**< the module offset i.e. the position of channel 0 with respect to the diffractometer 0 *\/ */
/* double eoffset; /\**< error in the offset determination *\/ */
/* double tilt; /\**< ossible tilt in the orthogonal direction (unused)*\/ */
/* double etilt; /\**< error in the tilt determination *\/ */
/* } angleConversionConstant; */
enum angleConversionParameter {
ANGULAR_DIRECTION, /**< angular direction of the diffractometer */
GLOBAL_OFFSET, /**< global offset of the diffractometer */
FINE_OFFSET, /**< fine offset of the diffractometer */
BIN_SIZE, /**< angular bin size */
MOVE_FLAG, /**< wether the detector moves with the motor or not in a multi detector system */
SAMPLE_X, /**< sample displacement in the beam direction */
SAMPLE_Y /**< sample displacement orthogonal to the beam */
};
//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;
//#if defined(__cplusplus) && !defined(EIGERD)
#ifdef __cplusplus
protected:

View File

@ -58,7 +58,6 @@ enum detFuncs{
F_START_READOUT, /**< start readout */
F_GET_RUN_STATUS, /**< get acquisition status */
F_START_AND_READ_ALL, /**< start acquisition and read all frames*/
F_READ_FRAME, /**< read one frame */
F_READ_ALL, /**< read alla frames */
//Acquisition setup functions
@ -111,7 +110,6 @@ enum detFuncs{
F_POWER_CHIP, /**< power chip */
F_ACTIVATE, /** < activate */
F_PREPARE_ACQUISITION, /** < prepare acquisition */
F_CLEANUP_ACQUISITION, /** < clean up after acquisition */
F_THRESHOLD_TEMP, /** < set threshold temperature */
F_TEMP_CONTROL, /** < set temperature control */

View File

@ -84,39 +84,16 @@ INPUT = commonFiles/communication_funcs.h \
commonFiles/error_defs.h \
commonFiles/sls_detector_defs.h \
commonFiles/sls_detector_funcs.h \
f90Interface/externPostProcessing.h \
multiSlsDetector/multiSlsDetectorClient.h \
multiSlsDetector/multiSlsDetectorCommand.h \
multiSlsDetector/multiSlsDetector.h \
slsDetector/slsDetectorActions.h \
slsDetector/slsDetectorBase.h \
slsDetector/slsDetectorCommand.h \
slsDetector/slsDetector.h \
slsDetector/slsDetectorUsers.h \
slsDetector/slsDetectorUtils.h \
slsDetectorAnalysis/angCalLogClass.h \
slsDetectorAnalysis/angleConversionConstant.h \
slsDetectorAnalysis/angularCalibration.h \
slsDetectorAnalysis/angularConversion.h \
slsDetectorAnalysis/AngularConversion_Standalone.h \
slsDetectorAnalysis/angularConversionStatic.h \
slsDetectorAnalysis/badChannelCorrections.h \
slsDetectorAnalysis/detectorData.h \
slsDetectorAnalysis/enCalLogClass.h \
slsDetectorAnalysis/energyCalibration.h \
slsDetectorAnalysis/energyConversion.h \
slsDetectorAnalysis/fileIO.h \
slsDetectorAnalysis/FileIO_Standalone.h \
slsDetectorAnalysis/fileIOStatic.h \
slsDetectorAnalysis/movingStat.h \
slsDetectorAnalysis/postProcessingFileIO_Standalone.h \
slsDetectorAnalysis/postProcessingFuncs.h \
slsDetectorAnalysis/postProcessing.h \
slsDetectorAnalysis/postProcessing_Standalone.h \
slsDetectorAnalysis/runningStat.h \
slsDetectorAnalysis/singlePhotonFilter.h \
slsDetectorAnalysis/single_photon_hit.h \
slsDetectorAnalysis/TSlsDetectorDict.h \
slsReceiverInterface/receiverInterface.h \
threadFiles/CondVar.h \
threadFiles/Global.h \
@ -125,8 +102,6 @@ INPUT = commonFiles/communication_funcs.h \
threadFiles/Single.h \
threadFiles/Task.h \
threadFiles/ThreadPool.h \
usersFunctions/angleFunction.h \
usersFunctions/usersFunctions.h \
../slsReceiverSoftware/include/ansi.h \
../slsReceiverSoftware/include/BinaryFile.h \
../slsReceiverSoftware/include/BinaryFileStatic.h \

View File

@ -1,47 +0,0 @@
#include "externPostProcessing.h"
#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
#include <string>
#include <sstream>
#include <queue>
#include <math.h>
using namespace std;
int externPostProcessing::InitDataset(int *nModules,int *chPerMod,int moduleMask[],int badChans[], double ffcoeff[], double fferr[], double* tDead, double angRadius[], double angOffset[], double angCentre[], double* totalOffset, double* binSize, double *sampleX, double *sampleY)
{
init_dataset(nModules,chPerMod,moduleMask,badChans,ffcoeff,fferr,tDead,angRadius,angOffset,angCentre,totalOffset,binSize,sampleX,sampleY);
return 0;
}
int externPostProcessing::finalizeDataset(double ang[], double val[], double err[], int *np)
{
finalize_dataset(ang, val, err, np);
return 0;
};
int addFrame(double data[], double *pos, double *IO, double *expTime, const char *filename, int *var)
{
add_frame(data, pos, i0, expTime, filename, var);
return 0;
};
int calculateFlatField(int* nModules, int *chPerMod, int modMask[], int badChanMask[], double data[], double ffCoeff[], double ffErr[])
{
calculate_flat_field(nModules, chPerMod, modMask, badChanMask, data, ffCoeff, ffErr);
return 0;
};

View File

@ -1,58 +0,0 @@
#ifndef EXTERNPOSTPROCESSING_H
#define EXTERNPOSTPROCESSING_H
#include "detectorData.h"
#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
#include <string>
#include <sstream>
#include <queue>
#include <math.h>
extern "C" {
void init_dataset(int *nMod, int *chPerMod, int* modMask, int *badChanMask, double *ffCoeff, double *ffErr, double *tDead, int *dir, double *angRadius, double *angOffset, double *angCenter, double *totalOff, double *binSize, double * sampleX, double* sampleY);
void finalize_dataset(double *outang, double *outval, double *outerr, int *np);
void add_frame(double *data, double *pos, double *i0, double *exptime, char *fn, double *var);
void calculate_flat_field(int *nMod, int *chPerMod, int *modMask,int *badChanMask, double *data, double *ffc, double *fferr);
}
class externPostProcessing
{
public:
externPostProcessing(){};
virtual ~externPostProcessing(){};
static int InitDataset(int *nModules,int *chPerMod,int moduleMask[],int badChans[], double ffcoeff[], double fferr[], double* tDead, int *dir, double angRadius[], double angOffset[], double angCentre[], double* totalOffset, double* binSize, double *sampleX, double *sampleY);
static int finalizeDataset(double ang[], double val[], double err[], int *np);
static int addFrame(double data[], double *pos, double *IO, double *expTime, const char *filename, int *var=0);
static int calculateFlatField(int* nModules, int *chPerMod, int moduleMask[], int badChannelMask[], double ffData[], double ffCoeff[], double ffErr[]);
};
#endif

View File

@ -1,174 +0,0 @@
module ax
USE,INTRINSIC :: ISO_C_BINDING
IMPLICIT NONE
integer(C_LONG) :: numberofmodules,totalnumberofchannels
real(C_DOUBLE) :: numberofbins
real(C_DOUBLE) :: bincenter(360000), binvalue(360000), binerror(360000)
contains
subroutine initdataset(nmodules, chpmod, modulemask,badchanmask,ffcoeff,fferr,tdead,angradius,angoffset,angcenter, totaloffset, binsize, samplex, sampley) bind(c, name='init_dataset')
IMPLICIT NONE
integer(C_LONG), intent(IN) :: nmodules, chpmod
integer(C_LONG), intent(IN) :: modulemask(nmodules), badchanmask(nmodules*chpmod)
real(C_DOUBLE), intent(IN) :: ffcoeff(nmodules*chpmod), fferr(nmodules*chpmod)
real(C_DOUBLE), intent(IN) :: tdead, totaloffset,binsize, samplex, sampley
real(C_DOUBLE), intent(IN) :: angradius(nmodules), angoffset(nmodules), angcenter(nmodules)
integer(C_LONG) :: i
print*,'init dataset'
numberofmodules=nmodules
print*,'Number of modules:'
print*,numberofmodules
print*,'Channels per module:'
print*,chpmod
totalnumberofchannels=nmodules*chpmod
print*,'Total number of channels:'
print*,totalnumberofchannels
print*,'Modulemask:'
do i=1,nmodules
print*,i,modulemask(i)
enddo
print*,'Badchannelmask:'
do i=1,nmodules*chpmod
print*,i,badchanmask(i)
enddo
print*,'Flat field coefficients:'
do i=1,nmodules*chpmod
print*,i,ffcoeff(i),'+-',fferr(i)
enddo
print*,'Tdead:'
print*,tdead
print*,'Angular conversion coefficients:'
do i=1,nmodules
print*,i,angradius(i),angoffset(i),angcenter(i)
enddo
print*,'Total offset:'
print*,totaloffset
print*,'Bin size:'
print*,binsize
numberofbins=360./binsize
print*,'Sample displacement:'
print*,samplex, sampley
end subroutine initdataset
subroutine resetdataset() bind(c, name='resetDataset')
IMPLICIT NONE
print*,'reset dataset'
end subroutine resetdataset
subroutine finalizedataset(outang, outval, outerr, outnpoints) bind(c, name='finalize_dataset')
IMPLICIT NONE
integer(C_LONG), intent(OUT) :: outnpoints
real(C_DOUBLE), intent(OUT) :: outang(*), outval(*), outerr(*)
integer(C_LONG) :: i
print*,'finalize dataset'
outnpoints=numberofbins
print*,'returning points:'
do i=1,numberofbins
outang(i)=i;
outval(i)=i*100;
outerr(i)=i*0.1
print*,i,outang(i),outval(i),outerr(i)
enddo
end subroutine finalizedataset
subroutine addframe(data, pos, i0, exptime, fname, var) bind(c, name='add_frame')
IMPLICIT NONE
real(C_DOUBLE), intent(IN) :: data(totalnumberofchannels)
real(C_DOUBLE), intent(IN) :: pos, i0, exptime, var
character(kind=c_char), dimension(*), intent(IN) :: fname
integer :: l
integer :: i
l=0
do
if (fname(l+1) == C_NULL_CHAR) exit
l = l + 1
end do
print*,'add frame'
print*,'Filename: '
print*,fname(1:l)
print*,'Position: '
print*,pos
print*,'I0: '
print*,i0
print*,'Exposure time: '
print*,exptime
print*,'Var: '
print*,var
print*,'Data: '
print*,data
end subroutine addframe
subroutine calculateflatfield(nmodules, chpmod, modulemask, badchanmask,data, ffcoeff,fferr) bind(c, name='calculate_flat_field')
IMPLICIT NONE
integer(C_LONG), intent(IN) :: nmodules, chpmod
integer(C_LONG), intent(IN) :: modulemask(nmodules), badchanmask(nmodules*chpmod)
real(C_DOUBLE), intent(IN) :: data(nmodules*chpmod)
real(C_DOUBLE), intent(OUT) :: ffcoeff(*),fferr(*)
integer(C_LONG) :: i
real(C_DOUBLE) :: ave;
print*,'calculate flat field'
do i=1,nmodules*chpmod
ffcoeff(i)=data(i)*10.
fferr(i)=i
print*,i,data(i), ffcoeff(i),fferr(i)
enddo
end subroutine calculateflatfield
end module ax

View File

@ -1,9 +1,9 @@
Path: slsDetectorsPackage/slsDetectorSoftware
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repsitory UUID: d2bce7e372c241cd235977b92be18555bca6a77d
Revision: 2040
Branch: 4.0.0
Repsitory UUID: def79807f6f40ed1797b8154240adbc0e35c95e0
Revision: 2044
Branch: refactor
Last Changed Author: Dhanya_Thattil
Last Changed Rev: 4020
Last Changed Date: 2018-09-27 18:22:10.000000002 +0200 ./sharedMemory/SharedMemory.o
Last Changed Rev: 4039
Last Changed Date: 2018-10-02 15:03:24.000000002 +0200 ./CMakeLists.txt

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,7 @@ class ZmqSocket;
#include <string>
#define MULTI_SHMVERSION 0x180629
#define MULTI_SHMVERSION 0x181002
#define SHORT_STRING_LENGTH 50
#define DATE_LENGTH 30
@ -66,12 +66,6 @@ private:
* is stopped manually. Is reset to 0 at the start of the acquisition */
int stoppedFlag;
/** position of the master detector */
int masterPosition;
/** type of synchronization between detectors */
synchronizationMode syncMode;
/** size of the data that are transfered from all detectors */
int dataBytes;
@ -110,32 +104,6 @@ private:
/** detector threshold (eV) */
int currentThresholdEV;
/** indicator for the acquisition progress - set to 0 at the beginning
* of the acquisition and incremented every time that the data are written
* to file */
int progressIndex;
/** total number of frames to be acquired */
int totalProgress;
/** current index of the output file */
int fileIndex;
/** name root of the output files */
char fileName[MAX_STR_LENGTH];
/** path of the output files */
char filePath[MAX_STR_LENGTH];
/** max frames per file */
int framesPerFile;
/** file format*/
fileFormat fileFormatType;
/** corrections to be applied to the data \see ::correctionFlags */
int correctionMask;
/** threaded processing flag (i.e. if data are processed and written to
* file in a separate thread) */
int threadedProcessing;
@ -143,60 +111,9 @@ private:
/** dead time (in ns) for rate corrections */
double tDead;
/** directory where the flat field files are stored */
char flatFieldDir[MAX_STR_LENGTH];
/** file used for flat field corrections */
char flatFieldFile[MAX_STR_LENGTH];
/** file with the bad channels */
char badChanFile[MAX_STR_LENGTH];
/** angular conversion file */
char angConvFile[MAX_STR_LENGTH];
/** angular direction (1 if it corresponds to the encoder direction
* i.e. channel 0 is 0, maxchan is positive high angle, 0 otherwise */
int angDirection;
/** beamline fine offset (of the order of mdeg, might be adjusted for
* each measurements) */
double fineOffset;
/** beamline offset (might be a few degrees beacuse of encoder offset -
* normally it is kept fixed for a long period of time) */
double globalOffset;
/** bin size for data merging */
double binSize;
//X and Y displacement
double sampleDisplacement[2];
/** number of positions at which the detector should acquire */
int numberOfPositions;
/** list of encoder positions at which the detector should acquire */
double detPositions[MAXPOS];
/** Scans and scripts */
int actionMask;
mystring actionScript[MAX_ACTIONS];
mystring actionParameter[MAX_ACTIONS];
int scanMode[MAX_SCAN_LEVELS];
mystring scanScript[MAX_SCAN_LEVELS];
mystring scanParameter[MAX_SCAN_LEVELS];
int nScanSteps[MAX_SCAN_LEVELS];
mysteps scanSteps[MAX_SCAN_LEVELS];
int scanPrecision[MAX_SCAN_LEVELS];
/** flag for acquiring */
bool acquiringFlag;
/** external gui */
bool externalgui;
/** receiver online flag - is set if the receiver is connected,
* unset if socket connection is not possible */
int receiverOnlineFlag;
@ -212,13 +129,6 @@ private:
public:
using slsDetectorUtils::flatFieldCorrect;
using slsDetectorUtils::rateCorrect;
using slsDetectorUtils::setBadChannelCorrection;
using slsDetectorUtils::readAngularConversion;
using slsDetectorUtils::writeAngularConversion;
/**
* Constructor
* @param id multi detector id
@ -272,6 +182,16 @@ public:
*/
std::string callDetectorMember(std::string(slsDetector::*somefunc)());
/**
* Loop serially through all the detectors in calling a particular method
* with string argument and string return
* @param somefunc function pointer
* @param s0 argument for calling method
* @returns concatenated result if values are different, otherwise result in calling method
*/
std::string callDetectorMember(std::string (slsDetector::*somefunc)(std::string),
std::string s0);
/**
* Loop serially through all the detectors in calling a particular method
* with an extra argument
@ -303,7 +223,7 @@ public:
T parallelCallDetectorMember(T (slsDetector::*somefunc)());
/**
* Loop serially through all the detectors in calling a particular method
* Parallel calls to all the detectors in calling a particular method
* with an extra argument
* @param somefunc function pointer
* @param value argument for calling method
@ -313,7 +233,7 @@ public:
T parallelCallDetectorMember(T (slsDetector::*somefunc)(P1), P1 value);
/**
* Loop serially through all the detectors in calling a particular method
* Parallel calls to all the detectors in calling a particular method
* with two extra arguments
* @param somefunc function pointer
* @param par1 argument for calling method
@ -324,7 +244,7 @@ public:
T parallelCallDetectorMember(T (slsDetector::*somefunc)(P1, P2), P1 par1, P2 par2);
/**
* Loop serially through all the detectors in calling a particular method
* Parallel calls to all the detectors in calling a particular method
* with three int arguments
* @param somefunc function pointer
* @param v0 argument for calling method
@ -335,6 +255,15 @@ public:
int parallelCallDetectorMember(int (slsDetector::*somefunc)(int, int, int),
int v0, int v1, int v2);
/**
* Parallel calls to all the detectors in calling a particular method
* with string argument and string return
* @param somefunc function pointer
* @param s0 argument for calling method
* @returns concatenated result if values are different, otherwise result in calling method
*/
std::string parallelCallDetectorMember(std::string (slsDetector::*somefunc)(std::string),
std::string s0);
/**
* Loop serially through all results and
* return a value if they are all same, else return -1
@ -345,13 +274,12 @@ public:
T minusOneIfDifferent(const std::vector<T>&);
/**
* Calculate the detector position index in multi vector and the module index
* using an index for all entire modules in list (Mythen)
* @param i position index of all modules in list
* @param idet position index in multi vector list
* @param imod module index in the sls detector
* Loop serially through all results and
* return a value if they are all same, else concatenate them
* @param return_values vector of results
* @returns concatenated result if values are different, otherwise result
*/
int decodeNMod(int i, int &idet, int &imod);
std::string concatenateIfDifferent(const std::vector<std::string>& return_values);
/**
* Decodes which detector and the corresponding channel numbers for it
@ -364,68 +292,6 @@ public:
*/
int decodeNChannel(int offsetX, int offsetY, int &channelX, int &channelY);
/**
* Decode data from the detector converting them to an array of doubles,
* one for each channel (Mythen only)
* @param datain data from the detector
* @param nn size of datain array
* @param fdata double array of decoded data
* @returns pointer to a double array with a data per channel
*/
double* decodeData(int *datain, int &nn, double *fdata=NULL);
/**
* Writes a data file
* @param name of the file to be written
* @param data array of data values
* @param err array of errors 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' double (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
*/
int writeDataFile(std::string fname, double *data, double *err=NULL,
double *ang=NULL, char dataformat='f', int nch=-1);
/**
* Writes a data file with an integer pointer to an array
* @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
*/
int writeDataFile(std::string fname, int *data);
/**
* 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' double (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
*\sa mythenDetector::readDataFile
*/
int readDataFile(std::string fname, double *data, double *err=NULL,
double *ang=NULL, char dataformat='f');
/**
* 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
*/
int readDataFile(std::string fname, int *data);
/**
* Checks error mask and returns error message and its severity if it exists
* @param critical is 1 if any of the messages is critical
@ -592,62 +458,6 @@ public:
*/
void getNumberOfDetectors(int& nx, int& ny);
/**
* Returns sum of all modules per sls detector from shared memory (Mythen)
* Other detectors, it is 1
* @returns sum of all modules per sls detector
*/
int getNMods();
/**
* Returns sum of all modules per sls detector in dimension d from shared memory (Mythen)
* Other detectors, it is 1
* @param d dimension d
* @returns sum of all modules per sls detector in dimension d
*/
int getNMod(dimension d);
/**
* Returns sum of all maximum modules per sls detector from shared memory (Mythen)
* Other detectors, it is 1
* @returns sum of all maximum modules per sls detector
*/
int getMaxMods();
/**
* Returns sum of all maximum modules per sls detector in dimension d from shared memory (Mythen)
* Other detectors, it is 1
* @param d dimension d
* @returns sum of all maximum modules per sls detector in dimension d
*/
int getMaxMod(dimension d);
/**
* Returns the sum of all maximum modules per sls detector in dimension d Mythen)
* from the detector directly.
* Other detectors, it is 1
* @param d dimension d
* @returns sum of all maximum modules per sls detector in dimension d
*/
int getMaxNumberOfModules(dimension d=X);
/**
* Sets/Gets the sum of all modules per sls detector in dimension d (Mythen)
* from the detector directly.
* Other detectors, it is 1
* @param i the number of modules to set to
* @param d dimension d
* @returns sum of all modules per sls detector in dimension d
*/
int setNumberOfModules(int i=-1, dimension d=X);
/**
* Using module id, returns the number of channels per that module
* from shared memory (Mythen)
* @param imod module number of entire multi detector list
* @returns number of channels per module imod
*/
int getChansPerMod(int imod=0);
/**
* Returns the total number of channels of all sls detectors from shared memory
@ -672,30 +482,6 @@ public:
*/
int getTotalNumberOfChannelsInclGapPixels(dimension d);
/**
* Returns the maximum number of channels of all sls detectors
* from shared memory (Mythen)
* @returns the maximum number of channels of all sls detectors
*/
int getMaxNumberOfChannels();
/**
* Returns the maximum number of channels of all sls detectors in dimension d
* from shared memory (Mythen)
* @param d dimension d
* @returns the maximum number of channels of all sls detectors in dimension d
*/
int getMaxNumberOfChannels(dimension d);
/**
* Returns the total number of channels of all sls detectors in dimension d
* including gap pixels from shared memory(Mythen)
* @param d dimension d
* @returns the maximum number of channels of all sls detectors in dimension d
* including gap pixels
*/
int getMaxNumberOfChannelsInclGapPixels(dimension d);
/**
* Returns the maximum number of channels of all sls detectors in each dimension d
* from shared memory. multi detector shared memory variable to calculate
@ -757,10 +543,10 @@ public:
/**
* Set/Gets TCP Port of detector or receiver
* @param t port type
* @param p port number (-1 gets)
* @param num port number (-1 gets)
* @returns port number
*/
int setPort(portType t, int p);
int setPort(portType t, int num=-1);
/**
* Lock server for this client IP
@ -897,22 +683,6 @@ public:
*/
int saveCalibrationFile(std::string fname, int imod=-1);
/**
* Sets/gets the detector in position i as master of the structure (Mythen)
* (e.g. it gates the other detectors and therefore must be started as last.
* Assumes that signal 0 is gate in, signal 1 is trigger in, signal 2 is gate out
* @param i position of master (-1 gets, -2 unset)
* @return master's position (-1 none)
*/
int setMaster(int i=-1);
/**
* Sets/gets the synchronization mode of the various detector (Mythen)
* @param sync syncronization mode
* @returns current syncronization mode
*/
synchronizationMode setSynchronization(synchronizationMode sync=GET_SYNCHRONIZATION_MODE);
/**
* Get Detector run status
* @returns status
@ -920,19 +690,11 @@ public:
runStatus getRunStatus();
/**
* Prepares detector for acquisition (Eiger and Gotthard)
* For Gotthard, it sets the detector data transmission mode (CPU or receiver)
* Prepares detector for acquisition (Eiger)
* @returns OK if all detectors are ready for acquisition, FAIL otherwise
*/
int prepareAcquisition();
/**
* Cleans up after acquisition (Gotthard only)
* For Gotthard, it sets the detector data transmission to default (via CPU)
* @returns OK or FAIL
*/
int cleanupAcquisition();
/**
* Start detector acquisition (Non blocking)
* @returns OK or FAIL if even one does not start properly
@ -952,82 +714,22 @@ public:
int sendSoftwareTrigger();
/**
* Start readout (without exposure or interrupting exposure) (Mythen)
* Start detector acquisition and read all data (Blocking until end of acquisition)
* @returns OK or FAIL
*/
int startAndReadAll();
/**
* Start readout (without exposure or interrupting exposure) (Eiger store in ram)
* @returns OK or FAIL
*/
int startReadOut();
/**
* Start detector acquisition and read all data (Blocking until end of acquisition)
* (Mythen, puts all data into a data queue. Others, data at receiver via udp packets)
* @returns pointer to the front of the data queue (return significant only for Mythen)
* \sa startAndReadAllNoWait getDataFromDetector dataQueue
*/
int* startAndReadAll();
/**
* Start detector acquisition and call read out, but not reading (data for Mythen,
* and status for other detectors) from the socket.
* (startAndReadAll calls this and getDataFromDetector. Client is not blocking,
* but server is blocked until getDataFromDetector is called. so not recommended
* for users)
* Requests and receives all data from the detector (Eiger store in ram)
* @returns OK or FAIL
*/
int startAndReadAllNoWait();
/**
* Reads from the detector socket (data frame for Mythen and status for other
* detectors)
* @returns pointer to the data or NULL. If NULL disconnects the socket
* (return significant only for Mythen)
* Other detectors return NULL
* \sa getDataFromDetector
*/
int* getDataFromDetector();
/**
* Requests and receives a single data frame from the detector
* (Mythen: and puts it in the data queue)
* @returns pointer to the data or NULL. (return Mythen significant)
* Other detectors return NULL
* \sa getDataFromDetector
*/
int* readFrame();
/**
* Requests and receives all data from the detector
* (Mythen: and puts them in a data queue)
* @returns pointer to the front of the queue or NULL (return Mythen significant)
* Other detectors return NULL
* \sa getDataFromDetector dataQueue
*/
int* readAll();
/**
* Pops the data from the data queue (Mythen)
* @returns pointer to the popped data or NULL if the queue is empty.
* \sa dataQueue
*/
int* popDataQueue();
/**
* Pops the data from the postprocessed data queue (Mythen)
* @returns pointer to the popped data or NULL if the queue is empty.
* \sa finalDataQueue
*/
detectorData* popFinalDataQueue();
/**
* Resets the raw data queue (Mythen)
* \sa dataQueue
*/
void resetDataQueue();
/**
* Resets the post processed data queue (Mythen)
* \sa finalDataQueue
*/
void resetFinalDataQueue();
int readAll();
/**
* Configures in detector the destination for UDP packets (Not Mythen)
@ -1170,16 +872,6 @@ public:
*/
int digitalTest(digitalTestMode mode, int imod=0);
/**
* Execute trimming (Mythen)
* @param mode trimming mode type
* @param par1 parameter 1
* @param par2 parameter 2
* @param imod module index (-1 for all)
* @returns result of trimming
*/
int executeTrimming(trimMode mode, int par1, int par2, int imod=-1);
/**
* Load dark or gain image to detector (Gotthard)
* @param index image type
@ -1387,14 +1079,6 @@ public:
*/
int setAutoComparatorDisableMode(int ival= -1);
/**
* Get Scan steps (Mythen)
* @param index scan index
* @param istep step index
* @returns scan step value
*/
double getScanStep(int index, int istep);
/**
* Returns the trimbits from the detector's shared memmory (Mythen, Eiger)
* @param retval is the array with the trimbits
@ -1404,32 +1088,6 @@ public:
*/
int getChanRegs(double* retval,bool fromDetector);
/**
* Configure channel (Mythen)
* @param reg channel register
* @param ichan channel number (-1 all)
* @param ichip chip number (-1 all)
* @param imod module number (-1 all)
* \sa ::sls_detector_channel
* @returns current register value
*/
int setChannel(int64_t reg, int ichan=-1, int ichip=-1, int imod=-1);
/**
* Get Move Flag (Mythen)
* @param imod module number (-1 all)
* @param istep step index
* @returns move flag
*/
int getMoveFlag(int imod);
/**
* Fill Module mask for flat field corrections (Mythen)
* @param mM array
* @returns number of modules
*/
int fillModuleMask(int *mM);
/**
* Calibrate Pedestal (ChipTestBoard)
* Starts acquisition, calibrates pedestal and writes to fpga
@ -1466,115 +1124,6 @@ public:
*/
int getRateCorrection();
/**
* Rate correct data (Mythen)
* @param datain data array
* @param errin error array on data (if NULL will default to sqrt(datain)
* @param dataout array of corrected data
* @param errout error on corrected data (if not NULL)
* @returns 0
*/
int rateCorrect(double* datain, double *errin, double* dataout, double *errout);
/**
* Set flat field corrections (Mythen)
* @param fname name of the flat field file (or "" if disable)
* @returns 0 if disable (or file could not be read), >0 otherwise
*/
int setFlatFieldCorrection(std::string fname="");
/**
* Set flat field corrections (Mythen)
* @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
*/
int setFlatFieldCorrection(double *corr, double *ecorr=NULL);
/**
* Get flat field corrections (Mythen)
* @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
*/
int getFlatFieldCorrection(double *corr=NULL, double *ecorr=NULL);
/**
* Flat field correct data (Mythen)
* @param datain data array
* @param errin error array on data (if NULL will default to sqrt(datain)
* @param dataout array of corrected data
* @param errout error on corrected data (if not NULL)
* @returns 0
*/
int flatFieldCorrect(double* datain, double *errin, double* dataout, double *errout);
/**
* Set bad channels correction (Mythen)
* @param fname file with bad channel list ("" disable)
* @returns 0 if bad channel disabled, >0 otherwise
*/
int setBadChannelCorrection(std::string fname="");
/**
* Set bad channels correction (Mythen)
* @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
*/
int setBadChannelCorrection(int nch, int *chs, int ff);
/**
* Get bad channels correction (Mythen)
* @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
*/
int getBadChannelCorrection(int *bad=NULL);
/**
* Reads an angular conversion file (Mythen, Gotthard)
* \sa angleConversionConstant mythenDetector::readAngularConversion
* @param fname file to be read
* @returns 0 if angular conversion disabled, >0 otherwise
*/
int readAngularConversionFile(std::string fname);
/**
* Writes an angular conversion file (Mythen, Gotthard)
* \sa angleConversionConstant mythenDetector::writeAngularConversion
* @param fname file to be written
* @returns 0 if angular conversion disabled, >0 otherwise
*/
int writeAngularConversion(std::string fname);
/**
* Get angular conversion (Mythen, Gotthard)
* \sa angleConversionConstant mythenDetector::getAngularConversion
* @param direction reference to diffractometer
* @param angconv array that will be filled with the angular conversion constants
* @returns 0 if angular conversion disabled, >0 otherwise
*/
int getAngularConversion(int &direction, angleConversionConstant *angconv=NULL) ;
/**
* Sets the value of angular conversion parameter (Mythen, Gotthard)
* @param c can be ANGULAR_DIRECTION, GLOBAL_OFFSET, FINE_OFFSET, BIN_SIZE
* @param v the value to be set
* @returns the actual value
*/
double setAngularConversionParameter(angleConversionParameter c, double v);
/**
* Gets the value of angular conversion parameter (Mythen, Gotthard)
* @param imod module index (-1 for all)
* @returns the actual value
*/
angleConversionConstant *getAngularConversionPointer(int imod=0);
/**
* Prints receiver configuration
* @returns OK or FAIL
@ -1625,7 +1174,7 @@ public:
* @param s file directory
* @returns file dir
*/
std::string setFilePath(std::string s="");
std::string setFilePath(std::string s);
/**
* Returns file name prefix
@ -1638,7 +1187,7 @@ public:
* @param s file name prefix
* @returns file name prefix
*/
std::string setFileName(std::string s="");
std::string setFileName(std::string s);
/**
* Sets the max frames per file in receiver
@ -1672,7 +1221,7 @@ public:
* @param f file format
* @returns file format
*/
fileFormat setFileFormat(fileFormat f=GET_FILE_FORMAT);
fileFormat setFileFormat(fileFormat f);
/**
* Returns file index
@ -1685,7 +1234,13 @@ public:
* @param i file index
* @returns file index
*/
int setFileIndex(int i=-1);
int setFileIndex(int i);
/**
* increments file index
* @returns the file index
*/
int incrementFileIndex();
/**
* Receiver starts listening to packets
@ -1699,13 +1254,6 @@ public:
*/
int stopReceiver();
/**
* Sets the receiver to start any readout remaining in the fifo and
* change status to transmitting (Mythen)
* The status changes to run_finished when fifo is empty
*/
runStatus startReceiverReadout();
/**
* Gets the status of the listening mode of receiver
* @returns status
@ -1797,13 +1345,6 @@ public:
*/
int enableDataStreamingFromReceiver(int enable=-1);
/**
* Enable/disable or get data compression in receiver
* @param i is -1 to get, 0 to disable and 1 to enable
* @returns data compression in receiver
*/
int enableReceiverCompression(int i = -1);
/**
* Enable/disable or 10Gbe
* @param i is -1 to get, 0 to disable and 1 to enable

View File

@ -11,7 +11,7 @@
int dummyCallback(detectorData* d, int p,void*) {
cout << "got data " << p << endl;
std::cout << "got data " << p << std::endl;
return 0;
};
@ -27,16 +27,16 @@ public:
char cmd[100] = ""; \
if (action==slsDetectorDefs::PUT_ACTION && argc<2) { \
cout << "Wrong usage - should be: "<< argv[0] << \
"[id-][pos:]channel arg" << endl; \
cout << endl; \
std::cout << "Wrong usage - should be: "<< argv[0] << \
"[id-][pos:]channel arg" << std::endl; \
std::cout << std::endl; \
return; \
if (del) delete myDetector; \
}; \
if (action==slsDetectorDefs::GET_ACTION && argc<1) { \
cout << "Wrong usage - should be: "<< argv[0] << \
"[id-][pos:]channel arg" << endl; \
cout << endl; \
std::cout << "Wrong usage - should be: "<< argv[0] << \
"[id-][pos:]channel arg" << std::endl; \
std::cout << std::endl; \
if (del) delete myDetector; \
return; \
}; \
@ -51,7 +51,7 @@ public:
//%s needn't be there (if not 1:), so 1 or 2 arguments scanned
if (iv >= 1 && id >= 0) { \
argv[0] = cmd; \
cout << id << "-" ; \
std::cout << id << "-" ; \
} else { \
id = 0; \
} \
@ -60,7 +60,7 @@ public:
if (strchr(argv[0],':')) { \
iv=sscanf(argv[0],"%d:",&pos); \
if (iv == 1 && pos >= 0) { \
cout << "pos " << pos << " is not allowed for readout!" << endl; \
std::cout << "pos " << pos << " is not allowed for readout!" << std::endl; \
return; \
} \
} \
@ -71,7 +71,7 @@ public:
// scan success
if (iv == 2 && id >= 0) { \
argv[0] = cmd; \
cout << id << "-" ; \
std::cout << id << "-" ; \
} else { \
id = 0; \
} \
@ -80,7 +80,7 @@ public:
// scan success
if (iv == 2 && pos >= 0) { \
argv[0] = cmd; \
cout << pos << ":" ; \
std::cout << pos << ":" ; \
} \
if (iv != 2) { \
pos = -1; \
@ -109,17 +109,17 @@ public:
//cout<<"id:"<<id<<" pos:"<<pos<<endl;
//std::cout<<"id:"<<id<<" pos:"<<pos<<std::endl;
// create multiSlsDetector class if required
if (myDetector==NULL) { \
try { \
multiSlsDetector* m = new multiSlsDetector(id, verify, update); \
myDetector = m; \
} catch (const SlsDetectorPackageExceptions & e) { \
/*cout << e.GetMessage() << endl;*/ \
/*std::cout << e.GetMessage() << std::endl;*/ \
return; \
} catch (...) { \
cout << " caught exception" << endl; \
std::cout << " caught exception" << std::endl; \
return; \
} \
del=1; \
@ -130,20 +130,20 @@ public:
try { \
answer=myCmd->executeLine(argc, argv, action, pos); \
} catch (const SlsDetectorPackageExceptions & e) { \
/*cout << e.GetMessage() << endl; */ \
/*std::cout << e.GetMessage() << std::endl; */ \
delete myCmd; \
if (del) delete myDetector; \
return; \
} catch (...) { \
cout << " caught exception" << endl; \
std::cout << " caught exception" << std::endl; \
delete myCmd; \
if (del) delete myDetector; \
return; \
} \
if (action!=slsDetectorDefs::READOUT_ACTION) { \
cout << argv[0] << " " ; \
std::cout << argv[0] << " " ; \
} \
cout << answer<< endl; \
std::cout << answer<< std::endl; \
delete myCmd; \
if (del) delete myDetector; \
};

View File

@ -1,6 +1,6 @@
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
#define GITREPUUID "d2bce7e372c241cd235977b92be18555bca6a77d"
#define GITREPUUID "def79807f6f40ed1797b8154240adbc0e35c95e0"
#define GITAUTH "Dhanya_Thattil"
#define GITREV 0x4020
#define GITDATE 0x20180927
#define GITBRANCH "4.0.0"
#define GITREV 0x4039
#define GITDATE 0x20181002
#define GITBRANCH "refactor"

File diff suppressed because it is too large Load Diff

View File

@ -10,18 +10,13 @@
*/
#include "slsDetectorUtils.h"
#include "energyConversion.h"
#include "angleConversionConstant.h"
#include "MySocketTCP.h"
#include "angleConversionConstant.h"
class multiSlsDetector;
class SharedMemory;
class receiverInterface;
#define SLS_SHMVERSION 0x180629
#define NMODMAXX 24
#define NMODMAXY 24
#define SLS_SHMVERSION 0x181002
#define NCHIPSMAX 10
#define NCHANSMAX 65536
#define NDACSMAX 16
@ -29,8 +24,6 @@ class receiverInterface;
* parameter list that has to be initialized depending on the detector type
*/
typedef struct detParameterList {
int nModMaxX;
int nModMaxY;
int nChanX;
int nChanY;
int nChipX;
@ -40,13 +33,12 @@ typedef struct detParameterList {
int nGain;
int nOffset;
int dynamicRange;
int moveFlag;
int nGappixelsX;
int nGappixelsY;
} detParameterList;
class slsDetector : public slsDetectorUtils, public energyConversion {
class slsDetector : public slsDetectorUtils {
private:
/**
@ -100,28 +92,6 @@ private:
/** list of the energies at which the detector has been trimmed */
int trimEnergies[MAX_TRIMEN];
/** indicator for the acquisition progress - set to 0 at the beginning
* of the acquisition and incremented when each frame is processed */
int progressIndex;
/** total number of frames to be acquired */
int totalProgress;
/** path of the output files */
char filePath[MAX_STR_LENGTH];
/** number of installed modules of the detector (x and y directions) */
int nMod[2];
/** number of modules ( nMod[X]*nMod[Y]) \see nMod */
int nMods;
/** maximum number of modules of the detector (x and y directions) */
int nModMax[2];
/** maximum number of modules (nModMax[X]*nModMax[Y]) \see nModMax */
int nModsMax;
/** number of channels per chip */
int nChans;
@ -152,9 +122,6 @@ private:
/** size of the data that are transfered from the detector */
int dataBytes;
/** corrections to be applied to the data \see ::correctionFlags */
int correctionMask;
/** threaded processing flag
* (i.e. if data are processed in a separate thread) */
int threadedProcessing;
@ -162,61 +129,6 @@ private:
/** dead time (in ns) for rate corrections */
double tDead;
/** directory where the flat field files are stored */
char flatFieldDir[MAX_STR_LENGTH];
/** file used for flat field corrections */
char flatFieldFile[MAX_STR_LENGTH];
/** number of bad channels from bad channel list */
int nBadChans;
/** file with the bad channels */
char badChanFile[MAX_STR_LENGTH];
/** list of bad channels */
int badChansList[MAX_BADCHANS];
/** number of bad channels from flat field
* i.e. channels which read 0 in the flat field file */
int nBadFF;
/** list of bad channels from flat field
* i.e. channels which read 0 in the flat field file */
int badFFList[MAX_BADCHANS];
/** file with the angular conversion factors */
char angConvFile[MAX_STR_LENGTH];
/** array of angular conversion constants for each module
* \see ::angleConversionConstant */
angleConversionConstant angOff[MAXMODS];
/** angular direction (1 if it corresponds to the encoder direction
* i.e. channel 0 is 0, maxchan is positive high angle, 0 otherwise */
int angDirection;
/** beamline fine offset (of the order of mdeg,
* might be adjusted for each measurements) */
double fineOffset;
/** beamline offset (might be a few degrees beacuse of encoder offset -
* normally it is kept fixed for a long period of time) */
double globalOffset;
/** number of positions at which the detector should acquire */
int numberOfPositions;
/** list of encoder positions at which the detector should acquire */
double detPositions[MAXPOS];
/** bin size for data merging */
double binSize;
/** add encoder value flag (i.e. wether the detector is
* moving - 1 - or stationary - 0) */
int moveFlag;
/** number of rois defined */
int nROI;
@ -238,39 +150,6 @@ private:
/** timer values */
int64_t timerValue[MAX_TIMERS];
/** action mask */
int actionMask;
/** action script */
mystring actionScript[MAX_ACTIONS];
/** action parameter */
mystring actionParameter[MAX_ACTIONS];
/** scan mode */
int scanMode[MAX_SCAN_LEVELS];
/** scan script */
mystring scanScript[MAX_SCAN_LEVELS];
/** scan parameter */
mystring scanParameter[MAX_SCAN_LEVELS];
/** n scan steps */
int nScanSteps[MAX_SCAN_LEVELS];
/** scan steps */
mysteps scanSteps[MAX_SCAN_LEVELS];
/** scan precision */
int scanPrecision[MAX_SCAN_LEVELS];
/** memory offsets for the flat field coefficients */
int ffoff;
/** memory offsets for the flat filed coefficient errors */
int fferroff;
/** memory offsets for the module structures */
int modoff;
@ -357,9 +236,6 @@ private:
/** additional json header */
char receiver_additionalJsonHeader[MAX_STR_LENGTH];
/** frames per file in receiver */
int receiver_framesPerFile;
/** detector control server software API version */
int64_t detectorControlAPIVersion;
@ -384,6 +260,27 @@ private:
/** silent receiver */
bool receiver_silentMode;
/** path of the output files */
char receiver_filePath[MAX_STR_LENGTH];
/** file name prefix */
char receiver_fileName[MAX_STR_LENGTH];
/** file index */
int receiver_fileIndex;
/** file format */
fileFormat receiver_fileFormatType;
/** frames per file */
int receiver_framesPerFile;
/** filewriteenable */
bool receiver_fileWriteEnable;
/** overwriteenable */
bool receiver_overWriteEnable;
} sharedSlsDetector;
@ -392,13 +289,6 @@ private:
public:
using slsDetectorUtils::getDetectorType;
using postProcessing::flatFieldCorrect;
using postProcessing::rateCorrect;
using postProcessing::setBadChannelCorrection;
using angularConversion::readAngularConversion;
using angularConversion::writeAngularConversion;
using slsDetectorUtils::getAngularConversion;
//FIXME: all pos or id arguments needed only for same multi signature
@ -432,16 +322,6 @@ public:
*/
bool isMultiSlsDetectorClass();
/**
* Decode data from the detector converting them to an array of doubles,
* one for each channel (Mythen only)
* @param datain data from the detector
* @param nn size of datain array
* @param fdata double array of decoded data
* @returns pointer to a double array with a data per channel
*/
double* decodeData(int *datain, int &nn, double *fdata=NULL);
/**
* Clears error mask and also the bit in parent det multi error mask
* @returns error mask
@ -562,6 +442,8 @@ public:
*/
void disconnectStop();
using slsDetectorUtils::getDetectorType;
/**
* Get detector type by connecting to the detector without creating an object
* @param name hostname of detector
@ -605,72 +487,6 @@ public:
*/
std::string getDetectorType();
/**
* Returns number of modules from shared memory (Mythen)
* Other detectors, it is 1
* @returns number of modules
*/
int getNMods();
/**
* Returns number of modules in dimension d from shared memory (Mythen)
* Other detectors, it is 1
* @param d dimension d
* @returns number of modules in dimension d
*/
int getNMod(dimension d);
/**
* Returns maximum number of modules from shared memory (Mythen)
* Other detectors, it is 1
* @returns maximum number of modules
*/
int getMaxMods();
/**
* Returns maximum number of modules in dimension d from shared memory (Mythen)
* Other detectors, it is 1
* @param d dimension d
* @returns maximum number of modules in dimension d
*/
int getNMaxMod(dimension d);
/**
* Returns maximum number of modules in dimension d (Mythen)
* from the detector directly.
* Other detectors, it is 1
* @param d dimension d
* @returns maximum number of modules in dimension d
*/
int getMaxNumberOfModules(dimension d=X); //
/**
* Sets/Gets the number of modules in dimension d (Mythen)
* from the detector directly.
* Other detectors, it is 1
* @param i the number of modules to set to (-1 gets)
* @param d dimension d
* @returns the number of modules in dimension d
*/
int setNumberOfModules(int n=GET_FLAG, dimension d=X);
/**
* returns the number of channels per that module
* from shared memory (Mythen)
* @param imod insignificant
* @returns number of channels per module
*/
int getChansPerMod(int imod=0);
/**
* returns the number of channels per that module in dimension d
* from shared memory (Mythen)
* @param d dimension d
* @param imod insignificant
* @returns number of channels per module in dimension d
*/
int getChansPerMod( dimension d,int imod=0);
/**
* Returns the total number of channels from shared memory
* @returns the total number of channels
@ -693,26 +509,6 @@ public:
*/
int getTotalNumberOfChannelsInclGapPixels(dimension d);
/**
* Returns the maximum number of channels from shared memory (Mythen)
* @returns the maximum number of channels
*/
int getMaxNumberOfChannels();
/**
* Returns the maximum number of channels in dimension d from shared memory (Mythen)
* @param d dimension d
* @returns the maximum number of channels in dimension d
*/
int getMaxNumberOfChannels(dimension d);
/**
* Returns the maximum number of channels in dimension d from shared memory (Mythen)
* @param d dimension d
* @returns the maximum number of channels in dimension d
*/
int getMaxNumberOfChannelsInclGapPixels(dimension d);
/**
* returns the number of channels per chip from shared memory (Mythen)
* @returns number of channels per chip
@ -784,7 +580,7 @@ public:
/**
* Set/Gets TCP Port of detector or receiver
* @param t port type
* @param p port number (-1 gets)
* @param num port number (-1 gets)
* @returns port number
*/
int setPort(portType type, int num=-1);
@ -895,7 +691,6 @@ public:
* @returns OK or FAIL if the file could not be written
* \sa ::sls_detector_module sharedSlsDetector mythenDetector::writeSettingsFile(string, int)
*/
using energyConversion::writeSettingsFile;
int writeSettingsFile(std::string fname, int imod, int iodelay, int tau);
/**
@ -1017,35 +812,6 @@ public:
*/
int saveCalibrationFile(std::string fname, int imod=-1);
/**
* Sets/gets the detector in position i as master of the structure (Mythen)
* (e.g. it gates the other detectors and therefore must be started as last.
* Assumes that signal 0 is gate in, signal 1 is trigger in, signal 2 is gate out
* @param i position of master (-1 gets, -2 unset)
* @return master's position (-1 none)
*/
masterFlags setMaster(masterFlags flag);
/**
* Sets/gets the synchronization mode of the various detector (Mythen)
* @param sync syncronization mode
* @returns current syncronization mode
*/
synchronizationMode setSynchronization(synchronizationMode sync=GET_SYNCHRONIZATION_MODE);
/**
* Calcualtes the total number of steps of the acquisition
* Called when number of frames, number of cycles, number of positions and scan steps change
* @returns the total number of steps of the acquisition
*/
int setTotalProgress();
/**
* Returns the current progress in %
* @returns the current progress in %
*/
double getCurrentProgress();
/**
* Get run status of the detector
* @returns the status of the detector
@ -1053,19 +819,11 @@ public:
runStatus getRunStatus();
/**
* Prepares detector for acquisition (Eiger and Gotthard)
* For Gotthard, it sets the detector data transmission mode (CPU or receiver)
* Prepares detector for acquisition (Eiger)
* @returns OK or FAIL
*/
int prepareAcquisition();
/**
* Cleans up after acquisition (Gotthard only)
* For Gotthard, it sets the detector data transmission to default (via CPU)
* @returns OK or FAIL
*/
int cleanupAcquisition();
/**
* Start detector acquisition (Non blocking)
* @returns OK or FAIL if even one does not start properly
@ -1085,65 +843,22 @@ public:
int sendSoftwareTrigger();
/**
* Start readout (without exposure or interrupting exposure) (Mythen)
* Start detector acquisition and read all data (Blocking until end of acquisition)
* @returns OK or FAIL
*/
int startAndReadAll();
/**
* Start readout (without exposure or interrupting exposure) (Eiger store in ram)
* @returns OK or FAIL
*/
int startReadOut();
/**
* Start detector acquisition and read all data (Blocking until end of acquisition)
* (Mythen, puts all data into a data queue. Others, data at receiver via udp packets)
* @returns pointer to the front of the data queue (return significant only for Mythen)
* \sa startAndReadAllNoWait getDataFromDetector dataQueue
*/
int* startAndReadAll();
/**
* Start detector acquisition and call read out, but not reading (data for Mythen,
* and status for other detectors) from the socket.
* (startAndReadAll calls this and getDataFromDetector. Client is not blocking,
* but server is blocked until getDataFromDetector is called. so not recommended
* for users)
* Requests and receives all data from the detector (Eiger store in ram)
* @returns OK or FAIL
*/
int startAndReadAllNoWait();
/**
* Reads from the detector socket (data frame for Mythen and status for other
* detectors)
* @returns pointer to the data or NULL. If NULL disconnects the socket
* (return significant only for Mythen)
* Other detectors return NULL
* \sa getDataFromDetector
*/
int* getDataFromDetector(int *retval=NULL);
/**
* Requests and receives a single data frame from the detector
* (Mythen: and puts it in the data queue)
* @returns pointer to the data or NULL. (return Mythen significant)
* Other detectors return NULL
* \sa getDataFromDetector
*/
int* readFrame();
/**
* Receives all data from the detector
* (Mythen: and puts them in a data queue)
* @returns pointer to the front of the queue or NULL (return Mythen significant)
* Other detectors return NULL
* \sa getDataFromDetector dataQueue
*/
int* readAll();
/**
* Requests detector for all data, calls readAll afterwards
* (Mythen: and puts them in a data queue)
* @returns pointer to the front of the queue or NULL (return Mythen significant)
* Other detectors return NULL
* \sa getDataFromDetector dataQueue
*/
int readAllNoWait();
int readAll();
/**
* Configures in detector the destination for UDP packets (Not Mythen)
@ -1439,16 +1154,6 @@ public:
*/
int digitalTest(digitalTestMode mode, int imod=0);
/**
* Execute trimming (Mythen)
* @param mode trimming mode type
* @param par1 parameter 1
* @param par2 parameter 2
* @param imod module index (-1 for all)
* @returns result of trimming
*/
int executeTrimming(trimMode mode, int par1, int par2, int imod=-1);
/**
* Load dark or gain image to detector (Gotthard)
* @param index image type, 0 for dark image and 1 for gain image
@ -1691,15 +1396,7 @@ public:
int getChanRegs(double* retval,bool fromDetector);
/**
* Configure module (who calls this?)
* @param imod module number (-1 all)
* @returns current register value
* \sa ::sls_detector_module
*/
int setModule(int reg, int imod=-1);
/**
* Configure Module (Mythen, Eiger)
* Configure Module (Eiger)
* Called for loading trimbits and settings settings to the detector
* @param module module to be set - must contain correct module number and
* also channel and chip registers
@ -1723,77 +1420,6 @@ public:
*/
sls_detector_module *getModule(int imod);
/**
* Configure channel (Mythen)
* @param reg channel register
* @param ichan channel number (-1 all)
* @param ichip chip number (-1 all)
* @param imod module number (-1 all)
* @returns current register value
* \sa ::sls_detector_channel
*/
int setChannel(int64_t reg, int ichan=-1, int ichip=-1, int imod=-1);
/**
* Configure channel (Mythen)
* @param chan channel to be set -
* must contain correct channel, module and chip number
* @returns current register value
*/
int setChannel(sls_detector_channel chan);
/**
* Get channel (Mythen)
* @param ichan channel number
* @param ichip chip number
* @param imod module number
* @returns current channel structure for channel
*/
sls_detector_channel getChannel(int ichan, int ichip, int imod);
/**
* Configure chip (Mythen)
* @param reg chip register
* @param ichip chip number (-1 all)
* @param imod module number (-1 all)
* @returns current register value
* \sa ::sls_detector_chip
*/
int setChip(int reg, int ichip=-1, int imod=-1);
/**
* Configure chip (Mythen)
* @param chip chip to be set
* must contain correct module and chip number and also channel registers
* @returns current register value
* \sa ::sls_detector_chip
*/
int setChip(sls_detector_chip chip);
/**
* Get chip (Mythen)
* @param ichip chip number
* @param imod module number
* @returns current chip structure for channel
* \bug probably does not return corretly!
*/
sls_detector_chip getChip(int ichip, int imod);
/**
* Get Move Flag (Mythen)
* @param imod module number (-1 all)
* @param istep step index
* @returns move flag
*/
int getMoveFlag(int imod);
/**
* Fill Module mask for flat field corrections (Mythen)
* @param mM array
* @returns number of modules
*/
int fillModuleMask(int *mM);
/**
* Calibrate Pedestal (ChipTestBoard)
* Starts acquisition, calibrates pedestal and writes to fpga
@ -1830,123 +1456,6 @@ public:
*/
int getRateCorrection();
/**
* Rate correct data (Mythen)
* @param datain data array
* @param errin error array on data (if NULL will default to sqrt(datain)
* @param dataout array of corrected data
* @param errout error on corrected data (if not NULL)
* @returns 0
*/
int rateCorrect(double* datain, double *errin, double* dataout, double *errout);
/**
* Set flat field corrections (Mythen)
* @param fname name of the flat field file (or "" if disable)
* @returns 0 if disable (or file could not be read), >0 otherwise
*/
int setFlatFieldCorrection(std::string fname="");
/**
* Set flat field corrections (Mythen)
* @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
*/
int setFlatFieldCorrection(double *corr, double *ecorr=NULL);
/**
* Get flat field corrections (Mythen)
* @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
*/
int getFlatFieldCorrection(double *corr=NULL, double *ecorr=NULL);
/**
* Flat field correct data (Mythen)
* @param datain data array
* @param errin error array on data (if NULL will default to sqrt(datain)
* @param dataout array of corrected data
* @param errout error on corrected data (if not NULL)
* @returns 0
*/
int flatFieldCorrect(double* datain, double *errin, double* dataout, double *errout);
/**
* Set bad channels correction (Mythen)
* @param fname file with bad channel list ("" disable)
* @returns 0 if bad channel disabled, >0 otherwise
*/
int setBadChannelCorrection(std::string fname="");
/**
* Set bad channels correction (Mythen)
* @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
*/
int setBadChannelCorrection(int nch, int *chs, int ff=0);
/**
* Get bad channels correction (Mythen)
* @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
*/
int getBadChannelCorrection(int *bad=NULL);
/**
* Reads an angular conversion file (Mythen, Gotthard)
* \sa angleConversionConstant mythenDetector::readAngularConversion
* @param fname file to be read
* @returns 0 if angular conversion disabled, >0 otherwise
*/
int readAngularConversionFile(std::string fname="");
/**
* Reads an angular conversion file (Mythen, Gotthard)
* \sa angleConversionConstant mythenDetector::readAngularConversion
* @param ifs input stream
* @returns 0 if angular conversion disabled, >0 otherwise
*/
int readAngularConversion(std::ifstream& ifs);
/**
* Writes an angular conversion file (Mythen, Gotthard)
* \sa angleConversionConstant mythenDetector::writeAngularConversion
* @param fname file to be written
* @returns 0 if angular conversion disabled, >0 otherwise
*/
int writeAngularConversion(std::string fname="");
/**
* Writes an angular conversion file (Mythen, Gotthard)
* \sa angleConversionConstant mythenDetector::writeAngularConversion
* @param ofs output stream
* @returns 0 if angular conversion disabled, >0 otherwise
*/
int writeAngularConversion(std::ofstream &ofs);
/**
* Get angular conversion (Mythen, Gotthard)
* \sa angleConversionConstant mythenDetector::getAngularConversion
* @param direction reference to diffractometer
* @param angconv array that will be filled with the angular conversion constants
* @returns 0 if angular conversion disabled, >0 otherwise
*/
int getAngularConversion(int &direction, angleConversionConstant *angconv=NULL) ;
/**
* Return angular conversion pointer (Mythen, Gotthard)
* @param imod module number
* @returns angular conversion pointer
*/
angleConversionConstant *getAngularConversionPointer(int imod=0);
/**
* Prints receiver configuration
* @returns OK or FAIL
@ -2035,7 +1544,7 @@ public:
* @param s file directory
* @returns file dir
*/
std::string setFilePath(std::string s="");
std::string setFilePath(std::string s);
/**
* Returns file name prefix
@ -2048,14 +1557,14 @@ public:
* @param s file name prefix
* @returns file name prefix
*/
std::string setFileName(std::string s="");
std::string setFileName(std::string s);
/**
* Sets the max frames per file in receiver
* @param f max frames per file
* @returns max frames per file in receiver
*/
int setReceiverFramesPerFile(int f = -1);
int setReceiverFramesPerFile(int f=-1);
/**
* Sets the frames discard policy in receiver
@ -2082,7 +1591,7 @@ public:
* @param f file format
* @returns file format
*/
fileFormat setFileFormat(fileFormat f=GET_FILE_FORMAT);
fileFormat setFileFormat(fileFormat f);
/**
* Returns file index
@ -2095,7 +1604,13 @@ public:
* @param i file index
* @returns file index
*/
int setFileIndex(int i=-1);
int setFileIndex(int i);
/**
* increments file index
* @returns the file index
*/
int incrementFileIndex();
/**
* Receiver starts listening to packets
@ -2109,13 +1624,6 @@ public:
*/
int stopReceiver();
/**
* Sets the receiver to start any readout remaining in the fifo and
* change status to transmitting (Mythen)
* The status changes to run_finished when fifo is empty
*/
runStatus startReceiverReadout();
/**
* Gets the status of the listening mode of receiver
* @returns status
@ -2194,13 +1702,6 @@ public:
*/
int enableDataStreamingFromReceiver(int enable=-1);
/**
* Enable/disable or get data compression in receiver
* @param i is -1 to get, 0 to disable and 1 to enable
* @returns data compression in receiver
*/
int enableReceiverCompression(int i = -1);
/**
* Enable/disable or 10Gbe
* @param i is -1 to get, 0 to disable and 1 to enable
@ -2348,20 +1849,6 @@ private:
*/
void deleteModule(sls_detector_module *myMod);
/**
* Send a sls_detector_channel structure over socket
* @param myChan channel structure to send
* @returns number of bytes sent to the detector
*/
int sendChannel(sls_detector_channel* myChan);
/**
* Send a sls_detector_chip structure over socket
* @param myChip chip structure to send
* @returns number of bytes sent to the detector
*/
int sendChip(sls_detector_chip* myChip);
/**
* Send a sls_detector_module structure over socket
* @param myMod module structure to send
@ -2369,20 +1856,6 @@ private:
*/
int sendModule(sls_detector_module* myMod);
/**
* Receive a sls_detector_channel structure over socket
* @param myChan channel structure to receive
* @returns number of bytes received from the detector
*/
int receiveChannel(sls_detector_channel* myChan);
/**
* Receive a sls_detector_chip structure over socket
* @param myChip chip structure to receive
* @returns number of bytes received from the detector
*/
int receiveChip(sls_detector_chip* myChip);
/**
* Receive a sls_detector_module structure over socket
* @param myMod module structure to receive
@ -2431,7 +1904,6 @@ private:
*/
std::string setDetectorNetworkParameter(networkParameter index, int delay);
/**
* Get MAC from the receiver using udpip and
* set up UDP connection in detector
@ -2439,6 +1911,94 @@ private:
*/
int setUDPConnection();
/**
* reads a calibration file
* @param fname file to be read
* @param gain reference to the gain variable
* @param offset reference to the offset variable
* @returns OK if successful, else FAIL or -1
*/
static int readCalibrationFile(std::string fname, double &gain, double &offset);
/**
* writes a calibration file
* @param fname file to be written
* @param gain
* @param offset
* @returns OK if successful, else FAIL or -1
*/
static int writeCalibrationFile(std::string fname, double gain, double offset);
/**
* reads a calibration file
* @param fname file to be read
* @param gain reference to the gain variable
* @param offset reference to the offset variable
* @returns OK if successful, else FAIL or -1
*/
static int readCalibrationFile(std::string fname, int *gain, int *offset);
/**
* writes a calibration file
* @param fname file to be written
* @param gain reference to the gain variable
* @param offset reference to the offset variable
* @returns OK if successful, else FAIL or -1
*/
static int writeCalibrationFile(std::string fname, int *gain, int *offset);
/*
* Template function to do linear interpolation between two points (Eiger only)
*/
template <typename E, typename V>
V linearInterpolation(const E x, const E x1, const E x2, const V y1, const V y2){
double k = static_cast<double>(y2-y1)/(x2-x1);
double m = y1-k*x1;
int y = round( k*x+m );
return static_cast<V>(y);
}
/**
* interpolates dacs and trimbits between 2 trim files
* @param a first module structure
* @param b second module structure
* @param energy energy to trim at
* @param e1 reference trim value
* @param e2 reference trim value
* @param tb 1 to include trimbits, 0 to exclude (used for eiger)
* @returns the pointer to the module structure with interpolated values or NULL if error
*/
sls_detector_module* interpolateTrim(
sls_detector_module* a, sls_detector_module* b, const int energy,
const int e1, const int e2, int tb=1);
/**
* reads a trim/settings file
* @param fname name of the file to be read
* @param iodelay io delay (detector specific)
* @param tau tau (detector specific)
* @param myMod pointer to the module structure which has to be set. <BR>
* If it is NULL a new module structure will be created
* @param tb 1 to include trimbits, 0 to exclude (used for eiger)
* @returns the pointer to myMod or NULL if reading the file failed
*/
sls_detector_module* readSettingsFile(std::string fname,
int& iodelay, int& tau,
sls_detector_module* myMod=NULL, int tb=1);
/**
* 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
* @param iodelay io delay (detector specific)
* @param tau tau (detector specific)
* @returns OK or FAIL if the file could not be written
*/
int writeSettingsFile(std::string fname,
sls_detector_module mod, int iodelay, int tau);
/** slsDetector Id or position in the detectors list */
int detId;
@ -2462,12 +2022,6 @@ private:
/** socket for data acquisition */
MySocketTCP *dataSocket;
/** pointer to flat field coefficients in shared memory */
double *ffcoefficients;
/** pointer to flat field coefficient errors in shared memory */
double *fferrors;
/** pointer to detector module structures in shared memory */
sls_detector_module *detectorModules;

View File

@ -84,114 +84,6 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
std::string getDetectorDeveloper(){return std::string("PSI");};
// protected:
/**
set angular conversion
\param fname file with angular conversion constants ("" disable)
\returns 0 if angular conversion disabled, >0 otherwise
*/
virtual int setAngularConversionFile(std::string fname="")=0;
/**
pure virtual function
returns the angular conversion file
*/
virtual std::string getAngularConversionFile()=0;
/**
set action
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript, MAX_ACTIONS}
\param fname for script ("" disable)
\returns 0 if action disabled, >0 otherwise
*/
virtual int setActionScript(int iaction, std::string fname="")=0;
/**
set action
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript, MAX_ACTIONS}
\param par for script ("" disable)
\returns 0 if action disabled, >0 otherwise
*/
virtual int setActionParameter(int iaction, std::string par="")=0;
/**
returns action script
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript}
\returns action script
*/
virtual std::string getActionScript(int iaction)=0;
/**
returns action parameter
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript}
\returns action parameter
*/
virtual std::string getActionParameter(int iaction)=0;
/**
set scan script
\param index is the scan index (0 or 1)
\param script fname for script ("" disable, "none" disables and overwrites current, "threshold" makes threshold scan, "trimbits" make trimbits scan, "energy" makes energy scan)
\returns 0 if scan disabled, >0 otherwise
*/
virtual int setScanScript(int index, std::string script="")=0;
/**
set scan script parameter
\param index is the scan index (0 or 1)
\param spar parameter to be passed to the scan script with syntax par=spar
\returns 0 if scan disabled, >0 otherwise
*/
virtual int setScanParameter(int index, std::string spar="")=0;
/** set scan precision
\param index is the scan index (0 or 1)
\param precision number of decimals to use for the scan variable in the file name
\returns 0 if scan disabled, >0 otherwise */
virtual int setScanPrecision(int index, int precision=-1)=0;
/**
set scan steps (passed to the scan script as var=step)
\param index is the scan index (0 or 1)
\param nvalues is the number of steps
\param values array of steps
\returns 0 if scan disabled, >0 otherwise*/
virtual int setScanSteps(int index, int nvalues=-1, double *values=NULL)=0;
/**
get scan script
\param index is the scan index (0 or 1)
\returns "none" if disables, "threshold" threshold scan, "trimbits" trimbits scan, "energy" energy scan or scan script name
*/
virtual std::string getScanScript(int index)=0;
/**
get scan script
\param index is the scan index (0 or 1)
\returns scan script parameter
*/
virtual std::string getScanParameter(int index)=0;
/**
get scan precision
\param index is the scan index (0 or 1)
\returns precision i.e. number of decimals to use for the scan variable in the file name
*/
virtual int getScanPrecision(int index)=0;
/**
get scan steps
\param index is the scan index (0 or 1)
\param values pointer to array of values (must be allocated in advance)
\returns number of steps
*/
virtual int getScanSteps(int index, double *values=NULL)=0;
/**
Writes the configuration file -- will contain all the informations needed for the configuration (e.g. for a PSI detector caldir, settingsdir, angconv, badchannels etc.)
\param fname file name
@ -208,26 +100,6 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
*/
virtual int loadImageToDetector(imageType index,std::string const fname)=0;
/**
\returns number of positions
*/
virtual int getNumberOfPositions()=0;// {return 0;};
/**
\returns action mask
*/
virtual int getActionMask()=0;// {return 0;};
/**
\param index scan level index
\returns current scan variable
*/
virtual double getCurrentScanVariable(int index)=0;// {return 0;};
/**
\returns current position index
*/
virtual int getCurrentPositionIndex()=0;// {return 0;};
/**
\returns total number of channels
*/
@ -238,28 +110,15 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
*/
virtual int getTotalNumberOfChannels(dimension d)=0;
/** generates file name without extension */
virtual std::string createFileName()=0;
virtual void incrementProgress()=0;
virtual void setCurrentProgress(int i=0)=0;
virtual double getCurrentProgress()=0;
virtual void incrementFileIndex()=0;
virtual int setTotalProgress()=0;
virtual double* decodeData(int *datain, int &nn, double *fdata=NULL)=0;
virtual std::string getCurrentFileName()=0;
virtual int getFileIndexFromFileName(std::string fname)=0;
virtual int getIndicesFromFileName(std::string fname,int &index)=0;
virtual double *convertAngles()=0;
/**
set rate correction
\param t dead time in ns - if 0 disable correction, if >0 set dead time to t, if <0 set deadtime to default dead time for current settings
@ -280,32 +139,12 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
*/
virtual int getRateCorrection()=0;
virtual int setFlatFieldCorrection(std::string fname="")=0;
int setFlatFieldCorrectionFile(std::string fname=""){return setFlatFieldCorrection(fname);};
/**
set/get dynamic range
\param i dynamic range (-1 get)
\returns current dynamic range
*/
virtual int setDynamicRange(int i=-1)=0;
// int setBitDepth(int i=-1){return setDynamicRange(i);};
/**
set/get the size of the detector
\param i number of modules
\param d dimension
\returns current number of modules in direction d
*/
virtual int setNumberOfModules(int i=-1, dimension d=X)=0;
// int setDetectorSize(int x0=-1, int y0=-1, int nx=-1, int ny=-1){return setNumberOfModules(nx/getChansPerMod(0),X);};
// int getDetectorSize(int &x0, int &y0, int &nx, int &ny){x0=0; nx=setNumberOfModules(-1,X)*getChansPerMod(0); return nx;};
virtual int getMaxNumberOfModules(dimension d=X)=0; //
// int getMaximumDetectorSize(int &nx, int &ny){nx=getMaxNumberOfModules(X)*getChansPerMod(0); ny=1; return nx;};
/** Locks/Unlocks the connection to the server
@ -329,12 +168,6 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
int startMeasurement(){acquire(0); return OK;};
/**
asks and receives a data frame from the detector, writes it to disk and processes the data
\returns pointer to the data or NULL (unused!!!).
*/
virtual int* readFrame()=0;
/**
get detector ids/versions for module=0
@ -343,8 +176,6 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
\returns id
*/
virtual int64_t getId(idMode mode, int imod=0)=0;
int64_t getModuleFirmwareVersion(){return getId(MODULE_FIRMWARE_VERSION,-1);};
int64_t getModuleSerialNumber(int imod=-1){return getId(MODULE_SERIAL_NUMBER,imod);};
int64_t getDetectorFirmwareVersion(){return getId(DETECTOR_FIRMWARE_VERSION,-1);};
int64_t getDetectorSerialNumber(){return getId(DETECTOR_SERIAL_NUMBER,-1);};
int64_t getDetectorSoftwareVersion(){return getId(DETECTOR_SOFTWARE_VERSION,-1);};
@ -361,14 +192,13 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
*/
virtual int stopAcquisition()=0;
int stopMeasurement(){return stopAcquisition();};
virtual int getChansPerMod(int imod=0)=0;
/**
set/get timer value
\param index timer index
\param t time in ns or number of...(e.g. frames, gates, probes)
\param t time in ns or number of...(e.g. frames, gates)
\param imod module number
\returns timer set value in ns or number of...(e.g. frames, gates, probes)
\returns timer set value in ns or number of...(e.g. frames, gates)
*/
virtual int64_t setTimer(timerIndex index, int64_t t=-1, int imod = -1)=0;
int64_t setExposureTime(int64_t t=-1, int imod = -1){return setTimer(ACQUISITION_TIME,t,imod);};
@ -457,7 +287,6 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
virtual dacs_t setDAC(dacs_t val, dacIndex index , int mV, int imod=-1)=0;
int setDACValue(int val, int index , int imod=-1) { return (int)setDAC((dacs_t)val,(dacIndex)index,0,imod);};
/**
gets ADC value
\param index ADC index
@ -466,7 +295,7 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
*/
virtual dacs_t getADC(dacIndex index, int imod=-1)=0;
int getADCValue(int index, int imod=-1){return (int)getADC((dacIndex)index, imod);};
///////////////////////////////////////////////////////////////////////////////////////////
/**
@short get run status
\returns status mask
@ -557,6 +386,12 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
*/
virtual int setFileIndex(int i)=0;
/**
@short increments file index
\returns the file index
*/
virtual int incrementFileIndex()=0;
//receiver
/**
@ -627,76 +462,33 @@ virtual int enableDataStreamingFromReceiver(int enable=-1)=0;
*/
virtual int setReadReceiverFrequency(int freq=-1)=0;
/** Sets the receiver to start any readout remaining in the fifo and
* change status to transmitting.
* The status changes to run_finished when fifo is empty
*/
virtual runStatus startReceiverReadout()=0;
/** returns detector type std::string from detector type index
\param t std::string can be Mythen, Pilatus, Eiger, Gotthard, Agipd, Unknown
\returns MYTHEN, PILATUS, EIGER, GOTTHARD, AGIPD, MÖNCH, GENERIC
\param t std::string can be Eiger, Gotthard, Jungfrau, Unknown
\returns EIGER, GOTTHARD, JUNGFRAU, GENERIC
*/
static std::string getDetectorType(detectorType t){\
switch (t) {\
case MYTHEN: return std::string("Mythen"); \
case PILATUS: return std::string("Pilatus"); \
case EIGER: return std::string("Eiger"); \
case GOTTHARD: return std::string("Gotthard"); \
case AGIPD: return std::string("Agipd"); \
case MOENCH: return std::string("Moench"); \
case JUNGFRAU: return std::string("Jungfrau"); \
case JUNGFRAUCTB: return std::string("JungfrauCTB"); \
case PROPIX: return std::string("Propix"); \
default: return std::string("Unknown"); \
}};
/** returns detector type index from detector type std::string
\param type can be MYTHEN, PILATUS, EIGER, GOTTHARD, AGIPD, GENERIC
\returns Mythen, Pilatus, Eiger, Gotthard, Agipd, Mönch, Unknown
\param type can be EIGER, GOTTHARD, JUNGFRAU, GENERIC
\returns Eiger, Gotthard, Jungfrau, Unknown
*/
static detectorType getDetectorType(std::string const type){\
if (type=="Mythen") return MYTHEN;\
if (type=="Pilatus") return PILATUS; \
if (type=="Eiger") return EIGER; \
if (type=="Gotthard") return GOTTHARD; \
if (type=="Agipd") return AGIPD; \
if (type=="Moench") return MOENCH; \
if (type=="Jungfrau") return JUNGFRAU; \
if (type=="JungfrauCTB") return JUNGFRAUCTB; \
if (type=="Propix") return PROPIX; \
return GENERIC;};
/** returns synchronization type index from std::string
\param type can be none, gating, trigger, complementary
\returns ONE, MASTER_GATES, MASTER_TRIGGERS, SLAVE_STARTS_WHEN_MASTER_STOPS
*/
static synchronizationMode getSyncType(std::string const type){\
if (type=="none") return NO_SYNCHRONIZATION;\
if (type=="gating") return MASTER_GATES;\
if (type=="trigger") return MASTER_TRIGGERS; \
if (type=="complementary") return SLAVE_STARTS_WHEN_MASTER_STOPS; \
return GET_SYNCHRONIZATION_MODE; \
};
/** returns synchronization type std::string from index
\param s can be NONE, MASTER_GATES, MASTER_TRIGGERS, SLAVE_STARTS_WHEN_MASTER_STOPS
\returns none, gating, trigger, complementary, unknown
*/
static std::string getSyncType(synchronizationMode s ){\
switch(s) { \
case NO_SYNCHRONIZATION: return std::string("none"); \
case MASTER_GATES: return std::string("gating"); \
case MASTER_TRIGGERS: return std::string("trigger"); \
case SLAVE_STARTS_WHEN_MASTER_STOPS: return std::string("complementary"); \
default: return std::string("unknown"); \
}};
/** returns std::string from external signal type index
\param f can be SIGNAL_OFF, GATE_IN_ACTIVE_HIGH, GATE_IN_ACTIVE_LOW, TRIGGER_IN_RISING_EDGE, TRIGGER_IN_FALLING_EDGE, RO_TRIGGER_IN_RISING_EDGE, RO_TRIGGER_IN_FALLING_EDGE, GATE_OUT_ACTIVE_HIGH, GATE_OUT_ACTIVE_LOW, =TRIGGER_OUT_RISING_EDGE, TRIGGER_OUT_FALLING_EDGE, RO_TRIGGER_OUT_RISING_EDGE, RO_TRIGGER_OUT_FALLING_EDGE, OUTPUT_LOW, OUTPUT_HIGH, MASTER_SLAVE_SYNCHRONIZATION, GET_EXTERNAL_SIGNAL_FLAG
\returns std::string off, gate_in_active_high, gate_in_active_low, trigger_in_rising_edge, trigger_in_falling_edge, ro_trigger_in_rising_edge, ro_trigger_in_falling_edge, gate_out_active_high, gate_out_active_low, trigger_out_rising_edge, trigger_out_falling_edge, ro_trigger_out_rising_edge, ro_trigger_out_falling_edge, gnd, vcc, sync, unknown
@ -862,8 +654,8 @@ virtual int enableDataStreamingFromReceiver(int enable=-1)=0;
}};
/** returns std::string from timer index
\param s can be FRAME_NUMBER,ACQUISITION_TIME,FRAME_PERIOD, DELAY_AFTER_TRIGGER,GATES_NUMBER,PROBES_NUMBER, CYCLES_NUMBER, ACTUAL_TIME,MEASUREMENT_TIME, PROGRESS,MEASUREMENTS_NUMBER,FRAMES_FROM_START,FRAMES_FROM_START_PG,SAMPLES_JCTB,SUBFRAME_ACQUISITION_TIME,STORAGE_CELL_NUMBER, SUBFRAME_DEADTIME
\returns std::string frame_number,acquisition_time,frame_period, delay_after_trigger,gates_number,probes_number, cycles_number, actual_time,measurement_time, progress,measurements_number,frames_from_start,frames_from_start_pg,samples_jctb,subframe_acquisition_time,storage_cell_number, SUBFRAME_DEADTIME
\param s can be FRAME_NUMBER,ACQUISITION_TIME,FRAME_PERIOD, DELAY_AFTER_TRIGGER,GATES_NUMBER, CYCLES_NUMBER, ACTUAL_TIME,MEASUREMENT_TIME, PROGRESS,MEASUREMENTS_NUMBER,FRAMES_FROM_START,FRAMES_FROM_START_PG,SAMPLES_JCTB,SUBFRAME_ACQUISITION_TIME,STORAGE_CELL_NUMBER, SUBFRAME_DEADTIME
\returns std::string frame_number,acquisition_time,frame_period, delay_after_trigger,gates_number, cycles_number, actual_time,measurement_time, progress,measurements_number,frames_from_start,frames_from_start_pg,samples_jctb,subframe_acquisition_time,storage_cell_number, SUBFRAME_DEADTIME
*/
static std::string getTimerType(timerIndex t){ \
switch (t) { \
@ -872,7 +664,6 @@ virtual int enableDataStreamingFromReceiver(int enable=-1)=0;
case FRAME_PERIOD: return std::string("frame_period"); \
case DELAY_AFTER_TRIGGER: return std::string("delay_after_trigger"); \
case GATES_NUMBER: return std::string("gates_number"); \
case PROBES_NUMBER: return std::string("probes_number"); \
case CYCLES_NUMBER: return std::string("cycles_number"); \
case ACTUAL_TIME: return std::string("actual_time"); \
case MEASUREMENT_TIME: return std::string("measurement_time"); \

File diff suppressed because it is too large Load Diff

View File

@ -36,14 +36,11 @@ class slsDetectorCommand : public virtual slsDetectorDefs {
std::string helpLine(int narg, char *args[], int action=HELP_ACTION);
static std::string helpAcquire(int narg, char *args[], int action);
static std::string helpData(int narg, char *args[], int action);
static std::string helpFrame(int narg, char *args[], int action);
static std::string helpStatus(int narg, char *args[], int action);
static std::string helpDataStream(int narg, char *args[], int action);
static std::string helpFree(int narg, char *args[], int action);
static std::string helpHostname(int narg, char *args[], int action);
static std::string helpUser(int narg, char *args[], int action);
static std::string helpMaster(int narg, char *args[], int action);
static std::string helpSync(int narg, char *args[], int action);
static std::string helpExitServer(int narg, char *args[], int action);
static std::string helpSettingsDir(int narg, char *args[], int action);
static std::string helpCalDir(int narg, char *args[], int action);
@ -51,14 +48,8 @@ class slsDetectorCommand : public virtual slsDetectorDefs {
static std::string helpOutDir(int narg, char *args[], int action);
static std::string helpFileName(int narg, char *args[], int action);
static std::string helpFileIndex(int narg, char *args[], int action);
static std::string helpFlatField(int narg, char *args[], int action);
static std::string helpRateCorr(int narg, char *args[], int action);
static std::string helpBadChannels(int narg, char *args[], int action);
static std::string helpAngConv(int narg, char *args[], int action);
static std::string helpThreaded(int narg, char *args[], int action);
static std::string helpPositions(int narg, char *args[], int action);
static std::string helpScripts(int narg, char *args[], int action);
static std::string helpScans(int narg, char *args[], int action);
static std::string helpNetworkParameter(int narg, char *args[], int action);
static std::string helpPort(int narg, char *args[], int action);
static std::string helpLock(int narg, char *args[], int action);
@ -107,14 +98,11 @@ class slsDetectorCommand : public virtual slsDetectorDefs {
std::string cmdUnknown(int narg, char *args[], int action);
std::string cmdAcquire(int narg, char *args[], int action);
std::string cmdData(int narg, char *args[], int action);
std::string cmdFrame(int narg, char *args[], int action);
std::string cmdStatus(int narg, char *args[], int action);
std::string cmdDataStream(int narg, char *args[], int action);
std::string cmdFree(int narg, char *args[], int action);
std::string cmdHostname(int narg, char *args[], int action);
std::string cmdUser(int narg, char *args[], int action);
std::string cmdMaster(int narg, char *args[], int action);
std::string cmdSync(int narg, char *args[], int action);
std::string cmdHelp(int narg, char *args[], int action);
std::string cmdExitServer(int narg, char *args[], int action);
std::string cmdSettingsDir(int narg, char *args[], int action);
@ -123,14 +111,8 @@ class slsDetectorCommand : public virtual slsDetectorDefs {
std::string cmdOutDir(int narg, char *args[], int action);
std::string cmdFileName(int narg, char *args[], int action);
std::string cmdFileIndex(int narg, char *args[], int action);
std::string cmdFlatField(int narg, char *args[], int action);
std::string cmdRateCorr(int narg, char *args[], int action);
std::string cmdBadChannels(int narg, char *args[], int action);
std::string cmdAngConv(int narg, char *args[], int action);
std::string cmdThreaded(int narg, char *args[], int action);
std::string cmdPositions(int narg, char *args[], int action);
std::string cmdScripts(int narg, char *args[], int action);
std::string cmdScans(int narg, char *args[], int action);
std::string cmdNetworkParameter(int narg, char *args[], int action);
std::string cmdPort(int narg, char *args[], int action);
std::string cmdLock(int narg, char *args[], int action);

View File

@ -72,55 +72,14 @@ int slsDetectorUsers::setFileIndex(int i){
return (int)myDetector->setFileIndex(i);
}
string slsDetectorUsers::getFlatFieldCorrectionDir(){
return myDetector->getFlatFieldCorrectionDir();
}
string slsDetectorUsers::setFlatFieldCorrectionDir(string dir){
return myDetector->setFlatFieldCorrectionDir(dir);
}
string slsDetectorUsers::getFlatFieldCorrectionFile(){
return myDetector->getFlatFieldCorrectionFile();
}
int slsDetectorUsers::setFlatFieldCorrectionFile(string fname){
return myDetector->setFlatFieldCorrectionFile(fname);
}
int slsDetectorUsers::enableFlatFieldCorrection(int i){
return myDetector->enableFlatFieldCorrection(i);
}
int slsDetectorUsers::enableCountRateCorrection(int i){
return myDetector->enableCountRateCorrection(i);
}
int slsDetectorUsers::enablePixelMaskCorrection(int i){
return myDetector->enablePixelMaskCorrection(i);
}
int slsDetectorUsers::enableAngularConversion(int i){
return myDetector->enableAngularConversion(i);
}
int slsDetectorUsers::enableWriteToFile(int i){
return myDetector->enableWriteToFile(i);
}
int slsDetectorUsers::setPositions(int nPos, double *pos){
return myDetector->setPositions(nPos, pos);
}
int slsDetectorUsers::getPositions(double *pos){
return myDetector->getPositions(pos);
}
int slsDetectorUsers::setDetectorSize(int x0, int y0, int nx, int ny){
if(myDetector->getTotalNumberOfChannels(slsDetectorDefs::Y)>1)
return 1;
int nmod=nx/(myDetector->getChansPerMod(0));
cout << myDetector->getChansPerMod(0) << " " << nx << " " << nmod << endl;
return myDetector->setNumberOfModules(nmod)*myDetector->getChansPerMod(0);}
int slsDetectorUsers::getDetectorSize(int &x0, int &y0, int &nx, int &ny){
y0=0;
x0=0;
@ -226,19 +185,6 @@ string slsDetectorUsers::getDetectorType(){
return myDetector->sgetDetectorsType();
}
void slsDetectorUsers::initDataset(int refresh){
myDetector->initDataset(refresh);
}
void slsDetectorUsers::addFrame(double *data, double pos, double i0, double t, string fname, double var){
myDetector->addFrame(data,pos,i0,t,fname,var);
}
void slsDetectorUsers::finalizeDataset(double *a, double *v, double *e, int &np){
myDetector->finalizeDataset(a, v, e, np);
}
int slsDetectorUsers::setReceiverMode(int n){
return myDetector->setReadReceiverFrequency(n);
}
@ -267,14 +213,6 @@ string slsDetectorUsers::setClientDataStreamingInIP(string ip){
return myDetector->setClientDataStreamingInIP(ip);
}
int64_t slsDetectorUsers::getModuleFirmwareVersion(){
return myDetector->getModuleFirmwareVersion();
}
int64_t slsDetectorUsers::getModuleSerialNumber(int imod){
return myDetector->getModuleSerialNumber(imod);
}
int64_t slsDetectorUsers::getDetectorFirmwareVersion(){
return myDetector->getDetectorFirmwareVersion();
}
@ -337,39 +275,10 @@ void slsDetectorUsers::registerDataCallback(int( *userCallback)(detectorData*, i
myDetector->registerDataCallback(userCallback,pArg);
}
void slsDetectorUsers::registerRawDataCallback(int( *userCallback)(double*, int, void*), void *pArg){
myDetector->registerRawDataCallback(userCallback,pArg);
}
void slsDetectorUsers::registerAcquisitionFinishedCallback(int( *func)(double,int, void*), void *pArg){
myDetector->registerAcquisitionFinishedCallback(func,pArg);
}
void slsDetectorUsers::registerGetPositionCallback( double (*func)(void*),void *arg){
myDetector->registerGetPositionCallback(func,arg);
}
void slsDetectorUsers::registerConnectChannelsCallback( int (*func)(void*),void *arg){
myDetector->registerConnectChannelsCallback(func,arg);
}
void slsDetectorUsers::registerDisconnectChannelsCallback( int (*func)(void*),void *arg){
myDetector->registerDisconnectChannelsCallback(func,arg);
}
void slsDetectorUsers::registerGoToPositionCallback( int (*func)(double,void*),void *arg){
myDetector->registerGoToPositionCallback(func,arg);
}
void slsDetectorUsers::registerGoToPositionNoWaitCallback( int (*func)(double,void*),void *arg){
myDetector->registerGoToPositionNoWaitCallback(func,arg);
}
void slsDetectorUsers::registerGetI0Callback( double (*func)(int,void*),void *arg){
myDetector->registerGetI0Callback(func,arg);
}
string slsDetectorUsers::putCommand(int narg, char *args[], int pos){
if(narg < 2)
return string("Error: Insufficient Parameters");
@ -455,8 +364,8 @@ int slsDetectorUsers::setTenGigabitEthernet(int i) {
return myDetector->enableTenGigabitEthernet(i);
}
int slsDetectorUsers::getNMods() {
return myDetector->getNMods();
int slsDetectorUsers::getNumberOfDetectors() {
return myDetector->getNumberOfDetectors();
}
double slsDetectorUsers::setSubFrameExposureTime(double t, bool inseconds, int imod){

View File

@ -62,7 +62,6 @@ You can find examples of how this classes can be instatiated in mainClient.cpp
\authors <a href="mailto:anna.bergamaschi@psi.ch">Anna Bergamaschi</a>, <a href="mailto:dhanya.thattil@psi.ch">Dhanya Thattil</a>
@version 3.0
<H2>Currently supported detectors</H2>
\li MYTHEN
\li GOTTHARD controls
\li GOTTHARD data receiver
\li EIGER
@ -171,41 +170,6 @@ class slsDetectorUsers
*/
int setFileIndex(int i);
/**
@short get flat field corrections file directory
\returns flat field correction file directory
*/
std::string getFlatFieldCorrectionDir();
/**
@short set flat field corrections file directory
\param dir flat field correction file directory
\returns flat field correction file directory
*/
std::string setFlatFieldCorrectionDir(std::string dir);
/**
@short get flat field corrections file name
\returns flat field correction file name
*/
std::string getFlatFieldCorrectionFile();
/**
@short set flat field correction file
\param fname name of the flat field file (or "" if disable)
\returns 0 if disable (or file could not be read), >0 otherwise
*/
int setFlatFieldCorrectionFile(std::string fname="");
/**
@short enable/disable flat field corrections (without changing file name)
\param i 0 disables, 1 enables, -1 gets
\returns 0 if ff corrections disabled, 1 if enabled
*/
int enableFlatFieldCorrection(int i=-1);
/**
@short enable/disable count rate corrections
\param i 0 disables, 1 enables with default values, -1 gets
@ -213,49 +177,10 @@ class slsDetectorUsers
*/
int enableCountRateCorrection(int i=-1);
/**
@short enable/disable bad channel corrections
\param i 0 disables, 1 enables, -1 gets
\returns 0 if bad channels corrections disabled, 1 if enabled
*/
int enablePixelMaskCorrection(int i=-1);
/**
@short enable/disable angular conversion
\param i 0 disables, 1 enables, -1 gets
\returns 0 if angular conversion disabled, 1 if enabled
*/
int enableAngularConversion(int i=-1);
/**Enable write file function included*/
int enableWriteToFile(int i=-1);
/**
@short set positions for the acquisition
\param nPos number of positions
\param pos array with the encoder positions
\returns number of positions
*/
int setPositions(int nPos, double *pos);
/**
@short get positions for the acquisition
\param pos array which will contain the encoder positions
\returns number of positions
*/
int getPositions(double *pos=NULL);
/**
@short sets the detector size
\param x0 horizontal position origin in channel number (-1 unchanged)
\param y0 vertical position origin in channel number (-1 unchanged)
\param nx number of channels in horiziontal (-1 unchanged)
\param ny number of channels in vertical (-1 unchanged)
\returns OK/FAIL
*/
int setDetectorSize(int x0=-1, int y0=-1, int nx=-1, int ny=-1);
/**
@short gets detector size
@ -419,43 +344,6 @@ class slsDetectorUsers
void registerDataCallback(int( *userCallback)(detectorData* d, int f, int s, void*), void *pArg);
/**
@short register callback for accessing raw data - if the rawDataCallback is registered, no filewriting/postprocessing will be carried on automatically by the software - the raw data are deleted by the software
\param userCallback function for postprocessing and saving the data - p is the pointer to the data, n is the number of channels
\param pArg argument
*/
void registerRawDataCallback(int( *userCallback)(double* p, int n, void*), void *pArg);
/**
@short function to initalize a set of measurements (reset binning if angular conversion, reset summing otherwise) - can be overcome by the user's functions thanks to the virtual property
\param refresh if 1, all parameters like ffcoefficients, badchannels, ratecorrections etc. are reset (should be called at least onece with this option), if 0 simply reset merging/ summation
*/
virtual void initDataset(int refresh);
/**
@short adds frame to merging/summation - can be overcome by the user's functions thanks to the virtual property
\param data pointer to the raw data
\param pos encoder position
\param i0 beam monitor readout for intensity normalization (if 0 not performed)
\param t exposure time in seconds, required only if rate corrections
\param fname file name (unused since filewriting would be performed by the user)
\param var optional parameter - unused.
*/
virtual void addFrame(double *data, double pos, double i0, double t, std::string fname, double var);
/**
@short finalizes the data set returning the array of angles, values and errors to be used as final data - can be overcome by the user's functions thanks to the virtual property
\param a pointer to the array of angles - can be null if no angular coversion is required
\param v pointer to the array of values
\param e pointer to the array of errors
\param np reference returning the number of points
*/
virtual void finalizeDataset(double *a, double *v, double *e, int &np);
/** Enable or disable streaming data from receiver (creates transmitting sockets)
@ -503,19 +391,6 @@ class slsDetectorUsers
*/
std::string setClientDataStreamingInIP(std::string ip="");
/**
get get Module Firmware Version
\returns id
*/
int64_t getModuleFirmwareVersion();
/**
get get Module Serial Number
@param imod module number
\returns id
*/
int64_t getModuleSerialNumber(int imod=-1);
/**
get get Detector Firmware Version
\returns id
@ -599,44 +474,6 @@ class slsDetectorUsers
*/
void registerAcquisitionFinishedCallback(int( *func)(double,int, void*), void *pArg);
/**
@short register calbback for reading detector position
\param func function for reading the detector position
\param arg argument
*/
void registerGetPositionCallback( double (*func)(void*),void *arg);
/**
@short register callback for connecting to the epics channels
\param func function for connecting to the epics channels
\param arg argument
*/
void registerConnectChannelsCallback( int (*func)(void*),void *arg);
/**
@short register callback to disconnect the epics channels
\param func function to disconnect the epics channels
\param arg argument
*/
void registerDisconnectChannelsCallback( int (*func)(void*),void *arg);
/**
@short register callback for moving the detector
\param func function for moving the detector
\param arg argument
*/
void registerGoToPositionCallback( int (*func)(double,void*),void *arg);
/**
@short register callback for moving the detector without waiting
\param func function for moving the detector
\param arg argument
*/
void registerGoToPositionNoWaitCallback( int (*func)(double,void*),void *arg);
/**
@short register calbback reading to I0
\param func function for reading the I0 (called with parameter 0 before the acquisition, 1 after and the return value used as I0)
\param arg argument
*/
void registerGetI0Callback( double (*func)(int,void*),void *arg);
/**
@short sets parameters in command interface http://www.psi.ch/detectors/UsersSupportEN/slsDetectorClientHowTo.pdf
\param narg value to be set
@ -775,10 +612,10 @@ class slsDetectorUsers
int setTenGigabitEthernet(int i = -1);
/**
* returns total number of detector modules
* @returns the total number of detector modules
* returns total number of detectors
* @returns the total number of detectors
*/
int getNMods();
int getNumberOfDetectors();
/**
* Set sub frame exposure time (only for Eiger)

View File

@ -1,9 +1,7 @@
#include "slsDetectorUtils.h"
#include "usersFunctions.h"
#include "slsDetectorCommand.h"
#include "postProcessing.h"
#include "enCalLogClass.h"
#include "angCalLogClass.h"
#include <cstdlib>
#include <sys/ipc.h>
@ -12,32 +10,26 @@
#include <string>
using namespace std;
slsDetectorUtils::slsDetectorUtils() {
slsDetectorUtils::slsDetectorUtils():
stoppedFlag(0),
timerValue(0),
currentSettings(0),
currentThresholdEV(0),
totalProgress(0),
progressIndex(0),
acquisition_finished(NULL),
measurement_finished(NULL),
acqFinished_p(NULL),
measFinished_p(NULL),
progress_call(0),
pProgressCallArg(0)
{
#ifdef VERBOSE
cout << "setting callbacks" << endl;
#endif
acquisition_finished=NULL;
acqFinished_p=NULL;
measurement_finished=NULL;
measFinished_p=NULL;
progress_call=0;
pProgressCallArg=0;
registerGetPositionCallback(&defaultGetPosition, NULL);
registerConnectChannelsCallback(&defaultConnectChannels,NULL);
registerDisconnectChannelsCallback(&defaultDisconnectChannels,NULL);
registerGoToPositionCallback(&defaultGoToPosition,NULL);
registerGoToPositionNoWaitCallback(&defaultGoToPositionNoWait,NULL);
registerGetI0Callback(&defaultGetI0,NULL);
#ifdef VERBOSE
registerAcquisitionFinishedCallback(&dummyAcquisitionFinished,this);
registerMeasurementFinishedCallback(&dummyMeasurementFinished,this);
cout << "done " << endl;
#endif
};
}
@ -61,73 +53,16 @@ int slsDetectorUtils::acquire(int delflag){
bool receiver = (setReceiverOnline()==ONLINE_FLAG);
if(!receiver){
setDetectorIndex(-1);
}
int nc=setTimer(CYCLES_NUMBER,-1);
int nf=setTimer(FRAME_NUMBER,-1);
if (nc==0) nc=1;
if (nf==0) nf=1;
int multiframe = nc*nf;
progressIndex=0;
*stoppedFlag=0;
angCalLogClass *aclog=NULL;
enCalLogClass *eclog=NULL;
int connectChannels=0;
#ifdef VERBOSE
cout << "Acquire function "<< delflag << endl;
cout << "Stopped flag is "<< stoppedFlag << delflag << endl;
#endif
void *status;
if ((*correctionMask&(1<< ANGULAR_CONVERSION)) || (*correctionMask&(1<< I0_NORMALIZATION)) || getActionMode(angCalLog) || (getScanMode(0)==positionScan)|| (getScanMode(1)==positionScan)) {
if (connectChannels==0)
if (connect_channels) {
connect_channels(CCarg);
connectChannels=1;
}
}
if (getActionMode(angCalLog)) {
aclog=new angCalLogClass(this);
}
if (getActionMode(enCalLog)) {
eclog=new enCalLogClass(this);
}
setJoinThread(0);
positionFinished(0);
int nm=timerValue[MEASUREMENTS_NUMBER];
if (nm<1)
nm=1;
int np=getNumberOfPositions();
if (np<1)
np=1;
int ns0=1;
if (*actionMask & (1 << MAX_ACTIONS)) {
ns0=getScanSteps(0);
if (ns0<1)
ns0=1;
}
int ns1=1;
if (*actionMask & (1 << (MAX_ACTIONS+1))) {
ns1=getScanSteps(1);
if (ns1<1)
ns1=1;
}
// verify receiver is idle
if(receiver){
pthread_mutex_lock(&mg);
@ -137,12 +72,10 @@ int slsDetectorUtils::acquire(int delflag){
pthread_mutex_unlock(&mg);
}
// start processing thread
if (*threadedProcessing)
startThread(delflag);
#ifdef VERBOSE
cout << " starting thread " << endl;
#endif
//resets frames caught in receiver
if(receiver){
@ -152,304 +85,84 @@ int slsDetectorUtils::acquire(int delflag){
pthread_mutex_unlock(&mg);
}
// loop through measurements
for(int im=0;im<nm;++im) {
#ifdef VERBOSE
cout << " starting measurement "<< im << " of " << nm << endl;
#endif
if (*stoppedFlag)
break;
// start script
if (*stoppedFlag==0) {
executeAction(startScript);
}
// start receiver
if(receiver){
for (int is0=0; is0<ns0; ++is0) {
if (*stoppedFlag==0) {
executeScan(0,is0);
} else
break;
for (int is1=0; is1<ns1; ++is1) {
if (*stoppedFlag==0) {
executeScan(1,is1);
} else
break;
if (*stoppedFlag==0) {
executeAction(scriptBefore);
} else
break;
ResetPositionIndex();
for (int ip=0; ip<np; ++ip) {
if (*stoppedFlag==0) {
if (getNumberOfPositions()>0) {
moveDetector(detPositions[ip]);
IncrementPositionIndex();
#ifdef VERBOSE
std::cout<< "moving to position" << std::endl;
#endif
}
} else
break;
pthread_mutex_lock(&mp);
createFileName();
pthread_mutex_unlock(&mp);
// script before
if (*stoppedFlag==0) {
executeAction(scriptBefore);
} else
break;
// header before
if (*stoppedFlag==0) {
executeAction(headerBefore);
if (*correctionMask&(1<< ANGULAR_CONVERSION) || aclog){
positionFinished(0);
setCurrentPosition(getDetectorPosition());
}
if (aclog)
aclog->addStep(getCurrentPosition(), getCurrentFileName());
if (eclog)
eclog->addStep(setDAC(-1,THRESHOLD,0), getCurrentFileName());
if (*correctionMask&(1<< I0_NORMALIZATION)) {
if (get_i0)
get_i0(0, IOarg);
}
setCurrentFrameIndex(0);
if (multiframe>1)
setFrameIndex(0);
else
setFrameIndex(-1);
// file name and start receiver
if(receiver){
pthread_mutex_lock(&mp);
createFileName();
pthread_mutex_unlock(&mp);
//send receiver file name
pthread_mutex_lock(&mg);
setFileName(fileIO::getFileName());
if(startReceiver() == FAIL) {
cout << "Start receiver failed " << endl;
stopReceiver();
*stoppedFlag=1;
pthread_mutex_unlock(&mg);
break;
}
#ifdef VERBOSE
cout << "Receiver started " << endl;
#endif
pthread_mutex_unlock(&mg);
//let processing thread listen to these packets
sem_post(&sem_newRTAcquisition);
}
#ifdef VERBOSE
cout << "Acquiring " << endl;
#endif
startAndReadAll();
#ifdef VERBOSE
cout << "detector finished" << endl;
cout << "returned! " << endl;
#endif
if (*correctionMask&(1<< I0_NORMALIZATION)) {
if (get_i0)
currentI0=get_i0(1,IOarg);
}
#ifdef VERBOSE
cout << "pos finished? " << endl;
#endif
positionFinished(1);
#ifdef VERBOSE
cout << "done! " << endl;
#endif
if (*threadedProcessing==0){
#ifdef VERBOSE
cout << "start unthreaded process data " << endl;
#endif
processData(delflag);
}
} else
break;
while (dataQueueSize()) usleep(100000);
// close file
if(!receiver){
detectorType type = getDetectorsType();
if ((type==GOTTHARD) || (type==MOENCH) || (type==JUNGFRAUCTB) ){
if((*correctionMask)&(1<<WRITE_FILE))
closeDataFile();
}
}
// stop receiver
else{
pthread_mutex_lock(&mg);
if (stopReceiver() == FAIL) {
*stoppedFlag = 1;
pthread_mutex_unlock(&mg);
} else {
pthread_mutex_unlock(&mg);
if (*threadedProcessing && dataReady)
sem_wait(&sem_endRTAcquisition); // waits for receiver's external process to be done sending data to gui
}
}
// header after
if (*stoppedFlag==0) {
pthread_mutex_lock(&mp);
executeAction(headerAfter);
pthread_mutex_unlock(&mp);
}
if (*stoppedFlag) {
#ifdef VERBOSE
std::cout<< "exiting since the detector has been stopped" << std::endl;
#endif
break;
}
}//end position loop ip
//script after
if (*stoppedFlag==0) {
executeAction(scriptAfter);
}
if (*stoppedFlag) {
#ifdef VERBOSE
std::cout<< "exiting since the detector has been stopped" << std::endl;
#endif
break;
}
}//end scan1 loop is1
if (*stoppedFlag) {
#ifdef VERBOSE
std::cout<< "exiting since the detector has been stopped" << std::endl;
#endif
pthread_mutex_lock(&mg);
if(startReceiver() == FAIL) {
cout << "Start receiver failed " << endl;
stopReceiver();
*stoppedFlag=1;
pthread_mutex_unlock(&mg);
break;
}
}//end scan0 loop is0
if (*stoppedFlag==0) {
executeAction(stopScript);
}
if (*stoppedFlag) {
#ifdef VERBOSE
cout << "findex incremented " << endl;
#endif
if(*correctionMask&(1<<WRITE_FILE))
IncrementFileIndex();
pthread_mutex_lock(&mg);
setFileIndex(fileIO::getFileIndex());
pthread_mutex_unlock(&mg);
#ifdef VERBOSE
std::cout<< "exiting since the detector has been stopped" << std::endl;
#endif
break;
//let processing thread listen to these packets
sem_post(&sem_newRTAcquisition);
}
// detector start
startAndReadAll();
if (*threadedProcessing==0){
processData(delflag);
}
#ifdef VERBOSE
cout << "findex incremented " << endl;
#endif
if(*correctionMask&(1<<WRITE_FILE))
IncrementFileIndex();
pthread_mutex_lock(&mg); //cout << "lock"<< endl;
setFileIndex(fileIO::getFileIndex());
pthread_mutex_unlock(&mg);//cout << "unlock"<< endl;
// stop receiver
if(receiver){
pthread_mutex_lock(&mg);
if (stopReceiver() == FAIL) {
*stoppedFlag = 1;
pthread_mutex_unlock(&mg);
} else {
pthread_mutex_unlock(&mg);
if (*threadedProcessing && dataReady)
sem_wait(&sem_endRTAcquisition); // waits for receiver's external process to be done sending data to gui
}
}
int findex = 0;
pthread_mutex_lock(&mg);
findex = incrementFileIndex();
pthread_mutex_unlock(&mg);
if (measurement_finished){
pthread_mutex_lock(&mg); //cout << "lock"<< endl;
measurement_finished(im,*fileIndex,measFinished_p);
pthread_mutex_unlock(&mg);//cout << "unlock"<< endl;
pthread_mutex_lock(&mg);
measurement_finished(im,findex,measFinished_p);
pthread_mutex_unlock(&mg);
}
if (*stoppedFlag) {
#ifdef VERBOSE
std::cout<< "exiting since the detector has been stopped" << std::endl;
#endif
break;
}
}//end measurements loop im
// waiting for the data processing thread to finish!
if (*threadedProcessing) {
#ifdef VERBOSE
cout << "wait for data processing thread" << endl;
#endif
setJoinThread(1);
//let processing thread continue and checkjointhread
sem_post(&sem_newRTAcquisition);
pthread_join(dataProcessingThread, &status);
#ifdef VERBOSE
cout << "data processing thread joined" << endl;
#endif
}
if(progress_call)
progress_call(getCurrentProgress(),pProgressCallArg);
if (connectChannels) {
if (disconnect_channels)
disconnect_channels(DCarg);
}
if (aclog)
delete aclog;
if (eclog)
delete eclog;
#ifdef VERBOSE
cout << "acquisition finished callback " << endl;
#endif
if (acquisition_finished)
acquisition_finished(getCurrentProgress(),getDetectorStatus(),acqFinished_p);
#ifdef VERBOSE
cout << "acquisition finished callback done " << endl;
#endif
sem_destroy(&sem_newRTAcquisition);
sem_destroy(&sem_endRTAcquisition);
@ -474,127 +187,34 @@ int slsDetectorUtils::acquire(int delflag){
int slsDetectorUtils::setTotalProgress() {
int nf=1, npos=1, nscan[MAX_SCAN_LEVELS]={1,1}, nc=1, nm=1;
int nf=1, nc=1, ns=1, nm=1;
if (timerValue[FRAME_NUMBER])
nf=timerValue[FRAME_NUMBER];
if (timerValue[FRAME_NUMBER])
nf=timerValue[FRAME_NUMBER];
if (timerValue[CYCLES_NUMBER]>0)
nc=timerValue[CYCLES_NUMBER];
if (timerValue[CYCLES_NUMBER]>0)
nc=timerValue[CYCLES_NUMBER];
if (timerValue[MEASUREMENTS_NUMBER]>0)
nm=timerValue[MEASUREMENTS_NUMBER];
if (timerValue[STORAGE_CELL_NUMBER]>0)
ns=timerValue[STORAGE_CELL_NUMBER]+1;
if (*numberOfPositions>0)
npos=*numberOfPositions;
if (timerValue[MEASUREMENTS_NUMBER]>0)
nm=timerValue[MEASUREMENTS_NUMBER];
if ((nScanSteps[0]>0) && (*actionMask & (1 << MAX_ACTIONS)))
nscan[0]=nScanSteps[0];
if ((nScanSteps[1]>0) && (*actionMask & (1 << (MAX_ACTIONS+1))))
nscan[1]=nScanSteps[1];
totalProgress=nm*nf*nc*npos*nscan[0]*nscan[1];
totalProgress=nm*nf*nc*ns;
#ifdef VERBOSE
cout << "nc " << nc << endl;
cout << "nm " << nm << endl;
cout << "nf " << nf << endl;
cout << "npos " << npos << endl;
cout << "nscan[0] " << nscan[0] << endl;
cout << "nscan[1] " << nscan[1] << endl;
cout << "Set total progress " << totalProgress << endl;
cout << "nm " << nm << endl;
cout << "nf " << nf << endl;
cout << "nc " << nc << endl;
cout << "ns " << ns << endl;
cout << "Set total progress " << totalProgress << endl;
#endif
return totalProgress;
return totalProgress;
}
int slsDetectorUtils::setBadChannelCorrection(string fname, int &nbadtot, int *badchanlist, int off){
int nbad;
int badlist[MAX_BADCHANS];
ifstream infile;
string str;
//int interrupt=0;
//int ich;
//int chmin,chmax;
#ifdef VERBOSE
std::cout << "utils: Setting bad channel correction to " << fname << std::endl;
#endif
// int modmi=0;
int modma=1;
int singlefile=0;
string fn;
int offset=off;
nbadtot=0;
if (fname=="" || fname=="none") {
;
} else {
if (fname.find(".sn")==string::npos && fname.find(".chans")==string::npos) {
modma=setNumberOfModules();
singlefile=1;
}
for (int im=0; im<modma; im++) {
if (singlefile) {
ostringstream ostfn;
ostfn << fname << ".sn" << setfill('0') << setw(3) << hex << getId(MODULE_SERIAL_NUMBER, im);
fn=ostfn.str();
} else
fn=fname;
infile.open(fn.c_str(), ios_base::in);
if (infile.is_open()==0) {
std::cout << "could not open file " << fname <<std::endl;
return -1;
}
nbad=setBadChannelCorrection(infile, nbad, badlist, offset);
infile.close();
for (int ich=0; ich<nbad; ich++) {
if (nbadtot<MAX_BADCHANS) {
badchanlist[nbadtot]=badlist[ich];
nbadtot++;
}
}
offset+=getChansPerMod(im);
}
}
if (nbadtot>0 && nbadtot<MAX_BADCHANS) {
return nbadtot;
} else
return 0;
}
double slsDetectorUtils::getCurrentProgress() {
pthread_mutex_lock(&mp);
#ifdef VERBOSE
@ -611,7 +231,8 @@ double slsDetectorUtils::getCurrentProgress() {
void slsDetectorUtils::incrementProgress() {
pthread_mutex_lock(&mp);
progressIndex++;
cout << fixed << setprecision(2) << setw (6) << 100.*((double)progressIndex)/((double)totalProgress) << " \%";
cout << fixed << setprecision(2) << setw (6)
<< 100.*((double)progressIndex)/((double)totalProgress) << " \%";
pthread_mutex_unlock(&mp);
#ifdef VERBOSE
cout << endl;
@ -625,7 +246,8 @@ void slsDetectorUtils::incrementProgress() {
void slsDetectorUtils::setCurrentProgress(int i){
pthread_mutex_lock(&mp);
progressIndex=i;
cout << fixed << setprecision(2) << setw (6) << 100.*((double)progressIndex)/((double)totalProgress) << " \%";
cout << fixed << setprecision(2) << setw (6)
<< 100.*((double)progressIndex)/((double)totalProgress) << " \%";
pthread_mutex_unlock(&mp);
#ifdef VERBOSE
cout << endl;
@ -638,11 +260,8 @@ void slsDetectorUtils::setCurrentProgress(int i){
int slsDetectorUtils::retrieveDetectorSetup(string const fname1, int level){
slsDetectorCommand *cmd;
// char ext[100];
int skip=0;
string fname;
string str;
@ -652,16 +271,12 @@ int slsDetectorUtils::retrieveDetectorSetup(string const fname1, int level){
char *args[10];
char myargs[10][1000];
//args[0]=myargs[0];
//args[1]=myargs[1];
;
string sargname, sargval;
int iline=0;
if (level==2) {
// fname=fname1+string(".config");
// readConfigurationFile(fname);
#ifdef VERBOSE
cout << "config file read" << endl;
#endif
@ -703,11 +318,7 @@ int slsDetectorUtils::retrieveDetectorSetup(string const fname1, int level){
}
if (level!=2) {
if (string(args[0])==string("flatfield"))
skip=1;
else if (string(args[0])==string("badchannels"))
skip=1;
else if (string(args[0])==string("trimbits"))
if (string(args[0])==string("trimbits"))
skip=1;
}
if (skip==0)
@ -755,8 +366,6 @@ int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
names[nvar++]="cycles";
names[nvar++]="measurements";
names[nvar++]="timing";
names[nvar++]="flatfield";
names[nvar++]="badchannels";
switch (type) {
case EIGER:
@ -767,29 +376,12 @@ int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
names[nvar++]="trimbits";
break;
case GOTTHARD:
case PROPIX:
names[nvar++]="flags";
names[nvar++]="delay";
names[nvar++]="gates";
names[nvar++]="ratecorr";
break;
case JUNGFRAU:
names[nvar++]="flags";
names[nvar++]="delay";
names[nvar++]="gates";
names[nvar++]="ratecorr";
names[nvar++]="clkdivider";
break;
case MYTHEN:
names[nvar++]="flags";
names[nvar++]="threshold";
names[nvar++]="delay";
names[nvar++]="gates";
names[nvar++]="probes";
names[nvar++]="fineoff";
names[nvar++]="ratecorr";
names[nvar++]="trimbits";
break;
case JUNGFRAUCTB:
names[nvar++]="dac:0";
names[nvar++]="dac:1";
@ -838,24 +430,6 @@ int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
}
names[nvar++]="startscript";
names[nvar++]="startscriptpar";
names[nvar++]="stopscript";
names[nvar++]="stopscriptpar";
names[nvar++]="scriptbefore";
names[nvar++]="scriptbeforepar";
names[nvar++]="scriptafter";
names[nvar++]="scriptafterpar";
names[nvar++]="scan0script";
names[nvar++]="scan0par";
names[nvar++]="scan0prec";
names[nvar++]="scan0steps";
names[nvar++]="scan1script";
names[nvar++]="scan1par";
names[nvar++]="scan1prec";
names[nvar++]="scan1steps";
int iv=0;
string fname1;
@ -868,13 +442,6 @@ int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
}
int nargs;
if (level==2)
nargs=2;
else
nargs=1;
if (level==2) {
fname1=fname+string(".config");
writeConfigurationFile(fname1);
@ -887,49 +454,11 @@ int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
outfile.open(fname1.c_str(),ios_base::out);
if (outfile.is_open()) {
cmd=new slsDetectorCommand(this);
for (iv=0; iv<nvar-3; iv++) {
for (iv=0; iv<nvar; iv++) {
strcpy(args[0],names[iv].c_str());
outfile << names[iv] << " " << cmd->executeLine(1,args,GET_ACTION) << std::endl;
}
strcpy(args[0],names[iv].c_str());
if (level==2) {
fname1=fname+string(".ff");
strcpy(args[1],fname1.c_str());
}
outfile << names[iv] << " " << cmd->executeLine(nargs,args,GET_ACTION) << std::endl;
iv++;
strcpy(args[0],names[iv].c_str());
if (level==2) {
fname1=fname+string(".bad");
strcpy(args[1],fname1.c_str());
}
outfile << names[iv] << " " << cmd->executeLine(nargs,args,GET_ACTION) << std::endl;
iv++;
if (level==2) {
strcpy(args[0],names[iv].c_str());
size_t c=fname.rfind('/');
if (c<string::npos) {
fname1=fname.substr(0,c+1)+string("trim_")+fname.substr(c+1);
} else {
fname1=string("trim_")+fname;
}
strcpy(args[1],fname1.c_str());
#ifdef VERBOSE
std::cout<< "writing to file " << fname1 << std::endl;
#endif
outfile << names[iv] << " " << cmd->executeLine(nargs,args,GET_ACTION) << std::endl;
iv++;
}
delete cmd;
outfile.close();
@ -948,3 +477,72 @@ int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
}
int slsDetectorUtils::readDataFile(std::string fname, short int *data, int nch) {
std::ifstream infile;
int iline=0;
std::string str;
infile.open(fname.c_str(), std::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 slsDetectorUtils::readDataFile(std::ifstream &infile, short int *data, int nch, int offset) {
int ichan, iline=0;
short int idata;
int interrupt=0;
std::string str;
while (infile.good() and interrupt==0) {
getline(infile,str);
std::istringstream ssstr(str);
ssstr >> ichan >> idata;
if (ssstr.fail() || ssstr.bad()) {
interrupt=1;
break;
}
if (iline<nch) {
if (ichan>=offset) {
data[iline]=idata;
iline++;
}
} else {
interrupt=1;
break;
}
return iline;
};
return iline;
}
int slsDetectorUtils::writeDataFile(std::string fname,int nch, short int *data) {
std::ofstream outfile;
if (data==NULL)
return slsDetectorDefs::FAIL;
outfile.open (fname.c_str(),std::ios_base::out);
if (outfile.is_open()) {
writeDataFile(outfile, nch, data, 0);
outfile.close();
return slsDetectorDefs::OK;
} else {
std::cout<< "Could not open file " << fname << "for writing"<< std::endl;
return slsDetectorDefs::FAIL;
}
}
int slsDetectorUtils::writeDataFile(std::ofstream &outfile,int nch, short int *data, int offset) {
if (data==NULL)
return slsDetectorDefs::FAIL;
for (int ichan=0; ichan<nch; ichan++)
outfile << ichan+offset << " " << *(data+ichan) << std::endl;
return slsDetectorDefs::OK;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,527 +0,0 @@
#include "AngularConversion_Standalone.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <math.h>
#include "usersFunctions.h"
using namespace std;
angularConversion::angularConversion( int *np, double *pos, double *bs, double *fo, double *go): currentPosition(0),
currentPositionIndex(0),
numberOfPositions(np),
detPositions(pos),
binSize(bs),
fineOffset(fo),
globalOffset(go)
{
//angleFunctionPointer=0;
registerAngleFunctionCallback(&defaultAngleFunction,NULL);
registerCallBackGetChansPerMod(&defaultGetChansPerMod,this);
registerCallBackGetNumberofChannel(&defaultGetNumberofChannel,this);
}
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;
// }
double* angularConversion::convertAngles(double pos) {
int imod=0;
double *ang=new double[totalNumberOfChannels];
double enc=pos;
angleConversionConstant *p=NULL;
int ch0=0;
int chlast=getChansPerMods(imod);
int nchmod=getChansPerMods(imod);
p=angConvs+imod;
if (moveFlag[imod]==0)
enc=0;
else
enc=pos;
for (int ip=0; ip<getTotalNumberofChannels(); ip++) {
#ifdef VERBOSE
// cout << "ip " << ip << " ch0 " << ch0 << " chlast " << chlast << " imod " << imod << endl;
#endif
if (ip>=chlast) {
imod++;
p=angConvs+imod;
if (moveFlag[imod]==0)
enc=0;
else
enc=pos;
ch0=chlast;
nchmod=getChansPerMods(imod);
if (nchmod>0)
chlast+=nchmod;
}
if (p)
ang[ip]=angle(ip-ch0, \
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;
double center, ecenter;
double r_conv, er_conv;
double 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(double *mp, double *mv, double *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(double *mp, double *mv, double *me, int *mm,int nb) {
int np=0;
for (int ibin=0; ibin<nb; ibin++) {
if (mm[ibin]>0) {
#ifdef VERBOSE
cout << "finalize " << ibin << " "<< mm[ibin] << " " << mp[ibin]<< mv[ibin] << me[ibin] << endl;
#endif
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(double *p1, double *v1, double *e1, double *mp, double *mv,double *me, int *mm, int nchans, double binsize,int nbins, int *badChanMask ) {
double 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]++;
#ifdef VERBOSE
cout << "add " << ibin << " "<< mm[ibin] << " " << mp[ibin]<< mv[ibin] << me[ibin] << endl;
#endif
} else
return FAIL;
}
return OK;
}
int angularConversion::deleteMerging() {
if (mergingBins)
delete [] mergingBins;
if (mergingCounts)
delete [] mergingCounts;
if (mergingErrors)
delete [] mergingErrors;
}
int angularConversion::resetMerging() {
getAngularConversionParameter(BIN_SIZE);
mergingBins=new double[nBins];
mergingCounts=new double[nBins];
mergingErrors=new double[nBins];
mergingMultiplicity=new int[nBins];
return resetMerging(mergingBins, mergingCounts, mergingErrors, mergingMultiplicity);
}
int angularConversion::resetMerging(double *mp, double *mv, double *me, int *mm) {
getAngularConversionParameter(BIN_SIZE);
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(double *mp, double *mv, double *me, int *mm) {
if (nBins)
return finalizeMerging(mp, mv, me, mm, nBins);
else
return FAIL;
}
int angularConversion::addToMerging(double *p1, double *v1, double *e1, int *badChanMask ) {
return addToMerging(p1,v1,e1,mergingBins,mergingCounts, mergingErrors, mergingMultiplicity, badChanMask);
}
int angularConversion::addToMerging(double *p1, double *v1, double *e1, double *mp, double *mv,double *me, int *mm, int *badChanMask ) {
int del=0;
if (getAngularConversionParameter(BIN_SIZE)==0){
cout << "no bin size " << endl;
return FAIL;
}
if (nBins==0) {
cout << "no bins " << endl;
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
*/
double angularConversion::setAngularConversionParameter(angleConversionParameter c, double 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
*/
double angularConversion::getAngularConversionParameter(angleConversionParameter c) {
switch (c) {
case ANGULAR_DIRECTION:
return *angDirection;
case GLOBAL_OFFSET:
return *globalOffset;
case FINE_OFFSET:
return *fineOffset;
case BIN_SIZE:
if (*binSize>0)
nBins=360./(*binSize);
else
nBins=0;
return *binSize;
case MOVE_FLAG:
if (moveFlag)
return *moveFlag;
else
return -1;
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, double *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(double *pos){
if (pos) {
for (int ip=0; ip<(*numberOfPositions); ip++)
pos[ip]=detPositions[ip];
}
return *numberOfPositions;
}

View File

@ -1,490 +0,0 @@
#ifndef ANGULARCONVERSIONSTD_H
#define ANGULARCONVERSIONSTD_H
//#include "slsDetectorBase.h"
#include "sls_detector_defs.h"
#include <string>
#include <fstream>
//double angle(int ichan, double encoder, double totalOffset, double conv_r, double center, double offset, double tilt, int direction)
using namespace std;
/**
@short Angular conversion constants needed for a detector module
*/
typedef struct {
double center; /**< center of the module (channel at which the radius is perpendicular to the module surface) */
double ecenter; /**< error in the center determination */
double r_conversion; /**< detector pixel size (or strip pitch) divided by the diffractometer radius */
double er_conversion; /**< error in the r_conversion determination */
double offset; /**< the module offset i.e. the position of channel 0 with respect to the diffractometer 0 */
double eoffset; /**< error in the offset determination */
double tilt; /**< ossible tilt in the orthogonal direction (unused)*/
double etilt; /**< error in the tilt determination */
} angleConversionConstant;
/**
@short methods to set/unset the angular conversion and merge the data
class containing the methods to set/unset the angular conversion and merge the data
The angular conversion itself is defined by the angle() function defined in usersFunctions.cpp
*/
class angularConversion : public virtual slsDetectorDefs { //: public virtual slsDetectorBase {
public:
/** default constructor */
angularConversion(int*, double*, double*, double*, double*);
/** virtual destructor */
virtual ~angularConversion();
//virtual int readAngularConversion(string fname)=0;
/**
reads an angular conversion file
\param fname file to be read
\param nmod number of modules (maximum) to be read
\param angOff pointer to array of angleConversionConstants
\returns OK or FAIL
*/
static int readAngularConversion(string fname, int nmod, angleConversionConstant *angOff);
/**
reads an angular conversion file
\param ifstream input file stream to be read
\param nmod number of modules (maximum) to be read
\param angOff pointer to array of angleConversionConstants
\returns OK or FAIL
*/
static int readAngularConversion(ifstream& ifs, int nmod, angleConversionConstant *angOff);
/**
writes an angular conversion file
\param fname file to be written
\param nmod number of modules to be written
\param angOff pointer to array of angleConversionConstants
\returns OK or FAIL
*/
static int writeAngularConversion(string fname, int nmod, angleConversionConstant *angOff);
/**
writes an angular conversion file
\param ofstream output file stream
\param nmod number of modules to be written
\param angOff pointer to array of angleConversionConstants
\returns OK or FAIL
*/
static int writeAngularConversion(ofstream& ofs, int nmod, angleConversionConstant *angOff);
/**
sets the arrays of the merged data to 0. NB The array should be created with size nbins >= 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
\param nbins number of bins
\returns OK or FAIL
*/
static int resetMerging(double *mp, double *mv,double *me, int *mm, int nbins);
/**
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
*/
int resetMerging(double *mp, double *mv,double *me, int *mm);
/**
creates the arrays for merging the data and sets them to 0.
*/
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(double *p1, double *v1, double *e1, double *mp, double *mv,double *me, int *mm, int nchans, double binsize,int nb, int *badChanMask );
/**
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 badChanMask badchannelmask (if NULL does not correct for bad channels)
\returns OK or FAIL
*/
int addToMerging(double *p1, double *v1, double *e1, double *mp, double *mv,double *me, int *mm, int *badChanMask);
/**
merge dataset
\param p1 angular positions of dataset
\param v1 data
\param e1 errors
\param badChanMask badchannelmask (if NULL does not correct for bad channels)
\returns OK or FAIL
*/
int addToMerging(double *p1, double *v1, double *e1,int *badChanMask);
/**
calculates the "final" positions, data value and errors for the merged data
\param mp already merged postions
\param mv already merged data
\param me already merged errors (squared sum)
\param mm multiplicity of merged arrays
\param nb number of bins
\returns FAIL or the number of non empty bins (i.e. points belonging to the pattern)
*/
static int finalizeMerging(double *mp, double *mv,double *me, int *mm, int nb);
/**
calculates the "final" positions, data value and errors for the merged 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)
*/
int finalizeMerging(double *mp, double *mv,double *me, int *mm);
/**
calculates the "final" positions, data value and errors for the merged data
\returns FAIL or the number of non empty bins (i.e. points belonging to the pattern)
*/
int finalizeMerging();
/**
set detector global offset
\param f global offset to be set
\returns actual global offset
*/
double setGlobalOffset(double f){return setAngularConversionParameter(GLOBAL_OFFSET,f);};
/**
set detector fine offset
\param f global fine to be set
\returns actual fine offset
*/
double setFineOffset(double f){return setAngularConversionParameter(FINE_OFFSET,f);};
/**
get detector fine offset
\returns actual fine offset
*/
double getFineOffset(){return getAngularConversionParameter(FINE_OFFSET);};
/**
get detector global offset
\returns actual global offset
*/
double getGlobalOffset(){return getAngularConversionParameter(GLOBAL_OFFSET);};
/**
set detector bin size
\param bs bin size to be set
\returns actual bin size
*/
double setBinSize(double bs){if (bs>0) nBins=360/bs; return setAngularConversionParameter(BIN_SIZE,bs);};
/**
get detector bin size
\returns detector bin size used for merging (approx angular resolution)
*/
double getBinSize() {return getAngularConversionParameter(BIN_SIZE);};
/**
get angular direction
\returns actual angular direction (1 is channel number increasing with angle, -1 decreasing)
*/
int getAngularDirection(){return (int)getAngularConversionParameter(ANGULAR_DIRECTION);};
/**
set angular direction
\param d angular direction to be set (1 is channel number increasing with angle, -1 decreasing)
\returns actual angular direction (1 is channel number increasing with angle, -1 decreasing)
*/
int setAngularDirection(int d){return (int)setAngularConversionParameter(ANGULAR_DIRECTION, (double)d);};
/**
\returns number of angular bins in the merging (360./binsize)
*/
int getNumberOfAngularBins(){return nBins;};
/**
set angular conversion parameter
\param c parameter type (globaloffset, fineoffset, binsize, angular direction, move flag)
\param v value to be set
\returns actual value
*/
double setAngularConversionParameter(angleConversionParameter c, double v);
/**
get angular conversion parameter
\param c parameter type (globaloffset, fineoffset, binsize, angular direction, move flag)
\returns actual value
*/
double getAngularConversionParameter(angleConversionParameter c);
/**
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, double *pos);
/**
get positions for the acquisition
\param pos array which will contain the encoder positions
\returns number of positions
*/
virtual int getPositions(double *pos=NULL);
/**
deletes the array of merged data
\returns OK
*/
int deleteMerging();
/**
\returns pointer to the array o merged positions
*/
double *getMergedPositions(){return mergingBins;};
/**
\returns pointer to the array of merged counts
*/
double *getMergedCounts(){return mergingCounts;};
/**
\returns pointer to the array of merged errors
*/
double *getMergedErrors(){return mergingErrors;};
/* /\** */
/* reads teh angular conversion file for the (multi)detector and writes it to shared memory */
/* *\/ */
/* virtual int readAngularConversionFile(string fname="")=0; */
/* /\** */
/* 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 *angoff=NULL);
/* /\** */
/* pure virtual function */
/* \param file name to be written (nmod and array of angular conversion constants default to the ones ot the slsDetector */
/* *\/ */
/* virtual int writeAngularConversion(string fname)=0; */
/* /\** */
/* \returns number of modules of the (multi)detector */
/* *\/ */
/* virtual int getNMods()=0; */
/* /\** */
/* returns number of channels in the module */
/* \param imod module number */
/* \returns number of channels in the module */
/* *\/ */
static int defaultGetNumberofChannel(int nch, void *p=NULL ) { ((angularConversion*)p)->setTotalNumberOfChannels(nch); return 0;};
static int defaultGetChansPerMod(int imod=0, void *p=NULL){ ((angularConversion*)p)->setChansPerMod(0,imod); return 0;};
int setChansPerMod(int nch, int imod=0){if (nch<0) return -1; if (imod>=0 && imod<MAXMODS*MAXDET) {chansPerMod[imod]=nch; return chansPerMod[imod];} else return -1;};
int setTotalNumberOfChannels(int i){if (i>=0){ totalNumberOfChannels=i; return totalNumberOfChannels;} else return -1;};
/* /\** */
/* get the angular conversion contant of one modules */
/* \param imod module number */
/* \returns pointer to the angular conversion constant */
/* *\/ */
/* virtual angleConversionConstant *getAngularConversionPointer(int imod=0)=0; */
/* /\** */
/* \param imod module number */
/* \returns move flag of the module (1 encoder is added to the angle, 0 not) */
/* *\/ */
/* virtual int getMoveFlag(int imod)=0; */
/* /\** */
/* enables/disable the angular conversion */
/* \param i 1 sets, 0 unsets,, -1 gets */
/* \returns actual angular conversion flag */
/* *\/ */
/* virtual int setAngularCorrectionMask(int i=-1)=0; */
/**
converts channel number to angle
\param pos encoder position
\returns array of angles corresponding to the channels
*/
double* convertAngles(double pos);
/**
converts channel number to angle for the current encoder position
\returns array of angles corresponding to the channels
*/
double *convertAngles(){return convertAngles(currentPosition);};
/**
returns number of positions
*/
int getNumberOfPositions() {return *numberOfPositions;};
int getChansPerMods(int imod) { return chansPerMod[imod];};
int getTotalNumberofChannels(){ return totalNumberOfChannels;};
void incrementPositionIndex() {currentPositionIndex++;};
void registerCallBackGetChansPerMod(int (*func)(int, void *),void *arg){ getChansPerModule=func;pChpermod=arg;};
void registerCallBackGetNumberofChannel(int (*func)(int, void *),void *arg){ getNumberofChannel=func;pNumberofChannel=arg;};
protected:
private:
int (*getChansPerModule)(int, void*);
int (*getNumberofChannel)(int, void*);
void *pChpermod,*angPtr,*pNumberofChannel;
/** merging bins */
double *mergingBins;
/** merging counts */
double *mergingCounts;
/** merging errors */
double *mergingErrors;
/** merging multiplicity */
int *mergingMultiplicity;
double (*angle)(double, double, double, double, double, double, double, int);
int totalNumberOfChannels;
int moveFlag[MAXMODS*MAXDET];
/** pointer to number of positions for the acquisition*/
int *numberOfPositions;
/** pointer to the detector positions for the acquisition*/
double *detPositions;
/** pointer to angular bin size*/
double *binSize;
int *correctionMask;
int chansPerMod[MAXMODS*MAXDET];
int nMod;
angleConversionConstant angConvs[MAXMODS*MAXDET];
int directions[MAXMODS*MAXDET];
/** pointer to beamline fine offset*/
double *fineOffset;
/** pointer to beamline global offset*/
double *globalOffset;
/** pointer to beamline angular direction*/
int *angDirection;
/** pointer to detector move flag (1 moves with encoder, 0 not)*/
// int *moveFlag;
/** number of bins for angular conversion (360./binsize)*/
int nBins;
/**
current position of the detector
*/
double currentPosition;
/**
current position index of the detector
*/
int currentPositionIndex;
/**
returns current position index
*/
int getCurrentPositionIndex() {return currentPositionIndex;};
void registerAngleFunctionCallback(double( *fun)(double, double, double, double, double, double, double, int),void* arg) {angle = fun; angPtr=arg;};
};
#endif

View File

@ -1,650 +0,0 @@
#include "FileIO_Standalone.h"
string fileIO::createFileName(char *filepath, char *filename, int aMask, double sv0, int prec0, double 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(int aMask, double sv0, int prec0, double sv1, int prec1, int pindex, int npos) {
currentFileName=createFileName(filePath, \
fileName, \
aMask, \
sv0, \
prec0, \
sv1, \
prec1, \
pindex, \
npos, \
*fileIndex \
);
return currentFileName;
}
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, double &sv0, double &sv1) {
int i;
double 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, double *data, double *err, double *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, double *data, double *err, double *ang, char dataformat, int offset){
int idata;
if (data==NULL)
return FAIL;
// args|=0x10; // one line per channel!
cout << "Static file " << endl;
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, double *data, double *err, double *ang, char dataformat){
ifstream infile;
int iline=0;//ichan,
//int interrupt=0;
//double 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, double *data, double *err, double *ang, char dataformat, int offset){
int ichan,iline=0;
int interrupt=0;
double 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, double *data, double *err, double *ang, char dataformat, int nch){
if (nch==-1)
nch=getTotalNumberofChannels();//getTotalNumberOfChannels();
return writeDataFile(fname, nch, data, err, ang, dataformat);
}
int fileIO::writeDataFile(ofstream &outfile, double *data, double *err, double *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, double *data, double *err, double *ang, char dataformat) {
return readDataFile(getTotalNumberofChannels(), fname, data, err, ang, dataformat);
}
int fileIO::readDataFile(ifstream &infile, double *data, double *err, double *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);
};

View File

@ -1,410 +0,0 @@
#ifndef FILEIOSTD_H
#define FILEIOSTD_H
//#include "slsDetectorBase.h"
#include "sls_detector_defs.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
#include <string>
#include <sstream>
#include <queue>
#include <math.h>
;
/**
@short class handling the data file I/O flags
*/
class fileIO : public virtual slsDetectorDefs {//public virtual slsDetectorBase {
public:
/** default constructor */
fileIO(){};
/** virtual destructor */
virtual ~fileIO(){};
int setTotalNumberofChannels(int i){ if (i>=0) {totalNumberofChannels=i; return totalNumberofChannels;} else return -1;};
int getTotalNumberofChannels(){ return totalNumberofChannels; };
/**
sets the default output files path
\param s file path
\return actual file path
*/
string setFilePath(string s) {sprintf(filePath, s.c_str()); return string(filePath);};
/**
sets the default output files root name
\param s file name to be set
\returns actual file name
*/
string setFileName(string s) {sprintf(fileName, s.c_str()); return string(fileName);};
/**
sets the default output file index
\param i start file index to be set
\returns actual file index
*/
int setFileIndex(int i) {*fileIndex=i; return *fileIndex;};
/**
\returns the output files path
*/
string getFilePath() {return string(filePath);};
/**
\returns the output files root name
*/
string getFileName() {return string(fileName);};
/**
\returns the 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 and the two level of scan varaibles with the specified precision
Filenames will be of the form: filepath/filename(_Sy_sw_px)_i
where y is the scan0 variable, W is the scan 1 variable, 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, double sv0, int prec0, double sv1, int prec1, int pindex, int npos, int findex);
string createFileName(int aMask, double sv0, int prec0, double sv1, int prec1, int pindex, int npos);
/** static function that returns the file index from the file name
\param fname file name
\returns file index
*/
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, double &sv0, double &sv1);
/**
writes a data file
\param fname 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' double (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, double *data, double *err=NULL, double *ang=NULL, char dataformat='f', int nch=-1);
/**
writes a data file
\paramoutfile output file stream
\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' double (default)
\param nch number of channels to be written to file. if -1 defaults to the number of installed channels of the detector
\param offset start channel number
\returns OK or FAIL if it could not write the file or data=NULL
*/
int writeDataFile(ofstream &outfile, double *data, double *err=NULL, double *ang=NULL, char dataformat='f', int nch=-1, int offset=0);
/**
writes a data file
\param fname 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
*/
virtual int writeDataFile(string fname, int *data);
/**
writes a data file
\param outfile output file stream
\param data array of data values
\param offset start channel number
\returns OK or FAIL if it could not write the file or data=NULL
*/
int writeDataFile(ofstream &outfile, int *data, int offset=0);
/**
writes a data file of short ints
\param fname 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
*/
virtual int writeDataFile(string fname, short int *data);
/**
writes a data file of short ints
\param outfile output file stream
\param data array of data values
\param offset start channel number
\returns OK or FAIL if it could not write the file or data=NULL
*/
int writeDataFile(ofstream &outfile, short int *data, int offset=0);
/**
reads a data file
\param fname 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' double (default)
\returns OK or FAIL if it could not read the file or data=NULL
*/
virtual int readDataFile(string fname, double *data, double *err=NULL, double *ang=NULL, char dataformat='f');
/**
reads a data file
\param ifstream input file stream
\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 offset start channel number to be expected
\returns OK or FAIL if it could not read the file or data=NULL
*/
int readDataFile(ifstream& infile, double *data, double *err=NULL, double *ang=NULL, char dataformat='f', int offset=0);
/**
reads a raw data file
\param fname 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); /**
reads a raw data file
\param infile input file stream
\param data array of data values
\param offset first channel number to be expected
\returns OK or FAIL if it could not read the file or data=NULL
*/
int readDataFile(ifstream &infile, int *data, int offset=0);
/**
reads a short int raw data file
\param fname 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);
/**
reads a short int raw data file
\param infile input file stream
\param data array of data values
\param offset first channel number to be expected
\returns OK or FAIL if it could not read the file or data=NULL
*/
int readDataFile(ifstream &infile, short int *data, int offset=0);
/**
writes a data file
\param fname of the file to be written
\param nch number of channels 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' double (default)
\returns OK or FAIL if it could not write the file or data=NULL
*/
static int writeDataFile(string fname, int nch, double *data, double *err=NULL, double *ang=NULL, char dataformat='f');
/**
writes a data file
\param outfile output file stream
\param nch number of channels 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' double (default)
\param offset start channel number
\returns OK or FAIL if it could not write the file or data=NULL
*/
static int writeDataFile(ofstream &outfile, int nch, double *data, double *err=NULL, double *ang=NULL, char dataformat='f', int offset=0);
/**
writes a raw data file
\param fname of the file to be written
\param nch number of channels
\param data array of data values
\returns OK or FAIL if it could not write the file or data=NULL
*/
static int writeDataFile(string fname,int nch, int *data);
/**
writes a raw data file
\param outfile output file stream
\param nch number of channels
\param data array of data values
\param offset start channel number
\returns OK or FAIL if it could not write the file or data=NULL
*/
static int writeDataFile(ofstream &outfile,int nch, int *data, int offset=0);
/**
writes a short int raw data file
\param fname of the file to be written
\param nch number of channels
\param data array of data values
\returns OK or FAIL if it could not write the file or data=NULL
*/
static int writeDataFile(string fname,int nch, short int *data);
/**
writes a short int raw data file
\param outfile output file stream
\param nch number of channels
\param data array of data values
\param offset start channel number
\returns OK or FAIL if it could not write the file or data=NULL
*/
static int writeDataFile(ofstream &outfile,int nch, short int *data, int offset=0);
/**
reads a data file
\param nch number of channels
\param fname 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' double (default)
\returns number of channels read or -1 if it could not read the file or data=NULL
*/
static int readDataFile(int nch, string fname, double *data, double *err=NULL, double *ang=NULL, char dataformat='f');
/**
reads a data file
\param nch number of channels
\param infile input file stream
\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' double (default)
\param offset start channel number
\returns number of channels read or -1 if it could not read the file or data=NULL
*/
static int readDataFile(int nch, ifstream &infile, double *data, double *err=NULL, double *ang=NULL, char dataformat='f', int offset=0);
/**
reads a raw data file
\param fname of the file to be read
\param data array of data values
\param nch number of channels
\returns OK or FAIL if it could not read the file or data=NULL
*/
static int readDataFile(string fname, int *data, int nch);
/**
reads a raw data file
\param infile input file stream
\param data array of data values
\param nch number of channels
\param offset start channel value
\returns OK or FAIL if it could not read the file or data=NULL
*/
static int readDataFile(ifstream &infile, int *data, int nch, int offset);
/**
reads a short int rawdata file
\param name of the file to be read
\param data array of data values
\param nch number of channels
\returns OK or FAIL if it could not read the file or data=NULL
*/
static int readDataFile(string fname, short int *data, int nch);
/**
reads a short int raw data file
\param infile input file stream
\param data array of data values
\param nch number of channels
\param offset start channel value
\returns OK or FAIL if it could not read the file or data=NULL
*/
static int readDataFile(ifstream &infile, short int *data, int nch, int offset);
void incrementFileIndex() { (*fileIndex)++;};
string getCurrentFileName(){return currentFileName;};
protected:
string currentFileName;
int mask_action;
double currentscan_variable[1];
int scan_precision[1];
int currentpostion_i;
int noposition;
/** output directory */
char *filePath;
/** file root name */
char *fileName;
/** file index */
int *fileIndex;
private:
int totalNumberofChannels;
};
#endif

View File

@ -1,87 +0,0 @@
#---------------------------------------------------
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

View File

@ -1,575 +0,0 @@
# -*- 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

View File

@ -1,691 +0,0 @@
//
// 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((double) 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((double) 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((double) G__double(libp->para[0]), (double) 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(*(double*) G__doubleref(&libp->para[0]), *(double*) G__doubleref(&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;

View File

@ -1,42 +0,0 @@
/********************************************************************
* 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 */

View File

@ -1,153 +0,0 @@
#ifndef ANGCALLOGCLASS_H
#define ANGCALLOGCLASS_H
#include <iostream>
#include <fstream>
#ifdef __CINT__
#define MYROOT
#endif
#ifndef MYROOT
#include "slsDetectorCommand.h"
#include "slsDetectorUtils.h"
#include "sls_detector_defs.h"
#endif
;
class angCalLogClass {
public:
#ifndef MYROOT
angCalLogClass(slsDetectorUtils *det){ createVars();
char cmd[1000]; \
char *argv[2]; \
argv[0]=cmd; \
sprintf(cmd,"_%d.angcal",det->getFileIndex()); \
outfile.open( std::string(det->getFilePath()+ std::string("/")+det->getFileName()+ std::string(cmd)).c_str()); \
outfile.precision(8);
myDet=new slsDetectorCommand(det); \
if (outfile.is_open()) { \
for (int iv=0; iv<nvars; iv++) { \
strcpy(cmd,vars[iv]); \
outfile << cmd << " "<< myDet->executeLine(1,argv,slsDetectorDefs::GET_ACTION) << endl; \
}; \
}; \
};
~angCalLogClass(){delete myDet; outfile.close();};
#else
angCalLogClass() { createVars(); };
~angCalLogClass(){};
#endif
int addStep(double pos, std::string fname) {std::cout.precision(5); outfile << pos << " " << fname << endl; return 0;};
//
int readHeader(std::ifstream &infile, int &maxmod, int &nmod, int &chanspermod, char *angconvfile, double &globaloff, double &fineoff, int &angdir, char *ffdir, char *fffile, char *badfile ) { \
nmod=0; chanspermod=0; globaloff=0; fineoff=0; angdir=1; \
strcpy(angconvfile,"none"); strcpy(ffdir,"none"); strcpy(fffile,"none"); strcpy(badfile,"none"); \
char line[1000], myvar[100], myarg[100]; \
float v; \
for (int iv=0; iv<nvars; iv++) { \
infile.getline(line,1000); \
sscanf(line,"%s %s", myvar, myarg); \
if ( std::string(myvar)!= std::string(vars[iv]))
cout << "Found variable " << myvar << " instead of " << vars[iv] << endl;
else
switch (iv) { \
case 0: \
if ( std::string(myarg).find("Mythen")!= std::string::npos) \
chanspermod=1280; \
else if ( std::string(myarg).find("Gotthard")!= std::string::npos) \
chanspermod=1280; \
else \
chanspermod=65535; \
break; \
case 1: \
sscanf(myarg,"%d", &maxmod); \
break; \
case 2: \
sscanf(myarg,"%d", &nmod); \
break; \
case 3: \
strcpy(angconvfile,myarg); \
break; \
case 4: \
sscanf(myarg,"%f", &v); \
globaloff=v; \
break; \
case 5: \
sscanf(myarg,"%f", &v); \
fineoff=v; \
break; \
case 6: \
sscanf(myarg,"%d", &angdir); \
break; \
case 7: \
strcpy(ffdir,myarg); \
break; \
case 8: \
strcpy(fffile,myarg); \
break; \
case 9: \
strcpy(badfile,myarg); \
break; \
default: \
; \
}; \
if (infile.bad() || infile.eof()) { cout << "bad file "<< iv << endl; return -1;} \
} \
return 0; \
};
int getStep(std::ifstream &infile, double &threshold, char *datafname){ \
char line[1000]; \
float v;
infile.getline(line,1000); \
if (sscanf(line,"%g %s",&v, datafname)<2) return -1; \
printf("scanned %s to %f %s",line,v,datafname);
threshold=v; \
if (infile.bad() || infile.eof()) \
return -1; \
return 0; \
};
private:
void createVars(){ \
strcpy(vars[0],"type"); \
strcpy(vars[1],"maxmod"); \
strcpy(vars[2],"nmod"); \
strcpy(vars[3],"angconv"); \
strcpy(vars[4],"globaloff"); \
strcpy(vars[5],"fineoff"); \
strcpy(vars[6],"angdir"); \
strcpy(vars[7],"ffdir"); \
strcpy(vars[8],"flatfield"); \
strcpy(vars[9],"badchannels"); \
nvars=10; \
};
#ifndef MYROOT
slsDetectorCommand *myDet;
#endif
std::ofstream outfile;
char vars[100][100];
int nvars;
};
#endif

View File

@ -1,42 +0,0 @@
#ifndef ANGLE_CONVERSION_CONSTANT_H
#define ANGLE_CONVERSION_CONSTANT_H
class angleConversionConstant {
public:
angleConversionConstant(){};
angleConversionConstant(double c, double r, double o, double t){center=c; r_conversion=r; offset=o; tilt=t;};
//typedef struct {
double center; /**< center of the module (channel at which the radius is perpendicular to the module surface) */
double ecenter; /**< error in the center determination */
double r_conversion; /**< detector pixel size (or strip pitch) divided by the diffractometer radius */
double er_conversion; /**< error in the r_conversion determination */
double offset; /**< the module offset i.e. the position of channel 0 with respect to the diffractometer 0 */
double eoffset; /**< error in the offset determination */
double tilt; /**< ossible tilt in the orthogonal direction (unused)*/
double etilt; /**< error in the tilt determination */
//} angleConversionConstant;
double getCenter(){return center;};
double getConversion(){return r_conversion;};
double getOffset(){return offset;};
double getTilt(){return tilt;};
void setAngConvConstant(angleConversionConstant *acc) {\
center=acc->center; \
ecenter=acc->ecenter; \
r_conversion=acc->r_conversion; \
er_conversion=acc->er_conversion; \
offset=acc->offset; \
eoffset=acc->eoffset; \
tilt=acc->tilt; \
etilt=acc->etilt; \
};
};
#endif

View File

@ -1,471 +0,0 @@
#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;
double 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]=(double) i;
// y[npoints]=(double) 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, double startangle, double stopangle) {
// int i,nfit,mod,npoints,nnpoints;
// double x[MAXINMODULE],y[MAXINMODULE],ex[MAXINMODULE],ey[MAXINMODULE],min,max;
// double 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);
// }

View File

@ -1,154 +0,0 @@
#ifndef ANGULARCALIBRATION_H
#define ANGULARCALIBRATION_H
//#include "usersFunctions.h"
#ifdef ROOT
#include <TROOT.h>
#include <TF1.h>
class TH1;
#endif
//double angle(int ichan, double encoder, double totalOffset, double conv_r, double center, double offset, double tilt, int direction)
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
*/
double setEncoder(double f) {encoder=f; return encoder;};
/**
gets the encoder position
\returns encoder position
*/
double getEncoder() {return encoder;};
/**
sets the totalOffset of the detector
\param f total offset to be set
\returns current total offset
*/
double setTotalOffset(double f) {totalOffset=f; return totalOffset;};
/**
gets the encoder position
\returns encoder position
*/
double 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(double mi, double 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(double &mi, double &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
double encoder; /**< position of the detector encoder */
double totalOffset; /**< total offset of the detector */
double ang_min; /**< minimum of the angular range for peak fitting*/
double ang_max; /**< maximum of the angular range for peak fitting */
int nmod;
int nchmod;
angleConversionConstant angConv[MAXMOD*MAXDET];
/* void fitangle(char fname[80],char extension[10], int start, int stop, double startangle, double stopangle); //fits all datasets and extracts the constants */
/* int fitpeak(char fname[80],char extension[10], int nr, double minang, double maxang); // fits a peak from a pattern using nominal calibration constant */
};
#endif

View File

@ -1,308 +0,0 @@
#include "angularConversion.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <math.h>
#include <cstring>
using namespace std;
angularConversion::angularConversion(): angularConversionStatic(), currentPosition(0),
currentPositionIndex(0)
{
//angleFunctionPointer=0;
// registerAngleFunctionCallback(&defaultAngleFunction);
}
angularConversion::~angularConversion(){
}
double* angularConversion::convertAngles(double pos) {
int nmod=getNMods();
int *chansPerMod=new int[nmod];
angleConversionConstant **angOff=new angleConversionConstant*[nmod];
int *mF=new int[nmod];
double fo=*fineOffset;
double go=*globalOffset;
int angdir=*angDirection;
for (int im=0; im<nmod; im++) {
angOff[im]=getAngularConversionPointer(im);
mF[im]=getMoveFlag(im);
chansPerMod[im]=getChansPerMod(im);
}
return angularConversionStatic::convertAngles(pos, getTotalNumberOfChannels(), chansPerMod, angOff,mF, fo, go, angdir);
}
int angularConversion::deleteMerging() {
if (mergingBins)
delete [] mergingBins;
if (mergingCounts)
delete [] mergingCounts;
if (mergingErrors)
delete [] mergingErrors;
return 0;
}
int angularConversion::resetMerging() {
getAngularConversionParameter(BIN_SIZE);
cout << "reset merging * " << endl;
mergingBins=new double[nBins];
mergingCounts=new double[nBins];
mergingErrors=new double[nBins];
mergingMultiplicity=new int[nBins];
return resetMerging(mergingBins, mergingCounts, mergingErrors, mergingMultiplicity);
}
int angularConversion::resetMerging(double *mp, double *mv, double *me, int *mm) {
cout << "reset merging " << endl;
getAngularConversionParameter(BIN_SIZE);
if (nBins)
return angularConversionStatic::resetMerging(mp, mv, me, mm,nBins);
else
return FAIL;
}
int angularConversion::finalizeMerging() {
cout << "finalize merging *" << endl;
int np=finalizeMerging(mergingBins, mergingCounts, mergingErrors, mergingMultiplicity);
if (mergingMultiplicity)
delete [] mergingMultiplicity;
return np;
}
int angularConversion::finalizeMerging(double *mp, double *mv, double *me, int *mm) {
if (nBins)
return angularConversionStatic::finalizeMerging(mp, mv, me, mm, nBins);
else
return FAIL;
}
int angularConversion::addToMerging(double *p1, double *v1, double *e1, int *badChanMask ) {
return addToMerging(p1,v1,e1,mergingBins,mergingCounts, mergingErrors, mergingMultiplicity, badChanMask);
}
int angularConversion::addToMerging(double *p1, double *v1, double *e1, double *mp, double *mv,double *me, int *mm, int *badChanMask ) {
int del=0;
if (getAngularConversionParameter(BIN_SIZE)==0){
cout << "no bin size " << endl;
return FAIL;
}
if (nBins==0) {
cout << "no bins " << endl;
return FAIL;
}
if (p1==NULL) {
del=1;
p1=convertAngles();
}
int ret=angularConversionStatic::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
*/
double angularConversion::setAngularConversionParameter(angleConversionParameter c, double 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=(int)(360./(*binSize))+1;
}
return *binSize;
case MOVE_FLAG:
if (moveFlag) {
if (v>0)
*moveFlag=1;
else if (v==0)
*moveFlag=0;
return *moveFlag;
}
return -1;
case SAMPLE_X:
if (sampleDisplacement) {
sampleDisplacement[X]=v;
return sampleDisplacement[X];
}
return 0;
case SAMPLE_Y:
if (sampleDisplacement) {
sampleDisplacement[Y]=v;
return sampleDisplacement[Y];
}
return 0;
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
*/
double angularConversion::getAngularConversionParameter(angleConversionParameter c) {
switch (c) {
case ANGULAR_DIRECTION:
return *angDirection;
case GLOBAL_OFFSET:
return *globalOffset;
case FINE_OFFSET:
return *fineOffset;
case BIN_SIZE:
if (*binSize>0)
nBins=(int)(360./(*binSize))+1;
else
nBins=0;
return *binSize;
case MOVE_FLAG:
if (moveFlag)
return *moveFlag;
else
return -1;
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, double *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(double *pos){
if (pos) {
for (int ip=0; ip<(*numberOfPositions); ip++)
pos[ip]=detPositions[ip];
}
return *numberOfPositions;
}

View File

@ -1,406 +0,0 @@
#ifndef ANGULARCONVERSION_H
#define ANGULARCONVERSION_H
#ifdef __CINT
#define MYROOT
#endif
#ifndef MYROOT
#include "slsDetectorBase.h"
#else
#include "sls_detector_defs.h"
#endif
#include <string>
#include <fstream>
#include "angularConversionStatic.h"
//double angle(int ichan, double encoder, double totalOffset, double conv_r, double center, double offset, double tilt, int direction)
//
/**
@short Angular conversion constants needed for a detector module
*/
/**
@short methods to set/unset the angular conversion and merge the data
class containing the methods to set/unset the angular conversion and merge the data
The angular conversion itself is defined by the angle() function defined in usersFunctions.cpp
*/
class angularConversion : public virtual slsDetectorBase, public angularConversionStatic
{
public:
/** default constructor */
angularConversion();
/** virtual destructor */
virtual ~angularConversion();
//virtual int readAngularConversion(string fname)=0;
using angularConversionStatic::writeAngularConversion;
using angularConversionStatic::readAngularConversion;
/**
pure virtual function
\param file name to be written (nmod and array of angular conversion constants default to the ones ot the slsDetector
*/
virtual int writeAngularConversion(std::string fname)=0;
/**
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
*/
int resetMerging(double *mp, double *mv,double *me, int *mm);
/**
creates the arrays for merging the data and sets them to 0.
*/
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 badChanMask badchannelmask (if NULL does not correct for bad channels)
\returns OK or FAIL
*/
int addToMerging(double *p1, double *v1, double *e1, double *mp, double *mv,double *me, int *mm, int *badChanMask);
/**
merge dataset
\param p1 angular positions of dataset
\param v1 data
\param e1 errors
\param badChanMask badchannelmask (if NULL does not correct for bad channels)
\returns OK or FAIL
*/
int addToMerging(double *p1, double *v1, double *e1,int *badChanMask);
/**
calculates the "final" positions, data value and errors for the merged 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)
*/
int finalizeMerging(double *mp, double *mv,double *me, int *mm);
/**
calculates the "final" positions, data value and errors for the merged data
\returns FAIL or the number of non empty bins (i.e. points belonging to the pattern)
*/
int finalizeMerging();
/**
set detector global offset
\param f global offset to be set
\returns actual global offset
*/
double setGlobalOffset(double f){return setAngularConversionParameter(GLOBAL_OFFSET,f);};
/**
set detector fine offset
\param f global fine to be set
\returns actual fine offset
*/
double setFineOffset(double f){return setAngularConversionParameter(FINE_OFFSET,f);};
/**
get detector fine offset
\returns actual fine offset
*/
double getFineOffset(){return getAngularConversionParameter(FINE_OFFSET);};
/**
get detector global offset
\returns actual global offset
*/
double getGlobalOffset(){return getAngularConversionParameter(GLOBAL_OFFSET);};
/**
set detector bin size
\param bs bin size to be set
\returns actual bin size
*/
double setBinSize(double bs){if (bs>0) nBins=(int)(360./bs); return setAngularConversionParameter(BIN_SIZE,bs);};
/**
get detector bin size
\returns detector bin size used for merging (approx angular resolution)
*/
double getBinSize() {return getAngularConversionParameter(BIN_SIZE);};
/**
get angular direction
\returns actual angular direction (1 is channel number increasing with angle, -1 decreasing)
*/
int getAngularDirection(){return (int)getAngularConversionParameter(ANGULAR_DIRECTION);};
/**
set angular direction
\param d angular direction to be set (1 is channel number increasing with angle, -1 decreasing)
\returns actual angular direction (1 is channel number increasing with angle, -1 decreasing)
*/
int setAngularDirection(int d){return (int)setAngularConversionParameter(ANGULAR_DIRECTION, (double)d);};
/**
\returns number of angular bins in the merging (360./binsize)
*/
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;
/**
set angular conversion parameter
\param c parameter type (globaloffset, fineoffset, binsize, angular direction, move flag)
\param v value to be set
\returns actual value
*/
double setAngularConversionParameter(angleConversionParameter c, double v);
/**
get angular conversion parameter
\param c parameter type (globaloffset, fineoffset, binsize, angular direction, move flag)
\returns actual value
*/
double getAngularConversionParameter(angleConversionParameter c);
/**
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, double *pos);
/**
get positions for the acquisition
\param pos array which will contain the encoder positions
\returns number of positions
*/
virtual int getPositions(double *pos=NULL);
/**
deletes the array of merged data
\returns OK
*/
int deleteMerging();
/**
\returns pointer to the array o merged positions
*/
double *getMergedPositions(){return mergingBins;};
/**
\returns pointer to the array of merged counts
*/
double *getMergedCounts(){return mergingCounts;};
/**
\returns pointer to the array of merged errors
*/
double *getMergedErrors(){return mergingErrors;};
/**
sets the angular conversion file
\param fname file to read
\returns angular conversion flag
*/
int setAngularConversionFile(std::string fname);
/**
returns the angular conversion file
*/
std::string getAngularConversionFile(){if (setAngularCorrectionMask()) return std::string(angConvFile); else return std::string("none");};
/**
reads teh angular conversion file for the (multi)detector and writes it to shared memory
*/
virtual int readAngularConversionFile(std::string fname="")=0;
/**
\returns number of modules of the (multi)detector
*/
virtual int getNMods()=0;
/**
returns number of channels in the module
\param imod module number
\returns number of channels in the module
*/
virtual int getChansPerMod(int imod=0)=0;
/**
get the angular conversion contant of one modules
\param imod module number
\returns pointer to the angular conversion constant
*/
virtual angleConversionConstant *getAngularConversionPointer(int imod=0)=0;
/**
converts channel number to angle
\param pos encoder position
\returns array of angles corresponding to the channels
*/
double* convertAngles(double pos);
/**
converts channel number to angle for the current encoder position
\returns array of angles corresponding to the channels
*/
double *convertAngles(){return convertAngles(currentPosition);};
/**
\param imod module number
\returns move flag of the module (1 encoder is added to the angle, 0 not)
Shold be module dependent!
*/
virtual int getMoveFlag(int imod)=0;
/**
returns number of positions
*/
int getNumberOfPositions() {return *numberOfPositions;};
protected:
/** pointer to number of positions for the acquisition*/
int *numberOfPositions;
/** pointer to the detector positions for the acquisition*/
double *detPositions;
/** pointer to angular conversion file name*/
char *angConvFile;
/** pointer to angular bin size*/
double *binSize;
/** pointer to beamlien fine offset*/
double *fineOffset;
/** pointer to beamlien global offset*/
double *globalOffset;
/** pointer to beamlien angular direction*/
int *angDirection;
/** pointer to detector move flag (1 moves with encoder, 0 not)*/
int *moveFlag;
/** number of bins for angular conversion (360./binsize)*/
int nBins;
double *sampleDisplacement;
/**
current position of the detector
*/
double currentPosition;
/**
current position index of the detector
*/
int currentPositionIndex;
/**
enables/disable the angular conversion
\param i 1 sets, 0 unsets,, -1 gets
\returns actual angular conversion flag
*/
virtual int setAngularCorrectionMask(int i=-1)=0;
/**
returns current position index
*/
int getCurrentPositionIndex() {return currentPositionIndex;};
void incrementPositionIndex() {currentPositionIndex++;};
void resetPositionIndex() {currentPositionIndex=0;};
private:
// int nChans;
// int nMods;
// int chansPerMod;
// int moveFlag;
/** merging bins */
double *mergingBins;
/** merging counts */
double *mergingCounts;
/** merging errors */
double *mergingErrors;
/** merging multiplicity */
int *mergingMultiplicity;
};
#endif

View File

@ -1,461 +0,0 @@
#include "angularConversionStatic.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <math.h>
#include "angleConversionConstant.h"
#include "sls_detector_defs.h"
#include "angleFunction.h"
using namespace std;
angularConversionStatic::angularConversionStatic()
{
//angleFunctionPointer=0;
registerAngleFunctionCallback(&defaultAngleFunction);
}
angularConversionStatic::~angularConversionStatic(){
}
double* angularConversionStatic::convertAngles(double pos, int nch, int *chansPerMod, angleConversionConstant **angOff, int *mF, double fo, double go, int angdir) {
// cout << "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP convert angles " << endl;
int imod=0;
double *ang=new double[nch];
double enc=pos;
angleConversionConstant *p=NULL;
int ch0=0;
int chlast=chansPerMod[0]-1;
int nchmod=chansPerMod[0];
p=angOff[imod];
if (mF[imod]==0)
enc=0;
else
enc=pos;
for (int ip=0; ip<nch; ip++) {
#ifdef VERBOSE
cout << "ip " << ip << " ch0 " << ch0 << " chlast " << chlast << " imod " << imod << endl;
#endif
if (ip>chlast) {
imod++;
p=angOff[imod];
if (mF[imod]==0)
enc=0;
else
enc=pos;
#ifdef VERBOSE
if (p)
cout << enc << endl << fo+go << endl << p->r_conversion << endl << p->center << endl << p->offset << endl << p->tilt << angdir << endl;
else
cout << "no ang conv " << endl;
#endif
ch0=chlast+1;
nchmod=chansPerMod[imod];
if (nchmod>0)
chlast=ch0+nchmod-1;
}
if (p)
ang[ip]=angle(ip-ch0, \
enc, \
fo+go, \
p->r_conversion, \
p->center, \
p->offset, \
p->tilt, \
angdir );
#ifdef VERBOSE
cout << "ip " << ip << " ch0 " << ch0 << " chlast " << chlast << " imod " << imod << endl;
#endif
}
return ang;
}
double angularConversionStatic::convertAngle(double pos, int ich, angleConversionConstant *p, int mF, double fo, double go, int angdir) {
// cout << "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP convert angle " << endl;
// if (p)
// cout << pos << endl << fo+go << endl << p->r_conversion << endl << p->center << endl << p->offset << endl << mF << endl << angdir << endl;
// else
// cout << "no ang conv " << endl;
double enc=0, trans=0;
double ang;
switch (mF) {
case 0:
enc=0;
trans=0;
break;
case 1:
enc=pos;
trans=0;
break;
case -1:
enc=-pos;
trans=0;
break;
case 2:
enc=0;
trans=pos;
break;
case -2:
enc=0;
trans=-pos;
break;
default:
enc=0;
trans=0;
}
if (p)
ang=angle(ich, \
enc, \
fo+go, \
p->r_conversion, \
p->center, \
p->offset, \
trans, \
angdir );
// cout << ich << " " << ang << endl << endl;
return ang;
}
double angularConversionStatic::convertAngle(double pos, int ich, int *chansPerMod, angleConversionConstant **angOff, int *mF, double fo, double go, int angdir) {
// cout << "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP convert angles xx" << endl;
int imod=0;
double ang;
// double enc=0, trans=0;
angleConversionConstant *p=NULL;
int ch0=0;
int chlast=chansPerMod[0]-1;
int nchmod=chansPerMod[0];
while (ich>chlast) {
imod++;
ch0=chlast+1;
nchmod=chansPerMod[imod];
chlast=ch0+nchmod-1;
}
p=angOff[imod];
ang=convertAngle(pos, ich-ch0, p, mF[imod], fo, go, angdir);
return ang;
}
//static!
int angularConversionStatic::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 angularConversionStatic::readAngularConversion( ifstream& infile, int nmod, angleConversionConstant *angOff) {
string str;
int mod;
double center, ecenter, pitch, epitch;
double r_conv, er_conv;
double off, eoff;
string ss;
int interrupt=0;
int nm=0;
int newangconv=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;
if (ss==string("center"))
newangconv=0;
else
newangconv=1;
ssstr >> ss >> ecenter;
if (newangconv) {
ssstr >> ss >> pitch;
ssstr >> ss >> epitch;
}
ssstr >> ss >> r_conv;
ssstr >> ss >> er_conv;
ssstr >> ss >> off;
ssstr >> ss >> eoff;
#ifdef VERBOSE
cout << nm << " " << nmod << endl;
#endif
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;
if (newangconv!=0) {
// } else {
angOff[nm].tilt=pitch;
angOff[nm].etilt=epitch;
}
// cout << angOff[nm].center << " " <<
// angOff[nm].r_conversion << " " <<
// angOff[nm].offset << endl;
} else
break;
#ifdef VERBOSE
cout << nm<<" " << angOff[nm].offset << endl;
#endif
nm++;
if (nm>=nmod)
break;
}
return nm;
}
//static
int angularConversionStatic:: 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 angularConversionStatic:: 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 angularConversionStatic::resetMerging(double *mp, double *mv, double *me, int *mm, int nb) {
// cout << "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP reset merging " << endl;
#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 slsDetectorDefs::OK;
}
//static
int angularConversionStatic::finalizeMerging(double *mp, double *mv, double *me, int *mm,int nb) {
// cout << "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP finalize merging " << endl;
int np=0;
for (int ibin=0; ibin<nb; ibin++) {
if (mm[ibin]>0) {
#ifdef VERBOSE
cout << "finalize " << ibin << " "<< mm[ibin] << " " << mp[ibin]<< " " << mv[ibin] << " " << me[ibin] << endl;
#endif
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++;
}
}
// cout << endl ;
return np;
}
//static
int angularConversionStatic::addToMerging(double *p1, double *v1, double *e1, double *mp, double *mv,double *me, int *mm, int nchans, double binsize,int nbins, int *badChanMask ) {
// cout << "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP add to merging " << endl;
double binmi=-180.;
int ibin=0;
if (p1==NULL)
return 0;
if (v1==NULL)
return slsDetectorDefs::FAIL;
if (mp==NULL) //can be changed if we want to use a fixed bin algorithm!
return slsDetectorDefs::FAIL;
if (mv==NULL)
return slsDetectorDefs::FAIL;
if (me==NULL)
return slsDetectorDefs::FAIL;
if (mm==NULL)
return slsDetectorDefs::FAIL;
if (nchans==0)
return slsDetectorDefs::FAIL;
if (binsize<=0)
return slsDetectorDefs::FAIL;
if (nbins<=0)
return slsDetectorDefs::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]++;
// #ifdef VERBOSE
// cout << "add " << ibin << " "<< mm[ibin] << " " << mp[ibin]<< mv[ibin] << me[ibin] << endl;
// #endif
} else
return slsDetectorDefs::FAIL;
}
return slsDetectorDefs::OK;
}
int angularConversionStatic::addPointToMerging(double p1, double v1, double e1, double *mp, double *mv,double *me, int *mm, double binsize,int nbins) {
// cout << "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP add point to merging "<< v1 << " " << e1 << endl;
double binmi=-180.;
int ibin=0;
if (mp==NULL) //can be changed if we want to use a fixed bin algorithm!
return slsDetectorDefs::FAIL;
if (mv==NULL)
return slsDetectorDefs::FAIL;
if (me==NULL)
return slsDetectorDefs::FAIL;
if (mm==NULL)
return slsDetectorDefs::FAIL;
if (binsize<=0)
return slsDetectorDefs::FAIL;
if (nbins<=0)
return slsDetectorDefs::FAIL;
ibin=(int)((p1-binmi)/binsize);
if (ibin<nbins && ibin>=0) {
// cout << "before " << ibin << " " << mp[ibin] << " " << mv[ibin] << " " << me[ibin] << endl;
mp[ibin]+=p1;
mv[ibin]+=v1;
if (e1)
me[ibin]+=(e1*e1);
else
me[ibin]+=v1;
mm[ibin]++;
// cout << "after " << ibin << " " << mp[ibin] << " " << mv[ibin] << " " << me[ibin] << endl;
// #ifdef VERBOSE
// cout << "add " << ibin << " "<< mm[ibin] << " " << mp[ibin]<< mv[ibin] << me[ibin] << endl;
// #endif
} else {
cout << "Bin out of range! " << ibin << endl;
return slsDetectorDefs::FAIL;
}
return slsDetectorDefs::OK;
}

View File

@ -1,184 +0,0 @@
#ifndef ANGULARCONVERSIONSTATIC_H
#define ANGULARCONVERSIONSTATIC_H
#ifdef __CINT
#define MYROOT
#endif
#include <string>
#include <fstream>
//#include "angleConversionConstant.h"
//double angle(int ichan, double encoder, double totalOffset, double conv_r, double center, double offset, double tilt, int direction)
class angleConversionConstant;
;
/**
@short Angular conversion constants needed for a detector module
*/
/**
@short methods to set/unset the angular conversion and merge the data
class containing the methods to set/unset the angular conversion and merge the data
The angular conversion itself is defined by the angle() function defined in usersFunctions.cpp
*/
class angularConversionStatic
// : public virtual slsDetectorDefs
{
public:
/** default constructor */
angularConversionStatic();
/** virtual destructor */
virtual ~angularConversionStatic();
//virtual int readAngularConversion(std::string fname)=0;
/**
reads an angular conversion file
\param fname file to be read
\param nmod number of modules (maximum) to be read
\param angOff pointer to array of angleConversionConstants
\returns OK or FAIL
*/
static int readAngularConversion(std::string fname, int nmod, angleConversionConstant *angOff);
/**
reads an angular conversion file
\param ifstream input file stream to be read
\param nmod number of modules (maximum) to be read
\param angOff pointer to array of angleConversionConstants
\returns OK or FAIL
*/
static int readAngularConversion(std::ifstream& ifs, int nmod, angleConversionConstant *angOff);
/**
writes an angular conversion file
\param fname file to be written
\param nmod number of modules to be written
\param angOff pointer to array of angleConversionConstants
\returns OK or FAIL
*/
static int writeAngularConversion(std::string fname, int nmod, angleConversionConstant *angOff);
/**
writes an angular conversion file
\param ofstream output file stream
\param nmod number of modules to be written
\param angOff pointer to array of angleConversionConstants
\returns OK or FAIL
*/
static int writeAngularConversion(std::ofstream& ofs, int nmod, angleConversionConstant *angOff);
/**
sets the arrays of the merged data to 0. NB The array should be created with size nbins >= 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
\param nbins number of bins
\returns OK or FAIL
*/
static int resetMerging(double *mp, double *mv,double *me, int *mm, int nbins);
/**
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(double *p1, double *v1, double *e1, double *mp, double *mv,double *me, int *mm, int nchans, double binsize,int nb, int *badChanMask=NULL);
/**
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 addPointToMerging(double p1, double v1, double e1, double *mp, double *mv,double *me, int *mm, double binsize, int nb);
/**
calculates the "final" positions, data value and errors for the merged data
\param mp already merged postions
\param mv already merged data
\param me already merged errors (squared sum)
\param mm multiplicity of merged arrays
\param nb number of bins
\returns FAIL or the number of non empty bins (i.e. points belonging to the pattern)
*/
static int finalizeMerging(double *mp, double *mv,double *me, int *mm, int nb);
/**
converts channel number to angle
\param pos encoder position
\returns array of angles corresponding to the channels
*/
double* convertAngles(double pos, int nch, int *chansPerMod, angleConversionConstant **angOff, int *mF, double fo, double go, int angdir);
double convertAngle(double pos, int ich, int *chansPerMod, angleConversionConstant **angOff, int *mF, double fo, double go, int angdir);
double convertAngle(double pos, int ich, angleConversionConstant *angOff, int mF, double fo, double go, int angdir);
protected:
int registerAngleFunctionCallback(double (*fun)(double, double, double, double, double, double, double, int)) {angle = fun; return 0;};
double (*angle)(double, double, double, double, double, double, double, int);
// private:
};
#endif

View File

@ -1,69 +0,0 @@
#ifndef BAD_CHANNEL_CORRECTIONS_H
#define BAD_CHANNEL_CORRECTIONS_H
#include <iostream>
#include <fstream>
#include <sstream>
#include <string.h>
//
class badChannelCorrections{
public:
static int readBadChannelCorrectionFile(std::string fname, int &nbad, int *badlist){ std::ifstream infile(fname.c_str()); int nb=-1; if (infile.is_open()) {nb=readBadChannelCorrectionFile(infile,nbad,badlist); infile.close();}; return nb;};
static int readBadChannelCorrectionFile(std::ifstream &infile, int &nbad, int *badlist, int moff=0){ \
int interrupt=0; \
int ich; \
int chmin,chmax; \
std::string str; \
nbad=0; \
while (infile.good() and interrupt==0) { \
getline(infile,str); \
std::istringstream ssstr; \
ssstr.str(str); \
if (ssstr.bad() || ssstr.fail() || infile.eof()) { \
interrupt=1; \
break; \
} \
if (str.find('-')!=std::string::npos) { \
ssstr >> chmin ; \
ssstr.str(str.substr(str.find('-')+1,str.size())); \
ssstr >> chmax; \
for (ich=chmin; ich<=chmax; ich++) { \
badlist[nbad]=ich; \
nbad++; \
} \
} else { \
ssstr >> ich; \
badlist[nbad]=ich; \
nbad++; \
} \
} \
return nbad; };
static int setBadChannelCorrection(std::ifstream &infile, int &nbad, int *badlist, int moff){ \
int retval=readBadChannelCorrectionFile(infile,nbad,badlist); \
for (int ich=0; ich<nbad; ich++) { badlist[ich]=badlist[ich]+moff; }; \
return retval; \
};
protected:
char *badChanFile;
int *nBadChans;
int *badChansList;
int *nBadFF;
int *badFFList;
};
#endif

View File

@ -9,22 +9,19 @@
class detectorData {
public:
/** @short The constructor
\param val pointer to the data in double data type(valid only for MYTHEN)
\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 in x coordinate defaults to the number of detector channels (1D detector) or dimension in x (2D detector)
\param ny dimension in y (2D detector)
\param cval pointer to data in char* format (valid only for non MYTHEN detectors)
\param dbytes number of bytes of image pointed to by cval pointer (valid only for non MYTHEN detectors)
\param dr dynamic range or bits per pixel (valid only for non MYTHEN detectors)
\param cval pointer to data in char* format
\param dbytes number of bytes of image pointed to by cval pointer
\param dr dynamic range or bits per pixel
\param file_ind file index
*/
detectorData(double *val=NULL, double *err=NULL, double *ang=NULL, double f_ind=-1,
detectorData(double f_ind=-1,
const char *fname="", int np=-1, int ny=1, char *cval=NULL, int dbytes=0, int dr=0,
long long int file_ind=-1) :
values(val), errors(err), angles(ang), progressIndex(f_ind),
progressIndex(f_ind),
npoints(np), npy(ny), cvalues(cval), databytes(dbytes),
dynamicRange(dr), dgainvalues(NULL), fileIndex(file_ind) {
strcpy(fileName,fname);
@ -35,20 +32,16 @@ class detectorData {
deletes also the arrays pointing to data/errors/angles if not NULL
cvalues are deleted by caller
*/
~detectorData() {if (values) delete [] values; if (errors) delete [] errors;
if (angles) delete [] angles; if(dgainvalues) delete [] dgainvalues;};
~detectorData() {if(dgainvalues) delete [] dgainvalues;};
//private:
double *values; /**< @short pointer to the data as double array (MYTHEN only) */
double *errors; /**< @short pointer to the errors */
double *angles;/**< @short pointer to the angles (NULL if no angular conversion) */
double progressIndex;/**< @short file index */
char fileName[1000];/**< @short file name */
int npoints;/**< @short number of points */
int npy;/**< @short dimensions in y coordinate*/
char* cvalues; /**< @short pointer to the data as char arary (non MYTHEN detectors) */
char* cvalues; /**< @short pointer to the data as char arary */
int databytes; /**< @short number of bytes of data. Used with cvalues */
int dynamicRange; /**< @short dynamic range */
double* dgainvalues; /**< @short pointer to gain data as double array */
double* dgainvalues; /**< @short pointer to gain data as double array for Jungfrau only in show gain mode */
long long int fileIndex; /**< @short file index */
};

View File

@ -1,28 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li><a href="functions.html"><span>Class&nbsp;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&nbsp;
<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>

View File

@ -1,55 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li><a href="functions.html"><span>Class&nbsp;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 &amp;gain, Double_t &amp;off, Double_t &amp;egain, Double_t &amp;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 &amp;gain, Double_t &amp;off, Double_t &amp;egain, Double_t &amp;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 &amp;gain, Double_t &amp;off, Double_t &amp;egain, Double_t &amp;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 &amp;mi, Double_t &amp;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 &amp;gain, Double_t &amp;off, Double_t &amp;egain, Double_t &amp;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&nbsp;
<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>

View File

@ -1,38 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li><a href="functions.html"><span>Class&nbsp;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&nbsp;
<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>

View File

@ -1,428 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li><a href="functions.html"><span>Class&nbsp;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 &lt;<a class="el" href="energyCalibration_8h-source.html">energyCalibration.h</a>&gt;</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">&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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 &amp; 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&nbsp;</td>
<td class="paramname"> <em>s</em> = <code>-1</code> </td>
<td>&nbsp;)&nbsp;</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 *&nbsp;</td>
<td class="paramname"> <em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Double_t *&nbsp;</td>
<td class="paramname"> <em>par</em></td><td>&nbsp;</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 *&nbsp;</td>
<td class="paramname"> <em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Double_t *&nbsp;</td>
<td class="paramname"> <em>par</em></td><td>&nbsp;</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 *&nbsp;</td>
<td class="paramname"> <em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Double_t *&nbsp;</td>
<td class="paramname"> <em>par</em></td><td>&nbsp;</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 *&nbsp;</td>
<td class="paramname"> <em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Double_t *&nbsp;</td>
<td class="paramname"> <em>par</em></td><td>&nbsp;</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 *&nbsp;</td>
<td class="paramname"> <em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>n</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>k</em></td><td>&nbsp;</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 *&nbsp;</td>
<td class="paramname"> <em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>n</em></td><td>&nbsp;</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&nbsp;</td>
<td class="paramname"> <em>arr</em>[], </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>n</em></td><td>&nbsp;</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 *&nbsp;</td>
<td class="paramname"> <em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Double_t *&nbsp;</td>
<td class="paramname"> <em>par</em></td><td>&nbsp;</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 *&nbsp;</td>
<td class="paramname"> <em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Double_t *&nbsp;</td>
<td class="paramname"> <em>par</em></td><td>&nbsp;</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&nbsp;</td>
<td class="paramname"> <em>s</em> = <code>0</code> </td>
<td>&nbsp;)&nbsp;</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>&nbsp;</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 *&nbsp;</td>
<td class="paramname"> <em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Double_t *&nbsp;</td>
<td class="paramname"> <em>par</em></td><td>&nbsp;</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&nbsp;
<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>

View File

@ -1,69 +0,0 @@
<!-- 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&nbsp;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&nbsp;List</span></a></li>
<li><a href="functions.html"><span>Class&nbsp;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">&nbsp;&nbsp;E&nbsp;&nbsp;</div></td></tr></table>
</td><td><a class="el" href="classenergyCalibration.html">energyCalibration</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a>&nbsp;&nbsp;&nbsp;</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">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</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&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.0 </small></address>
</body>
</html>

View File

@ -1,358 +0,0 @@
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%; }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,164 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li><a href="globals.html"><span>File&nbsp;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 &lt;TROOT.h&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;TF1.h&gt;</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&gt;=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>-&gt;<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 &amp;mi, Double_t &amp;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 &amp;gain, Double_t &amp;off, Double_t &amp;egain, Double_t &amp;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 &amp;gain, Double_t &amp;off, Double_t &amp;egain, Double_t &amp;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 &amp;gain, Double_t &amp;off, Double_t &amp;egain, Double_t &amp;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 &amp;gain, Double_t &amp;off, Double_t &amp;egain, Double_t &amp;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&nbsp;
<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>

View File

@ -1,76 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
</ul></div>
<h1>energyCalibration.h File Reference</h1><code>#include &lt;TROOT.h&gt;</code><br>
<code>#include &lt;TF1.h&gt;</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 &nbsp;</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 &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classenergyCalibrationFunctions.html">energyCalibrationFunctions</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</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 &nbsp;</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&nbsp;</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&nbsp;</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&nbsp;
<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>

View File

@ -1,190 +0,0 @@
<!-- 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&nbsp;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&nbsp;List</span></a></li>
<li><a href="globals.html"><span>File&nbsp;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 &quot;NewMythenMacros.h&quot;</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 &lt;TROOT.h&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;TF1.h&gt;</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&gt;=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>-&gt;<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 &amp;mi, Double_t &amp;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 &amp;gain, Double_t &amp;off, Double_t &amp;egain, Double_t &amp;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 &amp;gain, Double_t &amp;off, Double_t &amp;egain, Double_t &amp;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">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</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&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.0 </small></address>
</body>
</html>

View File

@ -1,27 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li><a href="globals.html"><span>File&nbsp;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&nbsp;
<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>

View File

@ -1,126 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li id="current"><a href="functions.html"><span>Class&nbsp;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&nbsp;
<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>

View File

@ -1,63 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li id="current"><a href="functions.html"><span>Class&nbsp;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>
&nbsp;
<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&nbsp;
<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>

View File

@ -1,49 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li id="current"><a href="functions.html"><span>Class&nbsp;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>
&nbsp;
<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&nbsp;
<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>

View File

@ -1,36 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li id="current"><a href="globals.html"><span>File&nbsp;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&nbsp;
<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>

View File

@ -1,36 +0,0 @@
<!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&nbsp;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&nbsp;List</span></a></li>
<li id="current"><a href="globals.html"><span>File&nbsp;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>
&nbsp;
<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&nbsp;
<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>

View File

@ -1,25 +0,0 @@
<!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&nbsp;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&nbsp;
<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>

View File

@ -1,117 +0,0 @@
#!/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;
}

View File

@ -1,22 +0,0 @@
<!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&nbsp;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&nbsp;
<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>

View File

@ -1,24 +0,0 @@
<!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&nbsp;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&nbsp;
<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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,31 +0,0 @@
<!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>

View File

@ -1,37 +0,0 @@
<!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>

View File

@ -1,66 +0,0 @@
<!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>

View File

@ -1,55 +0,0 @@
<!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>

View File

@ -1,37 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,70 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,29 +0,0 @@
<!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.

Before

Width:  |  Height:  |  Size: 273 B

View File

@ -1,24 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,49 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,37 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,64 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,11 +0,0 @@
<!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>

View File

@ -1,198 +0,0 @@
/*---------------- 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;
}

View File

@ -1,734 +0,0 @@
// 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='&bull;';
}
else
{
node.innerHTML='&nbsp;';
}
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.

Before

Width:  |  Height:  |  Size: 527 B

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,31 +0,0 @@
<!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>

View File

@ -1,31 +0,0 @@
<!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>

View File

@ -1,25 +0,0 @@
<!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>

View File

@ -1,49 +0,0 @@
<!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>

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