2016-07-07 13 views
1

Ich bin nicht sicher, ob diese Frage tatsächlich über Zeiger ist, weil ich nicht sehr sicher bin, was sie sind, aber ich muss einige .root-Datei mit Python lesen. Unten ist ein Screenshot der Datei.Lesen von Zeigern in Python von root

enter image description here

ich es geschafft, die Zahlen zu lesen, aber ich kann die Vektoren nicht gelesen (oder Zeiger - Ich bin nicht sicher, was sie sind). Ich bin neu zu root. Hier ist der Leseteil des Codes, wobei t1 eine TTree innerhalb der Datei ist.

a.append(root.TChain("t1")) 

for chain in a: 
    chain.Add(input) 
entries = a[0].GetEntries() 

Und dies ist das Lesen einiger Anzahl Variablen (nicht die, die im Bild):

import pandas as pd 
entries = chain[0].GetEntries() 

xp_pri = [] 
yp_pri = [] 
X_shower = [] 
Y_shower = [] 

for k in range(entries): 
    for a in chain: 
     a.LoadTree(k) 
     a.GetEntry(k) 

     xp_pri = xp_pri + [chain[0].xp_pri] 
     yp_pri = yp_pri + [chain[0].yp_pri] 
     X_shower = X_shower + [chain[0].X_shower/10**10] 
     Y_shower = Y_shower + [chain[0].Y_shower/10**10] 

Also meine Frage ist, wie kann ich die Vektoren lesen, denn wenn ich das gleiche Verfahren verwenden : Kette [0] .xp_pri, das Programm funktioniert nicht mehr?

+0

Sie sollten ein vollständiges Beispiel (einschließlich aller Importe) einschließen, sonst ist es sehr schwierig, den Kontext um Ihre Frage zu erhalten. – Ajean

Antwort

0

erstellen

myvec = ROOT.std.vector('float')() 

oder

myvec = ROOT.std.vector('int')() 

dann:

chain.SetBranchAddress("the_branch_name",myvec) 

nach:

chain.GetEntry(some_entry_number) 

myvec enthält die Werte für die Ereignisnummer some_entry_number.

Ihre andere Option ist die Verwendung von root_numpy, die auch Vektoren abrufen kann.