// #include "LOpticsOpt.h"
class LOpticsOpt;
LOpticsOpt * opt;
UInt_t NPara = 0;
Double_t OldMatrixArray[10000]={-99}; //NPara
Bool_t free[10000]={kFALSE};//NPara
TString SourceDataBase = "OptDp/db_L.vdc.dat.6.Corrph";
TString DestDataBase = "OptDp/db_L.vdc.dat.6.Corrph.OffSet";
//____________________________________________________________________
void myfcn(Int_t &/*i*/, Double_t *, Double_t &f, Double_t *par, Int_t /*j*/))
{
//minimisation function computing the sum of squares of residuals
assert(opt);
assert(opt->fCurrentMatrixElems);
opt->Array2Matrix(par);
// f= opt->SumSquareDTgY();
f= opt->SumSquareDp();
return;
}
void DoMin(void)
{
///////////////////////////////////////////////////////////////////
// gROOT->LoadMacro("LOpticsOpt.C+");
opt = new LOpticsOpt();
///////////////////////////////////////////////////////////////////
cout << "Optimizing for dp\n";
opt->fCurrentMatrixElems = &(opt->fDMatrixElems);
///////////////////////////////////////////////////////////////////
opt->LoadDataBase(SourceDataBase);
NPara = opt->Matrix2Array(OldMatrixArray,free);
opt->LoadRawData("DpData.f51"/*,1000*/);
opt->PrepareDp();
opt->VerifyMatrix_Sieve();
opt->VerifyMatrix_Dp();
///////////////////////////////////////////////////////////////////
//compensate bias due to dp event selections
opt->fArbitaryDpKinShift[0] = 1.144078e-04;
opt->fArbitaryDpKinShift[1] = 8.856055e-05;
opt->fArbitaryDpKinShift[2] = -2.194187e-05;
opt->fArbitaryDpKinShift[3] = 1.245723e-04;
opt->fArbitaryDpKinShift[4] = 1.130130e-04;
///////////////////////////////////////////////////////////////////
opt->Print();
///////////////////////////////////////////////////////////////////
TVirtualFitter::SetDefaultFitter("Minuit2"); //default is Minuit
TVirtualFitter *fitter = TVirtualFitter::Fitter(NULL, NPara);
fitter->SetFCN(myfcn);
for(UInt_t i=0; i<NPara; i++)
{
Double_t absold = TMath::Abs(OldMatrixArray[i]);
Double_t abslimit = absold>0?absold*10000:10000;
fitter->SetParameter( i,Form("TMatrix%03d",i),OldMatrixArray[i],
absold>0?absold/10:0.1, -abslimit,abslimit);
// fitter->SetParameter(1,"asdf",0,0,0,0);
if (!free[i]) fitter->FixParameter(i);
}
///////////////////////////////////////////////////////////////////
fitter->Print();
cout<<fitter->GetNumberFreeParameters()
<<" Free / "
<<fitter->GetNumberTotalParameters()
<<" Parameters\n";
assert(opt->fNRawData>0);
assert(NPara>0);
assert(fitter->GetNumberFreeParameters()>0);
assert(fitter->GetNumberTotalParameters()==NPara);
///////////////////////////////////////////////////////////////////
Double_t arglist[1] = {0};
fitter->ExecuteCommand("MIGRAD", arglist, 0);
///////////////////////////////////////////////////////////////////
opt->Print();
opt->SaveDataBase(DestDataBase);
opt->SumSquareDp();
TCanvas * c1 =opt->CheckDp();
c1->Print(DestDataBase+".png","png");
TCanvas * c2 =opt->CheckDpVSAngle();
c2->Print(DestDataBase+".VSAngle.png","png");
TCanvas * c3 =opt->CheckDpVSCutID();
c3->Print(DestDataBase+".VSID.png","png");
delete fitter;
// for (UInt_t i=0;i<100;i++) cout<<"\n";
gSystem->Exec(Form("cp -vf %s %s.source"
,SourceDataBase.Data(),DestDataBase.Data()));
gSystem->Exec(Form("cp -vf LOpticsOptScript.log %s.log"
,DestDataBase.Data()));
}
PlotDataBase(TString DatabaseFileName, Bool_t WithAngle=kFALSE)
{
opt = new LOpticsOpt();
opt->LoadDataBase(DatabaseFileName);
opt->Print();
///////////////////////////////////////////
opt->LoadRawData("DpData.f51"/*,1*/);
opt->PrepareDp();
opt->VerifyMatrix_Sieve();
opt->VerifyMatrix_Dp();
cout <<"SumSquareDTgY = "<<opt->SumSquareDp()<<endl;
TCanvas * c1 =NULL;
c1 =opt->CheckDpVSAngle();
c1->Print(DatabaseFileName+".VSAngle.png","png");
c1 =opt->CheckDpVSCutID();
c1->Print(DatabaseFileName+".VSID.png","png");
c1 =opt->CheckDp();
c1->Print(DatabaseFileName+".png","png");
}
PlotSourceDataBase( Bool_t WithAngle=kFALSE)
{
PlotDataBase(SourceDataBase,WithAngle);
}
PlotDestDataBase( Bool_t WithAngle=kFALSE)
{
PlotDataBase(DestDataBase,WithAngle);
}
Test()
{
opt = new LOpticsOpt();
opt->LoadDataBase("OptDp/db_L.vdc.dat.0");
opt->Print();
opt->LoadRawData("DpData.f51"/*,10*/);
opt->PrepareDp();
opt->VerifyMatrix_Sieve();
opt->VerifyMatrix_Dp();
// cout <<"SumSquareDTgY = "<<opt->SumSquareDTgY()<<endl;
TCanvas * c1 =opt->CheckDp();
c1->Print(DatabaseFileName+".png","png");
}
LOpticsOptScriptDp()
{//choose the entracne function here
gROOT->LoadMacro("LOpticsOpt.C+");
gStyle->SetOptStat(11);
// DoMin();
// Test();
// PlotSourceDataBase();
// PlotDestDataBase(kTRUE);
PlotDataBase("Production4/db_L.vdc.dat.Prod4");
// PlotDataBase("OptDp/db_L.vdc.dat.Huan.New");
}
Last change: Sat Aug 29 02:23:32 2009
Last generated: 2009-08-29 02:23
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.