Project

General

Profile

In February 2018 we made the long-awaited move to art2 and ROOT6
Specifically upgrading from art v1_17_01 --> art v2_09_06
This also brought along upgrade of nutools v1_21_11 --> v2_18_01

We now pull novaddt/novadaq packages into novasoft instead of using ups products that contain these

Tensorflow is now available in the offline for deep learning development efforts.

FHICL changes

An extensive list of fhicl deprecations is listed on the art redmine page under "Deprecations".
Specific fhicl changes of note in novasoft are the following:

services.user.myService: {...}           --> services.myService: {...}
services.Timing: {...}                   --> services.TimeTracker: {...}
services.SimpleMemoryCheck: {...}        --> services.MemoryTracker: {...}
services.MemoryTracker.ignoreTotal: ".." --> No longer used
SelectEvents.SelectEvents: [...]         --> SelectEvents: [...]
debugModules: "*"  --> debugModules: ["*"] 

Make a note for cases that use
services.scheduler.fileMode              --> Contact artists for details

art header includes

The code in art2 had a bit of a restructuring. The locations of product-reading libraries and headers have migrated to canvas.
Full details of the Migration from ROOT5 to ROOT6

Common to novasoft

Here are a few changes you're most likely to see/need:

art/Framework/Core/FindOneP.h          --> canvas/Persistency/Common/FindOneP.h (FindMany/FindManyP...)
art/Utilities/InputTag.h               --> canvas/Utilities/InputTag.h
art/Persistency/Common/Assns.h         --> canvas/Persistency/Common/Assns.h
art/Persistency/Provenance/ProductID.h --> canvas/Persistency/Provenance/ProductID.h
art/Persistency/Common/Ptr.h           --> canvas/Persistency/Common/Ptr.h (PtrVector.h)

Less common, in the move from art v2_09 --> v2_11:

art/Utilities/FirstAbsoluteOrLookupWithDotPolicy.h --> cetlib/filepath_maker.h

plus
art::FirstAbsoluteOrLookupWithDotPolicy policy("FHICL_FILE_PATH"); --> cet::filepath_first_absolute_or_lookup_with_dot policy("FHICL_FILE_PATH");

and for cetlib:

cetlib/coded_exception.h      --> cetlib_except/coded_exception.h
cetlib/exception.h            --> cetlib_except/exception.h
cetlib/exception_collector.h  --> cetlib_except/exception_collector.h

nutools header includes

SimulationBase has moved to a new path in nusimdata

 
#include "SimulationBase/MCTruth.h" --> #include "nusimdata/SimulationBase/MCTruth.h" 

CAFAna macros

New Features

Compilation

Don't be alarmed by the increase in the number of files produced when compiling CAFAna macros.
You should see three as opposed to the previous 2 that look like this:

Compiling test.C produces:

test_C.d
test_C.so
test_C_ACLiC_dict_rdict.pcm

Compilation errors

One gets more useful error messaging when running a macro with missing arguments.
Example:

Info in <TUnixSystem::ACLiC>: creating shared library /nova/app/users/gsdavies/dev/./DataMCNDLoad_nus17_C.so
input_line_84:2:2: error: no matching function for call to 'DataMCNDLoad_nus17'
 DataMCNDLoad_nus17()
 ^~~~~~~~~~~~~~~~~~
././DataMCNDLoad_nus17.C:53:6: note: candidate function not viable: requires single argument 'outfile', but no
      arguments were provided
void DataMCNDLoad_nus17(std::string outfile)

Harmless Warnings

This section documents new warnings that may pop up, but should not affect the successful completion of your macro.

TTreeFormula support only 2 level of variables size collections

If you are seeing warnings similar to:

Warning in <TTreeFormula::DefinedVariable>: TTreeFormula support only 2 level of variables size collections.  Assuming '@' notation for the collection bpf.
Warning in <TTreeFormula::DefinedVariable>: Missing class for rec.vtx.elastic[0].fuzzyk.png[0].@bpf.at(1).pdg!

This is due to accessing more than 2 vectors in your variable (in this example: vertices, prongs, tracks).

Potential changes

This section documents changes you may need to make to your macro as a result of switching to root6.

Fitting errors

If you are fitting a histogram and getting the error message

Warning in <Fit>: Fit data is empty

but your histogram is not empty, check to see if your bin errors are equal to 0 with

h->Print("all");

which will output something like this:

TH1.Print Name  = cafanauniq86, Entries= 1, Total sum= 102.998
 fSumw[0]=0, x=-1.10917, error=0

If they are 0, setting

h->Sumw2(kFALSE);
should solve the problem.