Error in <TTreeFormula::Compile>: Bad numerical expression : "bifTime"

I have 4 existing branch variables: bif_nTrigger, bif_source, bif_BXID and bif_Time. The first three are integers, the last one is a float. The last three variables all depend on the first, bif_nTrigger. These have all been initialized properly.

I am trying to implement a for loop that will trim two of the variables, bif_Time and bif_BXID, according to whether the value of bif_source is equal to 3. This code is successfully done in python the following way:

# loop for bif_nTrigger times,  if bif_source[i] equals 3, read bifTime and bunchcrossingID from this source.

        for i in range(0, bif_nTrigger):
            if bif_source[i] == 3:
                bifTime = bif_Time[i]
                bxID = bif_BXID[i] % 2

I am trying to adapt it to C, but I keep getting the following errors:
Error in TTreeFormula::Compile: Bad numerical expression : “bifTime”
Error in TTreeFormula::Compile: Bad numerical expression : “bxID”

My code is as follows:

 int bxID;
 float bifTime;

  for (int i = 0; i = bif_nTrigger; ++i) {
      if (bif_source[i] == 3) {
               bifTime = bif_Time[i];
               bxID = bif_BXID[i] %2;

I am very new to C and so I can’t seem to figure out what the error is caused by. Any help would be much appreciated!

ROOT Version: 5.28
Platform: C
Compiler: gcc ?

Hi Aveen,

first off, you have a mistake in the for loop:

for (int i = 0; i = bif_nTrigger; ++i) {

should be replaced with

for (int i = 0; i < bif_nTrigger; ++i) {

Thanks for pointing that out, just changed it.
It still does not fix the error I am getting however, any other ideas?

I guess I need to see more of your code to figure out what’s happening.

I might be wrong (@pcanal can confirm/deny) but I don’t think TTreeFormula supports variable definitions like that? I think that’s what the error complains about.

I suggest you don’t pass your code as a TTreeFormula but actually read and process data with full C++ so you have no limitations in terms of the syntax/types/language features you can use (see e.g. this post for a list of interfaces ROOT offers to read and process TTree data.


Correct. In first approximation TTreeFormula can only handle numerical expression using (implicitly defined) variables named after the branches.

1 Like