00001 /* 00002 * Copyright (C) 2008-2010, 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.; 00021 fUpperLimit = 1.; 00022 fNuisance = 0; 00023 } 00024 00025 // --------------------------------------------------------- 00026 00027 BCParameter::BCParameter(const char * name, double lowerlimit, double upperlimit) 00028 { 00029 fName = "parameter"; 00030 fLowerLimit = 0.; 00031 fUpperLimit = 1.; 00032 fNuisance = 0; 00033 00034 fName = name; 00035 fLowerLimit = lowerlimit; 00036 fUpperLimit = upperlimit; 00037 } 00038 00039 // --------------------------------------------------------- 00040 00041 BCParameter::BCParameter(const BCParameter & parameter) 00042 { 00043 parameter.Copy(*this); 00044 } 00045 00046 // --------------------------------------------------------- 00047 00048 BCParameter & BCParameter::operator = (const BCParameter & parameter) 00049 { 00050 if (this != ¶meter) 00051 parameter.Copy(* this); 00052 00053 return * this; 00054 } 00055 00056 // --------------------------------------------------------- 00057 00058 BCParameter::~BCParameter() 00059 {} 00060 00061 // --------------------------------------------------------- 00062 00063 void BCParameter::PrintSummary() 00064 { 00065 std::cout 00066 <<" > Parameter : "<< fName << std::endl 00067 <<" Index : "<< fIndex << std::endl 00068 <<" Lower Limit : "<< fLowerLimit << std::endl 00069 <<" Upper Limit : "<< fUpperLimit << std::endl 00070 <<" Nuisance : "; 00071 00072 if(fNuisance) 00073 std::cout<<"Yes"<<std::endl; 00074 else 00075 std::cout<<"No"<<std::endl; 00076 00077 std::cout << std::endl; 00078 } 00079 00080 // --------------------------------------------------------- 00081 00082 void BCParameter::Copy(BCParameter & parameter) const 00083 { 00084 parameter.fName = this -> fName; 00085 parameter.fIndex = this -> fIndex; 00086 parameter.fLowerLimit = this -> fLowerLimit; 00087 parameter.fUpperLimit = this -> fUpperLimit; 00088 parameter.fNuisance = this -> fNuisance; 00089 } 00090 00091 // --------------------------------------------------------- 00092 00093 bool BCParameter::IsAtLimit(double value) 00094 { 00095 if (fLowerLimit == fUpperLimit) 00096 return false; 00097 00098 if ( ( (value-fLowerLimit)*(value-fLowerLimit)/fLowerLimit/fLowerLimit <= 1e-10) || 00099 ( (value-fUpperLimit)*(value-fUpperLimit)/fUpperLimit/fUpperLimit <= 1e-10)) 00100 return true; 00101 else 00102 return false; 00103 } 00104 00105 // ---------------------------------------------------------