Get the data out of a Tleafelement into a string

I want to extract the data from a TLeafElement and convert it to a string. Is there a easy way to do that?

I assume that your leaf contains any type of data (int, float, double, etc)
In this case use TLeafElement::GetValue and use of the C/C++ tools to
convert to a string, eg
char val[50];
sprintf(val,"%g",leaf->GetValue());
or
sprintf(val,%d,(int)leaf->GetValuePointer());

If the leaf contains a string, use GetValuePointer, eg
sprintf(val,%s",(char*)leaf->GetValuePointer());

Rene

That didnt sound too complicated, but do i recognize if it is a int,char or etc? and how do i handle pointers?

May be you should explain first what you are trying to do. In general, you should not have to call these functions.

Rene

well what i need to do the same as Leaf:show() but instead of getting the result printed i want to into strings. So if show() shows three varibles with data i want the data into three diffrent strings.

i’ve done it so far with integer and reals (but i put the data into integers and reals then), which works fine. But a TLeafElement is own defined object and because the data can whatever i want it into strings. I don’t know how to handle that.

Thank you for the help so far,

Hi,

You could use a TTreeFormula and have to deal only with double (or even use TTreeFormula::PrintValue). See TTreePlayer::Scan for some usage.

Cheers,
Philippe.

How could i use TTreeFormula ? I don’t get how it could be used.

This is how i do it for integers:
Int_t value = (Int_t)leaf->GetValuePointer();

but i want the TLeafElement(bc of a TLeafElement can be anything) into chars. i get results like
======> EVENT:3
EventInfo = NULL
m_event_ID = (EventID*)11e2a60
m_event_type = (EventType*)11ebcd0
m_trigger_info = (TriggerInfo*)0

when i use show(3). I want that data (which looks to me like it’s pointers) into charstrings that looks like “[(EventID*)11e2a60]” or something.

It would be great if you knew an easy way to do that.

and finally, what does “m_DataHeader = printing kStreamer case (500)” mean?

Thanks
Johan

Hi,

Unfortunately the code for TTree::Show prints directly to the screen so there is no simple way. You could try to follow (and copy/paste/modify) the path TTree::Show calls TLeafElement::PrintValue which calls TBranchElement::PrintValue which calls TStreamerInfo::PrintValue.

The message you mention means that TStreamerInfo::PrintValue does not know how to print this type of data.

Cheers,
Philippe.

Ok, I actually been down that road and looked but thought it looked really complicated (at least compered with the integers and floats etc) so I thought i should ask you guys.

So that is the only way to do it?