#include <NuMMRunFC.h>
Inheritance diagram for NuMMRunFC:

Public Member Functions | |
| NuMMRunFC (NuMMHelperCPT *helper, NuMatrixSpectrum *ndNuData, NuMatrixSpectrum *ndBarData, double pot) | |
| NuMMRunFC (NuMMHelperCPT *helper, NuMatrixSpectrum *ndNuData, NuMatrixSpectrum *ndBarData, NuMatrixSpectrum *fdNuData, NuMatrixSpectrum *fdBarData) | |
| NuMMRunFC (const NuMMRunFC &old) | |
| ~NuMMRunFC () | |
| virtual const Double_t | ComparePredWithData (const NuMMParameters &pars) |
| virtual const std::pair< NuMatrixSpectrum, NuMatrixSpectrum > | MakeFDPred (const NuMMParameters &pars) |
| Return a pair (NQ,PQ) of NuMatrixSpectra of the far detector prediction with oscillation parameters described in pars. Pure virtual. | |
| virtual const std::vector< TH1D > | WriteFDPredHistos (const NuMMParameters &pars) const |
| virtual const NuMatrixSpectrum | TrueComponents (const NuMMParameters &pars, Sample_t s) |
| void | PredictNus (Bool_t predict) |
| Will the neutrino prediction be calculated? | |
| void | PredictNuBars (Bool_t predict) |
| Will the antineutrino prediction be calculated? | |
Private Member Functions | |
| void | CacheExtrapolation (void) |
| void | ResetCache () |
| void | PreCalcWrongSign (const NuMMParameters &pars) |
Private Attributes | |
| NuMatrixSpectrum * | PreCalcnuPrediction |
| NuMatrixSpectrum * | PreCalcbarPrediction |
| NuMatrixSpectrum * | PreCalcpotentialNuTaus |
| NuMatrixSpectrum * | PreCalcpotentialTauBars |
| NuMatrixSpectrum * | PreCalcnuNCBackground |
| NuMatrixSpectrum * | PreCalcbarNCBackground |
| NuMatrixSpectrum * | PreCalcwrongSignNuMus |
| NuMatrixSpectrum * | PreCalcwrongSignNuBars |
| Bool_t | fPredictNeutrinos |
| Controls neutrino component of prediction. | |
| Bool_t | fPredictAntiNeutrinos |
| Controls antineutrino component of prediction. | |
| Bool_t | fDoneWsNeutrinos |
| Flags to remember if the wrong sign has been precalculated. | |
| Bool_t | fDoneWsAntineutrinos |
| Flags to remember if the wrong sign has been precalculated. | |
|
||||||||||||||||||||
|
Definition at line 19 of file NuMMRunFC.cxx. 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 // Blank out all the Precache variables 00042 PreCalcnuPrediction = PreCalcbarPrediction = 0; 00043 PreCalcpotentialNuTaus= PreCalcpotentialTauBars = 0; 00044 PreCalcnuNCBackground = PreCalcbarNCBackground = 0; 00045 PreCalcwrongSignNuMus = PreCalcwrongSignNuBars = 0; 00046 00047 // We should now be completely capable of calculating the 00048 // halfway point of the prediction. Do so now. 00049 CacheExtrapolation(); 00050 00051 }
|
|
||||||||||||||||||||||||
|
|
|
Definition at line 129 of file NuMMRunFC.cxx. References ResetCache(). 00130 {
00131 ResetCache();
00132 }
|
|
|
Pre-calculate much of the extrapolation. Most of the matrix method extrapolation does not depend on the oscillation parameters. This includes lots of complicated matrix multiplications and histogram divisions. This function seperates out this code, and is called from the constructor (as everything it needs should exist with a validly called constructor) Definition at line 362 of file NuMMRunFC.cxx. References NuMMHelperCPT::BarBeamMatrix(), NuMMHelperCPT::BarXSecGraph(), NuMatrixSpectrum::Divide(), NuMMHelperCPT::DoTaus(), NuMatrixSpectrum::ExtrapolateNDToFD(), NuMMHelperCPT::FDBarEfficiency(), NuMMHelperCPT::FDBarNCContamination(), NuMMHelperCPT::FDBarPurity(), NuMMHelperCPT::FDBarRecoVsTrue(), NuMMHelperCPT::FDNuEfficiency(), NuMMHelperCPT::FDNuNCContamination(), NuMMHelperCPT::FDNuPurity(), NuMMHelperCPT::FDNuRecoVsTrue(), NuMMHelperCPT::FDNuTauEfficiency(), fDoneWsAntineutrinos, fDoneWsNeutrinos, NuMMHelperCPT::FDTauBarEfficiency(), NuMMHelperCPT::FDWrongSignBarEfficiency(), NuMMHelperCPT::FDWrongSignNuEfficiency(), NuMatrixSpectrum::Multiply(), NuMMHelperCPT::NDBarEfficiency(), NuMMHelperCPT::NDBarPurity(), NuMMHelperCPT::NDBarRecoVsTrue(), NuMMHelperCPT::NDNuEfficiency(), NuMMHelperCPT::NDNuPurity(), NuMMHelperCPT::NDNuRecoVsTrue(), NuMMHelperCPT::NuBeamMatrix(), NuMMHelperCPT::NuXSecGraph(), NuMatrixSpectrum::PoT(), PreCalcbarNCBackground, PreCalcbarPrediction, PreCalcnuNCBackground, PreCalcnuPrediction, PreCalcpotentialNuTaus, PreCalcpotentialTauBars, PreCalcwrongSignNuBars, PreCalcwrongSignNuMus, NuMatrixSpectrum::RecoToTrue(), ResetCache(), NuMatrixSpectrum::ResetPoT(), NuMatrixSpectrum::SetName(), NuMatrixSpectrum::TrueToReco(), NuMMHelperCPT::XSecGraphNuTaus(), and NuMMHelperCPT::XSecGraphTauBars(). Referenced by MakeFDPred(), NuMMRunFC(), PredictNuBars(), PredictNus(), and TrueComponents(). 00363 {
00364 // Only cache once.
00365 if (fCached) return;
00366
00367 ResetCache();
00368
00369 // Disable this output for now - this process should be fast anyway!
00370 // if (!fQuietMode)
00371 // cout << "Pre-calculating static extrapolation variables..." << endl;
00372
00373 // Caching variables, to reduce the workload of each step of the fitter
00374 // Initialise these the way they would be before
00375 PreCalcnuPrediction = new NuMatrixSpectrum(*fndNuData);
00376 PreCalcbarPrediction = new NuMatrixSpectrum(*fndBarData);
00377
00378 // Be lazy and just alias the pointers to references so can keep
00379 // the code the same
00380 NuMatrixSpectrum &nuPrediction = *PreCalcnuPrediction;
00381 NuMatrixSpectrum &barPrediction = *PreCalcbarPrediction;
00382
00383 // Now we have prepared the extrapolation variables, calculate them
00384 // Get the neutrinos to the FD
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 // Reset the spectrum to the new PoT
00395 nuPrediction.ResetPoT(ffdNuData->PoT());
00396
00397 //Get the antineutrinos to the FD
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 // Reset the spectrum to the new PoT
00408 barPrediction.ResetPoT(ffdBarData->PoT());
00409
00410 // Create and link to the Tau components, before we include the
00411 // cross section in the predictions (tau Xsec is different)
00412 PreCalcpotentialNuTaus = new NuMatrixSpectrum(nuPrediction);
00413 PreCalcpotentialTauBars = new NuMatrixSpectrum(barPrediction);
00414 NuMatrixSpectrum &potentialNuTaus = *PreCalcpotentialNuTaus;
00415 NuMatrixSpectrum &potentialTauBars = *PreCalcpotentialTauBars;
00416
00417 if (fHelper->DoTaus()) {
00418 //Get the taus (ignoring any wrong-sign taubars)
00419 potentialNuTaus.Multiply(fHelper->XSecGraphNuTaus());
00420 potentialNuTaus.Multiply(fHelper->FDNuTauEfficiency());
00421 //Get the taubars (ignoring any wrong-sign taus)
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 //Cross sections
00431 nuPrediction.Multiply(fHelper->NuXSecGraph());
00432 barPrediction.Multiply(fHelper->BarXSecGraph());
00433
00434 // Now build the NC Spectrum, after the cross section calculation!
00435 PreCalcnuNCBackground = new NuMatrixSpectrum(*PreCalcnuPrediction);;
00436 PreCalcbarNCBackground = new NuMatrixSpectrum(*PreCalcbarPrediction);
00437 NuMatrixSpectrum &nuNCBackground = *PreCalcnuNCBackground;
00438 NuMatrixSpectrum &barNCBackground = *PreCalcbarNCBackground;
00439
00440 //Get the neutrino NC background
00441 nuNCBackground.Multiply(fHelper->FDNuEfficiency());
00442 nuNCBackground.TrueToReco(fHelper->FDNuRecoVsTrue());
00443 nuNCBackground.Divide(fHelper->FDNuPurity());
00444 nuNCBackground.Multiply(fHelper->FDNuNCContamination());
00445
00446 //Get the antineutrino NC background
00447 barNCBackground.Multiply(fHelper->FDBarEfficiency());
00448 barNCBackground.TrueToReco(fHelper->FDBarRecoVsTrue());
00449 barNCBackground.Divide(fHelper->FDBarPurity());
00450 barNCBackground.Multiply(fHelper->FDBarNCContamination());
00451
00452 // Now build the wrong sign spectrum
00453 PreCalcwrongSignNuMus = new NuMatrixSpectrum(*PreCalcnuPrediction);
00454 PreCalcwrongSignNuBars = new NuMatrixSpectrum(*PreCalcbarPrediction);
00455 NuMatrixSpectrum &wrongSignNuMus = *PreCalcwrongSignNuMus;
00456 NuMatrixSpectrum &wrongSignNuBars = *PreCalcwrongSignNuBars;
00457
00458 // Do the Neutrino background for the antineutrino spectrum
00459 wrongSignNuMus.Multiply(fHelper->FDWrongSignNuEfficiency());
00460
00461 // Do the Antineutrino background for the neutrino spectrum
00462 wrongSignNuBars.Multiply(fHelper->FDWrongSignBarEfficiency());
00463
00464 // Apply the efficiency to the predictions
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 // If we have precalculated the wrong sign oscillations,
00486 // then we need to recalculate them next time we are given
00487 // the oscilaltion parameters. Reset the flags used to
00488 // control this
00489 fDoneWsNeutrinos = fDoneWsAntineutrinos = false;
00490 }
|
|
|
Implements NuMMRun. Definition at line 717 of file NuMMRunFC.cxx. 00718 {
00719 // Generate a prediction
00720 const pair<NuMatrixSpectrum,NuMatrixSpectrum> predictions =
00721 this->MakeFDPred(pars);
00722 Double_t like = 0;
00723 // Now, only count a likelihood for components we want - this is just
00724 // a constant offset, but should help speed things up a little.
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 }
|
|
|
Return a pair (NQ,PQ) of NuMatrixSpectra of the far detector prediction with oscillation parameters described in pars. Pure virtual.
Implements NuMMRunNuBar. Definition at line 523 of file NuMMRunFC.cxx. References NuMatrixSpectrum::Add(), CacheExtrapolation(), NuMMParameters::Dm2(), NuMMParameters::Dm2Bar(), NuMMHelperCPT::DoTaus(), NuMMHelperCPT::FDBarRecoVsTrue(), NuMMHelperCPT::FDNuRecoVsTrue(), NuMMHelperCPT::FDNuTauRecoVsTrue(), NuMMHelperCPT::FDTauBarRecoVsTrue(), NuMMHelperCPT::FDWrongSignBarRecoVsTrue(), NuMMHelperCPT::FDWrongSignNuRecoVsTrue(), NuMatrixSpectrum::InverseOscillate(), NuMatrixSpectrum::Oscillate(), PreCalcbarNCBackground, PreCalcbarPrediction, PreCalcnuNCBackground, PreCalcnuPrediction, PreCalcpotentialNuTaus, PreCalcpotentialTauBars, PreCalcWrongSign(), PreCalcwrongSignNuBars, PreCalcwrongSignNuMus, NuMMParameters::Sn2(), NuMMParameters::Sn2Bar(), NuMatrixSpectrum::Spectrum(), and NuMatrixSpectrum::TrueToReco(). Referenced by NuFCGridPoint::PredictSpectrum(). 00524 {
00525 // Precache extrap, but only if needed
00526 CacheExtrapolation();
00527 // Do the wrong sign precalcuation, if it hasn't been done
00528 PreCalcWrongSign(pars);
00529
00530 // Output the oscillation settings!
00531 if (!fQuietMode) {
00532 //pars.PrintStatus();
00533 cout << "sn2: " << pars.Sn2() << "; dm2: " << pars.Dm2()
00534 << "; sn2bar: " << pars.Sn2Bar() << "; dm2bar: " << pars.Dm2Bar()
00535 << endl;
00536 }
00537
00539 // For all neutrinos
00540
00541 // Make copies of the prepared extrapolation variables, so that
00542 // we can alter them locally with the oscillation parameters
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 // Processes for neutrinos
00557
00558 if (fPredictNeutrinos)
00559 {
00560 if (fHelper->DoTaus()) {
00561 // Oscillate the taus
00562 potentialNuTaus.InverseOscillate(pars.Dm2(),pars.Sn2());
00563 potentialNuTaus.TrueToReco(fHelper->FDNuTauRecoVsTrue());
00564 }
00565
00566 // If we have pre-oscillated the wrong sign, do not do so again
00567 if (!fDoneWsAntineutrinos) {
00568 // Antineutrinos in the neutrino spectrum
00569 wrongSignNuBars.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00570 wrongSignNuBars.TrueToReco(fHelper->FDWrongSignBarRecoVsTrue());
00571 }
00572
00573 // Oscillate the Neutrino spectrum!
00574 nuPrediction.Oscillate(pars.Dm2(),pars.Sn2());
00575
00576 // True to Reco
00577 nuPrediction.TrueToReco(fHelper->FDNuRecoVsTrue());
00578
00579 //Add in backgrounds
00580 nuPrediction.Add(wrongSignNuBars);
00581 nuPrediction.Add(nuNCBackground);
00582 if (fHelper->DoTaus()) nuPrediction.Add(potentialNuTaus);
00583 } else {
00584 // Scale the histogram to zero, so as not to confuse people
00585 // if they look at the spectrum with neutrinos turned off
00586 nuPrediction.Spectrum()->Scale(0);
00587 }
00588
00590 // Processes for Antineutrinos
00591
00592 if (fPredictAntiNeutrinos)
00593 {
00594 if (fHelper->DoTaus()) {
00595 // Oscillate the taubars
00596 potentialTauBars.InverseOscillate(pars.Dm2Bar(),pars.Sn2Bar());
00597 potentialTauBars.TrueToReco(fHelper->FDTauBarRecoVsTrue());
00598 }
00599
00600 // Only oscillate the wrong sign if it hasn't been done already
00601 if (!fDoneWsNeutrinos) {
00602 // Oscillate the wrong sign component
00603 // Neutrinos for the antineutrino spectrum
00604 wrongSignNuMus.Oscillate(pars.Dm2(),pars.Sn2());
00605 wrongSignNuMus.TrueToReco(fHelper->FDWrongSignNuRecoVsTrue());
00606 }
00607 // Oscillate the antineutrino spectrum!
00608 barPrediction.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00609
00610 // True to reco
00611 barPrediction.TrueToReco(fHelper->FDBarRecoVsTrue());
00612
00613 // Add in backgrounds
00614 barPrediction.Add(wrongSignNuMus);
00615 barPrediction.Add(barNCBackground);
00616 if (fHelper->DoTaus()) barPrediction.Add(potentialTauBars);
00617 } else {
00618 // Scale the histogram to zero, so as not to confuse people
00619 barPrediction.Spectrum()->Scale(0);
00620 }
00621
00622 // Return the two predictions, as a pair
00623 pair<NuMatrixSpectrum,NuMatrixSpectrum>
00624 predictions(nuPrediction,barPrediction);
00625 return predictions;
00626 }
|
|
|
Pre-calculate the wrong sign oscillation. This is a valid action in cases where, for instance, the neutrino prediction has been turned off. It is assumed that if you are not predicting neutrinos, then the neutrino mixing parameters remain constant throughout the fit. Definition at line 494 of file NuMMRunFC.cxx. References NuMMParameters::Dm2(), NuMMParameters::Dm2Bar(), fDoneWsAntineutrinos, fDoneWsNeutrinos, NuMMHelperCPT::FDWrongSignBarRecoVsTrue(), NuMMHelperCPT::FDWrongSignNuRecoVsTrue(), NuMatrixSpectrum::Oscillate(), PreCalcwrongSignNuBars, PreCalcwrongSignNuMus, NuMMParameters::Sn2(), NuMMParameters::Sn2Bar(), and NuMatrixSpectrum::TrueToReco(). Referenced by MakeFDPred(). 00495 {
00496 // Precalculate the wrong sign, if we have disabled predictions
00497 // for that class, and it hasn't been done already. This should only
00498 // be done once, unless of course the user does something strange like
00499 // turning on neutrino prediction in the middle of an extrapolation.
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 }
|
|
|
Will the antineutrino prediction be calculated?
Definition at line 44 of file NuMMRunFC.h. References CacheExtrapolation(), and fPredictAntiNeutrinos. 00044 {
00045 fPredictAntiNeutrinos = predict;
00046 if(fDoneWsAntineutrinos) CacheExtrapolation();
00047 }
|
|
|
Will the neutrino prediction be calculated?
Definition at line 39 of file NuMMRunFC.h. References CacheExtrapolation(), and fPredictNeutrinos. Referenced by NuFCFitter::NuFCFitter(). 00039 {
00040 fPredictNeutrinos = predict;
00041 if(fDoneWsNeutrinos) CacheExtrapolation();
00042 }
|
|
|
Definition at line 137 of file NuMMRunFC.cxx. References PreCalcbarNCBackground, PreCalcbarPrediction, PreCalcnuNCBackground, PreCalcnuPrediction, PreCalcpotentialNuTaus, PreCalcpotentialTauBars, PreCalcwrongSignNuBars, and PreCalcwrongSignNuMus. Referenced by CacheExtrapolation(), and ~NuMMRunFC(). 00138 {
00139 // delete the precalculated MM spectra we previously created
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 }
|
|
||||||||||||
|
Definition at line 632 of file NuMMRunFC.cxx. References CacheExtrapolation(), NuMMParameters::Dm2(), NuMMParameters::Dm2Bar(), fDoneWsNeutrinos, NuMatrixSpectrum::InverseOscillate(), Sample::kAppearedPQ, MSG, NuMatrixSpectrum::Oscillate(), PreCalcbarNCBackground, PreCalcbarPrediction, PreCalcnuNCBackground, PreCalcnuPrediction, PreCalcpotentialNuTaus, PreCalcpotentialTauBars, PreCalcwrongSignNuBars, PreCalcwrongSignNuMus, s(), NuMatrixSpectrum::SetName(), NuMMParameters::Sn2(), NuMMParameters::Sn2Bar(), and NuMatrixSpectrum::Spectrum(). 00633 {
00634 // Precache extrap, but only if needed
00635 CacheExtrapolation();
00636
00637 // Output the oscillation settings!
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 // No appeared spectrum for oscillations
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 // Request NQ spectrum, but no NuBar Predictions OR
00658 // Request PQ spectrum, but no NuMu Predictions
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 }
|
|
|
Implements NuMMRun. Definition at line 163 of file NuMMRunFC.cxx. References NuMatrixSpectrum::Add(), NuMMParameters::Dm2(), NuMMParameters::Dm2Bar(), NuMMHelperCPT::DoTaus(), NuMMHelperCPT::FDBarRecoVsTrue(), NuMMHelperCPT::FDNuRecoVsTrue(), NuMMHelperCPT::FDNuTauRecoVsTrue(), NuMMHelperCPT::FDTauBarRecoVsTrue(), NuMMHelperCPT::FDWrongSignBarRecoVsTrue(), NuMMHelperCPT::FDWrongSignNuRecoVsTrue(), NuMatrixSpectrum::Integral(), NuMatrixSpectrum::InverseOscillate(), NuMatrixSpectrum::Oscillate(), PreCalcbarNCBackground, PreCalcbarPrediction, PreCalcnuNCBackground, PreCalcnuPrediction, PreCalcpotentialNuTaus, PreCalcpotentialTauBars, PreCalcwrongSignNuBars, PreCalcwrongSignNuMus, NuMatrixSpectrum::SetName(), NuMatrixSpectrum::SetTitle(), NuMMParameters::Sn2(), NuMMParameters::Sn2Bar(), NuMatrixSpectrum::Spectrum(), and NuMatrixSpectrum::TrueToReco(). 00164 {
00165 //Set up a vector to push the histograms into.
00166 vector<TH1D> vHistos;
00167
00168 //Put the ND data in the vector:
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 // Make copies of the prepared extrapolation variables
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 // //Add in backgrounds
00203 // nuPrediction.Add(wrongSignNuBars);
00204 // barPrediction.Add(wrongSignNuMus);
00205 // nuPrediction.Add(nuNCBackground);
00206 // nuPrediction.Add(potentialNuTaus);
00207 // barPrediction.Add(barNCBackground);
00208 // barPrediction.Add(potentialTauBars);
00209
00211 // Processes for neutrinos
00212
00213 if (fPredictNeutrinos)
00214 {
00215 // Oscillate the taus
00216 if (fHelper->DoTaus()) {
00217 potentialNuTaus.InverseOscillate(pars.Dm2(),pars.Sn2());
00218
00219 // Write out the true tau spectra
00220 TH1D hFDTausNuMu(*(potentialNuTaus.Spectrum()));
00221 hFDTausNuMu.SetName("fdTausNuMu");
00222 vHistos.push_back(hFDTausNuMu);
00223
00224 potentialNuTaus.TrueToReco(fHelper->FDNuTauRecoVsTrue());
00225 }
00226
00227 // Antineutrinos in the neutrino spectrum
00228 if (!fDoneWsAntineutrinos) wrongSignNuBars.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00229
00230 // Now convert wrong sign to reco
00231 if (!fDoneWsAntineutrinos) wrongSignNuBars.TrueToReco(fHelper->FDWrongSignBarRecoVsTrue());
00232
00233 // Write out the true wrong sign components
00234 TH1D hFDWrongSignNQ(*(wrongSignNuBars.Spectrum()));
00235 hFDWrongSignNQ.SetName("fdWrongSignNQ");
00236 vHistos.push_back(hFDWrongSignNQ);
00237
00238 // Oscillation and efficiency for the Neutrino spectrum
00239 nuPrediction.Oscillate(pars.Dm2(),pars.Sn2());
00240 // nuPrediction.Multiply(fHelper->FDNuEfficiency());
00241
00242 // Write out the true spectra for the prediction components
00243 // before we add in backgrounds
00244 TH1D hFDNoBackTrueNQ(*(nuPrediction.Spectrum()));
00245 hFDNoBackTrueNQ.SetName("fdBasePredictionNuMus");
00246 vHistos.push_back(hFDNoBackTrueNQ);
00247
00248 // True to Reco
00249 nuPrediction.TrueToReco(fHelper->FDNuRecoVsTrue());
00250
00251 // Dump out the reco spectrum before adding in the backgrounds
00252 TH1D hFDNoBackNQ(*(nuPrediction.Spectrum()));
00253 hFDNoBackNQ.SetName("fdBasePredictionNQ");
00254 vHistos.push_back(hFDNoBackNQ);
00255
00256 //Add in backgrounds
00257 nuPrediction.Add(wrongSignNuBars);
00258 nuPrediction.Add(nuNCBackground);
00259 if (fHelper->DoTaus()) nuPrediction.Add(potentialNuTaus);
00260
00261 //Put the other componants of the predictions in the vector
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 // Scale the histogram to zero, so as not to confuse people
00282 nuPrediction.Spectrum()->Scale(0);
00283 }
00284
00286 // Processes for Antineutrinos
00287
00288 if (fPredictAntiNeutrinos)
00289 {
00290 if (fHelper->DoTaus()) {
00291 // Oscillate the taubars
00292 potentialTauBars.InverseOscillate(pars.Dm2Bar(),pars.Sn2Bar());
00293 // Write out the True Tau Spectrum
00294 TH1D hFDTausNuBar(*(potentialTauBars.Spectrum()));
00295 hFDTausNuBar.SetName("fdTausNuBar");
00296 vHistos.push_back(hFDTausNuBar);
00297 // Convert taus to reco energy
00298 potentialTauBars.TrueToReco(fHelper->FDTauBarRecoVsTrue());
00299 }
00300 // Oscillate the wrong sign component
00301 // Neutrinos for the antineutrino spectrum
00302 if (!fDoneWsNeutrinos) wrongSignNuMus.Oscillate(pars.Dm2(),pars.Sn2());
00303
00304 // Now, convert wrong sign to reco energy
00305 if (!fDoneWsNeutrinos) wrongSignNuMus.TrueToReco(fHelper->FDWrongSignNuRecoVsTrue());
00306
00307 // write out the true wrong sign spectra
00308 TH1D hFDWrongSignPQ(*(wrongSignNuMus.Spectrum()));
00309 hFDWrongSignPQ.SetName("fdWrongSignPQ");
00310 vHistos.push_back(hFDWrongSignPQ);
00311
00312 //Oscillation and efficiency for the antineutrino spectrum
00313 barPrediction.Oscillate(pars.Dm2Bar(),pars.Sn2Bar());
00314
00315 // Write out the true antineutrino spectrum, without backgrounds
00316 TH1D hFDNoBackTruePQ(*(barPrediction.Spectrum()));
00317 hFDNoBackTruePQ.SetName("fdBasePredictionNuBars");
00318 vHistos.push_back(hFDNoBackTruePQ);
00319
00320 //True to reco
00321 barPrediction.TrueToReco(fHelper->FDBarRecoVsTrue());
00322
00323 // Antineutrino reco spectrum, before backgrounds
00324 TH1D hFDNoBackPQ(*(barPrediction.Spectrum()));
00325 hFDNoBackPQ.SetName("fdBasePredictionPQ");
00326 vHistos.push_back(hFDNoBackPQ);
00327
00328 //Add in backgrounds
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 // Scale the histogram to zero, so as not to confuse people
00353 barPrediction.Spectrum()->Scale(0);
00354 }
00355
00356 return vHistos;
00357 }
|
|
|
Flags to remember if the wrong sign has been precalculated.
Definition at line 95 of file NuMMRunFC.h. Referenced by CacheExtrapolation(), NuMMRunFC(), and PreCalcWrongSign(). |
|
|
Flags to remember if the wrong sign has been precalculated.
Definition at line 95 of file NuMMRunFC.h. Referenced by CacheExtrapolation(), NuMMRunFC(), PreCalcWrongSign(), and TrueComponents(). |
|
|
Controls antineutrino component of prediction.
Definition at line 92 of file NuMMRunFC.h. Referenced by NuMMRunFC(), and PredictNuBars(). |
|
|
Controls neutrino component of prediction.
Definition at line 90 of file NuMMRunFC.h. Referenced by NuMMRunFC(), and PredictNus(). |
|
|
Definition at line 81 of file NuMMRunFC.h. Referenced by CacheExtrapolation(), MakeFDPred(), NuMMRunFC(), ResetCache(), TrueComponents(), and WriteFDPredHistos(). |
|
|
Definition at line 72 of file NuMMRunFC.h. Referenced by CacheExtrapolation(), MakeFDPred(), NuMMRunFC(), ResetCache(), TrueComponents(), and WriteFDPredHistos(). |
|
|
Definition at line 80 of file NuMMRunFC.h. Referenced by CacheExtrapolation(), MakeFDPred(), NuMMRunFC(), ResetCache(), TrueComponents(), and WriteFDPredHistos(). |
|
|
Definition at line 71 of file NuMMRunFC.h. Referenced by CacheExtrapolation(), MakeFDPred(), NuMMRunFC(), ResetCache(), TrueComponents(), and WriteFDPredHistos(). |
|
|
Definition at line 76 of file NuMMRunFC.h. Referenced by CacheExtrapolation(), MakeFDPred(), NuMMRunFC(), ResetCache(), TrueComponents(), and WriteFDPredHistos(). |
|
|
Definition at line 77 of file NuMMRunFC.h. Referenced by CacheExtrapolation(), MakeFDPred(), NuMMRunFC(), ResetCache(), TrueComponents(), and WriteFDPredHistos(). |
|
|
Definition at line 87 of file NuMMRunFC.h. Referenced by CacheExtrapolation(), MakeFDPred(), NuMMRunFC(), PreCalcWrongSign(), ResetCache(), TrueComponents(), and WriteFDPredHistos(). |
|
|
Definition at line 86 of file NuMMRunFC.h. Referenced by CacheExtrapolation(), MakeFDPred(), NuMMRunFC(), PreCalcWrongSign(), ResetCache(), TrueComponents(), and WriteFDPredHistos(). |
1.3.9.1