functions splitted in many sub-files

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@167 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
bergamaschi 2012-04-02 15:16:32 +00:00
parent b227ad1b0c
commit ee36cdf9e4
109 changed files with 13230 additions and 4479 deletions

View File

@ -1,15 +1,18 @@
CFLAGS= -DC_ONLY
#FLAGS=-DVERBOSE
INCLUDES= -IcommonFiles -IslsDetector -IMySocketTCP -IusersFunctions -ImultiSlsDetector -IslsDetectorUtils -IslsDetectorCommand
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=g++
SRC_CLNT= slsDetector/slsDetector.cpp MySocketTCP/MySocketTCP.cpp usersFunctions/usersFunctions.cpp multiSlsDetector/multiSlsDetector.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp
SRC_CLNT= slsDetectorAnalysis/fileIO.cpp slsDetector/slsDetector.cpp MySocketTCP/MySocketTCP.cpp usersFunctions/usersFunctions.cpp multiSlsDetector/multiSlsDetector.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/angularConversion.cpp slsDetectorAnalysis/energyConversion.cpp slsDetector/slsDetectorActions.cpp slsDetectorAnalysis/postProcessing.cpp
OBJS = $(SRC_CLNT:.cpp=.o)
HEADERS = $(SRC_CLNT:.cpp=.h) commonFiles/sls_detector_defs.h slsDetectorAnalysis/detectorData.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
@ -56,14 +59,8 @@ install_lib: lib
install_inc:
$(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR))
cp -P ../slsDetectorSoftware/MySocketTCP/MySocketTCP.h $(DESTDIR)
cp -P ../slsDetectorSoftware/slsDetector/slsDetectorBase.h $(DESTDIR)
cp -P ../slsDetectorSoftware/slsDetector/slsDetector.h $(DESTDIR)
cp -P ../slsDetectorSoftware/slsDetector/slsDetectorUtils.h $(DESTDIR)
cp -P ../slsDetectorSoftware/slsDetector/slsDetectorCommand.h $(DESTDIR)
cp -P ../slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h $(DESTDIR)
cp -P ../slsDetectorSoftware/commonFiles/sls_detector_defs.h $(DESTDIR)
cp -P ../slsDetectorSoftware/usersFunctions/usersFunctions.h $(DESTDIR)
cp -P $(HEADERS) $(DESTDIR)
install_doc:
$(shell test -d $(DESTDIR) || mkdir -p $(DESTDIR))

View File

@ -7,7 +7,10 @@
#define MAX_STR_LENGTH 1000
/** 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
typedef float float32_t;
typedef int int32_t;
@ -453,26 +456,27 @@ enum imageType {
/**
angular conversion constant for a module
*/
typedef struct {
float center; /**< center of the module (channel at which the radius is perpendicular to the module surface) */
float ecenter; /**< error in the center determination */
float r_conversion; /**< detector pixel size (or strip pitch) divided by the diffractometer radius */
float er_conversion; /**< error in the r_conversion determination */
float offset; /**< the module offset i.e. the position of channel 0 with respect to the diffractometer 0 */
float eoffset; /**< error in the offset determination */
float tilt; /**< ossible tilt in the orthogonal direction (unused)*/
float etilt; /**< error in the tilt determination */
} angleConversionConstant;
/* /\** */
/* angular conversion constant for a module */
/* *\/ */
/* typedef struct { */
/* float center; /\**< center of the module (channel at which the radius is perpendicular to the module surface) *\/ */
/* float ecenter; /\**< error in the center determination *\/ */
/* float r_conversion; /\**< detector pixel size (or strip pitch) divided by the diffractometer radius *\/ */
/* float er_conversion; /\**< error in the r_conversion determination *\/ */
/* float offset; /\**< the module offset i.e. the position of channel 0 with respect to the diffractometer 0 *\/ */
/* float eoffset; /\**< error in the offset determination *\/ */
/* float tilt; /\**< ossible tilt in the orthogonal direction (unused)*\/ */
/* float etilt; /\**< error in the tilt determination *\/ */
/* } angleConversionConstant; */
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 */
BIN_SIZE, /**< angular bin size */
MOVE_FLAG /**< wether the detector moves with the motor or not in a multi detector system */
};

View File

@ -189,6 +189,10 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1)
cout << thisMultiDetector->detectorIds[i] << endl;
#endif
detectors[i]=new slsDetector(thisMultiDetector->detectorIds[i]);
// setAngularConversionPointer(detectors[i]->getAngularConversionPointer(),detectors[i]->getNModsPointer(),detectors[i]->getNChans()*detectors[i]->getNChips(), i);
}
for (int i=thisMultiDetector->numberOfDetectors; i<MAXDET; i++)
detectors[i]=NULL;
@ -197,45 +201,70 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1)
/** modifies the last PID accessing the detector system*/
thisMultiDetector->lastPID=getpid();
getPointers(&thisMultiDetector->stoppedFlag, \
&thisMultiDetector->threadedProcessing, \
&thisMultiDetector->actionMask, \
thisMultiDetector->actionScript, \
thisMultiDetector->actionParameter, \
thisMultiDetector->nScanSteps, \
thisMultiDetector->scanMode, \
thisMultiDetector->scanScript, \
thisMultiDetector->scanParameter, \
thisMultiDetector->scanSteps, \
thisMultiDetector->scanPrecision, \
&thisMultiDetector->numberOfPositions, \
thisMultiDetector->detPositions, \
thisMultiDetector->angConvFile, \
&thisMultiDetector->correctionMask, \
&thisMultiDetector->binSize, \
&thisMultiDetector->fineOffset, \
&thisMultiDetector->globalOffset, \
&thisMultiDetector->angDirection, \
thisMultiDetector->flatFieldDir, \
thisMultiDetector->flatFieldFile, \
thisMultiDetector->badChanFile, \
thisMultiDetector->timerValue, \
&thisMultiDetector->currentSettings, \
&thisMultiDetector->currentThresholdEV, \
thisMultiDetector->filePath, \
thisMultiDetector->fileName, \
&thisMultiDetector->fileIndex);
// getPointers(&thisMultiDetector->stoppedFlag, \
// &thisMultiDetector->threadedProcessing, \
// &thisMultiDetector->actionMask, \
// thisMultiDetector->actionScript, \
// thisMultiDetector->actionParameter, \
// thisMultiDetector->nScanSteps, \
// thisMultiDetector->scanMode, \
// thisMultiDetector->scanScript, \
// thisMultiDetector->scanParameter, \
// thisMultiDetector->scanSteps, \
// thisMultiDetector->scanPrecision, \
// &thisMultiDetector->numberOfPositions, \
// thisMultiDetector->detPositions, \
// thisMultiDetector->angConvFile, \
// &thisMultiDetector->correctionMask, \
// &thisMultiDetector->binSize, \
// &thisMultiDetector->fineOffset, \
// &thisMultiDetector->globalOffset, \
// &thisMultiDetector->angDirection, \
// thisMultiDetector->flatFieldDir, \
// thisMultiDetector->flatFieldFile, \
// thisMultiDetector->badChanFile, \
// thisMultiDetector->timerValue, \
// &thisMultiDetector->currentSettings, \
// &thisMultiDetector->currentThresholdEV, \
// thisMultiDetector->filePath, \
// thisMultiDetector->fileName, \
// &thisMultiDetector->fileIndex);
// #ifdef VERBOSE
// cout << "filling bad channel mask" << endl;
// #endif
// /** fill the BadChannelMask \sa fillBadChannelMask */
// fillBadChannelMask();
// #ifdef VERBOSE
// cout << "done" << endl;
// #endif
stoppedFlag=&thisMultiDetector->stoppedFlag;
threadedProcessing=&thisMultiDetector->threadedProcessing;
actionMask=&thisMultiDetector->actionMask;
actionScript=thisMultiDetector->actionScript;
actionParameter=thisMultiDetector->actionParameter;
nScanSteps=thisMultiDetector->nScanSteps;
scanMode=thisMultiDetector->scanMode;
scanScript=thisMultiDetector->scanScript;
scanParameter=thisMultiDetector->scanParameter;
scanSteps=thisMultiDetector->scanSteps;
scanPrecision=thisMultiDetector->scanPrecision;
numberOfPositions=&thisMultiDetector->numberOfPositions;
detPositions=thisMultiDetector->detPositions;
angConvFile=thisMultiDetector->angConvFile;
correctionMask=&thisMultiDetector->correctionMask;
binSize=&thisMultiDetector->binSize;
fineOffset=&thisMultiDetector->fineOffset;
globalOffset=&thisMultiDetector->globalOffset;
angDirection=&thisMultiDetector->angDirection;
flatFieldDir=thisMultiDetector->flatFieldDir;
flatFieldFile=thisMultiDetector->flatFieldFile;
badChanFile=thisMultiDetector->badChanFile;
timerValue=thisMultiDetector->timerValue;
currentSettings=&thisMultiDetector->currentSettings;
currentThresholdEV=&thisMultiDetector->currentThresholdEV;
filePath=thisMultiDetector->filePath;
fileName=thisMultiDetector->fileName;
fileIndex=&thisMultiDetector->fileIndex;
moveFlag=NULL;
}
multiSlsDetector::~multiSlsDetector() {
@ -1617,11 +1646,53 @@ int multiSlsDetector::getFlatFieldCorrection(float *corr, float *ecorr) {
int multiSlsDetector::getNMods(){
int nm=0;
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) {
nm+=detectors[idet]->getNMods();
}
}
return nm;
}
int multiSlsDetector::getChansPerMod(int imod){
int id=-1, im=-1;
if (decodeNMod(imod, id, im)>=0) {
if (detectors[id]) {
return detectors[id]->getChansPerMod(im);
}
}
return -1;
}
int multiSlsDetector::getMoveFlag(int imod){
int id=-1, im=-1;
decodeNMod(imod, id, im);
if (id>=0) {
if (detectors[id]) {
return detectors[id]->getMoveFlag(im);
}
}
//default!!!
return 1;
}
angleConversionConstant * multiSlsDetector::getAngularConversionPointer(int imod){
int id=-1, im=-1;
if (decodeNMod(imod, id, im)>=0) {
if (detectors[id]) {
return detectors[id]->getAngularConversionPointer(im);
}
}
return NULL;
}
@ -1648,6 +1719,8 @@ int multiSlsDetector::flatFieldCorrect(float* datain, float *errin, float* datao
int multiSlsDetector::setRateCorrection(float t){
// float tdead[]=defaultTDead;
@ -1831,30 +1904,11 @@ int multiSlsDetector::setBadChannelCorrection(int nbad, int *badlist, int ff) {
}
int multiSlsDetector::setAngularConversion(string fname) {
if (fname=="") {
thisMultiDetector->correctionMask&=~(1<< ANGULAR_CONVERSION);
//strcpy(thisDetector->angConvFile,"none");
#ifdef VERBOSE
std::cout << "Unsetting angular conversion" << std::endl;
#endif
} else {
if (fname=="default") {
fname=string(thisMultiDetector->angConvFile);
}
#ifdef VERBOSE
std::cout << "Setting angular conversion to " << fname << std:: endl;
#endif
if (readAngularConversion(fname)>=0) {
thisMultiDetector->correctionMask|=(1<< ANGULAR_CONVERSION);
strcpy(thisMultiDetector->angConvFile,fname.c_str());
}
}
return thisMultiDetector->correctionMask&(1<< ANGULAR_CONVERSION);
}
int multiSlsDetector::readAngularConversion(string fname) {
int multiSlsDetector::readAngularConversionFile(string fname) {
ifstream infile;
@ -2022,33 +2076,33 @@ float multiSlsDetector::setAngularConversionParameter(angleConversionParameter c
float* multiSlsDetector::convertAngles(float pos) {
float *ang=new float[thisMultiDetector->numberOfChannels];
// float* multiSlsDetector::convertAngles(float pos) {
// float *ang=new float[thisMultiDetector->numberOfChannels];
float *p=ang;
int choff=0;
// float *p=ang;
// int choff=0;
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
// for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) {
#ifdef EPICS
// cout << "convert angle det " << idet << endl;
if (idet<2)
#endif
p=detectors[idet]->convertAngles(pos);
#ifdef EPICS
else //////////// GOOD ONLY AT THE BEAMLINE!!!!!!!!!!!!!
p=detectors[idet]->convertAngles(0);
#endif
for (int ich=0; ich<detectors[idet]->getTotalNumberOfChannels(); ich++) {
ang[choff+ich]=p[ich];
}
choff+=detectors[idet]->getTotalNumberOfChannels();
delete [] p;
}
}
return ang;
}
// if (detectors[idet]) {
// #ifdef EPICS
// // cout << "convert angle det " << idet << endl;
// if (idet<2)
// #endif
// p=detectors[idet]->convertAngles(pos);
// #ifdef EPICS
// else //////////// GOOD ONLY AT THE BEAMLINE!!!!!!!!!!!!!
// p=detectors[idet]->convertAngles(0);
// #endif
// for (int ich=0; ich<detectors[idet]->getTotalNumberOfChannels(); ich++) {
// ang[choff+ich]=p[ich];
// }
// choff+=detectors[idet]->getTotalNumberOfChannels();
// delete [] p;
// }
// }
// return ang;
// }
int multiSlsDetector::getBadChannelCorrection(int *bad) {

View File

@ -19,7 +19,6 @@ class slsDetector;
//#include "sls_detector_defs.h"
#define MAXDET 100
//using namespace std;
@ -137,6 +136,12 @@ class multiSlsDetector : public slsDetectorUtils {
/** angular conversion file */
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 */
@ -145,12 +150,18 @@ class multiSlsDetector : public slsDetectorUtils {
float fineOffset;
/** beamline offset (might be a few degrees beacuse of encoder offset - normally it is kept fixed for a long period of time) */
float globalOffset;
/** bin size for data merging */
float binSize;
/** number of positions at which the detector should acquire */
int numberOfPositions;
/** list of encoder positions at which the detector should acquire */
float detPositions[MAXPOS];
/** bin size for data merging */
float binSize;
/** Scans and scripts */
@ -274,6 +285,14 @@ class multiSlsDetector : public slsDetectorUtils {
\returns number of detectors */
int getNumberOfDetectors() {return thisMultiDetector->numberOfDetectors;};
int getNMods();
int getChansPerMod(int imod=0);
angleConversionConstant *getAngularConversionPointer(int imod=0);
int getTotalNumberOfChannels(){return thisMultiDetector->numberOfChannels;};
int getMaxNumberOfChannels(){return thisMultiDetector->maxNumberOfChannels;};
@ -687,13 +706,12 @@ class multiSlsDetector : public slsDetectorUtils {
/////////////////////////////////////////////////// virtual int getAngularConversion(int &direction, angleConversionConstant *angconv=NULL);
int setAngularConversion(string fname);
int readAngularConversion(string fname);
int readAngularConversionFile(string fname);
int writeAngularConversion(string fname);
float* convertAngles(float pos);
// float* convertAngles(float pos);
@ -772,10 +790,10 @@ class multiSlsDetector : public slsDetectorUtils {
/** calcualtes the total number of steps of the acquisition.
called when number of frames, number of cycles, number of positions and scan steps change
*/
int setTotalProgress();
/////////////////////////////////////// int setTotalProgress(); ////////////// from slsDetectorUtils!
/** returns the current progress in % */
float getCurrentProgress();
////////////////////////////////float getCurrentProgress();////////////// from slsDetectorUtils!
/**
@ -966,6 +984,7 @@ class multiSlsDetector : public slsDetectorUtils {
*/
int resetCounterBlock(int startACQ=0);
int getMoveFlag(int imod);
protected:

View File

@ -41,12 +41,12 @@ int slsDetector::initSharedMemory(detectorType type, int id) {
nd=13; // dacs+adcs
break;
case EIGER:
nch=65535; // one EIGER module
nch=65536; // one EIGER half module
nm=1; //modules/detector
nc=8; //chips
nc=4; //chips
nd=16; //dacs+adcs
default:
nch=0; // one EIGER module
nch=0; // dum!
nm=0; //modules/detector
nc=0; //chips
nd=0; //dacs+adcs
@ -81,9 +81,6 @@ int slsDetector::initSharedMemory(detectorType type, int id) {
}
/**
shm_id returns -1 is shared memory initialization fails
*/
@ -111,20 +108,6 @@ int slsDetector::freeSharedMemory() {
slsDetector::slsDetector(int id) :slsDetectorUtils(),
thisDetector(NULL),
detId(id),
@ -480,6 +463,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
thisDetector->nModMax[X]=24;
thisDetector->nModMax[Y]=1;
thisDetector->dynamicRange=24;
thisDetector->moveFlag=1;
break;
case PICASSO:
thisDetector->nChans=128;
@ -635,36 +619,69 @@ int slsDetector::initializeDetectorSize(detectorType type) {
cout << "passing pointers" << endl;
#endif
getPointers(&thisDetector->stoppedFlag, \
&thisDetector->threadedProcessing, \
&thisDetector->actionMask, \
thisDetector->actionScript, \
thisDetector->actionParameter, \
thisDetector->nScanSteps, \
thisDetector->scanMode, \
thisDetector->scanScript, \
thisDetector->scanParameter, \
thisDetector->scanSteps, \
thisDetector->scanPrecision, \
&thisDetector->numberOfPositions, \
thisDetector->detPositions, \
thisDetector->angConvFile, \
&thisDetector->correctionMask, \
&thisDetector->binSize, \
&thisDetector->fineOffset, \
&thisDetector->globalOffset, \
&thisDetector->angDirection, \
thisDetector->flatFieldDir, \
thisDetector->flatFieldFile, \
thisDetector->badChanFile, \
thisDetector->timerValue, \
&thisDetector->currentSettings, \
&thisDetector->currentThresholdEV, \
thisDetector->filePath, \
thisDetector->fileName, \
&thisDetector->fileIndex);
// getPointers(&thisDetector->stoppedFlag, \
// &thisDetector->threadedProcessing, \
// &thisDetector->actionMask, \
// thisDetector->actionScript, \
// thisDetector->actionParameter, \
// thisDetector->nScanSteps, \
// thisDetector->scanMode, \
// thisDetector->scanScript, \
// thisDetector->scanParameter, \
// thisDetector->scanSteps, \
// thisDetector->scanPrecision, \
// &thisDetector->numberOfPositions, \
// thisDetector->detPositions, \
// thisDetector->angConvFile, \
// &thisDetector->correctionMask, \
// &thisDetector->binSize, \
// &thisDetector->fineOffset, \
// &thisDetector->globalOffset, \
// &thisDetector->angDirection, \
// thisDetector->flatFieldDir, \
// thisDetector->flatFieldFile, \
// thisDetector->badChanFile, \
// thisDetector->timerValue, \
// &thisDetector->currentSettings, \
// &thisDetector->currentThresholdEV, \
// thisDetector->filePath, \
// thisDetector->fileName, \
// &thisDetector->fileIndex);
stoppedFlag=&thisDetector->stoppedFlag;
threadedProcessing=&thisDetector->threadedProcessing;
actionMask=&thisDetector->actionMask;
actionScript=thisDetector->actionScript;
actionParameter=thisDetector->actionParameter;
nScanSteps=thisDetector->nScanSteps;
scanMode=thisDetector->scanMode;
scanScript=thisDetector->scanScript;
scanParameter=thisDetector->scanParameter;
scanSteps=thisDetector->scanSteps;
scanPrecision=thisDetector->scanPrecision;
numberOfPositions=&thisDetector->numberOfPositions;
detPositions=thisDetector->detPositions;
angConvFile=thisDetector->angConvFile;
correctionMask=&thisDetector->correctionMask;
binSize=&thisDetector->binSize;
fineOffset=&thisDetector->fineOffset;
globalOffset=&thisDetector->globalOffset;
angDirection=&thisDetector->angDirection;
flatFieldDir=thisDetector->flatFieldDir;
flatFieldFile=thisDetector->flatFieldFile;
badChanFile=thisDetector->badChanFile;
timerValue=thisDetector->timerValue;
currentSettings=&thisDetector->currentSettings;
currentThresholdEV=&thisDetector->currentThresholdEV;
filePath=thisDetector->filePath;
fileName=thisDetector->fileName;
fileIndex=&thisDetector->fileIndex;
moveFlag=&thisDetector->moveFlag;
settingsFile=thisDetector->settingsFile;
// setAngularConversionPointer(thisDetector->angOff,&thisDetector->nMods, thisDetector->nChans*thisDetector->nChips);
#ifdef VERBOSE
cout << "done" << endl;
@ -741,17 +758,55 @@ int slsDetector::initializeDetectorStructure() {
return 0;
}
slsDetectorDefs::sls_detector_module* slsDetector::createModule() {
slsDetectorDefs::sls_detector_module* slsDetector::createModule(detectorType t) {
sls_detector_module *myMod=(sls_detector_module*)malloc(sizeof(sls_detector_module));
float *dacs=new float[thisDetector->nDacs];
float *adcs=new float[thisDetector->nAdcs];
int *chipregs=new int[thisDetector->nChips];
int *chanregs=new int[thisDetector->nChips*thisDetector->nChans];
myMod->ndac=thisDetector->nDacs;
myMod->nadc=thisDetector->nAdcs;
myMod->nchip=thisDetector->nChips;
myMod->nchan=thisDetector->nChips*thisDetector->nChans;
int nch, nm, nc, nd, na=0;
switch(t) {
case MYTHEN:
nch=128; // complete mythen system
nm=24;
nc=10;
nd=6; // dacs
break;
case PICASSO:
nch=128; // complete mythen system
nm=24;
nc=12;
nd=6; // dacs+adcs
break;
case GOTTHARD:
nch=128;
nm=1;
nc=10;
nd=8; // dacs+adcs
na=5;
break;
case EIGER:
nch=65536; // one EIGER half module
nm=1; //modules/detector
nc=4; //chips
nd=16; //dacs
na=16;
default:
nch=0; // dum!
nm=0; //modules/detector
nc=0; //chips
nd=0; //dacs+adcs
na=0;
}
float *dacs=new float[nd];
float *adcs=new float[na];
int *chipregs=new int[nc];
int *chanregs=new int[nch*nc];
myMod->ndac=nd;
myMod->nadc=na;
myMod->nchip=nc;
myMod->nchan=nch*nc;
myMod->dacs=dacs;
myMod->adcs=adcs;
@ -2727,7 +2782,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise
#ifdef VERBOSE
cout << "the settings name is "<<settingsfname << endl;
#endif
if (readSettingsFile(settingsfname,myMod)) {
if (readSettingsFile(settingsfname,thisDetector->myDetectorType, myMod)) {
calfname=oscfn.str();
#ifdef VERBOSE
cout << calfname << endl;
@ -2750,7 +2805,7 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise
cout << settingsfname << endl;
cout << calfname << endl;
#endif
if (readSettingsFile(settingsfname,myMod)) {
if (readSettingsFile(settingsfname,thisDetector->myDetectorType, myMod)) {
calfname=oscfn.str();
readCalibrationFile(calfname,myMod->gain, myMod->offset);
setModule(*myMod);
@ -4499,29 +4554,6 @@ int slsDetector::configureMAC(){
//Corrections
int slsDetector::setAngularConversion(string fname) {
if (fname=="") {
thisDetector->correctionMask&=~(1<< ANGULAR_CONVERSION);
//strcpy(thisDetector->angConvFile,"none");
#ifdef VERBOSE
std::cout << "Unsetting angular conversion" << std::endl;
#endif
} else {
if (fname=="default") {
fname=string(thisDetector->angConvFile);
}
#ifdef VERBOSE
std::cout << "Setting angular conversion to" << fname << std:: endl;
#endif
if (readAngularConversion(fname)>=0) {
thisDetector->correctionMask|=(1<< ANGULAR_CONVERSION);
strcpy(thisDetector->angConvFile,fname.c_str());
}
}
return thisDetector->correctionMask&(1<< ANGULAR_CONVERSION);
}
@ -4550,7 +4582,7 @@ int slsDetector::getAngularConversion(int &direction, angleConversionConstant *
int slsDetector::readAngularConversion(string fname) {
int slsDetector::readAngularConversionFile(string fname) {
return readAngularConversion(fname,thisDetector->nModsMax, thisDetector->angOff);
@ -4573,24 +4605,23 @@ int slsDetector::getAngularConversion(int &direction, angleConversionConstant *
float* slsDetector::convertAngles(float pos) {
int imod;
float *ang=new float[thisDetector->nChans*thisDetector->nChips*thisDetector->nMods];
for (int ip=0; ip<thisDetector->nChans*thisDetector->nChips*thisDetector->nMods; ip++) {
imod=ip/(thisDetector->nChans*thisDetector->nChips);
ang[ip]=angle(ip%(thisDetector->nChans*thisDetector->nChips),\
pos, \
thisDetector->fineOffset+thisDetector->globalOffset, \
thisDetector->angOff[imod].r_conversion, \
thisDetector->angOff[imod].center, \
thisDetector->angOff[imod].offset, \
thisDetector->angOff[imod].tilt, \
thisDetector->angDirection
);
// cout << imod << " " << thisDetector->angOff[imod].offset << " " << ang[ip] << endl;
}
return ang;
}
// float* slsDetector::convertAngles(float pos) {
// int imod;
// float *ang=new float[thisDetector->nChans*thisDetector->nChips*thisDetector->nMods];
// for (int ip=0; ip<thisDetector->nChans*thisDetector->nChips*thisDetector->nMods; ip++) {
// imod=ip/(thisDetector->nChans*thisDetector->nChips);
// ang[ip]=angle(ip%(thisDetector->nChans*thisDetector->nChips),\
// pos, \
// thisDetector->fineOffset+thisDetector->globalOffset, \
// thisDetector->angOff[imod].r_conversion, \
// thisDetector->angOff[imod].center, \
// thisDetector->angOff[imod].offset, \
// thisDetector->angOff[imod].tilt, \
// thisDetector->angDirection
// );
// }
// return ang;
// }
@ -5191,293 +5222,9 @@ int slsDetector::retrieveDetectorSetup(string fname1, int level){
/* I/O */
slsDetectorDefs::sls_detector_module* slsDetector::readSettingsFile(string fname, sls_detector_module *myMod){
int nflag=0;
if (myMod==NULL) {
myMod=createModule();
nflag=1;
}
string myfname;
string str;
ifstream infile;
ostringstream oss;
int iline=0;
// string names[]={"Vtrim", "Vthresh", "Rgsh1", "Rgsh2", "Rgpr", "Vcal", "outBuffEnable"};
string sargname;
int ival;
int ichan=0, ichip=0, idac=0;
#ifdef VERBOSE
std::cout<< "reading settings file for module number "<< myMod->module << std::endl;
#endif
myfname=fname;
#ifdef VERBOSE
std::cout<< "file name is "<< myfname << std::endl;
#endif
infile.open(myfname.c_str(), ios_base::in);
if (infile.is_open()) {
switch (thisDetector->myDetectorType) {
case MYTHEN:
for (int iarg=0; iarg<thisDetector->nDacs; iarg++) {
getline(infile,str);
iline++;
istringstream ssstr(str);
ssstr >> sargname >> ival;
#ifdef VERBOSE
std::cout<< sargname << " dac nr. " << idac << " is " << ival << std::endl;
#endif
myMod->dacs[idac]=ival;
idac++;
}
for (ichip=0; ichip<thisDetector->nChips; ichip++) {
getline(infile,str);
iline++;
#ifdef VERBOSE
// std::cout<< str << std::endl;
#endif
istringstream ssstr(str);
ssstr >> sargname >> ival;
#ifdef VERBOSE
// std::cout<< "chip " << ichip << " " << sargname << " is " << ival << std::endl;
#endif
myMod->chipregs[ichip]=ival;
for (ichan=0; ichan<thisDetector->nChans; ichan++) {
getline(infile,str);
#ifdef VERBOSE
// std::cout<< str << std::endl;
#endif
istringstream ssstr(str);
#ifdef VERBOSE
// std::cout<< "channel " << ichan+ichip*thisDetector->nChans <<" iline " << iline<< std::endl;
#endif
iline++;
myMod->chanregs[ichip*thisDetector->nChans+ichan]=0;
for (int iarg=0; iarg<6 ; iarg++) {
ssstr >> ival;
//if (ssstr.good()) {
switch (iarg) {
case 0:
#ifdef VERBOSE
// std::cout<< "trimbits " << ival ;
#endif
myMod->chanregs[ichip*thisDetector->nChans+ichan]|=ival&0x3f;
break;
case 1:
#ifdef VERBOSE
//std::cout<< " compen " << ival ;
#endif
myMod->chanregs[ichip*thisDetector->nChans+ichan]|=ival<<9;
break;
case 2:
#ifdef VERBOSE
//std::cout<< " anen " << ival ;
#endif
myMod->chanregs[ichip*thisDetector->nChans+ichan]|=ival<<8;
break;
case 3:
#ifdef VERBOSE
//std::cout<< " calen " << ival ;
#endif
myMod->chanregs[ichip*thisDetector->nChans+ichan]|=ival<<7;
break;
case 4:
#ifdef VERBOSE
//std::cout<< " outcomp " << ival ;
#endif
myMod->chanregs[ichip*thisDetector->nChans+ichan]|=ival<<10;
break;
case 5:
#ifdef VERBOSE
//std::cout<< " counts " << ival << std::endl;
#endif
myMod->chanregs[ichip*thisDetector->nChans+ichan]|=ival<<11;
break;
default:
std::cout<< " too many columns" << std::endl;
break;
}
}
}
// }
}
#ifdef VERBOSE
std::cout<< "read " << ichan*ichip << " channels" <<std::endl;
#endif
break;
case GOTTHARD:
//---------------dacs---------------
for (int iarg=0; iarg<thisDetector->nDacs; iarg++) {
getline(infile,str);
iline++;
#ifdef VERBOSE
std::cout<< str << std::endl;
#endif
istringstream ssstr(str);
ssstr >> sargname >> ival;
#ifdef VERBOSE
std::cout<< sargname << " dac nr. " << idac << " is " << ival << std::endl;
#endif
myMod->dacs[idac]=ival;
idac++;
}
break;
default:
std::cout<< "Unknown detector type - don't know how to read file" << myfname << std::endl;
infile.close();
deleteModule(myMod);
return NULL;
}
infile.close();
strcpy(thisDetector->settingsFile,fname.c_str());
return myMod;
} else {
std::cout<< "could not open settings file " << myfname << std::endl;
if (nflag)
deleteModule(myMod);
return NULL;
}
};
int slsDetector::writeSettingsFile(string fname, sls_detector_module mod){
ofstream outfile;
string names[100];
int id=0;
switch (thisDetector->myDetectorType) {
case MYTHEN:
names[id++]="Vtrim";
names[id++]="Vthresh";
names[id++]="Rgsh1";
names[id++]="Rgsh2";
names[id++]="Rgpr";
names[id++]="Vcal";
names[id++]="outBuffEnable";
break;
case GOTTHARD:
names[id++]="Vref";
names[id++]="VcascN";
names[id++]="VcascP";
names[id++]="Vout";
names[id++]="Vcasc";
names[id++]="Vin";
names[id++]="Vref_comp";
names[id++]="Vib_test";
names[id++]="config";
names[id++]="HV";
names[id++]="macaddress";
names[id++]="ipaddress";
break;
default:
cout << "Unknown detector type - unknown format for settings file" << endl;
return FAIL;
}
int iv, ichan, ichip;
int iv1, idac;
int nb;
outfile.open(fname.c_str(), ios_base::out);
if (outfile.is_open()) {
for (idac=0; idac<mod.ndac; idac++) {
iv=(int)mod.dacs[idac];
outfile << names[idac] << " " << iv << std::endl;
}
for (ichip=0; ichip<mod.nchip; ichip++) {
iv1=mod.chipregs[ichip]&1;
outfile << names[idac] << " " << iv1 << std::endl;
for (ichan=0; ichan<thisDetector->nChans; ichan++) {
iv=mod.chanregs[ichip*thisDetector->nChans+ichan];
iv1= (iv&0x3f);
outfile <<iv1 << " ";
nb=9;
iv1=((iv&(1<<nb))>>nb);
outfile << iv1 << " ";
nb=8;
iv1=((iv&(1<<nb))>>nb);
outfile << iv1 << " ";
nb=7;
iv1=((iv&(1<<nb))>>nb);
outfile <<iv1 << " ";
nb=10;
iv1=((iv&(1<<nb))>>nb);
outfile << iv1 << " ";
nb=11;
iv1= ((iv&0xfffff800)>>nb);
outfile << iv1 << std::endl;
}
}
outfile.close();
return OK;
} else {
std::cout<< "could not open SETTINGS file " << fname << std::endl;
return FAIL;
}
};
int slsDetector::writeSettingsFile(string fname, int imod){
return writeSettingsFile(fname,detectorModules[imod]);
return writeSettingsFile(fname,thisDetector->myDetectorType, detectorModules[imod]);
};
@ -5500,7 +5247,7 @@ int slsDetector::loadSettingsFile(string fname, int imod) {
ostfn << fname << ".sn" << setfill('0') << setw(3) << hex << getId(MODULE_SERIAL_NUMBER, im);
fn=ostfn.str();
}
myMod=readSettingsFile(fn);
myMod=readSettingsFile(fn, thisDetector->myDetectorType);
if (myMod) {
myMod->module=im;
setModule(*myMod);
@ -5527,7 +5274,7 @@ int slsDetector::saveSettingsFile(string fname, int imod) {
ostringstream ostfn;
ostfn << fname << ".sn" << setfill('0') << setw(3) << hex << getId(MODULE_SERIAL_NUMBER, im);
if ((myMod=getModule(im))) {
ret=writeSettingsFile(ostfn.str(),*myMod);
ret=writeSettingsFile(ostfn.str(), thisDetector->myDetectorType, *myMod);
deleteModule(myMod);
}
}

View File

@ -5,17 +5,9 @@
#define SLS_DETECTOR_H
class MySocketTCP;
#include "slsDetectorUtils.h"
#include "MySocketTCP.h"
//#include "slsDetectorCommand.h"
//enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript, MAX_ACTIONS};
//using namespace std;
@ -54,17 +46,20 @@ Then in your software you should use the class related to the detector you want
* @short This is the base class for all SLS detector functionalities
* @author Anna Bergamaschi
* @version 0.1alpha
*/
class slsDetector : public slsDetectorUtils {
#define NMODMAXX 24
#define NMODMAXY 24
#define NCHIPSMAX 10
#define NCHANSMAX 65536
#define NDACSMAX 16
class slsDetector : public slsDetectorUtils, public energyConversion {
public:
/* /\** online flags enum \sa setOnline*\/ */
/* enum {GET_ONLINE_FLAG=-1, /\**< returns wether the detector is in online or offline state *\/ */
/* OFFLINE_FLAG=0, /\**< detector in offline state (i.e. no communication to the detector - using only local structure - no data acquisition possible!) *\/ */
@ -180,27 +175,32 @@ typedef struct sharedSlsDetector {
/** file with the angular conversion factors */
char angConvFile[MAX_STR_LENGTH];
/** array of angular conversion constants for each module \see ::angleConversionConstant */
angleConversionConstant angOff[MAXMODS];
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) */
float fineOffset;
int angDirection;
/** beamline fine offset (of the order of mdeg, might be adjusted for each measurements) */
float fineOffset;
/** beamline offset (might be a few degrees beacuse of encoder offset - normally it is kept fixed for a long period of time) */
float globalOffset;
float globalOffset;
/** number of positions at which the detector should acquire */
int numberOfPositions;
int numberOfPositions;
/** list of encoder positions at which the detector should acquire */
float detPositions[MAXPOS];
float detPositions[MAXPOS];
/** bin size for data merging */
float binSize;
/** add encoder value flag (i.e. wether the detector is moving - 1 - or stationary - 0) */
int moveFlag;
/* infos necessary for the readout to determine the size of the data */
/** number of rois defined */
int nROI;
/** list of rois */
ROI roiLimits[MAX_ROIS];
/** readout flags */
readOutFlags roFlags;
/** number of rois defined */
int nROI;
/** list of rois */
ROI roiLimits[MAX_ROIS];
/** readout flags */
readOutFlags roFlags;
/* detector setup - not needed */
@ -268,17 +268,19 @@ typedef struct sharedSlsDetector {
using slsDetectorUtils::getDetectorType;
using slsDetectorUtils::flatFieldCorrect;
using slsDetectorUtils::rateCorrect;
using slsDetectorUtils::setBadChannelCorrection;
using postProcessing::flatFieldCorrect;
using postProcessing::rateCorrect;
using postProcessing::setBadChannelCorrection;
using angularConversion::readAngularConversion;
using angularConversion::writeAngularConversion;
using slsDetectorUtils::getAngularConversion;
using slsDetectorUtils::readAngularConversion;
using slsDetectorUtils::writeAngularConversion;
// using slsDetectorBase::getDataFromDetector;
@ -487,40 +489,17 @@ typedef struct sharedSlsDetector {
*/
int setTrimEn(int nen, int *en=NULL) {if (en) {for (int ien=0; ien<nen; ien++) thisDetector->trimEnergies[ien]=en[ien]; thisDetector->nTrimEn=nen;} return (thisDetector->nTrimEn);};
/**
Pure virtual function
reads a trim/settings file
\param fname name of the file to be read
\param myMod pointer to the module structure which has to be set. <BR> If it is NULL a new module structure will be created
\returns the pointer to myMod or NULL if reading the file failed
\sa mythenDetector::readSettingsFile
*/
sls_detector_module* readSettingsFile(string fname, sls_detector_module* myMod=NULL);
//virtual sls_detector_module* readSettingsFile(string fname, sls_detector_module* myMod=NULL);
/**
Pure virtual function
writes a trim/settings file
\param fname name of the file to be written
\param mod module structure which has to be written to file
\returns OK or FAIL if the file could not be written
\sa ::sls_detector_module mythenDetector::writeSettingsFile(string, sls_detector_module)
*/
int writeSettingsFile(string fname, sls_detector_module mod);
//virtual int writeSettingsFile(string fname, sls_detector_module mod);
/**
Pure virtual function
writes a trim/settings file for module number imod - the values will be read from the current detector structure
\param fname name of the file to be written
\param imod module number
\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(string fname, int imod);
@ -560,7 +539,7 @@ typedef struct sharedSlsDetector {
\param fname file to be read
\sa angleConversionConstant mythenDetector::readAngularConversion
*/
int readAngularConversion(string fname="");
int readAngularConversionFile(string fname="");
/**
@ -603,6 +582,8 @@ typedef struct sharedSlsDetector {
/** Returns the number of modules (without connecting to the detector) */
int getNMods(){return thisDetector->nMods;}; //
int getChansPerMod(int imod=0){return thisDetector->nChans*thisDetector->nChips;};
/** Returns the number of modules (without connecting to the detector) */
int getMaxMods(){return thisDetector->nModsMax;}; //
@ -1161,14 +1142,7 @@ typedef struct sharedSlsDetector {
*/
int getBadChannelCorrection(int *bad=NULL);
/**
set angular conversion
\param fname file with angular conversion constants ("" disable)
\returns 0 if angular conversion disabled, >0 otherwise
\sa mythenDetector::setAngularConversion
*/
int setAngularConversion(string fname="");
/**
pure virtual function
get angular conversion
@ -1179,7 +1153,7 @@ typedef struct sharedSlsDetector {
*/
int getAngularConversion(int &direction, angleConversionConstant *angconv=NULL) ;
angleConversionConstant *getAngularConversionPointer(int imod=0) {return &thisDetector->angOff[imod];};
@ -1218,43 +1192,43 @@ typedef struct sharedSlsDetector {
int rateCorrect(float* datain, float *errin, float* dataout, float *errout);
/**
pure virtual function
sets the arrays of the merged data to 0. NB The array should be created with size >= 360./getBinSize();
\param mp already merged postions
\param mv already merged data
\param me already merged errors (squared sum)
\param mm multiplicity of merged arrays
\returns OK or FAIL
\sa mythenDetector::resetMerging
*/
/* /\** */
/* pure virtual function */
/* sets the arrays of the merged data to 0. NB The array should be created with size >= 360./getBinSize(); */
/* \param mp already merged postions */
/* \param mv already merged data */
/* \param me already merged errors (squared sum) */
/* \param mm multiplicity of merged arrays */
/* \returns OK or FAIL */
/* \sa mythenDetector::resetMerging */
/* *\/ */
int resetMerging(float *mp, float *mv,float *me, int *mm);
/* int resetMerging(float *mp, float *mv,float *me, int *mm); */
/**
pure virtual function
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
\sa mythenDetector::addToMerging
*/
int addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm);
/* /\** */
/* pure virtual function */
/* 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 */
/* \sa mythenDetector::addToMerging */
/* *\/ */
/* int addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm); */
/** pure virtual function
calculates the "final" positions, data value and errors for the emrged data
\param mp already merged postions
\param mv already merged data
\param me already merged errors (squared sum)
\param mm multiplicity of merged arrays
\returns FAIL or the number of non empty bins (i.e. points belonging to the pattern)
\sa mythenDetector::finalizeMerging
*/
int finalizeMerging(float *mp, float *mv,float *me, int *mm);
/* /\** pure virtual function */
/* calculates the "final" positions, data value and errors for the emrged data */
/* \param mp already merged postions */
/* \param mv already merged data */
/* \param me already merged errors (squared sum) */
/* \param mm multiplicity of merged arrays */
/* \returns FAIL or the number of non empty bins (i.e. points belonging to the pattern) */
/* \sa mythenDetector::finalizeMerging */
/* *\/ */
/* int finalizeMerging(float *mp, float *mv,float *me, int *mm); */
/**
turns off server
@ -1266,7 +1240,15 @@ typedef struct sharedSlsDetector {
\returns myMod the pointer to the allocate dmemory location
*/
sls_detector_module* createModule();
sls_detector_module* createModule(){return createModule(thisDetector->myDetectorType);};
/** Allocates the memory for a sls_detector_module structure and initializes it
\returns myMod the pointer to the allocate dmemory location
*/
sls_detector_module* createModule(detectorType myDetectorType);
/** frees the memory for a sls_detector_module structure
\param myMod the pointer to the memory to be freed
@ -1284,7 +1266,7 @@ typedef struct sharedSlsDetector {
float getCurrentProgress();
float* convertAngles(float pos);
// float* convertAngles(float pos);
@ -1376,6 +1358,8 @@ typedef struct sharedSlsDetector {
int resetCounterBlock(int startACQ=0);
int getMoveFlag(int imod){if (moveFlag) return *moveFlag; else return 1;};
protected:

View File

@ -0,0 +1,401 @@
#include "slsDetectorActions.h"
/**
set action
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript, MAX_ACTIONS}
\param fname for script ("" disable but leaves script unchanged, "none" disables and overwrites)
\returns 0 if action disabled, >0 otherwise
*/
int slsDetectorActions::setAction(int iaction, string fname, string par) {
int am;
if (iaction>=0 && iaction<MAX_ACTIONS) {
if (fname=="") {
am=0;
} else if (fname=="none") {
am=0;
strcpy(actionScript[iaction],fname.c_str());
} else {
strcpy(actionScript[iaction],fname.c_str());
am=1;
}
if (par!="") {
strcpy(actionParameter[iaction],par.c_str());
}
if (am) {
#ifdef VERBOSE
cout << iaction << " " << hex << (1 << iaction) << " " << *actionMask << dec;
#endif
*actionMask |= (1 << iaction);
#ifdef VERBOSE
cout << " set " << hex << *actionMask << dec << endl;
#endif
} else {
#ifdef VERBOSE
cout << iaction << " " << hex << *actionMask << dec;
#endif
*actionMask &= ~(1 << iaction);
#ifdef VERBOSE
cout << " unset " << hex << *actionMask << dec << endl;
#endif
}
#ifdef VERBOSE
cout << iaction << " Action mask set to " << hex << *actionMask << dec << endl;
#endif
return am;
} else
return -1;
}
int slsDetectorActions::setActionScript(int iaction, string fname) {
#ifdef VERBOSE
#endif
return setAction(iaction,fname,"");
}
int slsDetectorActions::setActionParameter(int iaction, string par) {
int am;
if (iaction>=0 && iaction<MAX_ACTIONS) {
am= 1& ( (*actionMask) << iaction);
if (par!="") {
strcpy(actionParameter[iaction],par.c_str());
}
if ((*actionMask) & (1 << iaction))
return 1;
else
return 0;
} else
return -1;
}
/**
returns action script
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript}
\returns action script
*/
string slsDetectorActions::getActionScript(int iaction){
if (iaction>=0 && iaction<MAX_ACTIONS)
return string(actionScript[iaction]);
else
return string("wrong index");
};
/**
returns action parameter
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript}
\returns action parameter
*/
string slsDetectorActions::getActionParameter(int iaction){
if (iaction>=0 && iaction<MAX_ACTIONS)
return string(actionParameter[iaction]);
else
return string("wrong index");
}
/**
returns action mode
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript}
\returns action mode
*/
int slsDetectorActions::getActionMode(int iaction){
if (iaction>=0 && iaction<MAX_ACTIONS) {
if ((*actionMask) & (1 << iaction))
return 1;
else
return 0;
} else {
#ifdef VERBOSE
cout << "slsDetetctor : wrong action index " << iaction << endl;
#endif
return -1;
}
}
/**
set scan
\param index of the scan (0,1)
\param fname for script ("" disable)
\returns 0 if scan disabled, >0 otherwise
*/
int slsDetectorActions::setScan(int iscan, string script, int nvalues, float *values, string par, int precision) {
if (iscan>=0 && iscan<MAX_SCAN_LEVELS) {
if (script=="") {
scanMode[iscan]=0;
} else {
strcpy(scanScript[iscan],script.c_str());
if (script=="none") {
scanMode[iscan]=0;
} else if (script=="energy") {
scanMode[iscan]=1;
} else if (script=="threshold") {
scanMode[iscan]=2;
} else if (script=="trimbits") {
scanMode[iscan]=3;
} else {
scanMode[iscan]=4;
}
}
if (par!="")
strcpy(scanParameter[iscan],par.c_str());
if (nvalues>=0) {
if (nvalues==0)
scanMode[iscan]=0;
else {
nScanSteps[iscan]=nvalues;
if (nvalues>MAX_SCAN_STEPS)
nScanSteps[iscan]=MAX_SCAN_STEPS;
}
}
if (values && scanMode[iscan]>0 ) {
for (int iv=0; iv<nScanSteps[iscan]; iv++) {
scanSteps[iscan][iv]=values[iv];
}
}
if (precision>=0)
scanPrecision[iscan]=precision;
if (scanMode[iscan]>0){
*actionMask |= 1<< (iscan+MAX_ACTIONS);
} else {
*actionMask &= ~(1 << (iscan+MAX_ACTIONS));
}
setTotalProgress();
return scanMode[iscan];
} else
return -1;
}
int slsDetectorActions::setScanScript(int iscan, string script) {
if (iscan>=0 && iscan<MAX_SCAN_LEVELS) {
if (script=="") {
scanMode[iscan]=0;
} else {
strcpy(scanScript[iscan],script.c_str());
if (script=="none") {
scanMode[iscan]=0;
} else if (script=="energy") {
scanMode[iscan]=1;
} else if (script=="threshold") {
scanMode[iscan]=2;
} else if (script=="trimbits") {
scanMode[iscan]=3;
} else {
scanMode[iscan]=4;
}
}
if (scanMode[iscan]>0){
*actionMask |= (1 << (iscan+MAX_ACTIONS));
} else {
*actionMask &= ~(1 << (iscan+MAX_ACTIONS));
}
setTotalProgress();
#ifdef VERBOSE
cout << "Action mask is " << hex << actionMask << dec << endl;
#endif
return scanMode[iscan];
} else
return -1;
}
int slsDetectorActions::setScanParameter(int iscan, string par) {
if (iscan>=0 && iscan<MAX_SCAN_LEVELS) {
if (par!="")
strcpy(scanParameter[iscan],par.c_str());
return scanMode[iscan];
} else
return -1;
}
int slsDetectorActions::setScanPrecision(int iscan, int precision) {
if (iscan>=0 && iscan<MAX_SCAN_LEVELS) {
if (precision>=0)
scanPrecision[iscan]=precision;
return scanMode[iscan];
} else
return -1;
}
int slsDetectorActions::setScanSteps(int iscan, int nvalues, float *values) {
if (iscan>=0 && iscan<MAX_SCAN_LEVELS) {
if (nvalues>=0) {
if (nvalues==0)
scanMode[iscan]=0;
else {
nScanSteps[iscan]=nvalues;
if (nvalues>MAX_SCAN_STEPS)
nScanSteps[iscan]=MAX_SCAN_STEPS;
}
}
if (values) {
for (int iv=0; iv<nScanSteps[iscan]; iv++) {
scanSteps[iscan][iv]=values[iv];
}
}
if (scanMode[iscan]>0){
*actionMask |= (1 << (iscan+MAX_ACTIONS));
} else {
*actionMask &= ~(1 << (iscan+MAX_ACTIONS));
}
#ifdef VERBOSE
cout << "Action mask is " << hex << actionMask << dec << endl;
#endif
setTotalProgress();
return scanMode[iscan];
} else
return -1;
}
/**
returns scan script
\param iscan can be (0,1)
\returns scan script
*/
string slsDetectorActions::getScanScript(int iscan){
if (iscan>=0 && iscan<MAX_SCAN_LEVELS) {
if (scanMode[iscan])
return string(scanScript[iscan]);
else
return string("none");
} else
return string("wrong index");
};
/**
returns scan parameter
\param iscan can be (0,1)
\returns scan parameter
*/
string slsDetectorActions::getScanParameter(int iscan){
if (iscan>=0 && iscan<MAX_SCAN_LEVELS) {
if (scanMode[iscan])
return string(scanParameter[iscan]);
else
return string("none");
} else
return string("wrong index");
}
/**
returns scan mode
\param iscan can be (0,1)
\returns scan mode
*/
int slsDetectorActions::getScanMode(int iscan){
if (iscan>=0 && iscan<MAX_SCAN_LEVELS)
return scanMode[iscan];
else
return -1;
}
/**
returns scan steps
\param iscan can be (0,1)
\param v is the pointer to the scan steps
\returns scan steps
*/
int slsDetectorActions::getScanSteps(int iscan, float *v) {
if (iscan>=0 && iscan<MAX_SCAN_LEVELS) {
if (v) {
for (int iv=0; iv<nScanSteps[iscan]; iv++) {
v[iv]=scanSteps[iscan][iv];
}
}
setTotalProgress();
if (scanMode[iscan])
return nScanSteps[iscan];
else
return 0;
} else
return -1;
}
int slsDetectorActions::getScanPrecision(int iscan){
if (iscan>=0 && iscan<MAX_SCAN_LEVELS) {
return scanPrecision[iscan];
} else
return -1;
}

View File

@ -0,0 +1,173 @@
#ifndef SLS_DETECTOR_ACTIONS_H
#define SLS_DETECTOR_ACTIONS_H
#include "sls_detector_defs.h"
#include <string>
#include <fstream>
#define MAX_SCAN_LEVELS 2
using namespace std;
/**
class implementing the script and scan utilities of the detectors
*/
class slsDetectorActions : public slsDetectorDefs {
public :
slsDetectorActions(){};
virtual ~slsDetectorActions(){};
/**
set action
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript, MAX_ACTIONS}
\param fname for script ("" disable)
\param par for script
\returns 0 if action disabled, >0 otherwise
*/
int setAction(int iaction, string fname="", string par="");
/**
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
*/
int setActionScript(int iaction, string fname="");
/**
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
*/
int setActionParameter(int iaction, string par="");
/**
returns action script
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript}
\returns action script
*/
string getActionScript(int iaction);
/**
returns action parameter
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript}
\returns action parameter
*/
string getActionParameter(int iaction);
/**
returns action mode
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript}
\returns action mode
*/
int getActionMode(int iaction);
/**
set scan
\param index of the scan (0,1)
\param fname for script ("" disables, "none" disables and overwrites current)
\param nvalues number of steps (0 disables, -1 leaves current value)
\param values pointer to steps (if NULL leaves current values)
\param par parameter for the scan script ("" leaves unchanged)
\returns 0 is scan disabled, >0 otherwise
*/
int setScan(int index, string script="", int nvalues=-1, float *values=NULL, string par="", int precision=-1);
int setScanScript(int index, string script="");
int setScanParameter(int index, string par="");
int setScanPrecision(int index, int precision=-1);
int setScanSteps(int index, int nvalues=-1, float *values=NULL);
float getScanStep(int index, int istep){if (index<MAX_SCAN_LEVELS && istep<MAX_SCAN_STEPS) return scanSteps[index][istep]; else return -1;};
/**
returns scan script
\param iscan can be (0,1)
\returns scan script
*/
string getScanScript(int iscan);
/**
returns scan parameter
\param iscan can be (0,1)
\returns scan parameter
*/
string getScanParameter(int iscan);
/**
returns scan mode
\param iscan can be (0,1)
\returns scan mode
*/
int getScanMode(int iscan);
/**
returns scan steps
\param iscan can be (0,1)
\param v is the pointer to the scan steps
\returns scan steps
*/
int getScanSteps(int iscan, float *v=NULL);
/**
returns scan precision
\param iscan can be (0,1)
\returns scan precision
*/
int getScanPrecision(int iscan);
virtual int setTotalProgress()=0;
int getActionMask() {if (actionMask) return *actionMask; return 0;};
float getCurrentScanVariable(int index) {return currentScanVariable[index];};
// int getScanPrecision(int index) {return scanPrecision[index];};
protected:
int *actionMask;
mystring *actionScript;
mystring *actionParameter;
int *nScanSteps;
mysteps *scanSteps;
int *scanMode;
int *scanPrecision;
mystring *scanScript;
mystring *scanParameter;
/**
current scan variable of the detector
*/
float currentScanVariable[MAX_SCAN_LEVELS];
/**
current scan variable index of the detector
*/
int currentScanIndex[MAX_SCAN_LEVELS];
};
#endif

View File

@ -47,18 +47,9 @@ class slsDetectorBase : public slsDetectorDefs
*/
virtual void acquire(int delflag)=0;
/**
asks and receives all data from the detector and puts them in a data queue
\returns pointer to the front of the queue or NULL.
\sa getDataFromDetector dataQueue
*/
virtual int* readAll()=0;
/**
asks and receives a data frame from the detector and puts it in the data queue
\returns pointer to the data or NULL.
\sa getDataFromDetector
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;
@ -69,12 +60,6 @@ class slsDetectorBase : public slsDetectorDefs
/* *\/ */
/* virtual void* processData(int delflag)=0; */
/**
start detector acquisition
\returns OK/FAIL
@ -125,87 +110,27 @@ class slsDetectorBase : public slsDetectorDefs
/* virtual int removeSlsDetector(char* name){return -1;}; */
/** returns the detector hostname
\param pos position in the multi detector structure (is -1 returns concatenated hostnames divided by a +)
\returns hostname
*/
virtual string getHostname(int pos=-1)=0;
/** sets the detector hostname
\param name hostname
\param pos position in the multi detector structure (is -1 expects concatenated hostnames divided by a +)
\returns hostname
*/
virtual string setHostname(char* name, int pos=-1)=0;
/** Gets the detector id (shared memory id) of an slsDetector
\param i position in the multiSlsDetector structure
\return id or -1 if FAIL
*/
virtual int getDetectorId(int i=-1) =0;
/** Sets the detector id (shared memory id) of an slsDetector in a multiSlsDetector structure
\param ival id to be set
\param i position in the multiSlsDetector structure
\return id or -1 if FAIL (e.g. in case of an slsDetector)
*/
virtual int setDetectorId(int ival, int i=-1){return -1;};
/** sets/gets position of the master in a multi detector structure
\param i position of the detector in the multidetector structure
\returns position of the master in a multi detector structure (-1 no master or always in slsDetector)
*/
virtual int setMaster(int i=-1){return -1;};
/**
Sets/gets the synchronization mode of the various detectors
\param sync syncronization mode
\returns current syncronization mode
*/
virtual synchronizationMode setSynchronization(synchronizationMode sync=GET_SYNCHRONIZATION_MODE)=0;
/**
returns the detector trimbit/settings directory
*/
virtual char* getSettingsDir()=0;
/** sets the detector trimbit/settings directory */
virtual char* setSettingsDir(string s)=0;
/**
returns the location of the calibration files
*/
virtual char* getCalDir()=0;
/**
sets the location of the calibration files
*/
virtual char* setCalDir(string s)=0;
/**
returns the default output files path
*/
virtual char* getFilePath()=0;
virtual string getFilePath()=0;
/**
sets the default output files path
\param s file path
\returns file path
*/
virtual char* setFilePath(string s)=0;
virtual string setFilePath(string s)=0;
/**
returns the default output files root name
*/
virtual char* getFileName()=0;
virtual string getFileName()=0;
/**
sets the default output files path
*/
virtual char* setFileName(string s)=0;
virtual string setFileName(string s)=0;
/**
returns the default output file index
@ -221,20 +146,20 @@ class slsDetectorBase : public slsDetectorDefs
get flat field corrections file directory
\returns flat field correction file directory
*/
virtual char *getFlatFieldCorrectionDir()=0;
virtual string getFlatFieldCorrectionDir()=0;
/**
set flat field corrections file directory
\param dir flat field correction file directory
\returns flat field correction file directory
*/
virtual char *setFlatFieldCorrectionDir(string dir)=0;
virtual string setFlatFieldCorrectionDir(string dir)=0;
/**
get flat field corrections file name
\returns flat field correction file name
*/
virtual char *getFlatFieldCorrectionFile()=0;
virtual string getFlatFieldCorrectionFile()=0;
/**
set flat field corrections
@ -243,22 +168,6 @@ class slsDetectorBase : public slsDetectorDefs
*/
virtual int setFlatFieldCorrection(string fname="")=0;
/**
get flat field corrections
\param corr if !=NULL will be filled with the correction coefficients
\param ecorr if !=NULL will be filled with the correction coefficients errors
\returns 0 if ff correction disabled, >0 otherwise
*/
virtual int getFlatFieldCorrection(float *corr=NULL, float *ecorr=NULL)=0;
/**
set flat field corrections
\param corr if !=NULL the flat field corrections will be filled with corr (NULL usets ff corrections)
\param ecorr if !=NULL the flat field correction errors will be filled with ecorr (1 otherwise)
\returns 0 if ff correction disabled, >0 otherwise
*/
virtual int setFlatFieldCorrection(float *corr, float *ecorr=NULL)=0;
/**
set 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
@ -273,111 +182,40 @@ class slsDetectorBase : public slsDetectorDefs
*/
virtual int getRateCorrection(float &t)=0;
/**
get rate correction tau
\returns 0 if rate correction disabled, otherwise the tau used for the correction
*/
virtual float getRateCorrectionTau()=0;
/**
get rate correction
\returns 0 if rate correction disabled, >0 otherwise
*/
virtual int getRateCorrection()=0;
/**
set bad channels correction
\param fname file with bad channel list ("" disable)
\returns 0 if bad channel disabled, >0 otherwise
*/
virtual int setBadChannelCorrection(string fname="")=0;
/**
set bad channels correction
\param nch number of bad channels
\param chs array of channels
\param ff 0 if normal bad channels, 1 if ff bad channels
\returns 0 if bad channel disabled, >0 otherwise
*/
virtual int setBadChannelCorrection(int nch, int *chs, int ff=0)=0;
/**
get bad channels correction
\param bad pointer to array that if bad!=NULL will be filled with the bad channel list
\returns 0 if bad channel disabled or no bad channels, >0 otherwise
*/
virtual int getBadChannelCorrection(int *bad=NULL)=0;
/**
returns the bad channel list file
*/
virtual string getBadChannelCorrectionFile()=0;
/**
set angular conversion
\param fname file with angular conversion constants ("" disable)
\returns 0 if angular conversion disabled, >0 otherwise
*/
virtual int setAngularConversion(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 *angconv=NULL)=0;
/**
pure virtual function
returns the angular conversion file
*/
virtual string getAngularConversion()=0;
/**
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
*/
virtual float setAngularConversionParameter(angleConversionParameter c, float v)=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
*/
virtual float getAngularConversionParameter(angleConversionParameter c)=0;
/* /\** */
/* writes a data file */
/* \param name of the file to be written */
/* \param data array of data values */
/* \param err array of arrors on the data. If NULL no errors will be written */
/* \param ang array of angular values. If NULL data will be in the form chan-val(-err) otherwise ang-val(-err) */
/* \param dataformat format of the data: can be 'i' integer or 'f' float (default) */
/* \param nch number of channels to be written to file. if -1 defaults to the number of installed channels of the detector */
/* \returns OK or FAIL if it could not write the file or data=NULL */
/* /\** */
/* returns the bad channel list file */
/* *\/ */
/* virtual int writeDataFile(string fname, float *data, float *err=NULL, float *ang=NULL, char dataformat='f', int nch=-1)=0; */
/* virtual string getBadChannelCorrectionFile()=0; */
virtual int enableBadChannelCorrection(int i=-1)=0;
virtual int enableAngularConversion(int i=-1)=0;
/* /\** */
/* set angular conversion */
/* \param fname file with angular conversion constants ("" disable) */
/* \returns 0 if angular conversion disabled, >0 otherwise */
/* *\/ */
/* virtual int setAngularConversionFile(string fname="")=0; */
/* /\** */
/* writes an angular conversion file */
/* \param fname file to be written */
/* \return OK/FAIL */
/* pure virtual function */
/* returns the angular conversion file */
/* *\/ */
/* virtual int writeAngularConversion(string fname)=0; */
/* virtual string getAngularConversionFile()=0; */
/* /\** */
/* set/get if the data processing and file writing should be done by a separate thread - do not use except for debugging! */
/* \param i 0 sequencial data acquisition and file writing, 1 separate thread, -1 get */
/* \returns thread flag */
/* *\/ */
/* virtual int setThreadedProcessing(int i=-1)=0; */
/**
set positions for the acquisition
\param nPos number of positions
@ -393,122 +231,97 @@ class slsDetectorBase : public slsDetectorDefs
*/
virtual int getPositions(float *pos=NULL)=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, string fname="")=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, 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, string par="")=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, string par="")=0; */
/**
returns action script
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript}
\returns action script
*/
virtual string getActionScript(int iaction)=0;
/* /\** */
/* returns action script */
/* \param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript} */
/* \returns action script */
/* *\/ */
/* virtual string getActionScript(int iaction)=0; */
/**
returns action parameter
\param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript}
\returns action parameter
*/
virtual string getActionParameter(int iaction)=0;
/* /\** */
/* returns action parameter */
/* \param iaction can be enum {startScript, scriptBefore, headerBefore, headerAfter,scriptAfter, stopScript} */
/* \returns action parameter */
/* *\/ */
/* virtual 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, string script="")=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, 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, string spar="")=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, 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 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, float *values=NULL)=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, float *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 string getScanScript(int index)=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 string getScanScript(int index)=0; */
/**
get scan script
\param index is the scan index (0 or 1)
\returns scan script parameter
*/
virtual string getScanParameter(int index)=0;
/* /\** */
/* get scan script */
/* \param index is the scan index (0 or 1) */
/* \returns scan script parameter */
/* *\/ */
/* virtual 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 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, float *values=NULL)=0;
/**
gets the network parameters (implemented for gotthard)
\param i network parameter type can be CLIENT_IP, CLIENT_MAC, SERVER_MAC
\returns parameter
*/
virtual char *getNetworkParameter(networkParameter i)=0;
/**
sets the network parameters (implemented for gotthard)
\param i network parameter type can be CLIENT_IP, CLIENT_MAC, SERVER_MAC
\param s value to be set
\returns parameter
*/
virtual char *setNetworkParameter(networkParameter i, string s)=0;
/**
changes/gets the port number
\param t type port type can be CONTROL_PORT, DATA_PORT, STOP_PORT
\param i new port number (<1024 gets)
\returns actual port number
*/
virtual int setPort(portType t, int i=-1)=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, float *values=NULL)=0; */
/** Locks/Unlocks the connection to the server
/param lock sets (1), usets (0), gets (-1) the lock
@ -516,19 +329,6 @@ class slsDetectorBase : public slsDetectorDefs
*/
virtual int lockServer(int i=-1)=0;
/**
Returns the IP of the last client connecting to the detector
*/
virtual string getLastClientIP()=0;
/**
configures mac for gotthard readout
\returns OK or FAIL
*/
virtual int configureMAC()=0;
/**
@ -540,13 +340,6 @@ class slsDetectorBase : public slsDetectorDefs
virtual int setNumberOfModules(int i=-1, dimension d=X)=0;
/**
get the maximum size of the detector
\param d dimension
\returns maximum number of modules that can be installed in direction d
*/
virtual int getMaxNumberOfModules(dimension d=X)=0;
/**
set/get dynamic range
@ -589,78 +382,7 @@ class slsDetectorBase : public slsDetectorDefs
*/
virtual int setThresholdEnergy(int e_eV, int imod=-1, detectorSettings isettings=GET_SETTINGS)=0;
/**
get detector ids/versions for module
\param mode which id/version has to be read
\param imod module number for module serial number
\returns id
*/
virtual int64_t getId(idMode mode, int imod=0)=0;
/**
Digital test of the modules
\param mode test mode
\param imod module number for chip test or module firmware test
\returns OK or error mask
*/
virtual int digitalTest(digitalTestMode mode, int imod=0)=0;
/**
ex cute trimming
\param mode trim mode
\param par1 if noise, beam or fixed setting trimming it is count limit, if improve maximum number of iterations
\param par2 if noise or beam nsigma, if improve par2!=means vthreshold will be optimized, if fixed settings par2<0 trimwith median, par2>=0 trim with level
\param imod module number (-1 all)
\returns OK or FAIl (FAIL also if some channel are 0 or 63
*/
virtual int executeTrimming(trimMode mode, int par1, int par2, int imod=-1)=0;
/**
returns currently the loaded trimfile/settingsfile name
*/
virtual const char *getSettingsFile()=0;
/** loads the modules settings/trimbits reading from a file
\param fname file name . If not specified, extension is automatically generated!
\param imod module number, -1 means all modules
\returns OK or FAIL
*/
virtual int loadSettingsFile(string fname, int imod=-1)=0;
/** saves the modules settings/trimbits writing to a file
\param fname file name . Axtension is automatically generated!
\param imod module number, -1 means all modules
\returns OK or FAIL
*/
virtual int saveSettingsFile(string fname, int imod=-1)=0;
/**
set dacs value
\param val value (in V)
\param index DAC index
\param imod module number (if -1 alla modules)
\returns current DAC value
*/
virtual float setDAC(float val, dacIndex index , int imod=-1)=0;
/**
gets ADC value
\param index ADC index
\param imod module number
\returns current ADC value
*/
virtual float getADC(dacIndex index, int imod=0)=0;
/**
@ -672,60 +394,6 @@ class slsDetectorBase : public slsDetectorDefs
virtual int64_t setTimer(timerIndex index, int64_t t=-1)=0;
/**
get current timer value
\param index timer index
\returns elapsed time value in ns or number of...(e.g. frames, gates, probes)
*/
virtual int64_t getTimeLeft(timerIndex index)=0;
/** sets/gets the value of important readout speed parameters
\param sp is the parameter to be set/get
\param value is the value to be set, if -1 get value
\returns current value for the specified parameter
\sa speedVariable
*/
virtual int setSpeed(speedVariable sp, int value=-1)=0;
/** sets the number of trim energies and their value \sa sharedSlsDetector
\param nen number of energies
\param en array of energies
\returns number of trim energies
unused!
*/
virtual int setTrimEn(int nen, int *en=NULL)=0;
/** returns the number of trim energies and their value \sa sharedSlsDetector
\param en pointer to the array that will contain the trim energies (in ev)
\returns number of trim energies
unused!
*/
virtual int getTrimEn(int *en=NULL)=0;
/**
set/get the use of an external signal
\param pol meaning of the signal \sa externalSignalFlag
\param signalindex index of the signal
\returns current meaning of signal signalIndex
*/
virtual externalSignalFlag setExternalSignalFlags(externalSignalFlag pol=GET_EXTERNAL_SIGNAL_FLAG , int signalindex=0)=0;
/**
set/get readout flags
\param flag readout flag to be set
\returns current flag
*/
virtual int setReadOutFlags(readOutFlags flag=GET_READOUT_FLAGS)=0;
/**
set/get the external communication mode
@ -736,19 +404,19 @@ class slsDetectorBase : public slsDetectorDefs
/**
Reads the configuration file
Reads 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
\returns OK or FAIL
*/
virtual int readConfigurationFile(string const fname)=0;
/**
Writes the configuration file
\param fname file name
\returns OK or FAIL
*/
virtual int writeConfigurationFile(string const fname)=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 */
/* \returns OK or FAIL */
/* *\/ */
/* virtual int writeConfigurationFile(string const fname)=0; */
/**
Reads the parameters from the detector and writes them to file

View File

@ -114,6 +114,13 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdAngConv;
i++;
descrToFuncMap[i].m_pFuncName="moveflag" ;//
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdAngConv;
i++;
descrToFuncMap[i].m_pFuncName="threaded"; //
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdThreaded;
i++;
@ -1508,9 +1515,9 @@ string slsDetectorCommand::cmdAngConv(int narg, char *args[], int action){
if (sval=="none")
sval="";
myDet->setAngularConversion(sval);
myDet->setAngularConversionFile(sval);
return string(myDet->getAngularConversion());
return string(myDet->getAngularConversionFile());
} else if (action==GET_ACTION) {
if (narg>1)
sval=string(args[1]);
@ -1522,7 +1529,7 @@ string slsDetectorCommand::cmdAngConv(int narg, char *args[], int action){
myDet->writeAngularConversion(sval.c_str());
return sval;
}
return string(myDet->getAngularConversion());
return string(myDet->getAngularConversionFile());
} else {
return string("none");
}
@ -1541,6 +1548,8 @@ string slsDetectorCommand::cmdAngConv(int narg, char *args[], int action){
} else if (string(args[0])==string("angdir")) {
c=ANGULAR_DIRECTION;
} else if (string(args[0])==string("moveflag")) {
c=MOVE_FLAG;
} else
return string("could not decode angular conversion parameter ")+cmd;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,87 @@
#---------------------------------------------------
include Makefile.arch
#------------------------------------------------------------------------------
SLSDETO = TSlsDetectorDict.$(ObjSuf) energyCalibration.$(ObjSuf) angularCalibration.$(ObjSuf)
SLSDETSO = libTSlsDetector.$(DllSuf)
CXXFLAGS += -Wno-deprecated
#LIBS += -L../slsDetectorSoftware -lSlsDetector -pthread
CXXFLAGS += -I ../usersFunctions
HEADERS= energyCalibration.h angularCalibration.h
#-------------------------------------------------------------------------------
#----------- do the shared library
$(SLSDETSO): $(SLSDETO)
@echo "Generating shared library $@..."
$(LD) $(SOFLAGS) $(LDFLAGS) -o $@ $(LIBS) $^
# ---------- Default rule
%.$(ObjSuf): %.cpp
@echo "Compiling source $@..."
$(CXX) $(CXXFLAGS) -c $<
#----------- do the dictionary
TSlsDetectorDict.$(SrcSuf): $(HEADERS)
@echo "Generating dictionary $@..."
rootcint -f $@ -c -p $^
#-------------------------------------------------------------------------------
all: $(SLSDETSO)
clean:
@rm -f $(SLSDETO) core
distclean: clean
@rm -f *Dict.* *.so *.o

View File

@ -0,0 +1,575 @@
# -*- mode: makefile -*-
#
# Makefile containing platform dependencies for ROOT based projects.
#
# Copyright (c) 2000 Rene Brun and Fons Rademakers
#
# Author: Fons Rademakers, 29/2/2000
ROOTCONFIG := root-config
ARCH := $(shell $(ROOTCONFIG) --arch)
PLATFORM := $(shell $(ROOTCONFIG) --platform)
ALTCC := $(shell $(ROOTCONFIG) --cc)
ALTCXX := $(shell $(ROOTCONFIG) --cxx)
ALTF77 := $(shell $(ROOTCONFIG) --f77)
ALTLD := $(shell $(ROOTCONFIG) --ld)
#CXX =
ObjSuf = o
SrcSuf = cpp
ExeSuf =
DllSuf = so
OutPutOpt = -o # keep whitespace after "-o"
ifeq (debug,$(findstring debug,$(ROOTBUILD)))
OPT = -g
OPT2 = -g
else
ifneq ($(findstring debug, $(strip $(shell $(ROOTCONFIG) --config))),)
OPT = -g
OPT2 = -g
else
OPT = -O
OPT2 = -O2
endif
endif
ROOTCFLAGS := $(shell $(ROOTCONFIG) --cflags)
ROOTLDFLAGS := $(shell $(ROOTCONFIG) --ldflags)
ROOTLIBS := $(shell $(ROOTCONFIG) --libs)
ROOTGLIBS := $(shell $(ROOTCONFIG) --glibs)
HASTHREAD := $(shell $(ROOTCONFIG) --has-thread)
ROOTDICTTYPE := $(shell $(ROOTCONFIG) --dicttype)
NOSTUBS := $(shell $(ROOTCONFIG) --nostubs)
ROOTCINT := rootcint
# Stub Functions Generation
ifeq ($(NOSTUBS),yes)
ROOTCINT = export CXXFLAGS="$(CXXFLAGS)"; $(ROOTSYS)/core/utils/src/rootcint_nostubs.sh -$(ROOTDICTTYPE)
endif
ifeq ($(ARCH),hpuxacc)
# HP-UX 10.x with aCC
CXX = aCC
CXXFLAGS = $(OPT) +Z
LD = aCC
LDFLAGS = $(OPT) -z
SOFLAGS = -b
endif
ifeq ($(ARCH),hpuxia64acc)
# HP-UX 11i 1.5 (IA-64) with aCC
CXX = aCC
CXXFLAGS = +DD64 $(OPT) +Z
LD = aCC
LDFLAGS = +DD64 $(OPT) -z
SOFLAGS = -b
endif
ifeq ($(ARCH),hpuxgcc)
# HP-UX 10.x with g++
CXXFLAGS = $(OPT) -fPIC
CXX = g++
LD = g++
LDFLAGS = $(OPT)
SOFLAGS = -fPIC -shared
endif
ifeq ($(ARCH),hurddeb)
# GNU/Hurd
CXX = g++
CXXFLAGS = $(OPT2) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT2)
SOFLAGS = -shared
endif
ifeq ($(ARCH),aix)
# IBM AIX xlC 4.x
CXX = xlC
CXXFLAGS = $(OPT)
LD = xlC
LDFLAGS = $(OPT)
SOFLAGS =
DllSuf = a
endif
ifeq ($(ARCH),aix5)
# IBM AIX xlC 5.x
CXX = xlC
CXXFLAGS = $(OPT)
LD = xlC
LDFLAGS = $(OPT)
SOFLAGS =
DllSuf = a
endif
ifeq ($(ARCH),aixgcc)
# IBM AIX with GCC
CXX = g++
CXXFLAGS = $(OPT)
LD = g++
LDFLAGS = $(OPT)
SOFLAGS = -shared
DllSuf = a
EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
endif
ifeq ($(ARCH),solaris)
# Solaris CC
CXX = /opt/SUNWspro/bin/CC
CXXFLAGS = $(OPT) -KPIC
LD = /opt/SUNWspro/bin/CC
LDFLAGS = $(OPT)
SOFLAGS = -G
endif
ifeq ($(ARCH),solarisCC5)
# Solaris CC 5.0
CXX = CC
CXXFLAGS = $(OPT) -KPIC
LD = CC
LDFLAGS = $(OPT)
SOFLAGS = -G
endif
ifeq ($(ARCH),solarisgcc)
# Solaris gcc
CXX = g++
CXXFLAGS = $(OPT) -fPIC
LD = g++
LDFLAGS = $(OPT)
SOFLAGS = -shared
endif
ifeq ($(ARCH),solariskcc)
# Solaris kcc
CXX = KCC --one_instantiation_per_object
CXXFLAGS = -O4 -KPIC
LD = KCC
LDFLAGS = -O4
SOFLAGS =
endif
ifeq ($(ARCH),solarisx86)
# Solaris CC on Intel
CXX = CC
CXXFLAGS = $(OPT) -KPIC
LD = CC
LDFLAGS = $(OPT)
SOFLAGS = -G
endif
ifeq ($(ARCH),sgicc)
# SGI
CXX = CC -n32 -I/usr/include/CC.sgi
CXXFLAGS = $(OPT)
LD = CC -n32 -LANG:std -I/usr/include/CC.sgi
LDFLAGS = $(OPT)
SOFLAGS = -shared
endif
ifeq ($(ARCH),sgicc64)
# SGI
CXX = CC -64 -I/usr/include/CC.sgi
CXXFLAGS = $(OPT)
LD = CC -64 -LANG:std -I/usr/include/CC.sgi
LDFLAGS = $(OPT)
SOFLAGS = -shared
endif
ifeq ($(ARCH),sgigcc)
# SGI 6.x with gcc
CXX = g++
CXXFLAGS = $(OPT) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT) -Wl,-u,__builtin_new -Wl,-u,__builtin_delete -Wl,-u,__nw__FUiPv
SOFLAGS = -shared
endif
ifeq ($(ARCH),sgin32gcc)
# SGI 6.x with gcc for n32 ABI
CXX = g++
CXXFLAGS = $(OPT) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT) -L/usr/lib32 -Wl,-woff,134 -lgen
SOFLAGS = -shared
endif
ifeq ($(ARCH),sgikcc)
# SGI with KCC
CXX = KCC -n32 --one_instantiation_per_object
CXXFLAGS = $(OPT)
LD = KCC -n32
LDFLAGS = $(OPT)
SOFLAGS =
endif
ifeq ($(ARCH),alphagcc)
# Alpha/OSF with gcc
CXX = g++
CXXFLAGS = $(OPT2) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT2)
SOFLAGS = -Wl,-expect_unresolved,* -shared
endif
ifeq ($(ARCH),alphakcc)
# Alpha/OSF with kai compiler (not yet valid)
CXX = KCC --one_instantiation_per_object
CXXFLAGS = $(OPT) -fPIC
LD = KCC
LDFLAGS = $(OPT)
SOFLAGS = -Wl,-expect_unresolved,* -shared
endif
ifeq ($(ARCH),alphacxx6)
# Alpha/OSF with cxx6
CXX = cxx
CXXFLAGS = $(OPT)
LD = cxx
LDFLAGS = $(OPT)
SOFLAGS = -shared -nocxxstd -Wl,-expect_unresolved,*,-msym
endif
ifeq ($(ARCH),linuxdeb2ppc)
# Debian/Linux on the PowerPC
CXX = g++
CXXFLAGS = $(OPT2) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT2)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linux)
# Linux with egcs, gcc 2.9x, gcc 3.x
CXX = g++
CXXFLAGS = $(OPT2) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT2)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxkcc)
# Linux with the KAI compiler
CXX = KCC --one_instantiation_per_object
CXXFLAGS = $(OPT) -fPIC +K0
LD = KCC
LDFLAGS = $(OPT) $(shell $(ROOTCONFIG) --cflags)
SOFLAGS =
endif
ifeq ($(ARCH),linuxicc)
# Linux with Intel icc compiler
ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
cut -d'.' -f1)
ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
cut -d'.' -f2)
CXX = icc
CXXFLAGS = $(OPT) -fPIC -wd1476
LD = icpc
LDFLAGS = $(OPT)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxppcgcc)
# PPC Linux with gcc and glibc
CXX = g++
CXXFLAGS = $(OPT2) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT2)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxia64gcc)
# Itanium Linux with gcc 2.9x
CXX = g++
CXXFLAGS = $(OPT2) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT2)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxia64sgi)
# Itanium Linux with sgiCC
CXX = sgiCC
CXXFLAGS = $(OPT) -Wall -fPIC
LD = gsgiCC
LDFLAGS = $(OPT)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxia64ecc)
# Itanium Linux with Intel icc (was ecc)
ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
cut -d'.' -f1)
ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
cut -d'.' -f2)
CXX = icc
CXXFLAGS = $(OPT) -fPIC -wd1476 -ftz
LD = icpc
LDFLAGS = $(OPT)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxx8664gcc)
# AMD Opteron and Intel EM64T (64 bit mode) Linux with gcc 3.x
CXX = g++
CXXFLAGS = $(OPT2) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT2)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxppc64gcc)
# PPC64 Linux with gcc 3.x
CXX = g++
CXXFLAGS = $(OPT) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxx8664icc)
# AMD Opteron and Intel EM64T (64 bit mode) Linux with Intel icc compiler
CXX = icc
CXXFLAGS = $(OPT) -fPIC -wd1476 -wd1572
LD = icpc
LDFLAGS = $(OPT)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxalphagcc)
# Alpha Linux with gcc
CXX = g++
CXXFLAGS = $(OPT2) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT2)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxmips)
# GNU/Linux on mips (BE/LE, O32/N32/N64) with gcc
CXX = g++
CXXFLAGS = $(OPT2) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT2)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxhppa)
# GNU/Linux on hppa with gcc
CXX = g++
CXXFLAGS = $(OPT2) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT2)
SOFLAGS = -shared
endif
ifeq ($(ARCH),linuxarm)
# ARM Linux with egcs
CXX = g++
CXXFLAGS = $(OPT) -Wall -fPIC
LD = g++
LDFLAGS = $(OPT)
SOFLAGS = -shared
endif
ifeq ($(ARCH),freebsd4)
# FreeBSD with glibc
CXX = g++
CXXFLAGS = $(OPT) -W -Wall -fPIC
LD = $(CXX)
LDFLAGS = $(OPT)
SOFLAGS = -shared -Wl,-x
endif
ifeq ($(ARCH),freebsd5)
# FreeBSD with glibc
CXX = g++
CXXFLAGS = $(OPT) -W -Wall -fPIC
LD = $(CXX)
LDFLAGS = $(OPT)
SOFLAGS = -shared -Wl,-x
endif
ifeq ($(ARCH),freebsd7)
# FreeBSD with libc
CXX = g++
CXXFLAGS = $(OPT) -W -Wall -fPIC
LD = $(CXX)
LDFLAGS = $(OPT)
SOFLAGS = -shared -Wl,-x
endif
ifeq ($(ARCH),openbsd)
# OpenBSD with libc
CXX = g++
CXXFLAGS = $(OPT) -pipe -W -Wall -fPIC
LD = g++
LDFLAGS = $(OPT)
SOFLAGS = -shared -Wl,-x
endif
ifeq ($(ARCH),macosx)
# MacOS X with cc (GNU cc 2.95.2 and gcc 3.3)
MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR)
CXX = g++
CXXFLAGS = $(OPT2) -pipe -Wall -W -Woverloaded-virtual
LD = $(MACOSXTARGET) g++
LDFLAGS = $(OPT2)
# The SOFLAGS will be used to create the .dylib,
# the .so will be created separately
ifeq ($(subst $(MACOSX_MINOR),,1234),1234)
DllSuf = so
else
DllSuf = dylib
endif
UNDEFOPT = dynamic_lookup
ifneq ($(subst $(MACOSX_MINOR),,12),12)
UNDEFOPT = suppress
LD = g++
endif
SOFLAGS = -dynamiclib -single_module -undefined $(UNDEFOPT) -install_name $(CURDIR)/
endif
ifeq ($(ARCH),macosxicc)
# MacOS X with Intel icc compiler
MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR)
ifeq ($(MACOSX_MINOR),5)
MACOSX_MINOR := 4
endif
CXX = icc
CXXFLAGS = $(OPT) -fPIC -wd1476
LD = $(MACOSXTARGET) icpc
LDFLAGS = $(OPT)
# The SOFLAGS will be used to create the .dylib,
# the .so will be created separately
ifeq ($(subst $(MACOSX_MINOR),,1234),1234)
DllSuf = so
else
DllSuf = dylib
endif
SOFLAGS = -dynamiclib -single_module -undefined dynamic_lookup -install_name $(CURDIR)/
endif
ifeq ($(ARCH),macosx64)
# MacOS X >= 10.4 with gcc 64 bit mode (GNU gcc 4.*)
# Only specific option (-m64) comes from root-config
MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR)
CXX = g++
CXXFLAGS = $(OPT2) -pipe -Wall -W -Woverloaded-virtual
LD = $(MACOSXTARGET) g++
LDFLAGS = $(OPT2)
# The SOFLAGS will be used to create the .dylib,
# the .so will be created separately
ifeq ($(subst $(MACOSX_MINOR),,1234),1234)
DllSuf = so
else
DllSuf = dylib
endif
SOFLAGS = -dynamiclib -single_module -undefined dynamic_lookup -install_name $(CURDIR)/
endif
ifeq ($(ARCH),macosxxlc)
# MacOS X with IBM xlC compiler
MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR)
CXX = xlC
CXXFLAGS = $(OPT)
LD = $(MACOSXTARGET) xlC
LDFLAGS = $(OPT) -Wl,-bind_at_load
# The SOFLAGS will be used to create the .dylib,
# the .so will be created separately
DllSuf = dylib
UNDEFOPT = dynamic_lookup
ifneq ($(subst $(MACOSX_MINOR),,12),12)
UNDEFOPT = suppress
LD = xlC
endif
SOFLAGS = -qmkshrobj -single_module -undefined $(UNDEFOPT) -install_name $(CURDIR)/
endif
ifeq ($(ARCH),win32)
# Windows with the VC++ compiler
VC_MAJOR := $(shell unset VS_UNICODE_OUTPUT; cl.exe 2>&1 | awk '{ if (NR==1) print $$8 }' | \
cut -d'.' -f1)
ObjSuf = obj
SrcSuf = cxx
ExeSuf = .exe
DllSuf = dll
OutPutOpt = -out:
CXX = cl
ifeq (debug,$(findstring debug,$(ROOTBUILD)))
CXXOPT = -Z7
LDOPT = -debug
else
ifneq ($(findstring debug, $(strip $(shell $(ROOTCONFIG) --config))),)
CXXOPT = -Z7
LDOPT = -debug
else
CXXOPT = -O2
LDOPT = -opt:ref
endif
endif
ROOTINCDIR := -I$(shell cygpath -m `$(ROOTCONFIG) --incdir`)
CXXFLAGS = $(CXXOPT) -nologo $(ROOTINCDIR) -FIw32pragma.h
LD = link
LDFLAGS = $(LDOPT) -nologo
SOFLAGS = -DLL
EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
ifneq (,$(findstring $(VC_MAJOR),14 15))
MT_EXE = mt -nologo -manifest $@.manifest -outputresource:$@\;1; rm -f $@.manifest
MT_DLL = mt -nologo -manifest $@.manifest -outputresource:$@\;2; rm -f $@.manifest
else
MT_EXE =
MT_DLL =
endif
endif
ifeq ($(ARCH),win32gcc)
# Windows with gcc
DllSuf = dll
ExeSuf = .exe
CXX = g++
CXXFLAGS = $(OPT) -pipe -Wall -Woverloaded-virtual -I/usr/X11R6/include
LD = g++
LDFLAGS = $(OPT) -Wl,--enable-auto-import \
-Wl,--enable-runtime-pseudo-reloc \
-L/usr/X11R6/lib
SOFLAGS = -shared -Wl,--enable-auto-image-base \
-Wl,--export-all-symbols
EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
endif
ifeq ($(CXX),)
$(error $(ARCH) invalid architecture)
endif
CXXFLAGS += $(ROOTCFLAGS)
LDFLAGS += $(ROOTLDFLAGS)
LIBS = $(ROOTLIBS) $(SYSLIBS)
GLIBS = $(ROOTGLIBS) $(SYSLIBS)
ifneq ($(ALTCC),)
CC = $(ALTCC)
endif
ifneq ($(ALTCXX),)
CXX = $(ALTCXX)
endif
ifneq ($(ALTF77),)
F77 = $(ALTF77)
endif
ifneq ($(ALTLD),)
LD = $(ALTLD)
endif
ifneq ($(findstring g++, $(CXX)),)
GCC_MAJOR := $(shell $(CXX) -dumpversion 2>&1 | cut -d'.' -f1)
GCC_MINOR := $(shell $(CXX) -dumpversion 2>&1 | cut -d'.' -f2)
endif

View File

@ -0,0 +1,691 @@
//
// File generated by rootcint at Thu Mar 29 16:09:00 2012
// Do NOT change. Changes will be lost next time file is generated
//
#include "RConfig.h" //rootcint 4834
#if !defined(R__ACCESS_IN_SYMBOL)
//Break the privacy of classes -- Disabled for the moment
#define private public
#define protected public
#endif
// Since CINT ignores the std namespace, we need to do so in this file.
namespace std {} using namespace std;
#include "TSlsDetectorDict.h"
#include "TClass.h"
#include "TBuffer.h"
#include "TMemberInspector.h"
#include "TError.h"
#ifndef G__ROOT
#define G__ROOT
#endif
#include "RtypesImp.h"
#include "TIsAProxy.h"
// START OF SHADOWS
namespace ROOT {
namespace Shadow {
} // of namespace Shadow
} // of namespace ROOT
// END OF SHADOWS
namespace ROOT {
void energyCalibration_ShowMembers(void *obj, TMemberInspector &R__insp, char *R__parent);
static void energyCalibration_Dictionary();
static void *new_energyCalibration(void *p = 0);
static void *newArray_energyCalibration(Long_t size, void *p);
static void delete_energyCalibration(void *p);
static void deleteArray_energyCalibration(void *p);
static void destruct_energyCalibration(void *p);
// Function generating the singleton type initializer
static TGenericClassInfo *GenerateInitInstanceLocal(const ::energyCalibration*)
{
::energyCalibration *ptr = 0;
static ::TVirtualIsAProxy* isa_proxy = new ::TIsAProxy(typeid(::energyCalibration),0);
static ::ROOT::TGenericClassInfo
instance("energyCalibration", "./energyCalibration.h", 168,
typeid(::energyCalibration), DefineBehavior(ptr, ptr),
0, &energyCalibration_Dictionary, isa_proxy, 0,
sizeof(::energyCalibration) );
instance.SetNew(&new_energyCalibration);
instance.SetNewArray(&newArray_energyCalibration);
instance.SetDelete(&delete_energyCalibration);
instance.SetDeleteArray(&deleteArray_energyCalibration);
instance.SetDestructor(&destruct_energyCalibration);
return &instance;
}
TGenericClassInfo *GenerateInitInstance(const ::energyCalibration*)
{
return GenerateInitInstanceLocal((::energyCalibration*)0);
}
// Static variable to force the class initialization
static ::ROOT::TGenericClassInfo *_R__UNIQUE_(Init) = GenerateInitInstanceLocal((const ::energyCalibration*)0x0); R__UseDummy(_R__UNIQUE_(Init));
// Dictionary for non-ClassDef classes
static void energyCalibration_Dictionary() {
::ROOT::GenerateInitInstanceLocal((const ::energyCalibration*)0x0)->GetClass();
}
} // end of namespace ROOT
namespace ROOT {
void angularCalibration_ShowMembers(void *obj, TMemberInspector &R__insp, char *R__parent);
static void angularCalibration_Dictionary();
static void *new_angularCalibration(void *p = 0);
static void *newArray_angularCalibration(Long_t size, void *p);
static void delete_angularCalibration(void *p);
static void deleteArray_angularCalibration(void *p);
static void destruct_angularCalibration(void *p);
// Function generating the singleton type initializer
static TGenericClassInfo *GenerateInitInstanceLocal(const ::angularCalibration*)
{
::angularCalibration *ptr = 0;
static ::TVirtualIsAProxy* isa_proxy = new ::TIsAProxy(typeid(::angularCalibration),0);
static ::ROOT::TGenericClassInfo
instance("angularCalibration", "./angularCalibration.h", 35,
typeid(::angularCalibration), DefineBehavior(ptr, ptr),
0, &angularCalibration_Dictionary, isa_proxy, 0,
sizeof(::angularCalibration) );
instance.SetNew(&new_angularCalibration);
instance.SetNewArray(&newArray_angularCalibration);
instance.SetDelete(&delete_angularCalibration);
instance.SetDeleteArray(&deleteArray_angularCalibration);
instance.SetDestructor(&destruct_angularCalibration);
return &instance;
}
TGenericClassInfo *GenerateInitInstance(const ::angularCalibration*)
{
return GenerateInitInstanceLocal((::angularCalibration*)0);
}
// Static variable to force the class initialization
static ::ROOT::TGenericClassInfo *_R__UNIQUE_(Init) = GenerateInitInstanceLocal((const ::angularCalibration*)0x0); R__UseDummy(_R__UNIQUE_(Init));
// Dictionary for non-ClassDef classes
static void angularCalibration_Dictionary() {
::ROOT::GenerateInitInstanceLocal((const ::angularCalibration*)0x0)->GetClass();
}
} // end of namespace ROOT
namespace ROOT {
// Wrappers around operator new
static void *new_energyCalibration(void *p) {
return p ? ::new((::ROOT::TOperatorNewHelper*)p) ::energyCalibration : new ::energyCalibration;
}
static void *newArray_energyCalibration(Long_t nElements, void *p) {
return p ? ::new((::ROOT::TOperatorNewHelper*)p) ::energyCalibration[nElements] : new ::energyCalibration[nElements];
}
// Wrapper around operator delete
static void delete_energyCalibration(void *p) {
delete ((::energyCalibration*)p);
}
static void deleteArray_energyCalibration(void *p) {
delete [] ((::energyCalibration*)p);
}
static void destruct_energyCalibration(void *p) {
typedef ::energyCalibration current_t;
((current_t*)p)->~current_t();
}
} // end of namespace ROOT for class ::energyCalibration
namespace ROOT {
// Wrappers around operator new
static void *new_angularCalibration(void *p) {
return p ? ::new((::ROOT::TOperatorNewHelper*)p) ::angularCalibration : new ::angularCalibration;
}
static void *newArray_angularCalibration(Long_t nElements, void *p) {
return p ? ::new((::ROOT::TOperatorNewHelper*)p) ::angularCalibration[nElements] : new ::angularCalibration[nElements];
}
// Wrapper around operator delete
static void delete_angularCalibration(void *p) {
delete ((::angularCalibration*)p);
}
static void deleteArray_angularCalibration(void *p) {
delete [] ((::angularCalibration*)p);
}
static void destruct_angularCalibration(void *p) {
typedef ::angularCalibration current_t;
((current_t*)p)->~current_t();
}
} // end of namespace ROOT for class ::angularCalibration
/********************************************************
* TSlsDetectorDict.cpp
* CAUTION: DON'T CHANGE THIS FILE. THIS FILE IS AUTOMATICALLY GENERATED
* FROM HEADER FILES LISTED IN G__setup_cpp_environmentXXX().
* CHANGE THOSE HEADER FILES AND REGENERATE THIS FILE.
********************************************************/
#ifdef G__MEMTEST
#undef malloc
#undef free
#endif
#if defined(__GNUC__) && (__GNUC__ > 3) && (__GNUC_MINOR__ > 1)
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif
extern "C" void G__cpp_reset_tagtableTSlsDetectorDict();
extern "C" void G__set_cpp_environmentTSlsDetectorDict() {
G__add_compiledheader("TObject.h");
G__add_compiledheader("TMemberInspector.h");
G__add_compiledheader("energyCalibration.h");
G__add_compiledheader("angularCalibration.h");
G__cpp_reset_tagtableTSlsDetectorDict();
}
#include <new>
extern "C" int G__cpp_dllrevTSlsDetectorDict() { return(30051515); }
/*********************************************************
* Member function Interface Method
*********************************************************/
/* energyCalibration */
static int G__TSlsDetectorDict_85_0_1(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
energyCalibration* p = NULL;
char* gvp = (char*) G__getgvp();
int n = G__getaryconstruct();
if (n) {
if ((gvp == (char*)G__PVOID) || (gvp == 0)) {
p = new energyCalibration[n];
} else {
p = new((void*) gvp) energyCalibration[n];
}
} else {
if ((gvp == (char*)G__PVOID) || (gvp == 0)) {
p = new energyCalibration;
} else {
p = new((void*) gvp) energyCalibration;
}
}
result7->obj.i = (long) p;
result7->ref = (long) p;
result7->type = 'u';
result7->tagnum = G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration);
return(1 || funcname || hash || result7 || libp) ;
}
static int G__TSlsDetectorDict_85_0_2(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
switch (libp->paran) {
case 1:
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setPlotFlag((int) G__int(libp->para[0])));
break;
case 0:
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setPlotFlag());
break;
}
return(1 || funcname || hash || result7 || libp) ;
}
static int G__TSlsDetectorDict_85_0_3(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
switch (libp->paran) {
case 1:
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setScanSign((int) G__int(libp->para[0])));
break;
case 0:
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setScanSign());
break;
}
return(1 || funcname || hash || result7 || libp) ;
}
static int G__TSlsDetectorDict_85_0_4(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
switch (libp->paran) {
case 1:
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setChargeSharing((int) G__int(libp->para[0])));
break;
case 0:
G__letint(result7, 105, (long) ((energyCalibration*) G__getstructoffset())->setChargeSharing());
break;
}
return(1 || funcname || hash || result7 || libp) ;
}
// automatic copy constructor
static int G__TSlsDetectorDict_85_0_5(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
energyCalibration* p;
void* tmp = (void*) G__int(libp->para[0]);
p = new energyCalibration(*(energyCalibration*) tmp);
result7->obj.i = (long) p;
result7->ref = (long) p;
result7->type = 'u';
result7->tagnum = G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration);
return(1 || funcname || hash || result7 || libp) ;
}
// automatic destructor
typedef energyCalibration G__TenergyCalibration;
static int G__TSlsDetectorDict_85_0_6(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
char* gvp = (char*) G__getgvp();
long soff = G__getstructoffset();
int n = G__getaryconstruct();
//
//has_a_delete: 0
//has_own_delete1arg: 0
//has_own_delete2arg: 0
//
if (!soff) {
return(1);
}
if (n) {
if (gvp == (char*)G__PVOID) {
delete[] (energyCalibration*) soff;
} else {
G__setgvp((long) G__PVOID);
for (int i = n - 1; i >= 0; --i) {
((energyCalibration*) (soff+(sizeof(energyCalibration)*i)))->~G__TenergyCalibration();
}
G__setgvp((long)gvp);
}
} else {
if (gvp == (char*)G__PVOID) {
delete (energyCalibration*) soff;
} else {
G__setgvp((long) G__PVOID);
((energyCalibration*) (soff))->~G__TenergyCalibration();
G__setgvp((long)gvp);
}
}
G__setnull(result7);
return(1 || funcname || hash || result7 || libp) ;
}
// automatic assignment operator
static int G__TSlsDetectorDict_85_0_7(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
energyCalibration* dest = (energyCalibration*) G__getstructoffset();
*dest = *(energyCalibration*) libp->para[0].ref;
const energyCalibration& obj = *dest;
result7->ref = (long) (&obj);
result7->obj.i = (long) (&obj);
return(1 || funcname || hash || result7 || libp) ;
}
/* angularCalibration */
static int G__TSlsDetectorDict_87_0_1(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
angularCalibration* p = NULL;
char* gvp = (char*) G__getgvp();
int n = G__getaryconstruct();
if (n) {
if ((gvp == (char*)G__PVOID) || (gvp == 0)) {
p = new angularCalibration[n];
} else {
p = new((void*) gvp) angularCalibration[n];
}
} else {
if ((gvp == (char*)G__PVOID) || (gvp == 0)) {
p = new angularCalibration;
} else {
p = new((void*) gvp) angularCalibration;
}
}
result7->obj.i = (long) p;
result7->ref = (long) p;
result7->type = 'u';
result7->tagnum = G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration);
return(1 || funcname || hash || result7 || libp) ;
}
static int G__TSlsDetectorDict_87_0_2(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
switch (libp->paran) {
case 1:
G__letint(result7, 105, (long) ((angularCalibration*) G__getstructoffset())->setDirection((int) G__int(libp->para[0])));
break;
case 0:
G__letint(result7, 105, (long) ((angularCalibration*) G__getstructoffset())->setDirection());
break;
}
return(1 || funcname || hash || result7 || libp) ;
}
static int G__TSlsDetectorDict_87_0_3(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
G__letdouble(result7, 102, (double) ((angularCalibration*) G__getstructoffset())->setEncoder((float) G__double(libp->para[0])));
return(1 || funcname || hash || result7 || libp) ;
}
static int G__TSlsDetectorDict_87_0_4(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
G__letdouble(result7, 102, (double) ((angularCalibration*) G__getstructoffset())->getEncoder());
return(1 || funcname || hash || result7 || libp) ;
}
static int G__TSlsDetectorDict_87_0_5(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
G__letdouble(result7, 102, (double) ((angularCalibration*) G__getstructoffset())->setTotalOffset((float) G__double(libp->para[0])));
return(1 || funcname || hash || result7 || libp) ;
}
static int G__TSlsDetectorDict_87_0_6(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
G__letdouble(result7, 102, (double) ((angularCalibration*) G__getstructoffset())->getTotalOffset());
return(1 || funcname || hash || result7 || libp) ;
}
static int G__TSlsDetectorDict_87_0_7(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
((angularCalibration*) G__getstructoffset())->setAngularRange((float) G__double(libp->para[0]), (float) G__double(libp->para[1]));
G__setnull(result7);
return(1 || funcname || hash || result7 || libp) ;
}
static int G__TSlsDetectorDict_87_0_8(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
((angularCalibration*) G__getstructoffset())->getAngularRange(*(float*) G__Floatref(&libp->para[0]), *(float*) G__Floatref(&libp->para[1]));
G__setnull(result7);
return(1 || funcname || hash || result7 || libp) ;
}
// automatic copy constructor
static int G__TSlsDetectorDict_87_0_9(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
angularCalibration* p;
void* tmp = (void*) G__int(libp->para[0]);
p = new angularCalibration(*(angularCalibration*) tmp);
result7->obj.i = (long) p;
result7->ref = (long) p;
result7->type = 'u';
result7->tagnum = G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration);
return(1 || funcname || hash || result7 || libp) ;
}
// automatic destructor
typedef angularCalibration G__TangularCalibration;
static int G__TSlsDetectorDict_87_0_10(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
char* gvp = (char*) G__getgvp();
long soff = G__getstructoffset();
int n = G__getaryconstruct();
//
//has_a_delete: 0
//has_own_delete1arg: 0
//has_own_delete2arg: 0
//
if (!soff) {
return(1);
}
if (n) {
if (gvp == (char*)G__PVOID) {
delete[] (angularCalibration*) soff;
} else {
G__setgvp((long) G__PVOID);
for (int i = n - 1; i >= 0; --i) {
((angularCalibration*) (soff+(sizeof(angularCalibration)*i)))->~G__TangularCalibration();
}
G__setgvp((long)gvp);
}
} else {
if (gvp == (char*)G__PVOID) {
delete (angularCalibration*) soff;
} else {
G__setgvp((long) G__PVOID);
((angularCalibration*) (soff))->~G__TangularCalibration();
G__setgvp((long)gvp);
}
}
G__setnull(result7);
return(1 || funcname || hash || result7 || libp) ;
}
// automatic assignment operator
static int G__TSlsDetectorDict_87_0_11(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
{
angularCalibration* dest = (angularCalibration*) G__getstructoffset();
*dest = *(angularCalibration*) libp->para[0].ref;
const angularCalibration& obj = *dest;
result7->ref = (long) (&obj);
result7->obj.i = (long) (&obj);
return(1 || funcname || hash || result7 || libp) ;
}
/* Setting up global function */
/*********************************************************
* Member function Stub
*********************************************************/
/* energyCalibration */
/* angularCalibration */
/*********************************************************
* Global function Stub
*********************************************************/
/*********************************************************
* Get size of pointer to member function
*********************************************************/
class G__Sizep2memfuncTSlsDetectorDict {
public:
G__Sizep2memfuncTSlsDetectorDict(): p(&G__Sizep2memfuncTSlsDetectorDict::sizep2memfunc) {}
size_t sizep2memfunc() { return(sizeof(p)); }
private:
size_t (G__Sizep2memfuncTSlsDetectorDict::*p)();
};
size_t G__get_sizep2memfuncTSlsDetectorDict()
{
G__Sizep2memfuncTSlsDetectorDict a;
G__setsizep2memfunc((int)a.sizep2memfunc());
return((size_t)a.sizep2memfunc());
}
/*********************************************************
* virtual base class offset calculation interface
*********************************************************/
/* Setting up class inheritance */
/*********************************************************
* Inheritance information setup/
*********************************************************/
extern "C" void G__cpp_setup_inheritanceTSlsDetectorDict() {
/* Setting up class inheritance */
}
/*********************************************************
* typedef information setup/
*********************************************************/
extern "C" void G__cpp_setup_typetableTSlsDetectorDict() {
/* Setting up typedef entry */
}
/*********************************************************
* Data Member information setup/
*********************************************************/
/* Setting up class,struct,union tag member variable */
/* energyCalibration */
static void G__setup_memvarenergyCalibration(void) {
G__tag_memvar_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration));
{ energyCalibration *p; p=(energyCalibration*)0x1000; if (p) { }
G__memvar_setup((void*)0,85,0,0,G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibrationFunctions),-1,-1,4,"funcs=",0,(char*)NULL);
G__memvar_setup((void*)0,105,0,0,-1,-1,-1,4,"plot_flag=",0,"*< 0 does not plot, >0 plots (flags?) */");
G__memvar_setup((void*)0,105,0,0,-1,-1,-1,4,"cs_flag=",0,"*< 0 functions without charge sharing contribution, >0 with charge sharing contribution */");
}
G__tag_memvar_reset();
}
/* angularCalibration */
static void G__setup_memvarangularCalibration(void) {
G__tag_memvar_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration));
{ angularCalibration *p; p=(angularCalibration*)0x1000; if (p) { }
G__memvar_setup((void*)0,105,0,0,-1,-1,-1,4,"direction=",0,"*< angulat direction of the detector -can be +1 or -1 */");
G__memvar_setup((void*)0,102,0,0,-1,-1,-1,4,"encoder=",0,"*< position of the detector encoder */");
G__memvar_setup((void*)0,102,0,0,-1,-1,-1,4,"totalOffset=",0,"*< total offset of the detector */");
G__memvar_setup((void*)0,102,0,0,-1,-1,-1,4,"ang_min=",0,"*< minimum of the angular range for peak fitting*/");
G__memvar_setup((void*)0,102,0,0,-1,-1,-1,4,"ang_max=",0,"*< maximum of the angular range for peak fitting */");
}
G__tag_memvar_reset();
}
extern "C" void G__cpp_setup_memvarTSlsDetectorDict() {
}
/***********************************************************
************************************************************
************************************************************
************************************************************
************************************************************
************************************************************
************************************************************
***********************************************************/
/*********************************************************
* Member function information setup for each class
*********************************************************/
static void G__setup_memfuncenergyCalibration(void) {
/* energyCalibration */
G__tag_memfunc_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration));
G__memfunc_setup("energyCalibration",1778,G__TSlsDetectorDict_85_0_1, 105, G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration), -1, 0, 0, 1, 1, 0, "", (char*)NULL, (void*) NULL, 0);
G__memfunc_setup("setPlotFlag",1125,G__TSlsDetectorDict_85_0_2, 105, -1, -1, 0, 1, 1, 1, 0, "i - - 0 '-1' p", (char*)NULL, (void*) NULL, 0);
G__memfunc_setup("setScanSign",1122,G__TSlsDetectorDict_85_0_3, 105, -1, -1, 0, 1, 1, 1, 0, "i - - 0 '0' s", (char*)NULL, (void*) NULL, 0);
G__memfunc_setup("setChargeSharing",1634,G__TSlsDetectorDict_85_0_4, 105, -1, -1, 0, 1, 1, 1, 0, "i - - 0 '-1' p", (char*)NULL, (void*) NULL, 0);
// automatic copy constructor
G__memfunc_setup("energyCalibration", 1778, G__TSlsDetectorDict_85_0_5, (int) ('i'), G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration), -1, 0, 1, 1, 1, 0, "u 'energyCalibration' - 11 - -", (char*) NULL, (void*) NULL, 0);
// automatic destructor
G__memfunc_setup("~energyCalibration", 1904, G__TSlsDetectorDict_85_0_6, (int) ('y'), -1, -1, 0, 0, 1, 1, 0, "", (char*) NULL, (void*) NULL, 0);
// automatic assignment operator
G__memfunc_setup("operator=", 937, G__TSlsDetectorDict_85_0_7, (int) ('u'), G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration), -1, 1, 1, 1, 1, 0, "u 'energyCalibration' - 11 - -", (char*) NULL, (void*) NULL, 0);
G__tag_memfunc_reset();
}
static void G__setup_memfuncangularCalibration(void) {
/* angularCalibration */
G__tag_memfunc_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration));
G__memfunc_setup("angularCalibration",1874,G__TSlsDetectorDict_87_0_1, 105, G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration), -1, 0, 0, 1, 1, 0, "", (char*)NULL, (void*) NULL, 0);
G__memfunc_setup("setDirection",1261,G__TSlsDetectorDict_87_0_2, 105, -1, -1, 0, 1, 1, 1, 0, "i - - 0 '0' d", (char*)NULL, (void*) NULL, 0);
G__memfunc_setup("setEncoder",1036,G__TSlsDetectorDict_87_0_3, 102, -1, -1, 0, 1, 1, 1, 0, "f - - 0 - f", (char*)NULL, (void*) NULL, 0);
G__memfunc_setup("getEncoder",1024,G__TSlsDetectorDict_87_0_4, 102, -1, -1, 0, 0, 1, 1, 0, "", (char*)NULL, (void*) NULL, 0);
G__memfunc_setup("setTotalOffset",1463,G__TSlsDetectorDict_87_0_5, 102, -1, -1, 0, 1, 1, 1, 0, "f - - 0 - f", (char*)NULL, (void*) NULL, 0);
G__memfunc_setup("getTotalOffset",1451,G__TSlsDetectorDict_87_0_6, 102, -1, -1, 0, 0, 1, 1, 0, "", (char*)NULL, (void*) NULL, 0);
G__memfunc_setup("setAngularRange",1539,G__TSlsDetectorDict_87_0_7, 121, -1, -1, 0, 2, 1, 1, 0,
"f - - 0 - mi f - - 0 - ma", (char*)NULL, (void*) NULL, 0);
G__memfunc_setup("getAngularRange",1527,G__TSlsDetectorDict_87_0_8, 121, -1, -1, 0, 2, 1, 1, 0,
"f - - 1 - mi f - - 1 - ma", (char*)NULL, (void*) NULL, 0);
// automatic copy constructor
G__memfunc_setup("angularCalibration", 1874, G__TSlsDetectorDict_87_0_9, (int) ('i'), G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration), -1, 0, 1, 1, 1, 0, "u 'angularCalibration' - 11 - -", (char*) NULL, (void*) NULL, 0);
// automatic destructor
G__memfunc_setup("~angularCalibration", 2000, G__TSlsDetectorDict_87_0_10, (int) ('y'), -1, -1, 0, 0, 1, 1, 0, "", (char*) NULL, (void*) NULL, 0);
// automatic assignment operator
G__memfunc_setup("operator=", 937, G__TSlsDetectorDict_87_0_11, (int) ('u'), G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration), -1, 1, 1, 1, 1, 0, "u 'angularCalibration' - 11 - -", (char*) NULL, (void*) NULL, 0);
G__tag_memfunc_reset();
}
/*********************************************************
* Member function information setup
*********************************************************/
extern "C" void G__cpp_setup_memfuncTSlsDetectorDict() {
}
/*********************************************************
* Global variable information setup for each class
*********************************************************/
static void G__cpp_setup_global0() {
/* Setting up global variables */
G__resetplocal();
G__resetglobalenv();
}
extern "C" void G__cpp_setup_globalTSlsDetectorDict() {
G__cpp_setup_global0();
}
/*********************************************************
* Global function information setup for each class
*********************************************************/
static void G__cpp_setup_func0() {
G__lastifuncposition();
}
static void G__cpp_setup_func1() {
}
static void G__cpp_setup_func2() {
G__resetifuncposition();
}
extern "C" void G__cpp_setup_funcTSlsDetectorDict() {
G__cpp_setup_func0();
G__cpp_setup_func1();
G__cpp_setup_func2();
}
/*********************************************************
* Class,struct,union,enum tag information setup
*********************************************************/
/* Setup class/struct taginfo */
G__linked_taginfo G__TSlsDetectorDictLN_energyCalibrationFunctions = { "energyCalibrationFunctions" , 99 , -1 };
G__linked_taginfo G__TSlsDetectorDictLN_energyCalibration = { "energyCalibration" , 99 , -1 };
G__linked_taginfo G__TSlsDetectorDictLN_angularCalibration = { "angularCalibration" , 99 , -1 };
/* Reset class/struct taginfo */
extern "C" void G__cpp_reset_tagtableTSlsDetectorDict() {
G__TSlsDetectorDictLN_energyCalibrationFunctions.tagnum = -1 ;
G__TSlsDetectorDictLN_energyCalibration.tagnum = -1 ;
G__TSlsDetectorDictLN_angularCalibration.tagnum = -1 ;
}
extern "C" void G__cpp_setup_tagtableTSlsDetectorDict() {
/* Setting up class,struct,union tag entry */
G__get_linked_tagnum_fwd(&G__TSlsDetectorDictLN_energyCalibrationFunctions);
G__tagtable_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_energyCalibration),sizeof(energyCalibration),-1,1280,(char*)NULL,G__setup_memvarenergyCalibration,G__setup_memfuncenergyCalibration);
G__tagtable_setup(G__get_linked_tagnum(&G__TSlsDetectorDictLN_angularCalibration),sizeof(angularCalibration),-1,1280,(char*)NULL,G__setup_memvarangularCalibration,G__setup_memfuncangularCalibration);
}
extern "C" void G__cpp_setupTSlsDetectorDict(void) {
G__check_setup_version(30051515,"G__cpp_setupTSlsDetectorDict()");
G__set_cpp_environmentTSlsDetectorDict();
G__cpp_setup_tagtableTSlsDetectorDict();
G__cpp_setup_inheritanceTSlsDetectorDict();
G__cpp_setup_typetableTSlsDetectorDict();
G__cpp_setup_memvarTSlsDetectorDict();
G__cpp_setup_memfuncTSlsDetectorDict();
G__cpp_setup_globalTSlsDetectorDict();
G__cpp_setup_funcTSlsDetectorDict();
if(0==G__getsizep2memfunc()) G__get_sizep2memfuncTSlsDetectorDict();
return;
}
class G__cpp_setup_initTSlsDetectorDict {
public:
G__cpp_setup_initTSlsDetectorDict() { G__add_setup_func("TSlsDetectorDict",(G__incsetup)(&G__cpp_setupTSlsDetectorDict)); G__call_setup_funcs(); }
~G__cpp_setup_initTSlsDetectorDict() { G__remove_setup_func("TSlsDetectorDict"); }
};
G__cpp_setup_initTSlsDetectorDict G__cpp_setup_initializerTSlsDetectorDict;

View File

@ -0,0 +1,42 @@
/********************************************************************
* TSlsDetectorDict.h
* CAUTION: DON'T CHANGE THIS FILE. THIS FILE IS AUTOMATICALLY GENERATED
* FROM HEADER FILES LISTED IN G__setup_cpp_environmentXXX().
* CHANGE THOSE HEADER FILES AND REGENERATE THIS FILE.
********************************************************************/
#ifdef __CINT__
#error TSlsDetectorDict.h/C is only for compilation. Abort cint.
#endif
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define G__ANSIHEADER
#define G__DICTIONARY
#include "cint/G__ci.h"
extern "C" {
extern void G__cpp_setup_tagtableTSlsDetectorDict();
extern void G__cpp_setup_inheritanceTSlsDetectorDict();
extern void G__cpp_setup_typetableTSlsDetectorDict();
extern void G__cpp_setup_memvarTSlsDetectorDict();
extern void G__cpp_setup_globalTSlsDetectorDict();
extern void G__cpp_setup_memfuncTSlsDetectorDict();
extern void G__cpp_setup_funcTSlsDetectorDict();
extern void G__set_cpp_environmentTSlsDetectorDict();
}
#include "TObject.h"
#include "TMemberInspector.h"
#include "energyCalibration.h"
#include "angularCalibration.h"
#ifndef G__MEMFUNCBODY
#endif
extern G__linked_taginfo G__TSlsDetectorDictLN_energyCalibrationFunctions;
extern G__linked_taginfo G__TSlsDetectorDictLN_energyCalibration;
extern G__linked_taginfo G__TSlsDetectorDictLN_angularCalibration;
/* STUB derived class for protected member access */

View File

@ -0,0 +1,471 @@
#include "angularCalibration.h"
#include <iostream>
#ifdef ROOT
#include <TMath.h>
#include <TH1.h>
#endif
#include "usersFunctions.h"
#ifdef __CINT
#include "usersFunctions.cpp"
#endif
using namespace std;
angularCalibration::angularCalibration(int nm): direction(1),
#ifdef ROOT
fpeak(NULL),
fangle(NULL),
#endif
encoder(0),
totalOffset(0),
ang_min(-180),
ang_max(180),
nmod(nm),
nchmod(1280),
angConv(NULL)
{
#ifdef ROOT
// Creates a Root function based on function peakfunction
TF1 *fpeak = new TF1("fpeak",this,&angularCalibration::peakFunction,ang_min,ang_max,5,"angularCalibration","peakFunction");
// Sets initial values and parameter names
// func->SetParameters((Double_t) PEAKHEIGHT, (Double_t) maxch,(Double_t) PEAKWIDTH,(Double_t) PEAKBACK);
fpeak->SetParNames("Number of Photons","Peak Position","Peak Width RMS","Background Offset", "Background Slope");
TF1 *fangle = new TF1("fangle",this,&angularCalibration::angleFunction,0,1280,3,"angularCalibration","angleFunction");
fangle->SetParNames("Center","Conversion Radius","Offset");
#endif
angConv=new angleConversionConstant[nmod];
}
angularCalibration::~angularCalibration(){
#ifdef ROOT
delete fpeak;
delete fangle;
#endif
}
angleConversionConstant* angularCalibration::getAngularConversionConstant(int imod) {
if (imod>=0 && imod<nmod)
return angConv+imod;
else
return NULL;
}
angleConversionConstant* angularCalibration::setAngularConversionConstant(angleConversionConstant *a, int imod) {
if (imod>=0 && imod<nmod) {
angConv[imod].center=a->center;
angConv[imod].ecenter=a->ecenter;
angConv[imod].r_conversion=a->r_conversion;
angConv[imod].er_conversion=a->er_conversion;
angConv[imod].offset=a->offset;
angConv[imod].eoffset=a->eoffset;
angConv[imod].tilt=a->tilt;
angConv[imod].etilt=a->etilt;
return angConv+imod;
}
return NULL;
}
#ifdef ROOT
Double_t angularCalibration::peakFunction(Double_t *x, Double_t *par) {
Double_t arg = 0;
if (par[2] != 0) arg = (x[0] - par[1])/par[2];
return par[0]*TMath::Exp(-0.5*arg*arg)+par[3]+par[4]*(x[0]-par[1]);
}
Double_t angularCalibration::angleFunction(Double_t *x, Double_t *par) {
return par[2]-angle((int)x[0],0,0,par[1],par[0],0,0,direction);
}
TF1 *fitPeak(TH1 *h) {
TF1 *fitfun=NULL;
int chmod, imod;
float ang;
// reads in a run and fits a gaussian to the peak as function
// of channel number also reads optical encoder
// find angular range in channels
// is it necessary to discard fit with too many points?
for (int i=0;i<h->GetNbinsX();i++) {
imod=i/nchmod;
chmod=i%(imod*nchmod);
ang=angle(chmod,encoder,totalOffset,angConv[imod].r_conversion, angConv[imod].center, angConv[imod].offset, angConv[imod].tilt, direction);
if ((ang>ang_min) && (ang<ang_max)) {
}
}
// for (i=0;i<nchannel;i++) {
// if ( (angle(i)>minang) && (angle(i)<maxang) ) {
// x[npoints]=(float) i;
// y[npoints]=(float) data[i];
// ex[npoints]=0.001;
// ey[npoints]=dataerror[i];
// anglefit[npoints]=angle(i);
// npoints++;
// if (npoints>MAXINPEAK) {
// printf("too many points in angular range !\n");
// return -1; // too many points in range
// }
// if ( data[i]> max) {
// max = (int) data[i];
// maxch = i;
// }
// }
// }
// } else
// return -1;
// npoints--;
// chmin= (int) x[0];
// chmax= (int) x[npoints];
// printf("number of points in range %f-%f: %i \n",minang,maxang,npoints);
// printf("channel from minang to maxang %i - %i \n",chmin,chmax);
// printf("channel with max intensity %i \n",maxch);
// TCanvas *c1;
// TGraph *gr1 = new TGraph(npoints,anglefit,y);
// TGraph *gr2 = new TGraph(npoints,x,y);
// if (plotflag) {
// /* create canvas */
// c1 = new TCanvas();
// c1->SetTitle("Si calibration data");
// c1->Divide(1,2);
// /* create graph */
// sprintf(name,"run number %i",nr);
// gr1->SetTitle(name);
// gr2->SetTitle(name);
// c1->cd(1);
// gr1->Draw("AL*");
// c1->cd(2);
// gr2->Draw("AL*");
// }
// /* do not fit if peak is close to edge of module */
// if (abs(modfromchannel(maxch)*NCHMOD-maxch)<DISTANCE) {
// printf("peak too close to border of module\n");
// return -1;
// }
// /* do not fit if peak is close to edge of range */
// if ( ((maxch-chmin)<DISTANCE) || ( (chmax-maxch)<DISTANCE) ) {
// printf("peak too close to border of range\n");
// return -1;
// }
// /* do not fit if nr of points is to small */
// if (npoints<10) {
// printf("too few points in range\n");
// return -1;
// }
// if (plotflag)
// gr2->Fit("fitpeak","B");
// else
// gr2->Fit("fitpeak","B0");
// TF1 *fit = gr2->GetFunction("fitpeak");
// // writes the fit results into the par array
// fit->GetParameters(mypar);
// printf("\n");
// for (i=0;i<4;i++) {
// myerr[i] = fit->GetParError(i); // obtain fit parameter errors
// printf("parameter %i: %f +- %f \n",i,mypar[i],myerr[i]);
// }
// chi2=fit->GetChisquare();
// printf("chi2: %e\n",chi2);
// printf("\n\n");
// if (chi2>CHIMAX) {
// printf("chi2 too large!\n");
// return -1;
// }
// if (plotflag)
// c1->Update(); // necessary for axis titles!
// // c1->WaitPrimitive();
// return 0;
return fitfun;
}
#endif
// //
// // for detector angular calibration
// //
// // loops over runs fits a peak in each run and then fits the parameters for
// // the angular calibration to the fitted peak and optical encoder values
// //
// //
// // note:
// // setting global offset is important to find peak in peak fitting!
// // also set peak height,width and background in defines at beginning
// //
// void fitangle(char fname[80],char extension[10], int start, int stop, float startangle, float stopangle) {
// int i,nfit,mod,npoints,nnpoints;
// float x[MAXINMODULE],y[MAXINMODULE],ex[MAXINMODULE],ey[MAXINMODULE],min,max;
// float xx[MAXINMODULE],yy[MAXINMODULE],exx[MAXINMODULE],eyy[MAXINMODULE];
// double channelfit[MAXRUN], channelerror[MAXRUN], encoderfit[MAXRUN];
// int runnrfit[MAXRUN], modulenr[MAXRUN];
// FILE *fp;
// char name[80];
// TCanvas *c1,*c2;
// gROOT->Reset(); // reset root
// // gStyle->SetOptFit(1110);
// nfit=0;
// for (i=start;i<stop;i++) {
// // sprintf(name,"%s%i",fname,i);
// if (fitpeak(fname,extension,i,startangle,stopangle)!=-1) {
// printf("nfit %i encoder %f\n",nfit,encoder);
// channelfit[nfit]=(double) mypar[1];
// channelerror[nfit]=(double) myerr[1];
// encoderfit[nfit]=(double) encoder;
// modulenr[nfit]=modfromchannel( channelfit[nfit] );
// runnrfit[nfit]=i;
// // only use value if sigma is reasonable
// if (channelerror[nfit]<MAXSIGMA) {
// nfit++;
// }
// }
// }
// printf(" %i usable peak fits \n\n",nfit);
// for (i=0;i<nfit;i++) {
// printf("i %i run %i encoder %f fit %f module %i \n",i,runnrfit[i],encoderfit[i],channelfit[i],modulenr[i]);
// }
// TGraph *gr3 = new TGraph(nfit,channelfit,encoderfit);
// if (plotflag) {
// /* create canvas */
// TCanvas *c1 = new TCanvas();
// c1->SetTitle("Si calibration data");
// /* create graph for angle vs fitted channel number */
// gr3->Draw("AL*");
// c1->Update(); // necessary for axis titles!
// c1->WaitPrimitive();
// delete c1;
// }
// TH1F *herr=new TH1F("herr","",100,0,0.002);
// for (mod=0;mod<NMOD;mod++) {
// npoints=0;
// for (i=0;i<nfit;i++) {
// if (modulenr[i]==mod) {
// x[npoints]=channelfit[i]-mod*1280;
// ex[npoints]=channelerror[i];
// y[npoints]=encoderfit[i];
// ey[npoints]=ENCODERERROR;
// npoints++;
// }
// }
// if (npoints>5) {
// // create canvas
// if (plotflag) {
// TCanvas *c2 = new TCanvas();
// c2->SetTitle("Si calibration data");
// c2->Divide(1,3);
// }
// // create graph
// TGraphErrors *gr1 = new TGraphErrors(npoints,x,y,ex,ey);
// sprintf(name,"module number %i",mod);
// gr1->SetTitle(name);
// if (plotflag) {
// c2->cd(1);
// gr1->Draw("ALP");
// }
// // Creates a Root function based on function anglefunction
// if (x[0]>x[npoints-1]) {
// min=x[npoints-1];
// max=x[0];
// } else {
// max=x[npoints-1];
// min=x[0];
// }
// TF1 *func = new TF1("fitangle",anglefunction,min,max,3);
// // Sets initial values and parameter names
// func->SetParameters(640,0.0000656,-mod*5.0);
// func->SetParNames("center","conversion","offset");
// func->FixParameter(0,640.0);
// if (plotflag) {
// gr1->Fit("fitangle"); // fit the function
// } else
// gr1->Fit("fitangle","0"); // fit the function
// // calculate the deviations of data points from fitted function and plot them
// for (i=0;i<npoints;i++) {
// ey[i]=func->Eval(x[i])-y[i];
// }
// TGraph *gr4 = new TGraph(npoints,x,ey);
// sprintf(name,"module number %i deviations from fit",mod);
// gr4->SetTitle(name);
// if (plotflag) {
// gr4->SetMarkerStyle(24);
// c2->cd(2);
// gr4->Draw("ALP");
// }
// // iterate fit with outlying points excluded
// nnpoints=0;
// for (i=0;i<npoints;i++) {
// if (fabs(ey[i])<DIFFANGLEFIT) {
// xx[nnpoints]=x[i];
// yy[nnpoints]=y[i];
// exx[nnpoints]=ex[i];
// eyy[nnpoints]=ENCODERERROR;
// nnpoints++;
// }
// }
// TGraphErrors *gr3 = new TGraphErrors(nnpoints,xx,yy,exx,eyy); // create graph
// if (plotflag) {
// gr3->Fit("fitangle"); // fit the function
// } else
// gr3->Fit("fitangle","0"); // fit the function
// // calculate the deviations of data points from fitted function and plot them
// for (i=0;i<nnpoints;i++) {
// eyy[i]=func->Eval(xx[i])-yy[i];
// herr->Fill(eyy[i]);
// }
// TGraph *gr5 = new TGraph(nnpoints,xx,eyy);
// sprintf(name,"module number %i deviations from fit second iteration",mod);
// if (plotflag) {
// c2->cd(3);
// gr5->SetTitle(name);
// gr5->SetMarkerStyle(24);
// gr5->Draw("ALP");
// c2->Update(); // necessary for axis titles?
// c2->WaitPrimitive();
// }
// // writes the fit results into the par array
// //
// // get fit parameter
// func->GetParameters(mypar);
// for (i=0;i<3;i++) {
// myerr[i] = func->GetParError(i); // obtain fit parameter errors
// printf("parameter %i: %E +- %E \n",i,mypar[i],myerr[i]);
// }
// printf("\n\n");
// center[mod]=mypar[0];
// errcenter[mod]=myerr[0];
// conversion[mod]=mypar[1];
// errconversion[mod]=myerr[1];
// moffset[mod]=mypar[2];
// erroff[mod]=myerr[2];
// delete gr1;
// delete gr4;
// delete gr5;
// delete func;
// delete c2;
// }
// }
// //herr->GetXaxis()->SetMaxDigits(3);
// herr->GetXaxis()->SetTitle("Deviations from fit (deg)");
// herr->Draw();
// printf("\n\n\n");
// for (mod=0;mod<NMOD;mod++) {
// printf(" module %i center %.3E +- %.2E conversion %.4E +- %.2E offset %.5f +- %.5f \n",mod,center[mod],errcenter[mod],conversion[mod],errconversion[mod],moffset[mod],erroff[mod]);
// }
// // write file with offsets
// fp = fopen("ang.off","w");
// if (fp == NULL) {
// printf("cant open parameter file !\n");
// exit(1);
// }
// for (mod=0;mod<NMOD;mod++) {
// fprintf(fp," module %i center %.3E +- %.2E conversion %.4E +- %.2E offset %.5f +- %.5f \n",mod,center[mod],errcenter[mod],conversion[mod],errconversion[mod],moffset[0]-moffset[mod],erroff[mod]);
// }
// fclose (fp);
// }

View File

@ -0,0 +1,170 @@
#ifndef ANGULARCALIBRATION_H
#define ANGULARCALIBRATION_H
//#include "usersFunctions.h"
#ifdef ROOT
#include <TROOT.h>
#include <TF1.h>
class TH1;
#endif
//float angle(int ichan, float encoder, float totalOffset, float conv_r, float center, float offset, float tilt, int direction)
/**
angular conversion constant for a module
*/
typedef struct {
float center; /**< center of the module (channel at which the radius is perpendicular to the module surface) */
float ecenter; /**< error in the center determination */
float r_conversion; /**< detector pixel size (or strip pitch) divided by the diffractometer radius */
float er_conversion; /**< error in the r_conversion determination */
float offset; /**< the module offset i.e. the position of channel 0 with respect to the diffractometer 0 */
float eoffset; /**< error in the offset determination */
float tilt; /**< ossible tilt in the orthogonal direction (unused)*/
float etilt; /**< error in the tilt determination */
} angleConversionConstant;
class angularCalibration {
public:
angularCalibration(int nm=48);
~angularCalibration();
/**
sets the angular direction of the detector
\par d 1 or -1 set the angular direction, other valuse simply get
\returns the angular direction of the detector
*/
int setDirection(int d=0){if (d==-1 || d==1) direction=d; return direction;};
/**
sets the encoder position
\param f encoder position to be set
\returns current encoder position
*/
float setEncoder(float f) {encoder=f; return encoder;};
/**
gets the encoder position
\returns encoder position
*/
float getEncoder() {return encoder;};
/**
sets the totalOffset of the detector
\param f total offset to be set
\returns current total offset
*/
float setTotalOffset(float f) {totalOffset=f; return totalOffset;};
/**
gets the encoder position
\returns encoder position
*/
float getTotalOffset() {return totalOffset;};
/**
sets the angular range for peak fitting
\param mi minimum of the angular range
\param ma maximum of the angular range
*/
void setAngularRange(float mi, float ma){ang_min=mi; ang_max=ma;};
/**
gets the angular range for peak fitting
\param mi reference to the minimum of the angular range
\param ma reference to the maximum of the angular range
*/
void getAngularRange(float &mi, float &ma){mi=ang_min; ma=ang_max;};
/** sets and returns the number of modules
\param nm number of modules to be set (<0 gets)
\return current number of modules
*/
int setNumberOfModules(int nm=-1) {if (nm>=0) nmod=nm; return nmod;};
/** sets and returns the number of channels per module
\param n number of channels per module to be set (<0 gets)
\return current number of channels per module
*/
int setChannelsPerModule(int n=-1) {if (n>0) nchmod=n; return nchmod;};
angleConversionConstant *getAngularConversionConstant(int imod=0);
angleConversionConstant *setAngularConversionConstant(angleConversionConstant *a, int imod=0);
#ifdef ROOT
/**
Gaussian with pedestal describing a peak
par[0] is the heigh of the pean
par[1] is the peak position
par[2] is the peak width
par[3] is the background offset
par[4] is the background slope
*/
Double_t peakFunction(Double_t *x, Double_t *par);
/**
Angular conversion function
par[0] is the module center
par[1] is the conversion radius (pitch/radius)
par[2] is the module offset
*/
Double_t angleFunction(Double_t *x, Double_t *par);
/**
Fits a peak for the angular calibration
\param h histogram channels versus intensity
\returns fitted function or NULL if fit failed
*/
TF1 *fitPeak(TH1 *h);
#endif
private:
int direction; /**< angular direction of the detector -can be +1 or -1 */
#ifdef ROOT
TF1 *fpeak; /**< Root function based on function peakFunction */
TF1 *fangle; /**< Root function based on function angleFunction */
#endif
float encoder; /**< position of the detector encoder */
float totalOffset; /**< total offset of the detector */
float ang_min; /**< minimum of the angular range for peak fitting*/
float ang_max; /**< maximum of the angular range for peak fitting */
int nmod;
int nchmod;
angleConversionConstant *angConv;
/* void fitangle(char fname[80],char extension[10], int start, int stop, float startangle, float stopangle); //fits all datasets and extracts the constants */
/* int fitpeak(char fname[80],char extension[10], int nr, float minang, float maxang); // fits a peak from a pattern using nominal calibration constant */
};
#endif

View File

@ -0,0 +1,481 @@
#include "angularConversion.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <math.h>
#include "usersFunctions.h"
using namespace std;
angularConversion::angularConversion(): currentPosition(0),
currentPositionIndex(0)
{
}
angularConversion::~angularConversion(){
}
// int angularConversion::setAngularConversionPointer(angleConversionConstant *p, int *nm, int nch, int idet) {
// if (p) {
// angOff[idet]=p;
// nMods[idet]=nm;
// nCh[idet]=nch;
// } else {
// angOff[idet]=NULL;
// nMods[idet]=NULL;
// }
// return OK;
// }
float* angularConversion::convertAngles(float pos) {
int imod;
float *ang=new float[getTotalNumberOfChannels()];
float enc=pos;
angleConversionConstant *p=NULL;
for (int ip=0; ip<getTotalNumberOfChannels(); ip++) {
imod=ip/(getChansPerMod(0)); // always for module 0?????
p=getAngularConversionPointer(imod);
if (getMoveFlag(imod)==0)
enc=0;
else
enc=pos;
if (p)
ang[ip]=angle(ip%(getChansPerMod()), \
enc, \
(*fineOffset)+(*globalOffset), \
p->r_conversion, \
p->center, \
p->offset, \
p->tilt, \
*angDirection );
}
return ang;
}
//static!
int angularConversion::readAngularConversion(string fname, int nmod, angleConversionConstant *angOff) {
ifstream infile;
string ss;
#ifdef VERBOSE
std::cout<< "Opening file "<< fname << std::endl;
#endif
infile.open(fname.c_str(), ios_base::in);
if (infile.is_open()) {
readAngularConversion(infile, nmod, angOff);
infile.close();
} else {
std::cout<< "Could not open calibration file "<< fname << std::endl;
return -1;
}
return 0;
}
//static
int angularConversion::readAngularConversion( ifstream& infile, int nmod, angleConversionConstant *angOff) {
string str;
int mod;
float center, ecenter;
float r_conv, er_conv;
float off, eoff;
string ss;
int interrupt=0;
int nm=0;
//" module %i center %E +- %E conversion %E +- %E offset %f +- %f \n"
while (infile.good() and interrupt==0) {
getline(infile,str);
#ifdef VERBOSE
cout << "** mod " << nm << " " ;
std::cout<< str << std::endl;
#endif
istringstream ssstr(str);
ssstr >> ss >> mod;
ssstr >> ss >> center;
ssstr >> ss >> ecenter;
ssstr >> ss >> r_conv;
ssstr >> ss >> er_conv;
ssstr >> ss >> off;
ssstr >> ss >> eoff;
if (nm<nmod && nm>=0 ) {
angOff[nm].center=center;
angOff[nm].r_conversion=r_conv;
angOff[nm].offset=off;
angOff[nm].ecenter=ecenter;
angOff[nm].er_conversion=er_conv;
angOff[nm].eoffset=eoff;
} else
break;
//cout << nm<<" " << angOff[nm].offset << endl;
nm++;
if (nm>=nmod)
break;
}
return nm;
}
//static
int angularConversion:: writeAngularConversion(string fname, int nmod, angleConversionConstant *angOff) {
ofstream outfile;
outfile.open (fname.c_str(),ios_base::out);
if (outfile.is_open())
{
writeAngularConversion(outfile, nmod, angOff);
outfile.close();
} else {
std::cout<< "Could not open file " << fname << "for writing"<< std::endl;
return -1;
}
//" module %i center %E +- %E conversion %E +- %E offset %f +- %f \n"
return 0;
}
//static
int angularConversion:: writeAngularConversion(ofstream& outfile, int nmod, angleConversionConstant *angOff) {
for (int imod=0; imod<nmod; imod++) {
outfile << " module " << imod << " center "<< angOff[imod].center<<" +- "<< angOff[imod].ecenter<<" conversion "<< angOff[imod].r_conversion << " +- "<< angOff[imod].er_conversion << " offset "<< angOff[imod].offset << " +- "<< angOff[imod].eoffset << std::endl;
}
return 0;
}
//static
int angularConversion::resetMerging(float *mp, float *mv, float *me, int *mm, int nb) {
#ifdef VERBOSE
cout << "creating merging arrays "<< nb << endl;
#endif
for (int ibin=0; ibin<nb; ibin++) {
mp[ibin]=0;
mv[ibin]=0;
me[ibin]=0;
mm[ibin]=0;
}
return OK;
}
//static
int angularConversion::finalizeMerging(float *mp, float *mv, float *me, int *mm,int nb) {
int np=0;
for (int ibin=0; ibin<nb; ibin++) {
if (mm[ibin]>0) {
mp[np]=mp[ibin]/mm[ibin];
mv[np]=mv[ibin]/mm[ibin];
me[np]=me[ibin]/mm[ibin];
me[np]=sqrt(me[ibin]);
mm[np]=mm[ibin];
np++;
}
}
return np;
}
//static
int angularConversion::addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm, int nchans, float binsize,int nbins, int *badChanMask ) {
float binmi=-180.;
int ibin=0;
if (p1==NULL)
return 0;
if (v1==NULL)
return FAIL;
if (mp==NULL) //can be changed if we want to use a fixed bin algorithm!
return FAIL;
if (mv==NULL)
return FAIL;
if (me==NULL)
return FAIL;
if (mm==NULL)
return FAIL;
if (nchans==0)
return FAIL;
if (binsize==0)
return FAIL;
if (nbins==0)
return FAIL;
for (int ip=0; ip<nchans; ip++) {
if (badChanMask) {
if (badChanMask[ip]) {
#ifdef VERBOSE
cout << "channel " << ip << " is bad " << endl;
#endif
continue;
}
}
ibin=(int)((p1[ip]-binmi)/binsize);
if (ibin<nbins && ibin>=0) {
mp[ibin]+=p1[ip];
mv[ibin]+=v1[ip];
if (e1)
me[ibin]+=(e1[ip]*e1[ip]);
else
me[ibin]+=v1[ip];
mm[ibin]++;
} else
return FAIL;
}
return OK;
}
int angularConversion::deleteMerging() {
if (mergingBins)
delete [] mergingBins;
if (mergingCounts)
delete [] mergingCounts;
if (mergingErrors)
delete [] mergingErrors;
}
int angularConversion::resetMerging() {
mergingBins=new float[nBins];
mergingCounts=new float[nBins];
mergingErrors=new float[nBins];
mergingMultiplicity=new int[nBins];
return resetMerging(mergingBins, mergingCounts, mergingErrors, mergingMultiplicity);
}
int angularConversion::resetMerging(float *mp, float *mv, float *me, int *mm) {
if (nBins)
return resetMerging(mp, mv, me, mm,nBins);
else
return FAIL;
}
int angularConversion::finalizeMerging() {
int np=finalizeMerging(mergingBins, mergingCounts, mergingErrors, mergingMultiplicity);
if (mergingMultiplicity)
delete [] mergingMultiplicity;
return np;
}
int angularConversion::finalizeMerging(float *mp, float *mv, float *me, int *mm) {
if (nBins)
return finalizeMerging(mp, mv, me, mm, nBins);
else
return FAIL;
}
int angularConversion::addToMerging(float *p1, float *v1, float *e1, int *badChanMask ) {
return addToMerging(p1,v1,e1,mergingBins,mergingCounts, mergingErrors, mergingMultiplicity, badChanMask);
}
int angularConversion::addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm, int *badChanMask ) {
int del=0;
if (*binSize==0)
return FAIL;
if (nBins==0)
return FAIL;
if (p1==NULL) {
del=1;
p1=convertAngles();
}
int ret=addToMerging(p1, v1, e1, mp, mv,me, mm,getTotalNumberOfChannels(), *binSize,nBins, badChanMask );
if (del) {
delete [] p1;
p1=NULL;
}
return ret;
}
/**
sets the value of s angular conversion parameter
\param c can be ANGULAR_DIRECTION, GLOBAL_OFFSET, FINE_OFFSET, BIN_SIZE
\param v the value to be set
\returns the actual value
*/
float angularConversion::setAngularConversionParameter(angleConversionParameter c, float v){
switch (c) {
case ANGULAR_DIRECTION:
if (v<0)
*angDirection=-1;
else
*angDirection=1;
return *angDirection;
case GLOBAL_OFFSET:
*globalOffset=v;
return *globalOffset;
case FINE_OFFSET:
*fineOffset=v;
return *fineOffset;
case BIN_SIZE:
if (v>0) {
*binSize=v;
nBins=360./(*binSize);
}
return *binSize;
case MOVE_FLAG:
if (moveFlag) {
if (v>0)
*moveFlag=1;
else if (v==0)
*moveFlag=0;
return *moveFlag;
}
return -1;
default:
return 0;
}
}
/**
returns the value of an angular conversion parameter
\param c can be ANGULAR_DIRECTION, GLOBAL_OFFSET, FINE_OFFSET, BIN_SIZE
\returns the actual value
*/
float angularConversion::getAngularConversionParameter(angleConversionParameter c) {
switch (c) {
case ANGULAR_DIRECTION:
return *angDirection;
case GLOBAL_OFFSET:
return *globalOffset;
case FINE_OFFSET:
return *fineOffset;
case BIN_SIZE:
return *binSize;
case MOVE_FLAG:
return *moveFlag;
default:
return 0;
}
}
int angularConversion::setAngularConversionFile(string fname) {
if (fname=="") {
setAngularCorrectionMask(0);
#ifdef VERBOSE
std::cout << "Unsetting angular conversion" << std::endl;
#endif
} else {
if (fname=="default") {
fname=string(angConvFile);
}
#ifdef VERBOSE
std::cout << "Setting angular conversion to " << fname << std:: endl;
#endif
if (readAngularConversionFile(fname)>=0) {
setAngularCorrectionMask(1);
strcpy(angConvFile,fname.c_str());
}
}
return setAngularCorrectionMask();
}
/*
set positions for the acquisition
\param nPos number of positions
\param pos array with the encoder positions
\returns number of positions
*/
int angularConversion::setPositions(int nPos, float *pos){
if (nPos>=0)
*numberOfPositions=nPos;
for (int ip=0; ip<nPos; ip++)
detPositions[ip]=pos[ip];
return *numberOfPositions;
}
/*
get positions for the acquisition
\param pos array which will contain the encoder positions
\returns number of positions
*/
int angularConversion::getPositions(float *pos){
if (pos) {
for (int ip=0; ip<(*numberOfPositions); ip++)
pos[ip]=detPositions[ip];
}
return *numberOfPositions;
}

View File

@ -0,0 +1,316 @@
#ifndef ANGULARCONVERSION_H
#define ANGULARCONVERSION_H
#include "sls_detector_defs.h"
#include <string>
#include <fstream>
//float angle(int ichan, float encoder, float totalOffset, float conv_r, float center, float offset, float tilt, int direction)
using namespace std;
/**
angular conversion constant for a module
*/
typedef struct {
float center; /**< center of the module (channel at which the radius is perpendicular to the module surface) */
float ecenter; /**< error in the center determination */
float r_conversion; /**< detector pixel size (or strip pitch) divided by the diffractometer radius */
float er_conversion; /**< error in the r_conversion determination */
float offset; /**< the module offset i.e. the position of channel 0 with respect to the diffractometer 0 */
float eoffset; /**< error in the offset determination */
float tilt; /**< ossible tilt in the orthogonal direction (unused)*/
float etilt; /**< error in the tilt determination */
} angleConversionConstant;
/**
class containing the methods to set/unset the angular conversion and merge the data
The angular conversion itself is stored in the slsDetector/multiSlsDetector class!
*/
class angularConversion : public slsDetectorDefs {
public:
angularConversion();
virtual ~angularConversion();
//virtual int readAngularConversion(string fname)=0;
/**
reads an angular conversion file
\param fname file to be read
*/
static int readAngularConversion(string fname, int nmod, angleConversionConstant *angOff);
/**
MOVE TO ANGULAR CALIBRATION?!?!??!?
reads an angular conversion file
\param fname file to be read
*/
static int readAngularConversion(ifstream& ifs, int nmod, angleConversionConstant *angOff);
/**
MOVE TO ANGULAR CALIBRATION?!?!??!?
writes an angular conversion file
\param fname file to be written
\sa angleConversionConstant mythenDetector::writeAngularConversion
*/
static int writeAngularConversion(string fname, int nmod, angleConversionConstant *angOff);
/**
MOVE TO ANGULAR CALIBRATION?!?!??!?
writes an angular conversion file
\param fname file to be written
\sa angleConversionConstant mythenDetector::writeAngularConversion
*/
static int writeAngularConversion(ofstream& ofs, int nmod, angleConversionConstant *angOff);
virtual int writeAngularConversion(string fname)=0;
/**
MOVE TO ANGULAR CALIBRATION?!?!??!?
sets the arrays of the merged data to 0. NB The array should be created with size >= 360./getBinSize();
\param mp already merged postions
\param mv already merged data
\param me already merged errors (squared sum)
\param mm multiplicity of merged arrays
\returns OK or FAIL
\sa mythenDetector::resetMerging
*/
static int resetMerging(float *mp, float *mv,float *me, int *mm, int nbins);
int resetMerging(float *mp, float *mv,float *me, int *mm);
int resetMerging();
/**
merge dataset
\param p1 angular positions of dataset
\param v1 data
\param e1 errors
\param mp already merged postions
\param mv already merged data
\param me already merged errors (squared sum)
\param mm multiplicity of merged arrays
\param nchans number of channels
\param binsize size of angular bin
\param nb number of angular bins
\param badChanMask badchannelmask (if NULL does not correct for bad channels)
\returns OK or FAIL
*/
static int addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm, int nchans, float binsize,int nb, int *badChanMask );
int addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm, int *badChanMask);
int addToMerging(float *p1, float *v1, float *e1,int *badChanMask);
/**
MOVE TO ANGULAR CALIBRATION?!?!??!?
calculates the "final" positions, data value and errors for the emrged data
\param mp already merged postions
\param mv already merged data
\param me already merged errors (squared sum)
\param mm multiplicity of merged arrays
\returns FAIL or the number of non empty bins (i.e. points belonging to the pattern)
\sa mythenDetector::finalizeMerging
*/
static int finalizeMerging(float *mp, float *mv,float *me, int *mm, int nb);
int finalizeMerging(float *mp, float *mv,float *me, int *mm);
int finalizeMerging();
/**
pure virtual function
set detector global offset
\sa mythenDetector::setGlobalOffset
*/
float setGlobalOffset(float f){return setAngularConversionParameter(GLOBAL_OFFSET,f);};
/**
pure virtual function
set detector fine offset
\sa mythenDetector::setFineOffset
*/
float setFineOffset(float f){return setAngularConversionParameter(FINE_OFFSET,f);};
/**
pure virtual function
get detector fine offset
\sa mythenDetector::getFineOffset
*/
float getFineOffset(){return getAngularConversionParameter(FINE_OFFSET);};
/**
pure virtual function
get detector global offset
\sa mythenDetector::getGlobalOffset
*/
float getGlobalOffset(){return getAngularConversionParameter(GLOBAL_OFFSET);};
/**
set detector bin size used for merging (approx angular resolution)
\param bs bin size in degrees
\returns current bin size
\sa mythenDetector::setBinSize
*/
float setBinSize(float bs){return setAngularConversionParameter(BIN_SIZE,bs);};
/**
return detector bin size used for merging (approx angular resolution)
\sa mythenDetector::getBinSize
*/
float getBinSize() {return getAngularConversionParameter(BIN_SIZE);};
int getAngularDirection(){return (int)getAngularConversionParameter(ANGULAR_DIRECTION);};
int setAngularDirection(int d){return (int)setAngularConversionParameter(ANGULAR_DIRECTION, (float)d);};
int getNumberOfAngularBins(){return nBins;};
/**
get angular conversion
\param direction reference to diffractometer direction
\param angconv array that will be filled with the angular conversion constants
\returns 0 if angular conversion disabled, >0 otherwise
*/
virtual int getAngularConversion(int &direction, angleConversionConstant *angconv=NULL)=0;
float setAngularConversionParameter(angleConversionParameter c, float v);
float getAngularConversionParameter(angleConversionParameter c);
virtual int getTotalNumberOfChannels()=0;
/**
set positions for the acquisition
\param nPos number of positions
\param pos array with the encoder positions
\returns number of positions
*/
virtual int setPositions(int nPos, float *pos);
/**
get positions for the acquisition
\param pos array which will contain the encoder positions
\returns number of positions
*/
virtual int getPositions(float *pos=NULL);
int deleteMerging();
float *getMergedPositions(){return mergingBins;};
float *getMergedCounts(){return mergingCounts;};
float *getMergedErrors(){return mergingErrors;};
/**
sets the angular conversion file
\param fname file to read
\returns angular conversion flag
*/
int setAngularConversionFile(string fname);
/**
returns the angular conversion file
*/
string getAngularConversionFile(){if (setAngularCorrectionMask()) return string(angConvFile); else return string("none");};
virtual int readAngularConversionFile(string fname="")=0;
// int setAngularConversionPointer(angleConversionConstant *p, int *nm, int nch, int idet=0);
virtual int getNMods()=0;
virtual int getChansPerMod(int imod=0)=0;
virtual angleConversionConstant *getAngularConversionPointer(int imod=0)=0;
float* convertAngles(float pos);
float *convertAngles(){return convertAngles(currentPosition);};
virtual int getMoveFlag(int imod)=0;
int getCurrentPositionIndex() {return currentPositionIndex;};
int getNumberOfPositions() {return *numberOfPositions;};
protected:
int *numberOfPositions;
float *detPositions;
char *angConvFile;
float *binSize;
float *fineOffset;
float *globalOffset;
int *angDirection;
int *moveFlag;
int nBins;
/**
current position of the detector
*/
float currentPosition;
/**
current position index of the detector
*/
int currentPositionIndex;
virtual int setAngularCorrectionMask(int i=-1)=0;
private:
/** merging bins */
float *mergingBins;
/** merging counts */
float *mergingCounts;
/** merging errors */
float *mergingErrors;
/** merging multiplicity */
int *mergingMultiplicity;
/** pointer to the angular conversion constants for the (multi)detector class*/
/* angleConversionConstant *angOff[MAXDET]; */
/* int *nMods[MAXDET]; */
/* int nCh[MAXDET]; */
};
#endif

View File

@ -0,0 +1,32 @@
#include <unistd.h>
#include <cstring>
/**
data structure to hold the detector data after postprocessing (e.g. to plot, store in a root tree etc.)
*/
class detectorData {
public:
/** The constructor
\param val pointer to the data
\param err pointer to errors
\param ang pointer to the angles
\param f_ind file index
\param fname file name to which the data are saved
\param np number of points defaults to the number of detector channels
*/
detectorData(float *val=NULL, float *err=NULL, float *ang=NULL, float p_ind=-1, const char *fname="", int np=-1) : values(val), errors(err), angles(ang), progressIndex(p_ind), npoints(np){strcpy(fileName,fname);};
/**
the destructor
deletes also the arrays pointing to data/errors/angles if not NULL
*/
~detectorData() {if (values) delete [] values; if (errors) delete [] errors; if (angles) delete [] angles;};
//private:
float *values; /**< pointer to the data */
float *errors; /**< pointer to the errors */
float *angles;/**< pointer to the angles */
float progressIndex;/**< file index */
char fileName[1000];/**< file name */
int npoints;/**< number of points */
};

View File

@ -0,0 +1,28 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Class List</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,55 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Member List</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,38 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Member List</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,428 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>energyCalibrationFunctions Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,69 @@
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>Alphabetical List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.6.0 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,358 @@
BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
font-family: Geneva, Arial, Helvetica, sans-serif;
}
BODY,TD {
font-size: 90%;
}
H1 {
text-align: center;
font-size: 160%;
}
H2 {
font-size: 120%;
}
H3 {
font-size: 100%;
}
CAPTION { font-weight: bold }
DIV.qindex {
width: 100%;
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
padding: 2px;
line-height: 140%;
}
DIV.nav {
width: 100%;
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
padding: 2px;
line-height: 140%;
}
DIV.navtab {
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
margin-right: 15px;
padding: 2px;
}
TD.navtab {
font-size: 70%;
}
A.qindex {
text-decoration: none;
font-weight: bold;
color: #1A419D;
}
A.qindex:visited {
text-decoration: none;
font-weight: bold;
color: #1A419D
}
A.qindex:hover {
text-decoration: none;
background-color: #ddddff;
}
A.qindexHL {
text-decoration: none;
font-weight: bold;
background-color: #6666cc;
color: #ffffff;
border: 1px double #9295C2;
}
A.qindexHL:hover {
text-decoration: none;
background-color: #6666cc;
color: #ffffff;
}
A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
A.el { text-decoration: none; font-weight: bold }
A.elRef { font-weight: bold }
A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
A.codeRef:link { font-weight: normal; color: #0000FF}
A.codeRef:visited { font-weight: normal; color: #0000FF}
A:hover { text-decoration: none; background-color: #f2f2ff }
DL.el { margin-left: -1cm }
.fragment {
font-family: monospace, fixed;
font-size: 95%;
}
PRE.fragment {
border: 1px solid #CCCCCC;
background-color: #f5f5f5;
margin-top: 4px;
margin-bottom: 4px;
margin-left: 2px;
margin-right: 8px;
padding-left: 6px;
padding-right: 6px;
padding-top: 4px;
padding-bottom: 4px;
}
DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
DIV.groupHeader {
margin-left: 16px;
margin-top: 12px;
margin-bottom: 6px;
font-weight: bold;
}
DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
BODY {
background: white;
color: black;
margin-right: 20px;
margin-left: 20px;
}
TD.indexkey {
background-color: #e8eef2;
font-weight: bold;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px;
border: 1px solid #CCCCCC;
}
TD.indexvalue {
background-color: #e8eef2;
font-style: italic;
padding-right : 10px;
padding-top : 2px;
padding-left : 10px;
padding-bottom : 2px;
margin-left : 0px;
margin-right : 0px;
margin-top : 2px;
margin-bottom : 2px;
border: 1px solid #CCCCCC;
}
TR.memlist {
background-color: #f0f0f0;
}
P.formulaDsp { text-align: center; }
IMG.formulaDsp { }
IMG.formulaInl { vertical-align: middle; }
SPAN.keyword { color: #008000 }
SPAN.keywordtype { color: #604020 }
SPAN.keywordflow { color: #e08000 }
SPAN.comment { color: #800000 }
SPAN.preprocessor { color: #806020 }
SPAN.stringliteral { color: #002080 }
SPAN.charliteral { color: #008080 }
.mdescLeft {
padding: 0px 8px 4px 8px;
font-size: 80%;
font-style: italic;
background-color: #FAFAFA;
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
border-left: 1px none #E0E0E0;
margin: 0px;
}
.mdescRight {
padding: 0px 8px 4px 8px;
font-size: 80%;
font-style: italic;
background-color: #FAFAFA;
border-top: 1px none #E0E0E0;
border-right: 1px none #E0E0E0;
border-bottom: 1px none #E0E0E0;
border-left: 1px none #E0E0E0;
margin: 0px;
}
.memItemLeft {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: solid;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-size: 80%;
}
.memItemRight {
padding: 1px 8px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: solid;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-size: 80%;
}
.memTemplItemLeft {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: none;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-size: 80%;
}
.memTemplItemRight {
padding: 1px 8px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: none;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
background-color: #FAFAFA;
font-size: 80%;
}
.memTemplParams {
padding: 1px 0px 0px 8px;
margin: 4px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #E0E0E0;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-left-color: #E0E0E0;
border-top-style: solid;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
color: #606060;
background-color: #FAFAFA;
font-size: 80%;
}
.search { color: #003399;
font-weight: bold;
}
FORM.search {
margin-bottom: 0px;
margin-top: 0px;
}
INPUT.search { font-size: 75%;
color: #000080;
font-weight: normal;
background-color: #e8eef2;
}
TD.tiny { font-size: 75%;
}
a {
color: #1A41A8;
}
a:visited {
color: #2A3798;
}
.dirtab { padding: 4px;
border-collapse: collapse;
border: 1px solid #84b0c7;
}
TH.dirtab { background: #e8eef2;
font-weight: bold;
}
HR { height: 1px;
border: none;
border-top: 1px solid black;
}
/* Style for detailed member documentation */
.memtemplate {
font-size: 80%;
color: #606060;
font-weight: normal;
}
.memnav {
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
margin-right: 15px;
padding: 2px;
}
.memitem {
padding: 4px;
background-color: #eef3f5;
border-width: 1px;
border-style: solid;
border-color: #dedeee;
-moz-border-radius: 8px 8px 8px 8px;
}
.memname {
white-space: nowrap;
font-weight: bold;
}
.memdoc{
padding-left: 10px;
}
.memproto {
background-color: #d5e1e8;
width: 100%;
border-width: 1px;
border-style: solid;
border-color: #84b0c7;
font-weight: bold;
-moz-border-radius: 8px 8px 8px 8px;
}
.paramkey {
text-align: right;
}
.paramtype {
white-space: nowrap;
}
.paramname {
color: #602020;
font-style: italic;
}
/* End Styling for detailed member documentation */
/* for the tree view */
.ftvtree {
font-family: sans-serif;
margin:0.5em;
}
.directory { font-size: 9pt; font-weight: bold; }
.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
.directory > h3 { margin-top: 0; }
.directory p { margin: 0px; white-space: nowrap; }
.directory div { display: none; margin: 0px; }
.directory img { vertical-align: -30%; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,164 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>energyCalibration.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,76 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>energyCalibration.h File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,190 @@
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>energyCalibration.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.6.0 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,27 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>File Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,126 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Class Members</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,63 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Class Members - Functions</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,49 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Class Members - Variables</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,36 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Class Members</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,36 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Class Members</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,25 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Common Root library for SLS detectors data analysis</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li id="current"><a href="index.html"><span>Main&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

@ -0,0 +1,117 @@
#!/usr/bin/perl
%subst = ( );
$quiet = 0;
if (open(F,"search.cfg"))
{
$_=<F> ; s/[ \t\n]*$//g ; $subst{"_doc"} = $_;
$_=<F> ; s/[ \t\n]*$//g ; $subst{"_cgi"} = $_;
}
while ( @ARGV ) {
$_ = shift @ARGV;
if ( s/^-// ) {
if ( /^l(.*)/ ) {
$v = ($1 eq "") ? shift @ARGV : $1;
($v =~ /\/$/) || ($v .= "/");
$_ = $v;
if ( /(.+)\@(.+)/ ) {
if ( exists $subst{$1} ) {
$subst{$1} = $2;
} else {
print STDERR "Unknown tag file $1 given with option -l\n";
&usage();
}
} else {
print STDERR "Argument $_ is invalid for option -l\n";
&usage();
}
}
elsif ( /^q/ ) {
$quiet = 1;
}
elsif ( /^\?|^h/ ) {
&usage();
}
else {
print STDERR "Illegal option -$_\n";
&usage();
}
}
else {
push (@files, $_ );
}
}
foreach $sub (keys %subst)
{
if ( $subst{$sub} eq "" )
{
print STDERR "No substitute given for tag file `$sub'\n";
&usage();
}
elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" )
{
print "Substituting $subst{$sub} for each occurence of tag file $sub\n";
}
}
if ( ! @files ) {
if (opendir(D,".")) {
foreach $file ( readdir(D) ) {
$match = ".html";
next if ( $file =~ /^\.\.?$/ );
($file =~ /$match/) && (push @files, $file);
($file =~ "tree.js") && (push @files, $file);
}
closedir(D);
}
}
if ( ! @files ) {
print STDERR "Warning: No input files given and none found!\n";
}
foreach $f (@files)
{
if ( ! $quiet ) {
print "Editing: $f...\n";
}
$oldf = $f;
$f .= ".bak";
unless (rename $oldf,$f) {
print STDERR "Error: cannot rename file $oldf\n";
exit 1;
}
if (open(F,"<$f")) {
unless (open(G,">$oldf")) {
print STDERR "Error: opening file $oldf for writing\n";
exit 1;
}
if ($oldf ne "tree.js") {
while (<F>) {
s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g;
print G "$_";
}
}
else {
while (<F>) {
s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g;
print G "$_";
}
}
}
else {
print STDERR "Warning file $f does not exist\n";
}
unlink $f;
}
sub usage {
print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n";
print STDERR "Options:\n";
print STDERR " -l tagfile\@linkName tag file + URL or directory \n";
print STDERR " -q Quiet mode\n\n";
exit 1;
}

View File

@ -0,0 +1,22 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Namespace Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,24 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>std Namespace Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&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

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_ampl">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a77b954cd513271d2cfafee6033435584" target="_parent">ampl</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,31 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_bg_5foffset">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#aaa11f256a8b0a94c28a98d068013b327" target="_parent">bg_offset</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_bg_5fslope">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#a9676e5cc2757c723c2262d641fb4b8b4" target="_parent">bg_slope</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_calibrate">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#aa6e7624f6cafb8c3a22c821aee2c6fc4" target="_parent">calibrate</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_conven">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../energyCalibration_8h.html#aa48a6c1eb7d418c5d0618fbb161ae321" target="_parent">conven</a>
<span class="SRScope">energyCalibration.h</span>
</div>
</div>
<div class="SRResult" id="SR_cs_5fslope">
<div class="SREntry">
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#aca1efedbfea0ad5c9ea2d794e3fb368d" target="_parent">cs_slope</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,66 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_el">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../energyCalibration_8h.html#ad1db7b454cab6ae1749310d7f444849b" target="_parent">el</a>
<span class="SRScope">energyCalibration.h</span>
</div>
</div>
<div class="SRResult" id="SR_energycalibration">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="javascript:searchResults.Toggle('SR_energycalibration')">energyCalibration</a>
<div class="SRChildren">
<a id="Item1_c0" onkeydown="return searchResults.NavChild(event,1,0)" onkeypress="return searchResults.NavChild(event,1,0)" onkeyup="return searchResults.NavChild(event,1,0)" class="SRScope" href="../classenergyCalibration.html" target="_parent">energyCalibration</a>
<a id="Item1_c1" onkeydown="return searchResults.NavChild(event,1,1)" onkeypress="return searchResults.NavChild(event,1,1)" onkeyup="return searchResults.NavChild(event,1,1)" class="SRScope" href="../classenergyCalibration.html#a16f0658d2b526f52784057b2166efd22" target="_parent">energyCalibration::energyCalibration()</a>
</div>
</div>
</div>
<div class="SRResult" id="SR_energycalibration_2eh">
<div class="SREntry">
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../energyCalibration_8h.html" target="_parent">energyCalibration.h</a>
</div>
</div>
<div class="SRResult" id="SR_energycalibrationfunctions">
<div class="SREntry">
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="javascript:searchResults.Toggle('SR_energycalibrationfunctions')">energyCalibrationFunctions</a>
<div class="SRChildren">
<a id="Item3_c0" onkeydown="return searchResults.NavChild(event,3,0)" onkeypress="return searchResults.NavChild(event,3,0)" onkeyup="return searchResults.NavChild(event,3,0)" class="SRScope" href="../classenergyCalibrationFunctions.html" target="_parent">energyCalibrationFunctions</a>
<a id="Item3_c1" onkeydown="return searchResults.NavChild(event,3,1)" onkeypress="return searchResults.NavChild(event,3,1)" onkeyup="return searchResults.NavChild(event,3,1)" class="SRScope" href="../classenergyCalibrationFunctions.html#a8c17162b89f3b2e642004e7c88a22ac2" target="_parent">energyCalibrationFunctions::energyCalibrationFunctions()</a>
</div>
</div>
</div>
<div class="SRResult" id="SR_erffuncfluo">
<div class="SREntry">
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#aa5fbe9da48bc2ef90b699e06ea8c5111" target="_parent">erfFuncFluo</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_erffunction">
<div class="SREntry">
<a id="Item5" onkeydown="return searchResults.Nav(event,5)" onkeypress="return searchResults.Nav(event,5)" onkeyup="return searchResults.Nav(event,5)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a2da1e3b9a10d23233256f8c2234f2457" target="_parent">erfFunction</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_erffunctionchargesharing">
<div class="SREntry">
<a id="Item6" onkeydown="return searchResults.Nav(event,6)" onkeypress="return searchResults.Nav(event,6)" onkeyup="return searchResults.Nav(event,6)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a8d1b3d0f8b30423dad56d8ce5323a4a8" target="_parent">erfFunctionChargeSharing</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,55 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_fit_5fmax">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#ae979386a3f787ef706f4a9ec5bf41d7d" target="_parent">fit_max</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_fit_5fmin">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#a262f574732186cdd8d3a11344d03d0bb" target="_parent">fit_min</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_fitscurve">
<div class="SREntry">
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#a0dcd8e06e31f7b70488a012db12b2bf8" target="_parent">fitSCurve</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_flex">
<div class="SREntry">
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="../classenergyCalibration.html#ab99d770f1c9af68d591ed20847813ad1" target="_parent">flex</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_fscurve">
<div class="SREntry">
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="../classenergyCalibration.html#a57706a328324c25dd9f8ba6d1486e4ce" target="_parent">fscurve</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_funcs">
<div class="SREntry">
<a id="Item5" onkeydown="return searchResults.Nav(event,5)" onkeypress="return searchResults.Nav(event,5)" onkeyup="return searchResults.Nav(event,5)" class="SRSymbol" href="../classenergyCalibration.html#ae9b3307bf858331241871bde42fdd24e" target="_parent">funcs</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_gausschargesharing">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#ae9582e5c46d27ad25d6139d0386698f7" target="_parent">gaussChargeSharing</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_getfitrange">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#abfb02327a6897bd97525c01697a1ba4f" target="_parent">getFitRange</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_getstartparameters">
<div class="SREntry">
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#afc7411b7a3191748dfcc90f86b823bf4" target="_parent">getStartParameters</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_kth_5fsmallest">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a7d9a7b8d0c8ff69638a5fbb9f4c04b90" target="_parent">kth_smallest</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_linearcalibration">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#ac7f46f2d051f28211681e851f99d3fc4" target="_parent">linearCalibration</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_median">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a37f557bacb75213073c8d421cc1240f4" target="_parent">median</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_noise">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a4461206397e2442c92be9151ee231ec5" target="_parent">noise</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_plot_5fflag">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a4edfb157df3624be677177dec0f9555b" target="_parent">plot_flag</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_quick_5fselect">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#aa3ab0e7c3c862fb51dfda78f1b09a55c" target="_parent">quick_select</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,70 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_scurve">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#ae220482622e88a46b12498b0e4d8113a" target="_parent">scurve</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_scurvefluo">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a4eba39623b518d67a63192970a78f530" target="_parent">scurveFluo</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_setfitrange">
<div class="SREntry">
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#a695cef5428a833d515172d987774f67b" target="_parent">setFitRange</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_setplotflag">
<div class="SREntry">
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="../classenergyCalibration.html#a3d9af0857f7a68b7e4519917ea97e6be" target="_parent">setPlotFlag</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_setscansign">
<div class="SREntry">
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="javascript:searchResults.Toggle('SR_setscansign')">setScanSign</a>
<div class="SRChildren">
<a id="Item4_c0" onkeydown="return searchResults.NavChild(event,4,0)" onkeypress="return searchResults.NavChild(event,4,0)" onkeyup="return searchResults.NavChild(event,4,0)" class="SRScope" href="../classenergyCalibrationFunctions.html#a716759a1ae09ea3c841f824af3ece415" target="_parent">energyCalibrationFunctions::setScanSign()</a>
<a id="Item4_c1" onkeydown="return searchResults.NavChild(event,4,1)" onkeypress="return searchResults.NavChild(event,4,1)" onkeyup="return searchResults.NavChild(event,4,1)" class="SRScope" href="../classenergyCalibration.html#a7dbf1676b30ffe90c5aa917f1b2b77ee" target="_parent">energyCalibration::setScanSign()</a>
</div>
</div>
</div>
<div class="SRResult" id="SR_setstartparameters">
<div class="SREntry">
<a id="Item5" onkeydown="return searchResults.Nav(event,5)" onkeypress="return searchResults.Nav(event,5)" onkeyup="return searchResults.Nav(event,5)" class="SRSymbol" href="../classenergyCalibration.html#aba156f5290f7b404d7b8ea735fd7e7bf" target="_parent">setStartParameters</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_sign">
<div class="SREntry">
<a id="Item6" onkeydown="return searchResults.Nav(event,6)" onkeypress="return searchResults.Nav(event,6)" onkeyup="return searchResults.Nav(event,6)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a4fc7c435169b5bf4672cf654270097d0" target="_parent">sign</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_spectrum">
<div class="SREntry">
<a id="Item7" onkeydown="return searchResults.Nav(event,7)" onkeypress="return searchResults.Nav(event,7)" onkeyup="return searchResults.Nav(event,7)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a015eb05dc34b77642ab2a2a9f126f170" target="_parent">spectrum</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR__7eenergycalibration">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a3bae2b9c26893daa8f583758509c844f" target="_parent">~energyCalibration</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,29 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_energycalibration">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html" target="_parent">energyCalibration</a>
</div>
</div>
<div class="SRResult" id="SR_energycalibrationfunctions">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibrationFunctions.html" target="_parent">energyCalibrationFunctions</a>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

View File

@ -0,0 +1,24 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_energycalibration_2eh">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../energyCalibration_8h.html" target="_parent">energyCalibration.h</a>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_calibrate">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#aa6e7624f6cafb8c3a22c821aee2c6fc4" target="_parent">calibrate</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,49 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_energycalibration">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a16f0658d2b526f52784057b2166efd22" target="_parent">energyCalibration</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_energycalibrationfunctions">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a8c17162b89f3b2e642004e7c88a22ac2" target="_parent">energyCalibrationFunctions</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_erffuncfluo">
<div class="SREntry">
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#aa5fbe9da48bc2ef90b699e06ea8c5111" target="_parent">erfFuncFluo</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_erffunction">
<div class="SREntry">
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a2da1e3b9a10d23233256f8c2234f2457" target="_parent">erfFunction</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_erffunctionchargesharing">
<div class="SREntry">
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a8d1b3d0f8b30423dad56d8ce5323a4a8" target="_parent">erfFunctionChargeSharing</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_fitscurve">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a0dcd8e06e31f7b70488a012db12b2bf8" target="_parent">fitSCurve</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_gausschargesharing">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#ae9582e5c46d27ad25d6139d0386698f7" target="_parent">gaussChargeSharing</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_getfitrange">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#abfb02327a6897bd97525c01697a1ba4f" target="_parent">getFitRange</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_getstartparameters">
<div class="SREntry">
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#afc7411b7a3191748dfcc90f86b823bf4" target="_parent">getStartParameters</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_kth_5fsmallest">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a7d9a7b8d0c8ff69638a5fbb9f4c04b90" target="_parent">kth_smallest</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_linearcalibration">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#ac7f46f2d051f28211681e851f99d3fc4" target="_parent">linearCalibration</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_median">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a37f557bacb75213073c8d421cc1240f4" target="_parent">median</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_quick_5fselect">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#aa3ab0e7c3c862fb51dfda78f1b09a55c" target="_parent">quick_select</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,64 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_scurve">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#ae220482622e88a46b12498b0e4d8113a" target="_parent">scurve</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_scurvefluo">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a4eba39623b518d67a63192970a78f530" target="_parent">scurveFluo</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRResult" id="SR_setfitrange">
<div class="SREntry">
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#a695cef5428a833d515172d987774f67b" target="_parent">setFitRange</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_setplotflag">
<div class="SREntry">
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="../classenergyCalibration.html#a3d9af0857f7a68b7e4519917ea97e6be" target="_parent">setPlotFlag</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_setscansign">
<div class="SREntry">
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="javascript:searchResults.Toggle('SR_setscansign')">setScanSign</a>
<div class="SRChildren">
<a id="Item4_c0" onkeydown="return searchResults.NavChild(event,4,0)" onkeypress="return searchResults.NavChild(event,4,0)" onkeyup="return searchResults.NavChild(event,4,0)" class="SRScope" href="../classenergyCalibrationFunctions.html#a716759a1ae09ea3c841f824af3ece415" target="_parent">energyCalibrationFunctions::setScanSign()</a>
<a id="Item4_c1" onkeydown="return searchResults.NavChild(event,4,1)" onkeypress="return searchResults.NavChild(event,4,1)" onkeyup="return searchResults.NavChild(event,4,1)" class="SRScope" href="../classenergyCalibration.html#a7dbf1676b30ffe90c5aa917f1b2b77ee" target="_parent">energyCalibration::setScanSign()</a>
</div>
</div>
</div>
<div class="SRResult" id="SR_setstartparameters">
<div class="SREntry">
<a id="Item5" onkeydown="return searchResults.Nav(event,5)" onkeypress="return searchResults.Nav(event,5)" onkeyup="return searchResults.Nav(event,5)" class="SRSymbol" href="../classenergyCalibration.html#aba156f5290f7b404d7b8ea735fd7e7bf" target="_parent">setStartParameters</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_spectrum">
<div class="SREntry">
<a id="Item6" onkeydown="return searchResults.Nav(event,6)" onkeypress="return searchResults.Nav(event,6)" onkeyup="return searchResults.Nav(event,6)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a015eb05dc34b77642ab2a2a9f126f170" target="_parent">spectrum</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR__7eenergycalibration">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a3bae2b9c26893daa8f583758509c844f" target="_parent">~energyCalibration</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,11 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</body>
</html>

View File

@ -0,0 +1,198 @@
/*---------------- Search Box */
#MSearchBox {
padding: 0px;
margin: 0px;
border: none;
border: 1px solid #84B0C7;
white-space: nowrap;
-moz-border-radius: 8px;
-webkit-border-top-left-radius: 8px;
-webkit-border-top-right-radius: 8px;
-webkit-border-bottom-left-radius: 8px;
-webkit-border-bottom-right-radius: 8px;
}
#MSearchField {
font: 9pt Arial, Verdana, sans-serif;
color: #999999;
background-color: #FFFFFF;
font-style: normal;
cursor: text;
padding: 1px 1px;
margin: 0px 6px 0px 0px;
border: none;
outline: none;
vertical-align: middle;
}
.MSearchBoxActive #MSearchField {
color: #000000;
}
#MSearchSelect {
float : none;
display : inline;
background : none;
font: 9pt Verdana, sans-serif;
border: none;
margin: 0px 0px 0px 6px;
vertical-align: middle;
padding: 0px 0px;
}
#MSearchClose {
float : none;
display : none;
background : none;
border: none;
margin: 0px 4px 0px 0px;
padding: 0px 0px;
outline: none;
}
#MSearchCloseImg {
vertical-align: middle;
}
.MSearchBoxLeft {
display: block;
text-align: left;
float: left;
margin-left: 6px;
}
.MSearchBoxRight {
display: block;
float: right;
text-align: right;
margin-right: 6px;
}
.MSearchBoxSpacer {
font-size: 0px;
clear: both;
}
.MSearchBoxRow {
font-size: 0px;
clear: both;
}
/*---------------- Search filter selection */
#MSearchSelectWindow {
display: none;
position: absolute;
left: 0; top: 0;
border: 1px solid #A0A0A0;
background-color: #FAFAFA;
z-index: 1;
padding-top: 4px;
padding-bottom: 4px;
-moz-border-radius: 4px;
-webkit-border-top-left-radius: 4px;
-webkit-border-top-right-radius: 4px;
-webkit-border-bottom-left-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
}
.SelectItem {
font: 8pt Arial, Verdana, sans-serif;
padding-left: 2px;
padding-right: 12px;
border: 0px;
}
span.SelectionMark {
margin-right: 4px;
font-family: monospace;
outline-style: none;
text-decoration: none;
}
a.SelectItem {
display: block;
outline-style: none;
color: #000000;
text-decoration: none;
padding-left: 6px;
padding-right: 12px;
}
a.SelectItem:focus,
a.SelectItem:active {
color: #000000;
outline-style: none;
text-decoration: none;
}
a.SelectItem:hover {
color: #FFFFFF;
background-color: #2A50E4;
outline-style: none;
text-decoration: none;
cursor: pointer;
display: block;
}
/*---------------- Search results window */
iframe#MSearchResults {
width: 60ex;
height: 15em;
}
#MSearchResultsWindow {
display: none;
position: absolute;
left: 0; top: 0;
border: 1px solid #000000;
background-color: #EEF3F5;
}
/* ----------------------------------- */
#SRIndex {
clear:both;
padding-bottom: 15px;
}
.SREntry {
font-size: 10pt;
padding-left: 1ex;
}
.SRPage .SREntry {
font-size: 8pt;
padding: 1px 5px;
}
body.SRPage {
margin: 5px 2px;
}
.SRChildren {
padding-left: 3ex; padding-bottom: .5em
}
.SRPage .SRChildren {
display: none;
}
.SRSymbol {
font-weight: bold; color: #153788;
font-family: Arial, Verdana, sans-serif;
text-decoration: none;
outline: none;
}
a.SRScope {
display: block;
color: #153788;
font-family: Arial, Verdana, sans-serif;
text-decoration: none;
outline: none;
}
a.SRSymbol:focus, a.SRSymbol:active,
a.SRScope:focus, a.SRScope:active {
text-decoration: underline;
}
.SRPage .SRStatus {
padding: 2px 5px;
font-size: 8pt;
font-style: italic;
}
.SRResult {
display: none;
}

View File

@ -0,0 +1,734 @@
// Search script generated by doxygen
// Copyright (C) 2009 by Dimitri van Heesch.
// The code in this file is loosly based on main.js, part of Natural Docs,
// which is Copyright (C) 2003-2008 Greg Valure
// Natural Docs is licensed under the GPL.
var indexSectionsWithContent =
{
0: "000000000000000000000000000000000000000000000000000000000000000001110111000111101101000000000010",
1: "000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000",
2: "000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000",
3: "000000000000000000000000000000000000000000000000000000000000000000010111000111000101000000000010",
4: "000000000000000000000000000000000000000000000000000000000000000001110110000000101001000000000000"
};
var indexSectionNames =
{
0: "all",
1: "classes",
2: "files",
3: "functions",
4: "variables"
};
function convertToId(search)
{
var result = '';
for (i=0;i<search.length;i++)
{
var c = search.charAt(i);
var cn = c.charCodeAt(0);
if (c.match(/[a-z0-9]/))
{
result+=c;
}
else if (cn<16)
{
result+="_0"+cn.toString(16);
}
else
{
result+="_"+cn.toString(16);
}
}
return result;
}
function getXPos(item)
{
var x = 0;
if (item.offsetWidth)
{
while (item && item!=document.body)
{
x += item.offsetLeft;
item = item.offsetParent;
}
}
return x;
}
function getYPos(item)
{
var y = 0;
if (item.offsetWidth)
{
while (item && item!=document.body)
{
y += item.offsetTop;
item = item.offsetParent;
}
}
return y;
}
/* A class handling everything associated with the search panel.
Parameters:
name - The name of the global variable that will be
storing this instance. Is needed to be able to set timeouts.
resultPath - path to use for external files
*/
function SearchBox(name, resultsPath, inFrame, label)
{
if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
// ---------- Instance variables
this.name = name;
this.resultsPath = resultsPath;
this.keyTimeout = 0;
this.keyTimeoutLength = 500;
this.closeSelectionTimeout = 300;
this.lastSearchValue = "";
this.lastResultsPage = "";
this.hideTimeout = 0;
this.searchIndex = 0;
this.searchActive = false;
this.insideFrame = inFrame;
this.searchLabel = label;
// ----------- DOM Elements
this.DOMSearchField = function()
{ return document.getElementById("MSearchField"); }
this.DOMSearchSelect = function()
{ return document.getElementById("MSearchSelect"); }
this.DOMSearchSelectWindow = function()
{ return document.getElementById("MSearchSelectWindow"); }
this.DOMPopupSearchResults = function()
{ return document.getElementById("MSearchResults"); }
this.DOMPopupSearchResultsWindow = function()
{ return document.getElementById("MSearchResultsWindow"); }
this.DOMSearchClose = function()
{ return document.getElementById("MSearchClose"); }
this.DOMSearchBox = function()
{ return document.getElementById("MSearchBox"); }
// ------------ Event Handlers
// Called when focus is added or removed from the search field.
this.OnSearchFieldFocus = function(isActive)
{
this.Activate(isActive);
}
this.OnSearchSelectShow = function()
{
var searchSelectWindow = this.DOMSearchSelectWindow();
var searchField = this.DOMSearchSelect();
if (this.insideFrame)
{
var left = getXPos(searchField);
var top = getYPos(searchField);
left += searchField.offsetWidth + 6;
top += searchField.offsetHeight;
// show search selection popup
searchSelectWindow.style.display='block';
left -= searchSelectWindow.offsetWidth;
searchSelectWindow.style.left = left + 'px';
searchSelectWindow.style.top = top + 'px';
}
else
{
var left = getXPos(searchField);
var top = getYPos(searchField);
top += searchField.offsetHeight;
// show search selection popup
searchSelectWindow.style.display='block';
searchSelectWindow.style.left = left + 'px';
searchSelectWindow.style.top = top + 'px';
}
// stop selection hide timer
if (this.hideTimeout)
{
clearTimeout(this.hideTimeout);
this.hideTimeout=0;
}
return false; // to avoid "image drag" default event
}
this.OnSearchSelectHide = function()
{
this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
this.closeSelectionTimeout);
}
// Called when the content of the search field is changed.
this.OnSearchFieldChange = function(evt)
{
if (this.keyTimeout) // kill running timer
{
clearTimeout(this.keyTimeout);
this.keyTimeout = 0;
}
var e = (evt) ? evt : window.event; // for IE
if (e.keyCode==40 || e.keyCode==13)
{
if (e.shiftKey==1)
{
this.OnSearchSelectShow();
var win=this.DOMSearchSelectWindow();
for (i=0;i<win.childNodes.length;i++)
{
var child = win.childNodes[i]; // get span within a
if (child.className=='SelectItem')
{
child.focus();
return;
}
}
return;
}
else if (window.frames.MSearchResults.searchResults)
{
var elem = window.frames.MSearchResults.searchResults.NavNext(0);
if (elem) elem.focus();
}
}
else if (e.keyCode==27) // Escape out of the search field
{
this.DOMSearchField().blur();
this.DOMPopupSearchResultsWindow().style.display = 'none';
this.DOMSearchClose().style.display = 'none';
this.lastSearchValue = '';
this.Activate(false);
return;
}
// strip whitespaces
var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
if (searchValue != this.lastSearchValue) // search value has changed
{
if (searchValue != "") // non-empty search
{
// set timer for search update
this.keyTimeout = setTimeout(this.name + '.Search()',
this.keyTimeoutLength);
}
else // empty search field
{
this.DOMPopupSearchResultsWindow().style.display = 'none';
this.DOMSearchClose().style.display = 'none';
this.lastSearchValue = '';
}
}
}
this.SelectItemCount = function(id)
{
var count=0;
var win=this.DOMSearchSelectWindow();
for (i=0;i<win.childNodes.length;i++)
{
var child = win.childNodes[i]; // get span within a
if (child.className=='SelectItem')
{
count++;
}
}
return count;
}
this.SelectItemSet = function(id)
{
var i,j=0;
var win=this.DOMSearchSelectWindow();
for (i=0;i<win.childNodes.length;i++)
{
var child = win.childNodes[i]; // get span within a
if (child.className=='SelectItem')
{
var node = child.firstChild;
if (j==id)
{
node.innerHTML='&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.

After

Width:  |  Height:  |  Size: 527 B

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_ampl">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a77b954cd513271d2cfafee6033435584" target="_parent">ampl</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,31 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_bg_5foffset">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#aaa11f256a8b0a94c28a98d068013b327" target="_parent">bg_offset</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_bg_5fslope">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#a9676e5cc2757c723c2262d641fb4b8b4" target="_parent">bg_slope</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,31 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_conven">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../energyCalibration_8h.html#aa48a6c1eb7d418c5d0618fbb161ae321" target="_parent">conven</a>
<span class="SRScope">energyCalibration.h</span>
</div>
</div>
<div class="SRResult" id="SR_cs_5fslope">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#aca1efedbfea0ad5c9ea2d794e3fb368d" target="_parent">cs_slope</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_el">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../energyCalibration_8h.html#ad1db7b454cab6ae1749310d7f444849b" target="_parent">el</a>
<span class="SRScope">energyCalibration.h</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,49 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_fit_5fmax">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#ae979386a3f787ef706f4a9ec5bf41d7d" target="_parent">fit_max</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_fit_5fmin">
<div class="SREntry">
<a id="Item1" onkeydown="return searchResults.Nav(event,1)" onkeypress="return searchResults.Nav(event,1)" onkeyup="return searchResults.Nav(event,1)" class="SRSymbol" href="../classenergyCalibration.html#a262f574732186cdd8d3a11344d03d0bb" target="_parent">fit_min</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_flex">
<div class="SREntry">
<a id="Item2" onkeydown="return searchResults.Nav(event,2)" onkeypress="return searchResults.Nav(event,2)" onkeyup="return searchResults.Nav(event,2)" class="SRSymbol" href="../classenergyCalibration.html#ab99d770f1c9af68d591ed20847813ad1" target="_parent">flex</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_fscurve">
<div class="SREntry">
<a id="Item3" onkeydown="return searchResults.Nav(event,3)" onkeypress="return searchResults.Nav(event,3)" onkeyup="return searchResults.Nav(event,3)" class="SRSymbol" href="../classenergyCalibration.html#a57706a328324c25dd9f8ba6d1486e4ce" target="_parent">fscurve</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRResult" id="SR_funcs">
<div class="SREntry">
<a id="Item4" onkeydown="return searchResults.Nav(event,4)" onkeypress="return searchResults.Nav(event,4)" onkeyup="return searchResults.Nav(event,4)" class="SRSymbol" href="../classenergyCalibration.html#ae9b3307bf858331241871bde42fdd24e" target="_parent">funcs</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_noise">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a4461206397e2442c92be9151ee231ec5" target="_parent">noise</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_plot_5fflag">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibration.html#a4edfb157df3624be677177dec0f9555b" target="_parent">plot_flag</a>
<span class="SRScope">energyCalibration</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title></title>
<link rel="stylesheet" type="text/css" href="search.css"/>
<script type="text/javascript" src="search.js"></script>
</head>
<body class="SRPage">
<div id="SRIndex">
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRResult" id="SR_sign">
<div class="SREntry">
<a id="Item0" onkeydown="return searchResults.Nav(event,0)" onkeypress="return searchResults.Nav(event,0)" onkeyup="return searchResults.Nav(event,0)" class="SRSymbol" href="../classenergyCalibrationFunctions.html#a4fc7c435169b5bf4672cf654270097d0" target="_parent">sign</a>
<span class="SRScope">energyCalibrationFunctions</span>
</div>
</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
<script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults");
searchResults.Search();
--></script>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,102 @@
/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
DIV.tabs
{
float : left;
width : 100%;
background : url("tab_b.gif") repeat-x bottom;
margin-bottom : 4px;
}
DIV.tabs UL
{
margin : 0px;
padding-left : 10px;
list-style : none;
}
DIV.tabs LI, DIV.tabs FORM
{
display : inline;
margin : 0px;
padding : 0px;
}
DIV.tabs FORM
{
float : right;
}
DIV.tabs A
{
float : left;
background : url("tab_r.gif") no-repeat right top;
border-bottom : 1px solid #84B0C7;
font-size : x-small;
font-weight : bold;
text-decoration : none;
}
DIV.tabs A:hover
{
background-position: 100% -150px;
}
DIV.tabs A:link, DIV.tabs A:visited,
DIV.tabs A:active, DIV.tabs A:hover
{
color: #1A419D;
}
DIV.tabs SPAN
{
float : left;
display : block;
background : url("tab_l.gif") no-repeat left top;
padding : 5px 9px;
white-space : nowrap;
}
DIV.tabs INPUT
{
float : right;
display : inline;
font-size : 1em;
}
DIV.tabs TD
{
font-size : x-small;
font-weight : bold;
text-decoration : none;
}
/* Commented Backslash Hack hides rule from IE5-Mac \*/
DIV.tabs SPAN {float : none;}
/* End IE5-Mac hack */
DIV.tabs A:hover SPAN
{
background-position: 0% -150px;
}
DIV.tabs LI#current A
{
background-position: 100% -150px;
border-width : 0px;
}
DIV.tabs LI#current SPAN
{
background-position: 0% -150px;
padding-bottom : 6px;
}
DIV.nav
{
background : none;
border : none;
border-bottom : 1px solid #84B0C7;
}

View File

@ -0,0 +1,39 @@
all: clean refman.dvi
ps: refman.ps
pdf: refman.pdf
ps_2on1: refman_2on1.ps
pdf_2on1: refman_2on1.pdf
refman.ps: refman.dvi
dvips -o refman.ps refman.dvi
refman.pdf: refman.ps
ps2pdf refman.ps refman.pdf
refman.dvi: refman.tex doxygen.sty
echo "Running latex..."
latex refman.tex
echo "Running makeindex..."
makeindex refman.idx
echo "Rerunning latex...."
latex refman.tex
latex_count=5 ; \
while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
do \
echo "Rerunning latex...." ;\
latex refman.tex ;\
latex_count=`expr $$latex_count - 1` ;\
done
refman_2on1.ps: refman.ps
psnup -2 refman.ps >refman_2on1.ps
refman_2on1.pdf: refman_2on1.ps
ps2pdf refman_2on1.ps refman_2on1.pdf
clean:
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf

View File

@ -0,0 +1,5 @@
\section{Class List}
Here are the classes, structs, unions and interfaces with brief descriptions:\begin{CompactList}
\item\contentsline{section}{\bf{energy\-Calibration} }{\pageref{classenergyCalibration}}{}
\item\contentsline{section}{\bf{energy\-Calibration\-Functions} (Energy calibration functions )}{\pageref{classenergyCalibrationFunctions}}{}
\end{CompactList}

View File

@ -0,0 +1,337 @@
\section{energy\-Calibration Class Reference}
\label{classenergyCalibration}\index{energyCalibration@{energyCalibration}}
{\tt \#include $<$energy\-Calibration.h$>$}
\subsection*{Public Member Functions}
\begin{CompactItemize}
\item
\bf{energy\-Calibration} ()
\item
\bf{$\sim$energy\-Calibration} ()
\item
int \bf{set\-Plot\-Flag} (int p=-1)
\item
int \bf{set\-Scan\-Sign} (int s=0)
\item
int \bf{set\-Charge\-Sharing} (int p=-1)
\item
void \bf{set\-Fit\-Range} (Double\_\-t mi, Double\_\-t ma)
\item
void \bf{get\-Fit\-Range} (Double\_\-t \&mi, Double\_\-t \&ma)
\item
void \bf{set\-Start\-Parameters} (Double\_\-t $\ast$par)
\item
void \bf{get\-Start\-Parameters} (Double\_\-t $\ast$par)
\item
TF1 $\ast$ \bf{fit\-SCurve} (TH1 $\ast$h1, Double\_\-t $\ast$mypar, Double\_\-t $\ast$emypar)
\item
TF1 $\ast$ \bf{fit\-Spectrum} (TH1 $\ast$h1, Double\_\-t $\ast$mypar, Double\_\-t $\ast$emypar)
\item
TGraph\-Errors $\ast$ \bf{linear\-Calibration} (int nscan, Double\_\-t $\ast$en, Double\_\-t $\ast$een, Double\_\-t $\ast$fl, Double\_\-t $\ast$efl, Double\_\-t \&gain, Double\_\-t \&off, Double\_\-t \&egain, Double\_\-t \&eoff)
\item
TGraph\-Errors $\ast$ \bf{calibrate\-Scurves} (int nscan, Double\_\-t $\ast$en, Double\_\-t $\ast$een, TH1F $\ast$$\ast$h1, Double\_\-t \&gain, Double\_\-t \&off, Double\_\-t \&egain, Double\_\-t \&eoff)
\item
TGraph\-Errors $\ast$ \bf{calibrate\-Spectra} (int nscan, Double\_\-t $\ast$en, Double\_\-t $\ast$een, TH1F $\ast$$\ast$h1, Double\_\-t \&gain, Double\_\-t \&off, Double\_\-t \&egain, Double\_\-t \&eoff)
\end{CompactItemize}
\subsection*{Private Member Functions}
\begin{CompactItemize}
\item
TGraph\-Errors $\ast$ \bf{calibrate} (int nscan, Double\_\-t $\ast$en, Double\_\-t $\ast$een, TH1F $\ast$$\ast$h1, Double\_\-t \&gain, Double\_\-t \&off, Double\_\-t \&egain, Double\_\-t \&eoff, int integral=1)
\item
void \bf{init\-Fit\-Function} (TF1 $\ast$fun, TH1 $\ast$h1)
\item
TF1 $\ast$ \bf{fit\-Function} (TF1 $\ast$fun, TH1 $\ast$h1, Double\_\-t $\ast$mypar, Double\_\-t $\ast$emypar)
\end{CompactItemize}
\subsection*{Private Attributes}
\begin{CompactItemize}
\item
int \bf{plot\_\-flag}
\item
int \bf{cs\_\-flag}
\item
Double\_\-t \bf{fit\_\-min}
\item
Double\_\-t \bf{fit\_\-max}
\item
Double\_\-t \bf{bg\_\-offset}
\item
Double\_\-t \bf{bg\_\-slope}
\item
Double\_\-t \bf{flex}
\item
Double\_\-t \bf{noise}
\item
Double\_\-t \bf{ampl}
\item
Double\_\-t \bf{cs\_\-slope}
\item
\bf{energy\-Calibration\-Functions} $\ast$ \bf{funcs}
\item
TF1 $\ast$ \bf{fscurve}
\item
TF1 $\ast$ \bf{fspectrum}
\end{CompactItemize}
\subsection{Detailed Description}
class alowing the energy calibration of photon counting and anlogue detectors
\subsection{Constructor \& Destructor Documentation}
\index{energyCalibration@{energy\-Calibration}!energyCalibration@{energyCalibration}}
\index{energyCalibration@{energyCalibration}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}energy\-Calibration::energy\-Calibration ()}\label{classenergyCalibration_16f0658d2b526f52784057b2166efd22}
default constructor - creates the function with which the s-curves will be fitted \index{energyCalibration@{energy\-Calibration}!~energyCalibration@{$\sim$energyCalibration}}
\index{~energyCalibration@{$\sim$energyCalibration}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}energy\-Calibration::$\sim$energy\-Calibration ()}\label{classenergyCalibration_3bae2b9c26893daa8f583758509c844f}
default destructor - deletes the function with which the s-curves will be fitted
\subsection{Member Function Documentation}
\index{energyCalibration@{energy\-Calibration}!calibrate@{calibrate}}
\index{calibrate@{calibrate}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TGraph\-Errors$\ast$ energy\-Calibration::calibrate (int {\em nscan}, Double\_\-t $\ast$ {\em en}, Double\_\-t $\ast$ {\em een}, TH1F $\ast$$\ast$ {\em h1}, Double\_\-t \& {\em gain}, Double\_\-t \& {\em off}, Double\_\-t \& {\em egain}, Double\_\-t \& {\em eoff}, int {\em integral} = {\tt 1})\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_378daeddde40b6127ee6ed595506928c}
calculates gain and offset for the set of energies \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em nscan}]number of energy scans \item[{\em en}]array of energies (nscan long) \item[{\em een}]array of errors on energies (nscan long) - can be NULL! \item[{\em h1}]array of TH1 \item[{\em gain}]reference to gain resulting from the fit \item[{\em offset}]reference to offset resulting from the fit \item[{\em integral}]1 is an s-curve set (default), 0 spectra \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]graph energy vs peak/inflection point \end{Desc}
\index{energyCalibration@{energy\-Calibration}!calibrateScurves@{calibrateScurves}}
\index{calibrateScurves@{calibrateScurves}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TGraph\-Errors$\ast$ energy\-Calibration::calibrate\-Scurves (int {\em nscan}, Double\_\-t $\ast$ {\em en}, Double\_\-t $\ast$ {\em een}, TH1F $\ast$$\ast$ {\em h1}, Double\_\-t \& {\em gain}, Double\_\-t \& {\em off}, Double\_\-t \& {\em egain}, Double\_\-t \& {\em eoff})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_6f5ee6771522a31e4fe1eca143e2aa9b}
calculates gain and offset for the set of energy scans \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em nscan}]number of energy scans \item[{\em en}]array of energies (nscan long) \item[{\em een}]array of errors on energies (nscan long) - can be NULL! \item[{\em h1}]array of TH1 \item[{\em gain}]reference to gain resulting from the fit \item[{\em off}]reference to offset resulting from the fit \item[{\em egain}]reference to error on the gain resulting from the fit \item[{\em eoff}]reference to the error on the offset resulting from the fit \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]graph energy vs inflection point \end{Desc}
\index{energyCalibration@{energy\-Calibration}!calibrateSpectra@{calibrateSpectra}}
\index{calibrateSpectra@{calibrateSpectra}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TGraph\-Errors$\ast$ energy\-Calibration::calibrate\-Spectra (int {\em nscan}, Double\_\-t $\ast$ {\em en}, Double\_\-t $\ast$ {\em een}, TH1F $\ast$$\ast$ {\em h1}, Double\_\-t \& {\em gain}, Double\_\-t \& {\em off}, Double\_\-t \& {\em egain}, Double\_\-t \& {\em eoff})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_092637f656c0b88d57797e3ebd0f3e58}
calculates gain and offset for the set of energy spectra \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em nscan}]number of energy scans \item[{\em en}]array of energies (nscan long) \item[{\em een}]array of errors on energies (nscan long) - can be NULL! \item[{\em h1}]array of TH1 \item[{\em gain}]reference to gain resulting from the fit \item[{\em off}]reference to offset resulting from the fit \item[{\em egain}]reference to error on the gain resulting from the fit \item[{\em eoff}]reference to the error on the offset resulting from the fit \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]graph energy vs peak \end{Desc}
\index{energyCalibration@{energy\-Calibration}!fitFunction@{fitFunction}}
\index{fitFunction@{fitFunction}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TF1$\ast$ energy\-Calibration::fit\-Function (TF1 $\ast$ {\em fun}, TH1 $\ast$ {\em h1}, Double\_\-t $\ast$ {\em mypar}, Double\_\-t $\ast$ {\em emypar})\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_fe1c6dc5f56d12fe06569f401da19729}
Perfors the fit according to the flags specified and returns the fitted function \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em fun}]function to fit \item[{\em h1}]histogram to fit \item[{\em mypar}]pointer to fit parameters array \item[{\em emypar}]pointer to fit parameter errors \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]the fitted function - can be used e.g. to get the Chi2 or similar \end{Desc}
\index{energyCalibration@{energy\-Calibration}!fitSCurve@{fitSCurve}}
\index{fitSCurve@{fitSCurve}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TF1$\ast$ energy\-Calibration::fit\-SCurve (TH1 $\ast$ {\em h1}, Double\_\-t $\ast$ {\em mypar}, Double\_\-t $\ast$ {\em emypar})}\label{classenergyCalibration_0dcd8e06e31f7b70488a012db12b2bf8}
fits histogram with the s-curve function \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em h1}]1d-histogram to be fitted \item[{\em mypar}]pointer to fit parameters array \item[{\em emypar}]pointer to fit parameter errors \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]the fitted function - can be used e.g. to get the Chi2 or similar \end{Desc}
\index{energyCalibration@{energy\-Calibration}!fitSpectrum@{fitSpectrum}}
\index{fitSpectrum@{fitSpectrum}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TF1$\ast$ energy\-Calibration::fit\-Spectrum (TH1 $\ast$ {\em h1}, Double\_\-t $\ast$ {\em mypar}, Double\_\-t $\ast$ {\em emypar})}\label{classenergyCalibration_7d22b28cd2fad3d334f15f3d6dc7975a}
fits histogram with the spectrum \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em h1}]1d-histogram to be fitted \item[{\em mypar}]pointer to fit parameters array \item[{\em emypar}]pointer to fit parameter errors \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]the fitted function - can be used e.g. to get the Chi2 or similar \end{Desc}
\index{energyCalibration@{energy\-Calibration}!getFitRange@{getFitRange}}
\index{getFitRange@{getFitRange}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void energy\-Calibration::get\-Fit\-Range (Double\_\-t \& {\em mi}, Double\_\-t \& {\em ma})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_bfb02327a6897bd97525c01697a1ba4f}
gets the s-curve fit range \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em mi}]reference for minimum of the fit range (-1 is histogram x-min) \item[{\em ma}]reference for maximum of the fit range (-1 is histogram x-max) \end{description}
\end{Desc}
\index{energyCalibration@{energy\-Calibration}!getStartParameters@{getStartParameters}}
\index{getStartParameters@{getStartParameters}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void energy\-Calibration::get\-Start\-Parameters (Double\_\-t $\ast$ {\em par})}\label{classenergyCalibration_fc7411b7a3191748dfcc90f86b823bf4}
get start parameters for the s-curve function \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em par}]parameters, -1 means auto-calculated par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point par[3] is the RMS par[4] is the amplitude par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) -- always positive \end{description}
\end{Desc}
\index{energyCalibration@{energy\-Calibration}!initFitFunction@{initFitFunction}}
\index{initFitFunction@{initFitFunction}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void energy\-Calibration::init\-Fit\-Function (TF1 $\ast$ {\em fun}, TH1 $\ast$ {\em h1})\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_3e84328c11772b6263224340ec924e37}
Initializes the start parameters and the range of the fit depending on the histogram characteristics and/or on the start parameters specified by the user \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em fun}]pointer to function to be initialized \item[{\em h1}]histogram from which to extract the range and start parameters, if not already specified by the user \end{description}
\end{Desc}
\index{energyCalibration@{energy\-Calibration}!linearCalibration@{linearCalibration}}
\index{linearCalibration@{linearCalibration}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TGraph\-Errors$\ast$ energy\-Calibration::linear\-Calibration (int {\em nscan}, Double\_\-t $\ast$ {\em en}, Double\_\-t $\ast$ {\em een}, Double\_\-t $\ast$ {\em fl}, Double\_\-t $\ast$ {\em efl}, Double\_\-t \& {\em gain}, Double\_\-t \& {\em off}, Double\_\-t \& {\em egain}, Double\_\-t \& {\em eoff})}\label{classenergyCalibration_c7f46f2d051f28211681e851f99d3fc4}
calculates gain and offset for the set of inflection points \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em nscan}]number of energy scans \item[{\em en}]array of energies (nscan long) \item[{\em een}]array of errors on energies (nscan long) - can be NULL! \item[{\em fl}]array of inflection points (nscan long) \item[{\em efl}]array of errors on the inflection points (nscan long) \item[{\em gain}]reference to gain resulting from the fit \item[{\em off}]reference to offset resulting from the fit \item[{\em egain}]reference to error on the gain resulting from the fit \item[{\em eoff}]reference to the error on the offset resulting from the fit \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]graph energy vs inflection point \end{Desc}
\index{energyCalibration@{energy\-Calibration}!setChargeSharing@{setChargeSharing}}
\index{setChargeSharing@{setChargeSharing}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int energy\-Calibration::set\-Charge\-Sharing (int {\em p} = {\tt -1})}\label{classenergyCalibration_e2809b419799e8b199944f185d4ebab8}
sets plot flag \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em p}]plot flag (-1 gets, 0 unsets, $>$0 plot) \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]current plot flag \end{Desc}
\index{energyCalibration@{energy\-Calibration}!setFitRange@{setFitRange}}
\index{setFitRange@{setFitRange}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void energy\-Calibration::set\-Fit\-Range (Double\_\-t {\em mi}, Double\_\-t {\em ma})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_695cef5428a833d515172d987774f67b}
sets the s-curve fit range \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em mi}]minimum of the fit range (-1 is histogram x-min) \item[{\em ma}]maximum of the fit range (-1 is histogram x-max) \end{description}
\end{Desc}
\index{energyCalibration@{energy\-Calibration}!setPlotFlag@{setPlotFlag}}
\index{setPlotFlag@{setPlotFlag}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int energy\-Calibration::set\-Plot\-Flag (int {\em p} = {\tt -1})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_3d9af0857f7a68b7e4519917ea97e6be}
sets plot flag \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em p}]plot flag (-1 gets, 0 unsets, $>$0 plot) \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]current plot flag \end{Desc}
\index{energyCalibration@{energy\-Calibration}!setScanSign@{setScanSign}}
\index{setScanSign@{setScanSign}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int energy\-Calibration::set\-Scan\-Sign (int {\em s} = {\tt 0})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibration_7dbf1676b30ffe90c5aa917f1b2b77ee}
sets scan sign \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em s}]can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) otherwise gets \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]current scan sign can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) \end{Desc}
\index{energyCalibration@{energy\-Calibration}!setStartParameters@{setStartParameters}}
\index{setStartParameters@{setStartParameters}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void energy\-Calibration::set\-Start\-Parameters (Double\_\-t $\ast$ {\em par})}\label{classenergyCalibration_ba156f5290f7b404d7b8ea735fd7e7bf}
set start parameters for the s-curve function \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em par}]parameters, -1 sets to auto-calculation par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point par[3] is the RMS par[4] is the amplitude par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) -- always positive \end{description}
\end{Desc}
\subsection{Member Data Documentation}
\index{energyCalibration@{energy\-Calibration}!ampl@{ampl}}
\index{ampl@{ampl}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::ampl}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_77b954cd513271d2cfafee6033435584}
start value for the number of photons \index{energyCalibration@{energy\-Calibration}!bg_offset@{bg\_\-offset}}
\index{bg_offset@{bg\_\-offset}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::bg\_\-offset}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_aa11f256a8b0a94c28a98d068013b327}
start value for the background pedestal \index{energyCalibration@{energy\-Calibration}!bg_slope@{bg\_\-slope}}
\index{bg_slope@{bg\_\-slope}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::bg\_\-slope}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_9676e5cc2757c723c2262d641fb4b8b4}
start value for the background slope \index{energyCalibration@{energy\-Calibration}!cs_flag@{cs\_\-flag}}
\index{cs_flag@{cs\_\-flag}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int \bf{energy\-Calibration::cs\_\-flag}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_ce0be11dcc8418db3c7c2b139a015c96}
0 functions without charge sharing contribution, $>$0 with charge sharing contribution \index{energyCalibration@{energy\-Calibration}!cs_slope@{cs\_\-slope}}
\index{cs_slope@{cs\_\-slope}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::cs\_\-slope}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_ca1efedbfea0ad5c9ea2d794e3fb368d}
start value for the charge sharing slope \index{energyCalibration@{energy\-Calibration}!fit_max@{fit\_\-max}}
\index{fit_max@{fit\_\-max}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::fit\_\-max}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_e979386a3f787ef706f4a9ec5bf41d7d}
maximum of the s-curve fitting range, -1 is histogram x-max \index{energyCalibration@{energy\-Calibration}!fit_min@{fit\_\-min}}
\index{fit_min@{fit\_\-min}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::fit\_\-min}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_262f574732186cdd8d3a11344d03d0bb}
minimum of the s-curve fitting range, -1 is histogram x-min \index{energyCalibration@{energy\-Calibration}!flex@{flex}}
\index{flex@{flex}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::flex}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_b99d770f1c9af68d591ed20847813ad1}
start value for the inflection point \index{energyCalibration@{energy\-Calibration}!fscurve@{fscurve}}
\index{fscurve@{fscurve}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TF1$\ast$ \bf{energy\-Calibration::fscurve}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_57706a328324c25dd9f8ba6d1486e4ce}
function with which the s-curve will be fitted \index{energyCalibration@{energy\-Calibration}!fspectrum@{fspectrum}}
\index{fspectrum@{fspectrum}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}TF1$\ast$ \bf{energy\-Calibration::fspectrum}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_2ee734ab28b78dc5786a7ba430f8baa5}
function with which the spectrum will be fitted \index{energyCalibration@{energy\-Calibration}!funcs@{funcs}}
\index{funcs@{funcs}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}\bf{energy\-Calibration\-Functions}$\ast$ \bf{energy\-Calibration::funcs}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_e9b3307bf858331241871bde42fdd24e}
\index{energyCalibration@{energy\-Calibration}!noise@{noise}}
\index{noise@{noise}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t \bf{energy\-Calibration::noise}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_4461206397e2442c92be9151ee231ec5}
start value for the noise \index{energyCalibration@{energy\-Calibration}!plot_flag@{plot\_\-flag}}
\index{plot_flag@{plot\_\-flag}!energyCalibration@{energy\-Calibration}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int \bf{energy\-Calibration::plot\_\-flag}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibration_4edfb157df3624be677177dec0f9555b}
0 does not plot, $>$0 plots (flags?)
The documentation for this class was generated from the following file:\begin{CompactItemize}
\item
\bf{energy\-Calibration.h}\end{CompactItemize}

View File

@ -0,0 +1,135 @@
\section{energy\-Calibration\-Functions Class Reference}
\label{classenergyCalibrationFunctions}\index{energyCalibrationFunctions@{energyCalibrationFunctions}}
Energy calibration functions.
{\tt \#include $<$energy\-Calibration.h$>$}
\subsection*{Public Member Functions}
\begin{CompactItemize}
\item
\bf{energy\-Calibration\-Functions} (int s=-1)
\item
int \bf{set\-Scan\-Sign} (int s=0)
\item
Double\_\-t \bf{gauss\-Charge\-Sharing} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
\item
Double\_\-t \bf{erf\-Function} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
\item
Double\_\-t \bf{erf\-Function\-Charge\-Sharing} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
\item
Double\_\-t \bf{erf\-Func\-Fluo} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
\item
Double\_\-t \bf{spectrum} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
\item
Double\_\-t \bf{scurve} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
\item
Double\_\-t \bf{scurve\-Fluo} (Double\_\-t $\ast$x, Double\_\-t $\ast$par)
\end{CompactItemize}
\subsection*{Static Public Member Functions}
\begin{CompactItemize}
\item
static float \bf{median} (float $\ast$x, int n)
\item
static int \bf{quick\_\-select} (int arr[$\,$], int n)
\item
static int \bf{kth\_\-smallest} (int $\ast$a, int n, int k)
\end{CompactItemize}
\subsection*{Private Attributes}
\begin{CompactItemize}
\item
int \bf{sign}
\end{CompactItemize}
\subsection{Detailed Description}
Energy calibration functions.
class containing all the possible energy calibration functions (scurves with and without charge sharing, gaussian spectrum with and without charge sharing, possibility of chosing the sign of the X-axis)
\subsection{Constructor \& Destructor Documentation}
\index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!energyCalibrationFunctions@{energyCalibrationFunctions}}
\index{energyCalibrationFunctions@{energyCalibrationFunctions}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}energy\-Calibration\-Functions::energy\-Calibration\-Functions (int {\em s} = {\tt -1})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibrationFunctions_8c17162b89f3b2e642004e7c88a22ac2}
\subsection{Member Function Documentation}
\index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!erfFuncFluo@{erfFuncFluo}}
\index{erfFuncFluo@{erfFuncFluo}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::erf\-Func\-Fluo (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_a5fbe9da48bc2ef90b699e06ea8c5111}
Double Erf function with charge sharing slope par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point of the first energy par[3] is the RMS of the first energy par[4] is the amplitude of the first energy par[5] is the angual coefficient of the charge sharing slope of the first energy (scales with par[3]) par[6] is the inflection point of the second energy par[7] is the RMS of the second energy par[8] is the amplitude of the second energy par[9] is the angual coefficient of the charge sharing slope of the second energy (scales with par[8]) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!erfFunction@{erfFunction}}
\index{erfFunction@{erfFunction}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::erf\-Function (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_2da1e3b9a10d23233256f8c2234f2457}
Basic erf function par[0] is the inflection point par[1] is the RMS par[2] is the amplitude \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!erfFunctionChargeSharing@{erfFunctionChargeSharing}}
\index{erfFunctionChargeSharing@{erfFunctionChargeSharing}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::erf\-Function\-Charge\-Sharing (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_8d1b3d0f8b30423dad56d8ce5323a4a8}
Erf function with charge sharing slope par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point par[3] is the RMS par[4] is the amplitude par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!gaussChargeSharing@{gaussChargeSharing}}
\index{gaussChargeSharing@{gaussChargeSharing}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::gauss\-Charge\-Sharing (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_e9582e5c46d27ad25d6139d0386698f7}
Gaussian Function with charge sharing pedestal par[0] is the absolute height of the background pedestal par[1] is the slope of the background pedestal par[2] is the gaussian peak position par[3] is the RMS of the gaussian (and of the pedestal) par[4] is the height of the function par[5] is the fractional height of the charge sharing pedestal (scales with par[3]) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!kth_smallest@{kth\_\-smallest}}
\index{kth_smallest@{kth\_\-smallest}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}static int energy\-Calibration\-Functions::kth\_\-smallest (int $\ast$ {\em a}, int {\em n}, int {\em k})\hspace{0.3cm}{\tt [static]}}\label{classenergyCalibrationFunctions_7d9a7b8d0c8ff69638a5fbb9f4c04b90}
Calculates the median of an array of n elements (swaps the arrays!) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!median@{median}}
\index{median@{median}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}static float energy\-Calibration\-Functions::median (float $\ast$ {\em x}, int {\em n})\hspace{0.3cm}{\tt [static]}}\label{classenergyCalibrationFunctions_37f557bacb75213073c8d421cc1240f4}
Calculates the median of an array of n elements \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!quick_select@{quick\_\-select}}
\index{quick_select@{quick\_\-select}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}static int energy\-Calibration\-Functions::quick\_\-select (int {\em arr}[$\,$], int {\em n})\hspace{0.3cm}{\tt [static]}}\label{classenergyCalibrationFunctions_a3ab0e7c3c862fb51dfda78f1b09a55c}
Calculates the median of an array of n elements (swaps the arrays!) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!scurve@{scurve}}
\index{scurve@{scurve}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::scurve (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_e220482622e88a46b12498b0e4d8113a}
Erf function with charge sharing slope with the correct scan sign par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point par[3] is the RMS par[4] is the amplitude par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!scurveFluo@{scurveFluo}}
\index{scurveFluo@{scurveFluo}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::scurve\-Fluo (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_4eba39623b518d67a63192970a78f530}
Double Erf function with charge sharing slope par[0] is the pedestal par[1] is the slope of the pedestal par[2] is the inflection point of the first energy par[3] is the RMS of the first energy par[4] is the amplitude of the first energy par[5] is the angual coefficient of the charge sharing slope of the first energy (scales with par[3]) par[6] is the inflection point of the second energy par[7] is the RMS of the second energy par[8] is the amplitude of the second energy par[9] is the angual coefficient of the charge sharing slope of the second energy (scales with par[8]) \index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!setScanSign@{setScanSign}}
\index{setScanSign@{setScanSign}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int energy\-Calibration\-Functions::set\-Scan\-Sign (int {\em s} = {\tt 0})\hspace{0.3cm}{\tt [inline]}}\label{classenergyCalibrationFunctions_716759a1ae09ea3c841f824af3ece415}
sets scan sign \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em s}]can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) otherwise gets \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]current scan sign can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) \end{Desc}
\index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!spectrum@{spectrum}}
\index{spectrum@{spectrum}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}Double\_\-t energy\-Calibration\-Functions::spectrum (Double\_\-t $\ast$ {\em x}, Double\_\-t $\ast$ {\em par})}\label{classenergyCalibrationFunctions_015eb05dc34b77642ab2a2a9f126f170}
static function Gaussian with charge sharing pedestal with the correct scan sign par[0] is the absolute height of the background pedestal par[1] is the fractional height of the charge sharing pedestal (scales with par[3] par[2] is the gaussian peak position par[3] is the RMS of the gaussian (and of the pedestal) par[4] is the height of the function
\subsection{Member Data Documentation}
\index{energyCalibrationFunctions@{energy\-Calibration\-Functions}!sign@{sign}}
\index{sign@{sign}!energyCalibrationFunctions@{energy\-Calibration\-Functions}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}int \bf{energy\-Calibration\-Functions::sign}\hspace{0.3cm}{\tt [private]}}\label{classenergyCalibrationFunctions_4fc7c435169b5bf4672cf654270097d0}
The documentation for this class was generated from the following file:\begin{CompactItemize}
\item
\bf{energy\-Calibration.h}\end{CompactItemize}

View File

@ -0,0 +1,78 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{doxygen}
\RequirePackage{calc}
\RequirePackage{array}
\pagestyle{fancyplain}
\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
\lhead[\fancyplain{}{\bfseries\thepage}]
{\fancyplain{}{\bfseries\rightmark}}
\rhead[\fancyplain{}{\bfseries\leftmark}]
{\fancyplain{}{\bfseries\thepage}}
\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Tue Mar 27 16:32:29 2012 by Doxygen }]{}
\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Tue Mar 27 16:32:29 2012 by Doxygen }}
\cfoot{}
\newenvironment{Code}
{\footnotesize}
{\normalsize}
\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})}
\newenvironment{DocInclude}
{\footnotesize}
{\normalsize}
\newenvironment{VerbInclude}
{\footnotesize}
{\normalsize}
\newenvironment{Image}
{\begin{figure}[H]}
{\end{figure}}
\newenvironment{ImageNoCaption}{}{}
\newenvironment{CompactList}
{\begin{list}{}{
\setlength{\leftmargin}{0.5cm}
\setlength{\itemsep}{0pt}
\setlength{\parsep}{0pt}
\setlength{\topsep}{0pt}
\renewcommand{\makelabel}{\hfill}}}
{\end{list}}
\newenvironment{CompactItemize}
{
\begin{itemize}
\setlength{\itemsep}{-3pt}
\setlength{\parsep}{0pt}
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
}
{\end{itemize}}
\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}
\newlength{\tmplength}
\newenvironment{TabularC}[1]
{
\setlength{\tmplength}
{\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}
\par\begin{tabular*}{\linewidth}
{*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}
}
{\end{tabular*}\par}
\newcommand{\entrylabel}[1]{
{\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\vspace{1.5\baselineskip}}}}
\newenvironment{Desc}
{\begin{list}{}
{
\settowidth{\labelwidth}{40pt}
\setlength{\leftmargin}{\labelwidth}
\setlength{\parsep}{0pt}
\setlength{\itemsep}{-4pt}
\renewcommand{\makelabel}{\entrylabel}
}
}
{\end{list}}
\newenvironment{Indent}
{\begin{list}{}{\setlength{\leftmargin}{0.5cm}}
\item[]\ignorespaces}
{\unskip\end{list}}
\setlength{\parindent}{0cm}
\setlength{\parskip}{0.2cm}
\addtocounter{secnumdepth}{1}
\sloppy
\usepackage[T1]{fontenc}

View File

@ -0,0 +1,37 @@
\section{energy\-Calibration.h File Reference}
\label{energyCalibration_8h}\index{energyCalibration.h@{energyCalibration.h}}
{\tt \#include $<$TROOT.h$>$}\par
{\tt \#include $<$TF1.h$>$}\par
\subsection*{Namespaces}
\begin{CompactItemize}
\item
namespace \bf{std}
\end{CompactItemize}
\subsection*{Classes}
\begin{CompactItemize}
\item
class \bf{energy\-Calibration\-Functions}
\begin{CompactList}\small\item\em Energy calibration functions. \item\end{CompactList}\item
class \bf{energy\-Calibration}
\end{CompactItemize}
\subsection*{Variables}
\begin{CompactItemize}
\item
const float \bf{conven} = 1000./3.6
\item
const float \bf{el} = 1.67E-4
\end{CompactItemize}
\subsection{Variable Documentation}
\index{energyCalibration.h@{energy\-Calibration.h}!conven@{conven}}
\index{conven@{conven}!energyCalibration.h@{energy\-Calibration.h}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}const float \bf{conven} = 1000./3.6}\label{energyCalibration_8h_a48a6c1eb7d418c5d0618fbb161ae321}
electrons/ke\-V \index{energyCalibration.h@{energy\-Calibration.h}!el@{el}}
\index{el@{el}!energyCalibration.h@{energy\-Calibration.h}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}const float \bf{el} = 1.67E-4}\label{energyCalibration_8h_d1db7b454cab6ae1749310d7f444849b}
electron charge in f\-C

View File

@ -0,0 +1,4 @@
\section{File List}
Here is a list of all files with brief descriptions:\begin{CompactList}
\item\contentsline{section}{\bf{energy\-Calibration.h} }{\pageref{energyCalibration_8h}}{}
\end{CompactList}

View File

@ -0,0 +1,3 @@
\section{Introduction}\label{index_intro_sec}
We know very well s-curves etc. but at the end everybody uses different functions ;-).\subsection{Motivation}\label{index_mot_sec}
It would be greate to use everybody the same functions...

View File

@ -0,0 +1,4 @@
\section{Namespace List}
Here is a list of all namespaces with brief descriptions:\begin{CompactList}
\item\contentsline{section}{\bf{std} }{\pageref{namespacestd}}{}
\end{CompactList}

View File

@ -0,0 +1,4 @@
\section{std Namespace Reference}
\label{namespacestd}\index{std@{std}}

View File

@ -0,0 +1,46 @@
\documentclass[a4paper]{book}
\usepackage{a4wide}
\usepackage{makeidx}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{float}
\usepackage{textcomp}
\usepackage{alltt}
\usepackage{doxygen}
\makeindex
\setcounter{tocdepth}{1}
\renewcommand{\footrulewidth}{0.4pt}
\begin{document}
\begin{titlepage}
\vspace*{7cm}
\begin{center}
{\Large Reference Manual}\\
\vspace*{1cm}
{\large Generated by Doxygen 1.4.7}\\
\vspace*{0.5cm}
{\small Tue Mar 27 16:32:29 2012}\\
\end{center}
\end{titlepage}
\clearemptydoublepage
\pagenumbering{roman}
\tableofcontents
\clearemptydoublepage
\pagenumbering{arabic}
\chapter{Common Root library for SLS detectors data analysis }
\label{index}\input{index}
\chapter{Namespace Index}
\input{namespaces}
\chapter{Class Index}
\input{annotated}
\chapter{File Index}
\input{files}
\chapter{Namespace Documentation}
\input{namespacestd}
\chapter{Class Documentation}
\input{classenergyCalibration}
\include{classenergyCalibrationFunctions}
\chapter{File Documentation}
\input{energyCalibration_8h}
\printindex
\end{document}

View File

@ -0,0 +1,65 @@
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
# documentation are documented, even if no documentation was available.
# Private class members and static file members will be hidden unless
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
EXTRACT_ALL = YES
# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
# will be included in the documentation.
EXTRACT_PRIVATE = YES
# If the EXTRACT_STATIC tag is set to YES all static members of a file
# will be included in the documentation.
EXTRACT_STATIC = YES
# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
# defined locally in source files will be included in the documentation.
# If set to NO only classes defined in header files are included.
EXTRACT_LOCAL_CLASSES = YES
# This flag is only useful for Objective-C code. When set to YES local
# methods, which are defined in the implementation section but not in
# the interface are included in the documentation.
# If set to NO (the default) only methods in the interface are included.
EXTRACT_LOCAL_METHODS = YES
# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base
# name of the file that contains the anonymous namespace. By default
# anonymous namespace are hidden.
EXTRACT_ANON_NSPACES = NO
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
# undocumented members of documented classes, files or namespaces.
# If set to NO (the default) these members will be included in the
# various overviews, but no documentation section is generated.
# This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy.
# If set to NO (the default) these classes will be included in the various
# overviews. This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
# friend (class|struct|union) declarations.
# If set to NO (the default) these declarations will be included in the
# documentation.
HIDE_FRIEND_COMPOUNDS = NO
INPUT = energyCalibration.h
OUTPUT_DIRECTORY = docs

View File

@ -0,0 +1,393 @@
#include "energyCalibration.h"
#ifdef ROOT
#include <TMath.h>
#include <TH1F.h>
#include <TGraphErrors.h>
#endif
#include <iostream>
#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) < (b) ? (a) : (b))
#define ELEM_SWAP(a,b) { register int t=(a);(a)=(b);(b)=t; }
using namespace std;
#ifdef ROOT
Double_t energyCalibrationFunctions::gaussChargeSharing(Double_t *x, Double_t *par) {
Double_t f, arg=0;
if (par[3]!=0) arg=(x[0]-par[2])/par[3];
f=par[4]*TMath::Exp(-1*arg*arg/2.);
f=f+par[5]*(par[4]/2*(TMath::Erfc(sign*arg/(TMath::Sqrt(2.)))))+par[0]-par[1]*sign*x[0];
return f;
}
// basic erf function
Double_t energyCalibrationFunctions::erfFunction(Double_t *x, Double_t *par) {
float arg=0;
if (par[1]!=0) arg=(par[0]-x[0])/par[1];
return ((par[2]/2.*(1+TMath::Erf(sign*arg/(TMath::Sqrt(2))))));
};
Double_t energyCalibrationFunctions::erfFunctionChargeSharing(Double_t *x, Double_t *par) {
Double_t f;
f=erfFunction(x, par+2)*(1+par[5]*(par[2]-x[0]))+par[0]-par[1]*x[0]*sign;
return f;
};
Double_t energyCalibrationFunctions::erfFuncFluo(Double_t *x, Double_t *par) {
Double_t f;
f=erfFunctionChargeSharing(x, par)+erfFunction(x, par+6)*(1+par[9]*(par[6]-x[0]));
return f;
};
#endif
float energyCalibrationFunctions::median(float *x, int n){
// sorts x into xmed array and returns median
// n is number of values already in the xmed array
float xmed[n];
int k,i,j;
for (i=0; i<n; i++) {
k=0;
for (j=0; j<n; j++) {
if(*(x+i)>*(x+j))
k++;
if (*(x+i)==*(x+j)) {
if (i>j)
k++;
}
}
xmed[k]=*(x+i);
}
k=n/2;
return xmed[k];
}
int energyCalibrationFunctions::quick_select(int arr[], int n){
int low, high ;
int median;
int middle, ll, hh;
low = 0 ; high = n-1 ; median = (low + high) / 2;
for (;;) {
if (high <= low) /* One element only */
return arr[median] ;
if (high == low + 1) { /* Two elements only */
if (arr[low] > arr[high])
ELEM_SWAP(arr[low], arr[high]) ;
return arr[median] ;
}
/* Find median of low, middle and high items; swap into position low */
middle = (low + high) / 2;
if (arr[middle] > arr[high]) ELEM_SWAP(arr[middle], arr[high]) ;
if (arr[low] > arr[high]) ELEM_SWAP(arr[low], arr[high]) ;
if (arr[middle] > arr[low]) ELEM_SWAP(arr[middle], arr[low]) ;
/* Swap low item (now in position middle) into position (low+1) */
ELEM_SWAP(arr[middle], arr[low+1]) ;
/* Nibble from each end towards middle, swapping items when stuck */
ll = low + 1;
hh = high;
for (;;) {
do ll++; while (arr[low] > arr[ll]) ;
do hh--; while (arr[hh] > arr[low]) ;
if (hh < ll)
break;
ELEM_SWAP(arr[ll], arr[hh]) ;
}
/* Swap middle item (in position low) back into correct position */
ELEM_SWAP(arr[low], arr[hh]) ;
/* Re-set active partition */
if (hh <= median)
low = ll;
if (hh >= median)
high = hh - 1;
}
}
int energyCalibrationFunctions::kth_smallest(int *a, int n, int k){
register int i,j,l,m ;
register float x ;
l=0 ; m=n-1 ;
while (l<m) {
x=a[k] ;
i=l ;
j=m ;
do {
while (a[i]<x) i++ ;
while (x<a[j]) j-- ;
if (i<=j) {
ELEM_SWAP(a[i],a[j]) ;
i++ ; j-- ;
}
} while (i<=j) ;
if (j<k) l=i ;
if (k<i) m=j ;
}
return a[k] ;
}
#ifdef ROOT
Double_t energyCalibrationFunctions::spectrum(Double_t *x, Double_t *par) {
return gaussChargeSharing(x,par);
}
Double_t energyCalibrationFunctions::scurve(Double_t *x, Double_t *par) {
return erfFunctionChargeSharing(x,par);
}
Double_t energyCalibrationFunctions::scurveFluo(Double_t *x, Double_t *par) {
return erfFuncFluo(x,par);
}
#endif
energyCalibration::energyCalibration() :
#ifdef ROOT
fit_min(-1),
fit_max(-1),
bg_offset(-1),
bg_slope(-1),
flex(-1),
noise(-1),
ampl(-1),
cs_slope(-1),
fscurve(NULL),
fspectrum(NULL),
#endif
funcs(NULL),
plot_flag(1),
cs_flag(1)
{
#ifdef ROOT
funcs=new energyCalibrationFunctions();
fscurve=new TF1("fscurve",funcs,&energyCalibrationFunctions::scurve,0,1000,6,"energyCalibrationFunctions","scurve");
fscurve->SetParNames("Background Offset","Background Slope","Inflection Point","Noise RMS", "Number of Photons","Charge Sharing Slope");
fspectrum=new TF1("fspectrum",funcs,&energyCalibrationFunctions::spectrum,0,1000,6,"energyCalibrationFunctions","spectrum");
fspectrum->SetParNames("Background Pedestal","Background slope", "Peak position","Noise RMS", "Number of Photons","Charge Sharing Pedestal");
#endif
}
energyCalibration::~energyCalibration(){
#ifdef ROOT
delete fscurve;
delete fspectrum;
#endif
}
#ifdef ROOT
void energyCalibration::setStartParameters(Double_t *par){
bg_offset=par[0];
bg_slope=par[1];
flex=par[2];
noise=par[3];
ampl=par[4];
cs_slope=par[5];
}
void energyCalibration::getStartParameters(Double_t *par){
par[0]=bg_offset;
par[1]=bg_slope;
par[2]=flex;
par[3]=noise;
par[4]=ampl;
par[5]=cs_slope;
}
#endif
int energyCalibration::setChargeSharing(int p) {
if (p>=0) {
cs_flag=p;
#ifdef ROOT
if (p) {
fscurve->ReleaseParameter(5);
fspectrum->ReleaseParameter(1);
} else {
fscurve->FixParameter(5,0);
fspectrum->FixParameter(1,0);
}
#endif
}
return cs_flag;
}
#ifdef ROOT
void energyCalibration::initFitFunction(TF1 *fun, TH1 *h1) {
Double_t min=fit_min, max=fit_max;
Double_t mypar[6];
if (max==-1)
max=h1->GetXaxis()->GetXmax();
if (min==-1)
min=h1->GetXaxis()->GetXmin();
if (bg_offset==-1)
mypar[0]=0;
else
mypar[0]=bg_offset;
if (bg_slope==-1)
mypar[1]=0;
else
mypar[1]=bg_slope;
if (flex==-1)
mypar[2]=(min+max)/2.;
else
mypar[2]=flex;
if (noise==-1)
mypar[3]=0.1;
else
mypar[3]=noise;
if (ampl==-1)
mypar[4]=h1->GetBinContent(h1->GetXaxis()->FindBin(0.5*(max+min)));
else
mypar[4]=ampl;
if (cs_slope==-1)
mypar[5]=0;
else
mypar[5]=cs_slope;
fun->SetParameters(mypar);
fun->SetRange(min,max);
}
TF1* energyCalibration::fitFunction(TF1 *fun, TH1 *h1, Double_t *mypar, Double_t *emypar) {
TF1* fitfun;
char fname[100];
strcpy(fname, fun->GetName());
if (plot_flag) {
h1->Fit(fname,"R");
} else
h1->Fit(fname,"R0Q");
fitfun= h1->GetFunction(fname);
fitfun->GetParameters(mypar);
for (int ip=0; ip<6; ip++) {
emypar[ip]=fitfun->GetParError(ip);
}
return fitfun;
}
TF1* energyCalibration::fitSCurve(TH1 *h1, Double_t *mypar, Double_t *emypar) {
initFitFunction(fscurve,h1);
return fitFunction(fscurve, h1, mypar, emypar);
}
TF1* energyCalibration::fitSpectrum(TH1 *h1, Double_t *mypar, Double_t *emypar) {
initFitFunction(fspectrum,h1);
return fitFunction(fspectrum, h1, mypar, emypar);
}
TGraphErrors* energyCalibration::linearCalibration(int nscan, Double_t *en, Double_t *een, Double_t *fl, Double_t *efl, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff) {
TGraphErrors *gr;
Double_t mypar[2];
gr = new TGraphErrors(nscan,en,fl,een,efl);
if (plot_flag) {
gr->Fit("pol1");
gr->SetMarkerStyle(20);
} else
gr->Fit("pol1","0Q");
TF1 *fitfun= gr->GetFunction("pol1");
fitfun->GetParameters(mypar);
egain=fitfun->GetParError(1);
eoff=fitfun->GetParError(0);
gain=funcs->setScanSign()*mypar[1];
off=mypar[0];
return gr;
}
TGraphErrors* energyCalibration::calibrate(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff, int integral) {
TH1F *h;
Double_t mypar[6], emypar[6];
Double_t fl[nscan], efl[nscan];
for (int ien=0; ien<nscan; ien++) {
h=h1[ien];
if (integral)
fitSCurve(h,mypar,emypar);
else
fitSpectrum(h,mypar,emypar);
fl[ien]=mypar[2];
efl[ien]=emypar[2];
}
return linearCalibration(nscan,en,een,fl,efl,gain,off, egain, eoff);
}
#endif

View File

@ -0,0 +1,386 @@
#ifndef ENERGYCALIBRATION_H
#define ENERGYCALIBRATION_H
#ifdef ROOT
#include <TROOT.h>
#include <TF1.h>
class TH1F;
class TGraphErrors;
#endif
using namespace std;
const float conven=1000./3.6; /**< electrons/keV */
const float el=1.67E-4; /**< electron charge in fC */
/**
\mainpage Common Root library for SLS detectors data analysis
*
* \section intro_sec Introduction
We know very well s-curves etc. but at the end everybody uses different functions ;-).
* \subsection mot_sec Motivation
It would be greate to use everybody the same functions...
*/
/**
*
*
@libdoc The energiCalibration class contains all the necessary functions for s-curve fitting and linear calibration of the threshold.
*
* @short Energy calibration functions
* @author Anna Bergamaschi
* @version 0.1alpha
*/
/**
class containing all the possible energy calibration functions (scurves with and without charge sharing, gaussian spectrum with and without charge sharing, possibility of chosing the sign of the X-axis)
*/
class energyCalibrationFunctions {
public:
energyCalibrationFunctions(int s=-1) {setScanSign(s);};
/** sets scan sign
\param s can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) otherwise gets
\returns current scan sign can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions)
*/
int setScanSign(int s=0) {if (s==1 || s==-1) sign=s; return sign;};;
#ifdef ROOT
/**
Gaussian Function with charge sharing pedestal
par[0] is the absolute height of the background pedestal
par[1] is the slope of the background pedestal
par[2] is the gaussian peak position
par[3] is the RMS of the gaussian (and of the pedestal)
par[4] is the height of the function
par[5] is the fractional height of the charge sharing pedestal (scales with par[3])
*/
Double_t gaussChargeSharing(Double_t *x, Double_t *par);
/**
Basic erf function
par[0] is the inflection point
par[1] is the RMS
par[2] is the amplitude
*/
Double_t erfFunction(Double_t *x, Double_t *par) ;
/** Erf function with charge sharing slope
par[0] is the pedestal
par[1] is the slope of the pedestal
par[2] is the inflection point
par[3] is the RMS
par[4] is the amplitude
par[5] is the angual coefficient of the charge sharing slope (scales with par[3])
*/
Double_t erfFunctionChargeSharing(Double_t *x, Double_t *par);
/** Double Erf function with charge sharing slope
par[0] is the pedestal
par[1] is the slope of the pedestal
par[2] is the inflection point of the first energy
par[3] is the RMS of the first energy
par[4] is the amplitude of the first energy
par[5] is the angual coefficient of the charge sharing slope of the first energy (scales with par[3])
par[6] is the inflection point of the second energy
par[7] is the RMS of the second energy
par[8] is the amplitude of the second energy
par[9] is the angual coefficient of the charge sharing slope of the second energy (scales with par[8])
*/
Double_t erfFuncFluo(Double_t *x, Double_t *par);
/**
static function Gaussian with charge sharing pedestal with the correct scan sign
par[0] is the absolute height of the background pedestal
par[1] is the fractional height of the charge sharing pedestal (scales with par[3]
par[2] is the gaussian peak position
par[3] is the RMS of the gaussian (and of the pedestal)
par[4] is the height of the function
*/
Double_t spectrum(Double_t *x, Double_t *par);
/** Erf function with charge sharing slope with the correct scan sign
par[0] is the pedestal
par[1] is the slope of the pedestal
par[2] is the inflection point
par[3] is the RMS
par[4] is the amplitude
par[5] is the angual coefficient of the charge sharing slope (scales with par[3])
*/
Double_t scurve(Double_t *x, Double_t *par);
/** Double Erf function with charge sharing slope
par[0] is the pedestal
par[1] is the slope of the pedestal
par[2] is the inflection point of the first energy
par[3] is the RMS of the first energy
par[4] is the amplitude of the first energy
par[5] is the angual coefficient of the charge sharing slope of the first energy (scales with par[3])
par[6] is the inflection point of the second energy
par[7] is the RMS of the second energy
par[8] is the amplitude of the second energy
par[9] is the angual coefficient of the charge sharing slope of the second energy (scales with par[8])
*/
Double_t scurveFluo(Double_t *x, Double_t *par);
#endif
/** Calculates the median of an array of n elements */
static float median(float *x, int n);
/** Calculates the median of an array of n elements (swaps the arrays!)*/
static int quick_select(int arr[], int n);
/** Calculates the median of an array of n elements (swaps the arrays!)*/
static int kth_smallest(int *a, int n, int k);
private:
int sign;
};
/**
class alowing the energy calibration of photon counting and anlogue detectors
*/
class energyCalibration {
public:
/**
default constructor - creates the function with which the s-curves will be fitted
*/
energyCalibration();
/**
default destructor - deletes the function with which the s-curves will be fitted
*/
~energyCalibration();
/** sets plot flag
\param p plot flag (-1 gets, 0 unsets, >0 plot)
\returns current plot flag
*/
int setPlotFlag(int p=-1) {if (p>=0) plot_flag=p; return plot_flag;};
/** sets scan sign
\param s can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions) otherwise gets
\returns current scan sign can be 1 (energy and x-axis have the same direction) or -1 (energy and x-axis have opposite directions)
*/
int setScanSign(int s=0) {return funcs->setScanSign(s);};
/** sets plot flag
\param p plot flag (-1 gets, 0 unsets, >0 plot)
\returns current plot flag
*/
int setChargeSharing(int p=-1);
#ifdef ROOT
/** sets the s-curve fit range
\param mi minimum of the fit range (-1 is histogram x-min)
\param ma maximum of the fit range (-1 is histogram x-max)
*/
void setFitRange(Double_t mi, Double_t ma){fit_min=mi; fit_max=ma;};
/** gets the s-curve fit range
\param mi reference for minimum of the fit range (-1 is histogram x-min)
\param ma reference for maximum of the fit range (-1 is histogram x-max)
*/
void getFitRange(Double_t &mi, Double_t &ma){mi=fit_min; ma=fit_max;};
/** set start parameters for the s-curve function
\param par parameters, -1 sets to auto-calculation
par[0] is the pedestal
par[1] is the slope of the pedestal
par[2] is the inflection point
par[3] is the RMS
par[4] is the amplitude
par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) -- always positive
*/
void setStartParameters(Double_t *par);
/** get start parameters for the s-curve function
\param par parameters, -1 means auto-calculated
par[0] is the pedestal
par[1] is the slope of the pedestal
par[2] is the inflection point
par[3] is the RMS
par[4] is the amplitude
par[5] is the angual coefficient of the charge sharing slope (scales with par[3]) -- always positive
*/
void getStartParameters(Double_t *par);
/**
fits histogram with the s-curve function
\param h1 1d-histogram to be fitted
\param mypar pointer to fit parameters array
\param emypar pointer to fit parameter errors
\returns the fitted function - can be used e.g. to get the Chi2 or similar
*/
TF1 *fitSCurve(TH1 *h1, Double_t *mypar, Double_t *emypar);
/**
fits histogram with the spectrum
\param h1 1d-histogram to be fitted
\param mypar pointer to fit parameters array
\param emypar pointer to fit parameter errors
\returns the fitted function - can be used e.g. to get the Chi2 or similar
*/
TF1 *fitSpectrum(TH1 *h1, Double_t *mypar, Double_t *emypar);
/**
calculates gain and offset for the set of inflection points
\param nscan number of energy scans
\param en array of energies (nscan long)
\param een array of errors on energies (nscan long) - can be NULL!
\param fl array of inflection points (nscan long)
\param efl array of errors on the inflection points (nscan long)
\param gain reference to gain resulting from the fit
\param off reference to offset resulting from the fit
\param egain reference to error on the gain resulting from the fit
\param eoff reference to the error on the offset resulting from the fit
\returns graph energy vs inflection point
*/
TGraphErrors* linearCalibration(int nscan, Double_t *en, Double_t *een, Double_t *fl, Double_t *efl, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff);
/**
calculates gain and offset for the set of energy scans
\param nscan number of energy scans
\param en array of energies (nscan long)
\param een array of errors on energies (nscan long) - can be NULL!
\param h1 array of TH1
\param gain reference to gain resulting from the fit
\param off reference to offset resulting from the fit
\param egain reference to error on the gain resulting from the fit
\param eoff reference to the error on the offset resulting from the fit
\returns graph energy vs inflection point
*/
TGraphErrors* calibrateScurves(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff){return calibrate(nscan, en, een, h1, gain, off, egain, eoff, 1);};
/**
calculates gain and offset for the set of energy spectra
\param nscan number of energy scans
\param en array of energies (nscan long)
\param een array of errors on energies (nscan long) - can be NULL!
\param h1 array of TH1
\param gain reference to gain resulting from the fit
\param off reference to offset resulting from the fit
\param egain reference to error on the gain resulting from the fit
\param eoff reference to the error on the offset resulting from the fit
\returns graph energy vs peak
*/
TGraphErrors* calibrateSpectra(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff){return calibrate(nscan, en, een, h1, gain, off, egain, eoff, 0);};
#endif
private:
#ifdef ROOT
/**
calculates gain and offset for the set of energies
\param nscan number of energy scans
\param en array of energies (nscan long)
\param een array of errors on energies (nscan long) - can be NULL!
\param h1 array of TH1
\param gain reference to gain resulting from the fit
\param off reference to offset resulting from the fit
\param egain reference to error on the gain resulting from the fit
\param eoff reference to the error on the offset resulting from the fit
\param integral 1 is an s-curve set (default), 0 spectra
\returns graph energy vs peak/inflection point
*/
TGraphErrors* calibrate(int nscan, Double_t *en, Double_t *een, TH1F **h1, Double_t &gain, Double_t &off, Double_t &egain, Double_t &eoff, int integral=1);
/**
Initializes the start parameters and the range of the fit depending on the histogram characteristics and/or on the start parameters specified by the user
\param fun pointer to function to be initialized
\param h1 histogram from which to extract the range and start parameters, if not already specified by the user
*/
void initFitFunction(TF1 *fun, TH1 *h1);
/**
Perfors the fit according to the flags specified and returns the fitted function
\param fun function to fit
\param h1 histogram to fit
\param mypar pointer to fit parameters array
\param emypar pointer to fit parameter errors
\returns the fitted function - can be used e.g. to get the Chi2 or similar
*/
TF1 *fitFunction(TF1 *fun, TH1 *h1, Double_t *mypar, Double_t *emypar);
#endif
#ifdef ROOT
Double_t fit_min; /**< minimum of the s-curve fitting range, -1 is histogram x-min */
Double_t fit_max; /**< maximum of the s-curve fitting range, -1 is histogram x-max */
Double_t bg_offset; /**< start value for the background pedestal */
Double_t bg_slope; /**< start value for the background slope */
Double_t flex; /**< start value for the inflection point */
Double_t noise; /**< start value for the noise */
Double_t ampl; /**< start value for the number of photons */
Double_t cs_slope; /**< start value for the charge sharing slope */
TF1 *fscurve; /**< function with which the s-curve will be fitted */
TF1 *fspectrum; /**< function with which the spectrum will be fitted */
#endif
energyCalibrationFunctions *funcs;
int plot_flag; /**< 0 does not plot, >0 plots (flags?) */
int cs_flag; /**< 0 functions without charge sharing contribution, >0 with charge sharing contribution */
};
#endif

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