Skip to content

Commit 379afc0

Browse files
committed
[math] remove copy constr and assign operator for TVirtualFitter
And all derived classes. Provided implementation was wrong while include pointer copy for fCache and fMethodCall Plus copy/assign was forbidden for TFitter Do it generally for all fitter classes
1 parent d857e8a commit 379afc0

File tree

6 files changed

+11
-182
lines changed

6 files changed

+11
-182
lines changed

hist/hist/inc/TBackCompFitter.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,12 @@ namespace ROOT {
3636

3737
class TBackCompFitter : public TVirtualFitter {
3838

39-
public:
39+
private:
4040

41+
TBackCompFitter(const TBackCompFitter &) = delete;
42+
TBackCompFitter& operator=(const TBackCompFitter &) = delete;
4143

44+
public:
4245

4346
TBackCompFitter();
4447

@@ -47,8 +50,6 @@ class TBackCompFitter : public TVirtualFitter {
4750

4851
~TBackCompFitter() override;
4952

50-
public:
51-
5253
enum EStatusBits {
5354
kCanDeleteLast = BIT(9) // object can be deleted before creating a new one
5455
};

hist/hist/inc/TVirtualFitter.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ class TVirtualFitter : public TNamed {
5252
// static Double_t fgPrecision; //maximum precision
5353
// static TString fgDefault; //name of the default fitter ("Minuit","Fumili",etc)
5454

55-
TVirtualFitter(const TVirtualFitter& tvf);
56-
TVirtualFitter& operator=(const TVirtualFitter& tvf);
55+
TVirtualFitter(const TVirtualFitter &) = delete;
56+
TVirtualFitter& operator=(const TVirtualFitter &) = delete;
5757

5858
public:
5959
TVirtualFitter();

hist/hist/src/TVirtualFitter.cxx

-49
Original file line numberDiff line numberDiff line change
@@ -87,55 +87,6 @@ TVirtualFitter::TVirtualFitter() :
8787
{
8888
}
8989

90-
////////////////////////////////////////////////////////////////////////////////
91-
///copy constructor
92-
93-
TVirtualFitter::TVirtualFitter(const TVirtualFitter& tvf) :
94-
TNamed(tvf),
95-
fOption(tvf.fOption),
96-
fXfirst(tvf.fXfirst),
97-
fXlast(tvf.fXlast),
98-
fYfirst(tvf.fYfirst),
99-
fYlast(tvf.fYlast),
100-
fZfirst(tvf.fZfirst),
101-
fZlast(tvf.fZlast),
102-
fNpoints(tvf.fNpoints),
103-
fPointSize(tvf.fPointSize),
104-
fCacheSize(tvf.fCacheSize),
105-
fCache(tvf.fCache),
106-
fObjectFit(tvf.fObjectFit),
107-
fUserFunc(tvf.fUserFunc),
108-
fMethodCall(tvf.fMethodCall),
109-
fFCN(tvf.fFCN)
110-
{
111-
}
112-
113-
////////////////////////////////////////////////////////////////////////////////
114-
///assignment operator
115-
116-
TVirtualFitter& TVirtualFitter::operator=(const TVirtualFitter& tvf)
117-
{
118-
if(this!=&tvf) {
119-
TNamed::operator=(tvf);
120-
fOption=tvf.fOption;
121-
fXfirst=tvf.fXfirst;
122-
fXlast=tvf.fXlast;
123-
fYfirst=tvf.fYfirst;
124-
fYlast=tvf.fYlast;
125-
fZfirst=tvf.fZfirst;
126-
fZlast=tvf.fZlast;
127-
fNpoints=tvf.fNpoints;
128-
fPointSize=tvf.fPointSize;
129-
fCacheSize=tvf.fCacheSize;
130-
fCache=tvf.fCache;
131-
fObjectFit=tvf.fObjectFit;
132-
fUserFunc=tvf.fUserFunc;
133-
fMethodCall=tvf.fMethodCall;
134-
fFCN=tvf.fFCN;
135-
}
136-
return *this;
137-
}
138-
13990
////////////////////////////////////////////////////////////////////////////////
14091
/// Cleanup virtual fitter.
14192

math/minuit/inc/TFitter.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class TFitter : public TVirtualFitter {
2424
Double_t *fSumLog; //Sum of logs (array of fNlog elements)
2525
TMinuit *fMinuit; //pointer to the TMinuit object
2626

27-
TFitter(const TFitter&); // Not implemented
28-
TFitter& operator=(const TFitter&); // Not implemented
27+
TFitter(const TFitter &) = delete;
28+
TFitter& operator=(const TFitter &) = delete;
2929

3030
public:
3131
TFitter(Int_t maxpar = 25);

math/minuit/inc/TLinearFitter.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -210,15 +210,16 @@ class TLinearFitter: public TVirtualFitter {
210210
Double_t CStep(Int_t step, Int_t h, Double_t *residuals, Int_t *index, Int_t *subdat, Int_t start, Int_t end);
211211
Bool_t Linf();
212212

213+
TLinearFitter(const TLinearFitter &) = delete;
214+
TLinearFitter& operator=(const TLinearFitter &) = delete;
215+
213216
public:
214217
TLinearFitter();
215218
TLinearFitter(Int_t ndim, const char *formula, Option_t *opt="D");
216219
TLinearFitter(Int_t ndim);
217220
TLinearFitter(TFormula *function, Option_t *opt="D");
218-
TLinearFitter(const TLinearFitter& tlf);
219221
~TLinearFitter() override;
220222

221-
TLinearFitter& operator=(const TLinearFitter& tlf);
222223
virtual void Add(TLinearFitter *tlf);
223224
virtual void AddPoint(Double_t *x, Double_t y, Double_t e=1);
224225
virtual void AddTempMatrices();

math/minuit/src/TLinearFitter.cxx

-124
Original file line numberDiff line numberDiff line change
@@ -344,61 +344,6 @@ TLinearFitter::TLinearFitter(TFormula *function, Option_t *opt)
344344
SetFormula(function);
345345
}
346346

347-
////////////////////////////////////////////////////////////////////////////////
348-
/// Copy ctor
349-
350-
TLinearFitter::TLinearFitter(const TLinearFitter& tlf) :
351-
TVirtualFitter(tlf),
352-
fParams(tlf.fParams),
353-
fParCovar(tlf.fParCovar),
354-
fTValues(tlf.fTValues),
355-
fParSign(tlf.fParSign),
356-
fDesign(tlf.fDesign),
357-
fDesignTemp(tlf.fDesignTemp),
358-
fDesignTemp2(tlf.fDesignTemp2),
359-
fDesignTemp3(tlf.fDesignTemp3),
360-
fAtb(tlf.fAtb),
361-
fAtbTemp(tlf.fAtbTemp),
362-
fAtbTemp2(tlf.fAtbTemp2),
363-
fAtbTemp3(tlf.fAtbTemp3),
364-
fFunctions( * (TObjArray *)tlf.fFunctions.Clone()),
365-
fY(tlf.fY),
366-
fY2(tlf.fY2),
367-
fY2Temp(tlf.fY2Temp),
368-
fX(tlf.fX),
369-
fE(tlf.fE),
370-
fInputFunction(tlf.fInputFunction),
371-
fVal(),
372-
fNpoints(tlf.fNpoints),
373-
fNfunctions(tlf.fNfunctions),
374-
fFormulaSize(tlf.fFormulaSize),
375-
fNdim(tlf.fNdim),
376-
fNfixed(tlf.fNfixed),
377-
fSpecial(tlf.fSpecial),
378-
fFormula(nullptr),
379-
fIsSet(tlf.fIsSet),
380-
fStoreData(tlf.fStoreData),
381-
fChisquare(tlf.fChisquare),
382-
fH(tlf.fH),
383-
fRobust(tlf.fRobust),
384-
fFitsample(tlf.fFitsample),
385-
fFixedParams(nullptr)
386-
{
387-
// make a deep copy of managed objects
388-
// fFormula, fFixedParams and fFunctions
389-
390-
if ( tlf.fFixedParams && fNfixed > 0 ) {
391-
fFixedParams=new Bool_t[fNfixed];
392-
for(Int_t i=0; i<fNfixed; ++i)
393-
fFixedParams[i]=tlf.fFixedParams[i];
394-
}
395-
if (tlf.fFormula) {
396-
fFormula = new char[fFormulaSize+1];
397-
strlcpy(fFormula,tlf.fFormula,fFormulaSize+1);
398-
}
399-
400-
}
401-
402347

403348
////////////////////////////////////////////////////////////////////////////////
404349
/// Linear fitter cleanup.
@@ -420,75 +365,6 @@ TLinearFitter::~TLinearFitter()
420365

421366
}
422367

423-
////////////////////////////////////////////////////////////////////////////////
424-
/// Assignment operator
425-
426-
TLinearFitter& TLinearFitter::operator=(const TLinearFitter& tlf)
427-
{
428-
if(this!=&tlf) {
429-
430-
TVirtualFitter::operator=(tlf);
431-
fParams.ResizeTo(tlf.fParams); fParams=tlf.fParams;
432-
fParCovar.ResizeTo(tlf.fParCovar); fParCovar=tlf.fParCovar;
433-
fTValues.ResizeTo(tlf.fTValues); fTValues=tlf.fTValues;
434-
fParSign.ResizeTo(tlf.fParSign); fParSign=tlf.fParSign;
435-
fDesign.ResizeTo(tlf.fDesign); fDesign=tlf.fDesign;
436-
fDesignTemp.ResizeTo(tlf.fDesignTemp); fDesignTemp=tlf.fDesignTemp;
437-
fDesignTemp2.ResizeTo(tlf.fDesignTemp2); fDesignTemp2=tlf.fDesignTemp2;
438-
fDesignTemp3.ResizeTo(tlf.fDesignTemp3); fDesignTemp3=tlf.fDesignTemp3;
439-
440-
fAtb.ResizeTo(tlf.fAtb); fAtb=tlf.fAtb;
441-
fAtbTemp.ResizeTo(tlf.fAtbTemp); fAtbTemp=tlf.fAtbTemp;
442-
fAtbTemp2.ResizeTo(tlf.fAtbTemp2); fAtbTemp2=tlf.fAtbTemp2;
443-
fAtbTemp3.ResizeTo(tlf.fAtbTemp3); fAtbTemp3=tlf.fAtbTemp3;
444-
445-
// use clear instead of delete
446-
fFunctions.Clear();
447-
fFunctions= *(TObjArray*) tlf.fFunctions.Clone();
448-
449-
fY.ResizeTo(tlf.fY); fY = tlf.fY;
450-
fX.ResizeTo(tlf.fX); fX = tlf.fX;
451-
fE.ResizeTo(tlf.fE); fE = tlf.fE;
452-
453-
fY2 = tlf.fY2;
454-
fY2Temp = tlf.fY2Temp;
455-
for(Int_t i = 0; i < 1000; i++) fVal[i] = tlf.fVal[i];
456-
457-
if(fInputFunction) { delete fInputFunction; fInputFunction = nullptr; }
458-
if(tlf.fInputFunction) fInputFunction = new TFormula(*tlf.fInputFunction);
459-
460-
fNpoints=tlf.fNpoints;
461-
fNfunctions=tlf.fNfunctions;
462-
fFormulaSize=tlf.fFormulaSize;
463-
fNdim=tlf.fNdim;
464-
fNfixed=tlf.fNfixed;
465-
fSpecial=tlf.fSpecial;
466-
467-
if(fFormula) { delete [] fFormula; fFormula = nullptr; }
468-
if (tlf.fFormula) {
469-
fFormula = new char[fFormulaSize+1];
470-
strlcpy(fFormula,tlf.fFormula,fFormulaSize+1);
471-
}
472-
473-
fIsSet=tlf.fIsSet;
474-
fStoreData=tlf.fStoreData;
475-
fChisquare=tlf.fChisquare;
476-
477-
fH=tlf.fH;
478-
fRobust=tlf.fRobust;
479-
fFitsample=tlf.fFitsample;
480-
481-
if(fFixedParams) { delete [] fFixedParams; fFixedParams = nullptr; }
482-
if ( tlf.fFixedParams && fNfixed > 0 ) {
483-
fFixedParams=new Bool_t[fNfixed];
484-
for(Int_t i=0; i< fNfixed; ++i)
485-
fFixedParams[i]=tlf.fFixedParams[i];
486-
}
487-
488-
}
489-
return *this;
490-
}
491-
492368
////////////////////////////////////////////////////////////////////////////////
493369
///Add another linear fitter to this linear fitter. Points and Design matrices
494370
///are added, but the previous fitting results (if any) are deleted.

0 commit comments

Comments
 (0)