diff --git a/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfa_nu.cxx b/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfa_nu.cxx index daf84b7..a2fe748 100644 --- a/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfa_nu.cxx +++ b/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfa_nu.cxx @@ -1,229 +1,205 @@ // Copyright 2016-2021 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ #include "T2K_SignalDef.h" #include "T2K_CC0pinp_ifk_XSec_3Dinfa_nu.h" //******************************************************************** T2K_CC0pinp_ifk_XSec_3Dinfa_nu::T2K_CC0pinp_ifk_XSec_3Dinfa_nu( nuiskey samplekey) { //******************************************************************** // Sample overview --------------------------------------------------- std::string descrip = "T2K_CC0pinp_ifk_XSec_3Dinfa_nu sample. \n" "Target: CH \n" "Flux: T2K 2.5 degree off-axis (ND280) \n" "Signal: CC0piNp (N>=1) with p_p>450MeV and cthp>0.4 \n" "https://doi.org/10.1103/PhysRevD.98.032003 \n"; + // This sample corresponds to the #Delta#theta variable + // #Delta#theta = #theta_{p}^{measured} - #theta_{p}^{inferred} + // Setup common settings fSettings = LoadSampleSettings(samplekey); fSettings.SetDescription(descrip); - fSettings.SetXTitle("#Delta #theta"); - fSettings.SetYTitle("p_#mu"); - fSettings.SetZTitle("cos#theta_{#mu}"); - // fSettings.SetZTitle("d^{2}#sigma/dP_{#mu}dcos#theta_{#mu} (cm^{2}/GeV)"); + fSettings.SetXTitle("#Delta #theta_{p};p_{#mu}-cos#theta_{#mu}"); + fSettings.SetYTitle("d^{2}#sigma/d#Delta#theta dp_{#mu}dcos#theta_{#mu} (cm^{2}/GeV)"); fSettings.SetAllowedTypes("FULL,DIAG/FREE,SHAPE,FIX/SYSTCOV/STATCOV", "FIX/FULL"); fSettings.SetEnuRange(0.0, 10.0); fSettings.DefineAllowedTargets("C,H"); fAnalysis = 1; outOfBoundsMC = 0.0; // CCQELike plot information fSettings.SetTitle("T2K_CC0pinp_ifk_XSec_3Dinfa_nu"); fSettings.DefineAllowedSpecies("numu"); FinaliseSampleSettings(); // Scaling Setup --------------------------------------------------- // ScaleFactor automatically setup for DiffXSec/cm2/Nucleon fScaleFactor = ((GetEventHistogram()->Integral("width") / (fNEvents + 0.)) / (TotalIntegratedFlux())); - // fScaleFactor = ((GetEventHistogram()->Integral("width")/(fNEvents+0.)) * 10 - // / (TotalIntegratedFlux())); fSettings.SetDataInput(FitPar::GetDataBase() + "/T2K/CC0pi/STV/infkResults_origBin.root;result_a"); SetDataFromRootFile(fSettings.GetDataInput()); fSettings.SetCovarInput(FitPar::GetDataBase() + "/T2K/CC0pi/STV/infkResults_origBin.root;cor_a"); SetCorrelationFromRootFile(fSettings.GetCovarInput()); - // SetCovarFromRootFile(FitPar::GetDataBase() + - // "/T2K/CC0pi/infkResults_origBin.root", "cov_a" ); // Setup Histograms SetHistograms(); // Final setup --------------------------------------------------- FinaliseMeasurement(); + fSaveFine = false; }; bool T2K_CC0pinp_ifk_XSec_3Dinfa_nu::isSignal(FitEvent *event) { return SignalDef::isT2K_CC0pi_ifk(event, EnuMin, EnuMax); }; void T2K_CC0pinp_ifk_XSec_3Dinfa_nu::FillEventVariables(FitEvent *event) { if (event->NumFSParticle(13) == 0 || event->NumFSParticle(2212) == 0) return; TLorentzVector Pnu = event->GetNeutrinoIn()->fP; TLorentzVector Pmu = event->GetHMFSParticle(13)->fP; TLorentzVector Pp = event->GetHMFSParticle(2212)->fP; double pmu = Pmu.Vect().Mag() / 1000.; - // double pp = Pp.Vect().Mag()/1000.; double CosThetaMu = cos(Pnu.Vect().Angle(Pmu.Vect())); double CosThetaP = cos(Pnu.Vect().Angle(Pp.Vect())); double infp_CosThetaP = FitUtils::cthpInfK(Pmu, CosThetaMu, 25, true); double delta_a = acos(CosThetaP) * 180 / TMath::Pi() - acos(infp_CosThetaP) * 180 / TMath::Pi(); - // std::cout << "CosTheta P is: " << CosThetaP << std::endl; - // std::cout << "Inferred CosTheta P is: " << infp_CosThetaP << std::endl << - // std::endl; - - /* - TVector3 tp_inf = FitUtils::tppInfK(Pmu, CosThetaMu, 25, true); - - //std::cout << "Theta P is: " << (Pp.Vect()).Theta() << std::endl; - //std::cout << "Inferred Theta P is: " << tp_inf.Theta() << std::endl << - std::endl; - - double delta_a = (Pp.Vect()).Theta()*180/TMath::Pi() - - tp_inf.Theta()*180/TMath::Pi(); - - */ - fXVar = delta_a; fYVar = pmu; fZVar = CosThetaMu; return; }; void T2K_CC0pinp_ifk_XSec_3Dinfa_nu::FillHistograms() { Measurement1D::FillHistograms(); if (Signal) { FillMCSlice(fXVar, fYVar, fZVar, Weight); } } void T2K_CC0pinp_ifk_XSec_3Dinfa_nu::ConvertEventRates() { for (int i = 0; i < 7; i++) { fMCHist_Slices[i]->GetSumw2(); } // Do standard conversion. Measurement1D::ConvertEventRates(); // First scale MC slices also by their width in Y and Z // MCHist_Slices[0]->Scale(1.0 / 1.00); // MCHist_Slices[1]->Scale(1.0 / 0.60); // MCHist_Slices[2]->Scale(1.0 / 0.10); // MCHist_Slices[3]->Scale(1.0 / 0.10); // Now Convert into 1D list fMCHist->Reset(); // The first bin in the histogram in underflow, so set this and start bincount // at 1 fMCHist->SetBinContent(1, outOfBoundsMC); int bincount = 1; for (int i = 0; i < 7; i++) { for (int j = 0; j < fDataHist_Slices[i]->GetNbinsX(); j++) { fMCHist->SetBinContent(bincount + 1, fMCHist_Slices[i]->GetBinContent(j + 1)); // fMCHist->SetBinError(bincount+1, fMCHist_Slices[i]->GetBinError(j+1)); bincount++; } } return; } void T2K_CC0pinp_ifk_XSec_3Dinfa_nu::FillMCSlice(double x, double y, double z, double w) { // x is delta_a // y is pmu // z is CosThetaMu if (z <= -0.6) fMCHist_Slices[0]->Fill(x, w); else if (z >= -0.6 and z < 0.0 and y < 0.25) fMCHist_Slices[1]->Fill(x, w); else if (z >= -0.6 and z < 0.0 and y > 0.25) fMCHist_Slices[2]->Fill(x, w); else if (z >= 0.0 and y < 0.25) fMCHist_Slices[3]->Fill(x, w); else if (z >= 0.0 and z < 0.8 and y >= 0.25) fMCHist_Slices[4]->Fill(x, w); else if (z >= 0.8 and z < 1.0 and y >= 0.25 and y < 0.75) fMCHist_Slices[5]->Fill(x, w); else if (z >= 0.8 and z < 1.0 and y >= 0.75) fMCHist_Slices[6]->Fill(x, w); else outOfBoundsMC += w; } void T2K_CC0pinp_ifk_XSec_3Dinfa_nu::SetHistograms() { + std::string name = fSettings.GetName(); + // Read in 1D Data Histograms fInputFile = new TFile( (FitPar::GetDataBase() + "/T2K/CC0pi/STV/infkResults_origBin.root") - .c_str(), - "READ"); - // fInputFile->ls(); - - // Read in 1D Data - fDataHist = (TH1D *)fInputFile->Get("result_a"); - fDataHist->SetNameTitle("T2K_CC0pinp_ifk_XSec_3Dinfa_nu_data", - "T2K_CC0pinp_ifk_XSec_3Dinfa_nu_data"); - SetAutoProcessTH1(fDataHist, kCMD_Write); + .c_str(), "READ"); // Read in 2D Data Slices and Make MC Slices for (int i = 0; i < 7; i++) { // both y and z slices // Get Data Histogram - // fInputFile->ls(); fDataHist_Slices.push_back( (TH1D *)fInputFile->Get(Form("resultBin%i_a", i))->Clone()); fDataHist_Slices[i]->SetNameTitle( - Form("T2K_CC0pinp_ifk_XSec_3Dinfa_nu_data_Slice%i", i), - (Form("T2K_CC0pinp_ifk_XSec_3Dinfa_nu_data_Slice%i", i))); + Form("%s_data_Slice%i", name.c_str(), i), + Form("%s_data_Slice%i;#Delta #theta_{p};%s", + name.c_str(), i, fSettings.GetYTitle().c_str())); // Make MC Clones fMCHist_Slices.push_back((TH1D *)fDataHist_Slices[i]->Clone()); fMCHist_Slices[i]->SetNameTitle( - Form("T2K_CC0pinp_ifk_XSec_3Dinfa_nu_MC_Slice%i", i), - (Form("T2K_CC0pinp_ifk_XSec_3Dinfa_nu_MC_Slice%i", i))); + Form("%s_MC_Slice%i", name.c_str(), i), + Form("%s_MC_Slice%i;#Delta #theta_{p};%s", + name.c_str(), i, fSettings.GetYTitle().c_str())); SetAutoProcessTH1(fDataHist_Slices[i], kCMD_Write); SetAutoProcessTH1(fMCHist_Slices[i]); fMCHist_Slices[i]->Reset(); } return; }; diff --git a/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfip_nu.cxx b/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfip_nu.cxx index e0eeee6..438fe8b 100644 --- a/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfip_nu.cxx +++ b/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfip_nu.cxx @@ -1,217 +1,203 @@ // Copyright 2016-2021 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ #include "T2K_SignalDef.h" #include "T2K_CC0pinp_ifk_XSec_3Dinfip_nu.h" //******************************************************************** T2K_CC0pinp_ifk_XSec_3Dinfip_nu::T2K_CC0pinp_ifk_XSec_3Dinfip_nu( nuiskey samplekey) { //******************************************************************** // Sample overview --------------------------------------------------- std::string descrip = "T2K_CC0pinp_ifk_XSec_3Dinfip_nu sample. \n" "Target: CH \n" "Flux: T2K 2.5 degree off-axis (ND280) \n" "Signal: CC0piNp (N>=1) with p_p>450MeV and cthp>0.4 \n" "https://doi.org/10.1103/PhysRevD.98.032003 \n"; + // This sample corresponds to the |#Delta p| variable + // #Delta p = |p_{p}^{measured} - p_{p}^{inferred}| + // Setup common settings fSettings = LoadSampleSettings(samplekey); fSettings.SetDescription(descrip); - fSettings.SetXTitle("|#Delta p|"); - fSettings.SetYTitle("p_#mu"); - fSettings.SetZTitle("cos#theta_{#mu}"); - // fSettings.SetZTitle("d^{2}#sigma/dP_{#mu}dcos#theta_{#mu} (cm^{2}/GeV)"); + fSettings.SetXTitle("|#Delta #vec{p}|-p_{#mu}-cos#theta_{#mu}"); + fSettings.SetYTitle("d^{2}#sigma/d|#Delta #vec{p}|dp_{#mu}dcos#theta_{#mu} (cm^{2}/GeV^{2})"); fSettings.SetAllowedTypes("FULL,DIAG/FREE,SHAPE,FIX/SYSTCOV/STATCOV", "FIX/FULL"); fSettings.SetEnuRange(0.0, 10.0); fSettings.DefineAllowedTargets("C,H"); fAnalysis = 1; outOfBoundsMC = 0.0; // CCQELike plot information fSettings.SetTitle("T2K_CC0pinp_ifk_XSec_3Dinfip_nu"); fSettings.DefineAllowedSpecies("numu"); FinaliseSampleSettings(); // Scaling Setup --------------------------------------------------- // ScaleFactor automatically setup for DiffXSec/cm2/Nucleon fScaleFactor = ((GetEventHistogram()->Integral("width") / (fNEvents + 0.)) / (TotalIntegratedFlux())); - // fScaleFactor = ((GetEventHistogram()->Integral("width")/(fNEvents+0.)) * 10 - // / (TotalIntegratedFlux())); fSettings.SetDataInput(FitPar::GetDataBase() + "/T2K/CC0pi/STV/infkResults_origBin.root;result_tp"); SetDataFromRootFile(fSettings.GetDataInput()); fSettings.SetCovarInput(FitPar::GetDataBase() + "/T2K/CC0pi/STV/infkResults_origBin.root;cor_tp"); SetCorrelationFromRootFile(fSettings.GetCovarInput()); - // SetCovarFromRootFile(FitPar::GetDataBase() + - // "/T2K/CC0pi/infkResults_origBin.root", "cov_tp" ); // Setup Histograms SetHistograms(); // Final setup --------------------------------------------------- FinaliseMeasurement(); + fSaveFine = false; }; bool T2K_CC0pinp_ifk_XSec_3Dinfip_nu::isSignal(FitEvent *event) { return SignalDef::isT2K_CC0pi_ifk(event, EnuMin, EnuMax); }; void T2K_CC0pinp_ifk_XSec_3Dinfip_nu::FillEventVariables(FitEvent *event) { if (event->NumFSParticle(13) == 0 || event->NumFSParticle(2212) == 0) return; TLorentzVector Pnu = event->GetNeutrinoIn()->fP; TLorentzVector Pmu = event->GetHMFSParticle(13)->fP; TLorentzVector Pp = event->GetHMFSParticle(2212)->fP; double pmu = Pmu.Vect().Mag() / 1000.; - // double pp = Pp.Vect().Mag()/1000.; double CosThetaMu = cos(Pnu.Vect().Angle(Pmu.Vect())); TVector3 tp_inf = FitUtils::tppInfK(Pmu, CosThetaMu, 25, true); TVector3 Pp_mev(Pp.X() / 1000, Pp.Y() / 1000, Pp.Z() / 1000); TVector3 delta_tp = tp_inf - Pp_mev; - // std::cout << "Proton 3 mom is: " << std::endl; - //(Pp.Vect()).Print("all"); - // std::cout << "Inferred Proton 3 mom is: " << std::endl; - // tp_inf.Print("all"); - // std::cout << " " << std::endl; - fXVar = delta_tp.Mag(); fYVar = pmu; fZVar = CosThetaMu; return; }; void T2K_CC0pinp_ifk_XSec_3Dinfip_nu::FillHistograms() { Measurement1D::FillHistograms(); if (Signal) { FillMCSlice(fXVar, fYVar, fZVar, Weight); } } void T2K_CC0pinp_ifk_XSec_3Dinfip_nu::ConvertEventRates() { for (int i = 0; i < 7; i++) { fMCHist_Slices[i]->GetSumw2(); } // Do standard conversion. Measurement1D::ConvertEventRates(); // First scale MC slices also by their width in Y and Z // MCHist_Slices[0]->Scale(1.0 / 1.00); // MCHist_Slices[1]->Scale(1.0 / 0.60); // MCHist_Slices[2]->Scale(1.0 / 0.10); // MCHist_Slices[3]->Scale(1.0 / 0.10); // Now Convert into 1D list fMCHist->Reset(); // The first bin in the histogram in underflow, so set this and start bincount // at 1 fMCHist->SetBinContent(1, outOfBoundsMC); int bincount = 1; for (int i = 0; i < 7; i++) { for (int j = 0; j < fDataHist_Slices[i]->GetNbinsX(); j++) { fMCHist->SetBinContent(bincount + 1, fMCHist_Slices[i]->GetBinContent(j + 1)); // fMCHist->SetBinError(bincount+1, fMCHist_Slices[i]->GetBinError(j+1)); bincount++; } } return; } void T2K_CC0pinp_ifk_XSec_3Dinfip_nu::FillMCSlice(double x, double y, double z, double w) { // x is delta_tp // y is pmu // z is CosThetaMu if (z <= -0.6) fMCHist_Slices[0]->Fill(x, w); else if (z >= -0.6 and z < 0.0 and y < 0.25) fMCHist_Slices[1]->Fill(x, w); else if (z >= -0.6 and z < 0.0 and y > 0.25) fMCHist_Slices[2]->Fill(x, w); else if (z >= 0.0 and y < 0.25) fMCHist_Slices[3]->Fill(x, w); else if (z >= 0.0 and z < 0.8 and y >= 0.25) fMCHist_Slices[4]->Fill(x, w); else if (z >= 0.8 and z < 1.0 and y >= 0.25 and y < 0.75) fMCHist_Slices[5]->Fill(x, w); else if (z >= 0.8 and z < 1.0 and y >= 0.75) fMCHist_Slices[6]->Fill(x, w); else outOfBoundsMC += w; } void T2K_CC0pinp_ifk_XSec_3Dinfip_nu::SetHistograms() { + std::string name = fSettings.GetName(); + // Read in 1D Data Histograms fInputFile = new TFile( (FitPar::GetDataBase() + "/T2K/CC0pi/STV/infkResults_origBin.root") - .c_str(), - "READ"); - // fInputFile->ls(); - - // Read in 1D Data - fDataHist = (TH1D *)fInputFile->Get("result_tp"); - fDataHist->SetNameTitle("T2K_CC0pinp_ifk_XSec_3Dinfip_nu_data", - "T2K_CC0pinp_ifk_XSec_3Dinfip_nu_data"); - SetAutoProcessTH1(fDataHist, kCMD_Write); + .c_str(), "READ"); // Read in 2D Data Slices and Make MC Slices for (int i = 0; i < 7; i++) { // both y and z slices // Get Data Histogram - // fInputFile->ls(); fDataHist_Slices.push_back( (TH1D *)fInputFile->Get(Form("resultBin%i_tp", i))->Clone()); fDataHist_Slices[i]->SetNameTitle( - Form("T2K_CC0pinp_ifk_XSec_3Dinfip_nu_data_Slice%i", i), - (Form("T2K_CC0pinp_ifk_XSec_3Dinfip_nu_data_Slice%i", i))); + Form("%s_data_Slice%i", name.c_str(), i), + Form("%s_data_Slice%i;|#Delta #vec{p}| (GeV);%s", + name.c_str(), i, fSettings.GetYTitle().c_str())); // Make MC Clones fMCHist_Slices.push_back((TH1D *)fDataHist_Slices[i]->Clone()); fMCHist_Slices[i]->SetNameTitle( - Form("T2K_CC0pinp_ifk_XSec_3Dinfip_nu_MC_Slice%i", i), - (Form("T2K_CC0pinp_ifk_XSec_3Dinfip_nu_MC_Slice%i", i))); + Form("%s_MC_Slice%i", name.c_str(), i), + Form("%s_MC_Slice%i;|#Delta #vec{p}| (GeV);%s", + name.c_str(), i, fSettings.GetYTitle().c_str())); SetAutoProcessTH1(fDataHist_Slices[i], kCMD_Write); SetAutoProcessTH1(fMCHist_Slices[i]); fMCHist_Slices[i]->Reset(); } return; }; diff --git a/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfp_nu.cxx b/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfp_nu.cxx index 5808d44..bb5a44c 100644 --- a/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfp_nu.cxx +++ b/src/T2K/T2K_CC0pinp_ifk_XSec_3Dinfp_nu.cxx @@ -1,188 +1,187 @@ // Copyright 2016-2021 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ #include "T2K_SignalDef.h" #include "T2K_CC0pinp_ifk_XSec_3Dinfp_nu.h" //******************************************************************** T2K_CC0pinp_ifk_XSec_3Dinfp_nu::T2K_CC0pinp_ifk_XSec_3Dinfp_nu(nuiskey samplekey) { //******************************************************************** // Sample overview --------------------------------------------------- std::string descrip = "T2K_CC0pinp_ifk_XSec_3Dinfp_nu sample. \n" \ "Target: CH \n" \ "Flux: T2K 2.5 degree off-axis (ND280) \n" \ "Signal: CC0piNp (N>=1) with p_p>450MeV and cthp>0.4 \n" "https://doi.org/10.1103/PhysRevD.98.032003 \n"; + + // This sample corresponds to the #Delta p variable + // #Delta p = |p_{p}^{measured}| - |p_{p}^{inferred}| // Setup common settings fSettings = LoadSampleSettings(samplekey); fSettings.SetDescription(descrip); - fSettings.SetXTitle("#Delta p"); - fSettings.SetYTitle("p_#mu"); - fSettings.SetZTitle("cos#theta_{#mu}"); - //fSettings.SetZTitle("d^{2}#sigma/dP_{#mu}dcos#theta_{#mu} (cm^{2}/GeV)"); + fSettings.SetXTitle("#Delta p-p_{#mu}-cos#theta_{#mu}"); + fSettings.SetYTitle("d^{2}#sigma/d#Delta pdp_{#mu}dcos#theta_{#mu} (cm^{2}/GeV^{2})"); fSettings.SetAllowedTypes("FULL,DIAG/FREE,SHAPE,FIX/SYSTCOV/STATCOV","FIX/FULL"); fSettings.SetEnuRange(0.0, 10.0); fSettings.DefineAllowedTargets("C,H"); fAnalysis = 1; outOfBoundsMC = 0.0; // CCQELike plot information fSettings.SetTitle("T2K_CC0pinp_ifk_XSec_3Dinfp_nu"); fSettings.DefineAllowedSpecies("numu"); FinaliseSampleSettings(); // Scaling Setup --------------------------------------------------- // ScaleFactor automatically setup for DiffXSec/cm2/Nucleon fScaleFactor = ((GetEventHistogram()->Integral("width")/(fNEvents+0.)) / (TotalIntegratedFlux())); - //fScaleFactor = ((GetEventHistogram()->Integral("width")/(fNEvents+0.)) * 10 / (TotalIntegratedFlux())); fSettings.SetDataInput( FitPar::GetDataBase() + "/T2K/CC0pi/STV/infkResults_origBin.root;result_p" ); SetDataFromRootFile( fSettings.GetDataInput() ); fSettings.SetCovarInput( FitPar::GetDataBase() + "/T2K/CC0pi/STV/infkResults_origBin.root;cor_p" ); SetCorrelationFromRootFile(fSettings.GetCovarInput() ); - //SetCovarFromRootFile(FitPar::GetDataBase() + "/T2K/CC0pi/infkResults_origBin.root", "cov_p" ); // Setup Histograms SetHistograms(); // Final setup --------------------------------------------------- FinaliseMeasurement(); + fSaveFine = false; }; bool T2K_CC0pinp_ifk_XSec_3Dinfp_nu::isSignal(FitEvent *event){ return SignalDef::isT2K_CC0pi_ifk(event, EnuMin, EnuMax); }; void T2K_CC0pinp_ifk_XSec_3Dinfp_nu::FillEventVariables(FitEvent* event){ if (event->NumFSParticle(13) == 0 || event->NumFSParticle(2212) == 0) return; TLorentzVector Pnu = event->GetNeutrinoIn()->fP; TLorentzVector Pmu = event->GetHMFSParticle(13)->fP; TLorentzVector Pp = event->GetHMFSParticle(2212)->fP; double pmu = Pmu.Vect().Mag()/1000.; double CosThetaMu = cos(Pnu.Vect().Angle(Pmu.Vect())); double delta_p = Pp.Vect().Mag()/1000. - FitUtils::ppInfK(Pmu, CosThetaMu, 25, true); fXVar = delta_p; fYVar = pmu; fZVar = CosThetaMu; return; }; void T2K_CC0pinp_ifk_XSec_3Dinfp_nu::FillHistograms(){ Measurement1D::FillHistograms(); if (Signal){ FillMCSlice( fXVar, fYVar, fZVar, Weight ); } } void T2K_CC0pinp_ifk_XSec_3Dinfp_nu::ConvertEventRates(){ for (int i = 0; i < 7; i++){ fMCHist_Slices[i]->GetSumw2(); } // Do standard conversion. Measurement1D::ConvertEventRates(); // First scale MC slices also by their width in Y and Z //MCHist_Slices[0]->Scale(1.0 / 1.00); //MCHist_Slices[1]->Scale(1.0 / 0.60); //MCHist_Slices[2]->Scale(1.0 / 0.10); //MCHist_Slices[3]->Scale(1.0 / 0.10); // Now Convert into 1D list fMCHist->Reset(); //The first bin in the histogram in underflow, so set this and start bincount at 1 fMCHist->SetBinContent(1, outOfBoundsMC); int bincount = 1; for (int i = 0; i < 7; i++){ for (int j = 0; j < fDataHist_Slices[i]->GetNbinsX(); j++){ fMCHist->SetBinContent(bincount+1, fMCHist_Slices[i]->GetBinContent(j+1)); //fMCHist->SetBinError(bincount+1, fMCHist_Slices[i]->GetBinError(j+1)); bincount++; } } return; } void T2K_CC0pinp_ifk_XSec_3Dinfp_nu::FillMCSlice(double x, double y, double z, double w){ // x is delta_p // y is pmu // z is CosThetaMu if (z <= -0.6) fMCHist_Slices[0]->Fill(x,w); else if (z >= -0.6 and z < 0.0 and y < 0.25) fMCHist_Slices[1]->Fill(x,w); else if (z >= -0.6 and z < 0.0 and y > 0.25) fMCHist_Slices[2]->Fill(x,w); else if (z >= 0.0 and y < 0.25) fMCHist_Slices[3]->Fill(x,w); else if (z >= 0.0 and z < 0.8 and y >= 0.25) fMCHist_Slices[4]->Fill(x,w); else if (z >= 0.8 and z < 1.0 and y >= 0.25 and y < 0.75) fMCHist_Slices[5]->Fill(x,w); else if (z >= 0.8 and z < 1.0 and y >= 0.75) fMCHist_Slices[6]->Fill(x,w); else outOfBoundsMC += w; } void T2K_CC0pinp_ifk_XSec_3Dinfp_nu::SetHistograms(){ + std::string name = fSettings.GetName(); + // Read in 1D Data Histograms fInputFile = new TFile( (FitPar::GetDataBase() + "/T2K/CC0pi/STV/infkResults_origBin.root").c_str(),"READ"); - //fInputFile->ls(); - // Read in 1D Data - fDataHist = (TH1D*) fInputFile->Get("result_p"); - fDataHist->SetNameTitle("T2K_CC0pinp_ifk_XSec_3Dinfp_nu_data", "T2K_CC0pinp_ifk_XSec_3Dinfp_nu_data"); - SetAutoProcessTH1(fDataHist,kCMD_Write); - // Read in 2D Data Slices and Make MC Slices for (int i = 0; i < 7; i++){ //both y and z slices // Get Data Histogram - //fInputFile->ls(); fDataHist_Slices.push_back((TH1D*)fInputFile->Get(Form("resultBin%i_p",i))->Clone()); - fDataHist_Slices[i]->SetNameTitle(Form("T2K_CC0pinp_ifk_XSec_3Dinfp_nu_data_Slice%i",i), (Form("T2K_CC0pinp_ifk_XSec_3Dinfp_nu_data_Slice%i",i))); + fDataHist_Slices[i]->SetNameTitle(Form("%s_data_Slice%i", name.c_str(), i), + Form("%s_data_Slice%i;#Delta p (GeV);%s", + name.c_str(), i, fSettings.GetYTitle().c_str())); // Make MC Clones fMCHist_Slices.push_back((TH1D*) fDataHist_Slices[i]->Clone()); - fMCHist_Slices[i]->SetNameTitle(Form("T2K_CC0pinp_ifk_XSec_3Dinfp_nu_MC_Slice%i",i), (Form("T2K_CC0pinp_ifk_XSec_3Dinfp_nu_MC_Slice%i",i))); + fMCHist_Slices[i]->SetNameTitle(Form("%s_MC_Slice%i",name.c_str(), i), + Form("%s_MC_Slice%i;#Delta p (GeV);%s", + name.c_str(), i, fSettings.GetYTitle().c_str())); SetAutoProcessTH1(fDataHist_Slices[i],kCMD_Write); SetAutoProcessTH1(fMCHist_Slices[i]); fMCHist_Slices[i]->Reset(); } return; };