|
[Rivet] Memory errorAlan Kaptanoglu alank2 at alumni.stanford.eduFri Oct 21 17:28:08 BST 2016
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/94c34ac2/attachment.html>
More information about the Rivet mailing list |