Regarding thread safety of TMinuitMinimizer

Hi,
Sorry in advance for long post.
So I am trying to minimize the function FCN, where FCN is supposed to access the dataset spread over the
current PROOF session, apply the cuts on dataset, calculate the cut efficiency and subsequently signal sensitivity of the cuts and then return the sensitivity value through the PROOF output list. By minimizing the sensitivity I am trying to optimize the cuts. The FCN (here onwards sensitivity) function is member of the class that does the dataset, proof management as well as other calculations. Hence I am looking to implement ROOT::Math::Minimizer based solution of the problem using ROOT::Math::Functor.
I have done it partially, but generally (based on my previous experience of doing this stuff on single core) the minimization requires application of multiple algorithms sequentially. (gMinuit->SEEK() followed by gMinuit -> SIMPLEX() used to work for me well). But from documentation (and source code) it seems that
I can create ROOT::Math::Minimizer object with one minimizer type and one algorithm and that’s it. I can’t find a solution where I can do SEEK followed by SIMPLEX.

Okay. So I understand that through gMinuit (and using UseStaticMinuit) I can maintain the previous minimization state and use it with new instance of TMinuitMinimizer. Only question I have is, is it thread safe to do it this way ? What precautions should I take ? If I have multiple root sessions running, is it safe accross these sessions ?

Hi,

TMInuit and TMinuitMinimizer are not thread safe. If you have multiple threads running at the same time, you might have problems. However if you have multiple ROOT sessions, these are separate processes and it is not an issue.
In case you want to minimise in multiple threads, I would suggest you to use then Minuit2, (class ROOT::Math::Minuit2Minimizer) which should be thread safe

Best Regards

Lorenzo

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.