29useTMVACNN = opt[0] 
if len(opt) > 0  
else False 
   30useKerasCNN = opt[1] 
if len(opt) > 1 
else False 
   31useTMVADNN = opt[2] 
if len(opt) > 2 
else False 
   32useTMVABDT = opt[3] 
if len(opt) > 3 
else False 
   33usePyTorchCNN = opt[4] 
if len(opt) > 4 
else False 
   35tf_spec = importlib.util.find_spec(
"tensorflow")
 
   38    print(
"TMVA_CNN_Classificaton",
"Skip using Keras since tensorflow is not installed")
 
   45torch_spec = importlib.util.find_spec(
"torch")
 
   48    print(
"TMVA_CNN_Classificaton",
"Skip using PyTorch since torch is not installed")
 
   62def MakeImagesTree(n, nh, nw):
 
   65    fileOutName = 
"images_data_16x16.root" 
   72    sX2 = sX1 + delta_sigma
 
   73    sY2 = sY1 - delta_sigma
 
   74    h1 = ROOT.TH2D(
"h1", 
"h1", nh, 0, 10, nw, 0, 10)
 
   75    h2 = ROOT.TH2D(
"h2", 
"h2", nh, 0, 10, nw, 0, 10)
 
   76    f1 = ROOT.TF2(
"f1", 
"xygaus")
 
   77    f2 = ROOT.TF2(
"f2", 
"xygaus")
 
   78    sgn = ROOT.TTree(
"sig_tree", 
"signal_tree")
 
   79    bkg = ROOT.TTree(
"bkg_tree", 
"background_tree")
 
   81    f = 
TFile(fileOutName, 
"RECREATE")
 
   82    x1 = ROOT.std.vector[
"float"](ntot)
 
   83    x2 = ROOT.std.vector[
"float"](ntot)
 
   87    bkg.Branch(
"vars", 
"std::vector<float>", x1)
 
   88    sgn.Branch(
"vars", 
"std::vector<float>", x2)
 
   93    f1.SetParameters(1, 5, sX1, 5, sY1)
 
   94    f2.SetParameters(1, 5, sX2, 5, sY2)
 
   95    ROOT.gRandom.SetSeed(0)
 
   96    ROOT.Info(
"TMVA_CNN_Classification", 
"Filling ROOT tree \n")
 
   99            print(
"Generating image event ...", i)
 
  104        f1.SetParameter(1, ROOT.gRandom.Uniform(3, 7))
 
  105        f1.SetParameter(3, ROOT.gRandom.Uniform(3, 7))
 
  106        f2.SetParameter(1, ROOT.gRandom.Uniform(3, 7))
 
  107        f2.SetParameter(3, ROOT.gRandom.Uniform(3, 7))
 
  109        h1.FillRandom(
"f1", nRndmEvts)
 
  110        h2.FillRandom(
"f2", nRndmEvts)
 
  116                x1[m] = h1.GetBinContent(k + 1, l + 1) + ROOT.gRandom.Gaus(0, pixelNoise)
 
  117                x2[m] = h2.GetBinContent(k + 1, l + 1) + ROOT.gRandom.Gaus(0, pixelNoise)
 
  125    print(
"Signal and background tree with images data written to the file %s", f.GetName())
 
  130hasGPU = 
"tmva-gpu" in ROOT.gROOT.GetConfigFeatures()
 
  131hasCPU = 
"tmva-cpu" in ROOT.gROOT.GetConfigFeatures()
 
  135if (
not hasCPU 
and not hasGPU) :
 
  136    ROOT.Warning(
"TMVA_CNN_Classificaton",
"ROOT is not supporting tmva-cpu and tmva-gpu skip using TMVA-DNN and TMVA-CNN")
 
  140if not "tmva-pymva" in ROOT.gROOT.GetConfigFeatures():
 
  142    usePyTorchCNN = 
False 
  148        "TMVA_CNN_Classificaton",
 
  149        "TMVA is not build with GPU or CPU multi-thread support. Cannot use TMVA Deep Learning for CNN",
 
  152writeOutputFile = 
True 
  159if "imt" in ROOT.gROOT.GetConfigFeatures():
 
  161    ROOT.gSystem.Setenv(
"OMP_NUM_THREADS", 
"1")  
 
  164    print(
"Running in serial mode since ROOT does not support MT")
 
  171    outputFile = 
TFile.Open(
"TMVA_CNN_ClassificationOutput.root", 
"RECREATE")
 
  196    "TMVA_CNN_Classification",
 
  202    AnalysisType=
"Classification",
 
  203    Transformations=
None,
 
  226inputFileName = 
"images_data_16x16.root" 
  229if ROOT.gSystem.AccessPathName(inputFileName):
 
  230    MakeImagesTree(nevt, 16, 16)
 
  234    ROOT.Warning(
"TMVA_CNN_Classification", 
"Error opening input file %s - exit", inputFileName.Data())
 
  242signalTree = inputFile.Get(
"sig_tree")
 
  243backgroundTree = inputFile.Get(
"bkg_tree")
 
  245nEventsSig = signalTree.GetEntries()
 
  246nEventsBkg = backgroundTree.GetEntries()
 
  250backgroundWeight = 1.0
 
  253loader.AddSignalTree(signalTree, signalWeight)
 
  254loader.AddBackgroundTree(backgroundTree, backgroundWeight)
 
  258loader.AddVariablesArray(
"vars", imgSize)
 
  276nTrainSig = 0.8 * nEventsSig
 
  277nTrainBkg = 0.8 * nEventsBkg
 
  281loader.PrepareTrainingAndTestTree(
 
  284    nTrain_Signal=nTrainSig,
 
  285    nTrain_Background=nTrainBkg,
 
  288    NormMode=
"NumEvents",
 
  290    CalcCorrelations=
False,
 
  316        BoostType=
"AdaBoost",
 
  319        BaggedSampleFraction=0.5,
 
  320        SeparationType=
"GiniIndex",
 
  331    layoutString = ROOT.TString(
 
  332        "DENSE|100|RELU,BNORM,DENSE|100|RELU,BNORM,DENSE|100|RELU,BNORM,DENSE|100|RELU,DENSE|1|LINEAR" 
  338    trainingString1 = ROOT.TString(
 
  339        "LearningRate=1e-3,Momentum=0.9,Repetitions=1," 
  340        "ConvergenceSteps=5,BatchSize=100,TestRepetitions=1," 
  341        "WeightDecay=1e-4,Regularization=None," 
  342        "Optimizer=ADAM,DropConfig=0.0+0.0+0.0+0." 
  344    trainingString1 += 
",MaxEpochs=" + str(max_epochs)
 
  347    dnnMethodName = 
"TMVA_DNN_CPU" 
  353        dnnMethodName = 
"TMVA_DNN_GPU" 
  361        ErrorStrategy=
"CROSSENTROPY",
 
  363        WeightInitialization=
"XAVIER",
 
  365        TrainingStrategy=trainingString1,
 
  366        Architecture=dnnOptions
 
  399    trainingString1 = ROOT.TString(
 
  400        "LearningRate=1e-3,Momentum=0.9,Repetitions=1," 
  401        "ConvergenceSteps=5,BatchSize=100,TestRepetitions=1," 
  402        "WeightDecay=1e-4,Regularization=None," 
  403        "Optimizer=ADAM,DropConfig=0.0+0.0+0.0+0.0" 
  405    trainingString1 += 
",MaxEpochs=" + str(max_epochs)
 
  408    cnnMethodName = 
"TMVA_CNN_CPU" 
  413        cnnMethodName = 
"TMVA_CNN_GPU" 
  421        ErrorStrategy=
"CROSSENTROPY",
 
  423        WeightInitialization=
"XAVIER",
 
  424        InputLayout=
"1|16|16",
 
  425        Layout=
"CONV|10|3|3|1|1|1|1|RELU,BNORM,CONV|10|3|3|1|1|1|1|RELU,MAXPOOL|2|2|1|1,RESHAPE|FLAT,DENSE|100|RELU,DENSE|1|LINEAR",
 
  426        TrainingStrategy=trainingString1,
 
  427        Architecture=cnnOptions,
 
  435    ROOT.Info(
"TMVA_CNN_Classification", 
"Using Convolutional PyTorch Model")
 
  436    pyTorchFileName = str(ROOT.gROOT.GetTutorialDir())
 
  437    pyTorchFileName += 
"/tmva/PyTorch_Generate_CNN_Model.py" 
  439    torch_spec = importlib.util.find_spec(
"torch")
 
  440    if torch_spec 
is not None and os.path.exists(pyTorchFileName):
 
  444        ROOT.Info(
"TMVA_CNN_Classification", 
"Booking PyTorch CNN model")
 
  452            FilenameModel=
"PyTorchModelCNN.pt",
 
  453            FilenameTrainedModel=
"PyTorchTrainedModelCNN.pt",
 
  454            NumEpochs=max_epochs,
 
  456            UserCode=str(pyTorchFileName)
 
  460            "TMVA_CNN_Classification",
 
  461            "PyTorch is not installed or model building file is not existing - skip using PyTorch",
 
  465    ROOT.Info(
"TMVA_CNN_Classification", 
"Building convolutional keras model")
 
  469    from tensorflow.keras.models 
import Sequential
 
  470    from tensorflow.keras.optimizers 
import Adam
 
  474    from tensorflow.keras.layers 
import Input, Dense, Dropout, Flatten, Conv2D, MaxPooling2D, Reshape
 
  478    model.add(Reshape((16, 16, 1), input_shape=(256,)))
 
  479    model.add(Conv2D(10, kernel_size=(3, 3), kernel_initializer=
"TruncatedNormal", activation=
"relu", padding=
"same"))
 
  480    model.add(Conv2D(10, kernel_size=(3, 3), kernel_initializer=
"TruncatedNormal", activation=
"relu", padding=
"same"))
 
  482    model.add(MaxPooling2D(pool_size=(2, 2)))
 
  484    model.add(Dense(64, activation=
"tanh"))
 
  486    model.add(Dense(2, activation=
"sigmoid"))
 
  487    model.compile(loss=
"binary_crossentropy", optimizer=Adam(learning_rate=0.001), weighted_metrics=[
"accuracy"])
 
  488    model.save(
"model_cnn.h5")
 
  491    if not os.path.exists(
"model_cnn.h5"):
 
  492        raise FileNotFoundError(
"Error creating Keras model file - skip using Keras")
 
  495        ROOT.Info(
"TMVA_CNN_Classification", 
"Booking convolutional keras model")
 
  503            FilenameModel=
"model_cnn.h5",
 
  504            FilenameTrainedModel=
"trained_model_cnn.h5",
 
  505            NumEpochs=max_epochs,
 
  507            GpuOptions=
"allow_growth=True",
 
  514factory.TrainAllMethods()
 
  518factory.TestAllMethods()
 
  520factory.EvaluateAllMethods()
 
  524c1 = factory.GetROCCurve(loader)
 
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 UChar_t len
 
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 format
 
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.
 
This is the main MVA steering class.
 
static void PyInitialize()
Initialize Python interpreter.
 
void EnableImplicitMT(UInt_t numthreads=0)
Enable ROOT's implicit multi-threading for all objects and methods that provide an internal paralleli...
 
UInt_t GetThreadPoolSize()
Returns the size of ROOT's thread pool.