What is the correct/recommended way to clean/delete RooDataSet in PyROOT ?
I have a use case where relatively large dataset is created and used inside the loop. and I see that memory is not free after the loop.
import ROOT, os, psutil, random
# inner psutil function
def process_memory():
process = psutil.Process(os.getpid())
mem_info = process.memory_info()
return mem_info.rss
evt = ROOT.RooRealVar ( 'Evt' , '#event' , 0 , 1000000 )
run = ROOT.RooRealVar ( 'Run' , '#run' , 0 , 1000000 )
mass = ROOT.RooRealVar ( 'Mass' , 'mass-variable' , 0 , 100 )
varset = ROOT.RooArgSet ( evt , run , mass )
dataset = ROOT.RooDataSet ( "dataset", 'Test Data set-0' , varset )
before_create = process_memory ()
print ( 'MEMORY BEFORE CREATION OF DATASET %.1fMB' % ( before_create / 2**20 ) )
NR = 1000
NE = 1000
for r in range ( NR ) :
run.setVal ( r )
for e in range ( NE ) :
evt .setVal ( e )
mass.setVal ( random.uniform ( 0 , 10 ) )
dataset.add ( varset )
before_loop = process_memory ()
print ( 'DELTA MEMORY (BEFORE LOOP) %.2fMB' % ( ( before_loop - before_create ) / 2**20 ) )
NL = 100
for i in range ( NL ) :
## some actinon to create another large dataset, e,g, resuction
## in my concreete case I create the boostrapped-dataset
another = dataset.reduce ( "Mass<100" )
## (1)
## del another ## No effect at all
## (2)
## another.Delete() ## it works, but looks a bit brutal
## (3) -- no effect
## store = another.store()
## if store :
## store.reset ()
## store.resetBuffers ()
## store.resetCache ()
## another.resetBuffers ()
## another.reset ()
after_loop = process_memory ()
print ( 'DELTA MEMORY (AFTER LOOP) %.2fMB' % ( ( after_loop - before_loop ) / 2**20 ) )
- simple
delete anotherinside the loop has no effece - `another.Delete()` does work but cout it be a recomemnded way?
- manual reset of store and dataset does report that
anotherhas no events enynmore, but memory is not free.