[Rivet] Memory error

Andy Buckley andy.buckley at cern.ch
Fri Oct 21 22:31:37 BST 2016


Exactly what it says: Rivet's configure doesn't have an --enable-root 
option. Maybe you're thinking of YODA?

You can pass linker flags for ROOT to the rivet-buildplugin script if 
you want, but we don't have any "official" support for it.

Out of interest, what ROOT features do you require?

Andy


On 21/10/16 17:28, Alan Kaptanoglu wrote:
> I have tried just --enable-root as well.
>
> On Fri, Oct 21, 2016 at 6:28 PM, Alan Kaptanoglu
> <alank2 at alumni.stanford.edu <mailto:alank2 at alumni.stanford.edu>> wrote:
>
>     Another question, this time regarding linking rivet with ROOT. I
>     have tried adding the line --enable-root to my configure file and
>     re-installing but it complains:
>     configure: WARNING: unrecognized options: --enable-root, --with-root
>     and I am unsure how to proceed.
>
>     Best,
>     Alan
>
>     On Mon, Oct 17, 2016 at 5:38 PM, Alan Kaptanoglu
>     <alank2 at alumni.stanford.edu <mailto:alank2 at alumni.stanford.edu>> wrote:
>
>         Thank you very much! I read that in useJetArea() but was not
>         sure how to get around it. Your line "  fj.useJetArea(new
>         fastjet::AreaDefinition(fastjet::VoronoiAreaSpec()));" works
>         perfectly. Passing it by value was a typo!
>
>         Cheers,
>         Alan
>
>         On Mon, Oct 17, 2016 at 4:47 PM, Andy Buckley
>         <andy.buckley at cern.ch <mailto:andy.buckley at cern.ch>> wrote:
>
>             On 17/10/16 15:29, Alan Kaptanoglu wrote:
>
>                 Hello,
>
>                 I am trying to declare jets with area in the
>                 initialization section of
>                 my Rivet Analysis. I originally tried:
>
>                       fastjet::GhostedAreaSpec areaspec(2.5,1,0.01);
>                       fastjet::AreaDefinition
>                 area_def(fastjet::active_area_explicit_ghosts,areaspec);
>                       FastJets jets(vfs, FastJets::ANTIKT, Rsmall);
>                       jets.useJetArea(area_def);
>                       jets.useInvisibles(JetAlg::ALL_INVISIBLES);
>                       jets.useMuons(JetAlg::DECAY_MUONS);
>                       declare(jets, "jets");
>
>                 but this definition goes out of scope so when I ask for
>                 jet areas in my
>                 "analysis" section of my code, it complains the jets
>                 have no valid jet
>                 area associated with them. I next tried several versions of:
>
>                       areaspec = new fastjet::GhostedAreaSpec(2.5,1,0.01);
>                       area_def = new
>                 fastjet::AreaDefinition(fastjet::active_area_explicit_ghosts,*areaspec);
>                       FastJets jets(vfs, FastJets::ANTIKT, Rsmall);
>                       jets.useJetArea(area_def);
>                       jets.useInvisibles(JetAlg::ALL_INVISIBLES);
>                       jets.useMuons(JetAlg::DECAY_MUONS);
>                       declare(jets, "jets");
>
>                 where areaspec and area_def are private members of my
>                 Analysis class. I
>                 also tried initializing these variables in my
>                 constructor using
>                 initialization lists, as well as declaring them global
>                 variables (and
>                 yes, to my knowledge, I am also deleting them correctly
>                 if I use "new").
>                 In all these cases, the code runs correctly but
>                 complains at the end of
>                 a memory error, which is attached in a text file. Any
>                 idea why this is
>                 happening or how to fix?
>
>
>             Hi Alan,
>
>             The AreaDefinition provided to FastJets must be a
>             heap-allocated pointer whose ownership is then taken over by
>             the FastJets object: it will delete the pointer at the end
>             of the run so you shouldn't try to do that yourself. (This
>             is documented on the useJetArea() function)
>
>             To this end I usually make sure that I don't have a variable
>             of my own pointing at that area def objects, e.g.
>              fj.useJetArea(new
>             fastjet::AreaDefinition(fastjet::VoronoiAreaSpec()));
>
>             As you noticed, if you pass in a locally allocated object,
>             it goes out of scope and you get a crash. Although I'm not
>             sure how you're able to pass it in by value rather than by
>             pointer!
>
>             I would like, if possible, to avoid this pointer ownership
>             stuff in the FastJets interface... I'm sure it's possible,
>             just needs a bit of care and thought about backward
>             compatibility. Pointers were used historically because we
>             need the option of a null AreaDefinition, and there's no
>             such thing as a null reference in C++.
>
>             Hope that helps,
>             Andy
>
>             --
>             Dr Andy Buckley, Lecturer / Royal Society University
>             Research Fellow
>             Particle Physics Expt Group, University of Glasgow
>
>
>
>


-- 
Dr Andy Buckley, Lecturer / Royal Society University Research Fellow
Particle Physics Expt Group, University of Glasgow


More information about the Rivet mailing list