00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #include "NCUtils/Extrapolation/NCExtrapolationNS.h"
00012 #include "NCUtils/Extrapolation/NCEnergyBin.h"
00013 #include "NCUtils/Cuts/NCAnalysisCutsNC.h"
00014 #include "MessageService/MsgService.h"
00015 #include "AnalysisNtuples/ANtpAnalysisInfo.h"
00016 #include "AnalysisNtuples/ANtpBeamInfo.h"
00017 #include "AnalysisNtuples/ANtpRecoInfo.h"
00018 #include "AnalysisNtuples/ANtpHeaderInfo.h"
00019 #include "AnalysisNtuples/ANtpTruthInfoBeam.h"
00020
00021 #include "TH2.h"
00022 #include "TSystem.h"
00023 #include "TDirectory.h"
00024 #include "TMath.h"
00025 #include <cassert>
00026 #include <fstream>
00027
00028 using namespace NCType;
00029
00030
00031 const int n1 = 21;
00032 const int n0 = 0;
00033 const double les = 0.80;
00034 const double hes = 1.20;
00035 const int n1d = 20;
00036 const double size_e=(hes-les)/n1d;
00037
00038 const int nc1 = 21;
00039 const int nc0 = 0;
00040 const double lnc = 0.20;
00041 const double hnc = 1.80;
00042 const int ncd = 20;
00043 const double size_nc=(hnc-lnc)/ncd;
00044
00045 const int nr1 = 11;
00046 const int nr0 = 10;
00047 const double lnr = 0.95;
00048 const double hnr = 1.05;
00049 const int nrd = 20;
00050 const double size_nr=(hnr-lnr)/nrd;
00051
00052
00053 const double signorm = NCType::kParameterSigmas[NCType::kNormalization];
00054 const double siges = NCType::kParameterSigmas[NCType::kShowerEnergy];
00055 const double signc = NCType::kParameterSigmas[NCType::kNCBackground];
00056
00057
00058 const double kmass_f = 52.97*486*0.0254*7.874+52.97*484*0.011*1.19879;
00059 const double kmass_n_cc = 3.141592654*1.*1.*(1.710210*7.874+0.746800*1.20317);
00060 const double kmass_n = 2.4930144*(1.710210*7.874+0.746800*1.20317)*(4.7368-1.728)/4.;
00061 const double kscalef = 1.00;
00062
00063 CVSID("$Id: NCExtrapolationNS.cxx,v 1.43 2008/08/25 16:23:44 bckhouse Exp $");
00064
00065
00066 NCExtrapolationNS::NCExtrapolationNS() :
00067 NCExtrapolation::NCExtrapolation()
00068 {
00069 }
00070
00071
00072 NCExtrapolationNS::NCExtrapolationNS(NCAnalysisUtils *utils,
00073 std::map<Int_t,double>& dataNear,
00074 std::map<Int_t,double>& mcNear,
00075 std::map<Int_t,double>& dataFar,
00076 std::map<Int_t,double>& mcFar,
00077 bool useCC,
00078 bool useNC) :
00079 NCExtrapolation(utils, dataNear, mcNear, dataFar, mcFar, useCC, useNC)
00080 {
00081
00082 fchisqall = new TH2F("chisqall","",
00083 NCType::kNumUMu3SqrBins,
00084 NCType::kUMu3SqrStart,
00085 NCType::kUMu3SqrEnd,
00086 NCType::kNumDeltaMSqrBins,
00087 NCType::kDeltaMSqrStart,
00088 NCType::kDeltaMSqrEnd);
00089 fchisqallnc = new TH2F("chisqallnc","",
00090 NCType::kNumUS3SqrBins,
00091 NCType::kUS3SqrStart,
00092 NCType::kUS3SqrEnd,
00093 NCType::kNumDeltaMSqrBins,
00094 NCType::kDeltaMSqrStart,
00095 NCType::kDeltaMSqrEnd);
00096
00097 }
00098
00099
00100 NCExtrapolationNS::~NCExtrapolationNS()
00101 {
00102 }
00103
00104
00105
00106
00107
00108 void NCExtrapolationNS::Prepare(const Registry& r)
00109 {
00110 MSG("NCExtrapolationNS", Msg::kWarning) << "NCExtrapolationNS::Prepare(const Registry& r)" << endl;
00111 int tmpb;
00112 int tmpi;
00113 double tmpd;
00114 const char* tmps;
00115
00116 NCExtrapolation::Prepare(r);
00117
00118 if(r.Get("Decay", tmpi)) fDecay = tmpi;
00119 if(r.Get("DoMC", tmpi)) fDoMC = tmpi;
00120 if(r.Get("BeamFileName", tmps)) fBeamFileName = tmps;
00121 if(r.Get("BeamFileNamePostShutDown", tmps)) fBeamFileNamePostShutDown = tmps;
00122 if(r.Get("TrueCorrectionHistNear", tmps)) fTrueCorrectionHistNear = tmps;
00123 if(r.Get("TrueCorrectionHistFar", tmps)) fTrueCorrectionHistFar = tmps;
00124 if(r.Get("FarTrueCorrectionFile", tmps)) fFarTrueCorrectionFile = tmps;
00125 if(r.Get("NearTrueCorrectionFile", tmps)) fNearTrueCorrectionFile = tmps;
00126
00127 TString topDir="NCUtils/data";
00128 TString base="";
00129 base=getenv("SRT_PRIVATE_CONTEXT");
00130 if(base!="" && base!="."){
00131
00132 TString path = base + "/" + topDir;
00133 void *dir_ptr = gSystem->OpenDirectory(path);
00134 if(!dir_ptr) base=getenv("SRT_PUBLIC_CONTEXT");
00135 }
00136
00137 else base=getenv("SRT_PUBLIC_CONTEXT");
00138
00139 if(base==""){
00140 MSG("NCExtrapolationNS",Msg::kFatal) << "NCExtrapolationNS: No SRT_PUBLIC_CONTEXT set"
00141 << endl;
00142 assert(false);
00143 }
00144 topDir += "/";
00145 topDir.Prepend(base+"/");
00146 MSG("NCExtrapoationNS", Msg::kInfo)
00147 << "NCExtrapoationNS reading files from: " << topDir << endl;
00148
00149 fBeamFileName.Prepend(topDir);
00150 fBeamFileNamePostShutDown.Prepend(topDir);
00151 fFarTrueCorrectionFile.Prepend(topDir);
00152 fNearTrueCorrectionFile.Prepend(topDir);
00153
00154 MakeHistograms();
00155
00156 tmpb = 0;
00157 tmpi = 0;
00158 tmpd = 0.;
00159 tmps = "";
00160
00161 return;
00162 }
00163
00164
00165 void NCExtrapolationNS::MakeHistograms()
00166 {
00167 fbinvect[0]=0.;
00168 fbinvect[1]=0.5;
00169 for(int i=2;i<200;i++){
00170 fbinvect[i]=0.25+(i)*0.25;
00171 if(i==199) fbinvect[i]=200.;
00172 }
00173
00174
00175 TDirectory *savedir = gDirectory;
00176
00177 TFile beamfile(fBeamFileName,"READ");
00178 fbmat_norm_r2 = dynamic_cast<TH2D *>(beamfile.Get("bmat_norm_r2"));
00179 fbmat_norm_r2->SetDirectory(savedir);
00180 TFile beamfile_post(fBeamFileNamePostShutDown,"READ");
00181 fbmat_norm_r2_post = dynamic_cast<TH2D *>(beamfile.Get("bmat_norm_r2"));
00182 fbmat_norm_r2_post->SetDirectory(savedir);
00183
00184 savedir->cd();
00185
00186
00187 fSingleMCNearNuCC = new TH1D("singleMCNearNuCC", "", fnbins, fbinvect);
00188 fSingleMCFarNuCC = new TH1D("singleMCFarNuCC", "", fnbins, fbinvect);
00189 fSingleMCNearAllCC = new TH1D("singleMCNearAllCC", "", fnbins, fbinvect);
00190 fSingleMCFarAllCC = new TH1D("singleMCFarAllCC", "", fnbins, fbinvect);
00191 fMCNearNuCC = new TH1D("mcNearNuCC", "", fnbins, fbinvect);
00192 fMCFarNuCC = new TH1D("mcFarNuCC", "", fnbins, fbinvect);
00193 fMCNearAllCC = new TH1D("mcNearAllCC", "", fnbins, fbinvect);
00194 fMCFarAllCC = new TH1D("mcFarAllCC", "", fnbins, fbinvect);
00195
00196
00197 fcorall = new TH1D("fcorall","",fnbins,fbinvect);
00198 fcorfall = new TH1D("fcorfall","",fnbins,fbinvect);
00199
00200
00201
00202
00203
00204
00205
00206
00207 fTrueND = new TH1F("trueND", "", fnbins, fbinvect);
00208 fTrueNDAfterRT = new TH1F("trueNDAfterRT", "", fnbins, fbinvect);
00209 fTrueNDAfterRT_noeffcorr = new TH1F("trueNDAfterRT_noeffcorr", "", fnbins, fbinvect);
00210 fRecoND = new TH1F("recoND", "", fnbins, fbinvect);
00211 fTrueFD = new TH1F("trueFD", "", fnbins, fbinvect);
00212 fTrueFD_nc = new TH1F("trueFD_nc", "", fnbins, fbinvect);
00213 fRecoFD = new TH1F("recoFD", "", fnbins, fbinvect);
00214 fRecoFD_nc = new TH1F("recoFD_nc", "", fnbins, fbinvect);
00215 fTrueFDAfterBM = new TH1F("trueFDAfterBM", "", fnbins, fbinvect);
00216 fTrueFDAfterBM_noacccorr = new TH1F("trueFDAfterBM_noacccorr", "", fnbins, fbinvect);
00217 fTrueFDAfterBM_posteffcorr = new TH1F("trueFDAfterBM_posteffcorr", "", fnbins, fbinvect);
00218 fTrueFDAfterOsc = new TH1F("trueFDAfterOsc", "", fnbins, fbinvect);
00219 fRecoFDAfterBM = new TH1F("recoFDAfterBM", "", fnbins, fbinvect);
00220
00221
00222
00223 fallccmc = new TH1F("allccmc","",fnbins,fbinvect);
00224 fallccmcf = new TH1F("allccmcf","",fnbins,fbinvect);
00225 fallncmcf = new TH1F("allncmcf","",fnbins,fbinvect);
00226
00227
00228
00229
00230
00231
00232
00233
00234 feffic = new TH1F("effic", "",fnbins, fbinvect);
00235 fefficnc = new TH1F("efficnc", "",fnbins, fbinvect);
00236 fefficbg = new TH1F("efficb", "",fnbins, fbinvect);
00237 fefficncbg = new TH1F("efficncb","",fnbins, fbinvect);
00238 fratccnc = new TH1F("ratccnc", "",fnbins, fbinvect);
00239 feffic_numcheck = new TH1F("effic_numcheck", "",fnbins, fbinvect);
00240
00241
00242 ftruerecomatt = new TH2F("truerecomatt", "", fnbins, fbinvect, fnbins, fbinvect);
00243 ftruerecomatbt = new TH2F("truerecomatbt", "", fnbins, fbinvect, fnbins, fbinvect);
00244 feffict = new TH1F("effict", "", fnbins, fbinvect);
00245 fefficbgt = new TH1F("efficbt", "", fnbins, fbinvect);
00246 frattau = new TH1F("rattau", "", fnbins, fbinvect);
00247
00248
00249 frecotruemat = new TH2F("recotruemat","",fnbins,fbinvect,fnbins,fbinvect);
00250 fpurityn = new TH1F("purityn","",fnbins,fbinvect);
00251 fefficiencyn = new TH1F("efficiencyn","",fnbins,fbinvect);
00252
00253
00254
00255
00256
00257
00258
00259
00260 feffic_post = new TH1F("effic_post", "",fnbins,fbinvect);
00261 fefficnc_post = new TH1F("efficnc_post", "",fnbins,fbinvect);
00262 fefficbg_post = new TH1F("efficb_post", "",fnbins,fbinvect);
00263 fefficncbg_post = new TH1F("efficncb_post","",fnbins,fbinvect);
00264 fratccnc_post = new TH1F("ratccnc_post", "",fnbins,fbinvect);
00265
00266 ftruerecomatt_post = new TH2F("truerecomatt_post", "",fnbins,fbinvect,fnbins,fbinvect);
00267 ftruerecomatbt_post = new TH2F("truerecomatbt_post", "",fnbins,fbinvect,fnbins,fbinvect);
00268 feffict_post = new TH1F("effict_post", "",fnbins,fbinvect);
00269 fefficbgt_post = new TH1F("efficbt_post", "",fnbins,fbinvect);
00270 frattau_post = new TH1F("rattau_post","",fnbins,fbinvect);
00271
00272
00273 frecotruemat_post = new TH2F("recotruemat_post","",fnbins,fbinvect,fnbins,fbinvect);
00274 fpurityn_post = new TH1F("purityn_post","",fnbins,fbinvect);
00275 fefficiencyn_post = new TH1F("efficiencyn_post","",fnbins,fbinvect);
00276
00277
00278
00279 fnoosctrue = new TH1F("noosctrue","",fnbins,fbinvect);
00280 fnooscreco = new TH1F("nooscreco","",fnbins,fbinvect);
00281 fnooscreconc = new TH1F("nooscreconc","",fnbins,fbinvect);
00282 fnooscrecotau = new TH1F("nooscrecotau","",fnbins,fbinvect);
00283
00284
00285 fnoosctrue_ncfit = new TH1F("noosctrue_ncfit","",fnbins,fbinvect);
00286 fnooscreco_ncfit = new TH1F("nooscreco_ncfit","",fnbins,fbinvect);
00287 fnooscrecocc_ncfit = new TH1F("nooscrecocc_ncfit","",fnbins,fbinvect);
00288 fnooscrecotau_ncfit = new TH1F("nooscrecotau_ncfit","",fnbins,fbinvect);
00289
00290
00291
00292 fnoosctrue_post = new TH1F("noosctrue_post","",fnbins,fbinvect);
00293 fnooscreco_post = new TH1F("nooscreco_post","",fnbins,fbinvect);
00294 fnooscreconc_post = new TH1F("nooscreconc_post","",fnbins,fbinvect);
00295 fnooscrecotau_post = new TH1F("nooscrecotau_post","",fnbins,fbinvect);
00296
00297
00298 fnoosctrue_ncfit_post = new TH1F("noosctrue_ncfit_post","",fnbins,fbinvect);
00299 fnooscreco_ncfit_post = new TH1F("nooscreco_ncfit_post","",fnbins,fbinvect);
00300 fnooscrecocc_ncfit_post = new TH1F("nooscrecocc_ncfit_post","",fnbins,fbinvect);
00301 fnooscrecotau_ncfit_post = new TH1F("nooscrecotau_ncfit_post","",fnbins,fbinvect);
00302
00303
00304 fnooscar = new TH1F("nooscar","",fnbins,fbinvect);
00305 fnooscar_ccselcc = new TH1F("nooscar_ccselcc","",fnbins,fbinvect);
00306 fnooscar_ccselnc = new TH1F("nooscar_ccselnc","",fnbins,fbinvect);
00307 fnooscar_ncselnc = new TH1F("nooscar_ncselnc","",fnbins,fbinvect);
00308 fnooscar_ncselcc = new TH1F("nooscar_ncselcc","",fnbins,fbinvect);
00309
00310 fnooscar_ccselcct = new TH1F("nooscar_ccselcct","",fnbins,fbinvect);
00311 fnooscar_ccselnct = new TH1F("nooscar_ccselnct","",fnbins,fbinvect);
00312
00313
00314 fnooscar_post = new TH1F("nooscar_post","",fnbins,fbinvect);
00315 fnooscar_ccselcc_post = new TH1F("nooscar_ccselcc_post","",fnbins,fbinvect);
00316 fnooscar_ccselnc_post = new TH1F("nooscar_ccselnc_post","",fnbins,fbinvect);
00317 fnooscar_ncselnc_post = new TH1F("nooscar_ncselnc_post","",fnbins,fbinvect);
00318 fnooscar_ncselcc_post = new TH1F("nooscar_ncselcc_post","",fnbins,fbinvect);
00319
00320 fnooscar_ccselcct_post = new TH1F("nooscar_ccselcct_post","",fnbins,fbinvect);
00321 fnooscar_ccselnct_post = new TH1F("nooscar_ccselnct_post","",fnbins,fbinvect);
00322
00323
00324
00325 fbestfitreco = new TH1F("bestfitreco","",fnbins,fbinvect);
00326 fbestfitreconc = new TH1F("bestfitreconc","",fnbins,fbinvect);
00327 fbestfitrecotau = new TH1F("bestfitrecotau","",fnbins,fbinvect);
00328
00329
00330
00331 fbestfitreco_ncfit = new TH1F("bestfitreco_ncfit","",fnbins,fbinvect);
00332 fbestfitrecocc_ncfit = new TH1F("bestfitrecocc_ncfit","",fnbins,fbinvect);
00333 fbestfitrecotau_ncfit = new TH1F("bestfitrecotau_ncfit","",fnbins,fbinvect);
00334
00335
00336
00337 fbestfitreco_post = new TH1F("bestfitreco_post","",fnbins,fbinvect);
00338 fbestfitreconc_post = new TH1F("bestfitreconc_post","",fnbins,fbinvect);
00339 fbestfitrecotau_post = new TH1F("bestfitrecotau_post","",fnbins,fbinvect);
00340
00341
00342
00343 fbestfitreco_ncfit_post = new TH1F("bestfitreco_ncfit_post","",fnbins,fbinvect);
00344 fbestfitrecocc_ncfit_post = new TH1F("bestfitrecocc_ncfit_post","",fnbins,fbinvect);
00345 fbestfitrecotau_ncfit_post = new TH1F("bestfitrecotau_ncfit_post","",fnbins,fbinvect);
00346
00347
00348 ftemptrue = new TH1F("temptrue","",fnbins,fbinvect);
00349 ftempreco = new TH1F("tempreco","",fnbins,fbinvect);
00350 ftempreconc = new TH1F("tempreconc","",fnbins,fbinvect);
00351 ftemprecotau = new TH1F("temprecotau","",fnbins,fbinvect);
00352
00353
00354 ftemptrue_ncfit = new TH1F("temptrue_ncfit","",fnbins,fbinvect);
00355 ftempreco_ncfit = new TH1F("tempreco_ncfit","",fnbins,fbinvect);
00356 ftemprecocc_ncfit = new TH1F("temprecocc_ncfit","",fnbins,fbinvect);
00357 ftemprecotau_ncfit = new TH1F("temprecotau_ncfit","",fnbins,fbinvect);
00358
00359
00360 ftemptrue_post = new TH1F("temptrue_post","",fnbins,fbinvect);
00361 ftempreco_post = new TH1F("tempreco_post","",fnbins,fbinvect);
00362 ftempreconc_post = new TH1F("tempreconc_post","",fnbins,fbinvect);
00363 ftemprecotau_post = new TH1F("temprecotau_post","",fnbins,fbinvect);
00364
00365
00366 ftemptrue_ncfit_post = new TH1F("temptrue_ncfit_post","",fnbins,fbinvect);
00367 ftempreco_ncfit_post = new TH1F("tempreco_ncfit_post","",fnbins,fbinvect);
00368 ftemprecocc_ncfit_post = new TH1F("temprecocc_ncfit_post","",fnbins,fbinvect);
00369 ftemprecotau_ncfit_post = new TH1F("temprecotau_ncfit_post","",fnbins,fbinvect);
00370
00371 int nbins1 = 15;
00372 if(fDoMC) nbins1 = 39;
00373
00374 float binvect1[40];
00375 binvect1[0]=0;
00376 binvect1[1]=1.;
00377 for (int i=2; i < nbins1+1; i++){
00378 if(fDoMC > 0 && i <= 19) binvect1[i]=0.5+(i)*0.5;
00379 if(fDoMC > 0 && i > 19) binvect1[i]=10.+(i-19)*1.;
00380 if(fDoMC < 1 && i <= 10) binvect1[i]=(i)*1.;
00381 if(fDoMC < 1 && i > 10) binvect1[i]=10.+(i-10)*2.;
00382 }
00383
00384 fbestfitrecotau_rebinned = new TH1F("bestfitrecotau_rebinned","",
00385 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00386 fbestfitreco_rebinned = new TH1F("bestfitreco_rebinned","",
00387 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00388 fbestfitreconc_rebinned = new TH1F("bestfitreconc_rebinned","",
00389 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00390 foscreco_rebinned = new TH1F("oscreco_rebinned","",
00391 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00392 ftempreco_rebinned = new TH1F("tempreco_rebinned","",
00393 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00394 ftempreconc_rebinned = new TH1F("tempreconc_rebinned","",
00395 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00396 fnooscreco_rebinned = new TH1F("nooscreco_rebinned","",
00397 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00398 fnooscreconc_rebinned = new TH1F("nooscreconc_rebinned","",
00399 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00400 fnooscrecotau_rebinned = new TH1F("nooscrecotau_rebinned","",
00401 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00402
00403 fbestfitrecotau_rebinned_post = new TH1F("bestfitrecotau_rebinned_post","",
00404 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00405 fbestfitreco_rebinned_post = new TH1F("bestfitreco_rebinned_post","",
00406 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00407 fbestfitreconc_rebinned_post = new TH1F("bestfitreconc_rebinned_post","",
00408 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00409 foscreco_rebinned_post = new TH1F("oscreco_rebinned_post","",
00410 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00411 ftempreco_rebinned_post = new TH1F("tempreco_rebinned_post","",
00412 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00413 ftempreconc_rebinned_post = new TH1F("tempreconc_rebinned_post","",
00414 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00415 fnooscreco_rebinned_post = new TH1F("nooscreco_rebinned_post","",
00416 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00417 fnooscreconc_rebinned_post = new TH1F("nooscreconc_rebinned_post","",
00418 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00419 fnooscrecotau_rebinned_post = new TH1F("nooscrecotau_rebinned_post","",
00420 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00421
00422
00423 fbestfitrecotau_ncfit_rebinned = new TH1F("bestfitrecotau_ncfit_rebinned","",
00424 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00425 fbestfitreco_ncfit_rebinned = new TH1F("bestfitreco_ncfit_rebinned","",
00426 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00427 fbestfitrecocc_ncfit_rebinned = new TH1F("bestfitrecocc_ncfit_rebinned","",
00428 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00429 foscreco_ncfit_rebinned = new TH1F("oscreco_ncfit_rebinned","",
00430 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00431 ftempreco_ncfit_rebinned = new TH1F("tempreco_ncfit_rebinned","",
00432 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00433 ftemprecocc_ncfit_rebinned = new TH1F("temprecocc_ncfit_rebinned","",
00434 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00435 fnooscreco_ncfit_rebinned = new TH1F("nooscreco_ncfit_rebinned","",
00436 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00437 fnooscrecocc_ncfit_rebinned = new TH1F("nooscrecocc_ncfit_rebinned","",
00438 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00439 fnooscrecotau_ncfit_rebinned = new TH1F("nooscrecotau_ncfit_rebinned","",
00440 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00441
00442
00443 fbestfitrecotau_ncfit_rebinned_post = new TH1F("bestfitrecotau_ncfit_rebinned_post","",
00444 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00445 fbestfitreco_ncfit_rebinned_post = new TH1F("bestfitreco_ncfit_rebinned_post","",
00446 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00447 fbestfitrecocc_ncfit_rebinned_post = new TH1F("bestfitrecovc_rebinned_post","",
00448 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00449 foscreco_ncfit_rebinned_post = new TH1F("oscreco_ncfit_rebinned_post","",
00450 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00451 ftempreco_ncfit_rebinned_post = new TH1F("tempreco_ncfit_rebinned_post","",
00452 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00453 ftemprecocc_ncfit_rebinned_post = new TH1F("temprecocc_ncfit_rebinned_post","",
00454 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00455 fnooscreco_ncfit_rebinned_post = new TH1F("nooscreco_ncfit_rebinned_post","",
00456 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00457 fnooscrecocc_ncfit_rebinned_post = new TH1F("nooscrecocc_ncfit_rebinned_post","",
00458 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00459 fnooscrecotau_ncfit_rebinned_post = new TH1F("nooscrecotau_ncfit_rebinned_post","",
00460 NCType::kNumEnergyBinsFar, NCType::kEnergyBinsFar);
00461
00462 return;
00463 }
00464
00465
00466
00467 void NCExtrapolationNS::AddEvent(ANtpHeaderInfo *headerInfo,
00468 ANtpBeamInfo *beamInfo,
00469 ANtpRecoInfo *recoInfo,
00470 ANtpAnalysisInfo *analysisInfo,
00471 ANtpTruthInfoBeam *truthInfo,
00472 NCType::ERunType runType,
00473 bool useMCAsData,
00474 NCType::EFileType fileType)
00475 {
00476
00477
00478
00479
00480
00481 if(beamInfo->beamType != BeamType::ToZarko(BeamType::kL010z185i))
00482 return;
00483
00484 if(headerInfo->detector == (int)Detector::kNear)
00485 AddNearEvent(headerInfo, beamInfo, recoInfo, analysisInfo,
00486 truthInfo, runType, useMCAsData, fileType);
00487
00488 if(headerInfo->detector == (int)Detector::kFar)
00489 AddFarEvent(headerInfo, beamInfo, recoInfo, analysisInfo,
00490 truthInfo, runType, useMCAsData, fileType);
00491
00492 return;
00493 }
00494
00495
00496 void NCExtrapolationNS::AddNearEvent(ANtpHeaderInfo *headerInfo,
00497 ANtpBeamInfo *beamInfo,
00498 ANtpRecoInfo *recoInfo,
00499 ANtpAnalysisInfo *analysisInfo,
00500 ANtpTruthInfoBeam *truthInfo,
00501 NCType::ERunType runType,
00502 bool useMCAsData,
00503 NCType::EFileType fileType)
00504 {
00505
00506
00507
00508
00509
00510
00511 if(headerInfo->dataType == (int)SimFlag::kMC && !useMCAsData){
00512 NCAnalysisCutsNC cuts;
00513 cuts.SetInfoObjects(headerInfo, beamInfo, 0, 0, 0, truthInfo);
00514 if( cuts.InFiducialVolumeTrue() && headerInfo->events != 0
00515 && truthInfo->interactionType == 1
00516 && TMath::Abs(truthInfo->nuFlavor) == 14){
00517
00518 if(truthInfo->nuFlavor > 0) fallccmc->Fill(truthInfo->nuEnergy, recoInfo->weight);
00519
00520
00521
00522
00524
00525
00527
00528
00529
00530
00531 }
00532
00533 }
00534
00535
00536 NCExtrapolation::AddEvent(headerInfo, beamInfo, recoInfo, analysisInfo,
00537 truthInfo, runType, useMCAsData, fileType);
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558 return;
00559 }
00560
00561
00562
00563
00564
00565
00566
00567
00568 void NCExtrapolationNS::AddSingleMCEventsToHistogram(Detector::Detector_t det)
00569 {
00570
00571
00572
00573
00574
00575
00576
00577 vector<int> repeated;
00578
00579
00580 for(uint i = 0; i < fTrueNuEnergy.size(); ++i){
00581 repeated.push_back(-1);
00582 uint duplicatesCtr = 0;
00583
00584 for(uint j = i+1; j < fTrueNuEnergy.size(); ++j)
00585 {
00586 if(fTrueNuEnergy[i] == fTrueNuEnergy[j])
00587 duplicatesCtr++;
00588
00589 }
00590
00591 repeated[i] = duplicatesCtr;
00592
00593 MSG("NCExtrapolationNS", Msg::kInfo) << "i= " << i
00594 << ", repeated[i] = " << repeated[i]
00595 << ", duplicatesCtr = " << duplicatesCtr
00596 <<", energy = " << fTrueNuEnergy[i]
00597 << endl;
00598
00599 }
00600
00601
00602
00603
00604 for(uint i = 0; i < fTrueNuEnergy.size(); ++i){
00605
00606 if(det == Detector::kNear){
00607 if(repeated[i] ==0) fSingleMCNearAllCC->Fill(fTrueNuEnergy[i]);
00608 fMCNearAllCC->Fill(fTrueNuEnergy[i]);
00609 if(fTrueNuFlavor[i] == 14){
00610 if(repeated[i] == 0) fSingleMCNearNuCC->Fill(fTrueNuEnergy[i]);
00611 fMCNearNuCC->Fill(fTrueNuEnergy[i]);
00612 }
00613 }
00614
00615 else if(det == Detector::kFar){
00616 if(repeated[i] ==0) fSingleMCFarAllCC->Fill(fTrueNuEnergy[i]);
00617 fSingleMCFarAllCC->Fill(fTrueNuEnergy[i]);
00618 if(fTrueNuFlavor[i] == 14){
00619 if(repeated[i] == 0) fSingleMCFarNuCC->Fill(fTrueNuEnergy[i]);
00620 fMCFarNuCC->Fill(fTrueNuEnergy[i]);
00621 }
00622 }
00623 }
00624
00625
00626 fTrueNuEnergy.clear();
00627 fTrueNuFlavor.clear();
00628 fTrueNuComplete.clear();
00629
00630 return;
00631 }
00632
00633
00634 void NCExtrapolationNS::AddFarEvent(ANtpHeaderInfo *headerInfo,
00635 ANtpBeamInfo *beamInfo,
00636 ANtpRecoInfo *recoInfo,
00637 ANtpAnalysisInfo *analysisInfo,
00638 ANtpTruthInfoBeam *truthInfo,
00639 NCType::ERunType runType,
00640 bool useMCAsData,
00641 NCType::EFileType fileType)
00642 {
00643 MAXMSG("NCExtrapolationNS", Msg::kInfo, 1) << "AddFarEvent " << endl;
00644
00645
00646 if(headerInfo->dataType == (int)SimFlag::kMC && !useMCAsData){
00647
00648
00649
00650
00651 if(headerInfo->newSnarl && headerInfo->events!=0)
00652 {
00653
00654 if(truthInfo->nuFlavor == 14)
00655 {
00656 if(truthInfo->interactionType == 1) fallccmcf->Fill(truthInfo->nuEnergy, recoInfo->weight);
00657
00659
00660
00662
00663
00664
00665
00666
00667
00668 }
00669
00670
00671 if(truthInfo->interactionType == 0) fallncmcf->Fill(truthInfo->nuEnergy, recoInfo->weight);
00672 }
00673
00674 }
00675
00676
00677 NCExtrapolation::AddEvent(headerInfo, beamInfo, recoInfo, analysisInfo,
00678 truthInfo, runType, useMCAsData, fileType);
00679
00680 return;
00681 }
00682
00683
00684
00685
00686 void NCExtrapolationNS::PrepareNearDetector()
00687 {
00688
00689
00690
00691
00692 cout <<"In PrepareNearDetector" << endl;
00693
00694
00695
00696
00697 TFile *corr = new TFile("/afs/fnal.gov/files/data/minos/d79/llhsu/eventFindingEff/norm_fix_near_uDST_strip.root","READ");
00698 fcor = (TH1F*)(corr->Get("cor_neu"));
00699
00700
00701 fallccmc->Multiply(fcor);
00702 return;
00703 }
00704
00705
00706
00707
00708 void NCExtrapolationNS::PredictSpectrum()
00709 {
00710
00711 cout <<"In NCExtrapolationNS::PredictSpectrum!" << endl;
00712
00713
00714
00715
00716 TFile *corrf = new TFile("$MINOS_DATA/d84/niki/mad_cedar_daikon/near/correction_plots/far/norm_fix_far.root","READ");
00717 fcorf = (TH1F*)(corrf->Get("cor_neuf"));
00718
00719
00720 NCType::ERunType runI = NCType::kRunI;
00721 NCType::ERunType runII = runI;
00722 int farBeamI = NCExtrapolation::FindBeamIndex(Detector::kFar, BeamType::kL010z185i, runI);
00723 int farBeamII = NCExtrapolation::FindBeamIndex(Detector::kFar, BeamType::kL010z185i, runII);
00724 int nearBeamI = NCExtrapolation::FindBeamIndex(Detector::kNear, BeamType::kL010z185i, runI);
00725 int nearBeamII = NCExtrapolation::FindBeamIndex(Detector::kNear, BeamType::kL010z185i, runII);
00726 if(farBeamI > 100 || farBeamII > 100
00727 || nearBeamI > 100 || nearBeamII > 100){
00728 MSG("NCExtrapolationNS", Msg::kWarning) << "could not find "
00729 << "FD/ND beam in vector - bail"
00730 << " far: " << farBeamI << " " << farBeamII
00731 << " near: " << nearBeamI << " " << nearBeamII
00732 << endl;
00733 return;
00734 }
00735
00736
00737
00738
00739
00740
00741
00742 TH1F *datsel = new TH1F("datsel", "", fnbins, fbinvect);
00743 TH1F *datselpost = new TH1F("datselpost", "", fnbins, fbinvect);
00744 fdatselFD = new TH1F("datselstoreFD", "", fnbins, fbinvect);
00745 fdatselFD_nc = new TH1F("datselstoreFD_nc", "", fnbins, fbinvect);
00746
00747
00748 FillDataHistogramFromEnergyBins(nearBeamI, NCType::kCC, datsel);
00749 FillDataHistogramFromEnergyBins(nearBeamII, NCType::kCC, datselpost);
00750 FillDataHistogramFromEnergyBins(farBeamI, NCType::kCC, fdatselFD);
00751 FillDataHistogramFromEnergyBins(farBeamI, NCType::kNC, fdatselFD_nc);
00752
00753
00754 FillDataHistogramFromEnergyBins(farBeamI, NCType::kCC, foscreco_rebinned);
00755 FillDataHistogramFromEnergyBins(farBeamII, NCType::kCC, foscreco_rebinned_post);
00756 FillDataHistogramFromEnergyBins(farBeamI, NCType::kNC, foscreco_ncfit_rebinned);
00757 FillDataHistogramFromEnergyBins(farBeamII, NCType::kNC, foscreco_ncfit_rebinned_post);
00758
00759
00760
00761
00762 double potNear = fBeams[nearBeamI].GetDataPOT();
00763 double potFar = fBeams[farBeamI].GetDataPOT();
00764
00765 fNearExposureScale = potFar/potNear;
00766 cout <<"Scaling datsel!!!!!!! scale factor = " << fNearExposureScale
00767 <<"\npotFar = " << potFar
00768 <<"\npotNear = " << potNear
00769 << endl;
00770 fdatselND = (TH1F*)datsel->Clone("datselstoreND");
00771 datsel->Scale(fNearExposureScale);
00772 datselpost->Scale(fNearExposureScale);
00773
00774 double scale_factNC = 1.;
00775 double nc_shift = 1.;
00776 double enu_shift = 1.;
00777
00778
00779 float dmsqmin = 0.;
00780 float s2tmin = 0.;
00781 float s2smin = 0.;
00782 float chisqmin = 9999.;
00783 float norm_min = 9999.;
00784 float enu_shiftmin= 9999.;
00785 float nc_shiftmin = 9999.;
00786 int best_enu = 9999;
00787 int best_nc = 9999;
00788
00789 int ndf = 39 + 39 - 3;
00790 if(fDoMC < 1) ndf=15+15-3;
00791
00792 vector <vector <vector <double> > > chisqarraymins;
00793 chisqarraymins.resize(NCType::kNumDeltaMSqrBins);
00794 for(int i = 0; i < NCType::kNumDeltaMSqrBins; i++){
00795 chisqarraymins[i].resize(NCType::kNumUS3SqrBins);
00796 for(int j = 0; j < NCType::kNumUS3SqrBins; j++){
00797 chisqarraymins[i][j].resize(NCType::kNumUMu3SqrBins);
00798 for(int k = 0; k < NCType::kNumUMu3SqrBins; k++){
00799 chisqarraymins[i][j][k] = 1.e12;
00800 }
00801 }
00802 }
00803
00804 float dmsqfit = 0.;
00805 float s2tfit = 0.;
00806 float s2sfit = 0.;
00807
00808 TString math;
00809
00810 TString noosc;
00811
00812 noosctruearray.resize(n1);
00813 noosctruearraypost.resize(n1);
00814
00815
00816 for(int i = 0; i < n1; ++i){
00817 math = TString::Format("truerecomat%d",i);
00818 matarray.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00819 math = TString::Format("truerecomatnc%d",i);
00820 matarraync.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00821 math = TString::Format("truerecomatb%d",i);
00822 matarrayb.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00823 math = TString::Format("truerecomatncb%d",i);
00824 matarrayncb.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00825
00826 math = TString::Format("truerecomatt%d",i);
00827 matarrayt.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00828 math = TString::Format("truerecomatbt%d",i);
00829 matarraybt.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00830
00831 math = TString::Format("truerecomat_post%d",i);
00832 matarray_post.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00833 math = TString::Format("truerecomatnc_post%d",i);
00834 matarraync_post.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00835 math = TString::Format("truerecomatb_post%d",i);
00836 matarrayb_post.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00837 math = TString::Format("truerecomatncb_post%d",i);
00838 matarrayncb_post.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00839
00840 math = TString::Format("truerecomatt_post%d",i);
00841 matarrayt_post.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00842 math = TString::Format("truerecomatbt_post%d",i);
00843 matarraybt_post.push_back(new TH2F(math,"",fnbins,fbinvect,fnbins,fbinvect));
00844
00845 for(int j = 0; j < nc1; ++j){
00846
00847 noosc = TString::Format("noosctrue_%d_%d",i,j);
00848 noosctruearray[i].push_back(new TH1F(noosc,"",fnbins,fbinvect));
00849 noosc = TString::Format("noosctrue_post_%d_%d",i,j);
00850 noosctruearraypost[i].push_back(new TH1F(noosc,"",fnbins,fbinvect));
00851 }
00852 }
00853
00854
00855 GetEff(feffic, fefficnc, fefficbg, fefficncbg, fratccnc, frattau, farBeamI);
00856 GetEff(feffic_post, fefficnc_post, fefficbg_post, fefficncbg_post, fratccnc_post, frattau_post, farBeamII);
00857 if(fDoMC==0){
00858 GetEfft(feffict, fefficbgt, farBeamI);
00859 GetEfft(feffict_post, fefficbgt_post, farBeamII);
00860 }
00861
00862 double purbin = 0.;
00863 double newbin = 0.;
00864
00865
00866 int start = n1d/2;
00867 int end = start + 1;
00868 int startnc = ncd/2;
00869 int endnc = startnc + 1;
00870
00871 if(fSystematicsToUse[NCType::kShowerEnergy]){
00872 start = n0;
00873 end = n1;
00874 }
00875 if(fSystematicsToUse[NCType::kNCBackground]){
00876 startnc = nc0;
00877 endnc = nc1;
00878 }
00879
00880
00881
00882
00883 for(int ii = start; ii < end; ii++){
00884
00885 enu_shift = les+ii*size_e;
00886 MSG("NCExtrapolationNS", Msg::kInfo) << " enu shift " << enu_shift << endl;
00887 cout <<"First Shower Loop!" << endl;
00888
00889 RecoTrueEffPur(matarray[ii], matarraync[ii], matarrayb[ii],
00890 matarrayncb[ii], enu_shift, farBeamI);
00891
00892 if(fDoMC==0)
00893 RecoTrueEffPurTau(matarrayt[ii], matarraybt[ii], enu_shift, farBeamI);
00894
00895 RecoTruePur(frecotruemat, fpurityn, fefficiencyn, enu_shift, nearBeamI);
00896
00897 for(int gg = 0; gg < fnbins; gg++){
00898 purbin = fpurityn->GetBinContent(gg+1);
00899 newbin = purbin/(purbin+scale_factNC*(1-purbin));
00900 fpurityn->SetBinContent(gg+1,newbin);
00901 }
00902
00903
00904
00905
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920 for(int jj = startnc; jj < endnc; jj++){
00921 nc_shift = lnc+jj*size_nc;
00922 MSG("NCExtrapolationNS", Msg::kInfo) << " nc shift " << nc_shift << endl;
00923 cout <<"NC loop within first shower loop" << endl;
00924
00925
00926 for(int gg = 0; gg < fnbins; gg++){
00927 purbin = fpurityn->GetBinContent(gg+1);
00928 newbin = purbin/(purbin+nc_shift*(1-purbin));
00929 fpurityn->SetBinContent(gg+1,newbin);
00930 }
00931
00932
00933 Int_t bypass = 1;
00934 if(bypass == 1)
00935 {
00936 cout <<"Bypass 3!" << endl;
00937 TFile* f = new TFile("/local/scratch04/llhsu/tempFiles/L010z185i/extrapolation_fn_NS_16kND488FD_ncfvcor.root","READ");
00938 TString noosctruename = TString::Format("noosctrue_%d_%d", ii, jj);
00939 TH1F* tempHisto = (TH1F*)f->Get("plotsBeamMatrix/"+noosctruename);
00940 noosctruename += "_clone";
00941 noosctruearray[ii][jj] = (TH1F*)tempHisto->Clone(noosctruename);
00942 noosctruearray[ii][jj]->SetDirectory(0);
00943
00944
00945
00946
00947
00948 cout <<"Done 3!" << endl;
00949 }
00950 else
00951 {
00952
00953
00954 MakePrediction(datsel, fpurityn, fefficiencyn,
00955 frecotruemat, noosctruearray[ii][jj], runI);
00956
00957 }
00958
00959
00960
00961
00962
00963
00964
00965
00966
00967
00968
00969
00970 for(int gg = 0; gg < fnbins; gg++){
00971 purbin = fpurityn->GetBinContent(gg+1);
00972 newbin = (nc_shift*purbin)/(1-purbin+nc_shift*purbin);
00973 fpurityn->SetBinContent(gg+1,newbin);
00974
00975
00976
00977
00978 }
00979 }
00980
00981
00982
00983
00984
00985
00986
00987
00988
00989 }
00990
00991 MSG("NCExtrapolationNS", Msg::kInfo) << " DONE EFF PUR RECO->TRUE NEAR FAR " << endl;
00992
00993 float chisqtemp1 = 1.e12;
00994
00995 float chisqtemp3 = 1.e12;
00996
00997 float chisqmin_norm = 1.e12;
00998
00999 float nc_min = 9999.;
01000 float sh_min = 9999.;
01001 double norm = 1.;
01002 int decayMode = 1;
01003 int decayModeNC = 0;
01004 int decayModeTau = 11;
01005 if(fDecay == 1){
01006 decayMode = -1;
01007 decayModeNC = -1;
01008 decayModeTau = -11;
01009 }
01010
01011 MSG("NCExtrapolationNS", Msg::kInfo) << " outside loop SHOWER Start "
01012 << start << " END " << end
01013 << " NC Start " << startnc
01014 << " END " << endnc << endl;
01015
01016
01017 int maxsin = 1;
01018 int maxdm = 1;
01019 int maxfs = 1;
01020 vector<double> sinSqrDeltaMSqr;
01021
01022
01023
01024 for(int ii = start; ii < end; ii++){
01025 enu_shift = les + ii*size_e;
01026 MSG("NCExtrapolationNS", Msg::kDebug) << " Shower Loop " << ii << endl;
01027 cout <<"starting second shower loop, enu_shift = " << enu_shift << endl;
01028
01029 for(int jj = startnc; jj < endnc; jj++){
01030 nc_shift = lnc + jj*size_nc;
01031 MSG("NCExtrapolationNS", Msg::kDebug) << " NC Loop " << jj
01032 << " nc_shift " << nc_shift << endl;
01033 cout <<"nc loop within second shower loop, nc_shift = " << nc_shift << endl;
01034
01035
01036
01037
01038
01039 fnooscar->Reset();
01040 fnooscar_post->Reset();
01041 fnooscar_ccselcc->Reset();
01042 fnooscar_ccselcc_post->Reset();
01043 fnooscar_ccselnc->Reset();
01044 fnooscar_ccselnc_post->Reset();
01045 fnooscar_ncselnc->Reset();
01046 fnooscar_ncselnc_post->Reset();
01047 fnooscar_ncselcc->Reset();
01048 fnooscar_ncselcc_post->Reset();
01049
01050 fnooscar_ccselcct->Reset();
01051 fnooscar_ccselcct_post->Reset();
01052 fnooscar_ccselnct->Reset();
01053 fnooscar_ccselnct_post->Reset();
01054
01055
01056 fnooscar->Add(fallccmcf);
01057
01058 fTrueFDAfterBM->Add(noosctruearray[ii][jj]);
01059
01060
01061
01062 fnooscar_ccselcc->Multiply(fnooscar,feffic);
01063 fTrueFDAfterBM_posteffcorr=(TH1F*)fnooscar_ccselcc->Clone("trueFDAfterBM_posteffcorr");
01064 fnooscar_ccselnc->Multiply(fnooscar,fefficbg);
01065
01066 fnooscar_ncselnc->Multiply(fnooscar,fratccnc);
01067 fnooscar_ncselcc->Multiply(fnooscar,fratccnc);
01068 fnooscar_ncselnc->Multiply(fefficnc);
01069 fnooscar_ncselcc->Multiply(fefficncbg);
01070
01071
01072
01073
01074
01075
01076
01077
01078
01079
01080
01081 if(fDoMC==0){
01082
01083 fnooscar_ccselcct->Multiply(fnooscar,frattau);
01084 fnooscar_ccselcct->Multiply(feffict);
01085 fnooscar_ccselnct->Multiply(fnooscar,frattau);
01086 fnooscar_ccselnct->Multiply(fefficbgt);
01087
01088
01089
01090
01091
01092
01093 }
01094
01095
01096 for(int i = 0; i < maxdm; i++){
01097 dmsqfit = (1.*i + 0.5)*NCType::kDeltaDeltaMSqr+NCType::kDeltaMSqrStart;
01098 dmsqfit *= 1.e-3;
01099
01100 MSG("NCExtrapolationNS", Msg::kInfo) << " on Delta m^2 = " << dmsqfit
01101 << " chi^2 min = " << chisqmin << endl;
01102 cout <<"Inside deltamsq loop! dmsqfit = " << dmsqfit << endl;
01103
01104 sinSqrDeltaMSqr.clear();
01105
01106
01107
01108
01109 for(int dmb = 0; dmb < fnbins; ++dmb){
01110 sinSqrDeltaMSqr.push_back(TMath::Power(TMath::Sin(NCType::k127*dmsqfit
01111 *NCType::kBaseLineFar/fnooscreco->GetBinCenter(dmb+1)),2.));
01112 }
01113
01114 for(int j = 0; j < maxsin; j++){
01115 MSG("NCExtrapolationNS", Msg::kDebug) << " In sin loop " << j << endl;
01116 s2tfit = (1.*j)*NCType::kDeltaUMu3Sqr+NCType::kUMu3SqrStart;
01117 cout <<"Inside sinsq loop! s2tfit = " << s2tfit << endl;
01118
01119 for(int k = 0; k < maxfs; k++){
01120 s2sfit = (1.*k + 0.5)*NCType::kDeltaUS3Sqr+NCType::kUS3SqrStart;
01121 cout <<"Inside fsterile loop! s2sfit = " << s2sfit << endl;
01122
01123
01124
01125
01126
01127
01128 oscweight(sinSqrDeltaMSqr,s2tfit,s2sfit,fnooscar_ccselcc,ftemptrue,14,NCType::kCC);
01129 fTrueFDAfterOsc = (TH1F*)ftemptrue->Clone("trueFDAfterOsc");
01130
01131 truetoreco(ftemptrue,*ftempreco,matarray[ii]);
01132 fRecoFDAfterBM->Add(ftempreco);
01133 ftemptrue->Reset();
01134
01135
01136 oscweight(sinSqrDeltaMSqr,s2tfit,s2sfit,fnooscar_ncselcc,ftemptrue,14,NCType::kNC);
01137 truetoreco(ftemptrue,*ftempreconc,matarrayncb[ii]);
01138 ftempreconc->Scale(nc_shift);
01139 ftemptrue->Reset();
01140
01141
01142 oscweight(sinSqrDeltaMSqr,s2tfit,s2sfit,fnooscar_ncselnc,ftemptrue,14,NCType::kNC);
01143 truetoreco(ftemptrue,*ftempreco_ncfit,matarraync[ii]);
01144 ftempreco_ncfit->Scale(nc_shift);
01145 ftemptrue->Reset();
01146
01147
01148 oscweight(sinSqrDeltaMSqr,s2tfit,s2sfit,fnooscar_ccselnc,ftemptrue,14,NCType::kCC);
01149 truetoreco(ftemptrue,*ftemprecocc_ncfit,matarrayb[ii]);
01150 ftemptrue->Reset();
01151
01152
01153 if(fDoMC==0){
01154
01155
01156
01157 oscweight(sinSqrDeltaMSqr,s2tfit,s2sfit,fnooscar_ccselcct,ftemptrue,16,NCType::kCC);
01158 truetoreco(ftemptrue,*ftemprecotau,matarrayt[ii]);
01159 ftemptrue->Reset();
01160
01161
01162
01163 oscweight(sinSqrDeltaMSqr,s2tfit,s2sfit,fnooscar_ccselnct,ftemptrue,16,NCType::kNC);
01164 truetoreco(ftemptrue,*ftemprecotau_ncfit,matarraybt[ii]);
01165 ftemptrue->Reset();
01166 }
01167
01168
01169
01170
01171
01172
01173
01174
01175
01176
01177
01178
01179
01180
01181
01182
01183
01184
01185
01186
01187
01188
01189
01190
01191
01192
01193
01194
01195
01196
01197
01198
01199
01200
01201
01202
01203
01204
01205
01206
01207
01208
01209
01210
01211 chisqmin_norm = 1.e12;
01212
01213 for(int kk = nr0; kk < nr1; kk++){
01214 norm = lnr + kk*size_nr;
01215
01216 ftempreconc->Scale(norm);
01217 ftempreco->Scale(norm);
01218
01219
01220 if(fDoMC==0){
01221 ftemprecotau->Scale(norm);
01222
01223 }
01224
01225 ftemprecocc_ncfit->Scale(norm);
01226 ftempreco_ncfit->Scale(norm);
01227
01228
01229 if(fDoMC==0){
01230 ftemprecotau_ncfit->Scale(norm);
01231
01232 }
01233
01234 ftempreco->Add(ftempreconc);
01235
01236
01237 ftempreco_ncfit->Add(ftemprecocc_ncfit);
01238
01239 if(fDoMC == 0){
01240 ftempreco->Add(ftemprecotau);
01241
01242 ftempreco_ncfit->Add(ftemprecotau_ncfit);
01243
01244 }
01245
01246
01247 Rebin(ftempreco, *ftempreco_rebinned);
01248 Rebin(ftempreconc, *ftempreconc_rebinned);
01249
01250
01251 Rebin(ftempreco_ncfit, *ftempreco_ncfit_rebinned);
01252 Rebin(ftemprecocc_ncfit, *ftemprecocc_ncfit_rebinned);
01253
01254
01255
01256
01257 chisqtemp1 = chisq(foscreco_rebinned, ftempreco_rebinned, ftempreconc_rebinned);
01258 chisqtemp1 += ( ((1.-norm)/signorm)*((1.-norm)/signorm)
01259 +((1.-enu_shift)/siges)*((1.-enu_shift)/siges)
01260 +((1.-nc_shift)/signc)*((1.-nc_shift)/signc) );
01261
01262
01263
01264
01265 chisqtemp3 = chisq(foscreco_ncfit_rebinned, ftempreco_ncfit_rebinned, ftemprecocc_ncfit_rebinned);
01266
01267
01268
01269
01270
01271
01272
01273
01274 chisqtemp1 += chisqtemp3;
01275
01276 if(chisqtemp1 < chisqmin_norm) chisqmin_norm = chisqtemp1;
01277
01278 if(chisqtemp1 < chisqmin){
01279 chisqmin = chisqtemp1;
01280 dmsqmin = dmsqfit;
01281 s2tmin = s2tfit;
01282 s2smin = s2sfit;
01283 norm_min = norm;
01284 nc_min = nc_shift;
01285 sh_min = enu_shift;
01286 best_enu = ii;
01287 best_nc = jj;
01288 }
01289
01290 if(fDoMC == 0){
01291 ftempreco->Add(ftemprecotau,-1);
01292 ftemprecotau->Scale(1./norm);
01293
01294
01295 ftempreco_ncfit->Add(ftemprecotau_ncfit,-1);
01296 ftemprecotau_ncfit->Scale(1./norm);
01297
01298
01299 }
01300 ftempreco->Add(ftempreconc,-1);
01301 ftempreco->Scale(1./norm);
01302 ftempreconc->Scale(1./norm);
01303
01304
01305
01306 ftempreco_ncfit->Add(ftemprecocc_ncfit,-1);
01307 ftempreco_ncfit->Scale(1./norm);
01308 ftemprecocc_ncfit->Scale(1./norm);
01309
01310
01311
01312
01313 }
01314
01315 chisqarraymins[i][k][j] = chisqmin_norm;
01316
01317 MSG("NCExtrapolationNS", Msg::kInfo) << " (dm^2, sin^2 2theta, fsterile) = ("
01318 << dmsqfit << "," << s2tfit << ","
01319 << s2sfit << ") chi^2 = "
01320 << chisqmin_norm << endl;
01321 }
01322 }
01323 }
01324
01325
01326 ftempreconc->Scale(1./nc_shift);
01327 ftempreco_ncfit->Scale(1./nc_shift);
01328
01329
01330
01331 }
01332 }
01333
01335
01336
01337 BestUMu3Sqr() = s2tmin;
01338 BestUS3Sqr() = s2smin;
01339 BestDeltaMSqr() = dmsqmin;
01340 fMinChiSqr = chisqmin;
01341
01342 cout <<"Bestfit values stored as Oscillation Parameters!: "
01343 <<"\nUMu3SqrTheta = " << BestUMu3Sqr()
01344 <<"\nUS3Sqr = " << BestUS3Sqr()
01345 <<"\nDeltaMSqr = " << BestDeltaMSqr()
01346 <<"\nMinChiSqr = " << fMinChiSqr
01347 << endl;
01348
01349
01350
01351
01352 NCExtrapolation::FillDeltaChiSqrMaps(chisqarraymins);
01353
01354
01355 for(int i = 0; i < maxdm; i++){
01356 dmsqfit = (1.*i + 0.5)*NCType::kDeltaDeltaMSqr+NCType::kDeltaMSqrStart;
01357
01358 for(int j = 0; j < maxsin; j++){
01359 s2tfit = (1.*j + 0.5)*NCType::kDeltaUMu3Sqr+NCType::kUMu3SqrStart;
01360
01361 double chismin =1e9;
01362 int kmin =-1;
01363 for(int k = 0; k < maxfs; k++){
01364 s2sfit = (1.*k + 0.5)*NCType::kDeltaUS3Sqr+NCType::kUS3SqrStart;
01365
01366 if(chisqarraymins[i][k][j]<chismin){
01367 chismin = chisqarraymins[i][k][j];
01368 kmin = k;
01369 }
01370 }
01371 fchisqall->Fill(s2tfit, dmsqfit, chismin);
01372 }
01373 }
01374
01375 double chismin = 1e9;
01376 int jmin = -1;
01377
01378
01379 for(int i = 0; i < maxdm; i++){
01380 dmsqfit = (1.*i + 0.5)*NCType::kDeltaDeltaMSqr+NCType::kDeltaMSqrStart;
01381
01382 for(int k = 0; k < maxfs; k++){
01383 s2sfit = (1.*k + 0.5)*NCType::kDeltaUS3Sqr+NCType::kUS3SqrStart;
01384
01385 chismin = 1e9;
01386 jmin = -1;
01387
01388 for(int j = 0; j < maxsin; j++){
01389 s2tfit = (1.*j + 0.5)*NCType::kDeltaUMu3Sqr+NCType::kUMu3SqrStart;
01390
01391 if(chisqarraymins[i][k][j] < chismin){
01392 chismin = chisqarraymins[i][k][j];
01393 jmin = j;
01394 }
01395 }
01396 fchisqallnc->Fill(s2sfit, dmsqfit, chismin);
01397 }
01398 }
01399
01400 TString name = "";
01401 TString junk = "";
01402 TString domch = "data";
01403 TString dodecayh = "osc";
01404
01405 if(fDoMC==1) domch = "mc";
01406 if(fDecay==1) dodecayh = "dec";
01407
01408 int sele = n1d/2;
01409 int selnc = ncd/2;
01410 enu_shiftmin = 1.;
01411 nc_shiftmin = 1.;
01412 if(fSystematicsToUse[NCType::kShowerEnergy]){
01413 sele = best_enu;
01414 enu_shiftmin = les+best_enu*size_e;
01415 }
01416 if(fSystematicsToUse[NCType::kNCBackground]){
01417 selnc = best_nc;
01418 nc_shiftmin = lnc+best_nc *size_nc;
01419 }
01420
01421 if(fDoMC==1){
01422 name = "res_fit_";
01423 name += "_" + junk + "_" + domch + "_" + dodecayh;
01424 name += "new.txt";
01425 }
01426 if(fDoMC==0){
01427 name = "res_fit_" + domch + "_" + dodecayh;
01428 name += "_test_post_part_new.txt";
01429 }
01430
01431
01432 norm_min = 1.0;
01433 enu_shiftmin = 1.0;
01434 nc_shiftmin = 1.0;
01435
01436 ofstream text_file(name);
01437 text_file << " Best fit at dmsq= " << dmsqmin
01438 << " sin2theta= " << s2tmin
01439 << " fs " << s2smin
01440 << " chisq=" << chisqmin/ndf
01441 << " norm_min " << norm_min
01442 << " enu_shiftmin " << enu_shiftmin
01443 << " nc_shiftmin " << nc_shiftmin << endl;
01444 text_file.close();
01445
01446 MSG("NCExtrapolationNS", Msg::kInfo) << " Best fit at dmsq = " << dmsqmin
01447 << " sin2theta = " << s2tmin
01448 << " fs = " << s2smin << " chisq = "
01449 << chisqmin << " ndf = " << ndf << " norm_min "
01450 << norm_min << " enu_shiftmin "
01451 << enu_shiftmin << "nc_shiftmin " << nc_shiftmin
01452 << endl;
01453 MSG("NCExtrapolationNS", Msg::kInfo) << " Best enu integer= " << best_enu
01454 << " best nc integer " << best_nc << endl;
01455
01456
01457
01458
01459 fnooscar->Reset();
01460
01461 fnooscar_ccselcc->Reset();
01462
01463 fnooscar_ccselnc->Reset();
01464
01465 fnooscar_ncselnc->Reset();
01466
01467 fnooscar_ncselcc->Reset();
01468
01469
01470 fnooscar_ccselcct->Reset();
01471
01472 fnooscar_ccselnct->Reset();
01473
01474
01475
01476
01477 fallccmcf->Copy(*fnooscar);
01478
01479
01480
01481 fnooscar_ccselcc->Multiply(fnooscar,feffic);
01482 fnooscar_ccselnc->Multiply(fnooscar,fefficbg);
01483 fnooscar_ncselnc->Multiply(fnooscar,fratccnc);
01484 fnooscar_ncselcc->Multiply(fnooscar,fratccnc);
01485 fnooscar_ncselnc->Multiply(fefficnc);
01486 fnooscar_ncselcc->Multiply(fefficncbg);
01487
01488
01489
01490
01491
01492
01493
01494
01495
01496
01497 if(fDoMC==0){
01498
01499 fnooscar_ccselcct->Multiply(fnooscar,frattau);
01500 fnooscar_ccselcct->Multiply(feffict);
01501 fnooscar_ccselnct->Multiply(fnooscar,frattau);
01502 fnooscar_ccselnct ->Multiply(fefficbgt);
01503
01504
01505
01506
01507
01508
01509
01510 }
01511
01512
01513
01514 for(int dmb = 0; dmb < fnbins; ++dmb){
01515 sinSqrDeltaMSqr.push_back(TMath::Power(TMath::Sin(NCType::k127*dmsqfit
01516 *NCType::kBaseLineFar/fnooscreco->GetBinCenter(dmb+1)),2.));
01517 }
01518
01519
01520
01521 oscweight(sinSqrDeltaMSqr,s2tmin,s2smin,fnooscar_ccselcc,ftemptrue,14,NCType::kCC);
01522 truetoreco(ftemptrue,*fbestfitreco,matarray[sele]);
01523 ftemptrue->Reset();
01524
01525
01526 oscweight(sinSqrDeltaMSqr,s2tmin,s2smin,fnooscar_ncselcc,ftemptrue,14,NCType::kNC);
01527 truetoreco(ftemptrue,*fbestfitreconc,matarrayncb[sele]);
01528 fbestfitreconc->Scale(nc_shiftmin);
01529 ftemptrue->Reset();
01530
01531
01532 oscweight(sinSqrDeltaMSqr,s2tmin,s2smin,fnooscar_ncselnc,ftemptrue,14,NCType::kNC);
01533 truetoreco(ftemptrue,*fbestfitreco_ncfit,matarraync[sele]);
01534 fbestfitreco_ncfit->Scale(nc_shiftmin);
01535 ftemptrue->Reset();
01536
01537
01538 oscweight(sinSqrDeltaMSqr,s2tmin,s2smin,fnooscar_ccselnc,ftemptrue,14,NCType::kCC);
01539 truetoreco(ftemptrue,*fbestfitrecocc_ncfit,matarrayb[sele]);
01540 ftemptrue->Reset();
01541
01542
01543 if(fDoMC==0){
01544
01545
01546
01547 oscweight(sinSqrDeltaMSqr,s2tmin,s2smin,fnooscar_ccselcct,ftemptrue,16,NCType::kCC);
01548 truetoreco(ftemptrue,*fbestfitrecotau,matarrayt[sele]);
01549 ftemptrue->Reset();
01550
01551
01552
01553 oscweight(sinSqrDeltaMSqr,s2tmin,s2smin,fnooscar_ccselnct,ftemptrue,16,NCType::kCC);
01554 truetoreco(ftemptrue,*fbestfitrecotau_ncfit,matarraybt[sele]);
01555 ftemptrue->Reset();
01556 }
01557
01558
01559
01560
01561
01562
01563
01564
01565
01566
01567
01568
01569
01570
01571
01572
01573
01574
01575
01576
01577
01578
01579
01580
01581
01582
01583
01584
01585
01586
01587
01588
01589
01590
01591
01592
01593
01594
01595
01596
01597
01598 fbestfitreconc->Scale(norm_min);
01599 fbestfitreco->Scale(norm_min);
01600
01601
01602 fbestfitrecocc_ncfit->Scale(norm_min);
01603 fbestfitreco_ncfit->Scale(norm_min);
01604 fbestfitrecocc_ncfit->Scale(norm_min);
01605
01606 fbestfitreco->Add(fbestfitreconc);
01607
01608 fbestfitreco_ncfit->Add(fbestfitrecocc_ncfit);
01609
01610 if(fDoMC==0){
01611 fbestfitrecotau->Scale(norm_min);
01612
01613 fbestfitrecotau_ncfit->Scale(norm_min);
01614
01615 fbestfitreco->Add(fbestfitrecotau);
01616
01617 fbestfitreco_ncfit->Add(fbestfitrecotau_ncfit);
01618
01619 }
01620
01621
01622 Rebin(fbestfitreco, *fbestfitreco_rebinned);
01623 Rebin(fbestfitreconc, *fbestfitreconc_rebinned);
01624
01625
01626 Rebin(fbestfitreco_ncfit, *fbestfitreco_ncfit_rebinned);
01627 Rebin(fbestfitrecocc_ncfit, *fbestfitrecocc_ncfit_rebinned);
01628
01629
01630 if(fDoMC==0){
01631 Rebin(fbestfitrecotau, *fbestfitrecotau_rebinned);
01632 Rebin(fbestfitrecotau_ncfit, *fbestfitrecotau_ncfit_rebinned);
01633
01634
01635 }
01636
01637
01638 fnooscar->Copy(*fnoosctrue);
01639
01640 fnoosctrue_ncfit->Multiply(fnooscar,fratccnc);
01641
01642
01643
01644 truetoreco(fnooscar_ccselcc,*fnooscreco, matarray[sele]);
01645 truetoreco(fnooscar_ncselcc,*fnooscreconc,matarrayncb[sele]);
01646 fnooscreconc->Scale(nc_shiftmin);
01647 truetoreco(fnooscar_ncselnc,*fnooscreco_ncfit,matarraync[sele]);
01648 fnooscreconc->Scale(nc_shiftmin);
01649 truetoreco(fnooscar_ccselnc,*fnooscrecocc_ncfit, matarrayb[sele]);
01650
01651
01652 truetoreco(fnooscar_ccselcc_post,*fnooscreco_post,matarray_post[sele]);
01653 truetoreco(fnooscar_ncselcc_post,*fnooscreconc_post,matarrayncb_post[sele]);
01654
01655 truetoreco(fnooscar_ncselnc_post,*fnooscreco_ncfit_post,matarraync_post[sele]);
01656
01657 truetoreco(fnooscar_ccselnc_post,*fnooscrecocc_ncfit_post,matarrayb_post[sele]);
01658
01659
01660 fnooscreconc->Scale(norm_min);
01661 fnooscreco->Scale(norm_min);
01662
01663 fnooscreco_post->Scale(norm_min);
01664 fnooscrecocc_ncfit->Scale(norm_min);
01665 fnooscreco_ncfit->Scale(norm_min);
01666
01667
01668 fnooscreco->Add(fnooscreconc);
01669
01670 fnooscreco_ncfit->Add(fnooscrecocc_ncfit);
01671
01672 if(fDoMC==0){
01673 fnooscrecotau->Scale(norm_min);
01674
01675 fnooscrecotau_ncfit->Scale(norm_min);
01676
01677 fnooscreco->Add(fnooscrecotau);
01678
01679 fnooscreco_ncfit->Add(fnooscrecotau_ncfit);
01680
01681 }
01682
01683
01684 Rebin(fnooscreco, *fnooscreco_rebinned);
01685 Rebin(fnooscreconc, *fnooscreconc_rebinned);
01686
01687
01688 Rebin(fnooscreco_ncfit, *fnooscreco_ncfit_rebinned);
01689 Rebin(fnooscrecocc_ncfit, *fnooscrecocc_ncfit_rebinned);
01690
01691
01692 if(fDoMC==0){
01693 Rebin(fnooscrecotau, *fnooscrecotau_rebinned);
01694 Rebin(fnooscrecotau_ncfit, *fnooscrecotau_ncfit_rebinned);
01695
01696
01697 }
01698
01699
01700
01701
01702 int farBeams[] = {farBeamI, farBeamII};
01703 for(int b = 0; b < 2; ++b){
01704 for(int i = 0; i < 2; ++i){
01705 fBeams[farBeams[b]].GetMCFitHistogram(i)->Reset();
01706 fBeams[farBeams[b]].GetMCBackgroundHistogram(i)->Reset();
01707 fBeams[farBeams[b]].GetMCFitNuMuToNuTauHistogram(i)->Reset();
01708 fBeams[farBeams[b]].GetMCHistogram(i)->Reset();
01709 fBeams[farBeams[b]].GetMCBackgroundHistogram(i)->Reset();
01710 fBeams[farBeams[b]].GetMCNoFitNuMuToNuTauHistogram(i)->Reset();
01711 }
01712 }
01713
01714 float scaleFactor = 1.;
01715
01716
01717
01718 fBeams[farBeamI].GetMCFitHistogram(NCType::kCC)->Add(fbestfitreco_rebinned, 1./scaleFactor);
01719 fBeams[farBeamI].GetMCFitHistogram(NCType::kNC)->Add(fbestfitreco_ncfit_rebinned, 1./scaleFactor);
01720 fBeams[farBeamI].GetMCBackgroundHistogram(NCType::kCC)->Add(fbestfitreconc_rebinned, 1./scaleFactor);
01721 fBeams[farBeamI].GetMCBackgroundHistogram(NCType::kNC)->Add(fbestfitrecocc_ncfit_rebinned, 1./scaleFactor);
01722 fBeams[farBeamI].GetMCFitNuMuToNuTauHistogram(NCType::kCC)->Add(fbestfitrecotau_rebinned, 1./scaleFactor);
01723 fBeams[farBeamI].GetMCFitNuMuToNuTauHistogram(NCType::kNC)->Add(fbestfitrecotau_ncfit_rebinned, 1./scaleFactor);
01724
01725
01726 fBeams[farBeamI].GetMCHistogram(NCType::kCC)->Add(fnooscreco_rebinned, 1./scaleFactor);
01727 fBeams[farBeamI].GetMCHistogram(NCType::kNC)->Add(fnooscreco_ncfit_rebinned, 1./scaleFactor);
01728 fBeams[farBeamI].GetMCBackgroundHistogram(NCType::kCC)->Add(fnooscreconc_rebinned, 1./scaleFactor);
01729 fBeams[farBeamI].GetMCBackgroundHistogram(NCType::kNC)->Add(fnooscrecocc_ncfit_rebinned, 1./scaleFactor);
01730 fBeams[farBeamI].GetMCNoFitNuMuToNuTauHistogram(NCType::kCC)->Add(fnooscrecotau_rebinned, 1./scaleFactor);
01731 fBeams[farBeamI].GetMCNoFitNuMuToNuTauHistogram(NCType::kNC)->Add(fnooscrecotau_ncfit_rebinned, 1./scaleFactor);
01732
01733
01734 fBeams[farBeamII].GetMCFitHistogram(NCType::kCC)->Add(fbestfitreco_rebinned_post, 1./scaleFactor);
01735 fBeams[farBeamII].GetMCFitHistogram(NCType::kNC)->Add(fbestfitreco_ncfit_rebinned_post, 1./scaleFactor);
01736 fBeams[farBeamII].GetMCBackgroundHistogram(NCType::kCC)->Add(fbestfitreconc_rebinned_post, 1./scaleFactor);
01737 fBeams[farBeamII].GetMCBackgroundHistogram(NCType::kNC)->Add(fbestfitrecocc_ncfit_rebinned_post, 1./scaleFactor);
01738 fBeams[farBeamII].GetMCFitNuMuToNuTauHistogram(NCType::kCC)->Add(fbestfitrecotau_rebinned_post, 1./scaleFactor);
01739 fBeams[farBeamII].GetMCFitNuMuToNuTauHistogram(NCType::kNC)->Add(fbestfitrecotau_ncfit_rebinned_post, 1./scaleFactor);
01740
01741
01742 fBeams[farBeamII].GetMCHistogram(NCType::kCC)->Add(fnooscreco_rebinned_post, 1./scaleFactor);
01743 fBeams[farBeamII].GetMCHistogram(NCType::kNC)->Add(fnooscreco_ncfit_rebinned_post, 1./scaleFactor);
01744 fBeams[farBeamII].GetMCBackgroundHistogram(NCType::kCC)->Add(fnooscreconc_rebinned_post, 1./scaleFactor);
01745 fBeams[farBeamII].GetMCBackgroundHistogram(NCType::kNC)->Add(fnooscrecocc_ncfit_rebinned_post, 1./scaleFactor);
01746 fBeams[farBeamII].GetMCNoFitNuMuToNuTauHistogram(NCType::kCC)->Add(fnooscrecotau_rebinned_post, 1./scaleFactor);
01747 fBeams[farBeamII].GetMCNoFitNuMuToNuTauHistogram(NCType::kNC)->Add(fnooscrecotau_ncfit_rebinned_post, 1./scaleFactor);
01748
01749 return;
01750 }
01751
01752
01753
01754 void NCExtrapolationNS::WriteResources()
01755 {
01756
01757
01758
01759
01760 cout <<"Writing!!!!!!" << endl;
01761
01762 NCExtrapolation::WriteResources();
01763
01764
01765
01766 TDirectory* fileDir = gDirectory;
01767 TDirectory* saveDir = gDirectory;
01768 fileDir->cd("plots"+GetShortName());
01769
01770 fTrueND->Write();
01771 fTrueNDAfterRT->Write();
01772 fTrueNDAfterRT_noeffcorr->Write();
01773 fRecoND->Write();
01774 fTrueFD->Write();
01775 fTrueFD_nc->Write();
01776 fRecoFD->Write();
01777 fRecoFD_nc->Write();
01778 fTrueFDAfterBM->Write();
01779 fTrueFDAfterBM_noacccorr->Write();
01780 fTrueFDAfterBM_posteffcorr->Write();
01781 fTrueFDAfterOsc->Write();
01782 fRecoFDAfterBM->Write();
01783
01784
01785 frecotruemat->Write();
01786 fefficiencyn->Write();
01787 fdatselND->Write();
01788 fdatselFD->Write();
01789 fdatselFD_nc->Write();
01790
01791
01792 for(uint i = 0; i < matarray.size(); ++i){
01793 matarray[i]->Write();
01794 matarraync[i]->Write();
01795 matarrayb[i]->Write();
01796 matarrayncb[i]->Write();
01797
01798 matarrayt[i]->Write();
01799 matarraybt[i]->Write();
01800
01801 matarray_post[i]->Write();
01802 matarraync_post[i]->Write();
01803 matarrayb_post[i]->Write();
01804 matarrayncb_post[i]->Write();
01805
01806 matarrayt_post[i]->Write();
01807 matarraybt_post[i]->Write();
01808
01809 for(uint j = 0; j < noosctruearray[i].size(); ++j){
01810 noosctruearray[i][j]->Write();
01811 noosctruearraypost[i][j]->Write();
01812 }
01813 }
01814
01815
01816 fnoosctrue->Write();
01817 fnooscreco->Write();
01818 fbestfitreco->Write();
01819 fbestfitreconc->Write();
01820 fbestfitrecotau->Write();
01821
01822
01823 fnooscar->Write();
01824 fnooscar_ccselcc->Write();
01825 fnooscar_ccselnc->Write();
01826 fnooscar_ncselnc->Write();
01827 fnooscar_ncselcc->Write();
01828
01829 fnooscar_ccselcct->Write();
01830 fnooscar_ccselnct->Write();
01831
01832 foscreco_rebinned->Write();
01833 fnooscreco_rebinned->Write();
01834 fbestfitreco_rebinned->Write();
01835 fbestfitreconc_rebinned->Write();
01836 fbestfitrecotau_rebinned->Write();
01837
01838 fnoosctrue_ncfit->Write();
01839 fnooscreco_ncfit->Write();
01840 fnooscrecocc_ncfit->Write();
01841 fnooscrecotau_ncfit->Write();
01842 fbestfitreco_ncfit->Write();
01843 fbestfitrecocc_ncfit->Write();
01844 fbestfitrecotau_ncfit->Write();
01845
01846 foscreco_ncfit_rebinned->Write();
01847
01848 fnooscreco_ncfit_rebinned->Write();
01849 fbestfitreco_ncfit_rebinned->Write();
01850 fbestfitrecocc_ncfit_rebinned->Write();
01851 fbestfitrecotau_ncfit_rebinned->Write();
01852
01853
01854
01855 fnoosctrue_post->Write();
01856 fnooscreco_post->Write();
01857 fbestfitreco_post->Write();
01858 fbestfitreconc_post->Write();
01859 fbestfitrecotau_post->Write();
01860
01861 foscreco_rebinned_post->Write();
01862
01863 fnooscreco_rebinned_post->Write();
01864 fbestfitreco_rebinned_post->Write();
01865 fbestfitreconc_rebinned_post->Write();
01866 fbestfitrecotau_rebinned_post->Write();
01867
01868 fnoosctrue_ncfit_post->Write();
01869 fnooscreconc_post->Write();
01870 fbestfitreco_ncfit_post->Write();
01871 fbestfitrecocc_ncfit_post->Write();
01872 fbestfitrecotau_ncfit_post->Write();
01873
01874 foscreco_ncfit_rebinned_post->Write();
01875
01876 fnooscreco_ncfit_rebinned_post->Write();
01877 fbestfitreco_ncfit_rebinned_post->Write();
01878 fbestfitrecocc_ncfit_rebinned_post->Write();
01879 fbestfitrecotau_ncfit_rebinned_post->Write();
01880
01881
01882 fchisqall->Write();
01883 fchisqallnc->Write();
01884 fratccnc->Write();
01885
01886 fcorf->Write();
01887 fcor->Write();
01888 fcorfall->Write();
01889 fcorall->Write();
01890 fSingleMCNearNuCC->Write();
01891 fSingleMCNearAllCC->Write();
01892 fSingleMCFarNuCC->Write();
01893 fSingleMCFarAllCC->Write();
01894 fMCNearNuCC->Write();
01895 fMCNearAllCC->Write();
01896 fMCFarNuCC->Write();
01897 fMCFarAllCC->Write();
01898 fallccmc->Write();
01899 fallccmcf->Write();
01900 fallncmcf->Write();
01901
01902 fpurityn->Write();
01903 feffic->Write();
01904 fefficnc->Write();
01905 fefficbg->Write();
01906 fefficncbg->Write();
01907
01908 frattau->Write();
01909 feffic_numcheck->Write();
01910
01911 saveDir->cd();
01912
01913 return;
01914 }
01915
01916
01917 void NCExtrapolationNS::MakePrediction(TH1F *datsel,
01918 TH1F* purityn,
01919 TH1F* efficiencyn,
01920 TH2F *matn_norm,
01921 TH1F* prediction,
01922 NCType::ERunType runType){
01923
01924 MSG("NCExtrapolationNS", Msg::kInfo) << " in MakePrediction" << endl;
01925
01926 prediction->Reset();
01927
01928 TH2D *bmat_norm_r2 = fbmat_norm_r2;
01929 if(runType == NCType::kRunI) bmat_norm_r2 = fbmat_norm_r2_post;
01930
01931 double ntrue[fnbins] = {0.};
01932 double ftrue[fnbins] = {0.};
01933 double eff[fnbins] = {0.};
01934
01935
01936 double scalef = kscalef;
01937 double mass_f = kmass_f;
01938 double mass_n = kmass_n;
01939
01940
01941
01942
01943
01944
01945
01946
01947
01948 double scalemass = mass_f/mass_n;
01949 cout <<"scalemass = " << scalemass
01950 <<"\nmass_f = " << mass_f
01951 <<"\nmass_n = " << mass_n
01952 << endl;
01953
01954 TH1F *datsel_cor = new TH1F("datsel_cor","",fnbins,fbinvect);
01955
01956 TH1F *allccmc_obt_2d = new TH1F("allccmc_obt_2d","",fnbins,fbinvect);
01957
01958
01959 datsel_cor->Multiply(datsel,purityn);
01960
01961
01962 float k = 0.;
01963 for(int i = 0; i < fnbins; i++){
01964 ntrue[i] = 0.;
01965 eff[i] = efficiencyn->GetBinContent(i+1);
01966 k = datsel_cor->GetBinCenter(i+1);
01967
01968
01969 for(int j = 0; j < fnbins; j++){
01970 ntrue[i] += matn_norm->GetBinContent(j+1,i+1)*datsel_cor->GetBinContent(j+1);
01971 }
01972 if(eff[i] > 0.){
01973 fTrueNDAfterRT_noeffcorr->Fill(k, ntrue[i]);
01974 ntrue[i] /= eff[i];
01975 allccmc_obt_2d->Fill(k, ntrue[i]);
01976 fTrueNDAfterRT->Fill(k, ntrue[i]);
01977 }
01978
01979
01980
01981
01982
01983
01984
01985
01986 }
01987
01988
01989 double cor_factf = 0.;
01990
01991 for(int i = 0; i < fnbins; i++){
01992
01993 cor_factf = fcorf->GetBinContent(i+1);
01994 ftrue[i] = 0.;
01995
01996
01997 for(int j = 0; j < fnbins; j++) {
01998 ftrue[i] += bmat_norm_r2->GetBinContent(j+1,i+1)*allccmc_obt_2d->GetBinContent(j+1);
01999 }
02000
02001
02002 k = fcorf->GetBinCenter(i+1);
02003 fTrueFDAfterBM_noacccorr->Fill(k, ftrue[i]);
02004
02005
02006
02007
02008 prediction->SetBinContent(i+1,ftrue[i]*cor_factf);
02009 }
02010
02011 prediction->Scale(scalemass*scalef);
02012
02013 datsel_cor->Delete();
02014 allccmc_obt_2d->Delete();
02015 }
02016
02017
02018 void NCExtrapolationNS::RecoTruePur(TH2F*recotruemat1,
02019 TH1F *purityn1,
02020 TH1F *efficiencyn1,
02021 double enu_shift,
02022 int beam)
02023 {
02024 cout <<"In RecoTruePur! " << endl;
02025
02026 recotruemat1->Reset();
02027 purityn1->Reset();
02028 efficiencyn1->Reset();
02029
02030 TH1F selcc_true("selcc_true","",fnbins,fbinvect);
02031 TH1F selcc_reco("selcc_reco","",fnbins,fbinvect);
02032 TH1F sel_reco("sel_reco","",fnbins,fbinvect);
02033
02034 double mc_weif=1.;
02035 double shower = 0.;
02036 double mumom = 0.;
02037 double reco_ene = 0.;
02038 int flavour = 0;
02039 double true_enu = 0.;
02040
02041
02042
02043
02044
02045 int sizeSignal = 0;
02046 int sizeBG = 0;
02047
02048
02049
02050 NCEnergyBin *bin = 0;
02051 int numBins = fBeams[beam].GetNumberEnergyBins(NCType::kCC);
02052 for(int i = 0; i < numBins; ++i){
02053 bin = fBeams[beam].GetEnergyBin(i, NCType::kCC);
02054 sizeSignal = bin->GetMCSignalVectorSize();
02055 sizeBG = bin->GetMCBackgroundVectorSize();
02056 for(int j = 0; j < sizeSignal; ++j){
02057 bin->GetMCInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02058 shower *= enu_shift;
02059 reco_ene = shower + mumom;
02060
02061 if(flavour == 14){
02062 selcc_true.Fill(true_enu,mc_weif);
02063 recotruemat1->Fill(reco_ene,true_enu,mc_weif);
02064 selcc_reco.Fill(reco_ene,mc_weif);
02065 fTrueND->Fill(true_enu, mc_weif); }
02066 fRecoND->Fill(reco_ene, mc_weif);
02067
02068 sel_reco.Fill(reco_ene,mc_weif);
02069 }
02070
02071 for(int j = 0; j < sizeBG; ++j){
02072 bin->GetMCBackgroundInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02073 shower *= enu_shift;
02074 reco_ene = shower + mumom;
02075 sel_reco.Fill(reco_ene,mc_weif);
02076 fRecoND->Fill(reco_ene, mc_weif);
02077 }
02078
02079
02080 int size_elec = bin->GetMCBeamNuEVectorSize();
02081 int size_tau = bin->GetMCNuTauVectorSize();
02082 for(int j = 0; j < size_tau; ++j){
02083 bin->GetMCNuTauInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02084 shower *= enu_shift;
02085 reco_ene = shower + mumom;
02086 sel_reco.Fill(reco_ene,mc_weif);
02087 fRecoND->Fill(reco_ene, mc_weif);
02088 cout <<"Found a tau in the ND MC!!!!!!!!!!" << reco_ene << endl;
02089 }
02090 for(int j = 0; j < size_elec; ++j){
02091 bin->GetMCBeamNuEInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02092 shower *= enu_shift;
02093 reco_ene = shower + mumom;
02094 sel_reco.Fill(reco_ene,mc_weif);
02095 fRecoND->Fill(reco_ene, mc_weif);
02096 cout <<"Found a CC-LIKE nue in the ND MC!!!!!!!!!!" << reco_ene << endl;
02097 }
02098
02099
02100 }
02101
02102
02103
02104
02105
02106
02107
02108
02109
02110
02111
02112
02113
02114
02115
02116
02117
02118
02119
02120
02121
02122
02123
02124
02125
02126
02127
02128
02129 double pur = 1.;
02130 double eff = 1.;
02131 double all = 0.;
02132 double selected = 0.;
02133 for(int i = 0; i < fnbins; i++){
02134 selected = selcc_reco.GetBinContent(i+1);
02135 all = sel_reco.GetBinContent(i+1);
02136 if(all > 0){
02137 pur = selected/all;
02138 purityn1->SetBinContent(i+1,pur);
02139 }
02140
02141 selected = selcc_true.GetBinContent(i+1);
02142 all = fallccmc->GetBinContent(i+1);
02143 if(all > 0){
02144 eff = selected/all;
02145 efficiencyn1->SetBinContent(i+1,eff);
02146 }
02147 }
02148
02149
02150 double check = 1.;
02151 for(int i = 0; i < fnbins; i++){
02152 check=efficiencyn1->GetBinContent(i+1);
02153 if(check == 0 && i < fnbins)
02154 efficiencyn1->SetBinContent(i+1,efficiencyn1->GetBinContent(i+2));
02155 }
02156
02157 Convert2DMatrixToProbability(recotruemat1);
02158
02159 return;
02160 }
02161
02162
02163
02164 void NCExtrapolationNS::RecoTrueEffPur(TH2F *truerecomat1,
02165 TH2F *truerecomat2,
02166 TH2F *truerecomat1b,
02167 TH2F *truerecomat2b,
02168 double enu_shift,
02169 int beam)
02170 {
02171 cout <<"In RecoTrueEffPur! " << endl;
02172
02173 truerecomat1->Reset();
02174 truerecomat2->Reset();
02175
02176 truerecomat1b->Reset();
02177 truerecomat2b->Reset();
02178
02179 double mc_weif=1.;
02180 double shower = 1.;
02181 double mumom = 1.;
02182 double reco_ene = 0.;
02183 int flavour = 0;
02184 double true_enu = 0.;
02185
02186
02187
02188
02189
02190
02191
02192
02193
02194
02195
02196
02197
02198
02199
02200 int sizeSignal = 0;
02201 int sizeBG = 0;
02202 int sizeElec =0;
02203
02204
02205 NCEnergyBin *bin = 0;
02206 int numBins = fBeams[beam].GetNumberEnergyBins(NCType::kCC);
02207 for(int i = 0; i < numBins; ++i){
02208 bin = fBeams[beam].GetEnergyBin(i, NCType::kCC);
02209 sizeSignal = bin->GetMCSignalVectorSize();
02210 sizeBG = bin->GetMCBackgroundVectorSize();
02211 sizeElec = bin->GetMCBeamNuEVectorSize();
02212
02213
02214 for(int j = 0; j < sizeSignal; ++j){
02215 bin->GetMCInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02216 shower *= enu_shift;
02217 reco_ene = shower + mumom;
02218
02219 if(abs(flavour) == 14){
02220 truerecomat1->Fill(true_enu, reco_ene, mc_weif);
02221 fTrueFD->Fill(true_enu, mc_weif);
02222 fRecoFD->Fill(reco_ene, mc_weif);
02223 }
02224 }
02225
02226
02227 for(int j = 0; j < sizeBG; ++j){
02228 bin->GetMCBackgroundInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02229 shower *= enu_shift;
02230 reco_ene = shower + mumom;
02231 truerecomat2b->Fill(true_enu, reco_ene, mc_weif);
02232 }
02233
02234
02235
02236
02237
02238
02239
02240
02241
02242
02243
02244
02245 for(int j = 0; j < sizeElec; ++j){
02246 bin->GetMCBeamNuEInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02247 shower *= enu_shift;
02248 reco_ene = shower + mumom;
02249 truerecomat2b->Fill(true_enu, reco_ene, mc_weif);
02250
02251
02252 }
02253
02254
02255 }
02256
02257 numBins = fBeams[beam].GetNumberEnergyBins(NCType::kNC);
02258 for(int i = 0; i < numBins; ++i){
02259 bin = fBeams[beam].GetEnergyBin(i, NCType::kNC);
02260 sizeSignal = bin->GetMCSignalVectorSize();
02261 sizeBG = bin->GetMCBackgroundVectorSize();
02262 sizeElec = bin->GetMCBeamNuEVectorSize();
02263
02264
02265 for(int j = 0; j < sizeSignal; ++j){
02266 bin->GetMCInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02267 shower *= enu_shift;
02268 reco_ene = shower + mumom;
02269 truerecomat2->Fill(true_enu,shower,mc_weif);
02270 fTrueFD_nc->Fill(true_enu, mc_weif);
02271 fRecoFD_nc->Fill(reco_ene, mc_weif);
02272 }
02273
02274
02275 for(int j = 0; j < sizeBG; ++j){
02276 bin->GetMCBackgroundInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02277 shower *= enu_shift;
02278 reco_ene = shower + mumom;
02279 truerecomat1b->Fill(true_enu,reco_ene,mc_weif);
02280 }
02281
02282
02283 for(int j = 0; j < sizeElec; ++j){
02284 bin->GetMCBeamNuEInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02285 shower *= enu_shift;
02286 reco_ene = shower + mumom;
02287 truerecomat1b->Fill(true_enu, reco_ene, mc_weif);
02288 }
02289
02290 }
02291
02292
02293
02294
02295
02296
02297
02298
02299
02300
02301
02302
02303
02304
02305
02306
02307
02308
02309
02310
02311
02312
02313
02314
02315
02316
02317
02318
02319
02320
02321
02322
02323
02324
02325
02326
02327
02328
02329
02330
02331
02332
02333
02334
02335
02336
02337
02338
02339
02340
02341
02342
02343
02344
02345
02346
02347
02348 Convert2DMatrixToProbability(truerecomat1);
02349 Convert2DMatrixToProbability(truerecomat1b);
02350 Convert2DMatrixToProbability(truerecomat2);
02351 Convert2DMatrixToProbability(truerecomat2b);
02352
02353 return;
02354 }
02355
02356
02357 void NCExtrapolationNS::RecoTrueEffPurTau(TH2F *truerecomat1,
02358 TH2F *truerecomat1b,
02359 double enu_shift,
02360 int beam)
02361 {
02362
02363 truerecomat1->Reset();
02364 truerecomat1b->Reset();
02365
02366 double mc_weif=1.;
02367 double shower = 1.;
02368 double mumom = 1.;
02369 double reco_ene = 0.;
02370 int flavour = 0;
02371 double true_enu = 0.;
02372
02373
02374
02375
02376
02377
02378
02379
02380 int sizeTau = 0;
02381
02382
02383
02384 NCEnergyBin *bin = 0;
02385 int numBins = fBeams[beam].GetNumberEnergyBins(NCType::kCC);
02386 for(int i = 0; i < numBins; ++i){
02387 bin = fBeams[beam].GetEnergyBin(i, NCType::kCC);
02388 sizeTau = bin->GetMCNuTauVectorSize();
02389
02390
02391 for(int j = 0; j < sizeTau; ++j){
02392 bin->GetMCNuTauInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02393 shower *= enu_shift;
02394 reco_ene = shower + mumom;
02395 truerecomat1->Fill(true_enu,reco_ene,mc_weif);
02396 }
02397 }
02398
02399 numBins = fBeams[beam].GetNumberEnergyBins(NCType::kNC);
02400 for(int i = 0; i < numBins; ++i){
02401 bin = fBeams[beam].GetEnergyBin(i, NCType::kNC);
02402 sizeTau = bin->GetMCNuTauVectorSize();
02403
02404
02405 for(int j = 0; j < sizeTau; ++j){
02406 bin->GetMCNuTauInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02407 shower *= enu_shift;
02408 truerecomat1b->Fill(true_enu,shower,mc_weif);
02409 }
02410 }
02411
02412
02413
02414
02415
02416
02417
02418
02419
02420
02421
02422
02423
02424
02425
02426
02427
02428
02429
02430
02431
02432
02433
02434
02435
02436
02437
02438
02439
02440
02441
02442
02443
02444 Convert2DMatrixToProbability(truerecomat1);
02445 Convert2DMatrixToProbability(truerecomat1b);
02446
02447 return;
02448 }
02449
02450
02451 void NCExtrapolationNS::GetEff(TH1F *effic_noosctrue,
02452 TH1F *effic_noosctrue_ncfit,
02453 TH1F *neffic_noosctrue,
02454 TH1F *neffic_noosctruenc,
02455 TH1F *ratccnc,
02456 TH1F *rattau,
02457 int beam)
02458 {
02459 ratccnc->Reset();
02460 rattau->Reset();
02461
02462 effic_noosctrue->Reset();
02463 effic_noosctrue_ncfit->Reset();
02464
02465 neffic_noosctrue->Reset();
02466 neffic_noosctruenc->Reset();
02467
02468
02469 TH1F alltau("alltau","",fnbins,fbinvect);
02470
02471
02472 double mc_weif = 1.;
02473 double shower = 0.;
02474 double mumom = 0.;
02475 int flavour = 0;
02476 double true_enu = 0.;
02477
02478
02479
02480
02481
02482
02483
02484
02485
02486
02487
02488
02489
02490
02491 int sizeTau = 0;
02492 int sizeSignal = 0;
02493 int sizeBG = 0;
02494 int sizeElec = 0;
02495
02496
02497
02498 NCEnergyBin *bin = 0;
02499 int numBins = fBeams[beam].GetNumberEnergyBins(NCType::kCC);
02500 for(int i = 0; i < numBins; ++i){
02501 bin = fBeams[beam].GetEnergyBin(i, NCType::kCC);
02502 sizeSignal = bin->GetMCSignalVectorSize();
02503 sizeBG = bin->GetMCBackgroundVectorSize();
02504 sizeTau = bin->GetMCNuTauVectorSize();
02505 sizeElec = bin->GetMCBeamNuEVectorSize();
02506
02507
02508 for(int j = 0; j < sizeSignal; ++j){
02509 bin->GetMCInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02510 if(abs(flavour) == 14) effic_noosctrue->Fill(true_enu, mc_weif);
02511 }
02512
02513
02514 for(int j = 0; j < sizeBG; ++j){
02515 bin->GetMCBackgroundInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02516 neffic_noosctruenc->Fill(true_enu, mc_weif);
02517 }
02518
02519
02520 for(int j = 0; j < sizeTau; ++j){
02521 bin->GetMCNuTauInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02522 alltau.Fill(true_enu, mc_weif);
02523 }
02524
02525
02526 for(int j = 0; j < sizeElec; ++j){
02527 bin->GetMCBeamNuEInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02528 neffic_noosctruenc->Fill(true_enu, mc_weif);
02529 }
02530 }
02531
02532 numBins = fBeams[beam].GetNumberEnergyBins(NCType::kNC);
02533 for(int i = 0; i < numBins; ++i){
02534 bin = fBeams[beam].GetEnergyBin(i, NCType::kNC);
02535 sizeSignal = bin->GetMCSignalVectorSize();
02536 sizeBG = bin->GetMCBackgroundVectorSize();
02537 sizeTau = bin->GetMCNuTauVectorSize();
02538 sizeElec = bin->GetMCBeamNuEVectorSize();
02539
02540
02541 for(int j = 0; j < sizeSignal; ++j){
02542 bin->GetMCInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02543 effic_noosctrue_ncfit->Fill(true_enu, mc_weif);
02544 }
02545
02546
02547 for(int j = 0; j < sizeBG; ++j){
02548 bin->GetMCBackgroundInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02549 neffic_noosctrue->Fill(true_enu, mc_weif);
02550 }
02551
02552
02553 for(int j = 0; j < sizeTau; ++j){
02554 bin->GetMCNuTauInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02555 alltau.Fill(true_enu,mc_weif);
02556 }
02557
02558
02559 for(int j = 0; j < sizeElec; ++j){
02560 bin->GetMCBeamNuEInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02561 neffic_noosctrue->Fill(true_enu, mc_weif);
02562 }
02563 }
02564
02565 rattau->Divide(&alltau,fallccmcf);
02566 ratccnc->Divide(fallncmcf,fallccmcf);
02567
02568 feffic_numcheck = (TH1F*)effic_noosctrue->Clone("effic_numcheck");
02569
02570 MSG("NCExtrapolationNS", Msg::kInfo) << " DONE WITH EFFICIENCIES " << endl;
02571 effic_noosctrue->Divide(fallccmcf);
02572 effic_noosctrue_ncfit->Divide(fallncmcf);
02573
02574 neffic_noosctrue->Divide(fallccmcf);
02575 neffic_noosctruenc->Divide(fallncmcf);
02576
02577 }
02578
02579
02580 void NCExtrapolationNS::GetEfft(TH1F *effic_noosctrue,
02581 TH1F *neffic_noosctrue,
02582 int beam)
02583 {
02584 effic_noosctrue->Reset();
02585 neffic_noosctrue->Reset();
02586
02587 TH1F all("all", "",fnbins,fbinvect);
02588
02589
02590 double mc_weif=1.;
02591 double shower = 0.;
02592 double mumom = 0.;
02593 int flavour = 0;
02594 double true_enu = 0.;
02595
02596
02597
02598
02599
02600
02601
02602
02603
02604
02605 int sizeTau = 0;
02606
02607
02608
02609 NCEnergyBin *bin = 0;
02610 int numBins = fBeams[beam].GetNumberEnergyBins(NCType::kCC);
02611 for(int i = 0; i < numBins; ++i){
02612 bin = fBeams[beam].GetEnergyBin(i, NCType::kCC);
02613 sizeTau = bin->GetMCNuTauVectorSize();
02614
02615
02616 for(int j = 0; j < sizeTau; ++j){
02617 bin->GetMCNuTauInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02618 all.Fill(true_enu,mc_weif);
02619 effic_noosctrue->Fill(true_enu,mc_weif);
02620 }
02621 }
02622
02623 numBins = fBeams[beam].GetNumberEnergyBins(NCType::kNC);
02624 for(int i = 0; i < numBins; ++i){
02625 bin = fBeams[beam].GetEnergyBin(i, NCType::kNC);
02626 sizeTau = bin->GetMCNuTauVectorSize();
02627
02628
02629 for(int j = 0; j < sizeTau; ++j){
02630 bin->GetMCNuTauInformation(true_enu, shower, mumom, mc_weif, flavour, j);
02631 all.Fill(true_enu,mc_weif);
02632 neffic_noosctrue->Fill(true_enu,mc_weif);
02633 }
02634 }
02635
02636
02637
02638
02639
02640
02641
02642
02643
02644
02645
02646
02647
02648
02649
02650
02651
02652
02653
02654
02655
02656
02657
02658
02659
02660
02661
02662
02663 MSG("NCExtrapolationNS", Msg::kInfo) << " DONE WITH EFFICIENCIES TAU " << endl;
02664 effic_noosctrue->Divide(&all);
02665 neffic_noosctrue->Divide(&all);
02666
02667 return;
02668 }
02669
02670
02671
02672
02673 void NCExtrapolationNS::Rebindata(TH1F *inihist,
02674 TH1F &rebinhist)
02675 {
02676
02677
02678
02679 double binCenter = 0.;
02680 double binContent = 0.;
02681 double outBinLow = 0.;
02682 double outBinHigh = 0.;
02683 double inBinLow = 0.;
02684 double inBinHigh = 0.;
02685 rebinhist.Reset();
02686 for(int i = 0; i < rebinhist.GetXaxis()->GetNbins(); ++i){
02687 outBinLow = rebinhist.GetXaxis()->GetBinLowEdge(i+1);
02688 outBinHigh = rebinhist.GetXaxis()->GetBinUpEdge(i+1);
02689 for(int j = 0; j < inihist->GetXaxis()->GetNbins(); ++j){
02690 binContent = inihist->GetBinContent(j+1);
02691 binCenter = inihist->GetBinCenter(j+1);
02692 inBinLow = inihist->GetXaxis()->GetBinLowEdge(j+1);
02693 inBinHigh = inihist->GetXaxis()->GetBinUpEdge(j+1);
02694
02695
02696
02697 if(binCenter >= outBinLow && binCenter <= outBinHigh){
02698 if(inBinLow >= outBinLow && inBinHigh <= outBinHigh){
02699 rebinhist.Fill(binCenter, binContent);
02700 MSG("NCExtrapolationNS", Msg::kDebug)
02701 << rebinhist.GetName() << " " << outBinLow
02702 << " " << outBinHigh << " " << inBinLow
02703 << " " << inBinHigh << " " << rebinhist.GetBinContent(i+1)
02704 << " " << binContent << endl;
02705 }
02706 else if(inBinLow >= outBinLow && inBinHigh >= outBinHigh)
02707 MSG("NCExtrapolationNS", Msg::kWarning) << "input bin goes over output bin high edge "
02708 << binCenter << " "
02709 << outBinLow << "/" << inBinLow << " "
02710 << inBinHigh << "/" << outBinHigh << endl;
02711 else if(inBinLow <= outBinLow && inBinHigh <= outBinHigh)
02712 MSG("NCExtrapolationNS", Msg::kWarning) << "input bin goes under output bin low edge "
02713 << binCenter << " "
02714 << outBinLow << "/" << inBinLow << " "
02715 << inBinHigh << "/" << outBinHigh << endl;
02716 }
02717
02718 }
02719 }
02720
02721 return;
02722 }
02723
02724
02725
02726
02727
02728 void NCExtrapolationNS::Rebin(TH1F *inihist,
02729 TH1F &rebinhist)
02730 {
02731 Rebindata(inihist, rebinhist);
02732
02733
02734
02735
02736
02737
02738
02739
02740
02741
02742
02743
02744
02745
02746
02747
02748
02749
02750
02751
02752
02753 return;
02754 }
02755
02756
02757 float NCExtrapolationNS::chisq(TH1F *obs,
02758 TH1F *exp,
02759 TH1F *expnc)
02760 {
02761
02762
02763
02764 float chisquare=0;
02765 float nobs = 0.;
02766 float nexp = 0.;
02767 float nexpnc = 0.;
02768
02769 for(int i = 0; i < obs->GetNbinsX(); i++){
02770 nobs = obs->GetBinContent(i+1);
02771 nexp = exp->GetBinContent(i+1);
02772
02773 nexpnc = expnc->GetBinContent(i+1);
02774
02775 if(nexp > 0){
02776
02777 if(nobs > 0) chisquare += 2*(nexp-nobs)+2*nobs*log(nobs/nexp);
02778 if(nobs == 0) chisquare += 2*(nexp-nobs);
02779 }
02780
02781
02782
02783
02784
02785
02786 }
02787
02788 return chisquare;
02789 }
02790
02791
02792 void NCExtrapolationNS::truetoreco(TH1F *truth,
02793 TH1F& reco,
02794 TH2F *matrix)
02795 {
02796
02797 reco.Reset();
02798
02799
02800 int nbins = truth->GetNbinsX();
02801
02802 float count = 0.;
02803 for(int i = 0; i < nbins; i++){
02804 count = 0;
02805 for(int j = 0; j < nbins; j++){
02806 count += truth->GetBinContent(j+1)*matrix->GetBinContent(j+1, i+1);
02807 }
02808 reco.SetBinContent(i+1,count);
02809
02810
02811
02812
02813
02814
02815 }
02816
02817 return;
02818 }
02819
02820
02821
02822
02823 void NCExtrapolationNS::oscweight(std::vector<double> &sinSqrDeltaMSqr,
02824 double sinSqr2Theta, double fSterile,
02825 TH1F *noosc, TH1F *osc, int flavor,
02826 int interactionType)
02827 {
02828 double prob = 1.;
02829 double noOscVal = 0.;
02830
02831 for(uint i = 0; i < sinSqrDeltaMSqr.size(); ++i){
02832 noOscVal = noosc->GetBinContent(i+1);
02833
02834 if(TMath::Abs(flavor) == 14){
02835 if(interactionType == NCType::kCC)
02836 prob = 1. - sinSqr2Theta*sinSqrDeltaMSqr[i];
02837 else if(interactionType == NCType::kNC)
02838 prob = 1. - sinSqr2Theta*fSterile*sinSqrDeltaMSqr[i];
02839 }
02840 else if(TMath::Abs(flavor) == 16){
02841 if(interactionType == NCType::kCC)
02842 prob = (1. - fSterile)*sinSqr2Theta*sinSqrDeltaMSqr[i];
02843 else if(interactionType == NCType::kNC)
02844 prob = 0.;
02845 }
02846
02847 osc->SetBinContent(i+1, prob*noOscVal);
02848 }
02849
02850 return;
02851 }
02852
02853
02854 void NCExtrapolationNS::oscweightOld(TH1F *noosc,
02855 TH1F &osc,
02856 float dm,
02857 float st,
02858 int method,
02859 int what)
02860 {
02861
02862
02863
02864
02865
02866
02867
02868
02869
02870 float distance = NCType::kBaseLineFar;
02871
02872 int nbins = noosc->GetNbinsX();
02873 float prob = 0.;
02874 float binsize = 0.25;
02875 float wgt1 = 0.;
02876 float wgt2 = 0.;
02877 float wgt3 = 0.;
02878 float de = 0.;
02879 float de2 = 0.;
02880
02881 float avgosc = 0.;
02882 float avgosc2 = 0.;
02883 float avgwgt1 = 0.;
02884 float avgwgt2 = 0.;
02885 float enu = 0.;
02886 float delta = 0.;
02887 float linwgt = 0.;
02888 float quadwgt = 0.;
02889
02890 for (int i = 0; i < nbins; i++) {
02891
02892 if(what == 1 || what == 0)
02893 prob = 1-st*TMath::Power(TMath::Sin(NCType::k127*dm*distance/noosc->GetBinCenter(i+1)),2);
02894 if(what == 11)
02895 prob = st*TMath::Power(TMath::Sin(NCType::k127*dm*distance/noosc->GetBinCenter(i+1)),2);
02896 if(what == -1)
02897 prob=TMath::Power(st+(1-st)*TMath::Exp(-dm*distance/(2*noosc->GetBinCenter(i+1))),2);
02898 if(what == -11)
02899 prob = 0.;
02900
02901 binsize = 0.25;
02902 if (i == 0) binsize = 0.5;
02903 if (i == 199) binsize = 200.-49.75;
02904
02905 if(i > nbins-2 || method == 0){
02906 osc.SetBinContent(i+1, noosc->GetBinContent(i+1)*prob);
02907 }
02908 else{
02909
02910 wgt1 = noosc->GetBinContent(i+1);
02911 wgt2 = noosc->GetBinContent(i+2);
02912 wgt3 = noosc->GetBinContent(i+3);
02913
02914 if(i == 0){
02915 wgt2 = noosc->GetBinContent(i+2)+noosc->GetBinContent(i+3);
02916 wgt3 = noosc->GetBinContent(i+4)+noosc->GetBinContent(i+5);
02917
02918 }
02919
02920 de = wgt2-wgt1;
02921 de2 = wgt3-2*wgt2+wgt1;
02922
02923 avgosc = 0.;
02924 avgosc2 = 0.;
02925 avgwgt1 = 0.;
02926 avgwgt2 = 0.;
02927
02928 for(int k = 0; k < 10; k++){
02929
02930 enu = noosc->GetBinLowEdge(i+1)+k*binsize/10.+binsize/20.;
02931
02932 delta = enu-noosc->GetBinCenter(i+1);
02933
02934 linwgt = wgt1+de*delta;
02935 quadwgt = wgt1+de*delta+de2/2*TMath::Power(delta,2);
02936
02937 if(linwgt < 0) linwgt = 0.;
02938 if(quadwgt < 0) quadwgt = 0.;
02939
02940 if(what == 1 || what == 0){
02941 avgosc += quadwgt*(1-st*TMath::Power(TMath::Sin(NCType::k127*dm*distance/enu),2));
02942 avgosc2 += linwgt*(1-st*TMath::Power(TMath::Sin(NCType::k127*dm*distance/enu),2));
02943 }
02944 if(what==11){
02945 avgosc += quadwgt*(st*TMath::Power(TMath::Sin(NCType::k127*dm*distance/enu),2));
02946 avgosc2 += linwgt*(st*TMath::Power(TMath::Sin(NCType::k127*dm*distance/enu),2));
02947 }
02948 if(what==-1){
02949 avgosc += quadwgt*TMath::Power(st+(1-st)*exp(-dm*distance/(2*enu)),2);
02950 avgosc2 += linwgt*TMath::Power(st+(1-st)*exp(-dm*distance/(2*enu)),2);
02951 }
02952 if(what==-11){
02953 avgosc += quadwgt*0.;
02954 avgosc2 += linwgt*0.;
02955 }
02956 avgwgt1 += quadwgt;
02957 avgwgt2 += linwgt;
02958 }
02959
02960 if(method == 1 && avgosc > 0){
02961 if(avgwgt1 > 0) avgosc /= avgwgt1;
02962 else{
02963 MSG("NCExtrapolationNS", Msg::kWarning) << " attempted divide by 0 to get average "
02964 << " oscillation for bin - not averaged "
02965 << avgosc << " " << avgwgt1 << " "
02966 << osc.GetBinCenter(i+1) << " "
02967 << noosc->GetBinContent(i+1) << endl;
02968 }
02969 osc.SetBinContent(i+1, avgosc*noosc->GetBinContent(i+1));
02970 }
02971 else if(avgwgt2 > 0){
02972 if(avgwgt2 > 0) avgosc2 /= avgwgt2;
02973 else{
02974 MSG("NCExtrapolationNS", Msg::kWarning) << " attempted divide by 0 to get average "
02975 << " oscillation for bin - not averaged "
02976 << avgosc2 << " " << avgwgt2 << endl;
02977 }
02978 osc.SetBinContent(i+1, avgosc2*noosc->GetBinContent(i+1));
02979 }
02980
02981 }
02982 }
02983
02984 if((st == 0 || dm == 0) && (what == 1 || what == 0)){
02985 for(int i = 0; i < nbins; i++) osc.SetBinContent(i+1,noosc->GetBinContent(i+1));
02986 }
02987
02988 if((st == 0 || dm == 0) && (what == 11 || what == -11)){
02989 for(int i = 0; i < nbins; i++) osc.SetBinContent(i+1,0.);
02990 }
02991
02992 if(dm == 0 && what == -1){
02993 for(int i = 0; i < nbins; i++) osc.SetBinContent(i+1,noosc->GetBinContent(i+1));
02994 }
02995
02996 return;
02997 }
02998
02999
03000
03001
03002
03003
03004 void NCExtrapolationNS::Convert2DMatrixToProbability(TH2F *matrix)
03005 {
03006 double sum[fnbins];
03007 double maxf[fnbins][fnbins];
03008
03009
03010 for(int j = 0; j < fnbins; j++){
03011 sum[j] = 0.;
03012 for(int i = 0; i < fnbins; i++) maxf[i][j] = 0.;
03013 }
03014
03015
03016
03017
03018 for(int i = 0; i < fnbins; i++){
03019 for(int j = 0; j < fnbins; j++){
03020 maxf[j][i] = matrix->GetBinContent(i+1, j+1);
03021 }
03022 }
03023
03024
03025
03026
03027
03028 for(int j = 0; j < fnbins; j++){
03029 for(int i = 0; i < fnbins; i++){
03030 sum[j] += maxf[i][j];
03031 }
03032 }
03033
03034
03035
03036
03037 for(int i = 0; i < fnbins; i++){
03038 for(int j = 0; j < fnbins; j++){
03039 if(sum[j] > 0.){
03040 maxf[i][j] /= sum[j];
03041 matrix->SetBinContent(j+1, i+1, maxf[i][j]);
03042 }
03043 }
03044 }
03045
03046 return;
03047 }
03048
03049
03050 void NCExtrapolationNS::FillDataHistogramFromEnergyBins(int beam,
03051 int nccc,
03052 TH1F *hist)
03053 {
03054 hist->Reset();
03055
03056 NCEnergyBin *bin = 0;
03057 int sizeData = 0;
03058 int numBins = fBeams[beam].GetNumberEnergyBins(nccc);
03059 double energy = 0.;
03060 double weight = 0.;
03061 for(int i = 0; i < numBins; ++i){
03062 bin = fBeams[beam].GetEnergyBin(i, nccc);
03063 sizeData = bin->GetDataVectorSize();
03064 for(int j = 0; j < sizeData; ++j){
03065 bin->GetDataInformation(energy, weight, j);
03066 hist->Fill(energy, weight);
03067 }
03068 }
03069
03070 return;
03071 }