TGo4FitParsList.cxx

Go to the documentation of this file.
00001 // $Id: TGo4FitParsList.cxx 478 2009-10-29 12:26:09Z linev $
00002 //-----------------------------------------------------------------------
00003 //       The GSI Online Offline Object Oriented (Go4) Project
00004 //         Experiment Data Processing at EE department, GSI
00005 //-----------------------------------------------------------------------
00006 // Copyright (C) 2000- GSI Helmholtzzentrum für Schwerionenforschung GmbH
00007 //                     Planckstr. 1, 64291 Darmstadt, Germany
00008 // Contact:            http://go4.gsi.de
00009 //-----------------------------------------------------------------------
00010 // This software can be used under the license agreements as stated
00011 // in Go4License.txt file which is part of the distribution.
00012 //-----------------------------------------------------------------------
00013 
00014 #include "TGo4FitParsList.h"
00015 
00016 #include "Riostream.h"
00017 #include "TClass.h"
00018 
00019 #include "TGo4FitParameter.h"
00020 
00021 TGo4FitParsList::TGo4FitParsList() : TGo4FitNamed(), fxPars(), fbCanRollbackPars(kFALSE) {
00022 
00023 }
00024 
00025 TGo4FitParsList::TGo4FitParsList(Bool_t IsParsOwned) : TGo4FitNamed(), fxPars(), fbCanRollbackPars(kFALSE) {
00026   fxPars.SetOwner(IsParsOwned);
00027 }
00028 
00029 TGo4FitParsList::TGo4FitParsList(const char* Name, const char* Title, Bool_t IsParsOwned) : TGo4FitNamed(Name,Title), fxPars(), fbCanRollbackPars(kFALSE) {
00030   fxPars.SetOwner(IsParsOwned);
00031 }
00032 
00033 TGo4FitParsList::~TGo4FitParsList() {
00034 }
00035 
00036 Int_t TGo4FitParsList::GetParIndex(const TGo4FitParameter* par) {
00037    for(Int_t i=0;i<NumPars();i++)
00038      if(GetPar(i)==par) return i;
00039    return -1;
00040 }
00041 
00042 Double_t TGo4FitParsList::GetParValue(const char* ParName) {
00043    TGo4FitParameter* par = Find(ParName);
00044    if(par) return par->GetValue();
00045       else return 0.;
00046 }
00047 
00048 Bool_t TGo4FitParsList::SetParValue(const char* ParName, Double_t iValue) {
00049    TGo4FitParameter* par = Find(ParName);
00050    if(par) { par->SetValue(iValue); return kTRUE; }
00051       else return kFALSE;
00052 }
00053 
00054 void TGo4FitParsList::GetParsValues(Double_t* pars) {
00055    for(Int_t i=0;i<NumPars();i++)
00056      pars[i] = Get(i)->GetValue();
00057 }
00058 
00059 void TGo4FitParsList::SetParsValues(Double_t* pars) {
00060    if (pars)
00061      for(Int_t i=0;i<NumPars();i++)
00062         Get(i)->SetValue(pars[i]);
00063 }
00064 
00065 Double_t TGo4FitParsList::GetParError(const char* ParName) {
00066    TGo4FitParameter* par = Find(ParName);
00067    if(par) return par->GetError();
00068       else return 0.;
00069 }
00070 
00071 Bool_t TGo4FitParsList::SetParError(const char* ParName, Double_t iError) {
00072    TGo4FitParameter* par = Find(ParName);
00073    if(par) { par->SetError(iError); return kTRUE; }
00074       else return kFALSE;
00075 }
00076 
00077 Bool_t TGo4FitParsList::SetParFixed(const char* ParName, Bool_t iFixed) {
00078    TGo4FitParameter* par = Find(ParName);
00079    if(par) { par->SetFixed(iFixed); return kTRUE; }
00080       else return kFALSE;
00081 }
00082 
00083 Bool_t TGo4FitParsList::GetParFixed(const char* ParName) {
00084    TGo4FitParameter* par = Find(ParName);
00085    if(par) return par->GetFixed();
00086       else return kFALSE;
00087 }
00088 
00089 Int_t TGo4FitParsList::NumFixedPars() {
00090   Int_t res = 0;
00091   for (Int_t n=0; n<NumPars(); n++)
00092      if (Get(n)->GetFixed()) res++;
00093   return res;
00094 }
00095 
00096 Int_t TGo4FitParsList::NumFreePars() {
00097   return NumPars()-NumFixedPars();
00098 }
00099 
00100 
00101 Bool_t TGo4FitParsList::SetParRange(const char* ParName, Double_t RangeMin, Double_t RangeMax) {
00102    TGo4FitParameter* par = Find(ParName);
00103    if(par) { par->SetRange(RangeMin,RangeMax); return kTRUE; }
00104       else return kFALSE;
00105 }
00106 
00107 Bool_t TGo4FitParsList::GetParRange(const char* ParName, Double_t& RangeMin, Double_t& RangeMax) {
00108    TGo4FitParameter* par = Find(ParName);
00109    if(par) return par->GetRange(RangeMin,RangeMax);
00110       else return kFALSE;
00111 }
00112 
00113 Bool_t TGo4FitParsList::SetParEpsilon(const char* ParName, Double_t Epsilon) {
00114    TGo4FitParameter* par = Find(ParName);
00115    if(par) { par->SetEpsilon(Epsilon); return kTRUE; }
00116       else return kFALSE;
00117 }
00118 
00119 Bool_t TGo4FitParsList::GetParEpsilon(const char* ParName, Double_t& Epsilon) {
00120    TGo4FitParameter* par = Find(ParName);
00121    if(par) return par->GetEpsilon(Epsilon);
00122       else return kFALSE;
00123 }
00124 
00125 
00126 void TGo4FitParsList::SetParName(Int_t n, const char* name) {
00127    if(Get(n)) Get(n)->SetName(name);
00128 }
00129 
00130 const char* TGo4FitParsList::GetParName(Int_t n) {
00131    if(Get(n)) return Get(n)->GetName();
00132          else return 0;
00133 }
00134 
00135 const char* TGo4FitParsList::GetParFullName(Int_t n) {
00136    if(Get(n)) return Get(n)->GetFullName();
00137          else return 0;
00138 }
00139 
00140 void TGo4FitParsList::SetParsNames(const char* name0, const char* name1, const char* name2, const char* name3, const char* name4,
00141                                    const char* name5, const char* name6, const char* name7, const char* name8, const char* name9) {
00142   SetParName(0,name0);
00143   SetParName(1,name1);
00144   SetParName(2,name2);
00145   SetParName(3,name3);
00146   SetParName(4,name4);
00147   SetParName(5,name5);
00148   SetParName(6,name6);
00149   SetParName(7,name7);
00150   SetParName(8,name8);
00151   SetParName(9,name9);
00152 }
00153 
00154 void TGo4FitParsList::SetParsValues(Double_t par0, Double_t par1, Double_t par2, Double_t par3, Double_t par4,
00155                                     Double_t par5, Double_t par6, Double_t par7, Double_t par8, Double_t par9) {
00156   if(Get(0)) Get(0)->SetValue(par0);
00157   if(Get(1)) Get(1)->SetValue(par1);
00158   if(Get(2)) Get(2)->SetValue(par2);
00159   if(Get(3)) Get(3)->SetValue(par3);
00160   if(Get(4)) Get(4)->SetValue(par4);
00161   if(Get(5)) Get(5)->SetValue(par5);
00162   if(Get(6)) Get(6)->SetValue(par6);
00163   if(Get(7)) Get(7)->SetValue(par7);
00164   if(Get(8)) Get(8)->SetValue(par8);
00165   if(Get(9)) Get(9)->SetValue(par9);
00166 }
00167 
00168 void TGo4FitParsList::MemorizePars() {
00169    for(Int_t i=0;i<NumPars();i++)
00170      Get(i)->MemorizeValue();
00171    fbCanRollbackPars = kTRUE;
00172 }
00173 
00174 void TGo4FitParsList::RememberPars() {
00175   for(Int_t i=0;i<NumPars();i++)
00176     Get(i)->RememberValue();
00177 }
00178 
00179 Bool_t TGo4FitParsList::IsAllParsFixed() {
00180   for(Int_t i=0;i<NumPars();i++)
00181     if (!Get(i)->GetFixed()) return kFALSE;
00182   return kTRUE;
00183 }
00184 
00185 void TGo4FitParsList::Print(Option_t* option) const {
00186    TGo4FitParsList* lst = (TGo4FitParsList*) this;
00187    if ((lst->NumPars()>0) && fxPars.IsOwner()) {
00188       cout << "  List of parameters:" << endl;
00189       for(Int_t n=0;n<lst->NumPars();n++)
00190         lst->GetPar(n)->Print(option);
00191    }
00192 }
00193 
00194 void TGo4FitParsList::PrintPars() const {
00195    cout << endl << "*** LIST OF PARAMETERS VALUE ***" << endl;
00196    TGo4FitParsList* l = (TGo4FitParsList*) this;
00197    int oldprec = cout.precision(6);
00198    for(Int_t n=0;n<l->NumPars();n++)
00199      cout << setw(15) << l->GetParFullName(n)
00200           << " " << setw(10) << l->GetPar(n)->GetValue()
00201           << " " << setw(10) << l->GetPar(n)->GetError() << endl;
00202    cout.precision(oldprec);
00203 }
00204 
00205 void TGo4FitParsList::SetParsOwner(TGo4FitNamed* iOwner) {
00206    for(Int_t i=0;i<NumPars();i++)
00207       Get(i)->SetOwner(iOwner);
00208 }
00209 
00210 TGo4FitParameter* TGo4FitParsList::CreatePar(const char* ParName, const char* Title, Double_t iValue) {
00211   if (Find(ParName)==0) return AddPar(new TGo4FitParameter(ParName,Title,iValue));
00212                    else return Find(ParName);
00213 }
00214 
00215 TGo4FitParameter* TGo4FitParsList::Find(const char* ParName) {
00216    for(Int_t i=0;i<NumPars();i++)
00217       if (strcmp(Get(i)->GetName(),ParName)==0) return Get(i);
00218 
00219    for(Int_t i=0;i<NumPars();i++)
00220       if (strcmp(Get(i)->GetFullName(),ParName)==0) return Get(i);
00221 
00222    return 0;
00223 }
00224 
00225 TGo4FitParameter* TGo4FitParsList::Find(const char* OwnerFullName, const char* ParName) {
00226    for(Int_t i=0;i<NumPars();i++) {
00227       TGo4FitParameter* par = Get(i);
00228       if (par->GetOwner()==0) continue;
00229       if ( (strcmp(par->GetOwnerFullName(),OwnerFullName)==0) &&
00230            (strcmp(par->GetName(),ParName)==0) ) return par;
00231    }
00232    return 0;
00233 }
00234 
00235 TGo4FitParameter* TGo4FitParsList::Find(TGo4FitParameter* par) {
00236    for(Int_t i=0;i<NumPars();i++)
00237      if (Get(i)==par) return par;
00238    return 0;
00239 }
00240 
00241 Bool_t TGo4FitParsList::RemoveParByIndex(Int_t indx) {
00242   if((indx>=0) && (indx<NumPars())) return RemovePar(Get(indx));
00243                                else return kFALSE;
00244 }
00245 
00246 Bool_t TGo4FitParsList::RemovePar(const char* name) {
00247    return RemovePar(FindPar(name));
00248 }
00249 
00250 Bool_t TGo4FitParsList::RemovePar(TGo4FitParameter* par) {
00251    if (fxPars.FindObject(par)) {
00252       fbCanRollbackPars = kFALSE;
00253       fxPars.Remove(par);
00254       if (fxPars.IsOwner()) delete par;
00255       return kTRUE;
00256    } else return kFALSE;
00257 }
00258 
00259 void TGo4FitParsList::CollectParsTo(TGo4FitParsList & list) {
00260   for(Int_t i=0;i<NumPars();i++) {
00261     TGo4FitParameter* par = Get(i);
00262     if (list.GetParIndex(par)<0) list.AddPar(par);
00263   }
00264 }
00265 
00266 void TGo4FitParsList::ClearParsBlocking() {
00267    for(Int_t i=0;i<NumPars();i++)
00268      Get(i)->ClearBlocked();
00269 }
00270 
00271 void TGo4FitParsList::ClearPars() {
00272    fxPars.Clear();
00273    fbCanRollbackPars = kFALSE;
00274 }
00275 
00276 
00277 TGo4FitParameter* TGo4FitParsList::AddPar(TGo4FitParameter* par) {
00278   fxPars.AddLast(par);
00279   if ((par!=0) && fxPars.IsOwner()) par->SetOwner(this);
00280   fbCanRollbackPars = kFALSE;
00281   return par;
00282 }
00283 
00284 TGo4FitParameter* TGo4FitParsList::InsertPar(TGo4FitParameter* par, Int_t indx) {
00285   if (indx<0) fxPars.AddLast(par);
00286          else fxPars.AddAt(par,indx);
00287   if ((par!=0) && fxPars.IsOwner()) par->SetOwner(this);
00288   fbCanRollbackPars = kFALSE;
00289   return par;
00290 }
00291 
00292 void TGo4FitParsList::Streamer(TBuffer& b) {
00293    if (b.IsReading()) {
00294      TGo4FitParsList::Class()->ReadBuffer(b, this);
00295      Bool_t IsOwner;
00296      b >> IsOwner;
00297      if (IsOwner) {
00298        fxPars.Streamer(b);
00299        SetParsOwner(this);
00300      }
00301    } else {
00302      TGo4FitParsList::Class()->WriteBuffer(b, this);
00303      b << fxPars.IsOwner();
00304      if (fxPars.IsOwner())
00305        fxPars.Streamer(b);
00306    }
00307 }

Generated on Thu Oct 28 15:54:12 2010 for Go4-Fitpackagev4.04-2 by  doxygen 1.5.1