diff --git a/tmva/tmva/src/CrossValidation.cxx b/tmva/tmva/src/CrossValidation.cxx index 9ea9175e2c88fdff3a67118e8975660f737986de..d6bcc21b07dd57f08338945b3bd4d3438b8a5dfc 100644 --- a/tmva/tmva/src/CrossValidation.cxx +++ b/tmva/tmva/src/CrossValidation.cxx @@ -186,7 +186,9 @@ TCanvas* TMVA::CrossValidationResult::Draw(const TString name) const // TCanvas* TMVA::CrossValidationResult::DrawAvgROCCurve(Bool_t drawFolds, TString title) const { - TMultiGraph rocs{}; + // note this function will create memory leak for the TMultiGraph + // but it needs to be kept alive in order to display the canvas + TMultiGraph *rocs = new TMultiGraph(); // Potentially add the folds if (drawFolds) { @@ -194,7 +196,7 @@ TCanvas* TMVA::CrossValidationResult::DrawAvgROCCurve(Bool_t drawFolds, TString TGraph * foldRocGraph = dynamic_cast<TGraph *>(foldRocObj->Clone()); foldRocGraph->SetLineColor(1); foldRocGraph->SetLineWidth(1); - rocs.Add(foldRocGraph); + rocs->Add(foldRocGraph); } } @@ -203,7 +205,7 @@ TCanvas* TMVA::CrossValidationResult::DrawAvgROCCurve(Bool_t drawFolds, TString avgRocGraph->SetTitle("Avg ROC Curve"); avgRocGraph->SetLineColor(2); avgRocGraph->SetLineWidth(3); - rocs.Add(avgRocGraph); + rocs->Add(avgRocGraph); // Draw TCanvas *c = new TCanvas(); @@ -212,14 +214,15 @@ TCanvas* TMVA::CrossValidationResult::DrawAvgROCCurve(Bool_t drawFolds, TString title = "Cross Validation Average ROC Curve"; } - rocs.SetTitle(title); - rocs.GetXaxis()->SetTitle("Signal Efficiency"); - rocs.GetYaxis()->SetTitle("Background Rejection"); - rocs.DrawClone("AL"); + rocs->SetName("cv_rocs"); + rocs->SetTitle(title); + rocs->GetXaxis()->SetTitle("Signal Efficiency"); + rocs->GetYaxis()->SetTitle("Background Rejection"); + rocs->DrawClone("AL"); // Build legend TLegend *leg = new TLegend(); - TList *ROCCurveList = rocs.GetListOfGraphs(); + TList *ROCCurveList = rocs->GetListOfGraphs(); if (drawFolds) { Int_t nCurves = ROCCurveList->GetSize(); diff --git a/tmva/tmva/src/MethodCrossValidation.cxx b/tmva/tmva/src/MethodCrossValidation.cxx index f85934e680c6543cbf5450bede7aea7f432286d6..d78cebef258a6e28eed6eadfa28940a5592ea366 100644 --- a/tmva/tmva/src/MethodCrossValidation.cxx +++ b/tmva/tmva/src/MethodCrossValidation.cxx @@ -226,6 +226,8 @@ void TMVA::MethodCrossValidation::ReadWeightsFromXML(void *parent) // SplitExpr if (fSplitExprString != TString("")) { fSplitExpr = std::unique_ptr<CvSplitKFoldsExpr>(new CvSplitKFoldsExpr(DataInfo(), fSplitExprString)); + } else { + Log() << kFATAL << "MethodCrossValidation supports XML reading only for deterministic splitting !" << Endl; } }