Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

NuMMHelperCPT.cxx

Go to the documentation of this file.
00001 #include <string>
00002 
00003 #include "TFile.h"
00004 #include "TGraph.h"
00005 #include "TH1D.h"
00006 #include "TH2D.h"
00007 #include "TF1.h"
00008 
00009 #include "MessageService/MsgService.h"
00010 #include "NtupleUtils/NuMMHelperCPT.h"
00011 
00012 ClassImp(NuMMHelperCPT)
00013 
00014 CVSID("$Id: NuMMHelperCPT.cxx,v 1.8 2009/10/15 16:40:55 ahimmel Exp $");
00015 
00016 //____________________________________________________________________72
00017 NuMMHelperCPT::NuMMHelperCPT() : doTaus(false)
00018 {
00019 }
00020 
00021 //____________________________________________________________________72
00022 NuMMHelperCPT::NuMMHelperCPT(const char * helperFilename,
00023                              const char * xSecFilename)
00024 {
00025   Construct(helperFilename, xSecFilename);
00026 }
00027 
00028 //____________________________________________________________________72
00029 NuMMHelperCPT::NuMMHelperCPT(const std::string helperFilename,
00030                              const std::string xSecFilename)
00031 {
00032   Construct(helperFilename.c_str(), xSecFilename.c_str());
00033 }
00034 
00035 //____________________________________________________________________72
00036 void NuMMHelperCPT::Construct(const char * helperFilename,
00037                               const char * xSecFilename)
00038 {
00039   TFile helperFile(helperFilename,"READ");
00040 
00041   fRecoVsTrueEnergy_ND = (TH2D*) helperFile.Get("RecoVsTrueEnergy_ND");
00042   fRecoVsTrueEnergy_ND->SetDirectory(0);
00043   fRecoVsTrueEnergy_FD = (TH2D*) helperFile.Get("RecoVsTrueEnergy_FD");
00044   fRecoVsTrueEnergy_FD->SetDirectory(0);
00045   
00046   fFDVsNDMatrixRW = (TH2D*) helperFile.Get("FDVsNDMatrixRW");
00047   if(fFDVsNDMatrixRW) fFDVsNDMatrixRW->SetDirectory(0);
00048   
00049   fEfficiency_ND = (TH1D*) helperFile.Get("Efficiency_ND");
00050   fEfficiency_ND->SetDirectory(0);
00051   fEfficiency_FD = (TH1D*) helperFile.Get("Efficiency_FD");
00052   fEfficiency_FD->SetDirectory(0);
00053   //Purity histograms remove both the NC and wrong-sign CC backgrounds
00054   fPurity_ND = (TH1D*) helperFile.Get("Purity_ND");
00055   fPurity_ND->SetDirectory(0);
00056   fPurity_FD = (TH1D*) helperFile.Get("Purity_FD");
00057   fPurity_FD->SetDirectory(0);
00058   
00059   fNCContamination_FD = (TH1D*) helperFile.Get("NCContamination_FD");
00060   fNCContamination_FD->SetDirectory(0);
00061   fRecoVsTrueCCContamination_FD = (TH2D*)
00062     helperFile.Get("CCContaminationRecoVsTrue_FD");
00063   fRecoVsTrueCCContamination_FD->SetDirectory(0);
00064   fOtherEfficiency_FD = (TH1D*)
00065     helperFile.Get("OtherEfficiency_FD");
00066   fOtherEfficiency_FD->SetDirectory(0);
00067 
00068   //Antineutrinos:
00069   fRecoVsTrueEnergyPQ_ND = (TH2D*) helperFile.Get("RecoVsTrueEnergyPQ_ND");
00070   fRecoVsTrueEnergyPQ_ND->SetDirectory(0);
00071   fRecoVsTrueEnergyPQ_FD = (TH2D*) helperFile.Get("RecoVsTrueEnergyPQ_FD");
00072   fRecoVsTrueEnergyPQ_FD->SetDirectory(0);
00073   
00074   fFDVsNDMatrixRWBar = (TH2D*) helperFile.Get("FDVsNDMatrixRWPQ");
00075   if(fFDVsNDMatrixRWBar) fFDVsNDMatrixRWBar->SetDirectory(0);
00076   
00077   fEfficiencyPQ_ND = (TH1D*) helperFile.Get("EfficiencyPQ_ND");
00078   fEfficiencyPQ_ND->SetDirectory(0);
00079   fEfficiencyPQ_FD = (TH1D*) helperFile.Get("EfficiencyPQ_FD");
00080   fEfficiencyPQ_FD->SetDirectory(0);
00081   //Purity histograms remove both the NC and wrong-sign CC backgrounds
00082   fPurityPQ_ND = (TH1D*) helperFile.Get("PurityPQ_ND");
00083   fPurityPQ_ND->SetDirectory(0);
00084   fPurityPQ_FD = (TH1D*) helperFile.Get("PurityPQ_FD");
00085   fPurityPQ_FD->SetDirectory(0);
00086   
00087   fNCContaminationPQ_FD = (TH1D*) helperFile.Get("NCContaminationPQ_FD");
00088   fNCContaminationPQ_FD->SetDirectory(0);
00089   fRecoVsTrueCCContaminationPQ_FD = (TH2D*)
00090     helperFile.Get("CCContaminationRecoVsTruePQ_FD");
00091   fRecoVsTrueCCContaminationPQ_FD->SetDirectory(0);
00092   fOtherEfficiencyPQ_FD = (TH1D*)
00093     helperFile.Get("OtherEfficiencyPQ_FD");
00094   fOtherEfficiencyPQ_FD->SetDirectory(0);
00095 
00096   //Tau helpers
00097   fEfficiencyTau_FD = (TH1D*) helperFile.Get("EfficiencyTau_FD");
00098   if (!fEfficiencyTau_FD)  doTaus = false;
00099   else                     doTaus = true;
00100   if (doTaus) {
00101     fEfficiencyTau_FD->SetDirectory(0);
00102     fRecoVsTrueEnergyTau_FD = (TH2D*)
00103     helperFile.Get("RecoVsTrueEnergyTau_FD");
00104     fRecoVsTrueEnergyTau_FD->SetDirectory(0);
00105     
00106     //TauBar helpers
00107     fEfficiencyTauPQ_FD = (TH1D*) helperFile.Get("EfficiencyTauPQ_FD");
00108     fEfficiencyTauPQ_FD->SetDirectory(0);
00109     fRecoVsTrueEnergyTauPQ_FD = (TH2D*)
00110     helperFile.Get("RecoVsTrueEnergyTauPQ_FD");
00111     fRecoVsTrueEnergyTauPQ_FD->SetDirectory(0);
00112   }
00113   
00114   helperFile.Close();
00115   
00116   //Get cross-sections (numu)
00117   TFile *xsecfile = new TFile(xSecFilename,"READ");
00118   TH1F* XSec_CC = (TH1F*) xsecfile->Get("h_numu_cc_tot");
00119   XSec_CC->SetDirectory(0);
00120   xsecfile->Close();
00121   if (xsecfile){delete xsecfile; xsecfile = 0;}
00122   Float_t *x = new Float_t[XSec_CC->GetNbinsX()];
00123   Float_t *y = new Float_t[XSec_CC->GetNbinsX()];
00124   for(int i=0;i<XSec_CC->GetNbinsX();i++) {
00125     x[i] = XSec_CC->GetBinCenter(i+1);
00126     y[i] = XSec_CC->GetBinContent(i+1);
00127   }
00128   fXSec_CC_Graph = new TGraph(XSec_CC->GetNbinsX(),x,y);
00129   if (x) {delete[] x; x = 0;}
00130   if (y) {delete[] y; y = 0;}
00131   
00132   //Get cross-sections (numubar)
00133   xsecfile = new TFile(xSecFilename,"READ");
00134   TH1F* XSec_CCBar = (TH1F*) xsecfile->Get("h_numubar_cc_tot");
00135   XSec_CCBar->SetDirectory(0);
00136   xsecfile->Close();
00137   if (xsecfile){delete xsecfile; xsecfile = 0;}
00138   x = new Float_t[XSec_CCBar->GetNbinsX()];
00139   y = new Float_t[XSec_CCBar->GetNbinsX()];
00140   for(int i=0;i<XSec_CCBar->GetNbinsX();i++) {
00141     x[i] = XSec_CCBar->GetBinCenter(i+1);
00142     y[i] = XSec_CCBar->GetBinContent(i+1);
00143   }
00144   fXSec_CCBar_Graph = new TGraph(XSec_CCBar->GetNbinsX(),x,y);
00145   if (x) {delete[] x; x = 0;}
00146   if (y) {delete[] y; y = 0;}
00147   
00148   if (doTaus) {
00149     //Get cross-sections (tau)
00150     xsecfile = new TFile(xSecFilename,"READ");
00151     TH1F* tau_XSec_CC = (TH1F*) xsecfile->Get("h_nutau_cc_tot");
00152     tau_XSec_CC->SetDirectory(0);
00153     xsecfile->Close();
00154     if (xsecfile){delete xsecfile; xsecfile = 0;}
00155     x = new Float_t[tau_XSec_CC->GetNbinsX()];
00156     y = new Float_t[tau_XSec_CC->GetNbinsX()];
00157     for(int i=0;i<tau_XSec_CC->GetNbinsX();i++) {
00158       x[i] = tau_XSec_CC->GetBinCenter(i+1);
00159       y[i] = tau_XSec_CC->GetBinContent(i+1);
00160     }
00161     fTau_XSec_CC_Graph = new TGraph(tau_XSec_CC->GetNbinsX(),x,y);
00162     if (x) {delete[] x; x = 0;}
00163     if (y) {delete[] y; y = 0;}
00164     
00165     //Get cross-sections (taubar)
00166     xsecfile = new TFile(xSecFilename,"READ");
00167     TH1F* taubar_XSec_CC = (TH1F*) xsecfile->Get("h_nutaubar_cc_tot");
00168     taubar_XSec_CC->SetDirectory(0);
00169     xsecfile->Close();
00170     if (xsecfile){delete xsecfile; xsecfile = 0;}
00171     x = new Float_t[taubar_XSec_CC->GetNbinsX()];
00172     y = new Float_t[taubar_XSec_CC->GetNbinsX()];
00173     for(int i=0;i<taubar_XSec_CC->GetNbinsX();i++) {
00174       x[i] = taubar_XSec_CC->GetBinCenter(i+1);
00175       y[i] = taubar_XSec_CC->GetBinContent(i+1);
00176     }
00177     fTauBar_XSec_CC_Graph = new TGraph(taubar_XSec_CC->GetNbinsX(),x,y);
00178     if (x) {delete[] x; x = 0;}
00179     if (y) {delete[] y; y = 0;}
00180   }
00181   
00182   if (fRecoVsTrueCCContamination_FD){ 
00183     //Normalise the FD CC contamination true to reco CC matrix
00184     //First loop over reco axis:
00185     for (Int_t i=1; i<=fRecoVsTrueCCContamination_FD->GetNbinsX()+1; ++i){
00186       //Find out the total number of true events in this column:
00187       Double_t trueEvents = 0.0;
00188       for (Int_t j=1; j<=fRecoVsTrueCCContamination_FD->GetNbinsY()+1; ++j){
00189         trueEvents += fRecoVsTrueCCContamination_FD->GetBinContent(i,j);
00190       }
00191       //Loop again, this time normalise.
00192       for (Int_t j=1; j<=fRecoVsTrueCCContamination_FD->GetNbinsY()+1; ++j){
00193         if (trueEvents>0){
00194           Double_t oldContent =
00195             fRecoVsTrueCCContamination_FD->GetBinContent(i,j);
00196           Double_t oldError =
00197             fRecoVsTrueCCContamination_FD->GetBinError(i,j);
00198           fRecoVsTrueCCContamination_FD->SetBinContent
00199             (i,j,oldContent/trueEvents);
00200           fRecoVsTrueCCContamination_FD->SetBinError
00201             (i,j,oldError/trueEvents);
00202         }
00203         else{
00204           fRecoVsTrueCCContamination_FD->SetBinContent(i,j,0);
00205           
00206           fRecoVsTrueCCContamination_FD->SetBinError(i,j,0);
00207         }
00208       }
00209     }
00210   }
00211   
00212   if (fRecoVsTrueCCContaminationPQ_FD){ 
00213     //Normalise the FD CC contamination true to reco CC matrix
00214     //First loop over reco axis:
00215     for (Int_t i=1; i<=fRecoVsTrueCCContaminationPQ_FD->GetNbinsX()+1; ++i){
00216       //Find out the total number of true events in this column:
00217       Double_t trueEvents = 0.0;
00218       for (Int_t j=1; j<=fRecoVsTrueCCContaminationPQ_FD->GetNbinsY()+1; ++j){
00219         trueEvents += fRecoVsTrueCCContaminationPQ_FD->GetBinContent(i,j);
00220       }
00221       //Loop again, this time normalise.
00222       for (Int_t j=1; j<=fRecoVsTrueCCContaminationPQ_FD->GetNbinsY()+1; ++j){
00223         if (trueEvents>0){
00224           Double_t oldContent =
00225             fRecoVsTrueCCContaminationPQ_FD->GetBinContent(i,j);
00226           Double_t oldError =
00227             fRecoVsTrueCCContaminationPQ_FD->GetBinError(i,j);
00228           fRecoVsTrueCCContaminationPQ_FD->SetBinContent
00229             (i,j,oldContent/trueEvents);
00230           fRecoVsTrueCCContaminationPQ_FD->SetBinError
00231             (i,j,oldError/trueEvents);
00232         }
00233         else{
00234           fRecoVsTrueCCContaminationPQ_FD->SetBinContent(i,j,0);
00235           
00236           fRecoVsTrueCCContaminationPQ_FD->SetBinError(i,j,0);
00237         }
00238       }
00239     }
00240   }
00241   
00242   TF1 *xsec_func = new TF1("xsec_func","[5]*(-[1]+([0]-1.+2.*(1.-[0])*x/25+([0]-1.)*x*x/(25*25))*(x<25)+([4]*([2]-x)^3+[3]*([2]-x)^2)*(x<[2]))",0,50);
00243   xsec_func->SetParameter(0, 0.895);
00244   xsec_func->SetParameter(1, 0.0617);
00245   
00246   xsec_func->SetParameter(2, 4.0);
00247   xsec_func->SetParameter(3, 7.59e-3);
00248   xsec_func->SetParameter(4, -8.05e-4);
00249   
00250   xsec_func->SetParameter(5, 0);
00251   fXSec_CCBar_Graph_orig = 0;
00252 }
00253 
00254 //____________________________________________________________________72
00255 void NuMMHelperCPT::OverrideNuBeamMatrix(const TH2D* beamMatrix)
00256 {
00257   if (fFDVsNDMatrixRW){delete fFDVsNDMatrixRW; fFDVsNDMatrixRW=0;}
00258   fFDVsNDMatrixRW = new TH2D(*beamMatrix);
00259 }
00260 
00261 //____________________________________________________________________72
00262 void NuMMHelperCPT::OverrideBarBeamMatrix(const TH2D* beamMatrix)
00263 {
00264   if (fFDVsNDMatrixRWBar)
00265     {delete fFDVsNDMatrixRWBar; fFDVsNDMatrixRWBar=0;}
00266   fFDVsNDMatrixRWBar = new TH2D(*beamMatrix);
00267 }
00268 
00269 
00270 //____________________________________________________________________
00271 
00272 void NuMMHelperCPT::ShiftBarXSecGraph(double scale)
00273 {
00274   if (fXSec_CCBar_Graph_orig) {
00275     MAXMSG("NuMMHelperCPT",Msg::kWarning, 1) << "You did not reset the Bar xsec after modifying it.  Doing so now." << endl;
00276     ResetBarXSecGraph();
00277   }
00278   
00279   MAXMSG("NuMMHelperCPT",Msg::kInfo, 1) << "Making a Bar xsec backup copy." << endl;
00280   
00281   // Backup the original object, create a new one for modifying
00282   fXSec_CCBar_Graph_orig = fXSec_CCBar_Graph;
00283   fXSec_CCBar_Graph = new TGraph(*fXSec_CCBar_Graph);
00284   
00285   // Set the scale of the xsec shift
00286   xsec_func->SetParameter(5, scale);
00287   
00288   Double_t x, y;
00289   for (int i = 0; i < fXSec_CCBar_Graph->GetN(); ++i) {
00290     fXSec_CCBar_Graph->GetPoint(i, x, y);
00291     y *= xsec_func->Eval(x);
00292     fXSec_CCBar_Graph->SetPoint(i, x, y);    
00293   }
00294 }
00295 
00296 //____________________________________________________________________
00297 
00298 void NuMMHelperCPT::ResetBarXSecGraph()
00299 {
00300   if (fXSec_CCBar_Graph_orig) {
00301     MAXMSG("NuMMHelperCPT",Msg::kInfo, 1) << "Reverting Bar to backup copy." << endl;
00302     
00303     delete fXSec_CCBar_Graph;
00304     fXSec_CCBar_Graph = fXSec_CCBar_Graph_orig;
00305     fXSec_CCBar_Graph_orig = 0;
00306   }
00307   else {
00308     MAXMSG("NuMMHelperCPT",Msg::kWarning, 1) << "Resetting unmodified Bars data.  Not harmful, just superfluous." << endl;
00309   }
00310 }
00311 

Generated on Mon Feb 15 11:07:15 2010 for loon by  doxygen 1.3.9.1