20 #include "TGraphAsymmErrors.h" 31 double calcPoisson(vector<vector<float> > &entries, vector<vector<float> > &weights, vector<float> &powers,
float &uncert);
40 yield.push_back(10000);
43 tags.push_back(
"$N0$");
44 tags.push_back(
"$\\frac{N0}{N1}$");
45 tags.push_back(
"$N2\\times\\frac{N0}{N1}$");
46 tags.push_back(
"$\\frac{N2}{N3}\\times\\frac{N0}{N1}$");
48 vector<float> ipowers;
49 ipowers.push_back(1.);
50 ipowers.push_back(-1.);
51 ipowers.push_back(1.);
52 ipowers.push_back(-1.);
54 cout<<
"\\begin{table}"<<endl;
55 time_t begtime, endtime;
57 for(
unsigned yind(0); yind<yield.size(); yind++){
59 cout<<endl<<
"\\begin{tabular}{l | rc | rc | c}\\hline\\hline"<<endl;
60 cout<<
" & $N_{\\rm Poisson}$ & $\\Delta N_{\\rm P}$ [\\%] " 61 <<
"& $N_{\\Gamma}$ & $\\Delta N_{\\Gamma}$ [\\%] & " 62 <<
"$\\Delta N_{\\rm P}/\\Delta N_\\Gamma$ [\\%]\\\\ \\hline"<<endl;
63 vector<vector<float> > entries;
64 vector<vector<float> > weights;
67 for(
unsigned ind(0); ind<ipowers.size(); ind++){
68 entries.push_back(vector<float>());
69 entries[ind].push_back(yield[yind]);
70 weights.push_back(vector<float>());
71 weights[ind].push_back(1.);
73 TString label(tags[ind]);
74 for(
unsigned entry(0); entry<entries.size(); entry++){
75 TString number(
""), reptag(
"N");
76 number += entries[entry][0]; reptag += entry;
77 label.ReplaceAll(reptag, number);
79 powers.push_back(ipowers[ind]);
80 float k_poi, ek_poi, k_gam, epk_gam, emk_gam;
81 k_poi =
calcPoisson(entries, weights, powers, ek_poi);
82 k_gam =
calcKappa(entries, weights, powers, emk_gam, epk_gam,
false,
true);
84 int digits(static_cast<int>(2-log10(k_poi)));
85 if(digits<0) digits=0;
86 cout<<setw(28)<<label<<
" & $"<<setw(6)<<
RoundNumber(k_poi,digits)<<
"\\pm" 93 <<
"}_{-"<<
RoundNumber(ek_poi*100,1,emk_gam)<<
"}$ \\\\"<<endl;
95 cout<<
"\\hline\\hline\\end{tabular}\\vspace{0.1in}"<<endl<<endl;
97 cout<<
"\\end{table}"<<endl<<endl;
99 cout<<endl<<
"Calculation took "<<difftime(endtime, begtime)<<
" seconds"<<endl<<endl;
102 double calcPoisson(vector<vector<float> > &entries, vector<vector<float> > &weights, vector<float> &powers,
float &uncert){
104 for(
unsigned obs(0); obs < powers.size(); obs++) {
106 for(
unsigned sam(0); sam < entries[obs].size(); sam++)
107 observed += entries[obs][sam]*weights[obs][sam];
108 if(observed==0 && powers[obs] < 0)
return -1.;
109 kappa *= pow(observed, powers[obs]);
112 for(
unsigned obs(0); obs < powers.size(); obs++) {
114 for(
unsigned sam(0); sam < entries[obs].size(); sam++)
115 observed += entries[obs][sam]*weights[obs][sam];
116 if(observed==0 && powers[obs] < 0)
return -1.;
117 if(observed==0) observed=1;
118 uncert += pow(kappa*sqrt(observed+1)/observed, 2);
120 uncert = sqrt(uncert);
double calcPoisson(vector< vector< float > > &entries, vector< vector< float > > &weights, vector< float > &powers, float &uncert)
TString RoundNumber(double num, int decimals, double denom=1.)
double calcKappa(std::vector< std::vector< float > > &entries, std::vector< std::vector< float > > &weights, std::vector< float > &powers, float &mSigma, float &pSigma, bool do_data=false, bool verbose=false, bool do_plot=false, int nrep=100000)