//*LastUpdate: jsf-1-15 4-Feburary-2000
//*LastUpdate: jsf-1-14 11-Feburary-2000
//*LastUpdate: jsf-1-9 17-May-1999 Akiya Miyamoto
//*LastUpdate: jsf-1-7 8-April-1999 Akiya Miyamoto
//*LastUpdate: v0.3.08 09/29/1998 by A.Miyamoto
//*-- Author : Akiya Miyamoto 09/22/1998
//////////////////////////////////////////////////////////////////
//
// JSFBases
//
// JSF Interfaces to BASES/SPRING
//
// User's basis class should be derived from this class.
// Typical macro is,
// {
// // An example of Bases.
// // Calculate cross section of e+e- --> gamma* --> f+f-
// gROOT->Reset();
// TFile file("bases.root","RECREATE"); // Output file.
// bases = new LLbarBases();
// bases->SetEcm(300.0); // Set ECM
// bases->SetParton(1, 2.0/3.0 ); // Set Parton
// bases->Bases();
// bases->Write();
// file->Write();
// }
//
// (Update)
// 8-Apr-1999 A.Miyamoto forgetted Int_t is inserted in consit of
// function Streamer.
// 17-May-1999 A.Miyamoto Add Xhsave function.
// 24-Jul-1999 A.Miyamoto Environment variable, JSFBases.RandomSeed
// is added to set seed of random variable.
// 11-Feb-2000 A.Miyamoto Uses new C++ BasesSpring library
// 3-Jul-2000 A.Miyamoto Output 2D bases histogram in SPRING
// In spring, allow multiple H1FILL call per functions.
//$Id: JSFBases.cxx,v 1.13 2001/10/12 02:03:16 miyamoto Exp $
//
//////////////////////////////////////////////////////////////////
//
#include "TH1.h"
#include "TH2.h"
#include "THashTable.h"
#include "TIterator.h"
#include "TKey.h"
#include "JSFBases.h"
#include "JSFSpring.h"
ClassImp(JSFBases)
ClassImp(JSFBasesTempHist)
Int_t JSFBasesTempHist::fMax=20;
//_____________________________________________________________________________
JSFBases::JSFBases(const char *name, const char *title)
: BasesSpring(), TNamed(name,title)
{
fIsSpring = kFALSE;
fBSHash1=new THashTable();
fBSHash2=new THashTable();
fSPHash1=new THashTable();
fSPHash2=new THashTable();
fTempHash1=new THashTable();
fTempHash2=new THashTable();
}
//_____________________________________________________________________________
JSFBases::~JSFBases()
{
if( fBSHash1 ) fBSHash1->Delete();
if( fBSHash2 ) fBSHash2->Delete();
delete fBSHash1;
delete fBSHash2;
if( fSPHash1 ) fSPHash1->Delete();
if( fSPHash2 ) fSPHash2->Delete();
delete fSPHash1;
delete fSPHash2;
if( fTempHash1 ) fTempHash1->Delete();
if( fTempHash2 ) fTempHash2->Delete();
delete fTempHash1;
delete fTempHash2;
}
//_____________________________________________________________________________
void JSFBases::SetSpring(JSFSpring *spring)
{
// Set Address of spring module
fSpring=spring;
if( fSpring->GetBases() != this ) fSpring->SetBases(this);
}
//_________________________________________________________
void JSFBases::Param(int sample, double tune, int itr1,
double ac1, int itr2, double ac2 )
{
//* =================================================== *
//******************************************************************************
//* ( Function ) *
//* To set the bases parameters. *
//* ( Output = Input ) *
//* ncall = sample : the number of sampling points per iteration ( given ) *
//* itmx1 = itr1 : maximum number of iterations for grid opt. step *
//* acc1 = ac1 : required accuracy for grid opt. step *
//* itmx2 = itr2 : maximum number of iterations for integration step *
//* acc2 = ac2 : required accuracy for integration step *
//* coded by S.kawabata June '99 at KEK *
//******************************************************************************/
param(sample, tune, itr1, ac1, itr2, ac2);
}
//_________________________________________________________
void JSFBases::SetNoOfSample( int sample )
{
setNoOfSample(sample);
}
//_________________________________________________________
void JSFBases::SetTuneValue ( double tune )
{
setTuneValue(tune);
}
//_________________________________________________________
void JSFBases::SetIteration1( double ac1, int itx1 )
{
setIteration1(ac1, itx1);
}
//_________________________________________________________
void JSFBases::SetIteration2( double ac2, int itx2 )
{
setIteration2(ac2, itx2);
}
//_________________________________________________________
void JSFBases::DefineVariable( double &v, double low, double high, int wld, int grd )
{
defineVariable(v, low, high, wld, grd);
}
//_________________________________________________________
void JSFBases::DefineVariable( int ndim, int nwild,
double x_l[], double x_u[], int jg[] )
{
defineVariable(ndim, nwild, x_l, x_u, jg );
}
//_________________________________________________________
void JSFBases::Bases( )
{
fIsSpring=kFALSE;
Userin();
BasesSpring::Bases();
}
//_________________________________________________________
void JSFBases::Spring( int mxtry )
{
fIsSpring=kTRUE;
BasesSpring::Spring(mxtry);
}
//_________________________________________________________
void JSFBases::Sp_info( )
{
sp_info();
}
// Utilities
//_________________________________________________________
void JSFBases::Forder( float v, float &fv, float &order, int &iorder )
{
forder( v, fv, order, iorder );
}
//_________________________________________________________
Double_t JSFBases::GetWeight( )
{
return getwgt();
}
//_________________________________________________________
Double_t JSFBases::GetScalls( )
{
return getscalls();
}
//_________________________________________________________
Int_t JSFBases::Flag_bases( )
{
return BasesSpring::Flag_bases();
}
//_________________________________________________________
Double_t JSFBases::GetEstimate( )
{
return getEstimate();
}
//_________________________________________________________
Double_t JSFBases::GetError( )
{
return getError();
}
//_________________________________________________________
Int_t JSFBases::GetNoOfIterate( )
{
return getNoOfIterate();
}
// For histogramming package
//_________________________________________________________
void JSFBases::H1Init(Char_t *hn, Char_t *title, Int_t nbin, Double_t xlow, Double_t xhigh)
{
// Create histogram object to save Bases and Spring result
//
Char_t hstn[128];
sprintf(hstn,"%sBS",hn);
TH1D *hst=new TH1D(hstn, title, nbin, xlow, xhigh);
fBSHash1->Add(hst);
sprintf(hstn,"%sSP",hn);
hst=new TH1D(hstn, title, nbin, xlow, xhigh);
fSPHash1->Add(hst);
JSFBasesTempHist *th=new JSFBasesTempHist(hn);
fTempHash1->Add(th);
}
//_________________________________________________________
void JSFBases::H1Fill(Char_t *hn, Double_t x, Double_t fx)
{
// Fill Histogram
if( fIsSpring ) {
JSFBasesTempHist *th=((JSFBasesTempHist*)(fTempHash1->FindObject(hn)));
th->Fill(x, fx*GetWeight() );
}
else {
if( Flag_bases() > 1 ) { // Accumulate only during second integration loop
Char_t hstn[128];
Char_t *hnsuf;
hnsuf="BS";
sprintf(hstn,"%s%s",hn,hnsuf);
((TH1D*)(fBSHash1->FindObject(hstn)))->Fill(x, fx*GetWeight());
}
}
}
//_________________________________________________________
void JSFBases::H2Init(Char_t *hn, Char_t *title, Int_t nbinx, Double_t xlow, Double_t xhigh,
Int_t nbiny, Double_t ylow, Double_t yhigh)
{
Char_t hstn[128];
sprintf(hstn,"%sBS",hn);
TH2D *hst=new TH2D(hstn, title, nbinx, xlow, xhigh, nbiny, ylow, yhigh);
fBSHash2->Add(hst);
sprintf(hstn,"%sSP",hn);
hst=new TH2D(hstn, title, nbinx, xlow, xhigh, nbiny, ylow, yhigh);
fSPHash2->Add(hst);
JSFBasesTempHist *th=new JSFBasesTempHist(hn);
fTempHash2->Add(th);
}
//_________________________________________________________
void JSFBases::H2Fill(Char_t *hn, Double_t x, Double_t y, Double_t fx)
{
if( fIsSpring ) {
JSFBasesTempHist *th=((JSFBasesTempHist*)(fTempHash2->FindObject(hn)));
th->Fill(x, y, fx*GetWeight() );
}
else {
if( Flag_bases() > 1 ) { // Integrate only in 2nd integration loop.
Char_t hstn[128];
Char_t *hnsuf;
hnsuf="BS";
sprintf(hstn,"%s%s",hn,hnsuf);
((TH2D*)(fBSHash2->FindObject(hstn)))->Fill(x, y, fx*GetWeight());
}
}
}
//_________________________________________________________
void JSFBases::EndIntegration( Int_t step )
{
if( step == 0 ) {
/*
TIterator *hst=fBSHash1->MakeIterator();
TH1D *h1;
while( (h1=(TH1D*)hst->Next()) ){
h1->Reset();
}
hst=fBSHash2->MakeIterator();
TH2D *h2;
while( (h2=(TH2D*)hst->Next()) ){
h2->Reset();
}
*/
}
else {
TIterator *hst=fBSHash1->MakeIterator();
TH1D *h1;
Double_t sc=1./GetScalls();
while( (h1=(TH1D*)hst->Next()) ){
Double_t fact=sc/h1->GetBinWidth(1);
h1->Scale(fact);
}
hst=fBSHash2->MakeIterator();
TH2D *h2;
while( (h2=(TH2D*)hst->Next()) ){
Double_t fact=sc/h2->GetBinWidth(1);
h2->Scale(fact);
}
}
}
//_________________________________________________________
void JSFBases::CopyHists(TFile *f, TDirectory *dest)
{
// Copy bases hists in f to the directory dest
TDirectory *now=0;
if( dest ) { now=gDirectory; dest->cd(); }
TList *klst = f->GetListOfKeys();
TListIter nkey(klst);
TKey *key;
while ((key = (TKey*)nkey())) {
if( strcmp(key->GetClassName(),"TH1D") == 0 ) {
Int_t ln=strlen(key->GetName());
const Char_t *hn=key->GetName();
if( *(hn+ln-1) == 'S' && *(hn+ln-2) == 'B' ) {
TH1D *hnew=(TH1D*)(fBSHash1->FindObject(hn));
if( hnew ) hnew->Add((TH1D*)f->Get(key->GetName()));
else {
printf("Warning in JSFBases::CopyHistsn");
printf("Bases histogram, %s, in the file, %s",hn,f->GetName());
printf(" is not defined in the current job.n");
}
}
}
else if( strcmp(key->GetClassName(),"TH2D") == 0 ) {
Int_t ln=strlen(key->GetName());
const Char_t *hn=key->GetName();
if( *(hn+ln-1) == 'S' && *(hn+ln-2) == 'B' ) {
TH2D *hnew=(TH2D*)(fBSHash2->FindObject(hn));
if( hnew ) hnew->Add((TH2D*)f->Get(key->GetName()));
else {
printf("Warning in JSFBases::CopyHistsn");
printf("Bases histogram, %s, in the file, %s",hn,f->GetName());
printf(" is not defined in the current job.n");
}
}
}
}
if( dest ) { now->cd(); }
}
// For histogramming package
//_________________________________________________________
void JSFBases::Xh_init( int id, double x_low, double x_high, int bin, char title[] )
{
xh_init( id, x_low, x_high, bin, title );
}
//_________________________________________________________
void JSFBases::Dh_init( int id, double x_low, double x_high, int Xbin,
double y_low, double y_high, int Ybin, char title[] )
{
dh_init( id, x_low, x_high, Xbin, y_low, y_high, Ybin, title );
}
//_________________________________________________________
void JSFBases::Bh_plot( )
{
bh_plot( );
}
//_________________________________________________________
void JSFBases::Xh_fill( int id, double x, double fx )
{
xh_fill( id, x, fx );
}
//_________________________________________________________
void JSFBases::Dh_fill( int id, double x, double y, double fx )
{
dh_fill( id, x, y, fx );
}
//_________________________________________________________
void JSFBases::Bh_save( )
{
bh_save();
}
//_________________________________________________________
void JSFBases::Sh_reset( )
{
sh_reset();
}
//_________________________________________________________
void JSFBases::sh_reset( )
{
BasesSpring::sh_reset();
TIterator *hst1=fTempHash1->MakeIterator();
JSFBasesTempHist *th1;
while( (th1=(JSFBasesTempHist*)hst1->Next()) ){
th1->Reset();
}
TIterator *hst2=fTempHash2->MakeIterator();
JSFBasesTempHist *th2;
while( (th2=(JSFBasesTempHist*)hst2->Next()) ){
th2->Reset();
}
}
//_________________________________________________________
void JSFBases::Sh_update( )
{
sh_update();
}
//_________________________________________________________
void JSFBases::sh_update( )
{
// Fill saved histogram inforation
BasesSpring::sh_update();
Char_t hstn[128];
TIterator *hst1=fTempHash1->MakeIterator();
JSFBasesTempHist *th1;
while( (th1=(JSFBasesTempHist*)hst1->Next()) ){
sprintf(hstn,"%sSP",th1->GetName());
th1->Update(((TH1D*)(fSPHash1->FindObject(hstn))));
}
TIterator *hst2=fTempHash2->MakeIterator();
JSFBasesTempHist *th2;
while( (th2=(JSFBasesTempHist*)hst2->Next()) ){
sprintf(hstn,"%sSP",th2->GetName());
th2->Update(((TH2D*)(fSPHash2->FindObject(hstn))));
}
}
//_________________________________________________________
void JSFBases::Sh_plot( )
{
sh_plot();
}
//_________________________________________________________
Double_t JSFBases::Func( double x[] )
{
return BasesSpring::func(x) ;
}
//_________________________________________________________
Double_t JSFBases::Func( )
{
return BasesSpring::func() ;
}
//_________________________________________________________
double JSFBases::func( double x[] )
{
return Func(x);
}
//_________________________________________________________
double JSFBases::func()
{
return Func();
}
//______________________________________________________________________________
void JSFBases::Streamer(TBuffer &R__b)
{
// Stream an object of class JSFBases.
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(); if (R__v) { }
if( R__v < 3 ) {
printf("JSFBases::Streamer .. Old version data. Can not read.n");
}
TNamed::Streamer(R__b);
R__b >> ndim;
R__b >> nwild;
R__b.ReadStaticArray(ig);
R__b >> ncall;
R__b >> ngiven;
R__b.ReadStaticArray(xl);
R__b.ReadStaticArray(xu);
R__b.ReadStaticArray(&xi[0][0]);
R__b.ReadStaticArray(dx);
R__b >> nd;
R__b >> ng;
R__b >> nsp;
R__b >> npg;
R__b.ReadStaticArray(ma);
R__b.ReadStaticArray(dxd);
R__b.ReadStaticArray(pxd);
R__b >> it;
R__b >> itmx1;
R__b >> itmx2;
R__b >> acc1;
R__b >> acc2;
R__b >> si;
R__b >> swgt;
R__b >> scalls;
R__b >> xnd;
R__b >> jacob;
R__b >> dxg;
R__b >> estim;
R__b >> error;
// save seed
long seed, iy, iv[NTAB];
R__b >> seed;
R__b >> iy;
R__b.ReadStaticArray(iv);
ran1.SetSeed(seed);
ran1.SetSeed2(iy, iv);
} else {
R__b.WriteVersion(JSFBases::IsA());
TNamed::Streamer(R__b);
R__b << ndim;
R__b << nwild;
R__b.WriteArray(ig,ndim);
R__b << ncall;
R__b << ngiven;
R__b.WriteArray(xl,ndim);
R__b.WriteArray(xu,ndim);
Int_t mxndmxdim=MXND*MXDIM;
Int_t mxdim=MXDIM;
R__b.WriteArray(&xi[0][0],mxndmxdim);
R__b.WriteArray(dx,mxdim);
R__b << nd;
R__b << ng;
R__b << nsp;
R__b << npg;
R__b.WriteArray(ma,ndim);
R__b.WriteArray(dxd,nsp);
R__b.WriteArray(pxd,nsp);
// R__b << seed;
R__b << it;
R__b << itmx1;
R__b << itmx2;
R__b << acc1;
R__b << acc2;
R__b << si;
R__b << swgt;
R__b << scalls;
R__b << xnd;
R__b << jacob;
R__b << dxg;
R__b << estim;
R__b << error;
// save seed
long seed=ran1.GetSeed();
long iy, iv[NTAB];
ran1.GetSeed2(iy, iv);
R__b << seed;
R__b << iy;
R__b.WriteArray(iv, NTAB);
}
}
ROOT page - Home page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.