00001 #include "TCanvas.h"
00002 #include "TFile.h"
00003 #include "TH1D.h"
00004
00005 #include "MessageService/MsgService.h"
00006 #include "NtupleUtils/NuHistInterpolator.h"
00007 #include "NtupleUtils/NuMatrixSpectrum.h"
00008 #include "NtupleUtils/NuMMHelperCPT.h"
00009 #include "NtupleUtils/NuMMParameters.h"
00010 #include "NtupleUtils/NuMMRunFC.h"
00011
00012 ClassImp(NuMMRunFC)
00013
00014 CVSID("$Id: NuMMRunFC.cxx,v 1.22 2009/11/02 21:32:37 hartnell Exp $");
00015
00016 using namespace Sample;
00017
00018
00019 NuMMRunFC::NuMMRunFC(NuMMHelperCPT* helper,
00020 NuMatrixSpectrum* ndNuData,
00021 NuMatrixSpectrum* ndBarData,
00022 double pot)
00023 : NuMMRunNuBar(),
00024 fPredictNeutrinos(true),
00025 fPredictAntiNeutrinos(true),
00026 fDoneWsNeutrinos(false),
00027 fDoneWsAntineutrinos(false)
00028 {
00029 TString name = "hError";
00030 name += (counter++);
00031 TH1D hBlank(name, "Something Went Wrong", 10, 0, 30);
00032
00033 fndNuData = ndNuData;
00034 fndBarData = ndBarData;
00035 fHelper = helper;
00036
00037 ffdNuData = new NuMatrixSpectrum(hBlank, pot);
00038 ffdBarData = new NuMatrixSpectrum(hBlank, pot);
00039
00040
00041
00042 PreCalcnuPrediction = PreCalcbarPrediction = 0;
00043 PreCalcpotentialNuTaus= PreCalcpotentialTauBars = 0;
00044 PreCalcnuNCBackground = PreCalcbarNCBackground = 0;
00045 PreCalcwrongSignNuMus = PreCalcwrongSignNuBars = 0;
00046
00047
00048
00049 CacheExtrapolation();
00050
00051 }
00052
00053
00054 NuMMRunFC::NuMMRunFC(NuMMHelperCPT* helper,
00055 NuMatrixSpectrum* ndNuData,
00056 NuMatrixSpectrum* ndBarData,
00057 NuMatrixSpectrum* fdNuData,
00058 NuMatrixSpectrum* fdBarData)
00059 : NuMMRunNuBar(),
00060 fPredictNeutrinos(true),
00061 fPredictAntiNeutrinos(true),
00062 fDoneWsNeutrinos(false),
00063 fDoneWsAntineutrinos(false)
00064 {
00065 fndNuData = ndNuData;
00066 fndBarData = ndBarData;
00067 ffdNuData = fdNuData;
00068 ffdBarData = fdBarData;
00069 fHelper = helper;
00070
00071
00072 PreCalcnuPrediction = PreCalcbarPrediction = 0;
00073 PreCalcpotentialNuTaus= PreCalcpotentialTauBars = 0;
00074 PreCalcnuNCBackground = PreCalcbarNCBackground = 0;
00075 PreCalcwrongSignNuMus = PreCalcwrongSignNuBars = 0;
00076
00077
00078
00079 CacheExtrapolation();
00080
00081 }
00082
00083
00084
00085
00086 NuMMRunFC::NuMMRunFC(const NuMMRunFC &old) : NuMMRunNuBar()
00087 {
00088 fndNuData = old.fndNuData;
00089 fndBarData = old.fndBarData;
00090 ffdNuData = old.ffdNuData;
00091 ffdBarData = old.ffdBarData;
00092
00093
00094 PreCalcnuPrediction = PreCalcbarPrediction = 0;
00095 PreCalcpotentialNuTaus= PreCalcpotentialTauBars = 0;
00096 PreCalcnuNCBackground = PreCalcbarNCBackground = 0;
00097 PreCalcwrongSignNuMus = PreCalcwrongSignNuBars = 0;
00098
00099
00100 if (old.PreCalcnuPrediction)
00101 PreCalcnuPrediction = new NuMatrixSpectrum(*old.PreCalcnuPrediction);
00102 if (old.PreCalcbarPrediction)
00103 PreCalcbarPrediction = new NuMatrixSpectrum(*old.PreCalcbarPrediction);
00104 if (old.PreCalcpotentialNuTaus)
00105 PreCalcpotentialNuTaus = new NuMatrixSpectrum(*old.PreCalcpotentialNuTaus);
00106 if (old.PreCalcpotentialTauBars)
00107 PreCalcpotentialTauBars = new NuMatrixSpectrum(*old.PreCalcpotentialTauBars);
00108
00109 if (old.PreCalcnuNCBackground)
00110 PreCalcnuNCBackground = new NuMatrixSpectrum(*old.PreCalcnuNCBackground);
00111 if (old.PreCalcbarNCBackground)
00112 PreCalcbarNCBackground = new NuMatrixSpectrum(*old.PreCalcbarNCBackground);
00113
00114 if (old.PreCalcwrongSignNuMus)
00115 PreCalcwrongSignNuMus = new NuMatrixSpectrum(*old.PreCalcwrongSignNuMus);
00116 if (old.PreCalcwrongSignNuBars)
00117 PreCalcwrongSignNuBars = new NuMatrixSpectrum(*old.PreCalcwrongSignNuBars);
00118
00119 fPredictNeutrinos = old.fPredictNeutrinos;
00120 fPredictAntiNeutrinos = old.fPredictAntiNeutrinos;
00121
00122
00123
00124 fDoneWsNeutrinos = fDoneWsAntineutrinos = false;
00125 }
00126
00127
00128
00129 NuMMRunFC::~NuMMRunFC()
00130 {
00131 ResetCache();
00132 }
00133
00134
00135
00136
00137 void NuMMRunFC::ResetCache()
00138 {
00139
00140 if (PreCalcnuPrediction) delete PreCalcnuPrediction;
00141 if (PreCalcbarPrediction) delete PreCalcbarPrediction;
00142
00143 if (PreCalcpotentialNuTaus) delete PreCalcpotentialNuTaus;
00144 if (PreCalcpotentialTauBars)delete PreCalcpotentialTauBars;
00145
00146 if (PreCalcnuNCBackground) delete PreCalcnuNCBackground;
00147 if (PreCalcbarNCBackground) delete PreCalcbarNCBackground;
00148
00149 if (PreCalcwrongSignNuMus) delete PreCalcwrongSignNuMus;
00150 if (PreCalcwrongSignNuBars) delete PreCalcwrongSignNuBars;
00151
00152 PreCalcnuPrediction = PreCalcbarPrediction = 0;
00153 PreCalcpotentialNuTaus = PreCalcpotentialTauBars = 0;
00154 PreCalcnuNCBackground = PreCalcbarNCBackground = 0;
00155 PreCalcwrongSignNuMus = PreCalcwrongSignNuBars = 0;
00156
00157 fCached = false;
00158 }
00159
00160
00161
00162 const std::vector<TH1D>
00163 NuMMRunFC::WriteFDPredHistos(const NuMMParameters& pars) const
00164 {
00165
00166 vector<TH1D> vHistos;
00167
00168
00169 TH1D hNDNuData(*(fndNuData->Spectrum()));
00170 hNDNuData.SetName("ndDataNQ");
00171 hNDNuData.SetTitle("ndDataNQ");
00172 vHistos.push_back(*(new TH1D(hNDNuData)));
00173 TH1D hNDBarData(*(fndBarData->Spectrum()));
00174 hNDBarData.SetName("ndDataPQ");
00175 hNDBarData.SetTitle("ndDataPQ");
00176 vHistos.push_back(*(new TH1D(hNDBarData)));
00177
00178 if (!fQuietMode) {
00179 cout << "sn2: " << pars.Sn2() << "; dm2: " << pars.Dm2()
00180 << "; sn2bar: " << pars.Sn2Bar() << "; dm2bar: " << pars.Dm2Bar()
00181 << endl;
00182 }
00183
00184
00185 NuMatrixSpectrum nuPrediction(*PreCalcnuPrediction);
00186 NuMatrixSpectrum barPrediction(*PreCalcbarPrediction);
00187
00188 NuMatrixSpectrum potentialNuTaus(*PreCalcpotentialNuTaus);
00189 NuMatrixSpectrum potentialTauBars(*PreCalcpotentialTauBars);
00190
00191 NuMatrixSpectrum nuNCBackground(*PreCalcnuNCBackground);
00192 NuMatrixSpectrum barNCBackground(*PreCalcbarNCBackground);
00193
00194 NuMatrixSpectrum wrongSignNuMus(*PreCalcwrongSignNuMus);
00195 NuMatrixSpectrum wrongSignNuBars(*PreCalcwrongSignNuBars);
00196
00197 cout << "NC Integral: " << barNCBackground.Spectrum()->Integral() << endl;
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00211
00212
00213 if (fPredictNeutrinos)
00214 {
00215
00216 if (fHelper->DoTaus()) {
00217 potentialNuTaus.InverseOscillate(pars.Dm2(),pars.Sn2());
00218
00219
00220 TH1D hFDTausNuMu(*(potentialNuTaus.Spectrum()));
00221 hFDTausNuMu.SetName("fdTausNuMu");
00222 vHistos.push_back(hFDTausNuMu);
00223
00224 potentialNuTaus.TrueToReco(fHelper->FDNuTauRecoVsTrue());
00225 }
00226
00227
00228 if (!fDoneWsAntineutrinos) wrongSignNuBars.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00229
00230
00231 if (!fDoneWsAntineutrinos) wrongSignNuBars.TrueToReco(fHelper->FDWrongSignBarRecoVsTrue());
00232
00233
00234 TH1D hFDWrongSignNQ(*(wrongSignNuBars.Spectrum()));
00235 hFDWrongSignNQ.SetName("fdWrongSignNQ");
00236 vHistos.push_back(hFDWrongSignNQ);
00237
00238
00239 nuPrediction.Oscillate(pars.Dm2(),pars.Sn2());
00240
00241
00242
00243
00244 TH1D hFDNoBackTrueNQ(*(nuPrediction.Spectrum()));
00245 hFDNoBackTrueNQ.SetName("fdBasePredictionNuMus");
00246 vHistos.push_back(hFDNoBackTrueNQ);
00247
00248
00249 nuPrediction.TrueToReco(fHelper->FDNuRecoVsTrue());
00250
00251
00252 TH1D hFDNoBackNQ(*(nuPrediction.Spectrum()));
00253 hFDNoBackNQ.SetName("fdBasePredictionNQ");
00254 vHistos.push_back(hFDNoBackNQ);
00255
00256
00257 nuPrediction.Add(wrongSignNuBars);
00258 nuPrediction.Add(nuNCBackground);
00259 if (fHelper->DoTaus()) nuPrediction.Add(potentialNuTaus);
00260
00261
00262 TH1D hFDPredictionNQ(*(nuPrediction.Spectrum()));
00263 hFDPredictionNQ.SetName("fdPredictionNQ");
00264 vHistos.push_back(hFDPredictionNQ);
00265
00266 TH1D hFDNCNQ(*(nuNCBackground.Spectrum()));
00267 hFDNCNQ.SetName("fdNCNQ");
00268 vHistos.push_back(hFDNCNQ);
00269
00270 if (fHelper->DoTaus()) {
00271 TH1D hFDTausNQ(*(potentialNuTaus.Spectrum()));
00272 hFDTausNQ.SetName("fdTausNQ");
00273 vHistos.push_back(hFDTausNQ);
00274 }
00275
00276 TH1D hFDDataNQ(*(ffdNuData->Spectrum()));
00277 hFDDataNQ.SetName("fdDataNQ");
00278 vHistos.push_back(hFDDataNQ);
00279
00280 } else {
00281
00282 nuPrediction.Spectrum()->Scale(0);
00283 }
00284
00286
00287
00288 if (fPredictAntiNeutrinos)
00289 {
00290 if (fHelper->DoTaus()) {
00291
00292 potentialTauBars.InverseOscillate(pars.Dm2Bar(),pars.Sn2Bar());
00293
00294 TH1D hFDTausNuBar(*(potentialTauBars.Spectrum()));
00295 hFDTausNuBar.SetName("fdTausNuBar");
00296 vHistos.push_back(hFDTausNuBar);
00297
00298 potentialTauBars.TrueToReco(fHelper->FDTauBarRecoVsTrue());
00299 }
00300
00301
00302 if (!fDoneWsNeutrinos) wrongSignNuMus.Oscillate(pars.Dm2(),pars.Sn2());
00303
00304
00305 if (!fDoneWsNeutrinos) wrongSignNuMus.TrueToReco(fHelper->FDWrongSignNuRecoVsTrue());
00306
00307
00308 TH1D hFDWrongSignPQ(*(wrongSignNuMus.Spectrum()));
00309 hFDWrongSignPQ.SetName("fdWrongSignPQ");
00310 vHistos.push_back(hFDWrongSignPQ);
00311
00312
00313 barPrediction.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00314
00315
00316 TH1D hFDNoBackTruePQ(*(barPrediction.Spectrum()));
00317 hFDNoBackTruePQ.SetName("fdBasePredictionNuBars");
00318 vHistos.push_back(hFDNoBackTruePQ);
00319
00320
00321 barPrediction.TrueToReco(fHelper->FDBarRecoVsTrue());
00322
00323
00324 TH1D hFDNoBackPQ(*(barPrediction.Spectrum()));
00325 hFDNoBackPQ.SetName("fdBasePredictionPQ");
00326 vHistos.push_back(hFDNoBackPQ);
00327
00328
00329 barPrediction.Add(wrongSignNuMus);
00330 barPrediction.Add(barNCBackground);
00331 if (fHelper->DoTaus()) barPrediction.Add(potentialTauBars);
00332
00333 TH1D hFDPredictionPQ(*(barPrediction.Spectrum()));
00334 hFDPredictionPQ.SetName("fdPredictionPQ");
00335 vHistos.push_back(hFDPredictionPQ);
00336
00337 TH1D hFDNCPQ(*(barNCBackground.Spectrum()));
00338 hFDNCPQ.SetName("fdNCPQ");
00339 vHistos.push_back(hFDNCPQ);
00340
00341 if (fHelper->DoTaus()) {
00342 TH1D hFDTausPQ(*(potentialTauBars.Spectrum()));
00343 hFDTausPQ.SetName("fdTausPQ");
00344 vHistos.push_back(hFDTausPQ);
00345 }
00346
00347 TH1D hFDDataPQ(*(ffdBarData->Spectrum()));
00348 hFDDataPQ.SetName("fdDataPQ");
00349 vHistos.push_back(hFDDataPQ);
00350
00351 } else {
00352
00353 barPrediction.Spectrum()->Scale(0);
00354 }
00355
00356 return vHistos;
00357 }
00358
00359
00360
00361
00362 void NuMMRunFC::CacheExtrapolation( void )
00363 {
00364
00365 if (fCached) return;
00366
00367 ResetCache();
00368
00369
00370
00371
00372
00373
00374
00375 PreCalcnuPrediction = new NuMatrixSpectrum(*fndNuData);
00376 PreCalcbarPrediction = new NuMatrixSpectrum(*fndBarData);
00377
00378
00379
00380 NuMatrixSpectrum &nuPrediction = *PreCalcnuPrediction;
00381 NuMatrixSpectrum &barPrediction = *PreCalcbarPrediction;
00382
00383
00384
00385 nuPrediction.Multiply(fHelper->NDNuPurity());
00386 nuPrediction.RecoToTrue(fHelper->NDNuRecoVsTrue());
00387 nuPrediction.Divide(fHelper->NDNuEfficiency());
00388 nuPrediction.Divide(fHelper->NuXSecGraph());
00389 nuPrediction.Divide(fndNuData->PoT());
00390 nuPrediction.Divide(fNDFidMass);
00391 nuPrediction.ExtrapolateNDToFD(fHelper->NuBeamMatrix());
00392 nuPrediction.Multiply(fFDFidMass);
00393 nuPrediction.Multiply(ffdNuData->PoT());
00394
00395 nuPrediction.ResetPoT(ffdNuData->PoT());
00396
00397
00398 barPrediction.Multiply(fHelper->NDBarPurity());
00399 barPrediction.RecoToTrue(fHelper->NDBarRecoVsTrue());
00400 barPrediction.Divide(fHelper->NDBarEfficiency());
00401 barPrediction.Divide(fHelper->BarXSecGraph());
00402 barPrediction.Divide(fndBarData->PoT());
00403 barPrediction.Divide(fNDFidMass);
00404 barPrediction.ExtrapolateNDToFD(fHelper->BarBeamMatrix());
00405 barPrediction.Multiply(fFDFidMass);
00406 barPrediction.Multiply(ffdBarData->PoT());
00407
00408 barPrediction.ResetPoT(ffdBarData->PoT());
00409
00410
00411
00412 PreCalcpotentialNuTaus = new NuMatrixSpectrum(nuPrediction);
00413 PreCalcpotentialTauBars = new NuMatrixSpectrum(barPrediction);
00414 NuMatrixSpectrum &potentialNuTaus = *PreCalcpotentialNuTaus;
00415 NuMatrixSpectrum &potentialTauBars = *PreCalcpotentialTauBars;
00416
00417 if (fHelper->DoTaus()) {
00418
00419 potentialNuTaus.Multiply(fHelper->XSecGraphNuTaus());
00420 potentialNuTaus.Multiply(fHelper->FDNuTauEfficiency());
00421
00422 potentialTauBars.Multiply(fHelper->XSecGraphTauBars());
00423 potentialTauBars.Multiply(fHelper->FDTauBarEfficiency());
00424 }
00425 else {
00426 PreCalcpotentialNuTaus->Multiply(0.0);
00427 PreCalcpotentialTauBars->Multiply(0.0);
00428 }
00429
00430
00431 nuPrediction.Multiply(fHelper->NuXSecGraph());
00432 barPrediction.Multiply(fHelper->BarXSecGraph());
00433
00434
00435 PreCalcnuNCBackground = new NuMatrixSpectrum(*PreCalcnuPrediction);;
00436 PreCalcbarNCBackground = new NuMatrixSpectrum(*PreCalcbarPrediction);
00437 NuMatrixSpectrum &nuNCBackground = *PreCalcnuNCBackground;
00438 NuMatrixSpectrum &barNCBackground = *PreCalcbarNCBackground;
00439
00440
00441 nuNCBackground.Multiply(fHelper->FDNuEfficiency());
00442 nuNCBackground.TrueToReco(fHelper->FDNuRecoVsTrue());
00443 nuNCBackground.Divide(fHelper->FDNuPurity());
00444 nuNCBackground.Multiply(fHelper->FDNuNCContamination());
00445
00446
00447 barNCBackground.Multiply(fHelper->FDBarEfficiency());
00448 barNCBackground.TrueToReco(fHelper->FDBarRecoVsTrue());
00449 barNCBackground.Divide(fHelper->FDBarPurity());
00450 barNCBackground.Multiply(fHelper->FDBarNCContamination());
00451
00452
00453 PreCalcwrongSignNuMus = new NuMatrixSpectrum(*PreCalcnuPrediction);
00454 PreCalcwrongSignNuBars = new NuMatrixSpectrum(*PreCalcbarPrediction);
00455 NuMatrixSpectrum &wrongSignNuMus = *PreCalcwrongSignNuMus;
00456 NuMatrixSpectrum &wrongSignNuBars = *PreCalcwrongSignNuBars;
00457
00458
00459 wrongSignNuMus.Multiply(fHelper->FDWrongSignNuEfficiency());
00460
00461
00462 wrongSignNuBars.Multiply(fHelper->FDWrongSignBarEfficiency());
00463
00464
00465 barPrediction.Multiply(fHelper->FDBarEfficiency());
00466 nuPrediction.Multiply(fHelper->FDNuEfficiency());
00467
00468
00469 nuPrediction.SetName("NuMus");
00470 barPrediction.SetName("NuMuBars");
00471
00472 if (fHelper->DoTaus()) {
00473 potentialNuTaus.SetName("NuTaus");
00474 potentialTauBars.SetName("NuTauBars");
00475 }
00476
00477 wrongSignNuMus.SetName("WrongSign_NuMus");
00478 wrongSignNuBars.SetName("WrongSign_NuMuBars");
00479
00480 nuNCBackground.SetName("NC_NuMus");
00481 barNCBackground.SetName("NC_NuMuBars");
00482
00483 fCached = true;
00484
00485
00486
00487
00488
00489 fDoneWsNeutrinos = fDoneWsAntineutrinos = false;
00490 }
00491
00492
00493
00494 void NuMMRunFC::PreCalcWrongSign(const NuMMParameters& pars)
00495 {
00496
00497
00498
00499
00500 if(!fDoneWsNeutrinos) {
00501 if (!fPredictNeutrinos)
00502 {
00503 if (!fQuietMode) cout << "Neutrino prediction off: Precalculating wrong sign oscillation." << endl;
00504 PreCalcwrongSignNuMus->Oscillate(pars.Dm2(),pars.Sn2());
00505 PreCalcwrongSignNuMus->TrueToReco(fHelper->FDWrongSignNuRecoVsTrue());
00506 fDoneWsNeutrinos = true;
00507 }
00508 }
00509 if(!fPredictAntiNeutrinos) {
00510 if (!fDoneWsAntineutrinos)
00511 {
00512 if (!fQuietMode) cout << "Antineutrino prediction off: Precalculating wrong sign oscillation." << endl;
00513 PreCalcwrongSignNuBars->Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00514 PreCalcwrongSignNuBars->TrueToReco(fHelper->FDWrongSignBarRecoVsTrue());
00515 fDoneWsAntineutrinos = true;
00516 }
00517 }
00518 }
00519
00520
00521
00522 const pair<NuMatrixSpectrum,NuMatrixSpectrum>
00523 NuMMRunFC::MakeFDPred(const NuMMParameters& pars)
00524 {
00525
00526 CacheExtrapolation();
00527
00528 PreCalcWrongSign(pars);
00529
00530
00531 if (!fQuietMode) {
00532
00533 cout << "sn2: " << pars.Sn2() << "; dm2: " << pars.Dm2()
00534 << "; sn2bar: " << pars.Sn2Bar() << "; dm2bar: " << pars.Dm2Bar()
00535 << endl;
00536 }
00537
00539
00540
00541
00542
00543 NuMatrixSpectrum nuPrediction(*PreCalcnuPrediction);
00544 NuMatrixSpectrum barPrediction(*PreCalcbarPrediction);
00545
00546 NuMatrixSpectrum potentialNuTaus(*PreCalcpotentialNuTaus);
00547 NuMatrixSpectrum potentialTauBars(*PreCalcpotentialTauBars);
00548
00549 NuMatrixSpectrum nuNCBackground(*PreCalcnuNCBackground);
00550 NuMatrixSpectrum barNCBackground(*PreCalcbarNCBackground);
00551
00552 NuMatrixSpectrum wrongSignNuMus(*PreCalcwrongSignNuMus);
00553 NuMatrixSpectrum wrongSignNuBars(*PreCalcwrongSignNuBars);
00554
00556
00557
00558 if (fPredictNeutrinos)
00559 {
00560 if (fHelper->DoTaus()) {
00561
00562 potentialNuTaus.InverseOscillate(pars.Dm2(),pars.Sn2());
00563 potentialNuTaus.TrueToReco(fHelper->FDNuTauRecoVsTrue());
00564 }
00565
00566
00567 if (!fDoneWsAntineutrinos) {
00568
00569 wrongSignNuBars.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00570 wrongSignNuBars.TrueToReco(fHelper->FDWrongSignBarRecoVsTrue());
00571 }
00572
00573
00574 nuPrediction.Oscillate(pars.Dm2(),pars.Sn2());
00575
00576
00577 nuPrediction.TrueToReco(fHelper->FDNuRecoVsTrue());
00578
00579
00580 nuPrediction.Add(wrongSignNuBars);
00581 nuPrediction.Add(nuNCBackground);
00582 if (fHelper->DoTaus()) nuPrediction.Add(potentialNuTaus);
00583 } else {
00584
00585
00586 nuPrediction.Spectrum()->Scale(0);
00587 }
00588
00590
00591
00592 if (fPredictAntiNeutrinos)
00593 {
00594 if (fHelper->DoTaus()) {
00595
00596 potentialTauBars.InverseOscillate(pars.Dm2Bar(),pars.Sn2Bar());
00597 potentialTauBars.TrueToReco(fHelper->FDTauBarRecoVsTrue());
00598 }
00599
00600
00601 if (!fDoneWsNeutrinos) {
00602
00603
00604 wrongSignNuMus.Oscillate(pars.Dm2(),pars.Sn2());
00605 wrongSignNuMus.TrueToReco(fHelper->FDWrongSignNuRecoVsTrue());
00606 }
00607
00608 barPrediction.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00609
00610
00611 barPrediction.TrueToReco(fHelper->FDBarRecoVsTrue());
00612
00613
00614 barPrediction.Add(wrongSignNuMus);
00615 barPrediction.Add(barNCBackground);
00616 if (fHelper->DoTaus()) barPrediction.Add(potentialTauBars);
00617 } else {
00618
00619 barPrediction.Spectrum()->Scale(0);
00620 }
00621
00622
00623 pair<NuMatrixSpectrum,NuMatrixSpectrum>
00624 predictions(nuPrediction,barPrediction);
00625 return predictions;
00626 }
00627
00628
00629
00630
00631
00632 const NuMatrixSpectrum NuMMRunFC::TrueComponents(const NuMMParameters& pars, Sample_t s)
00633 {
00634
00635 CacheExtrapolation();
00636
00637
00638 if (!fQuietMode) {
00639 cout << "sn2: " << pars.Sn2() << "; dm2: " << pars.Dm2()
00640 << "; sn2bar: " << pars.Sn2Bar() << "; dm2bar: " << pars.Dm2Bar()
00641 << endl;
00642 }
00643
00644 if (fDoneWsNeutrinos || fDoneWsAntineutrinos) {
00645 MSG("NuMMRunFC",Msg::kError) << "Already True-To-Recoed the wrong signs. Cannot precalculate the wrong-signs for event-by-event. Bailing." << endl;
00646 MSG("NuMMRunFC",Msg::kFatal) << "Already True-To-Recoed the wrong signs. Cannot precalculate the wrong-signs for event-by-event. Bailing." << endl;
00647 }
00648
00649
00650 if (s == kAppearedPQ || s == kAppearedNQ) {
00651 NuMatrixSpectrum blank(*PreCalcnuPrediction);
00652 blank.SetName("Blank");
00653 blank.Spectrum()->Scale(0);
00654 return blank;
00655 }
00656
00657
00658
00659 if ( (s < 0 && !fPredictNeutrinos) ||
00660 (s > 0 && !fPredictAntiNeutrinos) ) {
00661 NuMatrixSpectrum blank(*PreCalcnuPrediction);
00662 blank.SetName("Blank");
00663 blank.Spectrum()->Scale(0);
00664 return blank;
00665 }
00666
00667 if (s == kSignalPQ) {
00668 NuMatrixSpectrum barPrediction(*PreCalcbarPrediction);
00669 barPrediction.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00670 return barPrediction;
00671 }
00672 else if (s == kSignalNQ) {
00673 NuMatrixSpectrum nuPrediction(*PreCalcnuPrediction);
00674 nuPrediction.Oscillate(pars.Dm2(),pars.Sn2());
00675 return nuPrediction;
00676 }
00677 else if (s == kWrongSignPQ) {
00678 NuMatrixSpectrum wrongSignNuMus(*PreCalcwrongSignNuMus);
00679 wrongSignNuMus.Oscillate(pars.Dm2(),pars.Sn2());
00680 return wrongSignNuMus;
00681 }
00682 else if (s == kWrongSignNQ) {
00683 NuMatrixSpectrum wrongSignNuBars(*PreCalcwrongSignNuBars);
00684 wrongSignNuBars.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00685 return wrongSignNuBars;
00686 }
00687 else if (s == kNCPQ) {
00688 NuMatrixSpectrum barNCBackground(*PreCalcbarNCBackground);
00689 return barNCBackground;
00690 }
00691 else if (s == kNCNQ) {
00692 NuMatrixSpectrum nuNCBackground(*PreCalcnuNCBackground);
00693 return nuNCBackground;
00694 }
00695 else if (s == kTauPQ) {
00696 NuMatrixSpectrum potentialTauBars(*PreCalcpotentialTauBars);
00697 potentialTauBars.InverseOscillate(pars.Dm2Bar(),pars.Sn2Bar());
00698 return potentialTauBars;
00699 }
00700 else if (s == kTauNQ) {
00701 NuMatrixSpectrum potentialNuTaus(*PreCalcpotentialNuTaus);
00702 potentialNuTaus.InverseOscillate(pars.Dm2(),pars.Sn2());
00703 return potentialNuTaus;
00704 }
00705 else {
00706 MSG("NuMMRunTransitions",Msg::kWarning) << "Requested unknown prediction #" << s << ", returning blank." << endl;
00707 NuMatrixSpectrum blank(*PreCalcnuPrediction);
00708 blank.SetName("Blank");
00709 blank.Spectrum()->Scale(0);
00710 return blank;
00711 }
00712 }
00713
00714
00715
00716 const Double_t NuMMRunFC
00717 ::ComparePredWithData(const NuMMParameters& pars)
00718 {
00719
00720 const pair<NuMatrixSpectrum,NuMatrixSpectrum> predictions =
00721 this->MakeFDPred(pars);
00722 Double_t like = 0;
00723
00724
00725 if (fPredictNeutrinos)
00726 {
00727 like += this->StatsLikelihood(predictions.first.Spectrum(),
00728 ffdNuData->Spectrum());
00729 }
00730 if (fPredictAntiNeutrinos) {
00731 like += this->StatsLikelihood(predictions.second.Spectrum(),
00732 ffdBarData->Spectrum());
00733 }
00734 return like;
00735 }