diff --git a/src/classes/PStartupHandler.cpp b/src/classes/PStartupHandler.cpp
index 150d5212..d639031b 100644
--- a/src/classes/PStartupHandler.cpp
+++ b/src/classes/PStartupHandler.cpp
@@ -73,6 +73,18 @@ PStartupHandler::~PStartupHandler()
void PStartupHandler::OnStartDocument()
{
fKey = eEmpty;
+
+ // init fourier default variables
+ fFourierDefaults.fFourierBlockPresent = false;
+ fFourierDefaults.fUnits = FOURIER_UNIT_FIELD;
+ fFourierDefaults.fFourierPower = 0;
+ fFourierDefaults.fApodization = FOURIER_APOD_NONE;
+ fFourierDefaults.fPlotTag = FOURIER_PLOT_REAL_AND_IMAG;
+ fFourierDefaults.fPhase = 0.0;
+ fFourierDefaults.fRangeForPhaseCorrection[0] = 0.0;
+ fFourierDefaults.fRangeForPhaseCorrection[1] = 0.0;
+ fFourierDefaults.fPlotRange[0] = 0.0;
+ fFourierDefaults.fPlotRange[1] = 0.0;
}
//--------------------------------------------------------------------------
@@ -104,6 +116,16 @@ void PStartupHandler::OnStartElement(const char *str, const TList *attributes)
fKey = eMarker;
} else if (!strcmp(str, "color")) {
fKey = eColor;
+ } else if (!strcmp(str, "units")) {
+ fKey = eUnits;
+ } else if (!strcmp(str, "fourier_power")) {
+ fKey = eFourierPower;
+ } else if (!strcmp(str, "apodization")) {
+ fKey = eApodization;
+ } else if (!strcmp(str, "plot")) {
+ fKey = ePlot;
+ } else if (!strcmp(str, "phase")) {
+ fKey = ePhase;
}
}
@@ -133,7 +155,7 @@ void PStartupHandler::OnCharacters(const char *str)
TObjArray *tokens;
TObjString *ostr;
TString tstr;
- Int_t color, r, g, b;
+ Int_t color, r, g, b, ival;
switch (fKey) {
case eDataPath:
@@ -208,6 +230,68 @@ void PStartupHandler::OnCharacters(const char *str)
// add the color code to the color list
fColorList.push_back(color);
break;
+ case eUnits:
+ tstr = TString(str);
+ if (!tstr.CompareTo("gauss", TString::kIgnoreCase)) {
+ fFourierDefaults.fUnits = FOURIER_UNIT_FIELD;
+ } else if (!tstr.CompareTo("mhz", TString::kIgnoreCase)) {
+ fFourierDefaults.fUnits = FOURIER_UNIT_FREQ;
+ } else if (!tstr.CompareTo("mc/s", TString::kIgnoreCase)) {
+ fFourierDefaults.fUnits = FOURIER_UNIT_CYCLES;
+ } else {
+ cout << endl << "PStartupHandler **WARNING** '" << str << "' is not a valid unit, will ignore it.";
+ cout << endl;
+ }
+ break;
+ case eFourierPower:
+ tstr = TString(str);
+ if (tstr.IsDigit()) {
+ ival = tstr.Atoi();
+ if ((ival >= 0) && (ival <= 20)) {
+ fFourierDefaults.fFourierPower = ival;
+ } else {
+ cout << endl << "PStartupHandler **WARNING** fourier power '" << str << "' is not a valid number (0..20), will ignore it.";
+ cout << endl;
+ }
+ } else {
+ cout << endl << "PStartupHandler **WARNING** fourier power '" << str << "' is not a valid number (0..20), will ignore it.";
+ cout << endl;
+ }
+ break;
+ case eApodization:
+ tstr = TString(str);
+ if (!tstr.CompareTo("none", TString::kIgnoreCase)) {
+ fFourierDefaults.fApodization = FOURIER_APOD_NONE;
+ } else if (!tstr.CompareTo("weak", TString::kIgnoreCase)) {
+ fFourierDefaults.fApodization = FOURIER_APOD_WEAK;
+ } else if (!tstr.CompareTo("medium", TString::kIgnoreCase)) {
+ fFourierDefaults.fApodization = FOURIER_APOD_MEDIUM;
+ } else if (!tstr.CompareTo("strong", TString::kIgnoreCase)) {
+ fFourierDefaults.fApodization = FOURIER_APOD_STRONG;
+ } else {
+ cout << endl << "PStartupHandler **WARNING** '" << str << "' is not a valid apodization, will ignore it.";
+ cout << endl;
+ }
+ break;
+ case ePlot:
+ tstr = TString(str);
+ if (!tstr.CompareTo("real", TString::kIgnoreCase)) {
+ fFourierDefaults.fPlotTag = FOURIER_PLOT_REAL;
+ } else if (!tstr.CompareTo("imag", TString::kIgnoreCase)) {
+ fFourierDefaults.fPlotTag = FOURIER_PLOT_IMAG;
+ } else if (!tstr.CompareTo("real_and_imag", TString::kIgnoreCase)) {
+ fFourierDefaults.fPlotTag = FOURIER_PLOT_REAL_AND_IMAG;
+ } else if (!tstr.CompareTo("power", TString::kIgnoreCase)) {
+ fFourierDefaults.fPlotTag = FOURIER_PLOT_POWER;
+ } else if (!tstr.CompareTo("phase", TString::kIgnoreCase)) {
+ fFourierDefaults.fPlotTag = FOURIER_PLOT_PHASE;
+ } else {
+ cout << endl << "PStartupHandler **WARNING** '" << str << "' is not a valid plot option, will ignore it.";
+ cout << endl;
+ }
+ break;
+ case ePhase:
+ break;
default:
break;
}
diff --git a/src/include/PStartupHandler.h b/src/include/PStartupHandler.h
index 302f4712..4d622484 100644
--- a/src/include/PStartupHandler.h
+++ b/src/include/PStartupHandler.h
@@ -58,19 +58,22 @@ class PStartupHandler : public TObject, public TQObject
virtual void CheckLists();
+ virtual const PMsrFourierStructure* GetFourierDefaults() const { return &fFourierDefaults; }
virtual const PStringVector GetDataPathList() const { return fDataPathList; }
virtual const PIntVector GetMarkerList() const { return fMarkerList; }
virtual const PIntVector GetColorList() const { return fColorList; }
private:
enum EKeyWords {eEmpty, eComment, eDataPath,
+ eFourierSettings, eUnits, eFourierPower, eApodization, ePlot, ePhase,
eRootSettings, eMarkerList, eMarker,
eColorList, eColor};
EKeyWords fKey;
- PStringVector fDataPathList;
- PIntVector fMarkerList;
- PIntVector fColorList;
+ PMsrFourierStructure fFourierDefaults;
+ PStringVector fDataPathList;
+ PIntVector fMarkerList;
+ PIntVector fColorList;
ClassDef(PStartupHandler, 1)
};
diff --git a/src/musrfit_startup.xml b/src/musrfit_startup.xml
index 8d83b4e7..04bef1da 100644
--- a/src/musrfit_startup.xml
+++ b/src/musrfit_startup.xml
@@ -6,6 +6,13 @@
/mnt/data/nemu/his
/mnt/data/nemu/wkm
+
+ Gauss
+ 0
+ none
+ real_and_imag
+ 0.0
+
@@ -38,4 +45,4 @@
156,48,0
-
\ No newline at end of file
+