MINT2
Neg2LLSum.cpp
Go to the documentation of this file.
1 // author: Jonas Rademacker (Jonas.Rademacker@bristol.ac.uk)
2 // status: Mon 9 Feb 2009 19:17:56 GMT
3 #include "Mint/Neg2LLSum.h"
4 #include "Mint/IMinimisable.h"
6 #include "Mint/NamedParameter.h"
7 
8 
9 using namespace std;
10 using namespace MINT;
11 
12 Neg2LLSum::Neg2LLSum(MinuitParameterSet* mps)
13  : Minimisable(mps){}
14 
15 Neg2LLSum::Neg2LLSum(const std::vector<IMinimisable*>& likList_in
16  , MinuitParameterSet* mps)
17  : Minimisable(mps)
18  , _likList(likList_in)
19 {}
20 
22  , MinuitParameterSet* mps)
23  : Minimisable(mps)
24 {
25  add(ll_1);
26 }
28  , MinuitParameterSet* mps)
29  : Minimisable(mps)
30 {
31  add(ll_1); add(ll_2);
32 }
34  , IMinimisable* ll_3
35  , MinuitParameterSet* mps)
36  : Minimisable(mps)
37 {
38  add(ll_1); add(ll_2); add(ll_3);
39 }
41  , IMinimisable* ll_3, IMinimisable* ll_4
42  , MinuitParameterSet* mps)
43  : Minimisable(mps)
44 {
45  add(ll_1); add(ll_2); add(ll_3); add(ll_4);
46 }
48  , IMinimisable* ll_3, IMinimisable* ll_4
49  , IMinimisable* ll_5
50  , MinuitParameterSet* mps)
51  : Minimisable(mps)
52 {
53  add(ll_1); add(ll_2); add(ll_3); add(ll_4); add(ll_5);
54 }
55 
57  , IMinimisable* ll_3, IMinimisable* ll_4
58  , IMinimisable* ll_5, IMinimisable* ll_6
59  , MinuitParameterSet* mps)
60  : Minimisable(mps)
61 {
62  add(ll_1); add(ll_2); add(ll_3); add(ll_4); add(ll_5); add(ll_6);
63 }
64 
66  , IMinimisable* ll_3, IMinimisable* ll_4
67  , IMinimisable* ll_5, IMinimisable* ll_6
68  , IMinimisable* ll_7
69  , MinuitParameterSet* mps)
70  : Minimisable(mps)
71 {
72  add(ll_1); add(ll_2); add(ll_3); add(ll_4); add(ll_5); add(ll_6);
73  add(ll_7);
74 }
76  , IMinimisable* ll_3, IMinimisable* ll_4
77  , IMinimisable* ll_5, IMinimisable* ll_6
78  , IMinimisable* ll_7, IMinimisable* ll_8
79  , MinuitParameterSet* mps)
80  : Minimisable(mps)
81 {
82  add(ll_1); add(ll_2); add(ll_3); add(ll_4); add(ll_5); add(ll_6);
83  add(ll_7); add(ll_8);
84 }
85 
87  , IMinimisable* ll_3, IMinimisable* ll_4
88  , IMinimisable* ll_5, IMinimisable* ll_6
89  , IMinimisable* ll_7, IMinimisable* ll_8
90  , IMinimisable* ll_9
91  , MinuitParameterSet* mps)
92  : Minimisable(mps)
93 {
94  add(ll_1); add(ll_2); add(ll_3); add(ll_4); add(ll_5); add(ll_6);
95  add(ll_7); add(ll_8); add(ll_9);
96 }
97 
99  , IMinimisable* ll_3, IMinimisable* ll_4
100  , IMinimisable* ll_5, IMinimisable* ll_6
101  , IMinimisable* ll_7, IMinimisable* ll_8
102  , IMinimisable* ll_9, IMinimisable* ll_10
103  , MinuitParameterSet* mps)
104  : Minimisable(mps)
105 {
106  add(ll_1); add(ll_2); add(ll_3); add(ll_4); add(ll_5); add(ll_6);
107  add(ll_7); add(ll_8); add(ll_9); add(ll_10);
108 }
109 
111  : IMinimisable()
112  , Minimisable(other)
113  , _likList(other._likList)
114 {}
115 
116 
118  if(0 == llPtr){
119  std::cout << "ERROR in Neg2LLSum::add: trying to add null pointer"
120  << std::endl;
121  return false;
122  }
123  _likList.push_back(llPtr);
124  return true;
125 }
126 
128  for(unsigned int i=0; i < _likList.size(); i++){
129  _likList[i]->beginFit();
130  }
131 }
133  for(unsigned int i=0; i < _likList.size(); i++){
134  _likList[i]->parametersChanged();
135  }
136 }
137 
139  for(unsigned int i=0; i < _likList.size(); i++){
140  _likList[i]->endFit();
141  }
142 }
143 
144 
146  double sum=0;
147  for(unsigned int i=0; i < _likList.size(); i++){
148  sum += _likList[i]->getVal();
149  }
150  return sum;
151 }
152 
154 
155  cout << "addConstraints for " << getParSet()->size() << " paramaters" << endl;
156 
157 
158  for(unsigned int i=0;i< getParSet()->size();i++){
159  string name_i= getParSet()->getParPtr(i)->name();
160  cout << "paramater " << i << " : " << name_i << endl;
161  NamedParameter<double> constrain(("Constrain_"+name_i).c_str(),-1,-1,NamedParameterBase::QUIET);
162  //cout << constrain << endl;
163  if(constrain.getVal(0)>0 && constrain.getVal(1)>0){
164  IMinimisable* gaussConstraint = new Neg2LLConstraint(getParSet()->getParPtr(i),constrain.getVal(0),constrain.getVal(1),getParSet());
165  add(gaussConstraint);
166  cout << "Added gaussian constraint to parameter: " << name_i
167  << " with initial value = " << (double) *(getParSet()->getParPtr(i))
168  << " and mean = " << constrain.getVal(0)
169  << " and sigma = " << constrain.getVal(1) << endl ;
170  cout << "neg2LL value = " << gaussConstraint->getVal() << endl;
171 
172  }
173  }
174 
175  return true;
176 }
177 
178 void Neg2LLSum::Gradient(vector<double>& grad){
179 
180  std::vector<std::vector<double> > gradVec;
181 
182  for(unsigned int i=0; i < _likList.size(); i++){
183 
184  std::vector<double> grad_tmp(this->getParSet()->size());
185  for(unsigned int j=0; j < grad_tmp.size(); j++) grad_tmp[j]= 0.;
186 
187  _likList[i]->Gradient(grad_tmp);
188 
189  std::vector<double> tmp;
190 
191  for(unsigned int j=0; j < this->getParSet()->size(); j++){
192  tmp.push_back(grad_tmp[j]);
193  }
194 
195  gradVec.push_back(tmp);
196  }
197 
198  for(unsigned int i=0;i< grad.size();i++){
199  grad.at(i)=0.;
200  for(unsigned int j=0; j < _likList.size(); j++){
201  grad.at(i) += gradVec.at(j).at(i);
202  }
203  }
204 }
205 
207  bool b= true;
208  for(unsigned int i=0; i < _likList.size(); i++){
209  b = b && _likList[i]->useAnalyticGradient();
210  }
211  return b;
212 }
213 
214 void Neg2LLSum::setUseAnalyticGradient(bool useAnalyticGradient) {
215  for(unsigned int j=0; j < _likList.size(); j++){
216  _likList[j]->setUseAnalyticGradient(useAnalyticGradient);
217  }
218 }
219 
220 //
virtual void Gradient(std::vector< double > &grad)
Definition: Neg2LLSum.cpp:178
bool addConstraints()
Definition: Neg2LLSum.cpp:153
Neg2LLSum(MinuitParameterSet *mps=0)
Definition: Neg2LLSum.cpp:12
IMinuitParameter * getParPtr(unsigned int i)
virtual void parametersChanged()
Definition: Neg2LLSum.cpp:132
unsigned int size() const
virtual void beginFit()
Definition: Neg2LLSum.cpp:127
virtual const std::string & name() const =0
double getVal()
Definition: Neg2LLSum.cpp:145
bool add(IMinimisable *llPtr)
Definition: Neg2LLSum.cpp:117
virtual void setUseAnalyticGradient(bool useAnalyticGradient)
Definition: Neg2LLSum.cpp:214
MinuitParameterSet * getParSet()
Definition: Minimisable.cpp:25
virtual double getVal()=0
virtual const T & getVal(int i=0) const
std::vector< IMinimisable * > _likList
Definition: Neg2LLSum.h:17
virtual void endFit()
Definition: Neg2LLSum.cpp:138
virtual bool useAnalyticGradient()
Definition: Neg2LLSum.cpp:206