import torch
from ROOT import TMVA, TFile, TString
from array import array
from subprocess import call
from os.path import isfile
data =
TFile.Open(
"http://root.cern.ch/files/tmva_class_example.root",
"CACHEREAD")
if data is None:
raise FileNotFoundError("Input file cannot be downloaded - exit")
signal = data.Get('TreeS')
background = data.Get('TreeB')
branches = {}
for branch in signal.GetListOfBranches():
branchName = branch.GetName()
branches[branchName] = array('f', [-999])
reader.AddVariable(branchName, branches[branchName])
signal.SetBranchAddress(branchName, branches[branchName])
background.SetBranchAddress(branchName, branches[branchName])
def predict(model, test_X, batch_size=32):
model.eval()
test_dataset = torch.utils.data.TensorDataset(torch.Tensor(test_X))
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
predictions = []
with torch.no_grad():
for i, data in enumerate(test_loader):
X = data[0]
outputs = model(X)
predictions.append(outputs)
preds = torch.cat(predictions)
return preds.numpy()
load_model_custom_objects = {"optimizer": None, "criterion": None, "train_func": None, "predict_func": predict}
reader.BookMVA(
'PyTorch',
TString(
'dataset/weights/TMVAClassification_PyTorch.weights.xml'))
print('Some signal example classifications:')
for i in range(20):
signal.GetEntry(i)
print(reader.EvaluateMVA('PyTorch'))
print('')
print('Some background example classifications:')
for i in range(20):
background.GetEntry(i)
print(reader.EvaluateMVA('PyTorch'))
static Bool_t SetCacheFileDir(ROOT::Internal::TStringView cacheDir, Bool_t operateDisconnected=kTRUE, Bool_t forceCacheread=kFALSE)
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.
static void PyInitialize()
Initialize Python interpreter.
The Reader class serves to use the MVAs in a specific analysis context.