[Rivet] Various things for Rivet

cholm cholm at nbi.dk
Fri Jun 30 14:47:37 BST 2017


On 2017-06-30 14:44, cholm wrote:
> Hi Andy et al,
> 
> On 2017-06-30 13:59, Andy Buckley wrote:
>> Hi Christian & al,
...
>> As we've already discussed, some of your innovations aren't things
>> that we'll want to pull into the main Rivet development line,

Here, I'll go through some of the changes (by commit) to explain a 
little more what I did and why.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/4942653a6487cdd8acaefa1142f855b5a3c080ff

   Since a target machine may not have all FastJet plugins available, I 
check at configure time which we can use. At compile time, those that 
are not available will be ignored.  At run-time, using an unsupported 
plugin on the target machine will cause an exception.

   This is done to allow Rivet to be build on any installation of FastJet 
(notably, Debian and Ubuntu, and other Debian-derivatives, do _not_ have 
all plugins available - probably due to licensing issues).  If this is 
_not_ done like this, Rivet cannot be built without first installing a 
user build FastJet library.

   This is the patch that Andy doesn't like :-/

- 
https://gitlab.cern.ch/cholm/myrivet/commit/e2a419f18fe33b2b09550a19133af1ed34bb1fac

   Added more particle names to the database of particle names. The 
initialisation is moved to the implementation (.cc) file so we can 
cleanly use a macro for all this.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/819187938f91707bdc4daf125e6ae887b6742bab

   This is the culprit of the delayed-finalization strategy.  Here, I add 
the member function Analysis::updateAnalysisObject which is used to 
propagate external analysis objects to the analyses.

   I also add a new finalize member function to AnalysisHandler that 
takes a vector of external data objects to be propagated to the 
analyses.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/ad11fea60f0274899aad16b510968c2456e3499a

   This is a merge commit that takes the above commits (and a few others)

- 
https://gitlab.cern.ch/cholm/myrivet/commit/53bba6cc829ac47261377c15b2a76b14a6dd56de

   This commit introduces the applications rivet-runner and rivet-merger 
- the work-horses of the delayed finalization strategy.  These tools are 
set up to work as filters - i.e., read from standard input and write on 
standard output, so that we may build pipelines of these.

   These are similar to rivet and yodamerge but has more functionality 
that these tools do not have and which are needed for delayed 
finalization.  In particular rivet-merger can do far more than what 
yodamerge does.

   This commit also introduces the utility classes Runner and Merger used 
by rivet-runner and rivet-merger, respectively.  Merger has no parallel 
in either YODA or Rivet.  The Runner class, however, could be merged 
into the Run class without much hassle.  The one crucial thing about 
that the Runner class is that it can add a pseudo analysis to store beam 
parameters so that we can build a fake event to initialize the analyses 
on when we do delayed-finalization.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/24af7c48d4139592c6c567c4403c937dacc1231b

   Another merge commit

- 
https://gitlab.cern.ch/cholm/myrivet/commit/74de5943834e2aab7a3ce6487014140da8a1942e

   Adds the README-parallel.md file

- 
https://gitlab.cern.ch/cholm/myrivet/commit/38f2d5a8b99a66b6fd0affebaad33bc2a013cfbb

   a merge commit

- 
https://gitlab.cern.ch/cholm/myrivet/commit/3c04687bc1ebfc1f0b2d0c66aa1d956d18408297

   Imports upstream changes

- 
https://gitlab.cern.ch/cholm/myrivet/commit/79f9b96ca31d1d84953d233a53d034c2270feffe

   This commit unfortunately is a bit garbled.

   It adds the functionallity that Analysis::book... will always return 
pre-existing objects for all analysis object types.

   I also add a new AnalysisHandler::init method that will take care to 
set internal counters (such as event counter and x-section) from the 
passed externally read analysis objects.  This is needed so that these 
values are properly set for those analyses that might need them.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/54176336a01bd5ebcba957845f3676b11d754e23

   This commit came after merging with upstream.  The changes are 
detailed in

   
https://gitlab.cern.ch/cholm/myrivet/commit/53bba6cc829ac47261377c15b2a76b14a6dd56de

   This is the one to take for this.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/e1837f360ac0894ae9ed0ac4b14f24ddf6f49b0c

   Runner use the newly defined  AnalysisHandler::init with an additional 
argument.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/72aa38c9e85bd0410910104a5db0db8d2cc85f75
   
https://gitlab.cern.ch/cholm/myrivet/commit/af8ce6cc4069ae83d7ad507b862afab0635acd59
   
https://gitlab.cern.ch/cholm/myrivet/commit/2bd36179a9c242d8bf2d2b846dde621dbb324d6d
   
https://gitlab.cern.ch/cholm/myrivet/commit/f1dcb7658cadaf24830910d97705a4ebbf793922

   Documentation fixes

- 
https://gitlab.cern.ch/cholm/myrivet/commit/e407f3f3cb6c5096c5c7a1393b4afa7a53dae28d

   Import upstream changes

- 
https://gitlab.cern.ch/cholm/myrivet/commit/b3800cf74f35030e80ffbe97d6c51a86024e24e6
   
https://gitlab.cern.ch/cholm/myrivet/commit/1c0f4df082df7e35b7d1da0d9697ff249eb25437
   
https://gitlab.cern.ch/cholm/myrivet/commit/43f3e96024f00606d4843f76c93a70781f394635

   These commits adds an extra argument to AnalysisHandler::getData (and 
writeData) that allows use to select whether temporary objects should be 
written or not.  This is needed if, in delayed-finalization, an analysis 
uses these temporary objects.  Note, an analysis can flag an analysis 
object as temporary by setting the annotation "temporary"

- 
https://gitlab.cern.ch/cholm/myrivet/commit/6ae5f45d7ebbac170d547afcd353e173dc041f0e

   Repeat of 
https://gitlab.cern.ch/cholm/myrivet/commit/74de5943834e2aab7a3ce6487014140da8a1942e 
- take this one.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/fc8ded223c77e1c527365e0a22815822eb27af58

   More documentation - especially about the need to use CounterPtr 
rather than a double for caching sums or the like.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/7ca5dc88cbda1a1ed7725b9c7d756d7de2853dea

   A merge commit

- 
https://gitlab.cern.ch/cholm/myrivet/commit/e8eb506ea696dd59d4cb04f8bca4b64bf1fd4bd2
   
https://gitlab.cern.ch/cholm/myrivet/commit/68341660b404bc5f42e0ea939d73fd32925e83e8
   
https://gitlab.cern.ch/cholm/myrivet/commit/f5e8d992e186edcc8781152ae1c6ddb5d3bb92e4

   Add the class Url to be used for input specifications.  This is 
convenient as it gives a standarized way of specifying things - e.g., 
weights and so on.  The class is light-weight and implemented in 
standard C++ so no external dependencies.  Note, it does _not_ provide 
access to remote files, only a way to specify where they are :-)

- 
https://gitlab.cern.ch/cholm/myrivet/commit/937d3104dcbbec4b08927a40d08e2bb3b021850a

   Bug fixes to Merger class and a new test program to test it with.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/fe7297ec04bf26e98a53a0f6f4c110608a25651a

   In case the user didn't give any input, the Runner class will bark - 
better than to do nothing.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/5032247310465bef4d35851960d5f952b2f68d8b

   A minor fix to make sure we actually respect the user wish to set 
logging on some component. This was missed in the first go.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/01cbd0651a29558177cebb2613f631fe9811a5f4

   This commit allows the user to specify the precision with which the 
outputs are produced.  This is kinda important since we store beam 
parameters as floats which could round off important digits - e.g., if 
the PDG of one beam particle is 100822080 (Pb) it could become rounded 
to 100822000 if we do not have high enough precision.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/4cf612c011e1015cc37a4f3f9c9dd5723aa27a56

   Minor documentation fixes in new code

- 
https://gitlab.cern.ch/cholm/myrivet/commit/31b342091120f5c4ef04bbf1dcb96b100d8b69ef

   untie standard input from standard output so that the I/O library does 
not sync these up - we really don't need that since we're not running 
interactively.  Should speed things up a bit.

   Also, we make a copy of std::cout so we may redirect std::cout to 
std::clog so that river-runner truly works as a filter.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/1f6d834b4eecaef60e5d1c0d49d670a4940332b4

   In case we try to add incompatible stuff, make sure we don't fail but 
give a a warning.

- 
https://gitlab.cern.ch/cholm/myrivet/commit/102a659aed526bd049683f0b120915453b82bddc

   This commit fixes the built system for the new structure where the 
experiment analyses are put in a separate directory.  Originally, the 
makefiles used $(wildcard ) and so on, but had most of the directories 
screwed up.

   So what I did, is to introduce the script Analyses/makeMakefile.sh 
that will generate a Makefile for a given sub-directory of Analyses/ (or 
all if so instructed).  In this way, we specify all that Autotools need 
to know up front, but can still easily generate a new Makefile should we 
add a new analyses.  As an example. suppose we should add the analysis 
ALICE_2030_Z2f894nj1239g, we'd do

   cp ALICE_2030_Z2f894nj1239g.{cc,info,plot,ref} Analyses/pluginALICE
   (cd Analyses && ./makeMakefile.sh ALICE)
   autoreconf -i -f
   hg commit -m "Added analysis ALICE_2030_Z2f894nj1239g" .
   hg push

   BTW, I think you should really install loadable modules in 
$(pkglibdir) (e.g., /usr/lib/Rivet/) rather than in $(libdir) as not to 
pollute the namespace.  One could even make a versioned directory if so 
needed

   plugindir = $(pkglibdir)/$(MAJOR).$(MINOR)

and only load from there (and where the user may specify via 
rivet-runner -L<dir>)

- 
https://gitlab.cern.ch/cholm/myrivet/commit/0ae0f9b015b4bff4739bdfb779d154291bb1dec8

   Just another small bug fix to Runner

- 
https://gitlab.cern.ch/cholm/myrivet/commit/df823a0a10eda2bc433367476b2bf4f2eb6b6b3f

   Added documentation of a parallel execution test I did and some notes 
on the implementation of delayed-finalization

Hopefully the above list will make it easier for you to pick what you 
need.

Yours,


-- 
Christian Holm Christensen 
-------------------------------------------------
  Niels Bohr Institute, Blegdamsvej 17, DK-2100 Copenhagen
  http://cern.ch/cholm, +4524618591


More information about the Rivet mailing list