RooFit objects not returning from function

I am encountering an issue where RooFit objects are not returning from a function as expected.

Below I pasted the part of the code. I am defining ROOT.RooDoubleCB inside the member function setup_signal_shape. And if I work inside the same member function it works fine. But when I try to print it in another member function it does not work. I tried both way:

  1. Attached to the self (this is shown below).
  2. return from the setup_signal_shape.

None of the methods succeed. Any help/suggestions how to fix this issue?

class datacardClass_Improved:

    def __init__(self, year, DEBUG=False):
        self.year = year
        self.DEBUG = DEBUG
        self.loadIncludes()
        self.setup_parameters()
        self.rooVars = {}

    def setup_signal_shape(self, systematics, signal_type, channel):
        self.rooVars["signalCB_{}_{}".format(signal_type, channel)] = ROOT.RooDoubleCB(
            "signalCB_{}_{}".format(signal_type, channel),
            "Double Crystal Ball Model for {} in {}".format(signal_type, channel),
            self.rooVars["zz2l2q_mass"],
            self.rooVars["rfv_mean"],
            self.rooVars["rfv_sigma"],
            self.rooVars["a1_{}_{}_{}".format(signal_type, channel, self.year)],
            self.rooVars["n1_{}_{}_{}".format(signal_type, channel, self.year)],
            self.rooVars["a2_{}_{}_{}".format(signal_type, channel, self.year)],
            self.rooVars["n2_{}_{}_{}".format(signal_type, channel, self.year)],
        )
        logger.error(self.rooVars["signalCB_{}_{}".format(signal_type, channel)].Print('v'))
        fullRangeSigRate = (
            self.rooVars["signalCB_{}_{}".format(signal_type, channel)]
            .createIntegral(
                ROOT.RooArgSet(self.rooVars["zz2l2q_mass"]),
                ROOT.RooFit.Range("fullsignalrange"),
            )
            .getVal()
        )
        logger.debug("fullRangeSigRate: {}".format(fullRangeSigRate))

    
    def main(self):
        self.setup_signal_shape(systematics, 'ggH', self.channel)
        logger.error(self.rooVars["signalCB_{}_{}".format(signal_type, channel)].Print('v'))
        
        fullRangeSigRate = (
            self.rooVars["signalCB_{}_{}".format(signal_type, channel)]
            .createIntegral(
                ROOT.RooArgSet(self.rooVars["zz2l2q_mass"]),
                ROOT.RooFit.Range("fullsignalrange"),
            )
            .getVal()
        )
        logger.debug("fullRangeSigRate: {}".format(fullRangeSigRate))

Hi! How does the error look like?

Thanks @Jonas for reply.

Here I am pasting the error:

[DEBUG] - [utils_hist.py:#5] - signalCB_ggH_mumuqq_Merged is valid 
 *** Break *** segmentation violation



===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================
#0  0x00007ff93782160c in waitpid () from /lib64/libc.so.6
#1  0x00007ff93779ef62 in do_system () from /lib64/libc.so.6
#2  0x00007ff937340535 in TUnixSystem::StackTrace() () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/cms/cmssw/CMSSW_11_3_4/external/slc7_amd64_gcc900/lib/libCore.so
#3  0x00007ff937738252 in (anonymous namespace)::TExceptionHandlerImp::HandleException(int) () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/cms/cmssw/CMSSW_11_3_4/external/slc7_amd64_gcc900/lib/libcppyy_backend2_7.so
#4  0x00007ff93733d581 in TUnixSystem::DispatchSignals(ESignals) () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/cms/cmssw/CMSSW_11_3_4/external/slc7_amd64_gcc900/lib/libCore.so
#5  <signal handler called>
#6  __cxxabiv1::(anonymous namespace)::adjust_pointer<void> (offset=<error reading variable: Cannot access memory at address 0x745f656c62756f34>, base=0x8fb4970) at ../../../../libstdc++-v3/libsupc++/tinfo.h:65
#7  __cxxabiv1::__dynamic_cast (src_ptr=0x8fb4970, src_type=0x7ff9215e7388 <typeinfo for RooAbsArg>, dst_type=0x7ff92160d488 <typeinfo for RooRealVar>, src2dst=0) at ../../../../libstdc++-v3/libsupc++/dyncast.cc:55
#8  0x00007ff92015cfab in RooDoubleCB::getAnalyticalIntegral(RooArgSet&, RooArgSet&, char const*) const () from /afs/cern.ch/work/r/rasharma/LearnCombine/CMSSW_11_3_4/lib/slc7_amd64_gcc900/libHiggsAnalysisCombinedLimit.so
#9  0x00007ff92145c132 in RooRealIntegral::RooRealIntegral(char const*, char const*, RooAbsReal const&, RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#10 0x00007ff9212eeff5 in RooAbsReal::createIntObj(RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#11 0x00007ff9212efb96 in RooAbsReal::createIntegral(RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#12 0x00007ff9212e8b53 in RooAbsReal::createIntegral(RooArgSet const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#13 0x00007ff92367a121 in ?? ()
#14 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#15 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#16 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#17 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#18 0xffffffff218e7a70 in ?? ()
#19 0xffffffff00000000 in ?? ()
#20 0x00007ff921996ac0 in ?? ()
#21 0x000000000bda67f0 in ?? ()
#22 0x00000000078bb218 in ?? ()
#23 0x0000000000000000 in ?? ()
===========================================================


The lines below might hint at the cause of the crash.
You may get help by asking at the ROOT forum https://root.cern.ch/forum
Only if you are really convinced it is a bug in ROOT then please submit a
report at https://root.cern.ch/bugs Please post the ENTIRE stack trace
from above as an attachment in addition to anything else
that might help us fixing this issue.
===========================================================
#6  __cxxabiv1::(anonymous namespace)::adjust_pointer<void> (offset=<error reading variable: Cannot access memory at address 0x745f656c62756f34>, base=0x8fb4970) at ../../../../libstdc++-v3/libsupc++/tinfo.h:65
#7  __cxxabiv1::__dynamic_cast (src_ptr=0x8fb4970, src_type=0x7ff9215e7388 <typeinfo for RooAbsArg>, dst_type=0x7ff92160d488 <typeinfo for RooRealVar>, src2dst=0) at ../../../../libstdc++-v3/libsupc++/dyncast.cc:55
#8  0x00007ff92015cfab in RooDoubleCB::getAnalyticalIntegral(RooArgSet&, RooArgSet&, char const*) const () from /afs/cern.ch/work/r/rasharma/LearnCombine/CMSSW_11_3_4/lib/slc7_amd64_gcc900/libHiggsAnalysisCombinedLimit.so
#9  0x00007ff92145c132 in RooRealIntegral::RooRealIntegral(char const*, char const*, RooAbsReal const&, RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#10 0x00007ff9212eeff5 in RooAbsReal::createIntObj(RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#11 0x00007ff9212efb96 in RooAbsReal::createIntegral(RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#12 0x00007ff9212e8b53 in RooAbsReal::createIntegral(RooArgSet const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#13 0x00007ff92367a121 in ?? ()
#14 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#15 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#16 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#17 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#18 0xffffffff218e7a70 in ?? ()
#19 0xffffffff00000000 in ?? ()
#20 0x00007ff921996ac0 in ?? ()
#21 0x000000000bda67f0 in ?? ()
#22 0x00000000078bb218 in ?? ()
#23 0x0000000000000000 in ?? ()
===========================================================


 *** Break *** segmentation violation



===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================
#0  0x00007ff93782160c in waitpid () from /lib64/libc.so.6
#1  0x00007ff93779ef62 in do_system () from /lib64/libc.so.6
#2  0x00007ff937340535 in TUnixSystem::StackTrace() () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/cms/cmssw/CMSSW_11_3_4/external/slc7_amd64_gcc900/lib/libCore.so
#3  0x00007ff937738252 in (anonymous namespace)::TExceptionHandlerImp::HandleException(int) () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/cms/cmssw/CMSSW_11_3_4/external/slc7_amd64_gcc900/lib/libcppyy_backend2_7.so
#4  0x00007ff93733d581 in TUnixSystem::DispatchSignals(ESignals) () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/cms/cmssw/CMSSW_11_3_4/external/slc7_amd64_gcc900/lib/libCore.so
#5  <signal handler called>
#6  __cxxabiv1::(anonymous namespace)::adjust_pointer<void> (offset=<error reading variable: Cannot access memory at address 0x745f656c62756f34>, base=0x8fb4970) at ../../../../libstdc++-v3/libsupc++/tinfo.h:65
#7  __cxxabiv1::__dynamic_cast (src_ptr=0x8fb4970, src_type=0x7ff9215e7388 <typeinfo for RooAbsArg>, dst_type=0x7ff92160d488 <typeinfo for RooRealVar>, src2dst=0) at ../../../../libstdc++-v3/libsupc++/dyncast.cc:55
#8  0x00007ff92015cfab in RooDoubleCB::getAnalyticalIntegral(RooArgSet&, RooArgSet&, char const*) const () from /afs/cern.ch/work/r/rasharma/LearnCombine/CMSSW_11_3_4/lib/slc7_amd64_gcc900/libHiggsAnalysisCombinedLimit.so
#9  0x00007ff92145c132 in RooRealIntegral::RooRealIntegral(char const*, char const*, RooAbsReal const&, RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#10 0x00007ff9212eeff5 in RooAbsReal::createIntObj(RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#11 0x00007ff9212efb96 in RooAbsReal::createIntegral(RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#12 0x00007ff9212e8b53 in RooAbsReal::createIntegral(RooArgSet const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#13 0x00007ff92367a121 in ?? ()
#14 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#15 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#16 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#17 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#18 0x0000005b00000032 in ?? ()
#19 0x00007ffda21bb380 in ?? ()
#20 0x0000000000000000 in ?? ()
===========================================================


The lines below might hint at the cause of the crash.
You may get help by asking at the ROOT forum https://root.cern.ch/forum
Only if you are really convinced it is a bug in ROOT then please submit a
report at https://root.cern.ch/bugs Please post the ENTIRE stack trace
from above as an attachment in addition to anything else
that might help us fixing this issue.
===========================================================
#6  __cxxabiv1::(anonymous namespace)::adjust_pointer<void> (offset=<error reading variable: Cannot access memory at address 0x745f656c62756f34>, base=0x8fb4970) at ../../../../libstdc++-v3/libsupc++/tinfo.h:65
#7  __cxxabiv1::__dynamic_cast (src_ptr=0x8fb4970, src_type=0x7ff9215e7388 <typeinfo for RooAbsArg>, dst_type=0x7ff92160d488 <typeinfo for RooRealVar>, src2dst=0) at ../../../../libstdc++-v3/libsupc++/dyncast.cc:55
#8  0x00007ff92015cfab in RooDoubleCB::getAnalyticalIntegral(RooArgSet&, RooArgSet&, char const*) const () from /afs/cern.ch/work/r/rasharma/LearnCombine/CMSSW_11_3_4/lib/slc7_amd64_gcc900/libHiggsAnalysisCombinedLimit.so
#9  0x00007ff92145c132 in RooRealIntegral::RooRealIntegral(char const*, char const*, RooAbsReal const&, RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#10 0x00007ff9212eeff5 in RooAbsReal::createIntObj(RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#11 0x00007ff9212efb96 in RooAbsReal::createIntegral(RooArgSet const&, RooArgSet const*, RooNumIntConfig const*, char const*) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#12 0x00007ff9212e8b53 in RooAbsReal::createIntegral(RooArgSet const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&) const () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#13 0x00007ff92367a121 in ?? ()
#14 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#15 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#16 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#17 0x00007ff9216362e0 in ?? () from /cvmfs/cms.cern.ch/slc7_amd64_gcc900/lcg/root/6.22.08-ljfedo/lib/libRooFitCore.so
#18 0x0000005b00000032 in ?? ()
#19 0x00007ffda21bb380 in ?? ()
#20 0x0000000000000000 in ?? ()
===========================================================


Traceback (most recent call last):
  File "makeDCsandWSs.py", line 1611, in <module>
    main()
  File "makeDCsandWSs.py", line 1607, in main
    DirectoryCreatorObj.Run()
  File "makeDCsandWSs.py", line 1263, in Run
    self.run_step_dc()
  File "makeDCsandWSs.py", line 1206, in run_step_dc
    self.create_workspaces(current_mass, datacard_class)
  File "makeDCsandWSs.py", line 216, in create_workspaces
    self.SanityCheckPlotUsingWorkspaces,
  File "/afs/cern.ch/work/r/rasharma/LearnCombine/CMSSW_11_3_4/src/2l2Q_limitSettingTool/datacardClass_Improved.py", line 316, in makeCardsWorkspaces
    fullRangeSigRate = (self.rooVars["signalCB_{}_{}".format("ggH", self.channel)].createIntegral(ROOT.RooArgSet(self.zz2l2q_mass),ROOT.RooFit.Range("fullsignalrange")).getVal())
TypeError: none of the 6 overloaded methods succeeded. Full details:
  RooAbsReal* RooAbsReal::createIntegral(const RooArgSet& iset, const RooArgSet& nset, const RooNumIntConfig& cfg, const char* rangeName = 0) =>
    TypeError: takes at least 3 arguments (2 given)
  RooAbsReal* RooAbsReal::createIntegral(const RooArgSet& iset, const RooCmdArg& arg1, const RooCmdArg& arg2 = RooCmdArg::none(), const RooCmdArg& arg3 = RooCmdArg::none(), const RooCmdArg& arg4 = RooCmdArg::none(), const RooCmdArg& arg5 = RooCmdArg::none(), const RooCmdArg& arg6 = RooCmdArg::none(), const RooCmdArg& arg7 = RooCmdArg::none(), const RooCmdArg& arg8 = RooCmdArg::none()) =>
    SegmentationViolation: segfault in C++; program state was reset
  RooAbsReal* RooAbsReal::createIntegral(const RooArgSet& iset, const RooNumIntConfig& cfg, const char* rangeName = 0) =>
    TypeError: could not convert argument 2
  RooAbsReal* RooAbsReal::createIntegral(const RooArgSet& iset, const char* rangeName) =>
    TypeError: could not convert argument 2 (expected string or Unicode object, RooCmdArg found)
  RooAbsReal* RooAbsReal::createIntegral(const RooArgSet& iset, const RooArgSet& nset, const char* rangeName = 0) =>
    TypeError: could not convert argument 2
  RooAbsReal* RooAbsReal::createIntegral(const RooArgSet& iset, const RooArgSet* nset = 0, const RooNumIntConfig* cfg = 0, const char* rangeName = 0) =>
    TypeError: could not convert argument 2

Hi all,

Any suggestions would be helpful. Thanks in advance.

with regards,
Ram