Conversion from list to array

Hello,
I have one question concerning the conversion from list to array. What I want to do is to have a
list to profit from the append() method without declaring the size of an array beforehand. Then I
want to use the list to fill a TGraph. TGraph takes arrays though so I tried to use scipy.array() for the
conversion but I get the error below. Maybe there is another better way?

What I tried is in the following snippet:

#!/usr/bin/env python
import sys
from array import array
from ROOT import *
import scipy

file = TFile("../output/tData.root")
tree=file.Get("mytree")

leaves=tree.GetListOfLeaves()

class PyListOfLeaves(dict) :
    pass

pyl = PyListOfLeaves()

#add leaves as attributes
for i in range(0,leaves.GetEntries()):
	leaf = leaves.At(i)
	name = leaf.GetName()
	pyl.__setattr__(name,leaf)
	print name


vp=[]
vc=[]

nev = tree.GetEntries()

for iev in range(0,nev):
       
	tree.GetEntry(iev)
	p_=pyl.P.GetValue()
        print p_ 
	vp.append(p_)
	vc.append(iev)

#graphs
g_price_t = TGraph(len(vc),scipy.array(vc),scipy.array(vp))

when I run it I get:

Error in sys.excepthook:
Traceback (most recent call last):
File “C:\root\bin\ROOT.py”, line 269, in excepthook
execfile( fn, main.dict, main.dict )
File “analyzer.py”, line 112, in
g_price_t = TGraph(len(vcount
),scipy.array(vprice_),scipy.array(vcount_))
TypeError: none of the 11 overloaded methods succeeded. Full details:
TGraph::TGraph() =>
takes at most 0 arguments (3 given)
TGraph::TGraph(Int_t n) =>
takes at most 1 arguments (3 given)
TGraph::TGraph(const TGraph& gr) =>
takes at most 1 arguments (3 given)
TGraph::TGraph(const TVectorF& vx, const TVectorF& vy) =>
takes at most 2 arguments (3 given)
TGraph::TGraph(const TVectorD& vx, const TVectorD& vy) =>
takes at most 2 arguments (3 given)
TGraph::TGraph(const TH1* h) =>
takes at most 1 arguments (3 given)
TGraph::TGraph(const TF1* f, Option_t* option = “”) =>
takes at most 2 arguments (3 given)
TGraph::TGraph(const char* filename, const char* format = “%lg %lg”, Option_t*
option = “”) =>
could not convert argument 1 (expected string or Unicode object, int found)
TGraph::TGraph(Int_t n, const Int_t* x, const Int_t* y) =>
could not convert argument 2 (‘numpy.ndarray’ object has no attribute ‘typec
ode’ and given element size (8) do not match needed (4))
TGraph::TGraph(Int_t n, const Float_t* x, const Float_t* y) =>
could not convert argument 2 (‘numpy.ndarray’ object has no attribute ‘typec
ode’ and given element size (8) do not match needed (4))
TGraph::TGraph(Int_t n, const Double_t* x, const Double_t* y) =>
could not convert argument 3 (‘numpy.ndarray’ object has no attribute ‘typec
ode’ and given element size (4) do not match needed (8))

Original exception was:
File “”, line 1
.x analyzer.py
^
SyntaxError: invalid syntax

Any idea? Thanks!
lore

Hi,

there’s a problem with the converted arrays: one of them appears to be of the int* variety, the other of double*. TGraph needs to have two arrays that are the same (i.e. either both int* or both double*).

Cheers,
Wim