I have a selector generated using TTree::MakeSelector.
Then I process a chain of files containing this tree with chain->Process(“selector.C++”).
Everything works fine but the Loop stops at ~10^9 events. I saw that the default
value for nentries is:
Long64_t Process(void* selector, Option_t* option = “”, Long64_t nentries = 1000000000, Long64_t firstentry = 0)
so I thought that typing:
chain->Process(“selector.C++”,"",(double)chain->GetEntries(),0)
would solve the problem but it still stops, although chain->GetEntries()
in CINT gives me the total entries which is more than 10^9.
I have also tried adding in the Init(TTree *tree) function the following line:
fChain->SetMaxEntryLoop((Long64_t)10000000000);
but it still stops. fChain->GetMaxEntryLoop() returns the number that I set but
still does not process all the events.
[quote]chain->Process(“selector.C++”,"",chain->GetEntries(),0);
Do you mean without the (double) at the front, yes I also tried this.
[/quote]Yes I did as the double may cut some of the precision of the long long.
Anyway, this is really strange as I can not reproduce that behavior; I tried with both 5.21/04 and the trunk with a file with 10^10 entries.
Cheers,
Philippe.
PS. MaxEntryLoop is only used by TTree::Draw (and not by TTree::Process).
I can reproduce the problem with a very simple tree.
The processing stops at :
2.14748364800000000e+09 which is 2**31.
Are you testing it on a 64 bit machine?
I am on a 32 bit machine running Ubuntu8.04.
I still get the same limitation even when trying in 2 other machines with different root versions. I am sending you the exact files that I use in case you can spot something
obviously wrong. If not I guess it will be a very personal bug! ;( Thanks for your time.
I noticed one more thing that may help resolve this issue.
In one of the machines that I tried the exact files that I sent you we have a
root verstion 5.22/00b
which supports proof-Lite.
Although it stops at 2**31 if I run it with:
root [1] mytree->Process(“mytree.C++”,"",mytree->GetEntries())
If I run it with the following commands it processes all events!!
root [0] p = TProof::Open("")
+++ Starting PROOF-Lite with 8 workers +++
Opening connections to workers: OK (8 workers)
Setting up worker servers: OK (8 workers)
PROOF set to parallel mode (8 workers)
(class TProof*)0x85f0b90
root [1] TDSet *set;
root [2] set = new TDSet(“TTree”,“mytree”);
root [3] set->Add(“testselector.root”)
(Bool_t)1
root [4] set->Process(“mytree.C+”)
[quote]I still get the same limitation even when trying in 2 other machines with different root versions.[/quote]Can you be more specific on the configuration which fails (I.e. ROOT version number, OS, etc.)
I am sending you 3 configurations from machines which stopped at 2**31
and 1 from a machine that processed all events.
Note the last one is a 64bit machine and using the exact same code, commands and root version as in the 3rd (which failed) it run all the events!!!