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

NuTransitionFitterMinuit Class Reference

#include <NuTransitionFitterMinuit.h>

List of all members.

Public Member Functions

 NuTransitionFitterMinuit ()
 NuTransitionFitterMinuit (const TString mmFile, const TString fdFile, const TString outFile)
virtual ~NuTransitionFitterMinuit ()
virtual double operator() (const std::vector< double > &x) const
virtual double Up () const
virtual const Double_t CalculateChi2 (const TH1D *fdPred, const TH1D *fdData) const
virtual const Double_t CalculateLikelihood (const TH1D *fdPred, const TH1D *fdData) const
virtual void TransitionFit (const Int_t experiments)
virtual NuMatrixOutputDoTransitionFit (const TH1D &hDataToFit)

Private Member Functions

virtual void SetupPars ()

Private Attributes

NuMatrixInputmmInput
TFitterMinuit * fFitter
TString outputFileName
TH1D * fdData
TH1D * fdFitData
NuXMLConfigfxml


Constructor & Destructor Documentation

NuTransitionFitterMinuit::NuTransitionFitterMinuit  ) 
 

Default constructor.

Definition at line 55 of file NuTransitionFitterMinuit.cxx.

00056 {
00057     mmInput = 0;
00058     fdData = 0;
00059     fdFitData = 0;
00060     fxml = 0;
00061     
00062     outputFileName = "";
00063     
00064     fFitter = new TFitterMinuit();
00065     fFitter->CreateMinimizer();
00066     fFitter->SetMinuitFCN(this);
00067 }

NuTransitionFitterMinuit::NuTransitionFitterMinuit const TString  mmFile,
const TString  fdFile,
const TString  outFile
 

Constructs the Fitter for the given set of files. Creates shared objects from these files.

Definition at line 74 of file NuTransitionFitterMinuit.cxx.

References fdData, fdFitData, fFitter, fxml, infile, mmInput, and outputFileName.

00077 {   
00078     // mmInput, fxml
00079     TFile *infile = new TFile(mmFile);
00080     mmInput = new NuMatrixInput(infile);
00081     TString objName = "NuMatrixOutput";
00082     fxml = (NuXMLConfig*)gROOT->FindObject("NuXMLConfig");
00083     infile->Close();   
00084     
00085     // fdData
00086     TFile *fdDataFile = new TFile(fdFile,"READ");
00087     fdData = (TH1D*) fdDataFile->Get("RecoEnergyPQ_FD");
00088     fdData->SetDirectory(0);
00089     fdData->Sumw2();
00090     fdDataFile->Close();
00091     
00092     outputFileName = outFile;
00093     
00094     fdFitData = 0;
00095     
00096     fFitter = new TFitterMinuit();
00097     fFitter->CreateMinimizer();
00098     fFitter->SetMinuitFCN(this);
00099 }

NuTransitionFitterMinuit::~NuTransitionFitterMinuit  )  [virtual]
 

Default destructor

Definition at line 105 of file NuTransitionFitterMinuit.cxx.

00106 {
00107     if (mmInput) delete mmInput;
00108     if (fdData) delete fdData;
00109     if (fdFitData) delete fdFitData;
00110     if (fxml) delete fxml;    
00111     
00112     if (fFitter) delete fFitter;
00113 }


Member Function Documentation

const Double_t NuTransitionFitterMinuit::CalculateChi2 const TH1D *  fdPred,
const TH1D *  fdData
const [virtual]
 

Calculate the chisquared test statistic.

Definition at line 157 of file NuTransitionFitterMinuit.cxx.

00158 {
00159     Double_t chi2 = 0;
00160     Double_t mnu, dnu;
00161     for (Int_t i=1; i<=fdPred->GetNbinsX(); ++i){
00162         mnu = fdPred->GetBinContent(i);
00163         dnu = fdData->GetBinContent(i);
00164         if (mnu<0.0001) mnu = 0.0001;
00165         chi2 += (dnu-mnu)*(dnu-mnu)/mnu;
00166     }
00167     return chi2;
00168 }

const Double_t NuTransitionFitterMinuit::CalculateLikelihood const TH1D *  fdPred,
const TH1D *  fdData
const [virtual]
 

Calculate the "log likelihood" test statistic. Minimizing this approximate chisquared is equivalent to maximizing the likelihood for Poisson-distributed bins. From PDG Statistics chapter.

Definition at line 175 of file NuTransitionFitterMinuit.cxx.

Referenced by operator()().

00176 {
00177     Double_t like = 0;   
00178     Double_t mnu, dnu;
00179     for (Int_t i=6; i<=fdPred->GetNbinsX(); ++i){
00180         mnu = fdPred->GetBinContent(i);
00181         dnu = fdData->GetBinContent(i);
00182         if (mnu<0.0001) mnu = 0.0001;
00183         like += 2*(mnu - dnu);
00184         if (dnu) like += 2*dnu*log(dnu/mnu);
00185     }
00186     return like;
00187 }

NuMatrixOutput * NuTransitionFitterMinuit::DoTransitionFit const TH1D &  hDataToFit  )  [virtual]
 

Perform a single TransitionFit to the given histogram hDataToFit. Return a NuMatrixOutput object with the results of the fit.

Definition at line 257 of file NuTransitionFitterMinuit.cxx.

References NuMatrixOutput::BestFitPoint(), fdFitData, fFitter, mmInput, NuMatrixOutput::NuMuBarBestFitFDPrediction(), NuMatrixOutput::NuMuBarFDData(), NuMatrixOutput::NuMuBarNoOscPrediction(), NuMatrixOutput::NuMuBarNoTransPrediction(), NuMatrixInput::PredictFDSpectrumTransition(), and SetupPars().

Referenced by TransitionFit().

00258 {
00259     // Setup
00260     this->SetupPars();
00261     fdFitData = new TH1D(hDataToFit);
00262     
00263     for (int i = 1; i < 3; i++) {
00264         if (!fFitter->IsFixed(i)) {
00265             cout << "Refixing parameter " << i << endl;
00266             fFitter->FixParameter(i);
00267         }
00268     }
00269 
00270     // Perform Fit
00271     fFitter->Minimize();
00272     
00273     // Get Results
00274     //fFitter->PrintResults(0,0);
00275     
00276     Double_t prob = fFitter->GetParameter(0);
00277     Double_t dm2 = fFitter->GetParameter(1);
00278     Double_t sn2 = fFitter->GetParameter(2);
00279 
00280     // Create Output Object
00281     NuMatrixOutput *mmOutput = new NuMatrixOutput();
00282     mmOutput->NuMuBarFDData(fdFitData);    
00283     mmOutput->NuMuBarBestFitFDPrediction(*mmInput->PredictFDSpectrumTransition(dm2, sn2, prob));
00284     mmOutput->NuMuBarNoTransPrediction(*mmInput->PredictFDSpectrumTransition(dm2, sn2, 0.));
00285     mmOutput->NuMuBarNoOscPrediction(*mmInput->PredictFDSpectrumTransition(0., 0., 0.));
00286     mmOutput->BestFitPoint(sn2, dm2, prob);
00287     
00288     // Clean up and return
00289     delete fdFitData; fdFitData = 0;
00290     return mmOutput;
00291 }

double NuTransitionFitterMinuit::operator() const std::vector< double > &  x  )  const [virtual]
 

Performs a single single prediction and Test. Called directly by Minuit.

Definition at line 297 of file NuTransitionFitterMinuit.cxx.

References CalculateLikelihood(), fdFitData, mmInput, MSG, and NuMatrixInput::PredictFDSpectrumTransition().

00298 {
00299     // Track Fitter Calls
00300     static Int_t fitcounter = 0;
00301     if (!(fitcounter%50)){
00302         MSG("NuTransitionFitterMinuit",Msg::kDebug) << "Minuit TF call " << fitcounter << endl;
00303     }
00304     ++fitcounter;
00305 
00306     // Get Current Parameters
00307     Double_t prob = pars[0];
00308     Double_t dm2 = pars[1];
00309     Double_t sn2 = pars[2];
00310     //Double_t normalisation = pars[3];
00311     
00312     // Predict the FD Spectrum for these parameters
00313     TH1D *fdFitPred = mmInput->PredictFDSpectrumTransition(dm2, sn2, prob);
00314     
00315     // Apply systematics
00316     // fdFitPred->Scale(normalisation);
00317 
00318     // Calculate our goodness-of-fit test, T
00319     double T = this->CalculateLikelihood(fdFitPred,fdFitData);
00320     
00321     // Apply penalty terms
00322     // Example of normalisation penalty term for center = 1, error = 0.04
00323     // T += (normalisation - 1)*(normalisation - 1) / (0.04 * 0.04); 
00324     
00325     // Clean Up
00326     delete fdFitPred; fdFitPred = 0;
00327 
00328     return T;
00329 }

void NuTransitionFitterMinuit::SetupPars  )  [private, virtual]
 

Setup the fitting Parameters. Sets prob starting point to 0.1 and fixes dm2, sn2 based on the xml config file. Normalisation systematic is fixed at 1.

Definition at line 121 of file NuTransitionFitterMinuit.cxx.

References NuXMLConfig::DM2Bar(), NuXMLConfig::DM2Nu(), fFitter, fxml, MAXMSG, NuXMLConfig::SN2Bar(), and NuXMLConfig::SN2Nu().

Referenced by DoTransitionFit().

00122 {
00123     // Fitted Physics Parameters
00124     fFitter->SetParameter(0, "prob", 
00125                           0.1, 0.01, 
00126                           1.0, 0.0);
00127     
00128     // Fixed Physics Parameters
00129     fFitter->SetParameter(1, "dm2", 
00130                           fxml->DM2Nu(), 0.1,
00131                           1.0, 0.0);
00132     if (!fFitter->IsFixed(1)) fFitter->FixParameter(1);  
00133     
00134     fFitter->SetParameter(2, "sn2", 
00135                           fxml->SN2Nu(), 0.01,
00136                           1.0,0.0);
00137     if (!fFitter->IsFixed(2)) fFitter->FixParameter(2);
00138     
00139     if (fxml->DM2Nu() !=  fxml->DM2Bar() || fxml->SN2Nu() !=  fxml->SN2Bar()) {
00140         MAXMSG("NuTransitionFitterMinuit",Msg::kWarning,1) 
00141         << "Nu and NuBar oscillation parameters don't match.  This is not accounted for." << endl;
00142     }
00143     
00144     /*
00145     // Systematic Parameters (fixed for now)
00146     fFitter->SetParameter(3, "Normalisation", 
00147                           1.0, 0.01,
00148                           1.0, 0.0);
00149     if (!fFitter->IsFixed(3)) fFitter->FixParameter(3);
00150     */
00151 }

void NuTransitionFitterMinuit::TransitionFit const Int_t  experiments  )  [virtual]
 

Perform a series of transition fits defined by experiments. The resuls are written out to the outFile given in the constructor.

Definition at line 206 of file NuTransitionFitterMinuit.cxx.

References NuMatrixOutput::bestTransitionProb, DoTransitionFit(), fdData, NuFluctuator::Fluctuate(), fxml, MSG, outputFileName, and NuMatrixOutput::XMLConfig().

00207 {
00208   // Initialize
00209     TString name = "";
00210     TString objName = "NuMatrixOutput";
00211     
00212     MSG("NuTransitionFitterMinuit",Msg::kInfo) << "Recreating file " << outputFileName << endl;
00213     TFile *outputFile = new TFile(outputFileName,"RECREATE");
00214     
00215     NuMatrixOutput *mmOutput = 0;
00216     NuFluctuator *fl = new NuFluctuator();
00217     
00218     TH1F *bestFits = new TH1F("bestFits","Best Fit Points",175,-0.5,1.25);
00219     
00220     
00221     // Perform an unfluctuated fit
00222     mmOutput = DoTransitionFit(*fdData);
00223     
00224     if (fxml) mmOutput->XMLConfig(fxml);    
00225     name = objName + "_";
00226     name += "nofluct";
00227     outputFile->WriteObject(mmOutput,name);
00228     
00229     delete mmOutput;
00230     
00231     // Perform fluctuated fits
00232     for (int i = 0; i < experiments; i++) {
00233         mmOutput = DoTransitionFit(fl->Fluctuate(fdData));
00234 
00235         bestFits->Fill(mmOutput->bestTransitionProb);
00236         
00237         if (fxml) mmOutput->XMLConfig(fxml);
00238         name = objName + "_";
00239         name += i;
00240         outputFile->WriteObject(mmOutput,name);
00241         
00242         delete mmOutput;
00243     }
00244     
00245     // Write Best Fits and close the file
00246     outputFile->WriteObject(bestFits,bestFits->GetName());
00247     outputFile->Close();
00248     MSG("NuTransitionFitterMinuit",Msg::kInfo) 
00249     << "Don't mind the segfault.  Everything is done and it appears to be harmless." << endl;
00250 }

virtual double NuTransitionFitterMinuit::Up  )  const [inline, virtual]
 

Definition at line 40 of file NuTransitionFitterMinuit.h.

00040 {return 1.0;}//Chi2 errors; 0.5 for likelihood


Member Data Documentation

TH1D* NuTransitionFitterMinuit::fdData [private]
 

Definition at line 53 of file NuTransitionFitterMinuit.h.

Referenced by NuTransitionFitterMinuit(), and TransitionFit().

TH1D* NuTransitionFitterMinuit::fdFitData [private]
 

Definition at line 54 of file NuTransitionFitterMinuit.h.

Referenced by DoTransitionFit(), NuTransitionFitterMinuit(), and operator()().

TFitterMinuit* NuTransitionFitterMinuit::fFitter [private]
 

Definition at line 49 of file NuTransitionFitterMinuit.h.

Referenced by DoTransitionFit(), NuTransitionFitterMinuit(), and SetupPars().

NuXMLConfig* NuTransitionFitterMinuit::fxml [private]
 

Definition at line 55 of file NuTransitionFitterMinuit.h.

Referenced by NuTransitionFitterMinuit(), SetupPars(), and TransitionFit().

NuMatrixInput* NuTransitionFitterMinuit::mmInput [private]
 

Definition at line 48 of file NuTransitionFitterMinuit.h.

Referenced by DoTransitionFit(), NuTransitionFitterMinuit(), and operator()().

TString NuTransitionFitterMinuit::outputFileName [private]
 

Definition at line 51 of file NuTransitionFitterMinuit.h.

Referenced by NuTransitionFitterMinuit(), and TransitionFit().


The documentation for this class was generated from the following files:
Generated on Mon Feb 15 11:09:58 2010 for loon by  doxygen 1.3.9.1