00001 #include "TCanvas.h"
00002 #include "TFile.h"
00003 #include "TH1D.h"
00004 #include "TGraph.h"
00005
00006 #include "MessageService/MsgService.h"
00007 #include "NtupleUtils/NuHistInterpolator.h"
00008 #include "NtupleUtils/NuMatrixSpectrum.h"
00009 #include "NtupleUtils/NuMMHelperCPT.h"
00010 #include "NtupleUtils/NuMMParameters.h"
00011 #include "NtupleUtils/NuMMRunTransition.h"
00012
00013 ClassImp(NuMMRunTransition)
00014
00015 CVSID("$Id: NuMMRunTransition.cxx,v 1.18 2009/10/15 16:40:55 ahimmel Exp $");
00016
00017 using namespace Sample;
00018
00019
00020 NuMMRunTransition::NuMMRunTransition(NuMMHelperCPT* helper,
00021 NuMatrixSpectrum* ndNuData,
00022 NuMatrixSpectrum* ndBarData,
00023 double pot)
00024 : NuMMRunNuBar(),
00025 fPredictNeutrinos(false),
00026 fPredictAntiNeutrinos(true)
00027 {
00028 TString name = "hError";
00029 name += (counter++);
00030 TH1D hBlank(name, "Something Went Wrong", 10, 0, 30);
00031
00032 fndNuData = ndNuData;
00033 fndBarData = ndBarData;
00034 fHelper = helper;
00035
00036 ffdNuData = new NuMatrixSpectrum(hBlank, pot);
00037 ffdBarData = new NuMatrixSpectrum(hBlank, pot);
00038
00039
00040
00041 PreCalcnuPrediction = PreCalcbarPrediction = 0;
00042 PreCalcnuAppeared = PreCalcbarAppeared = 0;
00043 PreCalcpotentialNuTaus= PreCalcpotentialTauBars = 0;
00044 PreCalcnuNCBackground = PreCalcbarNCBackground = 0;
00045 PreCalcwrongSignNuMus = PreCalcwrongSignNuBars = 0;
00046
00047 PreCalcnuPredictionReco = PreCalcbarPredictionReco = 0;
00048 PreCalcnuAppearedReco = PreCalcbarAppearedReco = 0;
00049 PreCalcpotentialNuTausReco= PreCalcpotentialTauBarsReco = 0;
00050 PreCalcwrongSignNuMusReco = PreCalcwrongSignNuBarsReco = 0;
00051
00052 }
00053
00054
00055 NuMMRunTransition::NuMMRunTransition(NuMMHelperCPT* helper,
00056 NuMatrixSpectrum* ndNuData,
00057 NuMatrixSpectrum* ndBarData,
00058 NuMatrixSpectrum* fdNuData,
00059 NuMatrixSpectrum* fdBarData)
00060 : NuMMRunNuBar(),
00061 fPredictNeutrinos(false),
00062 fPredictAntiNeutrinos(true)
00063 {
00064 fndNuData = ndNuData;
00065 fndBarData = ndBarData;
00066 ffdNuData = fdNuData;
00067 ffdBarData = fdBarData;
00068 fHelper = helper;
00069
00070
00071
00072 PreCalcnuPrediction = PreCalcbarPrediction = 0;
00073 PreCalcnuAppeared = PreCalcbarAppeared = 0;
00074 PreCalcpotentialNuTaus= PreCalcpotentialTauBars = 0;
00075 PreCalcnuNCBackground = PreCalcbarNCBackground = 0;
00076 PreCalcwrongSignNuMus = PreCalcwrongSignNuBars = 0;
00077
00078 PreCalcnuPredictionReco = PreCalcbarPredictionReco = 0;
00079 PreCalcnuAppearedReco = PreCalcbarAppearedReco = 0;
00080 PreCalcpotentialNuTausReco= PreCalcpotentialTauBarsReco = 0;
00081 PreCalcwrongSignNuMusReco = PreCalcwrongSignNuBarsReco = 0;
00082
00083 }
00084
00085
00086
00087 NuMMRunTransition::~NuMMRunTransition()
00088 {
00089 ResetCache();
00090 }
00091
00092
00093
00094 void NuMMRunTransition::ResetCache()
00095 {
00096
00097 if (PreCalcnuPrediction) delete PreCalcnuPrediction;
00098 if (PreCalcbarPrediction) delete PreCalcbarPrediction;
00099
00100 if (PreCalcnuAppeared) delete PreCalcnuAppeared;
00101 if (PreCalcbarAppeared) delete PreCalcbarAppeared;
00102
00103 if (PreCalcpotentialNuTaus) delete PreCalcpotentialNuTaus;
00104 if (PreCalcpotentialTauBars)delete PreCalcpotentialTauBars;
00105
00106 if (PreCalcnuNCBackground) delete PreCalcnuNCBackground;
00107 if (PreCalcbarNCBackground) delete PreCalcbarNCBackground;
00108
00109 if (PreCalcwrongSignNuMus) delete PreCalcwrongSignNuMus;
00110 if (PreCalcwrongSignNuBars) delete PreCalcwrongSignNuBars;
00111
00112 if (PreCalcnuPredictionReco) delete PreCalcnuPredictionReco;
00113 if (PreCalcbarPredictionReco) delete PreCalcbarPredictionReco;
00114
00115 if (PreCalcnuAppearedReco) delete PreCalcnuAppearedReco;
00116 if (PreCalcbarAppearedReco) delete PreCalcbarAppearedReco;
00117
00118 if (PreCalcpotentialNuTausReco) delete PreCalcpotentialNuTausReco;
00119 if (PreCalcpotentialTauBarsReco)delete PreCalcpotentialTauBarsReco;
00120
00121 if (PreCalcwrongSignNuMusReco) delete PreCalcwrongSignNuMusReco;
00122 if (PreCalcwrongSignNuBarsReco) delete PreCalcwrongSignNuBarsReco;
00123
00124 PreCalcnuPrediction = PreCalcbarPrediction = 0;
00125 PreCalcnuAppeared = PreCalcbarAppeared = 0;
00126 PreCalcpotentialNuTaus= PreCalcpotentialTauBars = 0;
00127 PreCalcnuNCBackground = PreCalcbarNCBackground = 0;
00128 PreCalcwrongSignNuMus = PreCalcwrongSignNuBars = 0;
00129
00130 PreCalcnuPredictionReco = PreCalcbarPredictionReco = 0;
00131 PreCalcnuAppearedReco = PreCalcbarAppearedReco = 0;
00132 PreCalcpotentialNuTausReco= PreCalcpotentialTauBarsReco = 0;
00133 PreCalcwrongSignNuMusReco = PreCalcwrongSignNuBarsReco = 0;
00134
00135 fCached = false;
00136 }
00137
00138
00139
00140 void NuMMRunTransition::CacheExtrapolation(const NuMMParameters& pars)
00141 {
00142
00143 if (fCached) return;
00144
00145 ResetCache();
00146
00147 if (!fQuietMode)
00148 MSG("NuMMRunTransitions",Msg::kInfo) << "Pre-calculating static extrapolation variables..." << endl;
00149
00150
00151
00152 PreCalcnuPrediction = new NuMatrixSpectrum(*fndNuData);
00153 PreCalcbarPrediction = new NuMatrixSpectrum(*fndBarData);
00154
00155
00156
00157 NuMatrixSpectrum &nuPrediction = *PreCalcnuPrediction;
00158 NuMatrixSpectrum &barPrediction = *PreCalcbarPrediction;
00159
00160
00161
00162
00163 nuPrediction.Multiply(fHelper->NDNuPurity());
00164 nuPrediction.RecoToTrue(fHelper->NDNuRecoVsTrue());
00165 nuPrediction.Divide(fHelper->NDNuEfficiency());
00166 nuPrediction.Divide(fHelper->NuXSecGraph());
00167 nuPrediction.Divide(fndNuData->PoT());
00168 nuPrediction.Divide(fNDFidMass);
00169 nuPrediction.ExtrapolateNDToFD(fHelper->NuBeamMatrix());
00170 nuPrediction.Multiply(fFDFidMass);
00171 nuPrediction.Multiply(ffdNuData->PoT());
00172
00173 nuPrediction.ResetPoT(ffdNuData->PoT());
00174
00175
00176 barPrediction.Multiply(fHelper->NDBarPurity());
00177 barPrediction.RecoToTrue(fHelper->NDBarRecoVsTrue());
00178 barPrediction.Divide(fHelper->NDBarEfficiency());
00179 barPrediction.Divide(fHelper->BarXSecGraph());
00180 barPrediction.Divide(fndBarData->PoT());
00181 barPrediction.Divide(fNDFidMass);
00182 barPrediction.ExtrapolateNDToFD(fHelper->BarBeamMatrix());
00183 barPrediction.Multiply(fFDFidMass);
00184 barPrediction.Multiply(ffdBarData->PoT());
00185
00186 barPrediction.ResetPoT(ffdBarData->PoT());
00187
00188 PreCalcpotentialNuTaus = new NuMatrixSpectrum(nuPrediction);
00189 PreCalcpotentialTauBars = new NuMatrixSpectrum(barPrediction);
00190
00191
00192 NuMatrixSpectrum &potentialNuTaus = *PreCalcpotentialNuTaus;
00193 NuMatrixSpectrum &potentialTauBars = *PreCalcpotentialTauBars;
00194
00195 if (fHelper->DoTaus()) {
00196
00197 potentialNuTaus.Multiply(fHelper->XSecGraphNuTaus());
00198 potentialNuTaus.Multiply(fHelper->FDNuTauEfficiency());
00199 potentialNuTaus.InverseOscillate(pars.Dm2(),pars.Sn2());
00200
00201
00202 potentialTauBars.Multiply(fHelper->XSecGraphTauBars());
00203 potentialTauBars.Multiply(fHelper->FDTauBarEfficiency());
00204 potentialTauBars.InverseOscillate(pars.Dm2Bar(),pars.Sn2Bar());
00205 }
00206 else {
00207 PreCalcpotentialNuTaus->Multiply(0.0);
00208 PreCalcpotentialTauBars->Multiply(0.0);
00209 }
00210
00211
00212
00213 PreCalcnuAppeared = new NuMatrixSpectrum(barPrediction);
00214 PreCalcbarAppeared = new NuMatrixSpectrum(nuPrediction);
00215 NuMatrixSpectrum &appearedNuMus = *PreCalcnuAppeared;
00216 NuMatrixSpectrum &appearedNuBars = *PreCalcbarAppeared;
00217 appearedNuMus.SetName("Appeared_NuMus");
00218 appearedNuBars.SetName("Appeared_NuMuBars");
00219
00220
00221 appearedNuMus.Multiply(fHelper->NuXSecGraph());
00222 appearedNuMus.InverseOscillate(pars.Dm2Bar(),pars.Sn2Bar());
00223 appearedNuMus.Multiply(fHelper->FDNuEfficiency());
00224
00225 appearedNuBars.Multiply(fHelper->BarXSecGraph());
00226 appearedNuBars.InverseOscillate(pars.Dm2(),pars.Sn2());
00227 appearedNuBars.Multiply(fHelper->FDBarEfficiency());
00228
00229
00230
00231 nuPrediction.Multiply(fHelper->NuXSecGraph());
00232 barPrediction.Multiply(fHelper->BarXSecGraph());
00233
00234
00235
00236 PreCalcnuNCBackground = new NuMatrixSpectrum(*PreCalcnuPrediction);;
00237 PreCalcbarNCBackground = new NuMatrixSpectrum(*PreCalcbarPrediction);
00238 NuMatrixSpectrum &nuNCBackground = *PreCalcnuNCBackground;
00239 NuMatrixSpectrum &barNCBackground = *PreCalcbarNCBackground;
00240
00241
00242
00243 nuNCBackground.Multiply(fHelper->FDNuEfficiency());
00244 nuNCBackground.TrueToReco(fHelper->FDNuRecoVsTrue());
00245 nuNCBackground.Divide(fHelper->FDNuPurity());
00246 nuNCBackground.Multiply(fHelper->FDNuNCContamination());
00247
00248
00249 barNCBackground.Multiply(fHelper->FDBarEfficiency());
00250 barNCBackground.TrueToReco(fHelper->FDBarRecoVsTrue());
00251 barNCBackground.Divide(fHelper->FDBarPurity());
00252 barNCBackground.Multiply(fHelper->FDBarNCContamination());
00253
00254
00255
00256
00257 PreCalcwrongSignNuMus = new NuMatrixSpectrum(*PreCalcnuPrediction);
00258 PreCalcwrongSignNuBars = new NuMatrixSpectrum(*PreCalcbarPrediction);
00259 NuMatrixSpectrum &wrongSignNuMus = *PreCalcwrongSignNuMus;
00260 NuMatrixSpectrum &wrongSignNuBars = *PreCalcwrongSignNuBars;
00261
00262
00263 wrongSignNuMus.Multiply(fHelper->FDWrongSignNuEfficiency());
00264 wrongSignNuMus.Oscillate(pars.Dm2(),pars.Sn2());
00265
00266
00267 wrongSignNuBars.Multiply(fHelper->FDWrongSignBarEfficiency());
00268 wrongSignNuBars.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00269
00270
00271
00272 nuPrediction.Oscillate(pars.Dm2(),pars.Sn2());
00273 nuPrediction.Multiply(fHelper->FDNuEfficiency());
00274
00275 barPrediction.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00276 barPrediction.Multiply(fHelper->FDBarEfficiency());
00277
00278
00279
00280
00281
00282
00283
00284
00285 nuPrediction.SetName("NuMus");
00286 barPrediction.SetName("NuMuBars");
00287
00288 potentialNuTaus.SetName("NuTaus");
00289 potentialTauBars.SetName("NuTauBars");
00290
00291 wrongSignNuMus.SetName("WrongSign_NuMus");
00292 wrongSignNuBars.SetName("WrongSign_NuMuBars");
00293
00294 nuNCBackground.SetName("NC_NuMus");
00295 barNCBackground.SetName("NC_NuMuBars");
00296
00297
00298 PreCalcnuPredictionReco = new NuMatrixSpectrum(*PreCalcnuPrediction);
00299 PreCalcbarPredictionReco = new NuMatrixSpectrum(*PreCalcbarPrediction);
00300 PreCalcnuPredictionReco->TrueToReco(fHelper->FDNuRecoVsTrue());
00301 PreCalcbarPredictionReco->TrueToReco(fHelper->FDBarRecoVsTrue());
00302
00303 if (fHelper->DoTaus()) {
00304 PreCalcpotentialNuTausReco = new NuMatrixSpectrum(*PreCalcpotentialNuTaus);
00305 PreCalcpotentialTauBarsReco = new NuMatrixSpectrum(*PreCalcpotentialTauBars);
00306 PreCalcpotentialNuTausReco->TrueToReco(fHelper->FDNuTauRecoVsTrue());
00307 PreCalcpotentialTauBarsReco->TrueToReco(fHelper->FDTauBarRecoVsTrue());
00308 }
00309
00310 PreCalcnuAppearedReco = new NuMatrixSpectrum(*PreCalcnuAppeared);
00311 PreCalcbarAppearedReco = new NuMatrixSpectrum(*PreCalcbarAppeared);
00312 PreCalcnuAppearedReco->TrueToReco(fHelper->FDNuRecoVsTrue());
00313 PreCalcbarAppearedReco->TrueToReco(fHelper->FDBarRecoVsTrue());
00314
00315 PreCalcwrongSignNuMusReco = new NuMatrixSpectrum(*PreCalcwrongSignNuMus);
00316 PreCalcwrongSignNuBarsReco = new NuMatrixSpectrum(*PreCalcwrongSignNuBars);
00317 PreCalcwrongSignNuMusReco->TrueToReco(fHelper->FDWrongSignNuRecoVsTrue());
00318 PreCalcwrongSignNuBarsReco->TrueToReco(fHelper->FDWrongSignBarRecoVsTrue());
00319
00320 fCached = true;
00321
00322
00323 if (!fQuietMode)
00324 cout << "Extrapolation variables cached..." << endl;
00325 }
00326
00327
00328
00329 const std::vector<TH1D>
00330 NuMMRunTransition::WriteFDPredHistos(const NuMMParameters& pars) const
00331 {
00332
00333 vector<TH1D> vHistos;
00334
00335
00336 TH1D hNDNuData(*(fndNuData->Spectrum()));
00337 hNDNuData.SetName("ndDataNQ");
00338 hNDNuData.SetTitle("ndDataNQ");
00339 vHistos.push_back(*(new TH1D(hNDNuData)));
00340 TH1D hNDBarData(*(fndBarData->Spectrum()));
00341 hNDBarData.SetName("ndDataPQ");
00342 hNDBarData.SetTitle("ndDataPQ");
00343 vHistos.push_back(*(new TH1D(hNDBarData)));
00344
00345
00346
00347
00348
00349
00350 NuMatrixSpectrum nuPrediction(*fndNuData);
00351 nuPrediction.Multiply(fHelper->NDNuPurity());
00352 nuPrediction.RecoToTrue(fHelper->NDNuRecoVsTrue());
00353 nuPrediction.Divide(fHelper->NDNuEfficiency());
00354 nuPrediction.Divide(fHelper->NuXSecGraph());
00355 nuPrediction.Divide(fndNuData->PoT());
00356 nuPrediction.Divide(fNDFidMass);
00357 nuPrediction.ExtrapolateNDToFD(fHelper->NuBeamMatrix());
00358 nuPrediction.Multiply(fFDFidMass);
00359 nuPrediction.Multiply(ffdNuData->PoT());
00360
00361
00362 NuMatrixSpectrum barPrediction(*fndBarData);
00363 barPrediction.Multiply(fHelper->NDBarPurity());
00364 barPrediction.RecoToTrue(fHelper->NDBarRecoVsTrue());
00365 barPrediction.Divide(fHelper->NDBarEfficiency());
00366 barPrediction.Divide(fHelper->BarXSecGraph());
00367 barPrediction.Divide(fndBarData->PoT());
00368 barPrediction.Divide(fNDFidMass);
00369 barPrediction.ExtrapolateNDToFD(fHelper->BarBeamMatrix());
00370 barPrediction.Multiply(fFDFidMass);
00371 barPrediction.Multiply(ffdBarData->PoT());
00372
00373 NuMatrixSpectrum potentialNuTaus(nuPrediction);
00374 NuMatrixSpectrum potentialTauBars(barPrediction);
00375 if (fHelper->DoTaus()) {
00376
00377 potentialNuTaus.Multiply(fHelper->XSecGraphNuTaus());
00378 potentialNuTaus.Multiply(fHelper->FDNuTauEfficiency());
00379 potentialNuTaus.InverseOscillate(pars.Dm2(),pars.Sn2());
00380 potentialNuTaus.TrueToReco(fHelper->FDNuTauRecoVsTrue());
00381
00382 potentialTauBars.Multiply(fHelper->XSecGraphTauBars());
00383 potentialTauBars.Multiply(fHelper->FDTauBarEfficiency());
00384 potentialTauBars.InverseOscillate(pars.Dm2Bar(),pars.Sn2Bar());
00385 potentialTauBars.TrueToReco(fHelper->FDTauBarRecoVsTrue());
00386 }
00387 else {
00388 potentialNuTaus.Multiply(0.0);
00389 potentialTauBars.Multiply(0.0);
00390 }
00391
00392
00393 NuMatrixSpectrum appearedNuBars(nuPrediction);
00394 TH1D hRawAppearPQ(*(appearedNuBars.Spectrum()));
00395 hRawAppearPQ.SetName("hRawAppearPQ");
00396 vHistos.push_back(hRawAppearPQ);
00397
00398 appearedNuBars.Multiply(fHelper->BarXSecGraph());
00399 TH1D hTrueEffAppearPQ(*(appearedNuBars.Spectrum()));
00400 hTrueEffAppearPQ.SetName("hTrueEffAppearPQ");
00401 vHistos.push_back(hTrueEffAppearPQ);
00402
00403 appearedNuBars.Multiply(fHelper->FDBarEfficiency());
00404 TH1D hTrueAppearPQ(*(appearedNuBars.Spectrum()));
00405 hTrueAppearPQ.SetName("hTrueAppearPQ");
00406 vHistos.push_back(hTrueAppearPQ);
00407
00408 appearedNuBars.InverseOscillate(pars.Dm2(),pars.Sn2());
00409 appearedNuBars.Multiply(pars.TransitionProb());
00410 TH1D hTrueTransitionPQ(*(appearedNuBars.Spectrum()));
00411 hTrueTransitionPQ.SetName("hTrueTransitionPQ");
00412 vHistos.push_back(hTrueTransitionPQ);
00413
00414 appearedNuBars.TrueToReco(fHelper->FDBarRecoVsTrue());
00415 TH1D hRecoAppearPQ(*(appearedNuBars.Spectrum()));
00416 hRecoAppearPQ.SetName("hRecoAppearPQ");
00417 vHistos.push_back(hRecoAppearPQ);
00418
00419
00420 NuMatrixSpectrum appearedNuMus(barPrediction);
00421 TH1D hRawAppearNQ(*(appearedNuMus.Spectrum()));
00422 hRawAppearNQ.SetName("hRawAppearNQ");
00423 vHistos.push_back(hRawAppearNQ);
00424
00425 appearedNuMus.Multiply(fHelper->NuXSecGraph());
00426 TH1D hTrueEffAppearNQ(*(appearedNuMus.Spectrum()));
00427 hTrueEffAppearNQ.SetName("hTrueEffAppearNQ");
00428 vHistos.push_back(hTrueEffAppearNQ);
00429
00430 appearedNuMus.Multiply(fHelper->FDNuEfficiency());
00431 TH1D hTrueAppearNQ(*(appearedNuMus.Spectrum()));
00432 hTrueAppearNQ.SetName("hTrueAppearNQ");
00433 vHistos.push_back(hTrueAppearNQ);
00434
00435 appearedNuMus.InverseOscillate(pars.Dm2(),pars.Sn2());
00436 appearedNuMus.Multiply(pars.TransitionProb());
00437 TH1D hTrueTransitionNQ(*(appearedNuMus.Spectrum()));
00438 hTrueTransitionNQ.SetName("hTrueTransitionNQ");
00439 vHistos.push_back(hTrueTransitionNQ);
00440
00441 appearedNuMus.TrueToReco(fHelper->FDNuRecoVsTrue());
00442 TH1D hRecoAppearNQ(*(appearedNuMus.Spectrum()));
00443 hRecoAppearNQ.SetName("hRecoAppearNQ");
00444 vHistos.push_back(hRecoAppearNQ);
00445
00446
00447
00448 nuPrediction.Multiply(fHelper->NuXSecGraph());
00449 barPrediction.Multiply(fHelper->BarXSecGraph());
00450
00451
00452 TH1D hTrueNuMus(*(nuPrediction.Spectrum()));
00453 hTrueNuMus.SetName("hTrueNuMus");
00454 vHistos.push_back(hTrueNuMus);
00455
00456
00457 TH1D hTrueNuBars(*(barPrediction.Spectrum()));
00458 hTrueNuBars.SetName("hTrueNuBars");
00459 vHistos.push_back(hTrueNuBars);
00460
00461
00462 NuMatrixSpectrum nuNCBackground(nuPrediction);
00463 nuNCBackground.Multiply(fHelper->FDNuEfficiency());
00464 nuNCBackground.TrueToReco(fHelper->FDNuRecoVsTrue());
00465 nuNCBackground.Divide(fHelper->FDNuPurity());
00466 nuNCBackground.Multiply(fHelper->FDNuNCContamination());
00467
00468
00469 NuMatrixSpectrum barNCBackground(barPrediction);
00470 barNCBackground.Multiply(fHelper->FDBarEfficiency());
00471 barNCBackground.TrueToReco(fHelper->FDBarRecoVsTrue());
00472 barNCBackground.Divide(fHelper->FDBarPurity());
00473 barNCBackground.Multiply(fHelper->FDBarNCContamination());
00474
00475
00476
00477 NuMatrixSpectrum wrongSignNuMus(nuPrediction);
00478 wrongSignNuMus.Multiply(fHelper->FDWrongSignNuEfficiency());
00479 wrongSignNuMus.Oscillate(pars.Dm2(),pars.Sn2());
00480
00481
00482
00483 NuMatrixSpectrum wrongSignNuBars(barPrediction);
00484 wrongSignNuBars.Multiply(fHelper->FDWrongSignBarEfficiency());
00485 wrongSignNuBars.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00486
00487
00488 TH1D hFDWrongSignPQ(*(wrongSignNuBars.Spectrum()));
00489 hFDWrongSignPQ.SetName("fdWrongSignPQ");
00490 vHistos.push_back(hFDWrongSignPQ);
00491
00492 TH1D hFDWrongSignNQ(*(wrongSignNuMus.Spectrum()));
00493 hFDWrongSignNQ.SetName("fdWrongSignNQ");
00494 vHistos.push_back(hFDWrongSignNQ);
00495
00496
00497 wrongSignNuBars.TrueToReco(fHelper->FDWrongSignBarRecoVsTrue());
00498 wrongSignNuMus.TrueToReco(fHelper->FDWrongSignNuRecoVsTrue());
00499
00500
00501 nuPrediction.Oscillate(pars.Dm2(),pars.Sn2());
00502 barPrediction.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00503
00504 nuPrediction.Multiply(fHelper->FDNuEfficiency());
00505 barPrediction.Multiply(fHelper->FDBarEfficiency());
00506
00507
00508 nuPrediction.TrueToReco(fHelper->FDNuRecoVsTrue());
00509 barPrediction.TrueToReco(fHelper->FDBarRecoVsTrue());
00510
00511
00512 TH1D hFDNoBackNQ(*(nuPrediction.Spectrum()));
00513 hFDNoBackNQ.SetName("fdBasePredictionNQ");
00514 vHistos.push_back(hFDNoBackNQ);
00515
00516 TH1D hFDNoBackPQ(*(barPrediction.Spectrum()));
00517 hFDNoBackPQ.SetName("fdBasePredictionPQ");
00518 vHistos.push_back(hFDNoBackPQ);
00519
00520
00521 nuPrediction.Add(wrongSignNuBars);
00522 barPrediction.Add(wrongSignNuMus);
00523 nuPrediction.Add(nuNCBackground);
00524 if (fHelper->DoTaus()) nuPrediction.Add(potentialNuTaus);
00525 barPrediction.Add(barNCBackground);
00526 if (fHelper->DoTaus()) barPrediction.Add(potentialTauBars);
00527
00528
00529 TH1D hFDPredictionNoTransNQ(*(nuPrediction.Spectrum()));
00530 hFDPredictionNoTransNQ.SetName("fdPredictionNoTransNQ");
00531 vHistos.push_back(hFDPredictionNoTransNQ);
00532
00533 TH1D hFDPredictionNoTransPQ(*(barPrediction.Spectrum()));
00534 hFDPredictionNoTransPQ.SetName("fdPredictionNoTransPQ");
00535 vHistos.push_back(hFDPredictionNoTransPQ);
00536
00537
00538
00539
00540 nuPrediction.Add(appearedNuMus);
00541 barPrediction.Add(appearedNuBars);
00542
00543
00544
00545 TH1D hFDPredictionNQ(*(nuPrediction.Spectrum()));
00546 hFDPredictionNQ.SetName("fdPredictionNQ");
00547 vHistos.push_back(hFDPredictionNQ);
00548
00549 TH1D hFDPredictionPQ(*(barPrediction.Spectrum()));
00550 hFDPredictionPQ.SetName("fdPredictionPQ");
00551 vHistos.push_back(hFDPredictionPQ);
00552
00553 TH1D hFDNCNQ(*(nuNCBackground.Spectrum()));
00554 hFDNCNQ.SetName("fdNCNQ");
00555 vHistos.push_back(hFDNCNQ);
00556
00557 TH1D hFDNCPQ(*(barNCBackground.Spectrum()));
00558 hFDNCPQ.SetName("fdNCPQ");
00559 vHistos.push_back(hFDNCPQ);
00560
00561 if (fHelper->DoTaus()) {
00562 TH1D hFDTausNQ(*(potentialNuTaus.Spectrum()));
00563 hFDTausNQ.SetName("fdTausNQ");
00564 vHistos.push_back(hFDTausNQ);
00565
00566 TH1D hFDTausPQ(*(potentialTauBars.Spectrum()));
00567 hFDTausPQ.SetName("fdTausPQ");
00568 vHistos.push_back(hFDTausPQ);
00569 }
00570
00571 TH1D hFDDataNQ(*(ffdNuData->Spectrum()));
00572 hFDDataNQ.SetName("fdDataNQ");
00573 vHistos.push_back(hFDDataNQ);
00574
00575 TH1D hFDDataPQ(*(ffdBarData->Spectrum()));
00576 hFDDataPQ.SetName("fdDataPQ");
00577 vHistos.push_back(hFDDataPQ);
00578
00579 return vHistos;
00580 }
00581
00582 const pair<NuMatrixSpectrum,NuMatrixSpectrum>
00583 NuMMRunTransition::MakeFDPred(const NuMMParameters& pars)
00584 {
00585 if (!fQuietMode) {
00586 cout << "sn2: " << pars.Sn2() << "; dm2: " << pars.Dm2()
00587 << "; sn2bar: " << pars.Sn2Bar() << "; dm2bar: " << pars.Dm2Bar()
00588 << "; alpha: " << pars.TransitionProb()
00589 << endl;
00590 }
00591
00592 CacheExtrapolation(pars);
00593
00595
00596
00597
00598
00599 NuMatrixSpectrum nuPrediction(*PreCalcnuPredictionReco);
00600 NuMatrixSpectrum barPrediction(*PreCalcbarPredictionReco);
00601
00602 NuMatrixSpectrum potentialNuTaus(*PreCalcpotentialNuTausReco);
00603 NuMatrixSpectrum potentialTauBars(*PreCalcpotentialTauBarsReco);
00604
00605 NuMatrixSpectrum appearedNuMus(*PreCalcnuAppearedReco);
00606 NuMatrixSpectrum appearedNuBars(*PreCalcbarAppearedReco);
00607
00608 NuMatrixSpectrum wrongSignNuMus(*PreCalcwrongSignNuMusReco);
00609 NuMatrixSpectrum wrongSignNuBars(*PreCalcwrongSignNuBarsReco);
00610
00611 NuMatrixSpectrum nuNCBackground(*PreCalcnuNCBackground);
00612 NuMatrixSpectrum barNCBackground(*PreCalcbarNCBackground);
00613
00614
00616
00617
00618 if (fPredictNeutrinos) {
00619
00620 if (fHelper->DoTaus()) potentialNuTaus.Multiply(1.-pars.TransitionProb());
00621 appearedNuMus.Multiply(pars.TransitionProb());
00622
00623
00624 nuPrediction.Add(appearedNuMus);
00625 if (fHelper->DoTaus()) nuPrediction.Add(potentialNuTaus);
00626 nuPrediction.Add(wrongSignNuBars);
00627 nuPrediction.Add(nuNCBackground);
00628 } else {
00629
00630
00631 nuPrediction.Spectrum()->Scale(0);
00632 }
00633
00635
00636
00637 if (fPredictAntiNeutrinos) {
00638 if (fHelper->DoTaus()) potentialTauBars.Multiply(1.-pars.TransitionProb());
00639 appearedNuBars.Multiply(pars.TransitionProb());
00640
00641
00642 barPrediction.Add(appearedNuBars);
00643 if (fHelper->DoTaus()) barPrediction.Add(potentialTauBars);
00644 barPrediction.Add(wrongSignNuMus);
00645 barPrediction.Add(barNCBackground);
00646 } else {
00647
00648 barPrediction.Spectrum()->Scale(0);
00649 }
00650
00651 pair<NuMatrixSpectrum,NuMatrixSpectrum> predictions(nuPrediction,barPrediction);
00652 return predictions;
00653 }
00654
00655
00656 NuMatrixSpectrum* NuMMRunTransition::MakeFDPredNuMu(const NuMMParameters& pars)
00657 {
00658 if (!fQuietMode) {
00659 cout << "sn2: " << pars.Sn2() << "; dm2: " << pars.Dm2()
00660 << "; sn2bar: " << pars.Sn2Bar() << "; dm2bar: " << pars.Dm2Bar()
00661 << "; alpha: " << pars.TransitionProb()
00662 << endl;
00663 }
00664
00665 CacheExtrapolation(pars);
00666
00668
00669
00670
00671
00672 NuMatrixSpectrum *nuPrediction = new NuMatrixSpectrum(*PreCalcnuPredictionReco);
00673
00674 NuMatrixSpectrum potentialNuTaus(*PreCalcpotentialNuTausReco);
00675 NuMatrixSpectrum appearedNuMus(*PreCalcnuAppearedReco);
00676 NuMatrixSpectrum wrongSignNuBars(*PreCalcwrongSignNuBarsReco);
00677 NuMatrixSpectrum nuNCBackground(*PreCalcnuNCBackground);
00678
00679
00681
00682
00683 if (fPredictNeutrinos) {
00684
00685 if (fHelper->DoTaus()) potentialNuTaus.Multiply(1.-pars.TransitionProb());
00686 appearedNuMus.Multiply(pars.TransitionProb());
00687
00688
00689 nuPrediction->Add(appearedNuMus);
00690 if (fHelper->DoTaus()) nuPrediction->Add(potentialNuTaus);
00691 nuPrediction->Add(wrongSignNuBars);
00692 nuPrediction->Add(nuNCBackground);
00693 } else {
00694
00695
00696 nuPrediction->Spectrum()->Scale(0);
00697 }
00698
00699 return nuPrediction;
00700 }
00701
00702
00703
00704 NuMatrixSpectrum* NuMMRunTransition::MakeFDPredNuBar(const NuMMParameters& pars)
00705 {
00706 if (!fQuietMode) {
00707 cout << "sn2: " << pars.Sn2() << "; dm2: " << pars.Dm2()
00708 << "; sn2bar: " << pars.Sn2Bar() << "; dm2bar: " << pars.Dm2Bar()
00709 << "; alpha: " << pars.TransitionProb()
00710 << endl;
00711 }
00712
00713 CacheExtrapolation(pars);
00714
00716
00717
00718
00719
00720 NuMatrixSpectrum *barPrediction = new NuMatrixSpectrum(*PreCalcbarPredictionReco);
00721
00722 NuMatrixSpectrum potentialTauBars(*PreCalcpotentialTauBarsReco);
00723 NuMatrixSpectrum appearedNuBars(*PreCalcbarAppearedReco);
00724 NuMatrixSpectrum wrongSignNuMus(*PreCalcwrongSignNuMusReco);
00725 NuMatrixSpectrum barNCBackground(*PreCalcbarNCBackground);
00726
00728
00729
00730 if (fPredictAntiNeutrinos) {
00731 if (fHelper->DoTaus()) potentialTauBars.Multiply(1.-pars.TransitionProb());
00732 appearedNuBars.Multiply(pars.TransitionProb());
00733
00734
00735 barPrediction->Add(appearedNuBars);
00736 if (fHelper->DoTaus()) barPrediction->Add(potentialTauBars);
00737 barPrediction->Add(wrongSignNuMus);
00738 barPrediction->Add(barNCBackground);
00739 } else {
00740
00741 barPrediction->Spectrum()->Scale(0);
00742 }
00743
00744 return barPrediction;
00745 }
00746
00747
00748
00749
00750 const NuMatrixSpectrum NuMMRunTransition::TrueComponents(const NuMMParameters& pars, Sample_t s)
00751 {
00752 if (!fQuietMode) {
00753 cout << "sn2: " << pars.Sn2() << "; dm2: " << pars.Dm2()
00754 << "; sn2bar: " << pars.Sn2Bar() << "; dm2bar: " << pars.Dm2Bar()
00755 << "; alpha: " << pars.TransitionProb()
00756 << endl;
00757 }
00758
00759
00760
00761 if ( (s < 0 && !fPredictNeutrinos) ||
00762 (s > 0 && !fPredictAntiNeutrinos) ) {
00763 NuMatrixSpectrum blank(*PreCalcnuPrediction);
00764 blank.SetName("Blank");
00765 blank.Spectrum()->Scale(0);
00766 return blank;
00767 }
00768
00769 CacheExtrapolation(pars);
00770
00771
00772 if (s == kSignalPQ) {
00773 if (!fQuietMode) cout << "Getting kSignalPQ" << endl;
00774 NuMatrixSpectrum barPrediction(*PreCalcbarPrediction);
00775 if (!fQuietMode) cout << "Returning kSignalPQ" << endl;
00776 return barPrediction;
00777 }
00778 else if (s == kSignalNQ) {
00779 if (!fQuietMode) cout << "Getting kSignalNQ" << endl;
00780 NuMatrixSpectrum nuPrediction(*PreCalcnuPrediction);
00781 if (!fQuietMode) cout << "Returning kSignalNQ" << endl;
00782 return nuPrediction;
00783 }
00784 else if (s == kWrongSignPQ) {
00785 if (!fQuietMode) cout << "Getting kWrongSignPQ" << endl;
00786 NuMatrixSpectrum wrongSignNuMus(*PreCalcwrongSignNuMus);
00787 if (!fQuietMode) cout << "Returning kWrongSignPQ" << endl;
00788 return wrongSignNuMus;
00789 }
00790 else if (s == kWrongSignNQ) {
00791 if (!fQuietMode) cout << "Getting kWrongSignNQ" << endl;
00792 NuMatrixSpectrum wrongSignNuBars(*PreCalcwrongSignNuBars);
00793 if (!fQuietMode) cout << "Returning kWrongSignNQ" << endl;
00794 return wrongSignNuBars;
00795 }
00796 else if (s == kNCPQ) {
00797 if (!fQuietMode) cout << "Getting kNCPQ" << endl;
00798 NuMatrixSpectrum barNCBackground(*PreCalcbarNCBackground);
00799 if (!fQuietMode) cout << "Returning kNCPQ" << endl;
00800 return barNCBackground;
00801 }
00802 else if (s == kNCNQ) {
00803 if (!fQuietMode) cout << "Getting kNCNQ" << endl;
00804 NuMatrixSpectrum nuNCBackground(*PreCalcnuNCBackground);
00805 if (!fQuietMode) cout << "Returning kNCNQ" << endl;
00806 return nuNCBackground;
00807 }
00808 else if (s == kTauPQ) {
00809 if (!fQuietMode) cout << "Getting kTauPQ" << endl;
00810 NuMatrixSpectrum potentialTauBars(*PreCalcpotentialTauBars);
00811 potentialTauBars.Multiply(1.-pars.TransitionProb());
00812 if (!fQuietMode) cout << "Returning kTauPQ" << endl;
00813 return potentialTauBars;
00814 }
00815 else if (s == kTauNQ) {
00816 if (!fQuietMode) cout << "Getting kTauNQ" << endl;
00817 NuMatrixSpectrum potentialNuTaus(*PreCalcpotentialNuTaus);
00818 potentialNuTaus.Multiply(1.-pars.TransitionProb());
00819 if (!fQuietMode) cout << "Returning kTauNQ" << endl;
00820 return potentialNuTaus;
00821 }
00822 else if (s == kAppearedPQ) {
00823 if (!fQuietMode) cout << "Getting kAppearedPQ" << endl;
00824 NuMatrixSpectrum appearedNuBars(*PreCalcbarAppeared);
00825 appearedNuBars.Multiply(pars.TransitionProb());
00826 if (!fQuietMode) cout << "Returning kAppearedPQ" << endl;
00827 return appearedNuBars;
00828 }
00829 else if (s == kAppearedNQ) {
00830 if (!fQuietMode) cout << "Getting kAppearedNQ" << endl;
00831 NuMatrixSpectrum appearedNuMus(*PreCalcnuAppeared);
00832 appearedNuMus.Multiply(pars.TransitionProb());
00833 if (!fQuietMode) cout << "Returning kAppearedNQ" << endl;
00834 return appearedNuMus;
00835 }
00836 else {
00837 MSG("NuMMRunTransitions",Msg::kWarning) << "Requested unknown prediction #" << s << ", returning blank." << endl;
00838 NuMatrixSpectrum blank(*PreCalcnuPrediction);
00839 blank.SetName("Blank");
00840 blank.Spectrum()->Scale(0);
00841 return blank;
00842 }
00843 }
00844
00845
00846
00847 const Double_t NuMMRunTransition::ComparePredWithData(const NuMMParameters& pars)
00848 {
00849
00850 const pair<NuMatrixSpectrum,NuMatrixSpectrum> predictions =
00851 this->MakeFDPred(pars);
00852 Double_t like = 0;
00853
00854
00855 if (fPredictNeutrinos) {
00856 NuMatrixSpectrum* nuPrediction = MakeFDPredNuMu(pars);
00857 like += this->StatsLikelihood(nuPrediction->Spectrum(),
00858 ffdNuData->Spectrum());
00859 delete nuPrediction;
00860 }
00861 if (fPredictAntiNeutrinos) {
00862 NuMatrixSpectrum* barPrediction = MakeFDPredNuBar(pars);
00863 like += this->StatsLikelihood(barPrediction->Spectrum(),
00864 ffdBarData->Spectrum());
00865 delete barPrediction;
00866 }
00867 return like;
00868 }