00001
00002 #include <string>
00003 #include <vector>
00004
00005 #include "NtupleUtils/NuMMRunFC.h"
00006 #include "NtupleUtils/NuMMParameters.h"
00007 #include "NtupleUtils/NuSystFitter.h"
00008 #include "NtupleUtils/NuEZRunsFitter.h"
00009 #include "MessageService/MsgService.h"
00010
00011 CVSID("$Id: NuEZRunsFitter.cxx,v 1.3 2009/04/08 16:35:01 nickd Exp $");
00012
00013 using namespace std;
00014
00015 NuEZRunsFitter::NuEZRunsFitter() : fFitter(0)
00016 {
00017
00018 }
00019
00020 NuEZRunsFitter::~NuEZRunsFitter()
00021 {
00022
00023 while (!fOwnedFitters.empty())
00024 {
00025
00026 if (fOwnedFitters.back()) delete fOwnedFitters.back();
00027 fOwnedFitters.pop_back();
00028 }
00029 }
00030
00031 void NuEZRunsFitter::AddRun(std::string Helper,
00032 std::string NeardetData, std::string FardetData)
00033 {
00034 NuEZFitter *f = new NuEZFitter(Helper, NeardetData, FardetData);
00035 fFitters.push_back(f);
00036 fOwnedFitters.push_back(f);
00037
00038 BuildFitter();
00039 }
00040
00041 void NuEZRunsFitter::AddRun(NuEZFitter *EZFitter)
00042 {
00043
00044 if (EZFitter) fFitters.push_back(EZFitter);
00045
00046 BuildFitter();
00047 }
00048
00049
00050 NuMatrixSpectrum NuEZRunsFitter::PredictionNQ(Double_t dm2bar, Double_t sn2bar,
00051 Double_t dm2, Double_t sn2) const
00052 {
00053 NuMMParameters mmPars;
00054 mmPars.Dm2(dm2);
00055 mmPars.Sn2(sn2);
00056 mmPars.Dm2Bar(dm2bar);
00057 mmPars.Sn2Bar(sn2bar);
00058
00059 return PredictionNQ(mmPars);
00060 }
00061
00062 NuMatrixSpectrum NuEZRunsFitter::PredictionPQ(Double_t dm2bar, Double_t sn2bar,
00063 Double_t dm2, Double_t sn2) const
00064 {
00065 NuMMParameters mmPars;
00066 mmPars.Dm2(dm2);
00067 mmPars.Sn2(sn2);
00068 mmPars.Dm2Bar(dm2bar);
00069 mmPars.Sn2Bar(sn2bar);
00070
00071 return PredictionPQ(mmPars);
00072 }
00073
00074 NuMatrixSpectrum NuEZRunsFitter::PredictionNQ(const NuMMParameters ¶ms) const
00075 {
00076 NuMatrixSpectrum total;
00077
00078 for (UInt_t i = 0; i < fFitters.size(); i++) {
00079 total.Add(fFitters[i]->PredictionNQ(params), true);
00080 }
00081
00082 return total;
00083 }
00084 NuMatrixSpectrum NuEZRunsFitter::PredictionPQ(const NuMMParameters ¶ms) const
00085 {
00086 NuMatrixSpectrum total;
00087
00088 for (UInt_t i = 0; i < fFitters.size(); i++) {
00089 total.Add(fFitters[i]->PredictionPQ(params), true);
00090 }
00091
00092 return total;
00093 }
00094
00095 NuMatrixSpectrum NuEZRunsFitter::FDDataNQ() const
00096 {
00097 NuMatrixSpectrum total;
00098
00099 for (UInt_t i = 0; i < fFitters.size(); i++) {
00100
00101 total.Add(fFitters[i]->FDDataNQ(), true);
00102 }
00103
00104 return total;
00105 }
00106
00107 NuMatrixSpectrum NuEZRunsFitter::FDDataPQ() const
00108 {
00109 NuMatrixSpectrum total;
00110
00111 for (UInt_t i = 0; i < fFitters.size(); i++) {
00112 total.Add(fFitters[i]->FDDataPQ(), true);
00113 }
00114
00115 return total;
00116 }
00117
00118 void NuEZRunsFitter::BuildFitter( void )
00119 {
00120
00121 if (fFitter) delete fFitter;
00122 fFitter = 0;
00123
00124
00125 if (fFitters.size() == 0) return;
00126
00127
00128 fFitter = new NuSystFitter();
00129
00130
00131 for(UInt_t i = 0; i < fFitters.size(); i++) {
00132 fFitter->push_back(fFitters[i]->Run());
00133 }
00134 }
00135
00136 Double_t NuEZRunsFitter::Chi2(Double_t dm2bar, Double_t sn2bar, Double_t dm2, Double_t sn2) const
00137 {
00138 NuMMParameters mmPars;
00139 mmPars.Dm2(dm2);
00140 mmPars.Sn2(sn2);
00141 mmPars.Dm2Bar(dm2bar);
00142 mmPars.Sn2Bar(sn2bar);
00143
00144
00145 return Chi2(mmPars);
00146 }
00147
00148 Double_t NuEZRunsFitter::Chi2(const NuMMParameters ¶ms) const
00149 {
00150 if (fFitter) {
00151 return (*fFitter)(params.VectorParameters());
00152 } else {
00153 MSG("NuEZRunsFitter",Msg::kError) << "No Fitter exists. Have you added FD data?" << endl;
00154 return 0;
00155 }
00156 }
00157