#include <NueFCSensitivity.h>
Public Member Functions | |
| NueFCSensitivity () | |
| ~NueFCSensitivity () | |
| void | Run (std::string input, std::string output, double outPOT=4.0) |
| void | WriteToFile (std::string file) |
| float | Oscillate (double dm23, double t13, double delta, int sign) |
| void | RunFromGrid () |
| void | RunStandardApproach () |
| void | SetObserved (int in) |
| double | MinimizationFunction (double *par) |
| void | TestCode () |
| void | SetDeltaRange (double start, double end) |
| void | SetTheta23 (double in) |
Private Member Functions | |
| void | Initialize () |
| void | SetupGridRun () |
| void | LoadEventsFromFile () |
| void | GetPoint (int i, float &bg, float &sig) |
| float | OscillateNumber (double Ue32) |
| float | OscillateHist (double dm23, double Ue32, double delta, int sign) |
| float | OscillateFile (double dm23, double Ue32, double delta, int sign) |
| float | CalculateChi2 (int i, float bg, float sig) |
| float | CalculateFitChi2 (int i, float bg, float sig) |
| int | SetupChi2Histograms (NSCDataParam DPst13, NSCDataParam DPdelta, NSCDataParam DPdm23) |
| void | ProduceTree (TTree *&infotree, TTree *&errtree) |
| double | EvaluateOmega (double signal, double background, int i) |
| double | CalculateRank (int n, double s, double b, double errBg, double k, double errK) |
| bool | FindBestFit (int n, double s, double b, double errBg, double k, double errK, double *res) |
| double | OscillateMatter (int nuFlavor, int nonOscNuFlavor, float Energy) |
| double | OscillateMatter (int nuFlavor, int nonOscNuFlavor, float Energy, float dm2, float th13, float delta, int hierarchy) |
| void | SetOscParamBase (float dm2, float ss13, float delta, int hierarchy) |
Private Attributes | |
| float | signuenum |
| TH1D * | signuehist |
| TH1D * | reweight |
| double | fTheta23 |
| double * | fBinCenter |
| std::vector< mininfo > | mcInfo |
| double | fMeasuredPOT |
| float | currentVal [5] |
| float * | fZeroValBg |
| float * | fZeroValSig |
| float | fBaseLine |
| int | fMethod |
| int | fNumConfig |
| NueSenseConfig * | nsc |
| TH3D ** | chi2n |
| TH3D ** | chi2i |
| TH3D ** | nsigN |
| TH3D ** | nsigI |
| TH3D ** | nbgN |
| TH3D ** | nbgI |
| float | t13Step |
| float | dStep |
| float | dm23Step |
| double | fDeltaMS12 |
| double | fTh12 |
| double | fTh23 |
| double | fDensity |
| std::map< double, std::map< double, std::vector< Point > > > | fDeltaM32MapNormal |
| std::map< double, std::map< double, std::vector< Point > > > | fDeltaM32MapInvert |
| OscCalc | fOscCalc |
| int | fObserved |
| bool | fObservedIsSet |
| double | fResult |
| double | fFixedFitPar [6] |
| double | fDeltaStart |
| double | fDeltaEnd |
|
|
Definition at line 47 of file NueFCSensitivity.cxx. 00047 {
00048 t13Step = 0.001;
00049 dStep = 0.02;
00050 dm23Step = 0.025;
00051 fBaseLine = 735;
00052 fObservedIsSet = false;
00053 fDeltaStart = -1;
00054 fDeltaEnd = 3;
00055 fTheta23 = -1e4;
00056 for(int i = 0; i < 6; i++) fFixedFitPar[i] = 0.0;
00057 }
|
|
|
Definition at line 60 of file NueFCSensitivity.cxx. 00060 {
00061 }
|
|
||||||||||||||||
|
Definition at line 952 of file NueFCSensitivity.cxx. References NSCErrorParam::bg_systematic, fZeroValBg, fZeroValSig, NueSenseConfig::GetErrorConfig(), nsc, and NSCErrorParam::sig_systematic. 00953 {
00954 NSCErrorParam err = nsc->GetErrorConfig(i);
00955
00956 float nObs = sig+bg;
00957 float nZero = fZeroValBg[i] + fZeroValSig[i];
00958
00959 double bgerr = err.bg_systematic*fZeroValBg[i];
00960 double sigerr = err.sig_systematic*fZeroValSig[i];
00961
00962 float syserrsq = bgerr*bgerr + sigerr*sigerr;
00963
00964 float errScale = nObs/(nObs + syserrsq);
00965
00966 float chi2 = 2*(nZero - nObs + nObs*TMath::Log(nObs/nZero)) * errScale;
00967 return chi2;
00968 }
|
|
||||||||||||||||
|
Definition at line 970 of file NueFCSensitivity.cxx. References NSCErrorParam::bg_systematic, fZeroValBg, fZeroValSig, NueSenseConfig::GetErrorConfig(), nsc, and NSCErrorParam::sig_systematic. Referenced by RunStandardApproach(). 00971 {
00972 NSCErrorParam err = nsc->GetErrorConfig(i);
00973
00974 float nZero = sig+bg;
00975 float nObs = fObserved;
00976 if(!fObservedIsSet) nObs = fZeroValBg[i] + fZeroValSig[i];
00977
00978 double bgerr = err.bg_systematic*bg;
00979 double sigerr = err.sig_systematic*sig;
00980
00981 float syserrsq = bgerr*bgerr + sigerr*sigerr;
00982 float errScale = nZero/(nZero + syserrsq);
00983
00984 float chi2 = 2*(nZero - nObs + nObs*TMath::Log(nObs/nZero)) * errScale;
00985 return chi2;
00986 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 462 of file NueFCSensitivity.cxx. References FindBestFit(), and s(). Referenced by EvaluateOmega(). 00463 {
00464 double results[3];
00465 //Calculate the numerator
00466 FindBestFit(n, s, b, errBg, k, errK, results);
00467
00468 // double numerator = results[2];
00469
00470 double sBest, kBest, bBest;
00471
00472 // Now calculate the denominator
00473 if(n >= b) { // then we have n = sk+b, Beta = b; k = k0// don't have to do anything
00474 sBest = (n-b)/k; kBest = k; bBest = b;
00475 }
00476 else{ //if(n < b) {
00477 bBest = 0.5*(b - errBg + TMath::Sqrt( (b-errBg)*(b - errBg) + 4*n*errBg));
00478 // then we have no signal at best fit point
00479 sBest = 0; kBest = k;
00480 }
00481
00482 double betaHat = results[0];
00483 double kHat = results[1];
00484 double logN = n*TMath::Log(s*kHat+betaHat) - (s*kHat+betaHat) - (betaHat-b)*(betaHat-b)/(2*errBg)
00485 - (kHat-k)*(kHat-k)/(2*errK);
00486 double logD = n*TMath::Log(sBest*kBest+bBest) - (sBest*kBest+bBest) - (bBest-b)*(bBest-b)/(2*errBg)
00487 - (kBest-k)*(kBest-k)/(2*errK);
00488
00489 double rank = 1.0;
00490 if(logD != 0) { rank = TMath::Exp(logN-logD); }
00491 else std::cout<<"odd"<<std::endl;
00492
00493 return rank;
00494 }
|
|
||||||||||||||||
|
Definition at line 297 of file NueFCSensitivity.cxx. References NSCErrorParam::bg_systematic, CalculateRank(), FindBestFit(), Gaussian(), NueSenseConfig::GetErrorConfig(), nsc, Poisson(), and NSCErrorParam::sig_systematic. Referenced by RunFromGrid(). 00298 {
00299 int n0 = fObserved;
00300 double b0 = background;
00301 double s0 = signal;
00302 double k0 = 1.0;
00303
00304 NSCErrorParam err = nsc->GetErrorConfig(i);
00305
00306 double errK = 1.0;
00307 if(s0 > 0) errK = (err.sig_systematic)*(err.sig_systematic);
00308 if(errK < 1e-5){ errK = 1.0; std::cout<<"can't do perfect signal"<<std::endl; }
00309 double errBg = err.bg_systematic*b0*err.bg_systematic*b0;
00310
00311 double rank0 = CalculateRank(n0, s0, b0, errBg, k0, errK);
00312
00313 double results[3];
00314 FindBestFit(n0, s0, b0, errBg, k0, errK, results);
00315
00316 double betaHat = results[0];
00317 double kHat = results[1];
00318
00319 errBg = (betaHat*err.bg_systematic)*(betaHat*err.bg_systematic);
00320 errK = (err.sig_systematic)*(err.sig_systematic)*kHat*kHat;
00321
00322 // std::cout<<n0<<" "<<s0<<" "<<b0<<" "<<k0<<" "<<betaHat<<" "<<kHat<<" "<<errBg<<" "<<errK<<std::endl;
00323 // std::cout<<s0*kHat + betaHat<<" "<<n0<<std::endl;
00324
00325 double omega = 0;
00326 double omegaBar = Poisson(s0*kHat + betaHat, n0);
00327
00328 int nBase = int(s0*kHat + betaHat);
00329
00330 int nHigh = nBase;
00331 int nLow = nBase - 1;
00332
00333 double delta = 1.0;
00334 bool filled = false;
00335
00336 const int NUMB = 30;
00337 const int NUMK = 30;
00338
00339 static double bVal[NUMB];
00340 static double kVal[NUMK];
00341 static double errBVar[NUMB];
00342 static double errKVar[NUMK];
00343
00344 static bool first = true;
00345 static double scale = 1.0;
00346
00347 double bStart = 0.4*b0; double bStop = 2.2*b0;
00348 double kStart = 0.4; double kStop = 1.6;
00349
00350 if(first){
00351 for(int i = 0; i < NUMB; i++) {
00352 bVal[i] = bStart + i*(bStop - bStart)/float(NUMB);
00353 errBVar[i] = err.bg_systematic*err.bg_systematic*bVal[i]*bVal[i];
00354 }
00355
00356 for(int i = 0; i < NUMK; i++) {
00357 kVal[i] = kStart + i*(kStop - kStart)/float(NUMK);
00358 errKVar[i] = (err.sig_systematic)*(err.sig_systematic)*kVal[i]*kVal[i];
00359 }
00360 first = false;
00361 scale = (bStop-bStart)*(kStop-kStart)/(NUMK*NUMB);
00362 }
00363 double bkProb[NUMB][NUMK];
00364
00365 /* so lets be clear about this, the values for these gaussians are the same
00366 but its the rank that changes for any given value of n (the values themselve differ with mu)
00367 so the first time through i calculate the contribution for each point in the space
00368 then when looping through just look it up in a giant array */
00369
00370 // better yet - I can save cycles by building the arrays separately on the first pass
00371
00372 double bGauss[NUMB];
00373 double kGauss[NUMK];
00374
00375 for(int i = 0; i < NUMB; i++) {
00376 bGauss[i] = Gaussian(betaHat, bVal[i], errBg);
00377 }
00378 for(int i = 0; i < NUMB; i++) {
00379 kGauss[i] = Gaussian(kHat, kVal[i], errK);
00380 }
00381
00382 bool risingH = false, risingL = false;
00383 bool doneH = false; // some calc savers
00384 bool doneL = false; // some calc savers
00385
00386 double ThreshHold = 1e-5;
00387 double pfThresh = ThreshHold*1e-2;
00388
00389 double slip = 0; // Error on the numerical integral
00390
00391 while(delta > ThreshHold || (1 - (omega + omegaBar) > 2*ThreshHold) )
00392 {
00393 if(nHigh == n0) nHigh++;
00394 if(nLow == n0) nLow--;
00395
00396 double dOmegaH = 0.0, dOmegaBarH = 0.0;
00397 double dOmegaL = 0.0, dOmegaBarL = 0.0;
00398
00399 double PrefactorH = Poisson(s0*kHat+betaHat, nHigh);
00400 double PrefactorL = Poisson(s0*kHat+betaHat, nLow);
00401
00402 if(PrefactorH > pfThresh) risingH = true;
00403 if(PrefactorL > pfThresh) risingL = true;
00404 if(PrefactorH < pfThresh && risingH) doneH = true;
00405 if(PrefactorL < pfThresh && risingL) doneL = true;
00406 if(doneH && doneL){
00407 // just a sanity check that the code doesn't think its done too early, this will cause an inf loop
00408 if(1 - (omega + omegaBar) < 1.5*slip) break;
00409 std::cout<<"Thats unexpected: "<<1 - (omega + omegaBar)<<" "<<slip<<std::endl;
00410 }
00411
00412 if(PrefactorH > pfThresh || PrefactorL > pfThresh){ // No need to loop if contribution too small
00413 for(int i = 0; i < NUMB; i++) // 0 to infinity
00414 {
00415 double b = bVal[i];
00416 double eb = errBVar[i];
00417 for(int j = 0 ; j < NUMK; j++) // -inf to inf
00418 {
00419 double k = kVal[j];
00420 if(!filled) bkProb[i][j] = bGauss[i]*kGauss[j];
00421
00422 double val = bkProb[i][j];
00423 double eK = errKVar[j];
00424 if(val < ThreshHold*1e-4) continue; // no point in using these contributions
00425
00426 double rank = 1.0;
00427
00428 if(PrefactorH > pfThresh){
00429 rank = CalculateRank(nHigh, s0, b, eb, k, eK);
00430 if(rank > rank0) dOmegaH += val*scale;
00431 else dOmegaBarH += val*scale;
00432 }
00433
00434 if(PrefactorL > pfThresh){
00435 if(nLow >= 0){
00436 rank = CalculateRank(nLow, s0, b, eb, k, eK);
00437 if(rank > rank0) dOmegaL += val*scale;
00438 else dOmegaBarL += val*scale;
00439 }
00440 }
00441 }
00442 }
00443 if(!filled) filled = true;
00444 if(PrefactorH > pfThresh && 1 - (dOmegaH+ dOmegaBarH) > slip) slip = 1 - (dOmegaH+ dOmegaBarH);
00445 if(PrefactorL > pfThresh && 1 - (dOmegaL+ dOmegaBarL) > slip) slip = 1 - (dOmegaL+ dOmegaBarL);
00446 }
00447 delta = TMath::Max(PrefactorH*dOmegaH + PrefactorL*dOmegaL, PrefactorH*dOmegaBarH + PrefactorL*dOmegaBarL);
00448 omega += PrefactorH*dOmegaH + PrefactorL*dOmegaL;
00449 omegaBar += PrefactorH*dOmegaBarH + PrefactorL*dOmegaBarL;
00450 nHigh++; nLow--;
00451 }
00452
00453 if(slip > ThreshHold){
00454 std::cout<<"Integral error past threshold: "<<omega<<" "<<omegaBar<<" "<<omega+omegaBar<<" "<<slip<<std::endl;
00455 std::cout<<n0<<" "<<s0<<" "<<b0<<" "<<k0<<" "<<betaHat<<" "<<kHat<<" "<<errBg<<" "<<errK<<std::endl;
00456 std::cout<<s0*kHat + betaHat<<" "<<n0<<std::endl;
00457 }
00458 return omega;
00459 }
|
|
||||||||||||||||||||||||||||||||
|
Definition at line 496 of file NueFCSensitivity.cxx. References s(). Referenced by CalculateRank(), EvaluateOmega(), and TestCode(). 00497 {
00498 // At the moment this function is solvable in ~closed form (we ignore the dependance of errBg, errK on khat, betaHat
00499 // this lets us avoid having a numerical minimization, but the second half of this function is the code that allows for that
00500
00501 double sol_A = 1 + errK/errBg*s*s;
00502 double sol_B = errBg + s*k - 2*errK*s*s*b/errBg - b + s*s*errK;
00503 double sol_C = -n*errBg + s*k*errBg - s*s*errK*b - s*k*b + s*s*b*b*errK/errBg;
00504
00505 double rad = sol_B*sol_B-4*sol_A*sol_C;
00506 if(rad < 0) std::cout<<"negative radical - not sure about this...."<<std::endl;
00507
00508 double betaHat = (-sol_B + TMath::Sqrt(rad))/(2*sol_A);
00509
00510 //solving for kHat given betaHat
00511 double kHat = k - s*errK/errBg*(b-betaHat);
00512
00513 res[0] = betaHat;
00514 res[1] = kHat;
00515
00516 /*
00517 fFixedFitPar[0] = n;
00518 fFixedFitPar[1] = s;
00519 fFixedFitPar[2] = b;
00520 fFixedFitPar[3] = errBg;
00521 fFixedFitPar[4] = k;
00522 fFixedFitPar[5] = errK;
00523 */
00524 // res[2] = fResult = Poisson(s*kHat+betaHat, n, true)*Gaussian(betaHat, b, errBg)*Gaussian(kHat, k, errK);
00525 /*
00526 static bool first = true;
00527 static TMinuit *min = 0;
00528
00529 if(first){
00530 min = new TMinuit(2);
00531 gMinuit = min;
00532 min->SetFCN(WrapperFunction);
00533 min->SetObjectFit(this);
00534 min->DefineParameter(0,"bfit",fObserved,1, 0,60);
00535 min->DefineParameter(1,"kfit",1,0.99, 0,22);
00536
00537 const double ERRDEF=1.;
00538 min->SetErrorDef(ERRDEF);
00539 min->SetPrintLevel(-1);
00540 first = false;
00541 std::cout<<"Built"<<std::endl;
00542 }
00543 Double_t arglist[10];
00544 Int_t ierflg = 0;
00545
00546 arglist[0] = 10000; //max calls
00547 arglist[1] = 0.01; //tolerance
00548
00549 min->mnexcm("SIMPLEX",arglist,2,ierflg);
00550
00551 double errs[2];
00552 for(int i=0;i<2;i++){
00553 min->GetParameter(i,res[i],errs[i]);
00554 // std::cout<<res[i]<<" "<<errs[i]<<std::endl;
00555 }
00556 */
00557 // res[2] = fResult;
00558
00559 return true;
00560 }
|
|
||||||||||||||||
|
Definition at line 732 of file NueFCSensitivity.cxx. References currentVal, NueSenseConfig::GetErrorConfig(), nsc, and NSCErrorParam::scale. Referenced by RunStandardApproach(). 00733 {
00734 NSCErrorParam err = nsc->GetErrorConfig(i);
00735
00736 float bgt = currentVal[ClassType::NC] * (1.0 + err.scale[ClassType::NC])
00737 + currentVal[ClassType::numu]* (1.0 + err.scale[ClassType::numu])
00738 + currentVal[ClassType::bnue]* (1.0 + err.scale[ClassType::bnue])
00739 + currentVal[ClassType::nutau]*(1.0 + err.scale[ClassType::nutau]);
00740
00741 bg = bgt;
00742 sig = currentVal[ClassType::nue]*(1.0 + err.scale[ClassType::nue]);
00743 }
|
|
|
Definition at line 745 of file NueFCSensitivity.cxx. References currentVal, fBinCenter, fDeltaMS12, fDensity, fMeasuredPOT, fMethod, fTh12, fTh23, NueSenseConfig::GetDeltaMS12(), NueSenseConfig::GetDensity(), NueSenseConfig::GetNueHistFile(), NueSenseConfig::GetNueHistName(), NueSenseConfig::GetNumber(), NueSenseConfig::GetOldDeltaMSquare(), NueSenseConfig::GetOldUe3Square(), NueSenseConfig::GetPOT(), NueSenseConfig::GetSinS2Th12(), NueSenseConfig::GetSinS2Th23(), LoadEventsFromFile(), nsc, NueSenseConfig::Reset(), reweight, NueSenseConfig::ShouldDeOsc(), signuehist, and signuenum. Referenced by Run(). 00746 {
00747 float inPOT = nsc->GetPOT();
00748 float scale = fMeasuredPOT/inPOT;
00749
00750 //Initilize the background
00751 if(fMethod == NueSenseConfig::kAllNumbers || fMethod == NueSenseConfig::kNueHist){
00752 currentVal[ClassType::NC] = nsc->GetNumber(ClassType::NC)*scale;
00753 currentVal[ClassType::numu] = nsc->GetNumber(ClassType::numu)*scale;
00754 currentVal[ClassType::bnue] = nsc->GetNumber(ClassType::bnue)*scale;
00755 currentVal[ClassType::nutau] = nsc->GetNumber(ClassType::nutau)*scale;
00756 }
00757
00758 if(fMethod == NueSenseConfig::kAllNumbers){
00759 float nuenumber = nsc->GetNumber(ClassType::nue);
00760 if(nsc->ShouldDeOsc()){
00761 //Assumed originally Oscillated to:
00762 // pow(TMath::Sin(theta23),2)*4.*UE32*(1-UE32)*pow(oscterm,2);
00763 float UE32 = nsc->GetOldUe3Square();
00764 float deoscweight = UE32*(1-UE32);
00765 signuenum = nuenumber/deoscweight*scale;
00766 }else{
00767 signuenum = nuenumber*scale;
00768 }
00769 }
00770
00771 if(fMethod == NueSenseConfig::kNueHist){
00772 TFile inf(nsc->GetNueHistFile().c_str());
00773 TH1D *h = dynamic_cast<TH1D*>(inf.Get(nsc->GetNueHistName().c_str()));
00774 if(h == NULL){
00775 TH1D *h2 = dynamic_cast<TH1D*>(inf.Get(nsc->GetNueHistName().c_str()));
00776 if(h2 == NULL)
00777 std::cout<<"Failure to load signal histogram"<<std::endl;
00778 //This isn't really setup yet, but ideally I would convert it over to the right type
00779 }
00780
00781 TH1D* hist = dynamic_cast<TH1D*>(h->Clone());
00782 hist->SetDirectory(0);
00783
00784 if(nsc->ShouldDeOsc()){
00785 hist->Reset();
00786
00787 float UE32 = nsc->GetOldUe3Square();
00788 float dms23 = nsc->GetOldDeltaMSquare();
00789 for(int i = 0; i < h->GetNbinsX()+1; i++){
00790 float E = h->GetBinCenter(i);
00791 float num = h->GetBinContent(i);
00792
00793 double invKmToeV = 1.97e-10; //convert 1/km to eV
00794 double Delta13Old = dms23*1e-3*735/(4.*E*1e9*invKmToeV);
00795 double unweight = UE32*(1-UE32)*4*(1.0/2.0)
00796 *TMath::Power(TMath::Sin(Delta13Old),2);
00797
00798 hist->Fill(E, num/unweight*scale);
00799 }
00800 }else{
00801 hist->Scale(scale);
00802 }
00803
00804 signuehist = dynamic_cast<TH1D*>(hist->Clone());
00805 signuehist->SetDirectory(0);
00806 reweight = dynamic_cast<TH1D*>(signuehist->Clone());
00807 reweight->SetDirectory(0);
00808
00809 fBinCenter = new double[reweight->GetNbinsX()+1];
00810 for(int i = 0; i < reweight->GetNbinsX()+1; i++){
00811 fBinCenter[i] = reweight->GetBinCenter(i);
00812 }
00813
00814 }
00815
00816 if(fMethod == NueSenseConfig::kAnaNueFiles)
00817 LoadEventsFromFile();
00818
00819
00820 fDeltaMS12 = nsc->GetDeltaMS12();
00821 float temp = nsc->GetSinS2Th12();
00822 fTh12 = TMath::ASin(TMath::Sqrt(temp))/2.;
00823 temp = nsc->GetSinS2Th23();
00824 fTh23 = TMath::ASin(TMath::Sqrt(temp))/2.;
00825
00826 fDensity = nsc->GetDensity();
00827
00828 }
|
|
|
Definition at line 830 of file NueFCSensitivity.cxx. References mininfo::energy, NueSenseConfig::GetFile(), NueSenseConfig::GetNumFiles(), mcInfo, nsc, mininfo::nuClass, mininfo::NuFlavor, mininfo::NuFlavorBeforeOsc, NuePOT::pot, and mininfo::weight. Referenced by Initialize(). 00831 {
00832 for(int i = 0; i < nsc->GetNumFiles(); i++){
00833
00834 TChain *selected = new TChain("ana_nue");
00835 TChain *pots = new TChain("pottree");
00836
00837 selected->Add(nsc->GetFile(i).c_str());
00838 pots->Add(nsc->GetFile(i).c_str());
00839
00840 int nonOscFlavor, nuFlavor, type;
00841 float trueE;
00842 double skzpweight;
00843
00844 selected->SetMakeClass(1);
00845 selected->SetBranchStatus("*", 0);
00846 selected->SetBranchStatus("mctrue*", 1);
00847 selected->SetBranchStatus("fluxweight.totbeamweight", 1);
00848 selected->SetBranchAddress("mctrue.nonOscNuFlavor",&nonOscFlavor);
00849 selected->SetBranchAddress("mctrue.nuFlavor",&nuFlavor);
00850 selected->SetBranchAddress("mctrue.fNueClass",&type);
00851 selected->SetBranchAddress("mctrue.nuEnergy", &trueE);
00852 selected->SetBranchAddress("fluxweight.totbeamweight",&skzpweight);
00853
00854 NuePOT *np;
00855 pots->SetBranchAddress("NuePOT", &np);
00856 double filePOT, scale;
00857 filePOT = 0.0;
00858
00859 for(int j=0; j < pots->GetEntries(); j++) {
00860 pots->GetEntry(j);
00861 filePOT += np->pot;
00862 }
00863 scale = filePOT/fMeasuredPOT;
00864
00865 for(int j = 0; j < selected->GetEntries(); j++){
00866 selected->GetEntry(j);
00867 mininfo newInfo;
00868 newInfo.energy = trueE;
00869 newInfo.NuFlavor = nuFlavor;
00870 newInfo.NuFlavorBeforeOsc = nonOscFlavor;
00871 newInfo.nuClass = type;
00872 if(skzpweight < 0) skzpweight = 1.0;
00873 newInfo.weight = skzpweight*scale;
00874 mcInfo.push_back(newInfo);
00875 } //End of this file
00876
00877 delete selected;
00878 delete pots;
00879 } //Done loading all files and POT Normalization is taken care of
00880 }
|
|
|
Definition at line 63 of file NueFCSensitivity.cxx. References fFixedFitPar, fResult, and s(). Referenced by WrapperFunction(). 00064 {
00065 int n = (int) fFixedFitPar[0];
00066 double s = fFixedFitPar[1];
00067 double b = fFixedFitPar[2];
00068 double sigBg = fFixedFitPar[3];
00069 double k = fFixedFitPar[4];
00070 double sigK = fFixedFitPar[5];
00071
00072 // std::cout<<n<<" "<<b<<" "<<s<<std::endl;
00073
00074 double bFit = par[0];
00075 double kFit = par[1];
00076
00077 double tot = s*kFit +bFit;
00078 if(tot < 0) std::cout<<s<<" "<<kFit<<" "<<bFit<<" serious error "<<std::endl;
00079
00080 double lnF = -n*TMath::Log(s*kFit + bFit) + (s*kFit + bFit) + 0.5*1/sigBg*(bFit-b)*(bFit-b);
00081 lnF += 0.5*1/sigK*(kFit-k)*(kFit-k);
00082
00083 // std::cout<<"res: "<<kFit<<" "<<bFit<<" "<<lnF<<std::endl;
00084 fResult = lnF;
00085
00086 return lnF;
00087 }
|
|
||||||||||||||||||||
|
Definition at line 882 of file NueFCSensitivity.cxx. References fMethod, OscillateFile(), OscillateHist(), and OscillateNumber(). Referenced by RunStandardApproach(). 00883 {
00884 if(fMethod == NueSenseConfig::kAllNumbers)
00885 return OscillateNumber(Ue32);
00886
00887 if(fMethod == NueSenseConfig::kNueHist)
00888 return OscillateHist(dm23, Ue32, delta, sign);
00889
00890 if(fMethod == NueSenseConfig::kAnaNueFiles)
00891 return OscillateFile(dm23, Ue32, delta, sign);
00892
00893 return -1;
00894 }
|
|
||||||||||||||||||||
|
Definition at line 926 of file NueFCSensitivity.cxx. References currentVal, mininfo::energy, mcInfo, mininfo::nuClass, mininfo::NuFlavor, mininfo::NuFlavorBeforeOsc, OscillateMatter(), total(), and mininfo::weight. Referenced by Oscillate(). 00927 {
00928 float total[5];
00929
00930 for(int i = 0; i < 5; i++) total[i] = 0;
00931
00932 for(unsigned int i = 0; i < mcInfo.size(); i++){
00933 float E = mcInfo[i].energy;
00934 int inu = mcInfo[i].NuFlavor;
00935 int inunoosc = mcInfo[i].NuFlavorBeforeOsc;
00936 int nuClass = mcInfo[i].nuClass;
00937 double weight = mcInfo[i].weight;
00938
00939 double oscweight =
00940 OscillateMatter(inu,inunoosc,E,dm23,Ue32,delta,sign);
00941
00942 total[nuClass] += weight*oscweight;
00943 }
00944
00945 for(int i = 0; i < 5; i++){
00946 currentVal[i] = total[i];
00947 }
00948
00949 return currentVal[ClassType::nue];
00950 }
|
|
||||||||||||||||||||
|
Definition at line 907 of file NueFCSensitivity.cxx. References currentVal, fBinCenter, OscillateMatter(), reweight, and signuehist. Referenced by Oscillate(). 00908 {
00909 reweight->Reset("ICE");
00910
00911 for(int i = 0; i < signuehist->GetNbinsX()+1; i++){
00912 float E = fBinCenter[i];
00913 if(E > 10) break;
00914 float num = signuehist->GetBinContent(i);
00915 float weight = 1.0;
00916 if(num > 0) weight =OscillateMatter(12,14,E); //,dm23,th13,delta,sign);
00917
00918 reweight->Fill(E, num*weight);
00919 }
00920
00921 currentVal[ClassType::nue] = reweight->GetSum();
00922 // std::cout<<dm23<<" "<<Ue32<<" "<<delta<<" "<<sign<<" "<<reweight->GetSum()<<std::endl;
00923 return reweight->GetSum();
00924 }
|
|
||||||||||||||||||||||||||||||||
|
Definition at line 1080 of file NueFCSensitivity.cxx. References fDeltaMS12, fOscCalc, OscCalc::Oscillate(), and OscCalc::SetOscParam(). 01083 {
01084 Double_t x[1] = {};
01085 x[0] = Energy;
01086 Double_t dm2_12 = fDeltaMS12*1e-5; //best fit SNO
01087 Double_t dm2_23 = dm2;
01088
01089
01090 Double_t par[9] = {0};
01091 par[0] = fBaseLine;
01092 par[1] = fTh23;
01093 par[2] = fTh12;
01094 par[3] = th13;
01095 par[4] = hierarchy*dm2_23;
01096 par[5] = dm2_12;
01097 par[6] = fDensity; //standard rock density
01098 par[7] = delta;
01099 par[8] = 1;
01100 if(nonOscNuFlavor < 0) par[8] = -1;
01101
01102 //std::cout<<"About to call "<<dm2<<" "<<ss13<<" "<<delta<<std::endl;
01103 fOscCalc.SetOscParam(par);
01104 return fOscCalc.Oscillate(nuFlavor, nonOscNuFlavor, Energy);
01105 }
|
|
||||||||||||||||
|
Definition at line 1107 of file NueFCSensitivity.cxx. References fOscCalc, OscCalc::Oscillate(), and OscCalc::SetOscParam(). Referenced by OscillateFile(), and OscillateHist(). 01109 {
01110
01111 if(nonOscNuFlavor > 0) fOscCalc.SetOscParam(OscPar::kNuAntiNu, 1);
01112 if(nonOscNuFlavor < 0) fOscCalc.SetOscParam(OscPar::kNuAntiNu, -1);
01113
01114 return fOscCalc.Oscillate(nuFlavor, nonOscNuFlavor, Energy);
01115 }
|
|
|
Definition at line 896 of file NueFCSensitivity.cxx. References currentVal, and signuenum. Referenced by Oscillate(). 00897 {
00898 // double Ue3 = TMath::Sin(t13);
00899
00900 //Assumed originally Oscillated to:
00901 // pow(TMath::Sin(theta23),2)*4.*UE32*(1-UE32)*pow(oscterm,2);
00902 currentVal[ClassType::nue] = signuenum*Ue32*(1-Ue32);
00903
00904 return currentVal[ClassType::nue];
00905 }
|
|
||||||||||||
|
Definition at line 1138 of file NueFCSensitivity.cxx. References NSCErrorParam::bg_systematic, NSCDataParam::end, fBaseLine, fDensity, NueSenseConfig::GetDelta(), NueSenseConfig::GetDeltaMS12(), NueSenseConfig::GetDeltaMS23(), NueSenseConfig::GetErrorConfig(), NueSenseConfig::GetNumberConfig(), NueSenseConfig::GetSinS2Th12(), NueSenseConfig::GetSinS2Th13(), NueSenseConfig::GetSinS2Th23(), nsc, NSCErrorParam::scale, NSCErrorParam::sig_systematic, and NSCDataParam::start. Referenced by WriteToFile(). 01139 {
01140 infotree = new TTree("OscPar","OscPar");
01141
01142 double Th23, Th12, dm2_12;
01143 dm2_12 = nsc->GetDeltaMS12()*1e-5;
01144 Th12 = nsc->GetSinS2Th12();
01145 Th23 = nsc->GetSinS2Th23();
01146
01147 infotree->Branch("L",&fBaseLine, "L/F");
01148 infotree->Branch("Sin2_2Theta23",&Th23, "Sin2_2Theta23/D");
01149 infotree->Branch("Sin2_2Theta12",&Th12, "Sin2_2Theta12/D");
01150 infotree->Branch("DeltaMS12",&dm2_12, "DeltaMS12/D");
01151 infotree->Branch("Density",&fDensity, "Density/D");
01152
01153 NSCDataParam DPst13 = nsc->GetSinS2Th13();
01154 NSCDataParam DPdelta = nsc->GetDelta();
01155 NSCDataParam DPdm23 = nsc->GetDeltaMS23();
01156
01157 infotree->Branch("DeltaMS23_start",&DPst13.start, "DeltaMS23_start/F");
01158 infotree->Branch("DeltaMS23_end",&DPst13.end, "DeltaMS23_end/F");
01159 infotree->Branch("Delta_start",&DPdelta.start, "Delta_start/F");
01160 infotree->Branch("Delta_end",&DPdelta.end, "Delta_end/F");
01161 infotree->Branch("Sin2_2Theta13_start",&DPdm23.start, "Sin2_2Theta13_start/F");
01162 infotree->Branch("Sin2_2Theta13_end",&DPdm23.end, "Sin2_2Theta13_end/F");
01163
01164 infotree->Fill();
01165
01166 errtree = new TTree("ErrPar","ErrPar");
01167
01168 double bgsys, sigsys, nc, numu, nue, nutau, bnue;
01169 errtree->Branch("BG_systematic",&bgsys,"BG_systematic/D");
01170 errtree->Branch("SIG_systematic",&sigsys, "SIG_systematic/D");
01171 errtree->Branch("nc_scale",&nc, "nc_scale/D");
01172 errtree->Branch("numu_scale",&numu, "numu_scale/D");
01173 errtree->Branch("nue_scale",&nue, "nue_scale/D");
01174 errtree->Branch("nutau_scale",&nutau, "nutau_scale/D");
01175 errtree->Branch("bnue_scale",&bnue, "bnue_scale/D");
01176
01177 for(int i = 0; i < nsc->GetNumberConfig(); i++){
01178 NSCErrorParam err = nsc->GetErrorConfig(i);
01179 bgsys = err.bg_systematic;
01180 sigsys = err.sig_systematic;
01181 nc = err.scale[ClassType::NC];
01182 numu = err.scale[ClassType::numu];
01183 bnue =err.scale[ClassType::bnue];
01184 nutau = err.scale[ClassType::nutau];
01185 nue = err.scale[ClassType::nue];
01186
01187 errtree->Fill();
01188 }
01189 }
|
|
||||||||||||||||
|
Definition at line 124 of file NueFCSensitivity.cxx. References NueSenseConfig::CheckConfig(), fMeasuredPOT, fMethod, fNumConfig, NueSenseConfig::GetDataMethod(), NueSenseConfig::GetNumberConfig(), Initialize(), nsc, RunFromGrid(), RunStandardApproach(), and WriteToFile(). 00125 {
00126 //Loading in the data
00127 nsc = new NueSenseConfig(input);
00128 if(!nsc->CheckConfig()) return;
00129 std::cout<<"Configuration file read and confirmed"<<std::endl;
00130
00131 fMeasuredPOT = outPOT;
00132 // if just numbers roll forward, if taking form a chain pull out
00133 // just enough information to do the oscillations, if hist grab it
00134
00135 fMethod = nsc->GetDataMethod();
00136 fNumConfig = nsc->GetNumberConfig();
00137
00138 Initialize(); //Load in any values and prepare listings
00139 std::cout<<"Initialization complete"<<std::endl;
00140
00141 if(fMethod != 4) RunStandardApproach();
00142 else RunFromGrid();
00143 //Now we have all the data points
00144 // now we write it out to file
00145 WriteToFile(output);
00146 }
|
|
|
Definition at line 220 of file NueFCSensitivity.cxx. References chi2i, chi2n, NSCDataParam::end, EvaluateOmega(), fDeltaEnd, fDeltaM32MapInvert, fDeltaM32MapNormal, fDeltaStart, fTheta23, nbgI, nbgN, nsigI, nsigN, and SetupGridRun(). Referenced by Run(). 00221 {
00222 SetupGridRun();
00223 std::cout<<"Setup is Complete"<<std::endl;
00224
00225 double dmDV = fDeltaM32MapNormal.begin()->first;
00226
00227 std::map<double, std::vector<Point> >::iterator delBeg = fDeltaM32MapNormal[dmDV].begin();
00228 std::map<double, std::vector<Point> >::iterator delEnd = fDeltaM32MapNormal[dmDV].end();
00229
00230 int ndCount = 0;
00231 double th23scale = 1.0;
00232
00233 if(fTheta23 > -100) th23scale = 2*TMath::Sin(fTheta23)*TMath::Sin(fTheta23);
00234
00235 while(delBeg != delEnd){
00236 double delta = delBeg->first;
00237 if(delta - fDeltaStart > -1e-4 && delta - fDeltaEnd < -1e-4){
00238 if(ndCount%10 == 0) std::cout<<"Running: "<<delta<<" "<<fDeltaStart<<" "<<fDeltaEnd<<std::endl;
00239
00240 for(unsigned int i = 0; i < delBeg->second.size(); i++){
00241 // at this point
00242 double ss2th = delBeg->second[i].th13 * th23scale;
00243
00244
00245 double signal = delBeg->second[i].nsignal;
00246 double bg = delBeg->second[i].nbg;
00247
00248 // if(ss2th < 0.426) continue;
00249 // std::cout<<ss2th<<" "<<signal<<" "<<std::endl;
00250 // For each
00251 for(int j = 0; j < fNumConfig; j++){
00252 double omega = EvaluateOmega(signal, bg, j);
00253 // double val = CalculateFitChi2(j, bg, signal);
00254 chi2n[j]->Fill(ss2th, delta, dmDV, omega);
00255 nsigN[j]->Fill(ss2th, delta, dmDV, signal);
00256 nbgN[j]->Fill(ss2th, delta, dmDV, bg);
00257 }
00258 }
00259 ndCount++;
00260 }
00261 delBeg++;
00262 }
00263
00264 std::cout<<"Finished Normal"<<std::endl;
00265
00266 dmDV = fDeltaM32MapInvert.begin()->first;
00267 delBeg = fDeltaM32MapInvert[dmDV].begin();
00268 delEnd = fDeltaM32MapInvert[dmDV].end();
00269
00270 ndCount = 0;
00271
00272 while(delBeg != delEnd){
00273 double delta = delBeg->first;
00274 if(delta - fDeltaStart > -1e-4 && delta - fDeltaEnd < -1e-4){
00275 for(unsigned int i = 0; i < delBeg->second.size(); i++){
00276 // at this point
00277 double ss2th = delBeg->second[i].th13 * th23scale;
00278 double signal = delBeg->second[i].nsignal;
00279 double bg = delBeg->second[i].nbg;
00280
00281 for(int j = 0; j < fNumConfig; j++){
00282 double omega = EvaluateOmega(signal, bg, j);
00283 // CalculateFitChi2(j, bg, signal);
00284 chi2i[j]->Fill(ss2th, delta, dmDV, omega);
00285 nsigI[j]->Fill(ss2th, delta, dmDV, signal);
00286 nbgI[j]->Fill(ss2th, delta, dmDV, bg);
00287 }
00288 }
00289 ndCount++;
00290 if(ndCount%10 == 0) std::cout<<"Finished inv delta = "<<delBeg->first<<std::endl;
00291 }
00292 delBeg++;
00293
00294 }
00295 }
|
|
|
Definition at line 148 of file NueFCSensitivity.cxx. References CalculateFitChi2(), chi2i, chi2n, count, NSCDataParam::end, fMethod, fOscCalc, fZeroValBg, fZeroValSig, NueSenseConfig::GetDelta(), NueSenseConfig::GetDeltaMS23(), GetPoint(), NueSenseConfig::GetSinS2Th13(), NSCDataParam::isfixed, nsc, Oscillate(), OscCalc::SetOscParam(), SetOscParamBase(), SetupChi2Histograms(), and NSCDataParam::start. Referenced by Run(). 00149 {
00150 NSCDataParam DPst13 = nsc->GetSinS2Th13();
00151 NSCDataParam DPdelta = nsc->GetDelta();
00152 NSCDataParam DPdm23 = nsc->GetDeltaMS23();
00153
00154 fZeroValBg = new float[fNumConfig];
00155 fZeroValSig = new float[fNumConfig];
00156
00157 //int total =
00158 SetupChi2Histograms(DPst13, DPdelta, DPdm23);
00159
00160 SetOscParamBase(0.0024, 0.0, 0, 1);
00161
00162 //Determine the number of background at Ue3 = 0
00163 Oscillate(0.0024, 0.0, 0, 1);
00164 for(int i = 0; i < fNumConfig; i++){
00165 fZeroValBg[i] = fZeroValSig[i] = 0.0;
00166 GetPoint(i, fZeroValBg[i], fZeroValSig[i]);
00167 std::cout<<"For configuration "<<i<<" starting with "
00168 <<fZeroValBg[i]<<", "<<fZeroValSig[i]<<" events."<<std::endl;
00169 }
00170
00171 //And now the big run over all the numbers
00172 bool d2,d3; //some bools to keep the loops right
00173 float bg, sig;
00174 double pi = 3.1415926;
00175 int count = 0;
00176
00177 for(double sins2t13 = DPst13.start; sins2t13 <= DPst13.end; sins2t13 += t13Step)
00178 {
00179 double Th13 = TMath::ASin(TMath::Sqrt(sins2t13))/2.;
00180 fOscCalc.SetOscParam(OscPar::kTh13, Th13);
00181
00182 d2 = DPdelta.isfixed;
00183 for(double delta = DPdelta.start; delta <= DPdelta.end || d2 ; delta += dStep)
00184 {
00185 d3 = DPdm23.isfixed;
00186
00187 fOscCalc.SetOscParam(OscPar::kDelta, delta*pi);
00188 for(double dm23 = DPdm23.start; dm23 <= DPdm23.end || d3; dm23+= dm23Step)
00189 {
00190 int sign = 1;
00191 fOscCalc.SetOscParam(OscPar::kDeltaM23, dm23*1e-3);
00192
00193 Oscillate(dm23*1e-3, Th13, delta*pi, sign); //Change the values
00194 for(int i = 0; i < fNumConfig; i++){
00195 GetPoint(i, bg, sig);
00196 float chi2 = CalculateFitChi2(i, bg, sig);
00197 chi2n[i]->Fill(sins2t13, delta, dm23, chi2);
00198 }
00199
00200 if(fMethod != NueSenseConfig::kAllNumbers){
00201 sign = -1;
00202 fOscCalc.SetOscParam(OscPar::kDeltaM23, sign*dm23*1e-3);
00203 Oscillate(dm23*1e-3, Th13, delta*pi, sign); //Change the values
00204
00205 for(int i = 0; i < fNumConfig; i++){
00206 GetPoint(i, bg, sig);
00207 float chi2 = CalculateFitChi2(i, bg, sig);
00208 chi2i[i]->Fill(sins2t13, delta, dm23, chi2);
00209 }
00210 }
00211 if(DPdm23.isfixed){ d3 = false; dm23 = DPdm23.end + 1; }
00212 count++;
00213 if(count%100000 == 0) std::cout<<"On iteration "<<count<<std::endl;
00214 }//end of dm23
00215 if(DPdelta.isfixed){ d2 = false; delta = DPdelta.end + 1; }
00216 }//end of delta
00217 }//end of sins2theta13
00218 }
|
|
||||||||||||
|
Definition at line 118 of file NueFCSensitivity.cxx. References fDeltaEnd, and fDeltaStart. 00119 {
00120 if(start > -1e-3) fDeltaStart = start;
00121 if(end > -1e-3) fDeltaEnd = end;
00122 }
|
|
|
Definition at line 34 of file NueFCSensitivity.h. References fObserved, and fObservedIsSet. 00034 {fObserved = in; fObservedIsSet = true;}
|
|
||||||||||||||||||||
|
Definition at line 1117 of file NueFCSensitivity.cxx. References fDeltaMS12, fOscCalc, and OscCalc::SetOscParam(). Referenced by RunStandardApproach(). 01118 {
01119
01120 Double_t dm2_12 = fDeltaMS12*1e-5; //best fit SNO
01121 Double_t dm2_23 = dm2;
01122
01123 Double_t par[9] = {0};
01124 par[OscPar::kL] = fBaseLine;
01125 par[OscPar::kTh23] = fTh23;
01126 par[OscPar::kTh12] = fTh12;
01127 par[OscPar::kTh13] = ss13; // TMath::ASin(TMath::Sqrt(ss2th13))/2.;
01128 par[OscPar::kDeltaM23] = hierarchy*dm2_23;
01129 par[OscPar::kDeltaM12] = dm2_12;
01130 par[OscPar::kDensity] = fDensity; //standard rock density
01131 par[OscPar::kDelta] = delta;
01132 par[OscPar::kNuAntiNu] = 1;
01133
01134 // std::cout<<"About to call "<<dm2<<" "<<ss13<<" "<<delta<<std::endl;
01135 fOscCalc.SetOscParam(par);
01136 }
|
|
|
Definition at line 40 of file NueFCSensitivity.h. References fTheta23. 00040 {fTheta23 = in; }
|
|
||||||||||||||||
|
Definition at line 989 of file NueFCSensitivity.cxx. References chi2i, chi2n, dm23Step, dStep, NSCDataParam::end, NSCDataParam::isfixed, nbgI, nbgN, nsigI, nsigN, NSCDataParam::start, and t13Step. Referenced by RunStandardApproach(). 00990 {
00991 chi2n = new TH3D*[fNumConfig];
00992 chi2i = new TH3D*[fNumConfig];
00993
00994 nsigN = new TH3D*[fNumConfig];
00995 nsigI = new TH3D*[fNumConfig];
00996 nbgN = new TH3D*[fNumConfig];
00997 nbgI = new TH3D*[fNumConfig];
00998
00999 int t13Bins = int((DPst13.end - DPst13.start)/t13Step) + 1;
01000 int delBins = int((DPdelta.end - DPdelta.start)/dStep) + 1;
01001 int dm23Bins = int((DPdm23.end - DPdm23.start)/dm23Step) + 1;
01002
01003 double xstart, xend, ystart, yend, zstart, zend;
01004 xstart = xend = ystart = yend = zstart = zend = 0;
01005
01006 if(DPst13.isfixed){ // i have no idea why you are running the code
01007 }else{
01008 xstart = DPst13.start - t13Step/2; xend = xstart + t13Bins*t13Step;
01009 }
01010 if(DPdelta.isfixed){
01011 ystart = DPdelta.start - 3*dStep/2;
01012 delBins = 5;
01013 }else{
01014 ystart = DPdelta.start - dStep/2;
01015 }
01016 yend = ystart + delBins*dStep;
01017
01018 if(DPdm23.isfixed){
01019 zstart = DPdm23.start - 3*dm23Step/2;
01020 dm23Bins = 5;
01021 }else{
01022 zstart = DPdm23.start - dm23Step/2;
01023 }
01024 zend = zstart + dm23Bins*dm23Step;
01025
01026 for(int i = 0; i < fNumConfig; i++){
01027 char temp[20];
01028 sprintf(temp, "chi2normal%d", i);
01029 chi2n[i] = new TH3D(temp, temp, t13Bins, xstart, xend, delBins,
01030 ystart, yend, dm23Bins, zstart, zend);
01031 sprintf(temp, "chi2inverted%d", i);
01032 chi2i[i] = new TH3D(temp, temp, t13Bins, xstart, xend, delBins,
01033 ystart, yend, dm23Bins, zstart, zend);
01034
01035 chi2n[i]->SetDirectory(0);
01036 chi2i[i]->SetDirectory(0);
01037
01038 sprintf(temp, "signormal%d", i);
01039 nsigN[i] = new TH3D(temp, temp, t13Bins, xstart, xend, delBins,
01040 ystart, yend, dm23Bins, zstart, zend);
01041
01042 sprintf(temp, "siginverted%d", i);
01043 nsigI[i] = new TH3D(temp, temp, t13Bins, xstart, xend, delBins,
01044 ystart, yend, dm23Bins, zstart, zend);
01045
01046 sprintf(temp, "bgnormal%d", i);
01047 nbgN[i] = new TH3D(temp, temp, t13Bins, xstart, xend, delBins,
01048 ystart, yend, dm23Bins, zstart, zend);
01049
01050 sprintf(temp, "bginverted%d", i);
01051 nbgI[i] = new TH3D(temp, temp, t13Bins, xstart, xend, delBins,
01052 ystart, yend, dm23Bins, zstart, zend);
01053 }
01054 std::cout<<"Chi2 Histograms created ("<<t13Bins<<", "<<delBins<<", "<<dm23Bins<<"): "
01055 <<t13Bins*delBins*dm23Bins<<" iterations to perform"<<std::endl;
01056 return t13Bins*delBins*dm23Bins;
01057 }
|
|
|
Definition at line 562 of file NueFCSensitivity.cxx. References chi2i, chi2n, fDeltaM32MapInvert, fDeltaM32MapNormal, fMeasuredPOT, fTheta23, NueSenseConfig::GetDataFiles(), NueSenseConfig::GetErrorConfig(), NueSenseConfig::GetPOT(), Point::nbg, nbgI, nbgN, nsc, nsigI, nsigN, Point::nsignal, and Point::th13. Referenced by RunFromGrid(). 00563 {
00564 std::vector<std::string> datafiles = nsc->GetDataFiles();
00565 float inPOT = nsc->GetPOT();
00566 float scale = fMeasuredPOT/inPOT;
00567
00568 NSCErrorParam err = nsc->GetErrorConfig(0);
00569 bool first = true;
00570
00571 double hold = 2.43e-3;
00572
00573 for(unsigned int i = 0; i < datafiles.size(); i++){
00574 std::cout<<"Openning file: "<<datafiles[i]<<std::endl;
00575 double th13, delta, mass, ni, bg[5], sig, dummy;
00576 std::ifstream ins(datafiles[i].c_str());
00577
00578 ins>>th13>>delta>>mass>>ni>>bg[0]>>bg[1]>>bg[2]>>bg[3]>>sig>>dummy;
00579 hold = mass;
00580 while(!ins.eof()){
00581 Point temp;
00582 double temp2 = TMath::Sin(2*th13);
00583
00584 // bg[0] *= 1.0 + err.scale[ClassType::NC];
00585 // bg[1] *= 1.0 + err.scale[ClassType::numu];
00586 // bg[2] *= 1.0 + err.scale[ClassType::bnue];
00587 // bg[3] *= 1.0 + err.scale[ClassType::nutau];
00588 // sig *= 1.0 + err.scale[ClassType::nue];
00589 dummy = bg[0]+bg[1]+bg[2]+bg[3]+sig;
00590 temp.th13 = temp2*temp2;
00591 temp.nsignal = sig*scale;
00592 temp.nbg = (dummy-sig)*scale;
00593
00594 if(i == 0 && first){ std::cout<< temp.nbg<<std::endl; first = false; }
00595
00596 if(ni > 0) fDeltaM32MapNormal[mass][delta].push_back(temp);
00597 else fDeltaM32MapInvert[mass][delta].push_back(temp);
00598
00599 ins>>th13>>delta>>mass>>ni>>bg[0]>>bg[1]>>bg[2]>>bg[3]>>sig>>dummy;
00600 }
00601 ins.clear();
00602 }
00603
00604
00605 std::map<double, std::vector<Point> >::iterator delBeg = fDeltaM32MapNormal[hold].begin();
00606 std::map<double, std::vector<Point> >::iterator delEnd = fDeltaM32MapNormal[hold].end();
00607
00608 std::vector<double> deltaM2Pos;
00609 std::map<double, std::map<double, std::vector<Point> > >::iterator dmBeg = fDeltaM32MapNormal.begin();
00610 std::map<double, std::map<double, std::vector<Point> > >::iterator dmEnd = fDeltaM32MapNormal.end();
00611
00612 while(dmBeg != dmEnd){
00613 deltaM2Pos.push_back(dmBeg->first);
00614 dmBeg++;
00615 }
00616
00617 std::vector<double> deltaPos;
00618 while(delBeg != delEnd){
00619 deltaPos.push_back(delBeg->first);
00620 delBeg++;
00621 }
00622
00623 std::vector<double> sin22th13Pos;
00624 std::vector<Point>::iterator thBeg = fDeltaM32MapNormal[hold][0].begin();
00625 std::vector<Point>::iterator thEnd = fDeltaM32MapNormal[hold][0].end();
00626
00627 while(thBeg != thEnd){
00628 sin22th13Pos.push_back(thBeg->th13);
00629 thBeg++;
00630 }
00631
00632 sort(deltaM2Pos.begin(), deltaM2Pos.end());
00633 sort(deltaPos.begin(), deltaPos.end());
00634 sort(sin22th13Pos.begin(), sin22th13Pos.end());
00635
00636 int nDM2 = deltaM2Pos.size();
00637 int nDelta = deltaPos.size();
00638 int nTh13 = sin22th13Pos.size();
00639
00640 if(nDelta <= 1){
00641 std::cout<<"Only zero/one delta value??"<<std::endl;
00642 return;
00643 }
00644 if(nTh13 <= 1){
00645 std::cout<<"Only zero/one theta value??"<<std::endl;
00646 return;
00647 }
00648
00649 double* deltaM2Array = new double[nDM2+1];
00650 double* deltaArray = new double[nDelta+1];
00651 double* sinthArray = new double[nTh13+1];
00652
00653 double offset = 0.0;
00654 for(int i = 1; i < nDelta; i++){
00655 double prev = deltaPos[i-1];
00656 double curr = deltaPos[i];
00657 offset = (curr - prev)/2.0;
00658 if(i == 1) deltaArray[0] = prev - offset;
00659 deltaArray[i] = curr - offset;
00660 }
00661 deltaArray[nDelta] = deltaArray[nDelta-1] + 2*offset;
00662
00663 offset = 0.0;
00664 double th23scale = 1.0;
00665 if(fTheta23 > -100) th23scale = 2*TMath::Sin(fTheta23)*TMath::Sin(fTheta23);
00666
00667 for(int i = 1; i < nTh13; i++){
00668 double prev = sin22th13Pos[i-1]*th23scale;
00669 double curr = sin22th13Pos[i]*th23scale;
00670 offset = (curr - prev)/2.0;
00671 if(i == 1) sinthArray[0] = prev - offset;
00672 sinthArray[i] = curr - offset;
00673 }
00674 sinthArray[nTh13] = sinthArray[nTh13-1] + 2*offset;
00675
00676 offset = 0.00002;
00677 deltaM2Array[0] = deltaM2Pos[0] - 0.00001;
00678 deltaM2Array[1] = deltaM2Pos[0] + 0.00001;
00679 /* for(int i = 1; i < nDM2; i++){
00680 double prev = deltaM2Pos[i-1];
00681 double curr = deltaM2Pos[i];
00682 offset = (curr - prev)/2.0;
00683 if(i == 1) deltaM2Array[0] = prev - offset;
00684 deltaM2Array[i] = curr - offset;
00685 }*/
00686 // deltaM2Array[nDM2] = deltaM2Array[0] + 2*offset;
00687
00688 TString n1 = "Chi2HistN";
00689 TString n2 = "Chi2HistI";
00690
00691 chi2n = new TH3D*[fNumConfig];
00692 chi2i = new TH3D*[fNumConfig];
00693 nsigN = new TH3D*[fNumConfig];
00694 nsigI = new TH3D*[fNumConfig];
00695 nbgN = new TH3D*[fNumConfig];
00696 nbgI = new TH3D*[fNumConfig];
00697
00698 for(int i = 0; i < fNumConfig; i++){
00699 char temp[20];
00700 sprintf(temp, "chi2normal%d", i);
00701 chi2n[i] = new TH3D(temp, temp, nTh13, sinthArray, nDelta, deltaArray, nDM2, deltaM2Array);
00702 sprintf(temp, "chi2inverted%d", i);
00703 chi2i[i] = new TH3D(temp, temp, nTh13, sinthArray, nDelta, deltaArray, nDM2, deltaM2Array);
00704
00705 chi2n[i]->SetDirectory(0);
00706 chi2i[i]->SetDirectory(0);
00707 sprintf(temp, "signormal%d", i);
00708 nsigN[i] = new TH3D(temp, temp, nTh13, sinthArray, nDelta, deltaArray, nDM2, deltaM2Array);
00709
00710 sprintf(temp, "siginverted%d", i);
00711 nsigI[i] = new TH3D(temp, temp, nTh13, sinthArray, nDelta, deltaArray, nDM2, deltaM2Array);
00712
00713 sprintf(temp, "bgnormal%d", i);
00714 nbgN[i] = new TH3D(temp, temp, nTh13, sinthArray, nDelta, deltaArray, nDM2, deltaM2Array);
00715
00716 sprintf(temp, "bginverted%d", i);
00717 nbgI[i] = new TH3D(temp, temp, nTh13, sinthArray, nDelta, deltaArray, nDM2, deltaM2Array);
00718
00719 nsigN[i]->SetDirectory(0);
00720 nsigI[i]->SetDirectory(0);
00721 nbgN[i]->SetDirectory(0);
00722 nbgI[i]->SetDirectory(0);
00723 }
00724 std::cout<<"Chi2 Histograms created ("<<nTh13<<", "<<nDelta<<", "<<nDM2<<"): Running Grid Method"<<std::endl;
00725
00726 //So now I have built all the histograms as appropriate
00727 // - now I just loop over the data
00728
00729 }
|
|
|
Definition at line 89 of file NueFCSensitivity.cxx. References FindBestFit(), fObserved, and min. 00090 {
00091
00092 double results[3];
00093 fObserved = 35;
00094 FindBestFit(35, 1, 26.5, 4, 1, 0.07, results);
00095
00096 std::cout<<results[0]<<" "<<results[1]<<" "<<results[2]<<std::endl;
00097
00098 TMinuit* min = gMinuit;
00099 min->DefineParameter(0,"bfit",35,0.01, 0,60);
00100 min->DefineParameter(1,"kfit",1,0.01, 0,22);
00101
00102 FindBestFit(35, 1, 26.5, 4, 1, 0.07, results);
00103
00104 std::cout<<results[0]<<" "<<results[1]<<" "<<results[2]<<std::endl;
00105
00106 min->DefineParameter(0,"bfit",35,3, 0,60);
00107 min->DefineParameter(1,"kfit",1,3, 0,22);
00108
00109 FindBestFit(35, 1, 26.5, 4, 1, 0.07, results);
00110
00111 std::cout<<results[0]<<" "<<results[1]<<" "<<results[2]<<std::endl;
00112
00113
00114
00115 }
|
|
|
Definition at line 1059 of file NueFCSensitivity.cxx. References chi2i, chi2n, nbgI, nbgN, nsigI, nsigN, and ProduceTree(). Referenced by Run(). 01060 {
01061 TFile out(file.c_str(), "RECREATE");
01062 out.cd();
01063
01064 for(int i = 0; i < fNumConfig; i++){
01065 chi2n[i]->Write();
01066 chi2i[i]->Write();
01067 nsigN[i]->Write();
01068 nbgN[i]->Write();
01069 nsigI[i]->Write();
01070 nbgI[i]->Write();
01071 }
01072 TTree *info, *err;
01073
01074 ProduceTree(info, err);
01075 info->Write();
01076 err->Write();
01077 out.Close();
01078 }
|
|
|
Definition at line 95 of file NueFCSensitivity.h. Referenced by RunFromGrid(), RunStandardApproach(), SetupChi2Histograms(), SetupGridRun(), and WriteToFile(). |
|
|
Definition at line 94 of file NueFCSensitivity.h. Referenced by RunFromGrid(), RunStandardApproach(), SetupChi2Histograms(), SetupGridRun(), and WriteToFile(). |
|
|
Definition at line 79 of file NueFCSensitivity.h. Referenced by GetPoint(), Initialize(), OscillateFile(), OscillateHist(), and OscillateNumber(). |
|
|
Definition at line 104 of file NueFCSensitivity.h. Referenced by SetupChi2Histograms(). |
|
|
Definition at line 103 of file NueFCSensitivity.h. Referenced by SetupChi2Histograms(). |
|
|
Definition at line 88 of file NueFCSensitivity.h. Referenced by ProduceTree(). |
|
|
Definition at line 74 of file NueFCSensitivity.h. Referenced by Initialize(), and OscillateHist(). |
|
|
Definition at line 124 of file NueFCSensitivity.h. Referenced by RunFromGrid(), and SetDeltaRange(). |
|
|
Definition at line 113 of file NueFCSensitivity.h. Referenced by RunFromGrid(), and SetupGridRun(). |
|
|
Definition at line 112 of file NueFCSensitivity.h. Referenced by RunFromGrid(), and SetupGridRun(). |
|
|
Definition at line 107 of file NueFCSensitivity.h. Referenced by Initialize(), OscillateMatter(), and SetOscParamBase(). |
|
|
Definition at line 123 of file NueFCSensitivity.h. Referenced by RunFromGrid(), and SetDeltaRange(). |
|
|
Definition at line 110 of file NueFCSensitivity.h. Referenced by Initialize(), and ProduceTree(). |
|
|
Definition at line 121 of file NueFCSensitivity.h. Referenced by MinimizationFunction(). |
|
|
Definition at line 77 of file NueFCSensitivity.h. Referenced by Initialize(), Run(), and SetupGridRun(). |
|
|
Definition at line 90 of file NueFCSensitivity.h. Referenced by Initialize(), Oscillate(), Run(), and RunStandardApproach(). |
|
|
Definition at line 91 of file NueFCSensitivity.h. Referenced by Run(). |
|
|
Definition at line 117 of file NueFCSensitivity.h. Referenced by SetObserved(), and TestCode(). |
|
|
Definition at line 118 of file NueFCSensitivity.h. Referenced by SetObserved(). |
|
|
Definition at line 115 of file NueFCSensitivity.h. Referenced by OscillateMatter(), RunStandardApproach(), and SetOscParamBase(). |
|
|
Definition at line 120 of file NueFCSensitivity.h. Referenced by MinimizationFunction(). |
|
|
Definition at line 108 of file NueFCSensitivity.h. Referenced by Initialize(). |
|
|
Definition at line 109 of file NueFCSensitivity.h. Referenced by Initialize(). |
|
|
Definition at line 73 of file NueFCSensitivity.h. Referenced by RunFromGrid(), SetTheta23(), and SetupGridRun(). |
|
|
Definition at line 82 of file NueFCSensitivity.h. Referenced by CalculateChi2(), CalculateFitChi2(), and RunStandardApproach(). |
|
|
Definition at line 83 of file NueFCSensitivity.h. Referenced by CalculateChi2(), CalculateFitChi2(), and RunStandardApproach(). |
|
|
Definition at line 76 of file NueFCSensitivity.h. Referenced by LoadEventsFromFile(), and OscillateFile(). |
|
|
Definition at line 100 of file NueFCSensitivity.h. Referenced by RunFromGrid(), SetupChi2Histograms(), SetupGridRun(), and WriteToFile(). |
|
|
Definition at line 99 of file NueFCSensitivity.h. Referenced by RunFromGrid(), SetupChi2Histograms(), SetupGridRun(), and WriteToFile(). |
|
|
Definition at line 92 of file NueFCSensitivity.h. Referenced by CalculateChi2(), CalculateFitChi2(), EvaluateOmega(), GetPoint(), Initialize(), LoadEventsFromFile(), ProduceTree(), Run(), RunStandardApproach(), and SetupGridRun(). |
|
|
Definition at line 98 of file NueFCSensitivity.h. Referenced by RunFromGrid(), SetupChi2Histograms(), SetupGridRun(), and WriteToFile(). |
|
|
Definition at line 97 of file NueFCSensitivity.h. Referenced by RunFromGrid(), SetupChi2Histograms(), SetupGridRun(), and WriteToFile(). |
|
|
Definition at line 71 of file NueFCSensitivity.h. Referenced by Initialize(), and OscillateHist(). |
|
|
Definition at line 70 of file NueFCSensitivity.h. Referenced by Initialize(), and OscillateHist(). |
|
|
Definition at line 69 of file NueFCSensitivity.h. Referenced by Initialize(), and OscillateNumber(). |
|
|
Definition at line 102 of file NueFCSensitivity.h. Referenced by SetupChi2Histograms(). |
1.3.9.1