Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

NuMultiRunXFitAnalysis.cxx

Go to the documentation of this file.
00001 
00002 // $Id: NuMultiRunXFitAnalysis.cxx,v 1.1 2007/12/27 22:13:46 evans Exp $
00003 //
00004 // Wrapper to perform the cross section fitting extrapolation and
00005 // analyses for multiple runs.
00006 //
00007 // Justin Evans
00008 // j.evans2@physics.ox.ac.uk
00009 //
00010 //
00011 // $Log: NuMultiRunXFitAnalysis.cxx,v $
00012 // Revision 1.1  2007/12/27 22:13:46  evans
00013 // New class to allow the XFit extrapolation to be performed on multiple
00014 // runs (e.g. SKZP periods), along with necessary interface additions to
00015 // NuXFitAnalysis.
00016 //
00017 //
00019 
00020 #include "MessageService/MsgService.h"
00021 #include "NtupleUtils/NuMultiRunXFitAnalysis.h"
00022 
00023 ClassImp(NuMultiRunXFitAnalysis)
00024 
00025 CVSID("$Id: NuMultiRunXFitAnalysis.cxx,v 1.1 2007/12/27 22:13:46 evans Exp $");
00026 
00027 //____________________________________________________________________72
00028 NuMultiRunXFitAnalysis::NuMultiRunXFitAnalysis
00029 (vector<NuFDXFitConfig>& vFDConfig)
00030 {
00031   fanalysisSetting = NuXFit::kUnknown;
00032 
00033   fvFDConfig = vFDConfig;
00034 
00035   fFitter = new TFitterMinuit();
00036   fFitter->CreateMinimizer();
00037   fFitter->SetMinuitFCN(this);
00038 }
00039 
00040 //____________________________________________________________________72
00041 double NuMultiRunXFitAnalysis
00042 ::operator () (const vector<double>& pars) const
00043 {
00044   static Int_t fitcounter = 0;
00045   if (!(fitcounter%50)){
00046     cout << "Minuit FD XFit call " << fitcounter << endl;
00047   }
00048   ++fitcounter;
00049   if (NuXFit::kCPT == fanalysisSetting){
00050     Double_t like = 0;
00051     for (vector<NuXFitAnalysis*>::const_iterator it = fvExtrapolators.begin();
00052          it != fvExtrapolators.end();
00053          ++it){
00054       (*it)->FillCPTFDPrediction(pars);
00055       like += (*it)->CalculateLikelihood();
00056     }
00057     return like;
00058   }
00059   else if(NuXFit::kTransition == fanalysisSetting){
00060     Double_t like = 0;
00061     for (vector<NuXFitAnalysis*>::const_iterator it = fvExtrapolators.begin();
00062          it != fvExtrapolators.end();
00063          ++it){
00064       (*it)->FillTransitionFDPrediction(pars);
00065       like += (*it)->CalculateLikelihood();
00066     }
00067     return like;
00068   }
00069   else{
00070     MSG("NuXFitAnalysis.cxx",Msg::kFatal)
00071       << "Incorrect analysis setting" << endl;
00072     return -1.0;
00073   }
00074 }
00075 
00076 //____________________________________________________________________72
00077 NuMultiRunXFitAnalysis::~NuMultiRunXFitAnalysis()
00078 {
00079 }
00080 
00081 //____________________________________________________________________72
00082 void NuMultiRunXFitAnalysis::PerformFit()
00083 {
00084   this->ConfigureExtrapolators();
00085   fFitter->Minimize();
00086   fFitter->PrintResults(0,0);
00087 }
00088 
00089 //____________________________________________________________________72
00090 void NuMultiRunXFitAnalysis::ConfigureExtrapolators()
00091 {
00092   for (vector<NuFDXFitConfig>::iterator it = fvFDConfig.begin();
00093        it != fvFDConfig.end();
00094        ++it){
00095     NuXFitAnalysis* xAnal = new NuXFitAnalysis((*it).xmlConfig);
00096     xAnal->WriteOutput(false);
00097     xAnal->NDFitResults((*it).ndFitResults);
00098     xAnal->NDFitBinningNuMuCC((*it).ndFitBinsNuMuCC);
00099     xAnal->NDFitBinningNuMuBarCC((*it).ndFitBinsNuMuBarCC);
00100     xAnal->FDNuMuCCData(*(*it).fdNuMuCCData);
00101     xAnal->FDNuMuBarCCData(*(*it).fdNuMuBarCCData);
00102     xAnal->FDDataPoT((*it).fdDataPoT);
00103     xAnal->FDMC((*it).fdMCFileName);
00104     xAnal->ConfigureForExternalFit((*it).analSetting);
00105     fvExtrapolators.push_back(xAnal);
00106 
00107     fanalysisSetting = (*it).analSetting;
00108   }
00109 }
00110 
00111 //____________________________________________________________________72
00112 void NuMultiRunXFitAnalysis::SetupPars()
00113 {
00114   if (NuXFit::kCPT == fanalysisSetting){
00115     this->SetupCPTPars();
00116     return;
00117   }
00118   else if (NuXFit::kTransition == fanalysisSetting){
00119     this->SetupTransitionPars();
00120     return;
00121   }
00122   else{
00123     MSG("NuXFitAnalysis.cxx",Msg::kFatal)
00124       << "Incorrect analysis setting" << endl;
00125     return;
00126   }
00127 }
00128 
00129 //____________________________________________________________________72
00130 void NuMultiRunXFitAnalysis::SetupCPTPars()
00131 {
00132   fFitter->SetParameter(0,
00133                         "Dm2",
00134                         0.003,0.2,1.0,0.0);
00135   fFitter->SetParameter(1,
00136                         "Sn2",
00137                         1.0,0.2,1.0,0.0);
00138   fFitter->SetParameter(2,
00139                         "Dm2Bar",
00140                         0.003,0.2,1.0,0.0);
00141   fFitter->SetParameter(3,
00142                         "Sn2Bar",
00143                         1.0,0.2,1.0,0.0);
00144 }
00145 
00146 //____________________________________________________________________72
00147 void NuMultiRunXFitAnalysis::SetupTransitionPars()
00148 {
00149   //Setup fit parameters
00150   fFitter->SetParameter(0,
00151                         "transitionProb",
00152                         0.0,0.2,1.0,0.0);
00153 }

Generated on Mon Feb 15 11:07:15 2010 for loon by  doxygen 1.3.9.1