本文整理汇总了C++中TMinuit::Migrad方法的典型用法代码示例。如果您正苦于以下问题:C++ TMinuit::Migrad方法的具体用法?C++ TMinuit::Migrad怎么用?C++ TMinuit::Migrad使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TMinuit
的用法示例。
在下文中一共展示了TMinuit::Migrad方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fit
vector<double> fit()
{
vector<double> out(2*nbeta+1);
TMinuit minu;
//minu.SetPrintLevel(-1);
minu.SetFCN(ch2);
//set tolerance
double tol=1e-16;
int iflag;
//minu.SetMaxIterations(10000000);
//minu.mnexcm("SET ERR",&tol,1,iflag);
for(int ib=0;ib<nbeta;ib++)
{
minu.DefineParameter(2*ib+0,"infi",1,0.001,0,0);
minu.DefineParameter(2*ib+1,"coef",1,0.001,0,0);
}
minu.DefineParameter(2*nbeta,"M",0,0.001,0,0);
minu.Migrad();
double dum;
for(int ib=0;ib<=2*nbeta;ib++) minu.GetParameter(ib,out[ib],dum);
return out;
}
示例2: fit
void fit(boot &A,boot &B,boot &C,bvec &X,bvec &Y)
{
//copy X
X_fit=new double[nens];
for(int iens=0;iens<nens;iens++) X_fit[iens]=X[iens].med();
Y_fit=new double[nens];
err_Y_fit=new double[nens];
TMinuit minu;
minu.SetPrintLevel(-1);
minu.DefineParameter(0,"A",0.0,0.0001,0,0);
minu.DefineParameter(1,"B",0.0,0.0001,0,0);
minu.DefineParameter(2,"C",0.0,0.0001,0,0);
minu.SetFCN(chi2_wr);
double C2;
for(int iboot=0;iboot<nboot+1;iboot++)
{
if(iboot>0)
minu.SetPrintLevel(-1);
minu.DefineParameter(3,"a380",lat[0][iboot],0.0001,0,0);
minu.DefineParameter(4,"a390",lat[1][iboot],0.0001,0,0);
minu.DefineParameter(5,"a405",lat[2][iboot],0.0001,0,0);
minu.DefineParameter(6,"a420",lat[3][iboot],0.0001,0,0);
minu.FixParameter(3);
minu.FixParameter(4);
minu.FixParameter(5);
minu.FixParameter(6);
for(int iens=0;iens<nens;iens++)
{
Y_fit[iens]=Y.data[iens].data[iboot];
err_Y_fit[iens]=Y.data[iens].err();
}
//minimize
minu.Migrad();
//get back parameters
double dum;
minu.GetParameter(0,A.data[iboot],dum);
minu.GetParameter(1,B.data[iboot],dum);
minu.GetParameter(2,C.data[iboot],dum);
double lat_med[4]={lat[0].med(),lat[1].med(),lat[2].med(),lat[3].med()};
if(iboot==0) C2=chi2(A.data[iboot],B[iboot],C[iboot],lat_med);
}
//calculate the chi2
cout<<"A = ("<<A<<"), B=("<<B<<"), C=("<<C<<")"<<endl;
cout<<"Chi2 = "<<C2<<" / "<<nens-3<<" = "<<C2/(nens-3)<<endl;
delete[] X_fit;
delete[] Y_fit;
delete[] err_Y_fit;
}
示例3: fit
void fit(boot &A,boot &B,boot &C,boot &D)
{
//copy ml
ml_fit=new double[nens];
for(int iens=0;iens<nens;iens++) ml_fit[iens]=ml[iens].med();
//alloc dM2Pi and dM2K
dM2Pi_fit=new double[nens];
err_dM2Pi_fit=new double[nens];
dM2K_fit=new double[nens];
err_dM2K_fit=new double[nens];
TMinuit minu;
minu.SetPrintLevel(-1);
int npars=4;
minu.DefineParameter(0,"A",0.0,0.0001,0,0);
minu.DefineParameter(1,"B",0.0,0.0001,0,0);
minu.DefineParameter(2,"C",0.0,0.0001,0,0);
minu.DefineParameter(3,"D",0.0,0.0001,0,0);
minu.SetFCN(chi2_wr);
double C2;
for(int iboot=0;iboot<nboot+1;iboot++)
{
if(iboot>0) minu.SetPrintLevel(-1);
minu.DefineParameter(4,"a380",lat[0][iboot],0.0001,0,0);
minu.DefineParameter(5,"a390",lat[1][iboot],0.0001,0,0);
minu.DefineParameter(6,"a405",lat[2][iboot],0.0001,0,0);
minu.DefineParameter(7,"a420",lat[3][iboot],0.0001,0,0);
minu.FixParameter(4);
minu.FixParameter(5);
minu.FixParameter(6);
minu.FixParameter(7);
for(int iens=0;iens<nens;iens++)
{
dM2Pi_fit[iens]=dM2Pi.data[iens].data[iboot];
err_dM2Pi_fit[iens]=dM2Pi.data[iens].err();
dM2K_fit[iens]=dM2K.data[iens].data[iboot];
err_dM2K_fit[iens]=dM2K.data[iens].err();
}
//minimize
minu.Migrad();
//get back parameters
double dum;
minu.GetParameter(0,A.data[iboot],dum);
minu.GetParameter(1,B.data[iboot],dum);
minu.GetParameter(2,C.data[iboot],dum);
minu.GetParameter(3,D.data[iboot],dum);
double lat_med[4]={lat[0].med(),lat[1].med(),lat[2].med(),lat[3].med()};
if(iboot==nboot) C2=chi2(A.data[iboot],B[iboot],C[iboot],D[iboot],lat_med,true);
}
//calculate the chi2
cout<<"A=("<<A<<"), B=("<<B<<"), C=("<<C<<"), D=("<<D<<")"<<endl;
cout<<"Chi2 = "<<C2<<" / "<<2*nens-npars<<" = "<<C2/(2*nens-npars)<<endl;
delete[] ml_fit;
delete[] dM2Pi_fit;
delete[] err_dM2Pi_fit;
delete[] dM2K_fit;
delete[] err_dM2K_fit;
}
示例4: parab_fit
void parab_fit(double ch2,jack &a,jack &b,jack &c,double *X,jvec Y,const char *path,bool fl_parab=1)
{
ofstream out(path);
out<<"@type xydy\n";
double MX=0;
//copy X
nc_fit=Y.nel;
X_fit=new double[nc_fit];
for(int iel=0;iel<nc_fit;iel++)
if(use[iel])
{
X_fit[iel]=X[iel];
out<<X[iel]<<" "<<Y[iel]<<endl;
if(X[iel]>MX) MX=X[iel];
}
Y_fit=new double[nc_fit];
err_Y_fit=new double[nc_fit];
TMinuit minu;
minu.SetPrintLevel(0);
int npars=3;
minu.DefineParameter(0,"A",0.0,0.0001,0,0);
minu.DefineParameter(1,"B",0.0,0.0001,0,0);
minu.DefineParameter(2,"C",0.0,0.0001,0,0);
if(!fl_parab)
{
minu.FixParameter(0);
npars--;
}
minu.SetFCN(chi2_wr);
for(int ijack=0;ijack<=njack;ijack++)
{
minu.DefineParameter(2,"C",fixed_A[ijack],0.0001,0,0);
minu.FixParameter(2);
if(ijack>0)
minu.SetPrintLevel(-1);
for(int iel=0;iel<nc_fit;iel++)
{
Y_fit[iel]=Y.data[iel].data[ijack];
err_Y_fit[iel]=Y[iel].err();
}
//minimize
minu.Migrad();
//get back parameters
double dum;
minu.GetParameter(0,a.data[ijack],dum);
minu.GetParameter(1,b.data[ijack],dum);
minu.GetParameter(2,c.data[ijack],dum);
}
out<<"&\[email protected] xy\n";
for(double t=0;t<MX;t+=MX/100)
out<<t<<" "<<parab(a[njack],b[njack],c[njack],t)<<endl;
out.close();
}
示例5: runAngleOpt
void runAngleOpt() {
gSystem->AddIncludePath("-I${ANITA_UTIL_INSTALL_DIR}/include");
double startVal=0;
double stepSize=0.1;
double minVal=-2;
double maxVal=2;
Double_t p0 = 0;
//Load libraries. Need to have ANITA_UTIL_INSTALL_DIR/lib and ROOTSYS/lib in the LD_LIBRARY_PATH
gSystem->Load("libfftw3.so");
gSystem->Load("libMathMore.so");
gSystem->Load("libPhysics.so");
gSystem->Load("libGeom.so");
gSystem->Load("libMinuit.so");
gSystem->Load("libRootFftwWrapper.so");
gSystem->Load("libAnitaEvent.so");
gSystem->Load("libAnitaCorrelator.so");
AnitaGeomTool *fGeomTool = AnitaGeomTool::Instance();
gSystem->CompileMacro("anglePlotterOpt.C","k");
Double_t relDeltaOut=0;
TMinuit *myMin = new TMinuit(1);
myMin->SetObjectFit(anglePlotterOpt);
myMin->SetFCN(iHateRoot);
//setArray();
for(int u = 0; u < 1; u++){
int middle = 16;
for(int y = 16; y <32; y++){
int leftOpt, rightOpt;
fGeomTool->getThetaPartners(middle,leftOpt,rightOpt);
myMin->DefineParameter(0, "antNum", middle, stepSize, minVal, maxVal);
myMin->FixParameter(0);
myMin->DefineParameter(1, "deltaT", startVal, stepSize, minVal, maxVal);
Double_t deltaT,deltaTErr;
//*********MINUIT METHOD*******************
myMin->SetPrintLevel(-1);
myMin->Migrad();
myMin->GetParameter(1,deltaT,deltaTErr);
setValue(rightOpt,deltaT);
// printArray();
// cout << middle << " " << rightOpt << " " << deltaT << endl;
cout << "deltaTArrayMod[" << rightOpt << "] = " << deltaT << ";" << endl;
middle = rightOpt;
}
}
// myMin->DeleteArrays();
// myMin->DeleteArrays();
}
示例6: runTopRingOpt
void runTopRingOpt() {
gSystem->AddIncludePath("-I${ANITA_UTIL_INSTALL_DIR}/include");
double startVal=0;
double stepSize=0.1;
double minVal=-0.5;
double maxVal=0.5;
Double_t p0 = 0;
//Load libraries. Need to have ANITA_UTIL_INSTALL_DIR/lib and ROOTSYS/lib in the LD_LIBRARY_PATH
gSystem->Load("libfftw3.so");
gSystem->Load("libMathMore.so");
gSystem->Load("libPhysics.so");
gSystem->Load("libGeom.so");
gSystem->Load("libMinuit.so");
gSystem->Load("libRootFftwWrapper.so");
gSystem->Load("libAnitaEvent.so");
gSystem->Load("libAnitaCorrelator.so");
AnitaGeomTool *fGeomTool = AnitaGeomTool::Instance();
gSystem->CompileMacro("topRingOpt.C","k");
Double_t relDeltaOut=0;
TMinuit *myMin = new TMinuit(150);
myMin->SetObjectFit(topRingOpt);
myMin->SetFCN(iHateRoot);
//setArray();
double startValDeltaT[16] ={0};
double startValR[16] ={0};
double startValPhi[16] ={0};
// startValDeltaT[0] = -0.0519515; startValR[0] = -0.0101463; startValPhi[0] = -0.00473836 ;
// startValDeltaT[1] = -0.0597062; startValR[1] = -0.02577; startValPhi[1] = 0.00864501 ;
// startValDeltaT[2] = -0.081435; startValR[2] = -0.000224044; startValPhi[2] = -0.000630649;
// startValDeltaT[3] = 0.0118873; startValR[3] = 0.019945; startValPhi[3] = 0.014016;
// startValDeltaT[4] = 0.017917; startValR[4] = -0.00297559; startValPhi[4] = 0.0224936 ;
// startValDeltaT[5] = 0.0377119; startValR[5] = -0.014872; startValPhi[5] = 0.0163349;
// startValDeltaT[6] = -0.0426158; startValR[6] = -0.0562555; startValPhi[6] = 0.0220065 ;
// startValDeltaT[7] = -0.0221673; startValR[7] = -0.034104 ; startValPhi[7] = 0.0158545 ;
// startValDeltaT[8] = 0.0263739; startValR[8] = 0.00248804; startValPhi[8] = 0.013246 ;
// startValDeltaT[9] = -0.0938419; startValR[9] = -0.00344703; startValPhi[9] = -0.00718616;
// startValDeltaT[10] = 0.145264; startValR[10] = -0.0121874 ; startValPhi[10] = 0.0156988 ;
// startValDeltaT[11] = 0.118105; startValR[11] = -0.0337033 ; startValPhi[11] = -0.00324182 ;
// startValDeltaT[12] = 0.321805; startValR[12] = 0.0134362 ; startValPhi[12] = -0.00190277 ;
// startValDeltaT[13] = 0.0197693; startValR[13] = -0.000656063; startValPhi[13] = -0.0162318 ;
// startValDeltaT[14] = -0.115263; startValR[14] = 0.0495637 ; startValPhi[14] = -0.0198119 ;
// startValDeltaT[15] = -0.255707; startValR[15] = 0.00189892 ; startValPhi[15] = 0.0383932 ;
for(int y = 0; y <16; y++){
ofstream newfile("newSimonNumbers.txt");
char name[30];
sprintf(name,"r%d",y);
myMin->DefineParameter(y, name, startValR[y], stepSize, minVal, maxVal);
sprintf(name,"z%d",y);
myMin->DefineParameter(y+16, name, startValDeltaT[y], stepSize, minVal, maxVal);
sprintf(name,"phi%d",y);
myMin->DefineParameter(y+32, name, startValPhi[y], stepSize, minVal, maxVal);
}
Double_t deltaR[32],deltaRErr[32];
Double_t deltaZ[32],deltaZErr[32];
Double_t deltaPhi[32],deltaPhiErr[32];
//*********MINUIT METHOD*******************
myMin->SetPrintLevel(-1);
myMin->Migrad();
for(int u = 0; u <16; u++){
myMin->GetParameter(u,deltaR[u],deltaRErr[u]);
//cout << "deltaR[" << u << "] = " << deltaR[u] ;
myMin->GetParameter(u+16,deltaZ[u],deltaZErr[u]);
//cout << " deltaZ[" << u << "] = " << deltaZ[u] ;
myMin->GetParameter(u+32,deltaPhi[u],deltaPhiErr[u]);
//cout << " deltaPhi[" << u << "] = " << deltaPhi[u] << ";" << endl;
newfile << u << " " << deltaZ[u]<< " " << deltaR[u]<< " " << deltaPhi[u]<< " " << 0 << endl;
}
}
示例7: testZeeMCSmearWithScale
//.........这里部分代码省略.........
minuit->FixParameter(0);
minuit->FixParameter(1);
minuit->FixParameter(3);
minuit->FixParameter(4);
minuit->FixParameter(5);
minuit->FixParameter(7);
} else if( testpaircat==3){
minuit->FixParameter(0);
minuit->FixParameter(1);
minuit->FixParameter(2);
minuit->FixParameter(4);
minuit->FixParameter(5);
minuit->FixParameter(6);
}
arglist[0] = 0.0001;
minuit->mnexcm("SET EPS",arglist,1,ierflg);
//minuit->mnsimp();
////arglist[0] = 1;
///minuit->mnexcm("SET STR",arglist,1,ierflg);
//minuit->mnexcm("MIGRAD", arglist ,1,ierflg);
arglist[0] = fitstra;
minuit->mnexcm("SET STR",arglist,1,ierflg);
bool dofit = true;
if( dofit){
minuit->Migrad();
if (!minuit->fCstatu.Contains("CONVERGED")) {
mcfitStatus = 1; //first try not converged.
minuit->Migrad();
}else{
mcfitStatus = 0;
}
}
double ftest[1000];
double atest[1000];
//minuit->GetParameter(0,fitpar[0],fitparErr[0]);
if (!minuit->fCstatu.Contains("CONVERGED")) {
printf("No convergence at fitting, routine Fit \n");
printf("Minuit return string: %s \n",minuit->fCstatu.Data());
mcfitStatus = 2; //2nd try not converged.
}else{
mcfitStatus = -1;
}
fAmin = minuit->fAmin;
for(int j=0; j<npar; j++){
minuit->GetParameter(j,fitpar[j],fitparErr[j]);
mcfitpar[j] = fitpar[j];
mcfitparErr[j] = fitparErr[j];
}
double par[10];
示例8: runQuickOptAllAntFixedZ
void runQuickOptAllAntFixedZ() {
gSystem->AddIncludePath("-I${ANITA_UTIL_INSTALL_DIR}/include");
double startVal=0;
double stepSize=0.05;
double minVal=-0.5;
double maxVal=0.5;
Double_t p0 = 0;
//Load libraries. Need to have ANITA_UTIL_INSTALL_DIR/lib and ROOTSYS/lib in the LD_LIBRARY_PATH
gSystem->Load("libfftw3.so");
gSystem->Load("libMathMore.so");
gSystem->Load("libPhysics.so");
gSystem->Load("libGeom.so");
gSystem->Load("libMinuit.so");
gSystem->Load("libRootFftwWrapper.so");
gSystem->Load("libAnitaEvent.so");
gSystem->Load("libAnitaCorrelator.so");
AnitaGeomTool *fGeomTool = AnitaGeomTool::Instance();
gSystem->CompileMacro("quickOptAllAntFixedZ.C","k");
fillArrays(eventNumberIndex, thetaWaveIndex, phiWaveIndex, antIndex1, antIndex2, maxCorrTimeIndex, adjacent);
Double_t relDeltaOut=0;
TMinuit *myMin = new TMinuit(192);
myMin->SetObjectFit(quickOptAllAntFixedZ);
myMin->SetFCN(iHateRoot);
// myMin->SetMaxIterations(2);
//myMin->SetErrorDef(1000);
// int ierflg;
// double eps[1] = {2.};
// myMin->mnexcm("SET EPS", eps, 1, ierflg);
//setArray();
double startValR[MAX_ANTENNAS] ={0};
double startValZ[MAX_ANTENNAS] ={0};
double startValPhi[MAX_ANTENNAS] ={0};
double startValCableDelays[MAX_ANTENNAS] ={0};
for(int y = 0; y <MAX_ANTENNAS; y++){
char name[30];
sprintf(name,"r%d",y);
myMin->DefineParameter(y, name, startValR[y], stepSize, -0.1, 0.1);
sprintf(name,"z%d",y);
myMin->DefineParameter(y+MAX_ANTENNAS, name, startValZ[y], stepSize, -0.1, 0.1);
myMin->FixParameter(y+MAX_ANTENNAS);
sprintf(name,"phi%d",y);
myMin->DefineParameter(y+MAX_ANTENNAS*2, name, startValPhi[y], stepSize, -0.1, 0.1);
sprintf(name,"cable%d",y);
myMin->DefineParameter(y+MAX_ANTENNAS*3, name, startValCableDelays[y], stepSize, -0.5, 0.5);
}
Double_t deltaR[MAX_ANTENNAS],deltaRErr[MAX_ANTENNAS];
Double_t deltaZ[MAX_ANTENNAS],deltaZErr[MAX_ANTENNAS];
Double_t deltaPhi[MAX_ANTENNAS],deltaPhiErr[MAX_ANTENNAS];
Double_t deltaCableDelays[MAX_ANTENNAS],deltaCableDelaysErr[MAX_ANTENNAS];
//*********MINUIT METHOD*******************
// myMin->SetPrintLevel(-1);
myMin->Migrad();
// int error_flag;
// myMin->mnexcm("MINOS",0,0,error_flag);
ofstream newfile("newLindaNumbersCableDelays_ALLANTENNAS_RMS_GRAD_FixedZ.txt");
for(int u = 0; u <MAX_ANTENNAS; u++){
myMin->GetParameter(u,deltaR[u],deltaRErr[u]);
cout << "deltaR[" << u << "] = " << deltaR[u] << " +/- " << deltaRErr[u] << endl;
myMin->GetParameter(u+MAX_ANTENNAS,deltaZ[u],deltaZErr[u]);
cout << " deltaZ[" << u << "] = " << deltaZ[u] << " +/- " << deltaZErr[u] << endl;
myMin->GetParameter(u+MAX_ANTENNAS*2,deltaPhi[u],deltaPhiErr[u]);
cout << " deltaPhi[" << u << "] = " << deltaPhi[u] << " +/- " << deltaPhiErr[u] << endl;
myMin->GetParameter(u+MAX_ANTENNAS*3,deltaCableDelays[u],deltaCableDelaysErr[u]);
cout << " deltaCableDelays[" << u << "] = " << deltaCableDelays[u] << " +/- " << deltaCableDelaysErr[u] << endl;
newfile << u << " " << deltaR[u]<< " " << deltaZ[u]<< " " << deltaPhi[u]<< " " << deltaCableDelays[u] << endl;
}
cout << "Easy table" << endl;
for(int u = 0; u <MAX_ANTENNAS; u++) cout << u << " & " << deltaR[u]<< " & " << deltaZ[u]<< " & " << deltaPhi[u]<< " & " << deltaCableDelays[u] << endl;
}
示例9: testEnergySmearZee
//.........这里部分代码省略.........
}
for(int j=4; j<npar; j++){
TString parname = TString (Form("scalecat%d",j-4));
minuit->mnparm(j, parname, deltaEcat[j-4], STEPMN, -0.03,0.03,ierflg);
fitpar[j] = deltaEcat[j-4]; //initialized values
}
if(fixscale==1){
for(int j=4; j<npar; j++){
minuit->FixParameter(j);
}
}
int testpaircat = testcat;
if(testpaircat==1){
minuit->FixParameter(0);
minuit->FixParameter(2);
minuit->FixParameter(3);
minuit->FixParameter(4);
minuit->FixParameter(6);
minuit->FixParameter(7);
}else if( testpaircat==0){
minuit->FixParameter(1);
minuit->FixParameter(2);
minuit->FixParameter(3);
minuit->FixParameter(5);
minuit->FixParameter(6);
minuit->FixParameter(7);
} else if( testpaircat==2){
minuit->FixParameter(0);
minuit->FixParameter(1);
minuit->FixParameter(3);
minuit->FixParameter(4);
minuit->FixParameter(5);
minuit->FixParameter(7);
} else if( testpaircat==3){
minuit->FixParameter(0);
minuit->FixParameter(1);
minuit->FixParameter(2);
minuit->FixParameter(4);
minuit->FixParameter(5);
minuit->FixParameter(6);
}
arglist[0] = 0.0001;
minuit->mnexcm("SET EPS",arglist,1,ierflg);
arglist[0] = 1;
minuit->mnexcm("SET STR",arglist,1,ierflg);
bool dofit = true;
if( dofit){
minuit->Migrad();
if (!minuit->fCstatu.Contains("CONVERGED")) {
mcfitStatus = 1; //first try not converged.
minuit->Migrad();
}else{
mcfitStatus = 0;
}
//minuit->mnmnos();
}
if (!minuit->fCstatu.Contains("CONVERGED")) {
printf("No convergence at fitting, routine Fit \n");
printf("Minuit return string: %s \n",minuit->fCstatu.Data());
mcfitStatus = 2; //2nd try not converged.
}else{
mcfitStatus = -1;
}
fAmin = minuit->fAmin;
for(int j=0; j<npar; j++){
minuit->GetParameter(j,fitpar[j],fitparErr[j]);
mcfitpar[j] = fitpar[j];
mcfitparErr[j] = fitparErr[j];
}
mytree->Fill();
mytree->Write();
fnew->Write();
fnew->Close();
}
示例10: runQuickOptAllAntStepsLDBHPOL
void runQuickOptAllAntStepsLDBHPOL() {
gSystem->AddIncludePath("-I${ANITA_UTIL_INSTALL_DIR}/include");
double startVal=0;
double stepSize=0.01;
double minVal=-0.5;
double maxVal=0.5;
Double_t p0 = 0;
//Load libraries. Need to have ANITA_UTIL_INSTALL_DIR/lib and ROOTSYS/lib in the LD_LIBRARY_PATH
gSystem->Load("libfftw3.so");
gSystem->Load("libMathMore.so");
gSystem->Load("libPhysics.so");
gSystem->Load("libGeom.so");
gSystem->Load("libMinuit.so");
gSystem->Load("libRootFftwWrapper.so");
gSystem->Load("libAnitaEvent.so");
gSystem->Load("libAnitaCorrelator.so");
AnitaGeomTool *fGeomTool = AnitaGeomTool::Instance();
fGeomTool->useKurtAnita3Numbers(1);
gSystem->CompileMacro("quickOptAllAntStepsLDBHPOL.C","k");
fillArrays(eventNumberIndex, thetaWaveIndex, phiWaveIndex, antIndex1, antIndex2, maxCorrTimeIndex, adjacent);
Double_t relDeltaOut=0;
TMinuit *myMin = new TMinuit(192);
myMin->SetObjectFit(quickOptAllAntStepsLDBHPOL);
myMin->SetFCN(iHateRoot);
// myMin->SetMaxIterations(2);
//myMin->SetErrorDef(1000);
// int ierflg;
// double eps[1] = {2.};
// myMin->mnexcm("SET EPS", eps, 1, ierflg);
//setArray();
double minValCableDelays[MAX_ANTENNAS] ={0};
double maxValCableDelays[MAX_ANTENNAS] ={0};
Double_t deltaR[MAX_ANTENNAS] = {0};
Double_t deltaRErr[MAX_ANTENNAS] = {0};
Double_t deltaZ[MAX_ANTENNAS] = {0};
Double_t deltaZErr[MAX_ANTENNAS] = {0};
Double_t deltaPhi[MAX_ANTENNAS] = {0};
Double_t deltaPhiErr[MAX_ANTENNAS] = {0};
Double_t deltaCableDelays[MAX_ANTENNAS] = {0};
Double_t deltaCableDelaysErr[MAX_ANTENNAS] = {0};
// Double_t globalDeltaz = 0.242575;
Double_t globalDeltaz = 0.03;
//Min global deltaZ[] = -0.242575 +/- 0.00198264
for(int y = 0; y <MAX_ANTENNAS; y++){
deltaR[y] = 0;//-0.05;
deltaCableDelays[y] = 0. - (y==47)*0.35;
minValCableDelays[y] = deltaCableDelays[y] - 0.15;
maxValCableDelays[y] = deltaCableDelays[y] + 0.15;
deltaZ[y] = 0;//(y<16)*(-globalDeltaz) + (y>15)*globalDeltaz;
char name[30];
sprintf(name,"r%d",y);
myMin->DefineParameter(y, name, deltaR[y], stepSize, -0.3, 0.3);
sprintf(name,"z%d",y);
myMin->DefineParameter(y+MAX_ANTENNAS, name, deltaZ[y], stepSize, -0.3, 0.3);
sprintf(name,"phi%d",y);
myMin->DefineParameter(y+MAX_ANTENNAS*2, name, deltaPhi[y], stepSize, -0.3, 0.3);
sprintf(name,"cable%d",y);
myMin->DefineParameter(y+MAX_ANTENNAS*3, name, deltaCableDelays[y], stepSize, minValCableDelays[y], maxValCableDelays[y]);
}
for(int y = 0; y <MAX_ANTENNAS; y++){
myMin->FixParameter(y); // fixed R
myMin->FixParameter(y+MAX_ANTENNAS); // fixed Z
myMin->FixParameter(y+MAX_ANTENNAS*2); // fixed phi
// myMin->FixParameter(y+MAX_ANTENNAS*3); // fixed t
}
myMin->FixParameter(MAX_ANTENNAS*3); // fixed t0
//*********MINUIT METHOD*******************
// myMin->SetPrintLevel(-1);
myMin->Migrad();
// int error_flag;
// myMin->mnexcm("MINOS",0,0,error_flag);
for(int u = 0; u <MAX_ANTENNAS; u++){
myMin->GetParameter(u+MAX_ANTENNAS*3,deltaCableDelays[u],deltaCableDelaysErr[u]);
cout << " deltaCableDelays[" << u << "] = " << deltaCableDelays[u] << " +/- " << deltaCableDelaysErr[u] << endl;
// myMin->GetParameter(u+MAX_ANTENNAS,deltaZ[u],deltaZErr[u]);
//.........这里部分代码省略.........
示例11: fit
void fit(boot &A,boot &B,boot &C,boot &D,bvec &X,bvec &Y)
{
//copy X
X_fit=new double[nens];
for(int iens=0;iens<nens;iens++) X_fit[iens]=X[iens].med();
Y_fit=new double[nens];
err_Y_fit=new double[nens];
TMinuit minu;
minu.SetPrintLevel(-1);
int npars=4;
minu.DefineParameter(0,"A",0.0,0.0001,0,0);
minu.DefineParameter(1,"B",0.0,0.0001,0,0);
minu.DefineParameter(2,"C",0.0,0.0001,0,0);
minu.DefineParameter(3,"D",0.0,0.0001,0,0);
if(!include_a4)
{
minu.FixParameter(3);
npars--;
}
if(!include_ml_term)
{
minu.FixParameter(1);
npars--;
}
minu.SetFCN(chi2_wr);
double C2;
for(int iboot=0;iboot<nboot+1;iboot++)
{
if(iboot>0)
minu.SetPrintLevel(-1);
minu.DefineParameter(4,"a380",lat[0][iboot],0.0001,0,0);
minu.DefineParameter(5,"a390",lat[1][iboot],0.0001,0,0);
minu.DefineParameter(6,"a405",lat[2][iboot],0.0001,0,0);
minu.DefineParameter(7,"a420",lat[3][iboot],0.0001,0,0);
minu.FixParameter(4);
minu.FixParameter(5);
minu.FixParameter(6);
minu.FixParameter(7);
for(int iens=0;iens<nens;iens++)
{
Y_fit[iens]=Y.data[iens].data[iboot];
err_Y_fit[iens]=Y.data[iens].err();
}
//minimize
minu.Migrad();
//get back parameters
double dum;
minu.GetParameter(0,A.data[iboot],dum);
minu.GetParameter(1,B.data[iboot],dum);
minu.GetParameter(2,C.data[iboot],dum);
minu.GetParameter(3,D.data[iboot],dum);
double lat_med[4]={lat[0].med(),lat[1].med(),lat[2].med(),lat[3].med()};
if(iboot==nboot)
{
contr_flag=1;
C2=chi2(A.data[iboot],B[iboot],C[iboot],D[iboot],lat_med);
contr_flag=0;
}
}
int ninc_ens=0;
for(int iens=0;iens<nens;iens++)
if(ibeta[iens]!=0 || include_380) ninc_ens++;
//calculate the chi2
cout<<"A=("<<A<<"), B=("<<B<<"), C=("<<C<<"), D=("<<D<<")"<<endl;
cout<<"Chi2 = "<<C2<<" / "<<ninc_ens-npars<<" = "<<C2/(ninc_ens-npars)<<endl;
delete[] X_fit;
delete[] Y_fit;
delete[] err_Y_fit;
}