5 const Int_t MAXMARKERS = 100 ;
6 Int_t i, nbmarkers; Stat_t x[MAXMARKERS], areas[MAXMARKERS]; Int_t ind[MAXMARKERS];
9 if ( TVirtualPad::Pad() == NULL )
return;
13 TIter next(gPad->GetListOfPrimitives());
15 hist = NULL; nbmarkers = 0;
16 while ( (obj = next()) ) {
17 if ( obj->InheritsFrom(
"TMarker") ) {
18 x[nbmarkers++] = ((TMarker*)obj)->GetX();
20 if ( obj->InheritsFrom(
"TH1") ) { hist = (TH1 *)obj; }
22 if ( hist == NULL || nbmarkers < 2 ) {
23 printf(
"There is no histograms or enough clicks in the current pad to realise an integration \n");
return; }
25 TMath::Sort(nbmarkers,x,ind,
false);
28 Double_t integral = 0.0; Int_t first_bin, last_bin; Stat_t first_bin_c, last_bin_c;
30 for ( i = 0; i < nbmarkers - 1; i++ ) {
32 first_bin = hist->FindBin( x[ind[i]] ); last_bin = hist->FindBin( x[ind[i+1]] );
34 for (Int_t bin = first_bin; bin < last_bin; bin++ ) {
35 sum += hist->GetBinWidth(bin)*hist->GetBinContent(bin);
38 areas[i] = sum; integral += sum;
42 printf(
"******************* AREA1 RESULTS ******************* \n");
43 for ( i = 0; i < nbmarkers - 1; i++ ) {
44 first_bin = hist->FindBin( x[ind[i]] ); last_bin = hist->FindBin( x[ind[i+1]] );
45 if ( integral == 0.0 ) {
46 printf(
" Integral %d from %.1f (%d) to %1.f (%d): %1.f \n",i,x[ind[i]],first_bin,x[ind[i+1]],last_bin,areas[i]);
49 printf(
" Integral %d from %.1f (%d) to %1.f (%d): %1.f (%.1f \%) \n",i,x[ind[i]],first_bin,x[ind[i+1]],last_bin,areas[i],100.0*areas[i]/integral);
53 printf(
" Total from %.1f (%d) to %1.f (%d): %1.f \n",x[ind[0]],first_bin,x[ind[nbmarkers-1]],last_bin,integral);
54 printf(
"***************************************************** \n");
printf("******************************************************************** \n")
void Area1()
Function to integrate the areas between markers.