diff --git a/src/external/TFitPofB-lib/classes/TFitPofBStartupHandler.cpp b/src/external/TFitPofB-lib/classes/TFitPofBStartupHandler.cpp index b88bc054..39810f13 100644 --- a/src/external/TFitPofB-lib/classes/TFitPofBStartupHandler.cpp +++ b/src/external/TFitPofB-lib/classes/TFitPofBStartupHandler.cpp @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2008/05/30 + 2008/06/03 based upon: $Id: PStartupHandler.cpp 3340 2008-04-30 12:27:01Z nemu $ @@ -46,7 +46,7 @@ ClassImpQ(TFitPofBStartupHandler) /** *

*/ -TFitPofBStartupHandler::TFitPofBStartupHandler() +TFitPofBStartupHandler::TFitPofBStartupHandler() : fDeltat(0.), fDeltaB(0.) { } @@ -100,6 +100,12 @@ void TFitPofBStartupHandler::OnStartElement(const char *str, const TList *attrib fKey = eDataPath; } else if (!strcmp(str, "energy")) { fKey = eEnergy; + } else if (!strcmp(str, "delta_t")) { + fKey = eDeltat; + } else if (!strcmp(str, "delta_B")) { + fKey = eDeltaB; + } else if (!strcmp(str, "wisdom")) { + fKey = eWisdomFile; } } @@ -135,6 +141,18 @@ void TFitPofBStartupHandler::OnCharacters(const char *str) // add str to the energy list fEnergyList.push_back(str); break; + case eDeltat: + // convert str to double and assign it to the deltat-member + fDeltat = atof(str); + break; + case eDeltaB: + // convert str to double and assign it to the deltaB-member + fDeltaB = atof(str); + break; + case eWisdomFile: + // set the wisdom file to the given name + fWisdomFile = str; + break; default: break; } @@ -229,7 +247,7 @@ void TFitPofBStartupHandler::CheckLists() // check if any energies are given cout << endl << ">> check energy list ..." << endl; if (!fEnergyList.size()) { - cout << endl << ">> Energy list empty! Setting the default list."; + cout << endl << ">> Energy list empty! Setting the default list." << endl; char eChar[5]; for(unsigned int i(0); i<33; i++) { for(unsigned int j(0); j<10; j++) { @@ -238,6 +256,28 @@ void TFitPofBStartupHandler::CheckLists() } } } + + // check if delta_t is given, if not set default + cout << endl << ">> check specified time resolution ..." << endl; + if(!fDeltat) { + cout << endl << ">> You did not specify the time resolution. Setting the default." << endl; + fDeltat = 0.01; + } + + // check if delta_B is given, if not set default + cout << endl << ">> check specified field resolution ..." << endl; + if(!fDeltaB) { + cout << endl << ">> You did not specify the field resolution. Setting the default." << endl; + fDeltaB = 0.05; + } + + // check if any wisdom-file is specified + cout << endl << ">> check wisdom-file ..." << endl; + if (!fWisdomFile.size()) { + cout << endl << ">> You did not specify a wisdom file. Setting the default." << endl; + fWisdomFile = "WordsOfWisdom.dat"; + } + } // end --------------------------------------------------------------------- diff --git a/src/external/TFitPofB-lib/classes/TLondon1D.cpp b/src/external/TFitPofB-lib/classes/TLondon1D.cpp index c96b4aa7..52a38e96 100644 --- a/src/external/TFitPofB-lib/classes/TLondon1D.cpp +++ b/src/external/TFitPofB-lib/classes/TLondon1D.cpp @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2008/05/30 + 2008/06/03 ***************************************************************************/ @@ -27,6 +27,9 @@ ClassImp(TLondon1D3LS) TLondon1D::~TLondon1D() { fPar.clear(); + fParForBofZ.clear(); + fParForPofB.clear(); + fParForPofT.clear(); delete fImpProfile; fImpProfile = 0; delete fPofT; @@ -56,22 +59,28 @@ TLondon1D1L::TLondon1D1L(const vector &parNo, const vector if (status) { // error cout << endl << "**WARNING** reading/parsing TFitPofB_startup.xml failed." << endl; } - startupHandler->CheckLists(); + fWisdom = startupHandler->GetWisdomFile(); string rge_path(startupHandler->GetDataPath()); vector energy_vec(startupHandler->GetEnergyList()); + fParForPofT.push_back(fPar[0]); + fParForPofT.push_back(startupHandler->GetDeltat()); + fParForPofT.push_back(startupHandler->GetDeltaB()); + + for (unsigned int i(2); iGetDeltat()); + fParForPofB.push_back(startupHandler->GetDeltaB()); + fParForPofB.push_back(fPar[1]); + TTrimSPData *x = new TTrimSPData(rge_path, energy_vec); fImpProfile = x; x = 0; delete x; - vector par_for_PofT; - - for (unsigned int i(0); i<3; i++) - par_for_PofT.push_back(fPar[i]); - - TPofTCalc *y = new TPofTCalc(par_for_PofT); + TPofTCalc *y = new TPofTCalc(fWisdom, fParForPofT); fPofT = y; y = 0; delete y; @@ -105,10 +114,7 @@ double TLondon1D1L::Eval(double t, const vector &par) const { if( fPar[i]-par[i] ) { fPar[i] = par[i]; par_changed = true; - if(i == 1 || i == 2) { - cout << "You are varying dt or dB! These parameters have to be fixed! Quitting..." << endl; - exit(-1); - } else if (i == 0) { + if (i == 0) { only_phase_changed = true; } else { only_phase_changed = false; @@ -119,54 +125,30 @@ double TLondon1D1L::Eval(double t, const vector &par) const { if (par_changed) fCalcNeeded = true; -/* DEBUGGING CODE COMMENTED -- quite a mess... sorry*/ - // if model parameters have changed, recalculate B(z), P(B) and P(t) if (fCalcNeeded) { - vector par_for_PofT; - -// cout << "par_for_PofT: "; - - for (unsigned int i(0); i<3; i++) { - par_for_PofT.push_back(par[i]); -// cout << par[i] << " "; - } -// cout << endl; + fParForPofT[0] = par[0]; // phase if(!only_phase_changed) { cout << " Parameters have changed, (re-)calculating p(B) and P(t) now..." << endl; - vector par_for_BofZ; - vector par_for_PofB; + for (unsigned int i(2); iDoFFT(PofB1); } else { cout << "Only the phase parameter has changed, (re-)calculating P(t) now..." << endl; } - fPofT->CalcPol(par_for_PofT); + fPofT->CalcPol(fParForPofT); fCalcNeeded = false; } @@ -198,27 +180,32 @@ TLondon1D2L::TLondon1D2L(const vector &parNo, const vector if (status) { // error cout << endl << "**WARNING** reading/parsing TFitPofB_startup.xml failed." << endl; } - startupHandler->CheckLists(); + fWisdom = startupHandler->GetWisdomFile(); string rge_path(startupHandler->GetDataPath()); vector energy_vec(startupHandler->GetEnergyList()); + fParForPofT.push_back(fPar[0]); + fParForPofT.push_back(startupHandler->GetDeltat()); + fParForPofT.push_back(startupHandler->GetDeltaB()); + + for (unsigned int i(2); iGetDeltat()); + fParForPofB.push_back(startupHandler->GetDeltaB()); + fParForPofB.push_back(fPar[1]); + TTrimSPData *x = new TTrimSPData(rge_path, energy_vec); fImpProfile = x; x = 0; delete x; - vector par_for_PofT; - - for (unsigned int i(0); i<3; i++) - par_for_PofT.push_back(fPar[i]); - - TPofTCalc *y = new TPofTCalc(par_for_PofT); + TPofTCalc *y = new TPofTCalc(fWisdom, fParForPofT); fPofT = y; y = 0; delete y; - // clean up if (saxParser) { delete saxParser; @@ -247,10 +234,7 @@ double TLondon1D2L::Eval(double t, const vector &par) const { if( fPar[i]-par[i] ) { fPar[i] = par[i]; par_changed = true; - if(i == 1 || i == 2) { - cout << "You are varying dt or dB! These parameters have to be fixed! Quitting..." << endl; - exit(-1); - } else if (i == 0) { + if (i == 0) { only_phase_changed = true; } else { only_phase_changed = false; @@ -263,66 +247,42 @@ double TLondon1D2L::Eval(double t, const vector &par) const { if (par_changed) fCalcNeeded = true; -/* DEBUGGING CODE COMMENTED -- quite a mess... sorry*/ - // if model parameters have changed, recalculate B(z), P(B) and P(t) if (fCalcNeeded) { - vector par_for_PofT; - -// cout << "par_for_PofT: "; - - for (unsigned int i(0); i<3; i++) { - par_for_PofT.push_back(par[i]); -// cout << par[i] << " "; - } -// cout << endl; + fParForPofT[0] = par[0]; // phase if(!only_phase_changed) { cout << " Parameters have changed, (re-)calculating p(B) and P(t) now..." << endl; - vector par_for_BofZ; - vector par_for_PofB; + for (unsigned int i(2); i interfaces; - interfaces.push_back(par[5]+par[6]); + interfaces.push_back(par[3]+par[4]); vector weights; for(unsigned int i(par.size()-2); iWeightLayers(par[3], interfaces, weights); + fImpProfile->WeightLayers(par[1], interfaces, weights); } - TLondon1D_2L BofZ2(par_for_BofZ); - TPofBCalc PofB2(BofZ2, *fImpProfile, par_for_PofB); + TLondon1D_2L BofZ2(fParForBofZ); + TPofBCalc PofB2(BofZ2, *fImpProfile, fParForPofB); fPofT->DoFFT(PofB2); } else { cout << "Only the phase parameter has changed, (re-)calculating P(t) now..." << endl; } - fPofT->CalcPol(par_for_PofT); + fPofT->CalcPol(fParForPofT); fCalcNeeded = false; fLastTwoChanged = false; @@ -355,22 +315,28 @@ TLondon1D3L::TLondon1D3L(const vector &parNo, const vector if (status) { // error cout << endl << "**WARNING** reading/parsing TFitPofB_startup.xml failed." << endl; } - startupHandler->CheckLists(); + fWisdom = startupHandler->GetWisdomFile(); string rge_path(startupHandler->GetDataPath()); vector energy_vec(startupHandler->GetEnergyList()); + fParForPofT.push_back(fPar[0]); + fParForPofT.push_back(startupHandler->GetDeltat()); + fParForPofT.push_back(startupHandler->GetDeltaB()); + + for (unsigned int i(2); iGetDeltat()); + fParForPofB.push_back(startupHandler->GetDeltaB()); + fParForPofB.push_back(fPar[1]); + TTrimSPData *x = new TTrimSPData(rge_path, energy_vec); fImpProfile = x; x = 0; delete x; - vector par_for_PofT; - - for (unsigned int i(0); i<3; i++) - par_for_PofT.push_back(fPar[i]); - - TPofTCalc *y = new TPofTCalc(par_for_PofT); + TPofTCalc *y = new TPofTCalc(fWisdom, fParForPofT); fPofT = y; y = 0; delete y; @@ -404,10 +370,7 @@ double TLondon1D3L::Eval(double t, const vector &par) const { if( fPar[i]-par[i] ) { fPar[i] = par[i]; par_changed = true; - if(i == 1 || i == 2) { - cout << "You are varying dt or dB! These parameters have to be fixed! Quitting..." << endl; - exit(-1); - } else if (i == 0) { + if (i == 0) { only_phase_changed = true; } else { only_phase_changed = false; @@ -420,67 +383,57 @@ double TLondon1D3L::Eval(double t, const vector &par) const { if (par_changed) fCalcNeeded = true; -/* DEBUGGING CODE COMMENTED -- quite a mess... sorry*/ - // if model parameters have changed, recalculate B(z), P(B) and P(t) if (fCalcNeeded) { - vector par_for_PofT; - -// cout << "par_for_PofT: "; - - for (unsigned int i(0); i<3; i++) { - par_for_PofT.push_back(par[i]); -// cout << par[i] << " "; - } -// cout << endl; + fParForPofT[0] = par[0]; // phase if(!only_phase_changed) { cout << " Parameters have changed, (re-)calculating p(B) and P(t) now..." << endl; - vector par_for_BofZ; - vector par_for_PofB; + for (unsigned int i(2); iWeightLayers(par[3], interfaces, weights); + fImpProfile->WeightLayers(par[1], interfaces, weights); } - TLondon1D_3L BofZ3(par_for_BofZ); - TPofBCalc PofB3(BofZ3, *fImpProfile, par_for_PofB); + TLondon1D_3L BofZ3(fParForBofZ); + TPofBCalc PofB3(BofZ3, *fImpProfile, fParForPofB); fPofT->DoFFT(PofB3); } else { cout << "Only the phase parameter has changed, (re-)calculating P(t) now..." << endl; } - fPofT->CalcPol(par_for_PofT); + fPofT->CalcPol(fParForPofT); fCalcNeeded = false; fLastThreeChanged = false; @@ -495,7 +448,7 @@ double TLondon1D3L::Eval(double t, const vector &par) const { // creates (a pointer to) the TPofTCalc object (with the FFT plan) //------------------ -TLondon1D3LS::TLondon1D3LS(const vector &parNo, const vector &par) { +TLondon1D3LS::TLondon1D3LS(const vector &parNo, const vector &par) : fLastThreeChanged(true) { // extract function parameters for(unsigned int i(0); i &parNo, const vectorCheckLists(); + fWisdom = startupHandler->GetWisdomFile(); string rge_path(startupHandler->GetDataPath()); vector energy_vec(startupHandler->GetEnergyList()); + fParForPofT.push_back(fPar[0]); + fParForPofT.push_back(startupHandler->GetDeltat()); + fParForPofT.push_back(startupHandler->GetDeltaB()); + + for (unsigned int i(2); iGetDeltat()); + fParForPofB.push_back(startupHandler->GetDeltaB()); + fParForPofB.push_back(fPar[1]); + TTrimSPData *x = new TTrimSPData(rge_path, energy_vec); fImpProfile = x; x = 0; delete x; - vector par_for_PofT; - - for (unsigned int i(0); i<3; i++) - par_for_PofT.push_back(fPar[i]); - - TPofTCalc *y = new TPofTCalc(par_for_PofT); + TPofTCalc *y = new TPofTCalc(fWisdom, fParForPofT); fPofT = y; y = 0; delete y; @@ -562,10 +521,7 @@ double TLondon1D3LS::Eval(double t, const vector &par) const { if( fPar[i]-par[i] ) { fPar[i] = par[i]; par_changed = true; - if(i == 1 || i == 2) { - cout << "You are varying dt or dB! These parameters have to be fixed! Quitting..." << endl; - exit(-1); - } else if (i == 0) { + if (i == 0) { only_phase_changed = true; } else { only_phase_changed = false; @@ -578,67 +534,43 @@ double TLondon1D3LS::Eval(double t, const vector &par) const { if (par_changed) fCalcNeeded = true; -/* DEBUGGING CODE COMMENTED -- quite a mess... sorry*/ - // if model parameters have changed, recalculate B(z), P(B) and P(t) if (fCalcNeeded) { - vector par_for_PofT; - -// cout << "par_for_PofT: "; - - for (unsigned int i(0); i<3; i++) { - par_for_PofT.push_back(par[i]); -// cout << par[i] << " "; - } -// cout << endl; + fParForPofT[0] = par[0]; // phase if(!only_phase_changed) { cout << " Parameters have changed, (re-)calculating p(B) and P(t) now..." << endl; - vector par_for_BofZ; - vector par_for_PofB; + for (unsigned int i(2); i interfaces; - interfaces.push_back(par[5]+par[6]); - interfaces.push_back(par[5]+par[6]+par[7]); + interfaces.push_back(par[3]+par[4]); + interfaces.push_back(par[3]+par[4]+par[5]); vector weights; for(unsigned int i(par.size()-3); iWeightLayers(par[3], interfaces, weights); + fImpProfile->WeightLayers(par[1], interfaces, weights); } - TLondon1D_3LS BofZ3S(par_for_BofZ); - TPofBCalc PofB3S(BofZ3S, *fImpProfile, par_for_PofB); + TLondon1D_3LS BofZ3S(fParForBofZ); + TPofBCalc PofB3S(BofZ3S, *fImpProfile, fParForPofB); fPofT->DoFFT(PofB3S); } else { cout << "Only the phase parameter has changed, (re-)calculating P(t) now..." << endl; } - fPofT->CalcPol(par_for_PofT); + fPofT->CalcPol(fParForPofT); fCalcNeeded = false; fLastThreeChanged = false; diff --git a/src/external/TFitPofB-lib/classes/TPofBCalc.cpp b/src/external/TFitPofB-lib/classes/TPofBCalc.cpp index 3f2702bc..42d7b7c1 100644 --- a/src/external/TFitPofB-lib/classes/TPofBCalc.cpp +++ b/src/external/TFitPofB-lib/classes/TPofBCalc.cpp @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2008/05/27 + 2008/06/03 ***************************************************************************/ @@ -58,6 +58,7 @@ TPofBCalc::TPofBCalc( const TBofZCalc &BofZ, const TTrimSPData &dataTrimSP, cons if (n > 0) { ofstream of(debugfile); + assure(of, debugfile); for (unsigned int i(0); i 0) { ofstream of1(debugfile1); + assure(of1, debugfile1); for (unsigned int i(0); i &par) { +TPofTCalc::TPofTCalc (const string &wisdom, const vector &par) : fWisdom(wisdom) { fNFFT = ( int(1.0/gBar/par[1]/par[2]+1.0) % 2 ) ? int(1.0/gBar/par[1]/par[2]+2.0) : int(1.0/gBar/par[1]/par[2]+1.0); fTBin = 1.0/gBar/double(fNFFT-1)/par[2]; @@ -40,7 +40,7 @@ TPofTCalc::TPofTCalc (const vector &par) { int wisdomLoaded(0); FILE *wordsOfWisdomR; - wordsOfWisdomR = fopen("WordsOfWisdom.dat", "r"); + wordsOfWisdomR = fopen(fWisdom.c_str(), "r"); if (wordsOfWisdomR == NULL) { cout << "Couldn't open wisdom file ..." << endl; } else { @@ -142,7 +142,7 @@ TPofTCalc::~TPofTCalc() { // export wisdom so it has not to be checked for the FFT-plan next time FILE *wordsOfWisdomW; - wordsOfWisdomW = fopen("WordsOfWisdom.dat", "w"); + wordsOfWisdomW = fopen(fWisdom.c_str(), "w"); if (wordsOfWisdomW == NULL) { cout << "couldn't open file ... No wisdom is exported..." << endl; } diff --git a/src/external/TFitPofB-lib/include/TFitPofBStartupHandler.h b/src/external/TFitPofB-lib/include/TFitPofBStartupHandler.h index 1d5071b7..6dba8e9c 100644 --- a/src/external/TFitPofB-lib/include/TFitPofBStartupHandler.h +++ b/src/external/TFitPofB-lib/include/TFitPofBStartupHandler.h @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2008/05/30 + 2008/06/03 based upon: $Id: PStartupHandler.h 3396 2008-05-29 14:41:33Z nemu $ @@ -61,14 +61,20 @@ class TFitPofBStartupHandler : public TQObject { virtual const string GetDataPath() const { return fDataPath; } virtual vector GetEnergyList() const { return fEnergyList; } + virtual const double GetDeltat() const { return fDeltat; } + virtual const double GetDeltaB() const { return fDeltaB; } + virtual const string GetWisdomFile() const { return fWisdomFile; } private: - enum EKeyWords {eEmpty, eComment, eDataPath, eEnergy, eEnergyList}; + enum EKeyWords {eEmpty, eComment, eDataPath, eEnergy, eEnergyList, eDeltat, eDeltaB, eWisdomFile}; EKeyWords fKey; string fDataPath; vector fEnergyList; + double fDeltat; + double fDeltaB; + string fWisdomFile; ClassDef(TFitPofBStartupHandler, 1) }; diff --git a/src/external/TFitPofB-lib/include/TLondon1D.h b/src/external/TFitPofB-lib/include/TLondon1D.h index 299a10be..dacdc407 100644 --- a/src/external/TFitPofB-lib/include/TLondon1D.h +++ b/src/external/TFitPofB-lib/include/TLondon1D.h @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2008/05/30 + 2008/06/03 ***************************************************************************/ @@ -29,6 +29,10 @@ protected: TTrimSPData *fImpProfile; TPofTCalc *fPofT; mutable bool fCalcNeeded; + mutable vector fParForPofT; + mutable vector fParForBofZ; + mutable vector fParForPofB; + string fWisdom; ClassDef(TLondon1D,1) }; diff --git a/src/external/TFitPofB-lib/include/TPofTCalc.h b/src/external/TFitPofB-lib/include/TPofTCalc.h index fe45d097..fcc6663a 100644 --- a/src/external/TFitPofB-lib/include/TPofTCalc.h +++ b/src/external/TFitPofB-lib/include/TPofTCalc.h @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2008/05/25 + 2008/06/03 ***************************************************************************/ @@ -14,6 +14,7 @@ #include "TPofBCalc.h" #include "fftw3.h" +#include #define PI 3.14159265358979323846 @@ -21,7 +22,7 @@ class TPofTCalc { public: - TPofTCalc(const vector&); + TPofTCalc(const string&, const vector&); ~TPofTCalc(); vector DataT() const {return fT;} @@ -38,6 +39,7 @@ private: vector fPT; double fTBin; unsigned int fNFFT; + const string fWisdom; }; diff --git a/src/external/TFitPofB-lib/test/TFitPofB_startup.xml b/src/external/TFitPofB-lib/test/TFitPofB_startup.xml index 52716c4d..fd4ad4d2 100644 --- a/src/external/TFitPofB-lib/test/TFitPofB_startup.xml +++ b/src/external/TFitPofB-lib/test/TFitPofB_startup.xml @@ -2,16 +2,19 @@ TFitPofB_startup.xml - Defines path and energies of TrimSP-rge-files to be read in + Defines path and energies (keV, format: %02u_%1u) of TrimSP-rge-files, path to the FFTW-wisdom-file and time/field binning (us/G) /home/l_wojek/TrimSP/AuYBCO_2005/AuYBCO-500000- + WordsOfWisdom.dat + 0.01 + 0.01 - 04_6 - 09_6 - 14_6 - 18_6 - 21_6 - 24_6 - 28_7 + 04_6 + 09_6 + 14_6 + 18_6 + 21_6 + 24_6 + 28_7 diff --git a/src/external/TFitPofB-lib/test/test.cpp b/src/external/TFitPofB-lib/test/test.cpp index a5b4fc33..7b46c39d 100644 --- a/src/external/TFitPofB-lib/test/test.cpp +++ b/src/external/TFitPofB-lib/test/test.cpp @@ -134,9 +134,9 @@ int main(){ ************************************************************************/ -/**************** Test TLondon1D3LS *********************************/ +/**************** Test TLondon1D3L *********************************/ - unsigned int parNo_arr[] = {1, 3, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; + unsigned int parNo_arr[] = {1, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; double par_arr[] = {0.0, 999.0, 0.01, 999.0, 0.01, 999.0, 4.6, 999.0, 100.0, 5.0, 70.0, 50.0, 70.0, 180.0, 180.0, 180.0, 1.0, 1.0, 1.0}; vector parNo_vec(parNo_arr, parNo_arr+(sizeof(parNo_arr)/sizeof(parNo_arr[0]))); @@ -188,8 +188,8 @@ int main(){ } of01.close(); - par_vec_sub[3] = 9.6; - par_vec_sub[10] = 300.0; + par_vec_sub[1] = 9.6; + par_vec_sub[8] = 300.0; for (double i(0.); i<12.0; i+=0.003) { of02 << i << " " << fitter.Eval(i, par_vec_sub) << endl; @@ -203,14 +203,14 @@ int main(){ } of03.close(); - par_vec_sub[13] = 0.3; + par_vec_sub[11] = 0.3; for (double i(0.); i<12.0; i+=0.003) { of04 << i << " " << fitter.Eval(i, par_vec_sub) << endl; } of04.close(); - par_vec_sub[11] = 500.0; + par_vec_sub[9] = 500.0; for (double i(0.); i<12.0; i+=0.003) { of05 << i << " " << fitter.Eval(i, par_vec_sub) << endl;