[ROOT] strange function

From: Datao Gong (dtgong@physics.umn.edu)
Date: Wed Oct 22 2003 - 07:23:56 MEST


Hi,Everyone,
I just need to caculate some function values. Also it should not be hard
to draw the funcation. But the Root always complain divided by zero.
If i do not call the function in the loop, it is fine and get what i
expect value. Since my code is rathen simple. i paste it here. I use
Root 3.03 on osf1 system.

#include "TH1.h"
#include "TF1.h"
#include "TROOT.h"
#include "TStyle.h"

Double_t f(Double_t z)
{

   Double_t returnValue = (1+0.5*z)*(1+0.5*z)*TMath::log(1/z)-
                          0.5*(1-z)*(3+z);
   return returnValue;

}

Double_t fluxMR(Double_t beam,Double_t m)
{
  Double_t s     = 4*beam*beam;
  Double_t me    = 0.511/1000.0;
  Double_t alpha = 1/137.036;

  Double_t  returnValue;

  Double_t z = m*m/s;

  Double_t t1 = TMath::log(s/(me*me))-1;
  Double_t t2 = TMath::log(s/(m*m));
  returnValue = 3*8*alpha*alpha/(m*m*m)*
                ( f(z)*t1*t1-1/3.0*t2*t2*t2 );

}

Double_t flux(Double_t *beam, Double_t *par)
{

  Double_t etacM      = par[0];
  Double_t etacPrimeM = par[1];
  Double_t returnValue = fluxMR(beam[0],etacPrimeM)/fluxMR(beam[0],etacM);
  return returnValue;

}

void calcflux()
{
   Double_t par[2];
   Double_t beam[1];
   beam[0] = 5.28;
   par[0] = 2.98;
   par[1] = 3.64;

   Double_t res;
   for(Int_t i = 0 ; i < 100 ; ++i){ //if do not loop, it is fine.
      beam[0] = 4.7;
//      beam[0] = 4.7+(5.5-4.7)/100.0*i;
      cout<<flux(beam,par)<<endl;

    }
}


Thanks

Gong Datao



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:16 MET