switched PFitter to smart pointers.
This commit is contained in:
parent
9ef5c5cac6
commit
5f66baa1e2
@ -285,10 +285,6 @@ PFitter::PFitter(PMsrHandler *runInfo, PRunListCollection *runListCollection, Bo
|
|||||||
fCmdLines = *runInfo->GetMsrCommands();
|
fCmdLines = *runInfo->GetMsrCommands();
|
||||||
|
|
||||||
// init class variables
|
// init class variables
|
||||||
fFitterFcn = nullptr;
|
|
||||||
fFitterFcnDKS = nullptr;
|
|
||||||
fFcnMin = nullptr;
|
|
||||||
|
|
||||||
fScanAll = true;
|
fScanAll = true;
|
||||||
fScanParameter[0] = 0;
|
fScanParameter[0] = 0;
|
||||||
fScanParameter[1] = 0;
|
fScanParameter[1] = 0;
|
||||||
@ -338,7 +334,7 @@ PFitter::PFitter(PMsrHandler *runInfo, PRunListCollection *runListCollection, Bo
|
|||||||
|
|
||||||
// create fit function object depending whether DKS/GPU can be used or not
|
// create fit function object depending whether DKS/GPU can be used or not
|
||||||
if (fDKSReady && (fDKSTag != DKS_CPU_OPENMP)) { // run on the GPU
|
if (fDKSReady && (fDKSTag != DKS_CPU_OPENMP)) { // run on the GPU
|
||||||
fFitterFcnDKS = new PFitterFcnDKS(runListCollection, fUseChi2, fDKSTag, theo);
|
fFitterFcnDKS = std::make_unique<PFitterFcnDKS>(runListCollection, fUseChi2, fDKSTag, theo);
|
||||||
if (!fFitterFcnDKS) {
|
if (!fFitterFcnDKS) {
|
||||||
fIsValid = false;
|
fIsValid = false;
|
||||||
}
|
}
|
||||||
@ -347,7 +343,7 @@ PFitter::PFitter(PMsrHandler *runInfo, PRunListCollection *runListCollection, Bo
|
|||||||
}
|
}
|
||||||
} else { // run on the CPU
|
} else { // run on the CPU
|
||||||
fDKSReady = false; // needed in case dksTag == DKS_CPU_OPENMP
|
fDKSReady = false; // needed in case dksTag == DKS_CPU_OPENMP
|
||||||
fFitterFcn = new PFitterFcn(runListCollection, fUseChi2);
|
fFitterFcn = std::make_unique<PFitterFcn>(runListCollection, fUseChi2);
|
||||||
if (!fFitterFcn) {
|
if (!fFitterFcn) {
|
||||||
fIsValid = false;
|
fIsValid = false;
|
||||||
}
|
}
|
||||||
@ -367,21 +363,6 @@ PFitter::~PFitter()
|
|||||||
fScanData.clear();
|
fScanData.clear();
|
||||||
|
|
||||||
fElapsedTime.clear();
|
fElapsedTime.clear();
|
||||||
|
|
||||||
if (fFcnMin) {
|
|
||||||
delete fFcnMin;
|
|
||||||
fFcnMin = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fFitterFcnDKS) {
|
|
||||||
delete fFitterFcnDKS;
|
|
||||||
fFitterFcnDKS = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fFitterFcn) {
|
|
||||||
delete fFitterFcn;
|
|
||||||
fFitterFcn = nullptr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
@ -1688,11 +1669,11 @@ Bool_t PFitter::ExecuteContours()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ROOT::Minuit2::FCNBase *fcn = 0;
|
ROOT::Minuit2::FCNBase *fcn = nullptr;
|
||||||
if (fDKSReady)
|
if (fDKSReady)
|
||||||
fcn = fFitterFcnDKS;
|
fcn = fFitterFcnDKS.get();
|
||||||
else
|
else
|
||||||
fcn = fFitterFcn;
|
fcn = fFitterFcn.get();
|
||||||
|
|
||||||
ROOT::Minuit2::MnContours contours((*fcn), *fFcnMin);
|
ROOT::Minuit2::MnContours contours((*fcn), *fFcnMin);
|
||||||
|
|
||||||
@ -1832,11 +1813,11 @@ Bool_t PFitter::ExecuteHesse()
|
|||||||
|
|
||||||
// call hesse
|
// call hesse
|
||||||
Double_t start=0.0, end=0.0;
|
Double_t start=0.0, end=0.0;
|
||||||
ROOT::Minuit2::FCNBase *fcn = 0;
|
ROOT::Minuit2::FCNBase *fcn = nullptr;
|
||||||
if (fDKSReady)
|
if (fDKSReady)
|
||||||
fcn = fFitterFcnDKS;
|
fcn = fFitterFcnDKS.get();
|
||||||
else
|
else
|
||||||
fcn = fFitterFcn;
|
fcn = fFitterFcn.get();
|
||||||
start=MilliTime();
|
start=MilliTime();
|
||||||
ROOT::Minuit2::MnUserParameterState mnState = hesse((*fcn), fMnUserParams, maxfcn);
|
ROOT::Minuit2::MnUserParameterState mnState = hesse((*fcn), fMnUserParams, maxfcn);
|
||||||
end=MilliTime();
|
end=MilliTime();
|
||||||
@ -1880,11 +1861,11 @@ Bool_t PFitter::ExecuteMigrad()
|
|||||||
|
|
||||||
// create migrad object
|
// create migrad object
|
||||||
// strategy is by default = 'default'
|
// strategy is by default = 'default'
|
||||||
ROOT::Minuit2::FCNBase *fcn = 0;
|
ROOT::Minuit2::FCNBase *fcn = nullptr;
|
||||||
if (fDKSReady)
|
if (fDKSReady)
|
||||||
fcn = fFitterFcnDKS;
|
fcn = fFitterFcnDKS.get();
|
||||||
else
|
else
|
||||||
fcn = fFitterFcn;
|
fcn = fFitterFcn.get();
|
||||||
ROOT::Minuit2::MnMigrad migrad((*fcn), fMnUserParams, fStrategy);
|
ROOT::Minuit2::MnMigrad migrad((*fcn), fMnUserParams, fStrategy);
|
||||||
|
|
||||||
// minimize
|
// minimize
|
||||||
@ -1908,11 +1889,7 @@ Bool_t PFitter::ExecuteMigrad()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// keep FunctionMinimum object
|
// keep FunctionMinimum object
|
||||||
if (fFcnMin) { // fFcnMin exist hence clean up first
|
fFcnMin.reset(new ROOT::Minuit2::FunctionMinimum(min));
|
||||||
delete fFcnMin;
|
|
||||||
fFcnMin = nullptr;
|
|
||||||
}
|
|
||||||
fFcnMin = new ROOT::Minuit2::FunctionMinimum(min);
|
|
||||||
|
|
||||||
// keep user parameters
|
// keep user parameters
|
||||||
if (fFcnMin)
|
if (fFcnMin)
|
||||||
@ -1969,11 +1946,11 @@ Bool_t PFitter::ExecuteMinimize()
|
|||||||
|
|
||||||
// create minimizer object
|
// create minimizer object
|
||||||
// strategy is by default = 'default'
|
// strategy is by default = 'default'
|
||||||
ROOT::Minuit2::FCNBase *fcn = 0;
|
ROOT::Minuit2::FCNBase *fcn = nullptr;
|
||||||
if (fDKSReady)
|
if (fDKSReady)
|
||||||
fcn = fFitterFcnDKS;
|
fcn = fFitterFcnDKS.get();
|
||||||
else
|
else
|
||||||
fcn = fFitterFcn;
|
fcn = fFitterFcn.get();
|
||||||
ROOT::Minuit2::MnMinimize minimize((*fcn), fMnUserParams, fStrategy);
|
ROOT::Minuit2::MnMinimize minimize((*fcn), fMnUserParams, fStrategy);
|
||||||
|
|
||||||
// minimize
|
// minimize
|
||||||
@ -1998,11 +1975,7 @@ Bool_t PFitter::ExecuteMinimize()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// keep FunctionMinimum object
|
// keep FunctionMinimum object
|
||||||
if (fFcnMin) { // fFcnMin exist hence clean up first
|
fFcnMin.reset(new ROOT::Minuit2::FunctionMinimum(min));
|
||||||
delete fFcnMin;
|
|
||||||
fFcnMin = nullptr;
|
|
||||||
}
|
|
||||||
fFcnMin = new ROOT::Minuit2::FunctionMinimum(min);
|
|
||||||
|
|
||||||
// keep user parameters
|
// keep user parameters
|
||||||
if (fFcnMin)
|
if (fFcnMin)
|
||||||
@ -2073,11 +2046,11 @@ Bool_t PFitter::ExecuteMinos()
|
|||||||
|
|
||||||
// make minos analysis
|
// make minos analysis
|
||||||
Double_t start=0.0, end=0.0;
|
Double_t start=0.0, end=0.0;
|
||||||
ROOT::Minuit2::FCNBase *fcn = 0;
|
ROOT::Minuit2::FCNBase *fcn = nullptr;
|
||||||
if (fDKSReady)
|
if (fDKSReady)
|
||||||
fcn = fFitterFcnDKS;
|
fcn = fFitterFcnDKS.get();
|
||||||
else
|
else
|
||||||
fcn = fFitterFcn;
|
fcn = fFitterFcn.get();
|
||||||
start=MilliTime();
|
start=MilliTime();
|
||||||
ROOT::Minuit2::MnMinos minos((*fcn), (*fFcnMin));
|
ROOT::Minuit2::MnMinos minos((*fcn), (*fFcnMin));
|
||||||
|
|
||||||
@ -2273,11 +2246,11 @@ Bool_t PFitter::ExecuteScan()
|
|||||||
{
|
{
|
||||||
std::cout << ">> PFitter::ExecuteScan(): will call scan ..." << std::endl;
|
std::cout << ">> PFitter::ExecuteScan(): will call scan ..." << std::endl;
|
||||||
|
|
||||||
ROOT::Minuit2::FCNBase *fcn = 0;
|
ROOT::Minuit2::FCNBase *fcn = nullptr;
|
||||||
if (fDKSReady)
|
if (fDKSReady)
|
||||||
fcn = fFitterFcnDKS;
|
fcn = fFitterFcnDKS.get();
|
||||||
else
|
else
|
||||||
fcn = fFitterFcn;
|
fcn = fFitterFcn.get();
|
||||||
ROOT::Minuit2::MnScan scan((*fcn), fMnUserParams);
|
ROOT::Minuit2::MnScan scan((*fcn), fMnUserParams);
|
||||||
|
|
||||||
if (fScanAll) { // not clear at the moment what to be done here
|
if (fScanAll) { // not clear at the moment what to be done here
|
||||||
@ -2741,11 +2714,11 @@ Bool_t PFitter::ExecuteSimplex()
|
|||||||
|
|
||||||
// create minimizer object
|
// create minimizer object
|
||||||
// strategy is by default = 'default'
|
// strategy is by default = 'default'
|
||||||
ROOT::Minuit2::FCNBase *fcn = 0;
|
ROOT::Minuit2::FCNBase *fcn = nullptr;
|
||||||
if (fDKSReady)
|
if (fDKSReady)
|
||||||
fcn = fFitterFcnDKS;
|
fcn = fFitterFcnDKS.get();
|
||||||
else
|
else
|
||||||
fcn = fFitterFcn;
|
fcn = fFitterFcn.get();
|
||||||
ROOT::Minuit2::MnSimplex simplex((*fcn), fMnUserParams, fStrategy);
|
ROOT::Minuit2::MnSimplex simplex((*fcn), fMnUserParams, fStrategy);
|
||||||
|
|
||||||
// minimize
|
// minimize
|
||||||
@ -2769,11 +2742,7 @@ Bool_t PFitter::ExecuteSimplex()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// keep FunctionMinimum object
|
// keep FunctionMinimum object
|
||||||
if (fFcnMin) { // fFcnMin exist hence clean up first
|
fFcnMin.reset(new ROOT::Minuit2::FunctionMinimum(min));
|
||||||
delete fFcnMin;
|
|
||||||
fFcnMin = nullptr;
|
|
||||||
}
|
|
||||||
fFcnMin = new ROOT::Minuit2::FunctionMinimum(min);
|
|
||||||
|
|
||||||
// keep user parameters
|
// keep user parameters
|
||||||
if (fFcnMin)
|
if (fFcnMin)
|
||||||
|
@ -30,6 +30,8 @@
|
|||||||
#ifndef _PFITTER_H_
|
#ifndef _PFITTER_H_
|
||||||
#define _PFITTER_H_
|
#define _PFITTER_H_
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "TString.h"
|
#include "TString.h"
|
||||||
|
|
||||||
#include "Minuit2/MnUserParameters.h"
|
#include "Minuit2/MnUserParameters.h"
|
||||||
@ -140,11 +142,11 @@ class PFitter
|
|||||||
PMsrLines fCmdLines; ///< all the Minuit commands from the msr-file
|
PMsrLines fCmdLines; ///< all the Minuit commands from the msr-file
|
||||||
PIntPairVector fCmdList; ///< command list, first=cmd, second=cmd line index
|
PIntPairVector fCmdList; ///< command list, first=cmd, second=cmd line index
|
||||||
|
|
||||||
PFitterFcn *fFitterFcn; ///< pointer to the fitter function object
|
std::unique_ptr<PFitterFcn> fFitterFcn; ///< pointer to the fitter function object
|
||||||
PFitterFcnDKS *fFitterFcnDKS; ///< pointer to the DKS fitter function object
|
std::unique_ptr<PFitterFcnDKS> fFitterFcnDKS; ///< pointer to the DKS fitter function object
|
||||||
|
|
||||||
ROOT::Minuit2::MnUserParameters fMnUserParams; ///< minuit2 input parameter list
|
ROOT::Minuit2::MnUserParameters fMnUserParams; ///< minuit2 input parameter list
|
||||||
ROOT::Minuit2::FunctionMinimum *fFcnMin; ///< function minimum object
|
std::unique_ptr<ROOT::Minuit2::FunctionMinimum> fFcnMin; ///< function minimum object
|
||||||
|
|
||||||
// minuit2 scan/contours command relate variables (see MnScan/MnContours in the minuit2 user manual)
|
// minuit2 scan/contours command relate variables (see MnScan/MnContours in the minuit2 user manual)
|
||||||
Bool_t fScanAll; ///< flag. false: single parameter scan, true: not implemented yet (see MnScan/MnContours in the minuit2 user manual)
|
Bool_t fScanAll; ///< flag. false: single parameter scan, true: not implemented yet (see MnScan/MnContours in the minuit2 user manual)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user