|
[Rivet] Memory errorAlan Kaptanoglu alank2 at alumni.stanford.eduFri Oct 21 17:28:59 BST 2016
I have tried just --enable-root as well. On Fri, Oct 21, 2016 at 6:28 PM, Alan Kaptanoglu <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> 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> >> 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 >>> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://www.hepforge.org/lists-archive/rivet/attachments/20161021/09745a4d/attachment.html>
More information about the Rivet mailing list |