Functions | Variables
nuint09_qel2.C File Reference
#include <iomanip>

Go to the source code of this file.

Functions

void nuint09_qel2 (int isample, int include_fsi=0)
 

Variables

const int kNSamples = 3
 
const int kNWCur = 1
 
const int kNEnergies = 2
 
const int kNRunsPerCase = 5
 
const int kNEvtPerRun = 100000
 
const char * kLabel [kNSamples]
 
const int kRunNu [kNSamples][kNWCur][kNEnergies][kNRunsPerCase]
 
int kZ [3]
 
int kA [3]
 

Function Documentation

void nuint09_qel2 ( int  isample,
int  include_fsi = 0 
)

Definition at line 62 of file nuint09_qel2.C.

63 {
64  cout << " ***** running: QEL.2" << endl;
65  if(include_fsi==0) { cout << "-FSI" << endl; }
66  else
67  if(include_fsi==1) { cout << "+FSI" << endl; }
68  else
69  return;
70 
71  if(isample<0 || isample >= kNSamples) return;
72 
73  const char * label = kLabel[isample];
74 
75  int A = kA[isample];
76  int Z = kZ[isample];
77  int N = A-Z;
78 
79  // get cross section graphs
80 
81  TFile fsig("../sig/splines.root","read");
82  TDirectory * sig_dir = (TDirectory *) fsig.Get(label);
83 
84  TGraph * sig_graph_qelcc = (TGraph*) sig_dir->Get("qel_cc_n");
85 
86  // range & spacing
87 
88  const int nKEp = 60;
89  const double KEpmin = 0.01;
90  const double KEpmax = 1.50;
91 
92  // create output stream
93 
94  ostringstream out_filename;
95  if(include_fsi==0) { out_filename << label << ".qel_2.dsig_dKEp.data"; }
96  else { out_filename << label << ".qel_2.dsig_dKEp_withFSI.data"; }
97 
98  ofstream out_stream(out_filename.str().c_str(), ios::out);
99 
100  // write out txt file
101 
102  out_stream << "# [" << label << "]" << endl;
103  out_stream << "# " << endl;
104  out_stream << "# [QEL.2]:" << endl;
105  out_stream << "# Cross section as a function of f/s proton kinetic energy at E_nu= 0.5, 1.0 GeV." << endl;
106  out_stream << "# " << endl;
107  out_stream << "# Note:" << endl;
108  if(include_fsi==1)
109  {
110  out_stream << "# - INCLUDING FSI " << endl;
111  }
112  out_stream << "# - proton energies are _kinetic_ energies " << endl;
113  out_stream << "# - proton kinetic energy KE in GeV, between KEmin = " << KEpmin << " GeV, KEmax = " << KEpmax << " GeV " << endl;
114  out_stream << "# - cross sections in 1E-38 cm^2 / GeV" << endl;
115  out_stream << "# - quoted cross section is nuclear cross section per nucleon contributing in the scattering (eg only neutrons for nu_mu QELCC)" << endl;
116  out_stream << "# Columns:" << endl;
117  out_stream << "# | KE(p) | sig(QELCC; Ev=0.5GeV) | sig(QELCC; Ev=1.0GeV) | " << endl;
118 
119  out_stream << std::fixed << setprecision(6);
120 
121  //
122  // load event data
123  //
124 
125  TChain * chain = new TChain("gst");
126 
127  // loop over CC/NC cases
128  for(int iwkcur=0; iwkcur<kNWCur; iwkcur++) {
129  // loop over energies
130  for(int ie=0; ie<kNEnergies; ie++) {
131  // loop over runs for current case
132  for(int ir=0; ir<kNRunsPerCase; ir++) {
133  // build filename
134  ostringstream filename;
135  int run_number = kRunNu[isample][iwkcur][ie][ir];
136  filename << "../gst/gntp." << run_number << ".gst.root";
137  // add to chain
138  cout << "Adding " << filename.str() << " to event chain" << endl;
139  chain->Add(filename.str().c_str());
140  }
141  }
142  }
143 
144 
145  //
146  // get QELCC cross sections at given energies for normalization purposes
147  //
148  double sig_qelcc_0500MeV = sig_graph_qelcc->Eval(0.5) / N;
149  double sig_qelcc_1000MeV = sig_graph_qelcc->Eval(1.0) / N;
150 
151  //
152  // book histograms
153  //
154  TH1D * hst_dsig_dKEp_qelcc_0500MeV = new TH1D("hst_dsig_dKEp_qelcc_0500MeV","dsig/dKEp, nu_mu QEL CC, Enu=0.5 GeV", nKEp, KEpmin, KEpmax);
155  TH1D * hst_dsig_dKEp_qelcc_1000MeV = new TH1D("hst_dsig_dKEp_qelcc_1000MeV","dsig/dKEp, nu_mu QEL CC, Enu=1.0 GeV", nKEp, KEpmin, KEpmax);
156 
157  //
158  // fill histograms
159  //
160  if(include_fsi==0) {
161  chain->Draw("(Ei-0.938)>>hst_dsig_dKEp_qelcc_0500MeV","qel&&cc&&Ev>0.49&&Ev<0.51&&pdgi==2212","GOFF");
162  chain->Draw("(Ei-0.938)>>hst_dsig_dKEp_qelcc_1000MeV","qel&&cc&&Ev>0.99&&Ev<1.01&&pdgi==2212","GOFF");
163  } else {
164  chain->Draw("(Ef-0.938)>>hst_dsig_dKEp_qelcc_0500MeV","qel&&cc&&Ev>0.49&&Ev<0.51&&pdgf==2212","GOFF");
165  chain->Draw("(Ef-0.938)>>hst_dsig_dKEp_qelcc_1000MeV","qel&&cc&&Ev>0.99&&Ev<1.01&&pdgf==2212","GOFF");
166  }
167 
168  //
169  // normalize
170  //
171  double norm_qelcc_0500MeV = hst_dsig_dKEp_qelcc_0500MeV -> Integral("width") / sig_qelcc_0500MeV;
172  double norm_qelcc_1000MeV = hst_dsig_dKEp_qelcc_1000MeV -> Integral("width") / sig_qelcc_1000MeV;
173 
174  if (norm_qelcc_0500MeV > 0) hst_dsig_dKEp_qelcc_0500MeV -> Scale(1./norm_qelcc_0500MeV);
175  if (norm_qelcc_1000MeV > 0) hst_dsig_dKEp_qelcc_1000MeV -> Scale(1./norm_qelcc_1000MeV);
176 
177  for(int i = 1; i <= hst_dsig_dKEp_qelcc_1000MeV->GetNbinsX(); i++) {
178 
179  double KEp = hst_dsig_dKEp_qelcc_1000MeV->GetBinCenter(i);
180 
181  double dsig_dKEp_qelcc_0500MeV = hst_dsig_dKEp_qelcc_0500MeV -> GetBinContent(i);
182  double dsig_dKEp_qelcc_1000MeV = hst_dsig_dKEp_qelcc_1000MeV -> GetBinContent(i);
183 
184  dsig_dKEp_qelcc_0500MeV = TMath::Max(0., dsig_dKEp_qelcc_0500MeV);
185  dsig_dKEp_qelcc_1000MeV = TMath::Max(0., dsig_dKEp_qelcc_1000MeV);
186 
187  out_stream << setw(15) << KEp
188  << setw(15) << dsig_dKEp_qelcc_0500MeV
189  << setw(15) << dsig_dKEp_qelcc_1000MeV
190  << endl;
191  }
192 
193  out_stream.close();
194 
195  delete chain;
196 }
size_t i(0)
the ParameterSet object passed in for the configuration of a destination should be the only source that can affect the behavior of that destination This is to eliminate the dependencies of configuring a destination from multiple mostly from the defaults It suppresses possible glitches about changing the configuration file somewhere outside of a destination segament might still affect the behavior of that destination In the previous configuration for a specific the value of a certain e may come from following and have been suppressed It the configuring ParameterSet object for each destination will be required to carry a parameter list as complete as possible If a parameter still cannot be found in the ParameterSet the configuration code will go look for a hardwired default directly The model is a great simplicity comparing with the previous especially when looking for default values Another great advantage is most of the parameters now have very limited places that allows to appear Usually they can only appear at one certain level in a configuration file For in the old configuring model or in a default ParameterSet object inside of a or in a category or in a severity object This layout of multiple sources for a single parameter brings great confusion in both writing a configuration and in processing the configuration file Under the new the only allowed place for the parameter limit to appear is inside of a category which is inside of a destination object Other improvements simplify the meaning of a destination name In the old a destination name has multiple folds of meanings the e cout and cerr have the special meaning of logging messages to standard output or standard error the name also serves as the output filename if the destination is a file these names are also references to look up for detailed configurations in configuring the MessageFacility The multi purpose of the destination name might cause some unwanted behavior in either writing or parsing the configuration file To amend in the new model the destination name is now merely a name for a which might represent the literal purpose of this or just an id All other meanings of the destinations names now go into the destination ParameterSet as individual such as the type parameter and filename parameter Following is the deatiled rule for the new configuring Everything that is related with MessageFacility configuration must be wrapped in a single ParameterSet object with the name MessageFacility The MessageFacility ParameterSet object contains a series of top level parameters These parameters can be chosen a vector of string listing the name of debug enabled models Or use *to enable debug messages in all modules a vector of string a vector of string a vector of string a ParameterSet object containing the list of all destinations The destinations ParameterSet object is a combination of ParameterSet objects for individual destinations There are two types of destinations that you can insert in the destinations ParameterSet ordinary including cout
const int kRunNu[kNSamples][kNWCur][kNEnergies][kNRunsPerCase]
Definition: nuint09_qel2.C:31
const int kNEnergies
Definition: nuint09_qel2.C:20
const int kNRunsPerCase
Definition: nuint09_qel2.C:21
int kZ[3]
Definition: nuint09_qel2.C:47
const char * kLabel[kNSamples]
Definition: nuint09_qel2.C:24
var ie
Definition: slidy.js:14
const int kNSamples
Definition: nuint09_qel2.C:18
const int kNWCur
Definition: nuint09_qel2.C:19
int kA[3]
Definition: nuint09_qel2.C:54

Variable Documentation

int kA[3]
Initial value:
=
{
12,
16,
56
}

Definition at line 54 of file nuint09_qel2.C.

const char* kLabel[kNSamples]
Initial value:
=
{
"nu_mu_C12",
"nu_mu_O16",
"nu_mu_Fe56"
}

Definition at line 24 of file nuint09_qel2.C.

const int kNEnergies = 2

Definition at line 20 of file nuint09_qel2.C.

const int kNEvtPerRun = 100000

Definition at line 22 of file nuint09_qel2.C.

const int kNRunsPerCase = 5

Definition at line 21 of file nuint09_qel2.C.

const int kNSamples = 3

Definition at line 18 of file nuint09_qel2.C.

const int kNWCur = 1

Definition at line 19 of file nuint09_qel2.C.

Initial value:
=
{
{
{ {200100, 200101, 200102, 200103, 200104},
{200200, 200201, 200202, 200203, 200204} }
},
{
{ {210100, 210101, 210102, 210103, 210104},
{210200, 210201, 210202, 210203, 210204} }
},
{
{ {220100, 220101, 220102, 220103, 220104},
{220200, 220201, 220202, 220203, 220204} }
}
}

Definition at line 31 of file nuint09_qel2.C.

int kZ[3]
Initial value:
=
{
6,
8,
26
}

Definition at line 47 of file nuint09_qel2.C.