137#pragma warning ( disable : 4355 ) 
  158      fMultiGraph = 
nullptr;
 
  172    std::cerr << kERROR << 
"IPythonInteractive::Init: already initialized..." << std::endl;
 
  176  for(
auto& title : graphTitles){
 
  177    fGraphs.push_back( 
new TGraph() );
 
  178    fGraphs.back()->SetTitle(title);
 
  179    fGraphs.back()->SetName(title);
 
  180    fGraphs.back()->SetFillColor(color);
 
  181    fGraphs.back()->SetLineColor(color);
 
  182    fGraphs.back()->SetMarkerColor(color);
 
  183    fMultiGraph->Add(fGraphs.back());
 
  195   for(
Int_t i=0; i<fNumGraphs; i++){
 
  209   fGraphs[0]->Set(fIndex+1);
 
  210   fGraphs[1]->Set(fIndex+1);
 
  211   fGraphs[0]->SetPoint(fIndex, 
x, 
y1);
 
  212   fGraphs[1]->SetPoint(fIndex, 
x, 
y2);
 
  225  for(
Int_t i=0; i<fNumGraphs;i++){
 
  226    fGraphs[i]->Set(fIndex+1);
 
  227    fGraphs[i]->SetPoint(fIndex, dat[0], dat[i+1]);
 
  247   fAnalysisType              ( 
Types::kNoAnalysisType ),
 
  248   fRegressionReturnVal       ( 0 ),
 
  249   fMulticlassReturnVal       ( 0 ),
 
  250   fDataSetInfo               ( dsi ),
 
  251   fSignalReferenceCut        ( 0.5 ),
 
  252   fSignalReferenceCutOrientation( 1. ),
 
  253   fVariableTransformType     ( 
Types::kSignal ),
 
  254   fJobName                   ( jobName ),
 
  255   fMethodName                ( methodTitle ),
 
  256   fMethodType                ( methodType ),
 
  260   fConstructedFromWeightFile ( 
kFALSE ),
 
  262   fMethodBaseDir             ( 0 ),
 
  265   fModelPersistence          (
kTRUE),
 
  276   fSplTrainEffBvsS           ( 0 ),
 
  277   fVarTransformString        ( 
"None" ),
 
  278   fTransformationPointer     ( 0 ),
 
  279   fTransformation            ( dsi, methodTitle ),
 
  281   fVerbosityLevelString      ( 
"Default" ),
 
  284   fIgnoreNegWeightsInTraining( 
kFALSE ),
 
  286   fBackgroundClass           ( 0 ),
 
  311   fAnalysisType              ( 
Types::kNoAnalysisType ),
 
  312   fRegressionReturnVal       ( 0 ),
 
  313   fMulticlassReturnVal       ( 0 ),
 
  314   fDataSetInfo               ( dsi ),
 
  315   fSignalReferenceCut        ( 0.5 ),
 
  316   fVariableTransformType     ( 
Types::kSignal ),
 
  318   fMethodName                ( 
"MethodBase"  ),
 
  319   fMethodType                ( methodType ),
 
  321   fTMVATrainingVersion       ( 0 ),
 
  322   fROOTTrainingVersion       ( 0 ),
 
  323   fConstructedFromWeightFile ( 
kTRUE ),
 
  325   fMethodBaseDir             ( 0 ),
 
  328   fModelPersistence          (
kTRUE),
 
  329   fWeightFile                ( weightFile ),
 
  339   fSplTrainEffBvsS           ( 0 ),
 
  340   fVarTransformString        ( 
"None" ),
 
  341   fTransformationPointer     ( 0 ),
 
  342   fTransformation            ( dsi, 
"" ),
 
  344   fVerbosityLevelString      ( 
"Default" ),
 
  347   fIgnoreNegWeightsInTraining( 
kFALSE ),
 
  349   fBackgroundClass           ( 0 ),
 
  367   if (!fSetupCompleted) Log() << kWARNING <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Calling destructor of method which got never setup" << 
Endl;
 
  370   if (fInputVars != 0)  { fInputVars->clear(); 
delete fInputVars; }
 
  371   if (fRanking   != 0)  
delete fRanking;
 
  374   if (fDefaultPDF!= 0)  { 
delete fDefaultPDF; fDefaultPDF = 0; }
 
  375   if (fMVAPdfS   != 0)  { 
delete fMVAPdfS; fMVAPdfS = 0; }
 
  376   if (fMVAPdfB   != 0)  { 
delete fMVAPdfB; fMVAPdfB = 0; }
 
  379   if (fSplS)            { 
delete fSplS; fSplS = 0; }
 
  380   if (fSplB)            { 
delete fSplB; fSplB = 0; }
 
  381   if (fSpleffBvsS)      { 
delete fSpleffBvsS; fSpleffBvsS = 0; }
 
  382   if (fSplRefS)         { 
delete fSplRefS; fSplRefS = 0; }
 
  383   if (fSplRefB)         { 
delete fSplRefB; fSplRefB = 0; }
 
  384   if (fSplTrainRefS)    { 
delete fSplTrainRefS; fSplTrainRefS = 0; }
 
  385   if (fSplTrainRefB)    { 
delete fSplTrainRefB; fSplTrainRefB = 0; }
 
  386   if (fSplTrainEffBvsS) { 
delete fSplTrainEffBvsS; fSplTrainEffBvsS = 0; }
 
  388   for (
size_t i = 0; i < fEventCollections.size(); i++ ) {
 
  389      if (fEventCollections.at(i)) {
 
  390         for (std::vector<Event*>::const_iterator it = fEventCollections.at(i)->begin();
 
  391              it != fEventCollections.at(i)->end(); ++it) {
 
  394         delete fEventCollections.at(i);
 
  395         fEventCollections.at(i) = 
nullptr;
 
  399   if (fRegressionReturnVal) 
delete fRegressionReturnVal;
 
  400   if (fMulticlassReturnVal) 
delete fMulticlassReturnVal;
 
  410   if (fSetupCompleted) Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Calling SetupMethod for the second time" << 
Endl;
 
  412   DeclareBaseOptions();
 
  415   fSetupCompleted = 
kTRUE;
 
  425   ProcessBaseOptions();
 
  435   CheckForUnusedOptions();
 
  443   SetConfigDescription( 
"Configuration options for classifier architecture and tuning" );
 
  451   fSplTrainEffBvsS    = 0;
 
  458   fTxtWeightsOnly     = 
kTRUE;
 
  468   fInputVars = 
new std::vector<TString>;
 
  469   for (
UInt_t ivar=0; ivar<GetNvar(); ivar++) {
 
  470      fInputVars->push_back(DataInfo().GetVariableInfo(ivar).GetLabel());
 
  472   fRegressionReturnVal = 0;
 
  473   fMulticlassReturnVal = 0;
 
  475   fEventCollections.resize( 2 );
 
  476   fEventCollections.at(0) = 0;
 
  477   fEventCollections.at(1) = 0;
 
  480   if (DataInfo().GetClassInfo(
"Signal") != 0) {
 
  481      fSignalClass = DataInfo().GetClassInfo(
"Signal")->GetNumber();
 
  483   if (DataInfo().GetClassInfo(
"Background") != 0) {
 
  484      fBackgroundClass = DataInfo().GetClassInfo(
"Background")->GetNumber();
 
  487   SetConfigDescription( 
"Configuration options for MVA method" );
 
  488   SetConfigName( 
TString(
"Method") + GetMethodTypeName() );
 
  511   DeclareOptionRef( fVerbose, 
"V", 
"Verbose output (short form of \"VerbosityLevel\" below - overrides the latter one)" );
 
  513   DeclareOptionRef( fVerbosityLevelString=
"Default", 
"VerbosityLevel", 
"Verbosity level" );
 
  514   AddPreDefVal( 
TString(
"Default") ); 
 
  515   AddPreDefVal( 
TString(
"Debug")   );
 
  516   AddPreDefVal( 
TString(
"Verbose") );
 
  517   AddPreDefVal( 
TString(
"Info")    );
 
  518   AddPreDefVal( 
TString(
"Warning") );
 
  519   AddPreDefVal( 
TString(
"Error")   );
 
  520   AddPreDefVal( 
TString(
"Fatal")   );
 
  524   fTxtWeightsOnly = 
kTRUE;  
 
  527   DeclareOptionRef( fVarTransformString, 
"VarTransform", 
"List of variable transformations performed before training, e.g., \"D_Background,P_Signal,G,N_AllClasses\" for: \"Decorrelation, PCA-transformation, Gaussianisation, Normalisation, each for the given class of events ('AllClasses' denotes all events of all classes, if no class indication is given, 'All' is assumed)\"" );
 
  529   DeclareOptionRef( fHelp, 
"H", 
"Print method-specific help message" );
 
  531   DeclareOptionRef( fHasMVAPdfs, 
"CreateMVAPdfs", 
"Create PDFs for classifier outputs (signal and background)" );
 
  533   DeclareOptionRef( fIgnoreNegWeightsInTraining, 
"IgnoreNegWeightsInTraining",
 
  534                     "Events with negative weights are ignored in the training (but are included for testing and performance evaluation)" );
 
  546      fDefaultPDF = 
new PDF( 
TString(GetName())+
"_PDF", GetOptions(), 
"MVAPdf" );
 
  547      fDefaultPDF->DeclareOptions();
 
  548      fDefaultPDF->ParseOptions();
 
  549      fDefaultPDF->ProcessOptions();
 
  550      fMVAPdfB = 
new PDF( 
TString(GetName())+
"_PDFBkg", fDefaultPDF->GetOptions(), 
"MVAPdfBkg", fDefaultPDF );
 
  551      fMVAPdfB->DeclareOptions();
 
  552      fMVAPdfB->ParseOptions();
 
  553      fMVAPdfB->ProcessOptions();
 
  554      fMVAPdfS = 
new PDF( 
TString(GetName())+
"_PDFSig", fMVAPdfB->GetOptions(),    
"MVAPdfSig", fDefaultPDF );
 
  555      fMVAPdfS->DeclareOptions();
 
  556      fMVAPdfS->ParseOptions();
 
  557      fMVAPdfS->ProcessOptions();
 
  560      SetOptions( fMVAPdfS->GetOptions() );
 
  565                                               GetTransformationHandler(),
 
  569      if (fDefaultPDF!= 0) { 
delete fDefaultPDF; fDefaultPDF = 0; }
 
  570      if (fMVAPdfS   != 0) { 
delete fMVAPdfS; fMVAPdfS = 0; }
 
  571      if (fMVAPdfB   != 0) { 
delete fMVAPdfB; fMVAPdfB = 0; }
 
  575      fVerbosityLevelString = 
TString(
"Verbose");
 
  576      Log().SetMinType( kVERBOSE );
 
  578   else if (fVerbosityLevelString == 
"Debug"   ) Log().SetMinType( kDEBUG );
 
  579   else if (fVerbosityLevelString == 
"Verbose" ) Log().SetMinType( kVERBOSE );
 
  580   else if (fVerbosityLevelString == 
"Info"    ) Log().SetMinType( kINFO );
 
  581   else if (fVerbosityLevelString == 
"Warning" ) Log().SetMinType( kWARNING );
 
  582   else if (fVerbosityLevelString == 
"Error"   ) Log().SetMinType( kERROR );
 
  583   else if (fVerbosityLevelString == 
"Fatal"   ) Log().SetMinType( kFATAL );
 
  584   else if (fVerbosityLevelString != 
"Default" ) {
 
  585      Log() << kFATAL << 
"<ProcessOptions> Verbosity level type '" 
  586            << fVerbosityLevelString << 
"' unknown." << 
Endl;
 
  598   DeclareOptionRef( fNormalise=
kFALSE, 
"Normalise", 
"Normalise input variables" ); 
 
  599   DeclareOptionRef( fUseDecorr=
kFALSE, 
"D", 
"Use-decorrelated-variables flag" );
 
  600   DeclareOptionRef( fVariableTransformTypeString=
"Signal", 
"VarTransformType",
 
  601                     "Use signal or background events to derive for variable transformation (the transformation is applied on both types of, course)" );
 
  602   AddPreDefVal( 
TString(
"Signal") );
 
  603   AddPreDefVal( 
TString(
"Background") );
 
  604   DeclareOptionRef( fTxtWeightsOnly=
kTRUE, 
"TxtWeightFilesOnly", 
"If True: write all training results (weights) as text files (False: some are written in ROOT format)" );
 
  614   DeclareOptionRef( fNbinsMVAPdf   = 60, 
"NbinsMVAPdf",   
"Number of bins used for the PDFs of classifier outputs" );
 
  615   DeclareOptionRef( fNsmoothMVAPdf = 2,  
"NsmoothMVAPdf", 
"Number of smoothing iterations for classifier PDFs" );
 
  629   Log() << kWARNING <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Parameter optimization is not yet implemented for method " 
  630         << GetName() << 
Endl;
 
  631   Log() << kWARNING <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Currently we need to set hardcoded which parameter is tuned in which ranges"<<
Endl;
 
  633   std::map<TString,Double_t> tunedParameters;
 
  634   tunedParameters.size(); 
 
  635   return tunedParameters;
 
  656   if (Help()) PrintHelpMessage();
 
  659   if(!IsSilentFile()) BaseDir()->cd();
 
  663   GetTransformationHandler().CalcTransformations(Data()->GetEventCollection());
 
  667    << 
"Begin training" << 
Endl;
 
  668   Long64_t nEvents = Data()->GetNEvents();
 
  669   Timer traintimer( nEvents, GetName(), 
kTRUE );
 
  672    << 
"\tEnd of training                                              " << 
Endl;
 
  675    << 
"Elapsed time for training with " << nEvents <<  
" events: " 
  679    << 
"\tCreate MVA output for ";
 
  682   if (DoMulticlass()) {
 
  683      Log() <<
Form(
"[%s] : ",DataInfo().GetName())<< 
"Multiclass classification on training sample" << 
Endl;
 
  686   else if (!DoRegression()) {
 
  688      Log() <<
Form(
"[%s] : ",DataInfo().GetName())<< 
"classification on training sample" << 
Endl;
 
  697      Log() <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"regression on training sample" << 
Endl;
 
  701         Log() <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Create PDFs" << 
Endl;
 
  708   if (fModelPersistence ) WriteStateToFile();
 
  711   if ((!DoRegression()) && (fModelPersistence)) MakeClass();
 
  718       WriteMonitoringHistosToFile();
 
  726   if (!DoRegression()) Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Trying to use GetRegressionDeviation() with a classification job" << 
Endl;
 
  727   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Create results for " << (
type==
Types::kTraining?
"training":
"testing") << 
Endl;
 
  729   bool truncate = 
false;
 
  730   TH1F* 
h1 = regRes->QuadraticDeviation( tgtNum , truncate, 1.);
 
  735   TH1F* h2 = regRes->QuadraticDeviation( tgtNum , truncate, yq[0]);
 
  736   stddev90Percent = sqrt(h2->
GetMean());
 
  746   Data()->SetCurrentType(
type);
 
  748   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Create results for " << (
type==
Types::kTraining?
"training":
"testing") << 
Endl;
 
  752   Long64_t nEvents = Data()->GetNEvents();
 
  756   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName()) << 
"Evaluation of " << GetMethodName() << 
" on " 
  759   regRes->Resize( nEvents );
 
  764   Int_t totalProgressDraws = 100; 
 
  765   Int_t drawProgressEvery = 1;    
 
  766   if(nEvents >= totalProgressDraws) drawProgressEvery = nEvents/totalProgressDraws;
 
  768   for (
Int_t ievt=0; ievt<nEvents; ievt++) {
 
  770      Data()->SetCurrentEvent(ievt);
 
  771      std::vector< Float_t > vals = GetRegressionValues();
 
  772      regRes->SetValue( vals, ievt );
 
  775      if(ievt % drawProgressEvery == 0 || ievt==nEvents-1) timer.
DrawProgressBar( ievt );
 
  778   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())
 
  779    << 
"Elapsed time for evaluation of " << nEvents <<  
" events: " 
  786   TString histNamePrefix(GetTestvarName());
 
  788   regRes->CreateDeviationHistograms( histNamePrefix );
 
  796   Data()->SetCurrentType(
type);
 
  798   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Create results for " << (
type==
Types::kTraining?
"training":
"testing") << 
Endl;
 
  801   if (!resMulticlass) Log() << kFATAL<<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"unable to create pointer in AddMulticlassOutput, exiting."<<
Endl;
 
  803   Long64_t nEvents = Data()->GetNEvents();
 
  808   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Multiclass evaluation of " << GetMethodName() << 
" on " 
  811   resMulticlass->Resize( nEvents );
 
  812   for (
Int_t ievt=0; ievt<nEvents; ievt++) {
 
  813      Data()->SetCurrentEvent(ievt);
 
  814      std::vector< Float_t > vals = GetMulticlassValues();
 
  815      resMulticlass->SetValue( vals, ievt );
 
  819   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())
 
  820    << 
"Elapsed time for evaluation of " << nEvents <<  
" events: " 
  827   TString histNamePrefix(GetTestvarName());
 
  830   resMulticlass->CreateMulticlassHistos( histNamePrefix, fNbinsMVAoutput, fNbinsH );
 
  831   resMulticlass->CreateMulticlassPerformanceHistos(histNamePrefix);
 
  838   if (errUpper) *errUpper=-1;
 
  845   Double_t val = GetMvaValue(err, errUpper);
 
  855   return GetMvaValue()*GetSignalReferenceCutOrientation() > GetSignalReferenceCut()*GetSignalReferenceCutOrientation() ? 
kTRUE : 
kFALSE;
 
  862   return mvaVal*GetSignalReferenceCutOrientation() > GetSignalReferenceCut()*GetSignalReferenceCutOrientation() ? 
kTRUE : 
kFALSE;
 
  870   Data()->SetCurrentType(
type);
 
  875   Long64_t nEvents =  Data()->GetNEvents();
 
  880   std::vector<Double_t> mvaValues = GetMvaValues(0, nEvents, 
true);
 
  887   for (
Int_t ievt = 0; ievt < nEvents; ievt++) {
 
  890      auto ev = Data()->GetEvent(ievt);
 
  891      clRes->
SetValue(mvaValues[ievt], ievt, DataInfo().IsSignal(ev));
 
  900   Long64_t nEvents = Data()->GetNEvents();
 
  901   if (firstEvt > lastEvt || lastEvt > nEvents) lastEvt = nEvents;
 
  902   if (firstEvt < 0) firstEvt = 0;
 
  903   std::vector<Double_t> values(lastEvt-firstEvt);
 
  905   nEvents = values.size();
 
  911      Log() << kHEADER << 
Form(
"[%s] : ",DataInfo().GetName())
 
  912            << 
"Evaluation of " << GetMethodName() << 
" on " 
  914            << 
" sample (" << nEvents << 
" events)" << 
Endl;
 
  916   for (
Int_t ievt=firstEvt; ievt<lastEvt; ievt++) {
 
  917      Data()->SetCurrentEvent(ievt);
 
  918      values[ievt] = GetMvaValue();
 
  923         if (modulo <= 0 ) modulo = 1;
 
  929        << 
"Elapsed time for evaluation of " << nEvents <<  
" events: " 
  942   auto result = GetMvaValues(firstEvt, lastEvt, logProgress);
 
  952   Data()->SetCurrentType(
type);
 
  957   Long64_t nEvents = Data()->GetNEvents();
 
  962   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName()) << 
"Evaluation of " << GetMethodName() << 
" on " 
  965   mvaProb->
Resize( nEvents );
 
  966   for (
Int_t ievt=0; ievt<nEvents; ievt++) {
 
  968      Data()->SetCurrentEvent(ievt);
 
  970      if (proba < 0) 
break;
 
  971      mvaProb->
SetValue( proba, ievt, DataInfo().IsSignal( Data()->GetEvent()) );
 
  975      if (modulo <= 0 ) modulo = 1;
 
  979   Log() << kDEBUG <<
Form(
"Dataset[%s] : ",DataInfo().GetName())
 
  980    << 
"Elapsed time for evaluation of " << nEvents <<  
" events: " 
  999   Data()->SetCurrentType(
type);
 
 1001   bias = 0; biasT = 0; dev = 0; devT = 0; rms = 0; rmsT = 0;
 
 1003   Double_t m1 = 0, m2 = 0, 
s1 = 0, s2 = 0, s12 = 0; 
 
 1004   const Int_t nevt = GetNEvents();
 
 1009   Log() << kINFO << 
"Calculate regression for all events" << 
Endl;
 
 1011   for (
Long64_t ievt=0; ievt<nevt; ievt++) {
 
 1013      const Event* ev = Data()->GetEvent(ievt); 
 
 1016      Float_t r = GetRegressionValues()[0];
 
 1035      m1  += t*
w; 
s1 += t*t*
w;
 
 1036      m2  += 
r*
w; s2 += 
r*
r*
w;
 
 1040      if (ievt % modulo == 0)
 
 1044   Log() << kINFO << 
"Elapsed time for evaluation of " << nevt <<  
" events: " 
 1056   corr  = s12/sumw - m1*m2;
 
 1057   corr /= 
TMath::Sqrt( (
s1/sumw - m1*m1) * (s2/sumw - m2*m2) );
 
 1067   for (
Long64_t ievt=0; ievt<nevt; ievt++) {
 
 1069      hist->
Fill( rV[ievt], tV[ievt], wV[ievt] );
 
 1070      if (
d >= devMin && 
d <= devMax) {
 
 1072         biasT += wV[ievt] * 
d;
 
 1074         rmsT  += wV[ievt] * 
d * 
d;
 
 1075         histT->
Fill( rV[ievt], tV[ievt], wV[ievt] );
 
 1092   Data()->SetCurrentType(savedType);
 
 1102   if (!resMulticlass) Log() << kFATAL<<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"unable to create pointer in TestMulticlass, exiting."<<
Endl;
 
 1111   TString histNamePrefix(GetTestvarName());
 
 1112   TString histNamePrefixTest{histNamePrefix + 
"_Test"};
 
 1113   TString histNamePrefixTrain{histNamePrefix + 
"_Train"};
 
 1134   if (0==mvaRes && !(GetMethodTypeName().Contains(
"Cuts"))) {
 
 1135      Log()<<
Form(
"Dataset[%s] : ",DataInfo().GetName()) << 
"mvaRes " << mvaRes << 
" GetMethodTypeName " << GetMethodTypeName()
 
 1136           << 
" contains " << !(GetMethodTypeName().Contains(
"Cuts")) << 
Endl;
 
 1137      Log() << kFATAL<<
Form(
"Dataset[%s] : ",DataInfo().GetName()) << 
"<TestInit> Test variable " << GetTestvarName()
 
 1138            << 
" not found in tree" << 
Endl;
 
 1143                         fMeanS, fMeanB, fRmsS, fRmsB, fXmin, fXmax, fSignalClass );
 
 1151   fCutOrientation = (fMeanS > fMeanB) ? kPositive : kNegative;
 
 1163         TestvarName=
Form(
"[%s]%s",DataInfo().GetName(),GetTestvarName().Data());
 
 1166         TestvarName=GetTestvarName();
 
 1168   TH1* mva_s = 
new TH1D( TestvarName + 
"_S",TestvarName + 
"_S", fNbinsMVAoutput, fXmin, sxmax );
 
 1169   TH1* mva_b = 
new TH1D( TestvarName + 
"_B",TestvarName + 
"_B", fNbinsMVAoutput, fXmin, sxmax );
 
 1170   mvaRes->
Store(mva_s, 
"MVA_S");
 
 1171   mvaRes->
Store(mva_b, 
"MVA_B");
 
 1181      proba_s = 
new TH1D( TestvarName + 
"_Proba_S", TestvarName + 
"_Proba_S", fNbinsMVAoutput, 0.0, 1.0 );
 
 1182      proba_b = 
new TH1D( TestvarName + 
"_Proba_B", TestvarName + 
"_Proba_B", fNbinsMVAoutput, 0.0, 1.0 );
 
 1183      mvaRes->
Store(proba_s, 
"Prob_S");
 
 1184      mvaRes->
Store(proba_b, 
"Prob_B");
 
 1189      rarity_s = 
new TH1D( TestvarName + 
"_Rarity_S", TestvarName + 
"_Rarity_S", fNbinsMVAoutput, 0.0, 1.0 );
 
 1190      rarity_b = 
new TH1D( TestvarName + 
"_Rarity_B", TestvarName + 
"_Rarity_B", fNbinsMVAoutput, 0.0, 1.0 );
 
 1191      mvaRes->
Store(rarity_s, 
"Rar_S");
 
 1192      mvaRes->
Store(rarity_b, 
"Rar_B");
 
 1198   TH1* mva_eff_s = 
new TH1D( TestvarName + 
"_S_high", TestvarName + 
"_S_high", fNbinsH, fXmin, sxmax );
 
 1199   TH1* mva_eff_b = 
new TH1D( TestvarName + 
"_B_high", TestvarName + 
"_B_high", fNbinsH, fXmin, sxmax );
 
 1200   mvaRes->
Store(mva_eff_s, 
"MVA_HIGHBIN_S");
 
 1201   mvaRes->
Store(mva_eff_b, 
"MVA_HIGHBIN_B");
 
 1210   Log() << kHEADER <<
Form(
"[%s] : ",DataInfo().GetName())<< 
"Loop over test events and fill histograms with classifier response..." << 
Endl << 
Endl;
 
 1211   if (mvaProb) Log() << kINFO << 
"Also filling probability and rarity histograms (on request)..." << 
Endl;
 
 1215   if ( mvaRes->
GetSize() != GetNEvents() ) {
 
 1216      Log() << kFATAL << 
TString::Format(
"Inconsistent result size  %lld with number of events %u ",    mvaRes->
GetSize() ,  GetNEvents() ) << 
Endl;
 
 1217      assert(mvaRes->
GetSize() == GetNEvents());
 
 1220   for (
Long64_t ievt=0; ievt<GetNEvents(); ievt++) {
 
 1222      const Event* ev = GetEvent(ievt);
 
 1226      if (DataInfo().IsSignal(ev)) {
 
 1230            proba_s->
Fill( (*mvaProb)[ievt][0], 
w );
 
 1231            rarity_s->
Fill( GetRarity( 
v ), 
w );
 
 1234         mva_eff_s ->
Fill( 
v, 
w );
 
 1240            proba_b->
Fill( (*mvaProb)[ievt][0], 
w );
 
 1241            rarity_b->
Fill( GetRarity( 
v ), 
w );
 
 1243         mva_eff_b ->
Fill( 
v, 
w );
 
 1258   if (fSplS) { 
delete fSplS; fSplS = 0; }
 
 1259   if (fSplB) { 
delete fSplB; fSplB = 0; }
 
 1273   tf << prefix << 
"#GEN -*-*-*-*-*-*-*-*-*-*-*- general info -*-*-*-*-*-*-*-*-*-*-*-" << std::endl << prefix << std::endl;
 
 1274   tf << prefix << 
"Method         : " << GetMethodTypeName() << 
"::" << GetMethodName() << std::endl;
 
 1275   tf.setf(std::ios::left);
 
 1276   tf << prefix << 
"TMVA Release   : " << std::setw(10) << GetTrainingTMVAVersionString() << 
"    [" 
 1277      << GetTrainingTMVAVersionCode() << 
"]" << std::endl;
 
 1278   tf << prefix << 
"ROOT Release   : " << std::setw(10) << GetTrainingROOTVersionString() << 
"    [" 
 1279      << GetTrainingROOTVersionCode() << 
"]" << std::endl;
 
 1280   tf << prefix << 
"Creator        : " << userInfo->
fUser << std::endl;
 
 1284   tf << prefix << 
"Training events: " << Data()->GetNTrainingEvents() << std::endl;
 
 1288   tf << prefix << 
"Analysis type  : " << 
"[" << ((GetAnalysisType()==
Types::kRegression) ? 
"Regression" : 
"Classification") << 
"]" << std::endl;
 
 1289   tf << prefix << std::endl;
 
 1294   tf << prefix << std::endl << prefix << 
"#OPT -*-*-*-*-*-*-*-*-*-*-*-*- options -*-*-*-*-*-*-*-*-*-*-*-*-" << std::endl << prefix << std::endl;
 
 1295   WriteOptionsToStream( tf, prefix );
 
 1296   tf << prefix << std::endl;
 
 1299   tf << prefix << std::endl << prefix << 
"#VAR -*-*-*-*-*-*-*-*-*-*-*-* variables *-*-*-*-*-*-*-*-*-*-*-*-" << std::endl << prefix << std::endl;
 
 1300   WriteVarsToStream( tf, prefix );
 
 1301   tf << prefix << std::endl;
 
 1318      AddRegressionOutput( 
type );
 
 1320      AddMulticlassOutput( 
type );
 
 1322      AddClassifierOutput( 
type );
 
 1324         AddClassifierOutputProb( 
type );
 
 1334   if (!parent) 
return;
 
 1339   AddInfoItem( gi, 
"TMVA Release", GetTrainingTMVAVersionString() + 
" [" + 
gTools().StringFromInt(GetTrainingTMVAVersionCode()) + 
"]" );
 
 1340   AddInfoItem( gi, 
"ROOT Release", GetTrainingROOTVersionString() + 
" [" + 
gTools().StringFromInt(GetTrainingROOTVersionCode()) + 
"]");
 
 1341   AddInfoItem( gi, 
"Creator", userInfo->
fUser);
 
 1345   AddInfoItem( gi, 
"Training events", 
gTools().StringFromInt(Data()->GetNTrainingEvents()));
 
 1346   AddInfoItem( gi, 
"TrainingTime", 
gTools().StringFromDouble(
const_cast<TMVA::MethodBase*
>(
this)->GetTrainTime()));
 
 1351   AddInfoItem( gi, 
"AnalysisType", analysisType );
 
 1355   AddOptionsXMLTo( parent );
 
 1358   AddVarsXMLTo( parent );
 
 1361   if (fModelPersistence)
 
 1362      AddSpectatorsXMLTo( parent );
 
 1365   AddClassesXMLTo(parent);
 
 1368   if (DoRegression()) AddTargetsXMLTo(parent);
 
 1371   GetTransformationHandler(
false).AddXMLTo( parent );
 
 1375   if (fMVAPdfS) fMVAPdfS->AddXMLTo(pdfs);
 
 1376   if (fMVAPdfB) fMVAPdfB->AddXMLTo(pdfs);
 
 1379   AddWeightsXMLTo( parent );
 
 1395   ReadWeightsFromStream( rf );
 
 1408   TString tfname( GetWeightFileName() );
 
 1413    << 
"Creating xml weight file: " 
 1418   gTools().
AddAttr(rootnode,
"Method", GetMethodTypeName() + 
"::" + GetMethodName());
 
 1419   WriteStateToXML(rootnode);
 
 1431   TString tfname(GetWeightFileName());
 
 1434    << 
"Reading weight file: " 
 1440         Log() << kFATAL << 
"Error parsing XML file " << tfname << 
Endl;
 
 1443      ReadStateFromXML(rootnode);
 
 1448      fb.open(tfname.
Data(),std::ios::in);
 
 1449      if (!fb.is_open()) { 
 
 1450         Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<ReadStateFromFile> " 
 1451               << 
"Unable to open input weight file: " << tfname << 
Endl;
 
 1453      std::istream fin(&fb);
 
 1454      ReadStateFromStream(fin);
 
 1457   if (!fTxtWeightsOnly) {
 
 1460      Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Reading root weight file: " 
 1463      ReadStateFromStream( *rfile );
 
 1473   ReadStateFromXML(rootnode);
 
 1487   fMethodName = fullMethodName(fullMethodName.
Index(
"::")+2,fullMethodName.
Length());
 
 1490   Log().SetSource( GetName() );
 
 1492    << 
"Read method \"" << GetMethodName() << 
"\" of type \"" << GetMethodTypeName() << 
"\"" << 
Endl;
 
 1502      if (nodeName==
"GeneralInfo") {
 
 1507         while (antypeNode) {
 
 1510            if (
name == 
"TrainingTime")
 
 1513            if (
name == 
"AnalysisType") {
 
 1519               else Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Analysis type " << val << 
" is not known." << 
Endl;
 
 1522            if (
name == 
"TMVA Release" || 
name == 
"TMVA") {
 
 1526               Log() << kDEBUG <<
Form(
"[%s] : ",DataInfo().GetName()) << 
"MVA method was trained with TMVA Version: " << GetTrainingTMVAVersionString() << 
Endl;
 
 1529            if (
name == 
"ROOT Release" || 
name == 
"ROOT") {
 
 1534           << 
"MVA method was trained with ROOT Version: " << GetTrainingROOTVersionString() << 
Endl;
 
 1539      else if (nodeName==
"Options") {
 
 1540         ReadOptionsFromXML(ch);
 
 1544      else if (nodeName==
"Variables") {
 
 1545         ReadVariablesFromXML(ch);
 
 1547      else if (nodeName==
"Spectators") {
 
 1548         ReadSpectatorsFromXML(ch);
 
 1550      else if (nodeName==
"Classes") {
 
 1551         if (DataInfo().GetNClasses()==0) ReadClassesFromXML(ch);
 
 1553      else if (nodeName==
"Targets") {
 
 1554         if (DataInfo().GetNTargets()==0 && DoRegression()) ReadTargetsFromXML(ch);
 
 1556      else if (nodeName==
"Transformations") {
 
 1557         GetTransformationHandler().ReadFromXML(ch);
 
 1559      else if (nodeName==
"MVAPdfs") {
 
 1561         if (fMVAPdfS) { 
delete fMVAPdfS; fMVAPdfS=0; }
 
 1562         if (fMVAPdfB) { 
delete fMVAPdfB; fMVAPdfB=0; }
 
 1566            fMVAPdfS = 
new PDF(pdfname);
 
 1567            fMVAPdfS->ReadXML(pdfnode);
 
 1570            fMVAPdfB = 
new PDF(pdfname);
 
 1571            fMVAPdfB->ReadXML(pdfnode);
 
 1574      else if (nodeName==
"Weights") {
 
 1575         ReadWeightsFromXML(ch);
 
 1578         Log() << kWARNING <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Unparsed XML node: '" << nodeName << 
"'" << 
Endl;
 
 1585   if (GetTransformationHandler().GetCallerName() == 
"") GetTransformationHandler().SetCallerName( GetName() );
 
 1601   while (!
TString(buf).BeginsWith(
"Method")) GetLine(fin,buf);
 
 1605   methodType = methodType(methodType.
Last(
' '),methodType.
Length());
 
 1610   if (methodName == 
"") methodName = methodType;
 
 1611   fMethodName  = methodName;
 
 1613   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Read method \"" << GetMethodName() << 
"\" of type \"" << GetMethodTypeName() << 
"\"" << 
Endl;
 
 1616   Log().SetSource( GetName() );
 
 1630   while (!
TString(buf).BeginsWith(
"#OPT")) GetLine(fin,buf);
 
 1631   ReadOptionsFromStream(fin);
 
 1635   fin.getline(buf,512);
 
 1636   while (!
TString(buf).BeginsWith(
"#VAR")) fin.getline(buf,512);
 
 1637   ReadVarsFromStream(fin);
 
 1642   if (IsNormalised()) {
 
 1648   if ( fVarTransformString == 
"None") {
 
 1651   } 
else if ( fVarTransformString == 
"Decorrelate" ) {
 
 1653   } 
else if ( fVarTransformString == 
"PCA"  ) {
 
 1654      varTrafo = GetTransformationHandler().AddTransformation( 
new VariablePCATransform(DataInfo()), -1 );
 
 1655   } 
else if ( fVarTransformString == 
"Uniform" ) {
 
 1656      varTrafo  = GetTransformationHandler().AddTransformation( 
new VariableGaussTransform(DataInfo(),
"Uniform"), -1 );
 
 1657   } 
else if ( fVarTransformString == 
"Gauss" ) {
 
 1659   } 
else if ( fVarTransformString == 
"GaussDecorr" ) {
 
 1663      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<ProcessOptions> Variable transform '" 
 1664            << fVarTransformString << 
"' unknown." << 
Endl;
 
 1667   if (GetTransformationHandler().GetTransformationList().GetSize() > 0) {
 
 1668      fin.getline(buf,512);
 
 1669      while (!
TString(buf).BeginsWith(
"#MAT")) fin.getline(buf,512);
 
 1672         varTrafo->ReadTransformationFromStream(fin, trafo );
 
 1683      fin.getline(buf,512);
 
 1684      while (!
TString(buf).BeginsWith(
"#MVAPDFS")) fin.getline(buf,512);
 
 1685      if (fMVAPdfS != 0) { 
delete fMVAPdfS; fMVAPdfS = 0; }
 
 1686      if (fMVAPdfB != 0) { 
delete fMVAPdfB; fMVAPdfB = 0; }
 
 1687      fMVAPdfS = 
new PDF(
TString(GetName()) + 
" MVA PDF Sig");
 
 1688      fMVAPdfB = 
new PDF(
TString(GetName()) + 
" MVA PDF Bkg");
 
 1689      fMVAPdfS->SetReadingVersion( GetTrainingTMVAVersionCode() );
 
 1690      fMVAPdfB->SetReadingVersion( GetTrainingTMVAVersionCode() );
 
 1697   fin.getline(buf,512);
 
 1698   while (!
TString(buf).BeginsWith(
"#WGT")) fin.getline(buf,512);
 
 1699   fin.getline(buf,512);
 
 1700   ReadWeightsFromStream( fin );;
 
 1703   if (GetTransformationHandler().GetCallerName() == 
"") GetTransformationHandler().SetCallerName( GetName() );
 
 1713   o << prefix << 
"NVar " << DataInfo().GetNVariables() << std::endl;
 
 1714   std::vector<VariableInfo>::const_iterator varIt = DataInfo().GetVariableInfos().begin();
 
 1715   for (; varIt!=DataInfo().GetVariableInfos().end(); ++varIt) { o << prefix; varIt->WriteToStream(o); }
 
 1716   o << prefix << 
"NSpec " << DataInfo().GetNSpectators() << std::endl;
 
 1717   varIt = DataInfo().GetSpectatorInfos().begin();
 
 1718   for (; varIt!=DataInfo().GetSpectatorInfos().end(); ++varIt) { o << prefix; varIt->WriteToStream(o); }
 
 1730   istr >> dummy >> readNVar;
 
 1732   if (readNVar!=DataInfo().GetNVariables()) {
 
 1733      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"You declared "<< DataInfo().GetNVariables() << 
" variables in the Reader" 
 1734            << 
" while there are " << readNVar << 
" variables declared in the file" 
 1740   std::vector<VariableInfo>::iterator varIt = DataInfo().GetVariableInfos().begin();
 
 1742   for (; varIt!=DataInfo().GetVariableInfos().end(); ++varIt, ++varIdx) {
 
 1749         Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"ERROR in <ReadVarsFromStream>" << 
Endl;
 
 1750         Log() << kINFO << 
"The definition (or the order) of the variables found in the input file is"  << 
Endl;
 
 1751         Log() << kINFO << 
"is not the same as the one declared in the Reader (which is necessary for" << 
Endl;
 
 1752         Log() << kINFO << 
"the correct working of the method):" << 
Endl;
 
 1753         Log() << kINFO << 
"   var #" << varIdx <<
" declared in Reader: " << varIt->GetExpression() << 
Endl;
 
 1754         Log() << kINFO << 
"   var #" << varIdx <<
" declared in file  : " << varInfo.
GetExpression() << 
Endl;
 
 1755         Log() << kFATAL << 
"The expression declared to the Reader needs to be checked (name or order are wrong)" << 
Endl;
 
 1768   for (
UInt_t idx=0; idx<DataInfo().GetVariableInfos().size(); idx++) {
 
 1784   for (
UInt_t idx=0; idx<DataInfo().GetSpectatorInfos().size(); idx++) {
 
 1786      VariableInfo& vi = DataInfo().GetSpectatorInfos()[idx];
 
 1804   UInt_t nClasses=DataInfo().GetNClasses();
 
 1809   for (
UInt_t iCls=0; iCls<nClasses; ++iCls) {
 
 1810      ClassInfo *classInfo=DataInfo().GetClassInfo (iCls);
 
 1827   for (
UInt_t idx=0; idx<DataInfo().GetTargetInfos().size(); idx++) {
 
 1843   if (readNVar!=DataInfo().GetNVariables()) {
 
 1844      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"You declared "<< DataInfo().GetNVariables() << 
" variables in the Reader" 
 1845            << 
" while there are " << readNVar << 
" variables declared in the file" 
 1855      existingVarInfo = DataInfo().GetVariableInfos()[varIdx];
 
 1860         existingVarInfo = readVarInfo;
 
 1863         Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"ERROR in <ReadVariablesFromXML>" << 
Endl;
 
 1864         Log() << kINFO << 
"The definition (or the order) of the variables found in the input file is"  << 
Endl;
 
 1865         Log() << kINFO << 
"not the same as the one declared in the Reader (which is necessary for the" << 
Endl;
 
 1866         Log() << kINFO << 
"correct working of the method):" << 
Endl;
 
 1867         Log() << kINFO << 
"   var #" << varIdx <<
" declared in Reader: " << existingVarInfo.
GetExpression() << 
Endl;
 
 1868         Log() << kINFO << 
"   var #" << varIdx <<
" declared in file  : " << readVarInfo.
GetExpression() << 
Endl;
 
 1869         Log() << kFATAL << 
"The expression declared to the Reader needs to be checked (name or order are wrong)" << 
Endl;
 
 1883   if (readNSpec!=DataInfo().GetNSpectators(
kFALSE)) {
 
 1884      Log() << kFATAL<<
Form(
"Dataset[%s] : ",DataInfo().GetName()) << 
"You declared "<< DataInfo().GetNSpectators(
kFALSE) << 
" spectators in the Reader" 
 1885            << 
" while there are " << readNSpec << 
" spectators declared in the file" 
 1895      existingSpecInfo = DataInfo().GetSpectatorInfos()[specIdx];
 
 1900         existingSpecInfo = readSpecInfo;
 
 1903         Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"ERROR in <ReadSpectatorsFromXML>" << 
Endl;
 
 1904         Log() << kINFO << 
"The definition (or the order) of the spectators found in the input file is"  << 
Endl;
 
 1905         Log() << kINFO << 
"not the same as the one declared in the Reader (which is necessary for the" << 
Endl;
 
 1906         Log() << kINFO << 
"correct working of the method):" << 
Endl;
 
 1907         Log() << kINFO << 
"  spec #" << specIdx <<
" declared in Reader: " << existingSpecInfo.
GetExpression() << 
Endl;
 
 1908         Log() << kINFO << 
"  spec #" << specIdx <<
" declared in file  : " << readSpecInfo.
GetExpression() << 
Endl;
 
 1909         Log() << kFATAL << 
"The expression declared to the Reader needs to be checked (name or order are wrong)" << 
Endl;
 
 1928      for (
UInt_t icls = 0; icls<readNCls;++icls) {
 
 1930         DataInfo().AddClass(classname);
 
 1938         DataInfo().AddClass(className);
 
 1945   if (DataInfo().GetClassInfo(
"Signal") != 0) {
 
 1946      fSignalClass = DataInfo().GetClassInfo(
"Signal")->GetNumber();
 
 1950   if (DataInfo().GetClassInfo(
"Background") != 0) {
 
 1951      fBackgroundClass = DataInfo().GetClassInfo(
"Background")->GetNumber();
 
 1971      DataInfo().AddTarget(expression,
"",
"",0,0);
 
 1983   if (fBaseDir != 0) 
return fBaseDir;
 
 1984   Log()<<kDEBUG<<
Form(
"Dataset[%s] : ",DataInfo().GetName())<<
" Base Directory for " << GetMethodName() << 
" not set yet --> check if already there.." <<
Endl;
 
 1986   if (IsSilentFile()) {
 
 1987      Log() << kFATAL << 
Form(
"Dataset[%s] : ", DataInfo().GetName())
 
 1988            << 
"MethodBase::BaseDir() - No directory exists when running a Method without output file. Enable the " 
 1989               "output when creating the factory" 
 1995      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"MethodBase::BaseDir() - MethodBaseDir() return a NULL pointer!" << 
Endl;
 
 1997   TString defaultDir = GetMethodName();
 
 2001         Log()<<kDEBUG<<
Form(
"Dataset[%s] : ",DataInfo().GetName())<<
" Base Directory for " << GetMethodTypeName() << 
" does not exist yet--> created it" <<
Endl;
 
 2002         sdir = methodDir->
mkdir(defaultDir);
 
 2005         if (fModelPersistence) {
 
 2008            wfilePath.
Write( 
"TrainingPath" );
 
 2009            wfileName.
Write( 
"WeightFileName" );
 
 2013   Log()<<kDEBUG<<
Form(
"Dataset[%s] : ",DataInfo().GetName())<<
" Base Directory for " << GetMethodTypeName() << 
" existed, return it.." <<
Endl;
 
 2023   if (fMethodBaseDir != 0) {
 
 2024      return fMethodBaseDir;
 
 2027   const char *datasetName = DataInfo().
GetName();
 
 2029   Log() << kDEBUG << 
Form(
"Dataset[%s] : ", datasetName) << 
" Base Directory for " << GetMethodTypeName()
 
 2030         << 
" not set yet --> check if already there.." << 
Endl;
 
 2033   if (!factoryBaseDir) 
return nullptr;
 
 2034   fMethodBaseDir = factoryBaseDir->
GetDirectory(datasetName);
 
 2035   if (!fMethodBaseDir) {
 
 2036      fMethodBaseDir = factoryBaseDir->
mkdir(datasetName, 
Form(
"Base directory for dataset %s", datasetName));
 
 2037      if (!fMethodBaseDir) {
 
 2038         Log() << kFATAL << 
"Can not create dir " << datasetName;
 
 2041   TString methodTypeDir = 
Form(
"Method_%s", GetMethodTypeName().Data());
 
 2042   fMethodBaseDir = fMethodBaseDir->GetDirectory(methodTypeDir.
Data());
 
 2044   if (!fMethodBaseDir) {
 
 2046      TString methodTypeDirHelpStr = 
Form(
"Directory for all %s methods", GetMethodTypeName().Data());
 
 2047      fMethodBaseDir = datasetDir->
mkdir(methodTypeDir.
Data(), methodTypeDirHelpStr);
 
 2048      Log() << kDEBUG << 
Form(
"Dataset[%s] : ", datasetName) << 
" Base Directory for " << GetMethodName()
 
 2049            << 
" does not exist yet--> created it" << 
Endl;
 
 2052   Log() << kDEBUG << 
Form(
"Dataset[%s] : ", datasetName)
 
 2053         << 
"Return from MethodBaseDir() after creating base directory " << 
Endl;
 
 2054   return fMethodBaseDir;
 
 2071   fWeightFile = theWeightFile;
 
 2079   if (fWeightFile!=
"") 
return fWeightFile;
 
 2084   TString wFileDir(GetWeightFileDir());
 
 2085   TString wFileName = GetJobName() + 
"_" + GetMethodName() +
 
 2087   if (wFileDir.
IsNull() )  
return wFileName;
 
 2089   return ( wFileDir + (wFileDir[wFileDir.
Length()-1]==
'/' ? 
"" : 
"/")
 
 2101   if (0 != fMVAPdfS) {
 
 2102      fMVAPdfS->GetOriginalHist()->Write();
 
 2103      fMVAPdfS->GetSmoothedHist()->Write();
 
 2104      fMVAPdfS->GetPDFHist()->Write();
 
 2106   if (0 != fMVAPdfB) {
 
 2107      fMVAPdfB->GetOriginalHist()->Write();
 
 2108      fMVAPdfB->GetSmoothedHist()->Write();
 
 2109      fMVAPdfB->GetPDFHist()->Write();
 
 2115      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<WriteEvaluationHistosToFile> Unknown result: " 
 2116            << GetMethodName() << (treetype==
Types::kTraining?
"/kTraining":
"/kTesting")
 
 2117            << 
"/kMaxAnalysisType" << 
Endl;
 
 2122         GetTransformationHandler().PlotVariables (GetEventCollection( 
Types::kTesting ), BaseDir() );
 
 2124         Log() << kINFO << 
TString::Format(
"Dataset[%s] : ",DataInfo().GetName())
 
 2125               << 
" variable plots are not produces ! The number of variables is " << DataInfo().GetNVariables()
 
 2145   fin.getline(buf,512);
 
 2147   if (
line.BeginsWith(
"TMVA Release")) {
 
 2151      std::stringstream s(code.
Data());
 
 2152      s >> fTMVATrainingVersion;
 
 2153      Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"MVA method was trained with TMVA Version: " << GetTrainingTMVAVersionString() << 
Endl;
 
 2155   if (
line.BeginsWith(
"ROOT Release")) {
 
 2159      std::stringstream s(code.
Data());
 
 2160      s >> fROOTTrainingVersion;
 
 2161      Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"MVA method was trained with ROOT Version: " << GetTrainingROOTVersionString() << 
Endl;
 
 2163   if (
line.BeginsWith(
"Analysis type")) {
 
 2167      std::stringstream s(code.
Data());
 
 2168      std::string analysisType;
 
 2170      if      (analysisType == 
"regression"     || analysisType == 
"Regression")     SetAnalysisType( 
Types::kRegression );
 
 2171      else if (analysisType == 
"classification" || analysisType == 
"Classification") SetAnalysisType( 
Types::kClassification );
 
 2172      else if (analysisType == 
"multiclass"     || analysisType == 
"Multiclass")     SetAnalysisType( 
Types::kMulticlass );
 
 2173      else Log() << kFATAL << 
"Analysis type " << analysisType << 
" from weight-file not known!" << std::endl;
 
 2175      Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Method was trained for " 
 2195   if (mvaRes==0 || mvaRes->
GetSize()==0) {
 
 2196      Log() << kERROR<<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<CreateMVAPdfs> No result of classifier testing available" << 
Endl;
 
 2203   TH1* histMVAPdfS = 
new TH1D( GetMethodTypeName() + 
"_tr_S", GetMethodTypeName() + 
"_tr_S",
 
 2204                                fMVAPdfS->GetHistNBins( mvaRes->
GetSize() ), minVal, maxVal );
 
 2205   TH1* histMVAPdfB = 
new TH1D( GetMethodTypeName() + 
"_tr_B", GetMethodTypeName() + 
"_tr_B",
 
 2206                                fMVAPdfB->GetHistNBins( mvaRes->
GetSize() ), minVal, maxVal );
 
 2210   histMVAPdfS->
Sumw2();
 
 2211   histMVAPdfB->
Sumw2();
 
 2216      Double_t theWeight = Data()->GetEvent(ievt)->GetWeight();
 
 2218      if (DataInfo().IsSignal(Data()->GetEvent(ievt))) histMVAPdfS->
Fill( theVal, theWeight );
 
 2219      else                                             histMVAPdfB->
Fill( theVal, theWeight );
 
 2228        histMVAPdfS->
Write();
 
 2229        histMVAPdfB->
Write();
 
 2232   fMVAPdfS->BuildPDF   ( histMVAPdfS );
 
 2233   fMVAPdfB->BuildPDF   ( histMVAPdfB );
 
 2234   fMVAPdfS->ValidatePDF( histMVAPdfS );
 
 2235   fMVAPdfB->ValidatePDF( histMVAPdfB );
 
 2237   if (DataInfo().GetNClasses() == 2) { 
 
 2238      Log() << kINFO<<
Form(
"Dataset[%s] : ",DataInfo().GetName())
 
 2239            << 
Form( 
"<CreateMVAPdfs> Separation from histogram (PDF): %1.3f (%1.3f)",
 
 2240                     GetSeparation( histMVAPdfS, histMVAPdfB ), GetSeparation( fMVAPdfS, fMVAPdfB ) )
 
 2252   if (!fMVAPdfS || !fMVAPdfB) {
 
 2253      Log() << kINFO<<
Form(
"Dataset[%s] : ",DataInfo().GetName()) << 
"<GetProba> MVA PDFs for Signal and Background don't exist yet, we'll create them on demand" << 
Endl;
 
 2256   Double_t sigFraction = DataInfo().GetTrainingSumSignalWeights() / (DataInfo().GetTrainingSumSignalWeights() + DataInfo().GetTrainingSumBackgrWeights() );
 
 2259   return GetProba(mvaVal,sigFraction);
 
 2267   if (!fMVAPdfS || !fMVAPdfB) {
 
 2268      Log() << kWARNING <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetProba> MVA PDFs for Signal and Background don't exist" << 
Endl;
 
 2271   Double_t p_s = fMVAPdfS->GetVal( mvaVal );
 
 2272   Double_t p_b = fMVAPdfB->GetVal( mvaVal );
 
 2274   Double_t denom = p_s*ap_sig + p_b*(1 - ap_sig);
 
 2276   return (denom > 0) ? (p_s*ap_sig) / denom : -1;
 
 2289      Log() << kWARNING <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetRarity> Required MVA PDF for Signal or Background does not exist: " 
 2290            << 
"select option \"CreateMVAPdfs\"" << 
Endl;
 
 2305   Data()->SetCurrentType(
type);
 
 2315   else if (list->
GetSize() > 2) {
 
 2316      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetEfficiency> Wrong number of arguments" 
 2317            << 
" in string: " << theString
 
 2318            << 
" | required format, e.g., Efficiency:0.05, or empty string" << 
Endl;
 
 2326      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetEfficiency> Binning mismatch between signal and background histos" << 
Endl;
 
 2334   TH1 * effhist = results->
GetHist(
"MVA_HIGHBIN_S");
 
 2341   if (results->
DoesExist(
"MVA_EFF_S")==0) {
 
 2344      TH1* eff_s = 
new TH1D( GetTestvarName() + 
"_effS", GetTestvarName() + 
" (signal)",     fNbinsH, 
xmin, 
xmax );
 
 2345      TH1* eff_b = 
new TH1D( GetTestvarName() + 
"_effB", GetTestvarName() + 
" (background)", fNbinsH, 
xmin, 
xmax );
 
 2346      results->
Store(eff_s, 
"MVA_EFF_S");
 
 2347      results->
Store(eff_b, 
"MVA_EFF_B");
 
 2350      Int_t sign = (fCutOrientation == kPositive) ? +1 : -1;
 
 2354      for (
UInt_t ievt=0; ievt<Data()->GetNEvents(); ievt++) {
 
 2357         Bool_t  isSignal  = DataInfo().IsSignal(GetEvent(ievt));
 
 2358         Float_t theWeight = GetEvent(ievt)->GetWeight();
 
 2359         Float_t theVal    = (*mvaRes)[ievt];
 
 2362         TH1* theHist = isSignal ? eff_s : eff_b;
 
 2365         if (isSignal) nevtS+=theWeight;
 
 2369         if (sign > 0 && maxbin > fNbinsH) 
continue; 
 
 2370         if (sign < 0 && maxbin < 1      ) 
continue; 
 
 2371         if (sign > 0 && maxbin < 1      ) maxbin = 1;
 
 2372         if (sign < 0 && maxbin > fNbinsH) maxbin = fNbinsH;
 
 2377            for (
Int_t ibin=maxbin+1; ibin<=fNbinsH; ibin++) theHist->
AddBinContent( ibin , theWeight );
 
 2379            Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetEfficiency> Mismatch in sign" << 
Endl;
 
 2390      TH1* eff_BvsS = 
new TH1D( GetTestvarName() + 
"_effBvsS", GetTestvarName() + 
"", fNbins, 0, 1 );
 
 2391      results->
Store(eff_BvsS, 
"MVA_EFF_BvsS");
 
 2396      TH1* rej_BvsS = 
new TH1D( GetTestvarName() + 
"_rejBvsS", GetTestvarName() + 
"", fNbins, 0, 1 );
 
 2397      results->
Store(rej_BvsS);
 
 2399      rej_BvsS->
SetYTitle( 
"Backgr rejection (1-eff)" );
 
 2402      TH1* inveff_BvsS = 
new TH1D( GetTestvarName() + 
"_invBeffvsSeff",
 
 2403                                   GetTestvarName(), fNbins, 0, 1 );
 
 2404      results->
Store(inveff_BvsS);
 
 2406      inveff_BvsS->
SetYTitle( 
"Inverse backgr. eff (1/eff)" );
 
 2412         fSplRefS  = 
new TSpline1( 
"spline2_signal",     
new TGraph( eff_s ) );
 
 2413         fSplRefB  = 
new TSpline1( 
"spline2_background", 
new TGraph( eff_b ) );
 
 2427      for (
Int_t bini=1; bini<=fNbins; bini++) {
 
 2440         if (effB>std::numeric_limits<double>::epsilon())
 
 2449      Double_t effS = 0., rejB, effS_ = 0., rejB_ = 0.;
 
 2450      Int_t    nbins_ = 5000;
 
 2451      for (
Int_t bini=1; bini<=nbins_; bini++) {
 
 2454         effS = (bini - 0.5)/
Float_t(nbins_);
 
 2455         rejB = 1.0 - fSpleffBvsS->Eval( effS );
 
 2458         if ((effS - rejB)*(effS_ - rejB_) < 0) 
break;
 
 2465      SetSignalReferenceCut( cut );
 
 2470   if (0 == fSpleffBvsS) {
 
 2476   Double_t effS = 0, effB = 0, effS_ = 0, effB_ = 0;
 
 2477   Int_t    nbins_ = 1000;
 
 2483      for (
Int_t bini=1; bini<=nbins_; bini++) {
 
 2486         effS = (bini - 0.5)/
Float_t(nbins_);
 
 2487         effB = fSpleffBvsS->Eval( effS );
 
 2488         integral += (1.0 - effB);
 
 2502      for (
Int_t bini=1; bini<=nbins_; bini++) {
 
 2505         effS = (bini - 0.5)/
Float_t(nbins_);
 
 2506         effB = fSpleffBvsS->Eval( effS );
 
 2509         if ((effB - effBref)*(effB_ - effBref) <= 0) 
break;
 
 2515      effS = 0.5*(effS + effS_);
 
 2518      if (nevtS > 0) effSerr = 
TMath::Sqrt( effS*(1.0 - effS)/nevtS );
 
 2543      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetTrainingEfficiency> Wrong number of arguments" 
 2544            << 
" in string: " << theString
 
 2545            << 
" | required format, e.g., Efficiency:0.05" << 
Endl;
 
 2558      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetTrainingEfficiency> Binning mismatch between signal and background histos" 
 2566   TH1 * effhist = results->
GetHist(
"MVA_HIGHBIN_S");
 
 2571   if (results->
DoesExist(
"MVA_TRAIN_S")==0) {
 
 2577      TH1* mva_s_tr = 
new TH1D( GetTestvarName() + 
"_Train_S",GetTestvarName() + 
"_Train_S", fNbinsMVAoutput, fXmin, sxmax );
 
 2578      TH1* mva_b_tr = 
new TH1D( GetTestvarName() + 
"_Train_B",GetTestvarName() + 
"_Train_B", fNbinsMVAoutput, fXmin, sxmax );
 
 2579      results->
Store(mva_s_tr, 
"MVA_TRAIN_S");
 
 2580      results->
Store(mva_b_tr, 
"MVA_TRAIN_B");
 
 2585      TH1* mva_eff_tr_s = 
new TH1D( GetTestvarName() + 
"_trainingEffS", GetTestvarName() + 
" (signal)",
 
 2587      TH1* mva_eff_tr_b = 
new TH1D( GetTestvarName() + 
"_trainingEffB", GetTestvarName() + 
" (background)",
 
 2589      results->
Store(mva_eff_tr_s, 
"MVA_TRAINEFF_S");
 
 2590      results->
Store(mva_eff_tr_b, 
"MVA_TRAINEFF_B");
 
 2593      Int_t sign = (fCutOrientation == kPositive) ? +1 : -1;
 
 2595      std::vector<Double_t> mvaValues = GetMvaValues(0,Data()->GetNEvents());
 
 2596      assert( (
Long64_t) mvaValues.size() == Data()->GetNEvents());
 
 2599      for (
Int_t ievt=0; ievt<Data()->GetNEvents(); ievt++) {
 
 2601         Data()->SetCurrentEvent(ievt);
 
 2602         const Event* ev = GetEvent();
 
 2607         TH1* theEffHist = DataInfo().IsSignal(ev) ? mva_eff_tr_s : mva_eff_tr_b;
 
 2608         TH1* theClsHist = DataInfo().IsSignal(ev) ? mva_s_tr : mva_b_tr;
 
 2610         theClsHist->
Fill( theVal, theWeight );
 
 2614         if (sign > 0 && maxbin > fNbinsH) 
continue; 
 
 2615         if (sign < 0 && maxbin < 1      ) 
continue; 
 
 2616         if (sign > 0 && maxbin < 1      ) maxbin = 1;
 
 2617         if (sign < 0 && maxbin > fNbinsH) maxbin = fNbinsH;
 
 2619         if (sign > 0) 
for (
Int_t ibin=1;        ibin<=maxbin;  ibin++) theEffHist->
AddBinContent( ibin , theWeight );
 
 2620         else          for (
Int_t ibin=maxbin+1; ibin<=fNbinsH; ibin++) theEffHist->
AddBinContent( ibin , theWeight );
 
 2633      TH1* eff_bvss = 
new TH1D( GetTestvarName() + 
"_trainingEffBvsS", GetTestvarName() + 
"", fNbins, 0, 1 );
 
 2635      TH1* rej_bvss = 
new TH1D( GetTestvarName() + 
"_trainingRejBvsS", GetTestvarName() + 
"", fNbins, 0, 1 );
 
 2636      results->
Store(eff_bvss, 
"EFF_BVSS_TR");
 
 2637      results->
Store(rej_bvss, 
"REJ_BVSS_TR");
 
 2643         if (fSplTrainRefS) 
delete fSplTrainRefS;
 
 2644         if (fSplTrainRefB) 
delete fSplTrainRefB;
 
 2645         fSplTrainRefS  = 
new TSpline1( 
"spline2_signal",     
new TGraph( mva_eff_tr_s ) );
 
 2646         fSplTrainRefB  = 
new TSpline1( 
"spline2_background", 
new TGraph( mva_eff_tr_b ) );
 
 2659      fEffS = results->
GetHist(
"MVA_TRAINEFF_S");
 
 2660      for (
Int_t bini=1; bini<=fNbins; bini++) {
 
 2678      fSplTrainEffBvsS = 
new TSpline1( 
"effBvsS", 
new TGraph( eff_bvss ) );
 
 2682   if (0 == fSplTrainEffBvsS) 
return 0.0;
 
 2685   Double_t effS = 0., effB, effS_ = 0., effB_ = 0.;
 
 2686   Int_t    nbins_ = 1000;
 
 2687   for (
Int_t bini=1; bini<=nbins_; bini++) {
 
 2690      effS = (bini - 0.5)/
Float_t(nbins_);
 
 2691      effB = fSplTrainEffBvsS->Eval( effS );
 
 2694      if ((effB - effBref)*(effB_ - effBref) <= 0) 
break;
 
 2699   return 0.5*(effS + effS_); 
 
 2708   if (!resMulticlass) Log() << kFATAL<<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"unable to create pointer in GetMulticlassEfficiency, exiting."<<
Endl;
 
 2720   if (!resMulticlass) Log() << kFATAL<< 
"unable to create pointer in GetMulticlassTrainingEfficiency, exiting."<<
Endl;
 
 2722   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Determine optimal multiclass cuts for training data..." << 
Endl;
 
 2723   for (
UInt_t icls = 0; icls<DataInfo().GetNClasses(); ++icls) {
 
 2754      Log() << kFATAL << 
"Cannot get confusion matrix for non-multiclass analysis." << std::endl;
 
 2758   Data()->SetCurrentType(
type);
 
 2762   if (resMulticlass == 
nullptr) {
 
 2763      Log() << kFATAL << 
Form(
"Dataset[%s] : ", DataInfo().GetName())
 
 2764            << 
"unable to create pointer in GetMulticlassEfficiency, exiting." << 
Endl;
 
 2779   Double_t rms = sqrt( fRmsS*fRmsS + fRmsB*fRmsB );
 
 2781   return (rms > 0) ? 
TMath::Abs(fMeanS - fMeanB)/rms : 0;
 
 2805   if ((!pdfS && pdfB) || (pdfS && !pdfB))
 
 2806      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetSeparation> Mismatch in pdfs" << 
Endl;
 
 2807   if (!pdfS) pdfS = fSplS;
 
 2808   if (!pdfB) pdfB = fSplB;
 
 2810   if (!fSplS || !fSplB) {
 
 2811      Log()<<kDEBUG<<
Form(
"[%s] : ",DataInfo().GetName())<< 
"could not calculate the separation, distributions" 
 2812           << 
" fSplS or fSplB are not yet filled" << 
Endl;
 
 2827   if ((!histS && histB) || (histS && !histB))
 
 2828      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetROCIntegral(TH1D*, TH1D*)> Mismatch in hists" << 
Endl;
 
 2830   if (histS==0 || histB==0) 
return 0.;
 
 2843   for (
UInt_t i=0; i<nsteps; i++) {
 
 2849   return integral*step;
 
 2861   if ((!pdfS && pdfB) || (pdfS && !pdfB))
 
 2862      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetSeparation> Mismatch in pdfs" << 
Endl;
 
 2863   if (!pdfS) pdfS = fSplS;
 
 2864   if (!pdfB) pdfB = fSplB;
 
 2866   if (pdfS==0 || pdfB==0) 
return 0.;
 
 2875   for (
UInt_t i=0; i<nsteps; i++) {
 
 2879   return integral*step;
 
 2889                                                   Double_t& max_significance_value )
 const 
 2894   Double_t effS(0),effB(0),significance(0);
 
 2895   TH1D *temp_histogram = 
new TH1D(
"temp", 
"temp", fNbinsH, fXmin, fXmax );
 
 2897   if (SignalEvents <= 0 || BackgroundEvents <= 0) {
 
 2898      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<GetMaximumSignificance> " 
 2899            << 
"Number of signal or background events is <= 0 ==> abort" 
 2903   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Using ratio SignalEvents/BackgroundEvents = " 
 2904         << SignalEvents/BackgroundEvents << 
Endl;
 
 2909   if ( (eff_s==0) || (eff_b==0) ) {
 
 2910      Log() << kWARNING <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Efficiency histograms empty !" << 
Endl;
 
 2911      Log() << kWARNING <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"no maximum cut found, return 0" << 
Endl;
 
 2915   for (
Int_t bin=1; bin<=fNbinsH; bin++) {
 
 2920      significance = sqrt(SignalEvents)*( effS )/sqrt( effS + ( BackgroundEvents / SignalEvents) * effB  );
 
 2930   delete temp_histogram;
 
 2932   Log() << kINFO <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"Optimal cut at      : " << max_significance << 
Endl;
 
 2933   Log() << kINFO<<
Form(
"Dataset[%s] : ",DataInfo().GetName()) << 
"Maximum significance: " << max_significance_value << 
Endl;
 
 2935   return max_significance;
 
 2949   Data()->SetCurrentType(treeType);
 
 2951   Long64_t entries = Data()->GetNEvents();
 
 2955      Log() << kFATAL <<
Form(
"Dataset[%s] : ",DataInfo().GetName())<< 
"<CalculateEstimator> Wrong tree type: " << treeType << 
Endl;
 
 2958   UInt_t varIndex = DataInfo().FindVarIndex( theVarName );
 
 2972   for (
Int_t ievt = 0; ievt < entries; ievt++) {
 
 2974      const Event* ev = GetEvent(ievt);
 
 2979      if (DataInfo().IsSignal(ev)) {
 
 2981         meanS               += weight*theVar;
 
 2982         rmsS                += weight*theVar*theVar;
 
 2986         meanB               += weight*theVar;
 
 2987         rmsB                += weight*theVar*theVar;
 
 2993   meanS = meanS/sumwS;
 
 2994   meanB = meanB/sumwB;
 
 2998   Data()->SetCurrentType(previousTreeType);
 
 3008   if (theClassFileName == 
"")
 
 3009      classFileName = GetWeightFileDir() + 
"/" + GetJobName() + 
"_" + GetMethodName() + 
".class.C";
 
 3011      classFileName = theClassFileName;
 
 3015   TString tfname( classFileName );
 
 3017    << 
"Creating standalone class: " 
 3020   std::ofstream fout( classFileName );
 
 3022      Log() << kFATAL << 
"<MakeClass> Unable to open file: " << classFileName << 
Endl;
 
 3027   fout << 
"// Class: " << className << std::endl;
 
 3028   fout << 
"// Automatically generated by MethodBase::MakeClass" << std::endl << 
"//" << std::endl;
 
 3032   fout << 
"/* configuration options =====================================================" << std::endl << std::endl;
 
 3033   WriteStateToStream( fout );
 
 3035   fout << 
"============================================================================ */" << std::endl;
 
 3038   fout << 
"" << std::endl;
 
 3039   fout << 
"#include <array>" << std::endl;
 
 3040   fout << 
"#include <vector>" << std::endl;
 
 3041   fout << 
"#include <cmath>" << std::endl;
 
 3042   fout << 
"#include <string>" << std::endl;
 
 3043   fout << 
"#include <iostream>" << std::endl;
 
 3044   fout << 
"" << std::endl;
 
 3047   this->MakeClassSpecificHeader( fout, className );
 
 3049   fout << 
"#ifndef IClassifierReader__def" << std::endl;
 
 3050   fout << 
"#define IClassifierReader__def" << std::endl;
 
 3052   fout << 
"class IClassifierReader {" << std::endl;
 
 3054   fout << 
" public:" << std::endl;
 
 3056   fout << 
"   // constructor" << std::endl;
 
 3057   fout << 
"   IClassifierReader() : fStatusIsClean( true ) {}" << std::endl;
 
 3058   fout << 
"   virtual ~IClassifierReader() {}" << std::endl;
 
 3060   fout << 
"   // return classifier response" << std::endl;
 
 3062      fout << 
"   virtual std::vector<double> GetMulticlassValues( const std::vector<double>& inputValues ) const = 0;" << std::endl;
 
 3064      fout << 
"   virtual double GetMvaValue( const std::vector<double>& inputValues ) const = 0;" << std::endl;
 
 3067   fout << 
"   // returns classifier status" << std::endl;
 
 3068   fout << 
"   bool IsStatusClean() const { return fStatusIsClean; }" << std::endl;
 
 3070   fout << 
" protected:" << std::endl;
 
 3072   fout << 
"   bool fStatusIsClean;" << std::endl;
 
 3073   fout << 
"};" << std::endl;
 
 3075   fout << 
"#endif" << std::endl;
 
 3077   fout << 
"class " << className << 
" : public IClassifierReader {" << std::endl;
 
 3079   fout << 
" public:" << std::endl;
 
 3081   fout << 
"   // constructor" << std::endl;
 
 3082   fout << 
"   " << className << 
"( std::vector<std::string>& theInputVars )" << std::endl;
 
 3083   fout << 
"      : IClassifierReader()," << std::endl;
 
 3084   fout << 
"        fClassName( \"" << className << 
"\" )," << std::endl;
 
 3085   fout << 
"        fNvars( " << GetNvar() << 
" )" << std::endl;
 
 3086   fout << 
"   {" << std::endl;
 
 3087   fout << 
"      // the training input variables" << std::endl;
 
 3088   fout << 
"      const char* inputVars[] = { ";
 
 3089   for (
UInt_t ivar=0; ivar<GetNvar(); ivar++) {
 
 3090      fout << 
"\"" << GetOriginalVarName(ivar) << 
"\"";
 
 3091      if (ivar<GetNvar()-1) fout << 
", ";
 
 3093   fout << 
" };" << std::endl;
 
 3095   fout << 
"      // sanity checks" << std::endl;
 
 3096   fout << 
"      if (theInputVars.size() <= 0) {" << std::endl;
 
 3097   fout << 
"         std::cout << \"Problem in class \\\"\" << fClassName << \"\\\": empty input vector\" << std::endl;" << std::endl;
 
 3098   fout << 
"         fStatusIsClean = false;" << std::endl;
 
 3099   fout << 
"      }" << std::endl;
 
 3101   fout << 
"      if (theInputVars.size() != fNvars) {" << std::endl;
 
 3102   fout << 
"         std::cout << \"Problem in class \\\"\" << fClassName << \"\\\": mismatch in number of input values: \"" << std::endl;
 
 3103   fout << 
"                   << theInputVars.size() << \" != \" << fNvars << std::endl;" << std::endl;
 
 3104   fout << 
"         fStatusIsClean = false;" << std::endl;
 
 3105   fout << 
"      }" << std::endl;
 
 3107   fout << 
"      // validate input variables" << std::endl;
 
 3108   fout << 
"      for (size_t ivar = 0; ivar < theInputVars.size(); ivar++) {" << std::endl;
 
 3109   fout << 
"         if (theInputVars[ivar] != inputVars[ivar]) {" << std::endl;
 
 3110   fout << 
"            std::cout << \"Problem in class \\\"\" << fClassName << \"\\\": mismatch in input variable names\" << std::endl" << std::endl;
 
 3111   fout << 
"                      << \" for variable [\" << ivar << \"]: \" << theInputVars[ivar].c_str() << \" != \" << inputVars[ivar] << std::endl;" << std::endl;
 
 3112   fout << 
"            fStatusIsClean = false;" << std::endl;
 
 3113   fout << 
"         }" << std::endl;
 
 3114   fout << 
"      }" << std::endl;
 
 3116   fout << 
"      // initialize min and max vectors (for normalisation)" << std::endl;
 
 3117   for (
UInt_t ivar = 0; ivar < GetNvar(); ivar++) {
 
 3118      fout << 
"      fVmin[" << ivar << 
"] = " << std::setprecision(15) << GetXmin( ivar ) << 
";" << std::endl;
 
 3119      fout << 
"      fVmax[" << ivar << 
"] = " << std::setprecision(15) << GetXmax( ivar ) << 
";" << std::endl;
 
 3122   fout << 
"      // initialize input variable types" << std::endl;
 
 3123   for (
UInt_t ivar=0; ivar<GetNvar(); ivar++) {
 
 3124      fout << 
"      fType[" << ivar << 
"] = \'" << DataInfo().GetVariableInfo(ivar).GetVarType() << 
"\';" << std::endl;
 
 3127   fout << 
"      // initialize constants" << std::endl;
 
 3128   fout << 
"      Initialize();" << std::endl;
 
 3130   if (GetTransformationHandler().GetTransformationList().GetSize() != 0) {
 
 3131      fout << 
"      // initialize transformation" << std::endl;
 
 3132      fout << 
"      InitTransform();" << std::endl;
 
 3134   fout << 
"   }" << std::endl;
 
 3136   fout << 
"   // destructor" << std::endl;
 
 3137   fout << 
"   virtual ~" << className << 
"() {" << std::endl;
 
 3138   fout << 
"      Clear(); // method-specific" << std::endl;
 
 3139   fout << 
"   }" << std::endl;
 
 3141   fout << 
"   // the classifier response" << std::endl;
 
 3142   fout << 
"   // \"inputValues\" is a vector of input values in the same order as the" << std::endl;
 
 3143   fout << 
"   // variables given to the constructor" << std::endl;
 
 3145      fout << 
"   std::vector<double> GetMulticlassValues( const std::vector<double>& inputValues ) const override;" << std::endl;
 
 3147      fout << 
"   double GetMvaValue( const std::vector<double>& inputValues ) const override;" << std::endl;
 
 3150   fout << 
" private:" << std::endl;
 
 3152   fout << 
"   // method-specific destructor" << std::endl;
 
 3153   fout << 
"   void Clear();" << std::endl;
 
 3155   if (GetTransformationHandler().GetTransformationList().GetSize()!=0) {
 
 3156      fout << 
"   // input variable transformation" << std::endl;
 
 3157      GetTransformationHandler().MakeFunction(fout, className,1);
 
 3158      fout << 
"   void InitTransform();" << std::endl;
 
 3159      fout << 
"   void Transform( std::vector<double> & iv, int sigOrBgd ) const;" << std::endl;
 
 3162   fout << 
"   // common member variables" << std::endl;
 
 3163   fout << 
"   const char* fClassName;" << std::endl;
 
 3165   fout << 
"   const size_t fNvars;" << std::endl;
 
 3166   fout << 
"   size_t GetNvar()           const { return fNvars; }" << std::endl;
 
 3167   fout << 
"   char   GetType( int ivar ) const { return fType[ivar]; }" << std::endl;
 
 3169   fout << 
"   // normalisation of input variables" << std::endl;
 
 3170   fout << 
"   double fVmin[" << GetNvar() << 
"];" << std::endl;
 
 3171   fout << 
"   double fVmax[" << GetNvar() << 
"];" << std::endl;
 
 3172   fout << 
"   double NormVariable( double x, double xmin, double xmax ) const {" << std::endl;
 
 3173   fout << 
"      // normalise to output range: [-1, 1]" << std::endl;
 
 3174   fout << 
"      return 2*(x - xmin)/(xmax - xmin) - 1.0;" << std::endl;
 
 3175   fout << 
"   }" << std::endl;
 
 3177   fout << 
"   // type of input variable: 'F' or 'I'" << std::endl;
 
 3178   fout << 
"   char   fType[" << GetNvar() << 
"];" << std::endl;
 
 3180   fout << 
"   // initialize internal variables" << std::endl;
 
 3181   fout << 
"   void Initialize();" << std::endl;
 
 3183      fout << 
"   std::vector<double> GetMulticlassValues__( const std::vector<double>& inputValues ) const;" << std::endl;
 
 3185      fout << 
"   double GetMvaValue__( const std::vector<double>& inputValues ) const;" << std::endl;
 
 3187   fout << 
"" << std::endl;
 
 3188   fout << 
"   // private members (method specific)" << std::endl;
 
 3191   MakeClassSpecific( fout, className );
 
 3194      fout << 
"inline std::vector<double> " << className <<  
"::GetMulticlassValues( const std::vector<double>& inputValues ) const" << std::endl;
 
 3196      fout << 
"inline double " << className << 
"::GetMvaValue( const std::vector<double>& inputValues ) const" << std::endl;
 
 3198   fout << 
"{" << std::endl;
 
 3199   fout << 
"   // classifier response value" << std::endl;
 
 3201      fout << 
"   std::vector<double> retval;" << std::endl;
 
 3203      fout << 
"   double retval = 0;" << std::endl;
 
 3206   fout << 
"   // classifier response, sanity check first" << std::endl;
 
 3207   fout << 
"   if (!IsStatusClean()) {" << std::endl;
 
 3208   fout << 
"      std::cout << \"Problem in class \\\"\" << fClassName << \"\\\": cannot return classifier response\"" << std::endl;
 
 3209   fout << 
"                << \" because status is dirty\" << std::endl;" << std::endl;
 
 3210   fout << 
"   }" << std::endl;
 
 3211   fout << 
"   else {" << std::endl;
 
 3212   if (IsNormalised()) {
 
 3213      fout << 
"         // normalise variables" << std::endl;
 
 3214      fout << 
"         std::vector<double> iV;" << std::endl;
 
 3215      fout << 
"         iV.reserve(inputValues.size());" << std::endl;
 
 3216      fout << 
"         int ivar = 0;" << std::endl;
 
 3217      fout << 
"         for (std::vector<double>::const_iterator varIt = inputValues.begin();" << std::endl;
 
 3218      fout << 
"              varIt != inputValues.end(); varIt++, ivar++) {" << std::endl;
 
 3219      fout << 
"            iV.push_back(NormVariable( *varIt, fVmin[ivar], fVmax[ivar] ));" << std::endl;
 
 3220      fout << 
"         }" << std::endl;
 
 3221      if (GetTransformationHandler().GetTransformationList().GetSize() != 0 && GetMethodType() != 
Types::kLikelihood &&
 
 3223         fout << 
"         Transform( iV, -1 );" << std::endl;
 
 3227         fout << 
"         retval = GetMulticlassValues__( iV );" << std::endl;
 
 3229         fout << 
"         retval = GetMvaValue__( iV );" << std::endl;
 
 3232      if (GetTransformationHandler().GetTransformationList().GetSize() != 0 && GetMethodType() != 
Types::kLikelihood &&
 
 3234         fout << 
"         std::vector<double> iV(inputValues);" << std::endl;
 
 3235         fout << 
"         Transform( iV, -1 );" << std::endl;
 
 3237            fout << 
"         retval = GetMulticlassValues__( iV );" << std::endl;
 
 3239            fout << 
"         retval = GetMvaValue__( iV );" << std::endl;
 
 3243            fout << 
"         retval = GetMulticlassValues__( inputValues );" << std::endl;
 
 3245            fout << 
"         retval = GetMvaValue__( inputValues );" << std::endl;
 
 3249   fout << 
"   }" << std::endl;
 
 3251   fout << 
"   return retval;" << std::endl;
 
 3252   fout << 
"}" << std::endl;
 
 3255   if (GetTransformationHandler().GetTransformationList().GetSize()!=0)
 
 3256      GetTransformationHandler().MakeFunction(fout, className,2);
 
 3268   std::streambuf* cout_sbuf = std::cout.rdbuf(); 
 
 3269   std::ofstream* o = 0;
 
 3270   if (
gConfig().WriteOptionsReference()) {
 
 3271      Log() << kINFO << 
"Print Help message for class " << GetName() << 
" into file: " << GetReferenceFile() << 
Endl;
 
 3272      o = 
new std::ofstream( GetReferenceFile(), std::ios::app );
 
 3274         Log() << kFATAL << 
"<PrintHelpMessage> Unable to append to output file: " << GetReferenceFile() << 
Endl;
 
 3276      std::cout.rdbuf( o->rdbuf() ); 
 
 3281      Log() << kINFO << 
Endl;
 
 3283            << 
"================================================================" 
 3287            << 
"H e l p   f o r   M V A   m e t h o d   [ " << GetName() << 
" ] :" 
 3292      Log() << 
"Help for MVA method [ " << GetName() << 
" ] :" << 
Endl;
 
 3300      Log() << 
"<Suppress this message by specifying \"!H\" in the booking option>" << 
Endl;
 
 3302            << 
"================================================================" 
 3309      Log() << 
"# End of Message___" << 
Endl;
 
 3312   std::cout.rdbuf( cout_sbuf ); 
 
 3327      retval = fSplRefS->Eval( theCut );
 
 3329   else retval = fEffS->GetBinContent( fEffS->FindBin( theCut ) );
 
 3338   if      (theCut-fXmin < eps) retval = (GetCutOrientation() == kPositive) ? 1.0 : 0.0;
 
 3339   else if (fXmax-theCut < eps) retval = (GetCutOrientation() == kPositive) ? 0.0 : 1.0;
 
 3352   if (GetTransformationHandler().GetTransformationList().GetEntries() <= 0) {
 
 3353      return (Data()->GetEventCollection(
type));
 
 3360   if (fEventCollections.at(idx) == 0) {
 
 3361      fEventCollections.at(idx) = &(Data()->GetEventCollection(
type));
 
 3362      fEventCollections.at(idx) = GetTransformationHandler().CalcTransformations(*(fEventCollections.at(idx)),
kTRUE);
 
 3364   return *(fEventCollections.at(idx));
 
 3372   UInt_t a = GetTrainingTMVAVersionCode() & 0xff0000; 
a>>=16;
 
 3373   UInt_t b = GetTrainingTMVAVersionCode() & 0x00ff00; 
b>>=8;
 
 3374   UInt_t c = GetTrainingTMVAVersionCode() & 0x0000ff;
 
 3384   UInt_t a = GetTrainingROOTVersionCode() & 0xff0000; 
a>>=16;
 
 3385   UInt_t b = GetTrainingROOTVersionCode() & 0x00ff00; 
b>>=8;
 
 3386   UInt_t c = GetTrainingROOTVersionCode() & 0x0000ff;
 
 3397   if (mvaRes != NULL) {
 
 3400      TH1D *mva_s_tr = 
dynamic_cast<TH1D*
> (mvaRes->
GetHist(
"MVA_TRAIN_S"));
 
 3401      TH1D *mva_b_tr = 
dynamic_cast<TH1D*
> (mvaRes->
GetHist(
"MVA_TRAIN_B"));
 
 3403      if ( !mva_s || !mva_b || !mva_s_tr || !mva_b_tr) 
return -1;
 
 3405      if (SorB == 
's' || SorB == 
'S')
 
const Bool_t Use_Splines_for_Eff_
 
const Int_t NBIN_HIST_HIGH
 
#define ROOT_VERSION_CODE
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h length
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
 
Option_t Option_t TPoint TPoint const char y2
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
 
Option_t Option_t TPoint TPoint const char y1
 
TMatrixT< Double_t > TMatrixD
 
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
 
R__EXTERN TSystem * gSystem
 
#define TMVA_VERSION_CODE
 
Class to manage histogram axis.
 
Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) override
Write all objects in this collection.
 
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
 
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
 
const char * AsString() const
Return the date & time as a string (ctime() format).
 
TObject * Get(const char *namecycle) override
Return pointer to object identified by namecycle.
 
Describe directory structure in memory.
 
virtual TDirectory * GetDirectory(const char *namecycle, Bool_t printError=false, const char *funcname="GetDirectory")
Find a directory using apath.
 
virtual Bool_t cd()
Change current directory to "this" directory.
 
virtual TDirectory * mkdir(const char *name, const char *title="", Bool_t returnExistingDirectory=kFALSE)
Create a sub-directory "a" or a hierarchy of sub-directories "a/b/c/...".
 
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
 
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
 
void Close(Option_t *option="") override
Close a file.
 
A TGraph is an object made of two arrays X and Y with npoints each.
 
1-D histogram with a double per channel (see TH1 documentation)}
 
1-D histogram with a float per channel (see TH1 documentation)}
 
TH1 is the base class of all histogram classes in ROOT.
 
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
 
virtual void AddBinContent(Int_t bin)
Increment bin content by 1.
 
virtual Double_t GetMean(Int_t axis=1) const
For axis = 1,2 or 3 returns the mean value of the histogram along X,Y or Z axis.
 
virtual void SetXTitle(const char *title)
 
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
 
virtual Double_t GetMaximum(Double_t maxval=FLT_MAX) const
Return maximum value smaller than maxval of bins in the range, unless the value has been overridden b...
 
virtual Int_t GetNbinsX() const
 
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
 
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
 
virtual Int_t GetMaximumBin() const
Return location of bin with maximum value in the range.
 
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
 
virtual Int_t GetQuantiles(Int_t nprobSum, Double_t *q, const Double_t *probSum=nullptr)
Compute Quantiles for this histogram Quantile x_q of a probability distribution Function F is defined...
 
virtual void SetYTitle(const char *title)
 
virtual void Scale(Double_t c1=1, Option_t *option="")
Multiply this histogram by a constant c1.
 
virtual Int_t FindBin(Double_t x, Double_t y=0, Double_t z=0)
Return Global bin number corresponding to x,y,z.
 
virtual Double_t KolmogorovTest(const TH1 *h2, Option_t *option="") const
Statistical test of compatibility in shape between this histogram and h2, using Kolmogorov test.
 
virtual void Sumw2(Bool_t flag=kTRUE)
Create structure to store sum of squares of weights.
 
static Bool_t AddDirectoryStatus()
Static function: cannot be inlined on Windows/NT.
 
2-D histogram with a float per channel (see TH1 documentation)}
 
Int_t Fill(Double_t) override
Invalid Fill method.
 
TObject * At(Int_t idx) const override
Returns the object at position idx. Returns 0 if idx is out of range.
 
Class that contains all the information of a class.
 
TString fWeightFileExtension
 
Int_t fMaxNumOfAllowedVariables
 
VariablePlotting & GetVariablePlotting()
 
class TMVA::Config::VariablePlotting fVariablePlotting
 
MsgLogger * fLogger
! message logger
 
Class that contains all the data information.
 
Class that contains all the data information.
 
Float_t GetValue(UInt_t ivar) const
return value of i'th variable
 
Double_t GetWeight() const
return the event weight - depending on whether the flag IgnoreNegWeightsInTraining is or not.
 
static void SetIsTraining(Bool_t)
when this static function is called, it sets the flag whether events with negative event weight shoul...
 
Float_t GetTarget(UInt_t itgt) const
 
static void SetIgnoreNegWeightsInTraining(Bool_t)
when this static function is called, it sets the flag whether events with negative event weight shoul...
 
Interface for all concrete MVA method implementations.
 
void Init(std::vector< TString > &graphTitles)
This function gets some title and it creates a TGraph for every title.
 
IPythonInteractive()
standard constructor
 
~IPythonInteractive()
standard destructor
 
void ClearGraphs()
This function sets the point number to 0 for all graphs.
 
void AddPoint(Double_t x, Double_t y1, Double_t y2)
This function is used only in 2 TGraph case, and it will add new data points to graphs.
 
Virtual base Class for all MVA method.
 
TDirectory * MethodBaseDir() const
returns the ROOT directory where all instances of the corresponding MVA method are stored
 
virtual Double_t GetKSTrainingVsTest(Char_t SorB, TString opt="X")
 
MethodBase(const TString &jobName, Types::EMVA methodType, const TString &methodTitle, DataSetInfo &dsi, const TString &theOption="")
standard constructor
 
virtual Double_t GetMvaValue(Double_t *errLower=nullptr, Double_t *errUpper=nullptr)=0
 
virtual Double_t GetSeparation(TH1 *, TH1 *) const
compute "separation" defined as
 
void ReadClassesFromXML(void *clsnode)
read number of classes from XML
 
void SetWeightFileDir(TString fileDir)
set directory of weight file
 
void WriteStateToXML(void *parent) const
general method used in writing the header of the weight files where the used variables,...
 
void DeclareBaseOptions()
define the options (their key words) that can be set in the option string here the options valid for ...
 
virtual void TestRegression(Double_t &bias, Double_t &biasT, Double_t &dev, Double_t &devT, Double_t &rms, Double_t &rmsT, Double_t &mInf, Double_t &mInfT, Double_t &corr, Types::ETreeType type)
calculate <sum-of-deviation-squared> of regression output versus "true" value from test sample
 
virtual void DeclareCompatibilityOptions()
options that are used ONLY for the READER to ensure backward compatibility they are hence without any...
 
virtual Double_t GetSignificance() const
compute significance of mean difference
 
virtual Double_t GetProba(const Event *ev)
 
const char * GetName() const
 
virtual TMatrixD GetMulticlassConfusionMatrix(Double_t effB, Types::ETreeType type)
Construct a confusion matrix for a multiclass classifier.
 
void PrintHelpMessage() const
prints out method-specific help method
 
virtual void WriteEvaluationHistosToFile(Types::ETreeType treetype)
writes all MVA evaluation histograms to file
 
virtual void TestMulticlass()
test multiclass classification
 
const std::vector< TMVA::Event * > & GetEventCollection(Types::ETreeType type)
returns the event collection (i.e.
 
virtual std::vector< Double_t > GetDataMvaValues(DataSet *data=nullptr, Long64_t firstEvt=0, Long64_t lastEvt=-1, Bool_t logProgress=false)
get all the MVA values for the events of the given Data type
 
void SetupMethod()
setup of methods
 
TDirectory * BaseDir() const
returns the ROOT directory where info/histograms etc of the corresponding MVA method instance are sto...
 
virtual std::vector< Float_t > GetMulticlassEfficiency(std::vector< std::vector< Float_t > > &purity)
 
void AddInfoItem(void *gi, const TString &name, const TString &value) const
xml writing
 
virtual void AddClassifierOutputProb(Types::ETreeType type)
prepare tree branch with the method's discriminating variable
 
virtual Double_t GetEfficiency(const TString &, Types::ETreeType, Double_t &err)
fill background efficiency (resp.
 
TString GetTrainingTMVAVersionString() const
calculates the TMVA version string from the training version code on the fly
 
void Statistics(Types::ETreeType treeType, const TString &theVarName, Double_t &, Double_t &, Double_t &, Double_t &, Double_t &, Double_t &)
calculates rms,mean, xmin, xmax of the event variable this can be either done for the variables as th...
 
Bool_t GetLine(std::istream &fin, char *buf)
reads one line from the input stream checks for certain keywords and interprets the line if keywords ...
 
void ProcessSetup()
process all options the "CheckForUnusedOptions" is done in an independent call, since it may be overr...
 
virtual std::vector< Double_t > GetMvaValues(Long64_t firstEvt=0, Long64_t lastEvt=-1, Bool_t logProgress=false)
get all the MVA values for the events of the current Data type
 
virtual Bool_t IsSignalLike()
uses a pre-set cut on the MVA output (SetSignalReferenceCut and SetSignalReferenceCutOrientation) for...
 
virtual ~MethodBase()
destructor
 
virtual Double_t GetMaximumSignificance(Double_t SignalEvents, Double_t BackgroundEvents, Double_t &optimal_significance_value) const
plot significance, , curve for given number of signal and background events; returns cut for maximum ...
 
virtual Double_t GetTrainingEfficiency(const TString &)
 
void SetWeightFileName(TString)
set the weight file name (depreciated)
 
virtual void MakeClass(const TString &classFileName=TString("")) const
create reader class for method (classification only at present)
 
TString GetWeightFileName() const
retrieve weight file name
 
virtual void TestClassification()
initialization
 
void AddOutput(Types::ETreeType type, Types::EAnalysisType analysisType)
 
virtual void WriteMonitoringHistosToFile() const
write special monitoring histograms to file dummy implementation here --------------—
 
virtual void AddRegressionOutput(Types::ETreeType type)
prepare tree branch with the method's discriminating variable
 
void InitBase()
default initialization called by all constructors
 
virtual void GetRegressionDeviation(UInt_t tgtNum, Types::ETreeType type, Double_t &stddev, Double_t &stddev90Percent) const
 
void ReadStateFromXMLString(const char *xmlstr)
for reading from memory
 
void CreateMVAPdfs()
Create PDFs of the MVA output variables.
 
TString GetTrainingROOTVersionString() const
calculates the ROOT version string from the training version code on the fly
 
virtual Double_t GetValueForRoot(Double_t)
returns efficiency as function of cut
 
void ReadStateFromFile()
Function to write options and weights to file.
 
void WriteVarsToStream(std::ostream &tf, const TString &prefix="") const
write the list of variables (name, min, max) for a given data transformation method to the stream
 
void ReadVarsFromStream(std::istream &istr)
Read the variables (name, min, max) for a given data transformation method from the stream.
 
void ReadSpectatorsFromXML(void *specnode)
read spectator info from XML
 
void SetTestvarName(const TString &v="")
 
void ReadVariablesFromXML(void *varnode)
read variable info from XML
 
virtual std::map< TString, Double_t > OptimizeTuningParameters(TString fomType="ROCIntegral", TString fitType="FitGA")
call the Optimizer with the set of parameters and ranges that are meant to be tuned.
 
virtual std::vector< Float_t > GetMulticlassTrainingEfficiency(std::vector< std::vector< Float_t > > &purity)
 
void WriteStateToStream(std::ostream &tf) const
general method used in writing the header of the weight files where the used variables,...
 
virtual Double_t GetRarity(Double_t mvaVal, Types::ESBType reftype=Types::kBackground) const
compute rarity:
 
virtual void SetTuneParameters(std::map< TString, Double_t > tuneParameters)
set the tuning parameters according to the argument This is just a dummy .
 
void ReadStateFromStream(std::istream &tf)
read the header from the weight files of the different MVA methods
 
void AddVarsXMLTo(void *parent) const
write variable info to XML
 
void AddTargetsXMLTo(void *parent) const
write target info to XML
 
void ReadTargetsFromXML(void *tarnode)
read target info from XML
 
void ProcessBaseOptions()
the option string is decoded, for available options see "DeclareOptions"
 
void ReadStateFromXML(void *parent)
 
void NoErrorCalc(Double_t *const err, Double_t *const errUpper)
 
void WriteStateToFile() const
write options and weights to file note that each one text file for the main configuration information...
 
void AddClassesXMLTo(void *parent) const
write class info to XML
 
virtual void AddClassifierOutput(Types::ETreeType type)
prepare tree branch with the method's discriminating variable
 
void AddSpectatorsXMLTo(void *parent) const
write spectator info to XML
 
virtual Double_t GetROCIntegral(TH1D *histS, TH1D *histB) const
calculate the area (integral) under the ROC curve as a overall quality measure of the classification
 
virtual void AddMulticlassOutput(Types::ETreeType type)
prepare tree branch with the method's discriminating variable
 
virtual void CheckSetup()
check may be overridden by derived class (sometimes, eg, fitters are used which can only be implement...
 
void SetSource(const std::string &source)
 
PDF wrapper for histograms; uses user-defined spline interpolation.
 
Double_t GetVal(Double_t x) const
returns value PDF(x)
 
Double_t GetIntegral(Double_t xmin, Double_t xmax)
computes PDF integral within given ranges
 
Class that is the base-class for a vector of result.
 
void Resize(Int_t entries)
 
std::vector< Float_t > * GetValueVector()
 
void SetValue(Float_t value, Int_t ievt, Bool_t type)
set MVA response
 
Class which takes the results of a multiclass classification.
 
TMatrixD GetConfusionMatrix(Double_t effB)
Returns a confusion matrix where each class is pitted against each other.
 
Float_t GetAchievablePur(UInt_t cls)
 
std::vector< Double_t > GetBestMultiClassCuts(UInt_t targetClass)
calculate the best working point (optimal cut values) for the multiclass classifier
 
void CreateMulticlassHistos(TString prefix, Int_t nbins, Int_t nbins_high)
this function fills the mva response histos for multiclass classification
 
Float_t GetAchievableEff(UInt_t cls)
 
void CreateMulticlassPerformanceHistos(TString prefix)
Create performance graphs for this classifier a multiclass setting.
 
Class that is the base-class for a vector of result.
 
Class that is the base-class for a vector of result.
 
Bool_t DoesExist(const TString &alias) const
Returns true if there is an object stored in the result for a given alias, false otherwise.
 
void Store(TObject *obj, const char *alias=nullptr)
 
TH1 * GetHist(const TString &alias) const
 
TList * GetStorage() const
 
Root finding using Brents algorithm (translated from CERNLIB function RZERO)
 
Double_t Root(Double_t refValue)
Root finding using Brents algorithm; taken from CERNLIB function RZERO.
 
Linear interpolation of TGraph.
 
Timing information for training and evaluation of MVA methods.
 
Double_t ElapsedSeconds(void)
computes elapsed tim in seconds
 
TString GetElapsedTime(Bool_t Scientific=kTRUE)
returns pretty string with elapsed time
 
void DrawProgressBar(Int_t, const TString &comment="")
draws progress bar in color or B&W caution:
 
Singleton class for Global types used by TMVA.
 
@ kSignal
Never change this number - it is elsewhere assumed to be zero !
 
Class for type info of MVA input variable.
 
void ReadFromXML(void *varnode)
read VariableInfo from stream
 
const TString & GetExpression() const
 
void ReadFromStream(std::istream &istr)
read VariableInfo from stream
 
void AddToXML(void *varnode)
write class to XML
 
void SetExternalLink(void *p)
 
void * GetExternalLink() const
 
A TMultiGraph is a collection of TGraph (or derived) objects.
 
const char * GetName() const override
Returns name of object.
 
Collectable string class.
 
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
 
void ToLower()
Change string to lower-case.
 
Int_t Atoi() const
Return integer value of string.
 
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
 
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
 
const char * Data() const
 
TString & ReplaceAll(const TString &s1, const TString &s2)
 
Ssiz_t Last(char c) const
Find last occurrence of a character c.
 
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
 
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
 
virtual const char * GetBuildNode() const
Return the build node name.
 
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
Make a file system directory.
 
virtual const char * WorkingDirectory()
Return working directory.
 
virtual UserGroup_t * GetUserInfo(Int_t uid)
Returns all user info in the UserGroup_t structure.
 
void SaveDoc(XMLDocPointer_t xmldoc, const char *filename, Int_t layout=1)
store document content to file if layout<=0, no any spaces or newlines will be placed between xmlnode...
 
void FreeDoc(XMLDocPointer_t xmldoc)
frees allocated document data and deletes document itself
 
XMLNodePointer_t DocGetRootElement(XMLDocPointer_t xmldoc)
returns root node of document
 
XMLDocPointer_t NewDoc(const char *version="1.0")
creates new xml document with provided version
 
XMLDocPointer_t ParseFile(const char *filename, Int_t maxbuf=100000)
Parses content of file and tries to produce xml structures.
 
XMLDocPointer_t ParseString(const char *xmlstring)
parses content of string and tries to produce xml structures
 
void DocSetRootElement(XMLDocPointer_t xmldoc, XMLNodePointer_t xmlnode)
set main (root) node for document
 
void CreateVariableTransforms(const TString &trafoDefinition, TMVA::DataSetInfo &dataInfo, TMVA::TransformationHandler &transformationHandler, TMVA::MsgLogger &log)
 
MsgLogger & Endl(MsgLogger &ml)
 
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
 
Double_t Sqrt(Double_t x)
Returns the square root of x.
 
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
 
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.