52 typedef list<MinuitParameter*>::iterator
ListIter;
58 m_minimizationManager( aManager ),
59 m_fitInProgress( false )
68 for (
ParamIter parameter = begin(); parameter != end(); ++parameter )
70 int minuitId = parameter->minuitId();
74 parameter->setValue( minuitValues[minuitId] );
75 parameter->invalidateErrors();
82 if ( m_fitInProgress ||
89 for (
ParamIter parameter = begin(); parameter != end(); ++parameter )
91 int minuitId = parameter->minuitId();
93 double downwardsError;
94 double parabolicError;
95 double correlationCoefficient;
98 theMinimizer.
mnerrs( minuitId, upwardsError, downwardsError,
99 parabolicError, correlationCoefficient );
100 parameter->setAsymmetricErrors( std::pair<double,double>(downwardsError,
102 parameter->setGlobalCorrelation( correlationCoefficient );
103 parameter->validateErrors();
106 parameter->setError( parabolicError,
true );
116 m_numFloatingPars = 0;
119 for (
ParamIter parameter = begin(); parameter != end(); ++parameter )
121 int minuitId = parameter->minuitId();
129 int minuitVariableId;
130 theMinimizer.
mnpout( minuitId, name, value, error,
131 lowerLimit, upperLimit, minuitVariableId );
134 if ( value != parameter->value() )
136 double commandParameters[] = {
static_cast<double>(minuitId), parameter->value() };
138 theMinimizer.
mnexcm(
"SET PAR", commandParameters, 2, status );
143 if ( ! parameter->floating() ) {
144 cout <<
"Need to fix parameter " << minuitId <<
" MinuitVariableId = " 145 << minuitVariableId << endl;
146 if ( minuitVariableId > 0 ) {
158 (lowerLimit != parameter->lowerBound()) ||
159 (upperLimit != parameter->upperBound());
163 string limCommand =
"SET LIM";
164 if ( ! parameter->bounded() )
166 double commandParameter = minuitId;
167 theMinimizer.
mnexcm( limCommand, &commandParameter, 1, status );
171 double commandParameters[] = {
static_cast<double>(minuitId), parameter->lowerBound(),
172 parameter->upperBound()};
173 theMinimizer.
mnexcm( limCommand, commandParameters, 3, status );
186 unsigned int newParameterMinuitId = size();
187 ++newParameterMinuitId;
195 if ( size() && ! (back()->minuitId() == size()) )
197 newParameterMinuitId = 1;
198 insertPosition = begin();
199 for (
ParamIter iter = begin(); iter != end(); ++iter )
201 if ( newParameterMinuitId == iter->minuitId() )
203 ++newParameterMinuitId;
209 insert( insertPosition, newParameter );
214 double lowerBound = 0;
215 double upperBound = 0;
222 double initialStepSize = 0.1 * fabs(newParameter->
value());
224 if ( initialStepSize == 0 )
226 initialStepSize = 0.1;
228 if ( ( (newParameter->
value()-initialStepSize) <= lowerBound ) ||
229 ( (newParameter->
value()+initialStepSize) >= upperBound ) )
231 initialStepSize *= 0.1;
235 newParameter->
name(),
236 newParameter->
value(),
244 vector< vector< double > >
249 double* emat = (
double*)malloc( m_numFloatingPars * m_numFloatingPars *
254 vector< vector< double > > errorMatrix;
256 for(
unsigned int i = 0; i < m_numFloatingPars; ++i ){
258 errorMatrix.push_back( vector< double >( 0 ) );
259 for(
unsigned int j = 0; j < m_numFloatingPars; ++j ){
261 errorMatrix[i].push_back( emat[i+j*m_numFloatingPars] );
270 vector< vector< double > >
275 vector< vector< double > > corrMatrix = covMatrix;
277 for(
unsigned int i = 0; i < corrMatrix.size(); ++i ){
278 for(
unsigned int j = 0; j < corrMatrix[i].size(); ++j ){
280 corrMatrix[i][j] /=
sqrt( covMatrix[i][i] * covMatrix[j][j] );
289 remove( aParameter );
290 cout <<
" Warning: UpRootMinuit class does not yet support parameter removal!" << endl;
297 unsigned int maxLength = 0;
298 for (
ConstListIter itParam = begin(); itParam != end(); ++itParam )
300 maxLength = (maxLength < (*itParam)->name().size()) ?
301 (*itParam)->name().size() : maxLength;
303 aStream <<
"\n\n" << setw(maxLength) <<
"name" << setw(9)
304 <<
"value" << setw(9) <<
"error" 305 << setw(9) <<
"-error" << setw(9) <<
"+error" <<
'\n';
306 for (
ConstListIter itParam = begin(); itParam != end(); ++itParam )
308 aStream << **itParam <<
'\n';
double lowerBound() const
const std::vector< double > & minuitWorkingValues() const
virtual Int_urt FixParameter(Int_urt parNo)
void removeParameter(MinuitParameter *aParameter)
virtual void mnemat(Double_urt *emat, Int_urt ndim)
virtual void mnpout(Int_urt iuext, std::string &chnam, Double_urt &val, Double_urt &err, Double_urt &xlolim, Double_urt &xuplim, Int_urt &iuint) const
MinuitParameterManager(MinuitMinimizationManager &aManager)
virtual void mnexcm(const std::string &command, Double_urt *plist, Int_urt llist, Int_urt &ierflg)
virtual Int_urt DefineParameter(Int_urt parNo, const std::string &name, Double_urt initVal, Double_urt initErr, Double_urt lowerLimit, Double_urt upperLimit)
std::ostream & dump(std::ostream &s) const
MIPointerListIterator< ListIter, MinuitParameter, MinuitParameter > ParamIter
vector< vector< double > > correlationMatrix()
void setMinuitId(unsigned int minuitId)
double upperBound() const
list< MinuitParameter * >::iterator ListIter
virtual void mnerrs(Int_urt number, Double_urt &eplus, Double_urt &eminus, Double_urt &eparab, Double_urt &gcc)
list< MinuitParameter * >::const_iterator ConstListIter
const std::string & name() const
vector< vector< double > > covarianceMatrix()
unsigned int minuitId() const
URMinuit & minuitMinimizer()
~MinuitParameterManager()
bool registerParameter(MinuitParameter *newParameter)