Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

Anp::AlgAdapt Class Reference

#include <AlgAdapt.h>

Inheritance diagram for Anp::AlgAdapt:

Anp::Base List of all members.

Public Member Functions

 AlgAdapt ()
virtual ~AlgAdapt ()
virtual bool Init ()=0
virtual long double GetPT () const
virtual unsigned int GetNPar () const =0
virtual void InitReco (RecoNu &) const
virtual void InitTrue (TrueNu &) const
virtual double GetWeight (const TrueNu &) const
virtual void Vary (RecoNu &, const TrueNu &) const
virtual const std::vector<
double > & 
Get (const std::string &key) const
virtual void Set (const std::vector< double > &dvec, const std::string &key)
virtual const std::vector<
std::string > & 
GetParName () const
virtual void Config (const Registry &)=0
virtual void Print (std::ostream &os=std::cout) const
virtual void Read (const std::string &fname)
virtual void Save (const std::string &fname)

Protected Member Functions

void ReadVec (const std::string &prefix, const Registry &reg)
const std::vector< double > GetVec (const std::string &key, const Registry &reg) const
void PrintVec (std::ostream &o, int w=7, int p=5) const
void PrintVec (const std::vector< double > &v, std::ostream &o, int w=7, int p=5) const

Protected Attributes

std::vector< double > fCurErr
std::vector< double > fCurPar
std::vector< double > fDefErr
std::vector< double > fDefPar
std::vector< std::string > fParName

Constructor & Destructor Documentation

Anp::AlgAdapt::AlgAdapt  ) 
 

Definition at line 20 of file AlgAdapt.cxx.

00021 {
00022 }

Anp::AlgAdapt::~AlgAdapt  )  [virtual]
 

Definition at line 25 of file AlgAdapt.cxx.

00026 {
00027 }


Member Function Documentation

virtual void Anp::AlgAdapt::Config const Registry  )  [pure virtual]
 

const vector< double > & Anp::AlgAdapt::Get const std::string &  key  )  const [virtual]
 

Definition at line 56 of file AlgAdapt.cxx.

00057 {
00058    if(key == "CurErr")
00059    {
00060       return fCurErr;
00061    }
00062    else if(key == "CurPar")
00063    {
00064       return fCurPar;
00065    }
00066    else if(key == "DefErr")
00067    {
00068       return fDefErr;
00069    }
00070    else if(key == "DefPar")
00071    {
00072       return fDefPar;
00073    }
00074    
00075    cerr << "AlgAdapt::Get - unknown key: " << key << endl;
00076    
00077    assert(false && "unknown key");
00078 
00079    return fCurPar;
00080 }

virtual unsigned int Anp::AlgAdapt::GetNPar  )  const [pure virtual]
 

Referenced by Set().

const std::vector< std::string > & Anp::AlgAdapt::GetParName  )  const [inline, virtual]
 

Definition at line 101 of file AlgAdapt.h.

00102    {
00103       return fParName;
00104    }

long double Anp::AlgAdapt::GetPT  )  const [virtual]
 

Definition at line 30 of file AlgAdapt.cxx.

References fCurPar, fDefErr, and fDefPar.

00031 {
00032    if(fCurPar.size() != fDefPar.size() || fCurPar.size() != fDefErr.size())
00033    {
00034       cerr << "AlgAdapt::GetPT - parameter and/or error vectors have different size" << endl;
00035       return 0.0;
00036    }
00037 
00038    long double pterm = 0.0;
00039 
00040    for(unsigned int ipar = 0; ipar < fCurPar.size(); ++ipar)
00041    {
00042       const double cur_par = fCurPar[ipar];
00043       const double def_par = fDefPar[ipar];
00044       const double def_err = fDefErr[ipar];
00045 
00046       if(def_err > 0.0)
00047       {
00048          pterm += (cur_par - def_par)*(cur_par - def_par)/(def_err*def_err);
00049       }
00050    }
00051 
00052    return pterm;
00053 }

const vector< double > Anp::AlgAdapt::GetVec const std::string &  key,
const Registry reg
const [protected]
 

Definition at line 165 of file AlgAdapt.cxx.

References Registry::Get(), reg, and UtilString::StringTok().

Referenced by ReadVec().

00166 {
00167    //
00168    // Extract Registry value stored at key and convert string numbers separated by
00169    // " " or "," or both to vector of doubles.
00170    //
00171  
00172    vector<double> dvec;
00173    
00174    const char *value_char = 0;
00175    if(!reg.Get(key.c_str(), value_char) || !value_char)
00176    {
00177       return dvec;
00178    }
00179 
00180    vector<string> svec;
00181    UtilString::StringTok(svec, string(value_char), ", ");
00182    
00183    dvec = vector<double>(svec.size(), 0.0);
00184 
00185    for(unsigned int i = 0; i < svec.size(); ++i)
00186    {
00187       if(!svec[i].empty())
00188       {
00189          dvec[i] = std::atof(svec[i].c_str());
00190       }
00191    }
00192 
00193    return dvec;
00194 }

double Anp::AlgAdapt::GetWeight const TrueNu  )  const [inline, virtual]
 

Definition at line 109 of file AlgAdapt.h.

00109 { return 1.0; }

virtual bool Anp::AlgAdapt::Init  )  [pure virtual]
 

void Anp::AlgAdapt::InitReco RecoNu  )  const [inline, virtual]
 

Definition at line 106 of file AlgAdapt.h.

00106 {}

void Anp::AlgAdapt::InitTrue TrueNu  )  const [inline, virtual]
 

Definition at line 107 of file AlgAdapt.h.

00107 {}

void Anp::AlgAdapt::Print std::ostream &  os = std::cout  )  const [virtual]
 

Definition at line 259 of file AlgAdapt.cxx.

00260 {
00261    os << "AlgAdapt::Print - this function is not implemented for this class" << endl;
00262 }

void Anp::AlgAdapt::PrintVec const std::vector< double > &  v,
std::ostream &  o,
int  w = 7,
int  p = 5
const [protected]
 

Definition at line 225 of file AlgAdapt.cxx.

00226 {
00227    for(unsigned int i = 0; i < v.size(); ++i)
00228    {
00229       if(i == 0)
00230       {
00231          o << "(";
00232       }
00233       else
00234       {
00235          o << ", ";
00236       }
00237       
00238       if(p > 0)
00239       {
00240          o << setprecision(p);
00241       }
00242       if(w > 0)
00243       {
00244          o << setw(w);
00245       }
00246 
00247       o << v[i];
00248       
00249       if(i + 1 == v.size())
00250       {
00251          o << ")";
00252       }
00253    }
00254 
00255    o << endl;
00256 }

void Anp::AlgAdapt::PrintVec std::ostream &  o,
int  w = 7,
int  p = 5
const [protected]
 

Definition at line 197 of file AlgAdapt.cxx.

References fCurErr, fCurPar, fDefErr, and fDefPar.

00198 {
00199    if(!fCurPar.empty())
00200    {
00201       o << "   CurPar = ";
00202       PrintVec(fCurPar, o, w, p);
00203    }
00204    
00205    if(!fCurErr.empty())
00206    {
00207       o << "   CurErr = ";
00208       PrintVec(fCurErr, o, w, p);
00209    }
00210    
00211    if(!fDefPar.empty())
00212    {
00213       o << "   DefPar = ";
00214       PrintVec(fDefPar, o, w, p);
00215    }
00216    
00217    if(!fDefErr.empty())
00218    {
00219       o << "   DefErr = ";
00220       PrintVec(fDefErr, o, w, p);
00221    }
00222 }

void Anp::AlgAdapt::Read const std::string &  fname  )  [virtual]
 

Definition at line 289 of file AlgAdapt.cxx.

References Anp::ConvertString2Vector(), infile, and Set().

00290 {
00291    std::ifstream infile(fname.c_str());
00292    if(!infile.is_open())
00293    {
00294       cerr << "AlgAdapt::Read - failed to open input file:\n   " << fname << endl;
00295       return;
00296    }
00297 
00298    vector<double> cur_err, cur_par, def_err, def_par;
00299 
00300    while(!infile.eof())
00301    {
00302       std::string line;
00303       std::getline(infile, line);
00304       
00305       if(line.empty())
00306       {
00307          continue;
00308       }
00309 
00310       const std::size_t ipos = line.find_last_of("=");
00311       if(ipos == string::npos)
00312       {
00313          cerr << "AlgAdapt::Read - failed to find equal sign:" << endl << line << endl;
00314          continue;
00315       }
00316 
00317       const string name = line.substr(0, ipos - 1);
00318       const string data = line.substr(ipos + 1);
00319 
00320       if     (name == "CurErr") cur_err = Anp::ConvertString2Vector(data);
00321       else if(name == "CurPar") cur_par = Anp::ConvertString2Vector(data);
00322       else if(name == "DefErr") def_err = Anp::ConvertString2Vector(data);
00323       else if(name == "DefPar") def_par = Anp::ConvertString2Vector(data);
00324    }
00325    
00326    if(cur_err.size() != cur_par.size() || 
00327       cur_err.size() != def_err.size() || 
00328       cur_err.size() != def_par.size() || cur_err.empty())
00329    {
00330       cerr << "AlgAdapt::Read - input vectors do not match" << endl;
00331       return;
00332    }
00333 
00334    Set(cur_err, "CurErr");
00335    Set(cur_par, "CurPar");
00336    Set(def_par, "DefErr");
00337    Set(def_par, "DefPar");
00338 }

void Anp::AlgAdapt::ReadVec const std::string &  prefix,
const Registry reg
[protected]
 

Definition at line 119 of file AlgAdapt.cxx.

References GetVec(), reg, and Set().

00120 {
00121    //
00122    // Read in default and and current error and parameter vectors from
00123    // Registry, if these keys exist in Registry. Use virtual functions Set()
00124    // to set parameter values.
00125    //
00126 
00127    const vector<double> pvec = GetVec(prefix + "Par", reg);
00128    if(!pvec.empty())
00129    {
00130       Set(pvec, "CurPar");
00131    }
00132 
00133    const vector<double> evec = GetVec(prefix + "Err", reg);
00134    if(!evec.empty())
00135    {
00136       Set(evec, "CurErr");
00137    }
00138 
00139    const vector<double> evec_def = GetVec(prefix + "DefErr", reg);
00140    if(!evec_def.empty())
00141    {
00142       Set(evec_def, "DefErr");
00143    }
00144 
00145    const vector<double> pvec_def = GetVec(prefix + "DefPar", reg);
00146    if(!pvec_def.empty())
00147    {
00148       Set(pvec_def, "DefPar");
00149    }
00150 
00151    const vector<double> pvec_cur = GetVec(prefix + "CurPar", reg);
00152    if(!pvec_cur.empty())
00153    {
00154       Set(pvec_cur, "CurPar");
00155    }
00156 
00157    const vector<double> evec_cur = GetVec(prefix + "CurErr", reg);
00158    if(!evec_cur.empty())
00159    {
00160       Set(evec_cur, "CurErr");
00161    }
00162 }

void Anp::AlgAdapt::Save const std::string &  fname  )  [virtual]
 

Definition at line 265 of file AlgAdapt.cxx.

References Anp::ConvertVector2String(), fCurErr, fCurPar, fDefErr, and fDefPar.

00266 {
00267    if(fCurErr.size() != fCurPar.size() || 
00268       fCurErr.size() != fDefErr.size() || 
00269       fCurErr.size() != fDefPar.size() || fCurErr.empty())
00270    {
00271       cerr << "AlgAdapt::Save - invalid internal state" << endl;
00272       return;
00273    }
00274 
00275    ofstream ofile(fname.c_str());
00276    if(!ofile.is_open())
00277    {
00278       cerr << "AlgAdapt::Save - failed to open output file:\n   " << fname << endl;
00279       return;
00280    }
00281 
00282    ofile << "CurErr = " << Anp::ConvertVector2String(fCurErr) << endl
00283          << "CurPar = " << Anp::ConvertVector2String(fCurPar) << endl
00284          << "DefErr = " << Anp::ConvertVector2String(fDefErr) << endl
00285          << "DefPar = " << Anp::ConvertVector2String(fDefPar) << endl;
00286 }

void Anp::AlgAdapt::Set const std::vector< double > &  dvec,
const std::string &  key
[virtual]
 

Definition at line 83 of file AlgAdapt.cxx.

References fCurErr, fCurPar, fDefErr, fDefPar, and GetNPar().

Referenced by Read(), and ReadVec().

00084 {
00085    if(dvec.size() != GetNPar())
00086    {
00087       cerr << "AlgAdapt::Set - number of parameters and size of input vector do not match: " 
00088            << " GetNPar() = " << GetNPar() << " and dvec.size() = " << dvec.size() << endl;
00089       return;
00090    }
00091 
00092    if(key == "CurErr")
00093    {
00094       fCurErr = dvec;
00095       return;
00096    }
00097    else if(key == "CurPar")
00098    {
00099       fCurPar = dvec;
00100       return;
00101    }
00102    else if(key == "DefErr")
00103    {
00104       fDefErr = dvec;
00105       return;
00106    }
00107    else if(key == "DefPar")
00108    {
00109       fDefPar = dvec;
00110       return;
00111    }
00112    
00113    cerr << "AlgAdapt::Set - unknown key: " << key << endl;
00114 
00115    assert(false && "unknown key");
00116 }

void Anp::AlgAdapt::Vary RecoNu ,
const TrueNu
const [inline, virtual]
 

Definition at line 110 of file AlgAdapt.h.

00110 {}


Member Data Documentation

std::vector<double> Anp::AlgAdapt::fCurErr [protected]
 

Definition at line 84 of file AlgAdapt.h.

Referenced by PrintVec(), Save(), and Set().

std::vector<double> Anp::AlgAdapt::fCurPar [protected]
 

Definition at line 85 of file AlgAdapt.h.

Referenced by GetPT(), PrintVec(), Save(), and Set().

std::vector<double> Anp::AlgAdapt::fDefErr [protected]
 

Definition at line 86 of file AlgAdapt.h.

Referenced by GetPT(), PrintVec(), Save(), and Set().

std::vector<double> Anp::AlgAdapt::fDefPar [protected]
 

Definition at line 87 of file AlgAdapt.h.

Referenced by GetPT(), PrintVec(), Save(), and Set().

std::vector<std::string> Anp::AlgAdapt::fParName [protected]
 

Definition at line 89 of file AlgAdapt.h.


The documentation for this class was generated from the following files:
Generated on Mon Nov 23 05:33:31 2009 for loon by  doxygen 1.3.9.1