I have a TTree with a branch variable which is an array of floats called fPosition_mm. The length of this array varies from event-to-event and there is a branch variable which specifies that length in each event called iRecordSize.
I would like to draw a histogram of the max element of fPosition_mm using TTree::Draw(), however, the following does not work:
tree->Draw("TMath::MaxElement(iRecordSize,fPosition_mm)","","hist")
Could someone clarify where my notation for using the TMath::MaxElement() function is going wrong? Thanks!
I think Draw does not support arguments like this. You could use a Proxy (see TTree::MakeProxy() and the h1analysisProxy example), but it may be simpler to just make your own histogram and fill it by looping over the tree; something like (in mymacro.C):
double maxval(int n, int* x) {
return TMath::MaxElement(n,x);
}
void mymacro() {
TFile *f = new TFile("myfile.root");
TTree *T = (TTree*)f->Get("T");
int n, x[3]; // here all have size 3; use n if saved in the tree
T->SetBranchAddress("x",x);
// T->SetBranchAddress("n",&n); // array sizes, if given in the tree
TH1D *h = new TH1D("h","h",12,0,12); // use your own values
T->Scan("x");
double v = 0;
for (int i=0; i<T->GetEntries(); ++i) {
T->GetEvent(i);
v = maxval(3,x); // (n,x); alternatively: v = TMath::MaxElement(3,x);
cout << v << endl;
h->Fill(v);
}
h->Draw();
}
which gives, in this case:
***********************************
* Row * Instance * x *
***********************************
* 0 * 0 * 0 *
* 0 * 1 * 1 *
* 0 * 2 * 2 *
* 1 * 0 * 1 *
* 1 * 1 * 2 *
* 1 * 2 * 3 *
* 2 * 0 * 4 *
* 2 * 1 * 5 *
* 2 * 2 * 6 *
* 3 * 0 * 9 *
* 3 * 1 * 10 *
* 3 * 2 * 11 *
***********************************
2
3
6
11
Thanks! For those curious, this Max$ function is part of the special functions listed here (scroll down!).