00001 #include <iostream>
00002 #include "TMath.h"
00003 #include "NueAna/NueRWHelpers.h"
00004 #include "AnalysisNtuples/ANtpTruthInfoBeam.h"
00005 #include "MCNtuple/NtpMCTruth.h"
00006 #include "NueAna/OscProb.h"
00007 #include "NueAna/ANtpTruthInfoBeamNue.h"
00008
00009 float NueRWHelpers::Oscillate(NtpMCTruth *mcth,
00010 float L, float dm2, float theta23, float UE32)
00011 {
00012 return NueRWHelpers::Oscillate(mcth->inu, mcth->inunoosc, mcth->p4neu[3],
00013 L, dm2, theta23, UE32);
00014 }
00015
00016 float NueRWHelpers::Oscillate(ANtpTruthInfoBeam *ib,
00017 float L, float dm2, float theta23, float UE32)
00018 {
00019 return NueRWHelpers::Oscillate(ib->nuFlavor, ib->nonOscNuFlavor,ib->nuEnergy,
00020 L, dm2, theta23, UE32);
00021 }
00022
00023 float NueRWHelpers::Oscillate(ANtpTruthInfoBeamNue *ib)
00024 {
00025 return NueRWHelpers::Oscillate(ib->nuFlavor, ib->nonOscNuFlavor,ib->nuEnergy,
00026 ib->Baseline, ib->DeltamSquared23,
00027 ib->Theta23, ib->Ue3Squared);
00028 }
00029
00030
00031
00032 float NueRWHelpers::Oscillate(int nuFlavor, int nonOscNuFlavor, float Energy,
00033 float L, float dm2, float theta23, float UE32)
00034 {
00035 float oscterm = TMath::Sin(1.27*dm2*L/Energy);
00036
00037 float pmt=pow((1-UE32)*oscterm*TMath::Sin(2*theta23),2);
00038 float pme=pow(TMath::Sin(theta23),2)*4.*UE32*(1-UE32)*pow(oscterm,2);
00039 float pmm=1.-pmt-pme;
00040
00041 float pet=4*(1-UE32)*UE32*pow(TMath::Cos(theta23)*oscterm,2);
00042 float pem=pow(TMath::Sin(theta23),2)*4.*UE32*(1-UE32)*pow(oscterm,2);
00043 float pee=1.-pet-pem;
00044
00045
00046 if(abs(nonOscNuFlavor)==14){
00047 if(abs(nuFlavor)==12){
00048 return pme;
00049 }
00050 else if(abs(nuFlavor)==14){
00051 return pmm;
00052 }
00053 else if(abs(nuFlavor)==16){
00054 return pmt;
00055 }
00056 }
00057 else if(abs(nonOscNuFlavor)==12){
00058 if(abs(nuFlavor)==12){
00059 return pee;
00060 }
00061 else if(abs(nuFlavor)==14){
00062 return pem;
00063 }
00064 else if(abs(nuFlavor)==16){
00065 return pet;
00066 }
00067 }
00068 else{
00069 std::cout<<"I don't know what to do with "<<nonOscNuFlavor
00070 <<" "<<nuFlavor<<" "<<pee<<std::endl;
00071 }
00072 return 0.;
00073 }
00074
00075 float NueRWHelpers::OscillateMatter(int nuFlavor, int nonOscNuFlavor,
00076 float Energy,
00077 float L, float dm2, float th23, float UE32,
00078 float delta,int hierarchy)
00079 {
00080
00081 Double_t x[1] = {};
00082 x[0] = Energy;
00083 Double_t th12 = 0.554;
00084 Double_t ss2th13 = 4*UE32*(1-UE32);
00085 Double_t dm2_12 = 8.2e-5;
00086 Double_t dm2_23 = dm2;
00087
00088 Double_t par[9] = {0};
00089 par[0] = L;
00090 par[1] = th23;
00091 par[2] = th12;
00092 par[3] = TMath::ASin(TMath::Sqrt(ss2th13))/2.;
00093 par[4] = hierarchy*dm2_23;
00094 par[5] = hierarchy*dm2_12;
00095 par[6] = 2.65;
00096 par[7] = delta;
00097 par[8] = 1;
00098 if(nonOscNuFlavor < 0) par[8] = -1;
00099
00100 if(nonOscNuFlavor==14) {
00101 if(nuFlavor==12) return ElecAppear(x,par);
00102 else if(nuFlavor==14) return MuSurvive(x,par) - ElecAppear(x,par);
00103 else if(nuFlavor==16) return MuDisappear(x,par);
00104 }
00105 else if(nonOscNuFlavor==12) {
00106 if(nuFlavor==12) return 1 - ElecAppear(x,par) -
00107 ( ss2th13 * TMath::Power(TMath::Cos(th23) *
00108 TMath::Sin(1.27*dm2*L/x[0]),2) );
00109 else if(nuFlavor==14) return ElecAppear(x,par);
00110 else if(nuFlavor==16) return ( ss2th13 *
00111 TMath::Power(TMath::Cos(th23) *
00112 TMath::Sin(1.27*dm2*L/x[0]),2) );
00113 }
00114 return 0;
00115 }
00116
00117 float NueRWHelpers::OscillateMatter(NtpMCTruth *mcth,
00118 float L, float dm2, float theta23,
00119 float UE32,float delta,int hierarchy)
00120 {
00121 return NueRWHelpers::OscillateMatter(mcth->inu, mcth->inunoosc,
00122 mcth->p4neu[3],
00123 L, dm2, theta23, UE32,
00124 delta,hierarchy);
00125 }
00126
00127 float NueRWHelpers::OscillateMatter(ANtpTruthInfoBeam *ib,
00128 float L, float dm2, float theta23,
00129 float UE32,float delta, int hierarchy)
00130 {
00131 return NueRWHelpers::OscillateMatter(ib->nuFlavor, ib->nonOscNuFlavor,
00132 ib->nuEnergy,
00133 L, dm2, theta23, UE32,
00134 delta,hierarchy);
00135 }
00136