Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reading from branches of extended TTree #936

Open
lobis opened this issue Aug 14, 2023 · 0 comments
Open

Reading from branches of extended TTree #936

lobis opened this issue Aug 14, 2023 · 0 comments
Assignees
Labels
feature New feature or request

Comments

@lobis
Copy link
Collaborator

lobis commented Aug 14, 2023

I would like to read data from a class (TRestAnalysisTree) that inherits from the standard TTree.

Currently this does not work but uproot correctly reads the object as a tree so perhaps it can also read the branch contents with a few changes.

Using latest uproot (5.0.11).

import uproot

file = uproot.open("simulation.analysis.root")

analysis_tree = file["AnalysisTree"] # is not a TTree but inherits from one
print(analysis_tree.keys()) # works fine
event_tree = file["EventTree"] # event_tree is a TTree
print(analysis_tree) # <TTree 'AnalysisTree' (72 branches) at 0x02e3ec6540d0>
print(event_tree) # <TTree 'EventTree' (4 branches) at 0x02e39dbc5c90>

analysis_branch = analysis_tree["g4Ana_yOriginPrimary"]
analysis_branch.array() # ERROR

The error:


tests\test_derived_tree.py:1 (test_derived_tree)
def test_derived_tree():
        import uproot
    
        input_file = "simulation.anaylsis.root"
    
        file = uproot.open(input_file)
    
        analysis_tree = file["AnalysisTree"]
        event_tree = file["EventTree"]
    
        print(analysis_tree.keys())
        print(event_tree.keys())
    
        print(event_tree["TRestGeant4EventBranch/TRestEvent/TObject/fUniqueID"].array(library="ak"))
    
        analysis_branch = analysis_tree["g4Ana_yOriginPrimary"]
        event_branch = event_tree["TRestGeant4EventBranch/TRestEvent/fOk"]
    
        #analysis_branch._file = event_branch._file
        #analysis_branch._parent = event_branch._parent
    
    
>       analysis_tree["g4Ana_yOriginPrimary"].array()

analysis_branch = <TBranch 'g4Ana_yOriginPrimary' at 0x022534bbf0d0>
analysis_tree = <TTree 'AnalysisTree' (72 branches) at 0x022534ba61d0>
event_branch = <TBranchElement 'fOk' at 0x022534c8d990>
event_tree = <TTree 'EventTree' (4 branches) at 0x022534c29c10>
file       = <ReadOnlyDirectory '/' at 0x022534212c10>
input_file = 'simulation.anaylsis.root'
uproot     = <module 'uproot' from 'C:\\Users\\lobis\\git\\uproot\\src\\uproot\\__init__.py'>

test_derived_tree.py:24: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
..\src\uproot\behaviors\TBranch.py:1768: in array
    decompression_executor, interpretation_executor = _regularize_executors(
        ak_add_doc = False
        array_cache = 'inherit'
        decompression_executor = None
        entry_start = 0
        entry_stop = 20
        interpretation = AsDtype('>f8')
        interpretation_executor = None
        library    = 'ak'
        self       = <TBranch 'g4Ana_yOriginPrimary' at 0x022534bbf0d0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

decompression_executor = None, interpretation_executor = None
file = <uproot.reading.DetachedFile object at 0x000002253421D650>

    def _regularize_executors(decompression_executor, interpretation_executor, file):
        if file is None:
            if decompression_executor is None:
                decompression_executor = uproot.source.futures.TrivialExecutor()
            if interpretation_executor is None:
                interpretation_executor = uproot.source.futures.TrivialExecutor()
        else:
            if decompression_executor is None:
>               decompression_executor = file.decompression_executor
E               AttributeError: 'DetachedFile' object has no attribute 'decompression_executor'

decompression_executor = None
file       = <uproot.reading.DetachedFile object at 0x000002253421D650>
interpretation_executor = None

..\src\uproot\behaviors\TBranch.py:2656: AttributeError

I think this come from the reading of the trees as there are some differences, for example:

print(event_tree._file) # <ReadOnlyFile 'simulation.anaylsis.root' at 0x02e3ffa25fd0>
print(analysis_tree._file) # <uproot.reading.DetachedFile object at 0x000002E3EC656A10>

Updating some of these private attributes (e.g. _file) fixes some of the errors but I could not get it working.

Sample root file (zip): simulation.anaylsis.zip

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant