first crude implementation of psi-bin format base on Alex's class

This commit is contained in:
nemu
2008-04-09 10:42:10 +00:00
parent 47935d356a
commit 8fcf4a6362
7 changed files with 2568 additions and 7 deletions

View File

@ -44,7 +44,8 @@ CXXFLAGS = -g -Wall -Wno-trigraphs -fPIC
PMUSRPATH = ../include
MNPATH = $(ROOTSYS)/include
GSLPATH = /usr/include/gsl
INCLUDES = -I $(PMUSRPATH) -I $(MNPATH) -I $(GSLPATH)
PSIBINPATH = ../external/MuSR_software/Class_MuSR_PSI
INCLUDES = -I$(PMUSRPATH) -I$(MNPATH) -I$(GSLPATH) -I$(PSIBINPATH)
LD = g++
LDFLAGS = -g
SOFLAGS = -O -shared
@ -94,6 +95,9 @@ OBJS += PFitterFcn.o
OBJS += PFitter.o
OBJS += PMusrCanvas.o PMusrCanvasDict.o
EXTOBJS =
EXTOBJS += MuSR_td_PSI_bin.o
SHLIB = libPMusr.so
# make the shared lib:
@ -103,7 +107,7 @@ all: $(SHLIB)
$(SHLIB): $(OBJS)
@echo "---> Building shared library $(SHLIB) ..."
/bin/rm -f $(SHLIB)
$(LD) $(OBJS) $(SOFLAGS) -o $(SHLIB) $(GLIBS) $(PSILIBS) $(MNLIB) $(GSLLIB)
$(LD) $(OBJS) $(EXTOBJS) $(SOFLAGS) -o $(SHLIB) $(GLIBS) $(PSILIBS) $(MNLIB) $(GSLLIB)
@echo "done"
# clean up: remove all object file (and core files)
@ -117,6 +121,9 @@ clean:; @rm -f $(OBJS) *Dict* core*
$(OBJS): %.o: %.cpp
$(CXX) $(INCLUDES) $(CXXFLAGS) -c $<
MuSR_td_PSI_bin.o: ../external/MuSR_software/Class_MuSR_PSI/MuSR_td_PSI_bin.cpp
$(CXX) $(INCLUDES) $(CXXFLAGS) -c ../external/MuSR_software/Class_MuSR_PSI/MuSR_td_PSI_bin.cpp
PStartupHandlerDict.cpp: ../include/PStartupHandler.h
@echo "Generating dictionary $@..."
rootcint -f $@ -c -p $^

View File

@ -31,6 +31,7 @@
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#include <TROOT.h>
@ -43,6 +44,7 @@ using namespace std;
#include <TH1F.h>
#include "TLemRunHeader.h"
#include "MuSR_td_PSI_bin.h"
#include "PRunDataHandler.h"
//--------------------------------------------------------------------------
@ -420,6 +422,11 @@ bool PRunDataHandler::ReadRootFile()
// add run to the run list
fData.push_back(runData);
// clean up
for (unsigned int i=0; i<runData.fDataBin.size(); i++)
runData.fDataBin[i].clear();
runData.fDataBin.clear();
return true;
}
@ -628,6 +635,11 @@ cout << endl << ">> time resolution : " << runData.fTimeResolution;
// add run to the run list
fData.push_back(runData);
// clean up
for (unsigned int i=0; i<runData.fDataBin.size(); i++)
runData.fDataBin[i].clear();
runData.fDataBin.clear();
return true;
}
@ -640,8 +652,104 @@ cout << endl << ">> time resolution : " << runData.fTimeResolution;
*/
bool PRunDataHandler::ReadPsiBinFile()
{
cout << endl << "PRunDataHandler::ReadPsiBinFile(): Sorry, not yet implemented ...";
return false;
// cout << endl << "PRunDataHandler::ReadPsiBinFile(): Sorry, not yet implemented ...";
MuSR_td_PSI_bin psiBin;
int status;
bool success;
// read psi bin file
status = psiBin.read(fRunPathName.Data());
switch (status) {
case 0: // everything perfect
success = true;
break;
case 1: // couldn't open file, or failed while reading the header
cout << endl << "**ERROR** couldn't open psibin file, or failed while reading the header";
cout << endl;
success = false;
break;
case 2: // unsupported version of the data
cout << endl << "**ERROR** psibin file: unsupported version of the data";
cout << endl;
success = false;
break;
case 3: // error when allocating data buffer
cout << endl << "**ERROR** psibin file: error when allocating data buffer";
cout << endl;
success = false;
break;
case 4: // number of histograms/record not equals 1
cout << endl << "**ERROR** psibin file: number of histograms/record not equals 1";
cout << endl;
success = false;
break;
default: // you never should have reached this point
success = false;
break;
}
// if any reading error happend, get out of here
if (!success)
return success;
cout << endl << "> " << psiBin.get_numberHisto_int() << ": ";
for (int i=0; i<psiBin.get_numberHisto_int(); i++)
cout << endl << "> " << psiBin.get_nameHisto(i);
cout << endl;
// fill necessary header informations
PIntVector ivec;
PRawRunData runData;
double dval;
// keep run name
runData.fRunName = fRunName;
// get run title
runData.fRunTitle = TString(psiBin.get_comment().c_str()); // run title
// get setup
runData.fSetup = TString("");
// get field
status = sscanf(psiBin.get_field().c_str(), "%lfG", &dval);
if (status == 1)
runData.fField = dval;
// get temperature
status = sscanf(psiBin.get_temp().c_str(), "%lfK", &dval);
if (status == 1)
runData.fTemp = dval;
// get time resolution (ns)
runData.fTimeResolution = psiBin.get_binWidth_ns();
// get t0's
ivec = psiBin.get_t0_vector();
if (ivec.empty()) {
cout << endl << "**ERROR** psibin file: couldn't obtain any t0's";
cout << endl;
return false;
}
for (unsigned int i=0; i<ivec.size(); i++)
runData.fT0s.push_back((double)ivec[i]);
// fill raw data
PDoubleVector histoData;
int *histo;
for (int i=0; i<psiBin.get_numberHisto_int(); i++) {
histo = psiBin.get_histo_array_int(i);
for (int j=0; j<psiBin.get_histoLength_bin(); j++) {
histoData.push_back(histo[j]);
}
runData.fDataBin.push_back(histoData);
histoData.clear();
}
// add run to the run list
fData.push_back(runData);
// clean up
runData.fT0s.clear();
for (unsigned int i=0; i<runData.fDataBin.size(); i++)
runData.fDataBin[i].clear();
runData.fDataBin.clear();
return success;
}
//--------------------------------------------------------------------------