00001 /* 00002 * Copyright (C) 2008, Daniel Kollar and Kevin Kroeninger. 00003 * All rights reserved. 00004 * 00005 * For the licensing terms see doc/COPYING. 00006 */ 00007 00008 // --------------------------------------------------------- 00009 00010 #include <iostream> 00011 #include <fstream> 00012 00013 #include "BAT/BCParameter.h" 00014 00015 // --------------------------------------------------------- 00016 00017 BCParameter::BCParameter() 00018 { 00019 fName = "parameter"; 00020 fLowerLimit = 0.0; 00021 fUpperLimit = 1.0; 00022 fNuisance = 0; 00023 } 00024 00025 // --------------------------------------------------------- 00026 00027 BCParameter::BCParameter(const char * name, double lowerlimit, double upperlimit) 00028 { 00029 BCParameter(); 00030 00031 fName = name; 00032 fLowerLimit = lowerlimit; 00033 fUpperLimit = upperlimit; 00034 } 00035 00036 // --------------------------------------------------------- 00037 00038 BCParameter::BCParameter(const BCParameter & parameter) 00039 { 00040 parameter.Copy(*this); 00041 } 00042 00043 // --------------------------------------------------------- 00044 00045 BCParameter & BCParameter::operator = (const BCParameter & parameter) 00046 { 00047 if (this != ¶meter) 00048 parameter.Copy(* this); 00049 00050 return * this; 00051 } 00052 00053 // --------------------------------------------------------- 00054 00055 BCParameter::~BCParameter() 00056 {} 00057 00058 // --------------------------------------------------------- 00059 00060 void BCParameter::PrintSummary() 00061 { 00062 std::cout 00063 <<" > Parameter : "<< fName << std::endl 00064 <<" Index : "<< fIndex << std::endl 00065 <<" Lower Limit : "<< fLowerLimit << std::endl 00066 <<" Upper Limit : "<< fUpperLimit << std::endl 00067 <<" Nuisance : "; 00068 00069 if(fNuisance) 00070 std::cout<<"Yes"<<std::endl; 00071 else 00072 std::cout<<"No"<<std::endl; 00073 00074 std::cout << std::endl; 00075 } 00076 00077 // --------------------------------------------------------- 00078 00079 void BCParameter::Copy(BCParameter & parameter) const 00080 { 00081 parameter.fName = this -> fName; 00082 parameter.fIndex = this -> fIndex; 00083 parameter.fLowerLimit = this -> fLowerLimit; 00084 parameter.fUpperLimit = this -> fUpperLimit; 00085 parameter.fNuisance = this -> fNuisance; 00086 } 00087 00088 // --------------------------------------------------------- 00089 00090 bool BCParameter::IsAtLimit(double value) 00091 { 00092 if (fLowerLimit == fUpperLimit) 00093 return false; 00094 00095 if ( ( (value-fLowerLimit)*(value-fLowerLimit)/fLowerLimit/fLowerLimit <= 1e-10) || 00096 ( (value-fUpperLimit)*(value-fUpperLimit)/fUpperLimit/fUpperLimit <= 1e-10)) 00097 return true; 00098 else 00099 return false; 00100 } 00101 00102 // ---------------------------------------------------------