A class to manage the MC value for thin target.
More...
#include <ThinTargetMC.h>
|
double | getMCval_pC_X (double incP, double xf, double pt, int pdgcode) |
| MC value for this HP production. More...
|
|
double | getMCxs_pC_piK (int genid, double inc_mom) |
| Get the MC roduction cross-section pC->pi, K: More...
|
|
double | getMCxs_pC_nucleon (int genid, int pdg, double inc_mom) |
| Get the MC roduction cross-section pC->n, p: More...
|
|
A class to manage the MC value for thin target.
Definition at line 14 of file ThinTargetMC.h.
NeutrinoFluxReweight::ThinTargetMC::ThinTargetMC |
( |
| ) |
|
|
private |
Definition at line 11 of file ThinTargetMC.cpp.
13 const char* ppfxDir =
getenv(
"PPFX_DIR");
15 sprintf(dirData,
"%s/data",ppfxDir);
23 spart_prod.push_back(
"neu");
const int idx_neu = 7;
34 for(
int i=0;i<part_size;i++){
36 fpC_x[i] =
new TFile(Form(
"%s/MC/FTFP/invxs_%s_FTFP_BERT.root",dirData,
spart_prod[i].c_str()),
"read");
40 fpC_x[i] =
new TFile(Form(
"%s/MC/FTFP/yield_%s_FTFP_BERT.root",dirData,
spart_prod[i].c_str()),
"read");
41 for(
int j=0;j<mom_size;j++)
vpC_n.push_back((TH1D*)
fpC_x[i]->Get(Form(
"dndxf_%dGeV",
mom_inc[j])));
48 for(
int i=0;i<qe_size;i++){
50 fqe_corr[i] =
new TFile(Form(
"%s/MC/FTFP/invxs_qe_corr_%s.root",dirData,
spart_qe_corr[i].c_str()),
"read");
53 else if(i==(qe_size-1)){
54 fqe_corr[i] =
new TFile(Form(
"%s/MC/FTFP/yield_qe_corr_%s.root",dirData,
spart_qe_corr[i].c_str()),
"read");
61 const char* cscl_parts[Nscl] = {
"pip",
"pim",
"kap",
"kam",
"prt"};
62 const int Nmomscl = 11;
63 const int mom_scale[Nmomscl] = {12,20,31,40,50,60,70,80,100,120,158};
64 for(Int_t ipart=0;ipart<Nscl;ipart++){
69 for(Int_t ipart=0;ipart<Nscl;ipart++){
70 std::vector<TH2F*> tmp_scl;
71 for(
int imom=0;imom<Nmomscl;imom++){
78 for(
int imom=0;imom<Nmomscl;imom++){
std::vector< std::string > spart_qe_corr
std::vector< TH2D * > vqe_corr_p
std::vector< TH1F * > hTTScl_n
Vector of the scaling histograms for neutrons:
std::vector< TH1D * > vpC_n
std::vector< int > mom_inc
std::vector< std::vector< TH2F * > > hTTScl
Vector of the scaling histograms:
std::vector< TH2D * > vpC_x[8]
std::vector< TFile * > fTTscale
fInnerVessel push_back(Point(-578.400000, 0.000000, 0.000000))
std::string getenv(std::string const &name)
std::vector< std::string > spart_prod
std::vector< TH1D * > vqe_corr_n
ThinTargetMC * NeutrinoFluxReweight::ThinTargetMC::getInstance |
( |
| ) |
|
|
static |
double NeutrinoFluxReweight::ThinTargetMC::getMCval_pC_X |
( |
double |
incP, |
|
|
double |
xf, |
|
|
double |
pt, |
|
|
int |
pdgcode |
|
) |
| |
MC value for this HP production.
Definition at line 84 of file ThinTargetMC.cpp.
94 for(
size_t i=0;i<
mom_inc.size()-1;i++){
120 double qe_corr = 1.0;
122 int binp =
vpC_x[idx_part][idx_lowp]->FindBin(xf,pt);
123 double mclow =
vpC_x[idx_part][idx_lowp]->GetBinContent(binp);
124 double mchi =
vpC_x[idx_part][idx_hip]->GetBinContent(binp);
125 mcval = mclow + (incP-double(
mom_inc[idx_lowp]))*(mchi-mclow)/(double(
mom_inc[idx_hip])-double(
mom_inc[idx_lowp]));
127 int binqe =
vqe_corr_p[idx_lowp]->FindBin(xf,pt);
128 double qelow =
vqe_corr_p[idx_lowp]->GetBinContent(binqe);
129 double qehi =
vqe_corr_p[idx_hip]->GetBinContent(binqe);
130 qe_corr = qelow + (incP-double(
mom_inc[idx_lowp]))*(qehi-qelow)/(double(
mom_inc[idx_hip])-double(
mom_inc[idx_lowp]));
133 else if(idx_part==7){
134 int binp =
vpC_n[idx_lowp]->FindBin(xf);
135 double mclow =
vpC_n[idx_lowp]->GetBinContent(binp);
136 double mchi =
vpC_n[idx_hip]->GetBinContent(binp);
137 mcval = mclow + (incP-double(
mom_inc[idx_lowp]))*(mchi-mclow)/(double(
mom_inc[idx_hip])-double(
mom_inc[idx_lowp]));
138 int binqe =
vqe_corr_n[idx_lowp]->FindBin(xf);
139 double qelow =
vqe_corr_n[idx_lowp]->GetBinContent(binqe);
140 double qehi =
vqe_corr_n[idx_hip]->GetBinContent(binqe);
141 qe_corr = qelow + (incP-double(
mom_inc[idx_lowp]))*(qehi-qelow)/(double(
mom_inc[idx_hip])-double(
mom_inc[idx_lowp]));
147 if(mcval<1.
e-12 || mcval!=mcval)
return -1;
std::vector< TH2D * > vqe_corr_p
std::vector< TH1D * > vpC_n
std::vector< int > mom_inc
std::vector< TH2D * > vpC_x[8]
std::vector< TH1D * > vqe_corr_n
double NeutrinoFluxReweight::ThinTargetMC::getMCxs_pC_nucleon |
( |
int |
genid, |
|
|
int |
pdg, |
|
|
double |
inc_mom |
|
) |
| |
Get the MC roduction cross-section pC->n, p:
Definition at line 182 of file ThinTargetMC.cpp.
183 double xx[13] ={12,20,31,40,50,60,70,80,90,100,110,120,158};
184 double yy[13] ={153386793./197812683.,160302538./197811564.,164508480./197831250.,166391359./197784915.,
185 167860919./197822312.,168882647./197807739.,169681805./197803099.,170311264./197811098.,
186 170860912./197822002.,171309291./197834756.,171651963./197811822.,171991260./197823012.,
187 172902228./197804669.};
191 for(
int i=0;i<12;i++){
192 if(inc_mom>=
double(xx[i]) && inc_mom<
double(xx[i+1])){
197 double frac_low = yy[idx_lowp];
198 double frac_hi = yy[idx_hip];
199 double frac_m = frac_low + (inc_mom-double(xx[idx_lowp]))*(frac_hi-frac_low)/(double(xx[idx_hip])-double(xx[idx_lowp]));
201 if(genid==0 &&
pdg==2212)
return frac_m*243.2435;
202 if(genid>0 &&
pdg==2212)
return frac_m;
203 if(genid==0 &&
pdg==2112)
return frac_m;
204 if(genid>0 &&
pdg==2112)
return frac_m/243.2435;
double NeutrinoFluxReweight::ThinTargetMC::getMCxs_pC_piK |
( |
int |
genid, |
|
|
double |
inc_mom |
|
) |
| |
Get the MC roduction cross-section pC->pi, K:
Definition at line 154 of file ThinTargetMC.cpp.
155 double xx[13] ={12,20,31,40,50,60,70,80,90,100,110,120,158};
156 double yy[13] ={153386793./197812683.,160302538./197811564.,164508480./197831250.,166391359./197784915.,
157 167860919./197822312.,168882647./197807739.,169681805./197803099.,170311264./197811098.,
158 170860912./197822002.,171309291./197834756.,171651963./197811822.,171991260./197823012.,
159 172902228./197804669.};
163 for(
int i=0;i<12;i++){
164 if(inc_mom>=
double(xx[i]) && inc_mom<
double(xx[i+1])){
169 double frac_low = yy[idx_lowp];
170 double frac_hi = yy[idx_hip];
171 double frac_m = frac_low + (inc_mom-double(xx[idx_lowp]))*(frac_hi-frac_low)/(double(xx[idx_hip])-double(xx[idx_lowp]));
173 if(genid==0)
return frac_m*243.2435;
174 else if(genid>0)
return frac_m;
176 std::cout<<
"Something is wrong with gen "<<
std::endl;
QTextStream & endl(QTextStream &s)
TFile* NeutrinoFluxReweight::ThinTargetMC::fpC_x[8] |
|
private |
TFile* NeutrinoFluxReweight::ThinTargetMC::fqe_corr[2] |
|
private |
std::vector<TFile*> NeutrinoFluxReweight::ThinTargetMC::fTTscale |
|
private |
std::vector<TH1F*> NeutrinoFluxReweight::ThinTargetMC::hTTScl_n |
Vector of the scaling histograms for neutrons:
Definition at line 33 of file ThinTargetMC.h.
ThinTargetMC * NeutrinoFluxReweight::ThinTargetMC::instance = 0 |
|
staticprivate |
std::vector<int> NeutrinoFluxReweight::ThinTargetMC::mom_inc |
|
private |
std::vector<TH1D*> NeutrinoFluxReweight::ThinTargetMC::vpC_n |
|
private |
std::vector<TH2D*> NeutrinoFluxReweight::ThinTargetMC::vpC_x[8] |
|
private |
std::vector<TH1D*> NeutrinoFluxReweight::ThinTargetMC::vqe_corr_n |
|
private |
std::vector<TH2D*> NeutrinoFluxReweight::ThinTargetMC::vqe_corr_p |
|
private |
The documentation for this class was generated from the following files: