8000 ROOT dictionary issue for UHH2 objects · Issue #1083 · UHH2/UHH2 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
ROOT dictionary issue for UHH2 objects #1083
Open
@raggleton

Description

@raggleton

When running CRAB & CI cmsRun jobs, one sees:

e.g. https://gitlab.cern.ch/raggleto/UHH2-integration/-/jobs/3003439

Error in cling::AutoloadingVisitor::InsertIntoAutoloadingState:
   Missing FileEntry for UHH2/core/include/Electron.h
   requested to autoload type source_candidate
Error in cling::AutoloadingVisitor::InsertIntoAutoloadingState:
   Missing FileEntry for UHH2/core/include/Jet.h
   requested to autoload type Jet
...

cmsRun finishes fine, and makes a ntuple. However (a) these messages shouldn't be there, (b) it makes subsequent looping over ntuples impossible in e.g. a standalone ROOT macro (which I need for CI plot making). More specifically, one sees as well as the above, these messages as well:
e.g. https://gitlab.cern.ch/raggleto/UHH2-integration/-/jobs/3003449

UHH2core_xr dictionary payload:46:10: fatal error: 'UHH2/core/include/Particle.h' file not found
#include "UHH2/core/include/Particle.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This does stop standalone ROOT analysis of collections (e.g. trying to use jet.pt()).

I think what happens is that ROOT6 needs the class header files, which are not included because they are in a dir names include and not interface: only the latter gets picked up by CRAB (for CI jobs, I use the same dirs as for CRAB jobs).
One might also need to set ROOT_INCLUDE_PATH?

Potentially helpful: ClarkMcGrew/edep-sim#2

ROOT6 dictionaries are apparently generated with absolute paths to header files hard coded. There's some new autoloading mechanism which wants these headers. If the build source area goes away, these become dangling references.

One solution is to tell rootcling to inline the header file contents which this PR does by passing the option -inlineInputHeader through the cmake macro that runs rootcling.

Another solution is maybe to use -noIncludePaths. I guess this is good that it makes the dictionaries smaller but at the cost that one has to install the header files and set ROOT_INCLUDE_PATH

Note that in Makefile.common we use rootcint and not rootcling...I have v.little idea of what ROOT is even trying to do here, or how rootcint or rootcling fit in...some trial and error required

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0