C++ Interface to Tauola
Plots.cxx
1#include "Plots.h"
2#include <iostream>
3#include <fstream>
4#include <math.h>
5using namespace std;
6
7namespace Tauolapp
8{
9
11 m_incoming_pdg_id(1),
12 m_cosTheta (-0.2),
13 m_n_plot_points (1000)
14{
15}
16
18
19 cout<<"SANC plot 1 (short)..."<<endl;
20
21 double smin = log(6.*6.)+0.0001;
22 double smax = log(17000.*17000.);
23 double step = (smax-smin)/(m_n_plot_points-1);
24
25 ofstream f1,f2,f3;
26 f1.open("f-sanc.txt");
27 f2.open("f-born.txt");
28 f3.open("f-plzap0.txt");
29 for(int i=0; i<m_n_plot_points; i++)
30 {
31 double s = exp(smin+i*step);
32
33 // Write SANC value
34 t_pair.recalculateRij(m_incoming_pdg_id,15,s,m_cosTheta);
35 f1<<sqrt(s)<<" "<<t_pair.m_R[0][3]<<endl;
36
37 // Write Born-level value
38 // (assuming table 11 is filled with born-level data)
39 t_pair.recalculateRij(11,15,s,m_cosTheta);
40 f2<<sqrt(s)<<" "<<t_pair.m_R[0][3]<<endl;
41
42 int outgoing_pdg_id = 15;
43
44 // Write PLZAP0 value
45 double pz = 1-plzap0_(&m_incoming_pdg_id,&outgoing_pdg_id,&s, &m_cosTheta);
46 t_pair.m_R[0][3]=2*pz-1;
47 f3<<sqrt(s)<<" "<<t_pair.m_R[0][3]<<endl;
48 }
49 f1.close();
50 f2.close();
51 f3.close();
52}
53
55
56 cout<<"SANC plot 2 (short)..."<<endl;
57
58 double smin = log(6.*6.)+0.0001;
59 double smax = log(17000.*17000.);
60 double step = (smax-smin)/(m_n_plot_points-1);
61
62 ofstream f1,f2,f3;
63 f1.open("f-w-single-point.txt");
64 f2.open("f-w0-single-point.txt");
65 f3.open("f-ww0-single-point.txt");
66
67 for(int i=0; i<m_n_plot_points; i++){
68
69 double s=exp(smin+i*step);
70 t_pair.recalculateRij(m_incoming_pdg_id,15,s,m_cosTheta);
71
72 // Write w, w0 and w/w0
73 f1<<sqrt(s)<<" "<<Tauola::getEWwt()<<endl;
74 f2<<sqrt(s)<<" "<<Tauola::getEWwt0()<<endl;
75 f3<<sqrt(s)<<" "<<Tauola::getEWwt()/Tauola::getEWwt0()<<endl;
76 }
77 f1.close();
78 f2.close();
79 f3.close();
80}
81
83
84 cout<<"SANC plot 3 (long)..."<<endl;
85
86 double smin = log(6.*6.)+0.0001;
87 double smax = log(17000.*17000.);
88 double step = (smax-smin)/(m_n_plot_points-1);
89
90 ofstream f1;
91 f1.open("f-err.txt");
92 double costheta=-1.;
93
94 for(int i=0; i<m_n_plot_points; i++){
95
96 double buf=0.,err=0.;
97
98 for(int j=0; j<m_n_plot_points; j++){
99
100 double s = exp(smin+j*step);
101
102 // Get value from SANC table
103 t_pair.recalculateRij(m_incoming_pdg_id,15,s,costheta);
104 buf = t_pair.m_R[0][3];
105 t_pair.recalculateRij(11,15,s,costheta);
106
107 // Calculate error between SANC and Born-level
108 err += (buf-t_pair.m_R[0][3])*(buf-t_pair.m_R[0][3]);
109 }
110
111 f1<<costheta<<" "<<err/m_n_plot_points<<endl;
112 err=0.;
113 costheta+=2./m_n_plot_points;
114 }
115
116 f1.close();
117}
118
120
121 cout<<"SANC plot 4 (medium)..."<<endl;
122
123 double smin = log(6.*6.);
124 double smax = log(17000.*17000.);
125 double step = (smax-smin)/(m_n_plot_points-1);
126
127 ofstream f1,f2,f3;
128 f1.open("f-cross.txt");
129 f2.open("f-w.txt");
130 f3.open("f-w0.txt");
131
132 for(int i=0; i<m_n_plot_points; i++){
133
134 double s = exp(smin+i*step);
135 double sumEWwt = 0.;
136 double sumEWwt0 = 0.;
137 double costheta = -1.;
138 int NCOS = 21;
139
140 // Calculate sum of w/w0 for all cosTheta
141 for(int j=0; j<NCOS; j++){
142
143 costheta = -1. + 1.0/NCOS + j*2./NCOS;
144
145 t_pair.recalculateRij(m_incoming_pdg_id,15,s,costheta);
146
147 sumEWwt +=Tauola::getEWwt();
148 sumEWwt0+=Tauola::getEWwt0();
149 }
150
151 f1<<sqrt(s)<<" "<<sumEWwt/sumEWwt0/m_n_plot_points<<endl;
152 f2<<sqrt(s)<<" "<< 2./NCOS * sumEWwt <<endl;
153 f3<<sqrt(s)<<" "<< 2./NCOS * sumEWwt0 <<endl;
154 }
155
156 f1.close();
157 f2.close();
158 f3.close();
159}
160
161void Plots::setSancVariables(int incoming, double cosTheta) {
162 m_incoming_pdg_id = incoming;
163 m_cosTheta = cosTheta;
164}
165
166} // namespace Tauolapp
void setSancVariables(int inc, double cos)
Definition Plots.cxx:161
void SANCtest2()
Definition Plots.cxx:54
void SANCtest4()
Definition Plots.cxx:119
void SANCtest3()
Definition Plots.cxx:82
void SANCtest1()
Definition Plots.cxx:17