1 |
kkotov |
1.1 |
#include<math.h>
|
2 |
|
|
#include<stdlib.h>
|
3 |
|
|
#include<iostream>
|
4 |
|
|
|
5 |
|
|
using namespace std;
|
6 |
|
|
|
7 |
|
|
extern "C" {
|
8 |
|
|
void pyinit_(char *, char*, char*, double*, int, int, int);
|
9 |
|
|
void pystat_(int *);
|
10 |
|
|
void pylist_(int *);
|
11 |
|
|
void pyevnt_(void);
|
12 |
|
|
void pyckbd_(void);
|
13 |
|
|
void initpydata_(void);
|
14 |
|
|
double pyalps_(double *);
|
15 |
|
|
double pyalem_(double *);
|
16 |
|
|
|
17 |
|
|
extern struct {
|
18 |
|
|
int msel, mselpd, msub[500], kfin[81][2];
|
19 |
|
|
double ckin[200];
|
20 |
|
|
} pysubs_;
|
21 |
|
|
|
22 |
|
|
extern struct {
|
23 |
|
|
int mstu[200];
|
24 |
|
|
double paru[200];
|
25 |
|
|
int mstj[200];
|
26 |
|
|
double parj[200];
|
27 |
|
|
} pydat1_;
|
28 |
|
|
|
29 |
|
|
extern struct {
|
30 |
|
|
int kchg[4][500];
|
31 |
|
|
double pmas[4][500], parf[2000], vckm[4][4];
|
32 |
|
|
} pydat2_;
|
33 |
|
|
|
34 |
|
|
extern struct {
|
35 |
|
|
int mdcy[3][500], mdme[2][8000];
|
36 |
|
|
double brat[8000];
|
37 |
|
|
int kfdp[5][8000];
|
38 |
|
|
} pydat3_;
|
39 |
|
|
|
40 |
|
|
extern struct {
|
41 |
|
|
int mstp[200];
|
42 |
|
|
double parp[200];
|
43 |
|
|
int msti[200];
|
44 |
|
|
double pari[200];
|
45 |
|
|
} pypars_;
|
46 |
|
|
|
47 |
|
|
extern struct {
|
48 |
|
|
int itcm[100];
|
49 |
|
|
double rtcm[100];
|
50 |
|
|
} pytcsm_;
|
51 |
|
|
|
52 |
|
|
const int pyjets_maxn = 4000;
|
53 |
|
|
extern struct {
|
54 |
|
|
int n, npad, k[5][pyjets_maxn];
|
55 |
|
|
double p[5][pyjets_maxn], v[5][pyjets_maxn];
|
56 |
|
|
} pyjets_;
|
57 |
|
|
|
58 |
|
|
extern struct {
|
59 |
|
|
int mrpy[6];
|
60 |
|
|
double rrpy[100];
|
61 |
|
|
} pydatr_;
|
62 |
|
|
|
63 |
|
|
extern struct {
|
64 |
|
|
int ngenpd, ngen[3][501];
|
65 |
|
|
double xsec[3][501];
|
66 |
|
|
} pyint5_;
|
67 |
|
|
|
68 |
|
|
}
|
69 |
|
|
|
70 |
|
|
#include "branchings.C"
|
71 |
|
|
#include "xsecLimits.C"
|
72 |
|
|
|
73 |
|
|
int main(int argc, char *argv[]){
|
74 |
|
|
// Initialize defaults:
|
75 |
|
|
// double lambda = atof(argv[1]);
|
76 |
|
|
double mqStar = atof(argv[1]); //atof(argv[2]);
|
77 |
|
|
double f = 1; //atof(argv[3]);
|
78 |
|
|
double fp = 1; //atof(argv[4]);
|
79 |
|
|
double fs = atof(argv[2]); //atof(argv[5]);
|
80 |
|
|
|
81 |
|
|
double limitXsec = ciLimits(mqStar)*1E-9;
|
82 |
|
|
|
83 |
|
|
initpydata_(); pyckbd_();
|
84 |
|
|
// Random seed:
|
85 |
|
|
pydatr_.mrpy[0] = 300;
|
86 |
|
|
// Q* contact interaction cards:
|
87 |
|
|
pysubs_.msel = 0;
|
88 |
|
|
pysubs_.msub[146] = 0; // d*
|
89 |
|
|
pysubs_.msub[147] = 0; // u*
|
90 |
|
|
pysubs_.msub[166] = 0; // d* ci
|
91 |
|
|
pysubs_.msub[167] = 1; // u* ci
|
92 |
|
|
pydat2_.pmas[0][342] = mqStar; // mass if d*
|
93 |
|
|
pydat2_.pmas[0][343] = mqStar; // mass of u*
|
94 |
|
|
pytcsm_.rtcm[41] = mqStar; // Lambda = mass for now, difference is accounted later
|
95 |
|
|
pytcsm_.rtcm[43] = f; // f
|
96 |
|
|
pytcsm_.rtcm[44] = fp; // fp
|
97 |
|
|
pytcsm_.rtcm[45] = fs; // fs
|
98 |
|
|
|
99 |
|
|
pydat3_.mdme[0][189] = 1;
|
100 |
|
|
pydat3_.mdme[0][190] = 1;
|
101 |
|
|
pydat3_.mdme[0][191] = 1;
|
102 |
|
|
pydat3_.mdme[0][192] = 1;
|
103 |
|
|
pydat3_.mdme[0][193] = 1;
|
104 |
|
|
pydat3_.mdme[0][194] = 1;
|
105 |
|
|
pydat3_.mdme[0][195] = 1;
|
106 |
|
|
pydat3_.mdme[0][196] = 1;
|
107 |
|
|
pydat3_.mdme[0][197] = 1;
|
108 |
|
|
pydat3_.mdme[0][198] = 1;
|
109 |
|
|
pydat3_.mdme[0][199] = 1;
|
110 |
|
|
pydat3_.mdme[0][200] = 1;
|
111 |
|
|
pydat3_.mdme[0][201] = 1;
|
112 |
|
|
pydat3_.mdme[0][202] = 1;
|
113 |
|
|
pydat3_.mdme[0][203] = 1;
|
114 |
|
|
pydat3_.mdme[0][204] = 1;
|
115 |
|
|
pydat3_.mdme[0][205] = 1;
|
116 |
|
|
pydat3_.mdme[0][206] = 1;
|
117 |
|
|
pydat3_.mdme[0][207] = 1;
|
118 |
|
|
pydat3_.mdme[0][208] = 1;
|
119 |
|
|
|
120 |
|
|
pydat3_.mdme[0][173] = 1;
|
121 |
|
|
pydat3_.mdme[0][174] = 1;
|
122 |
|
|
pydat3_.mdme[0][175] = 1;
|
123 |
|
|
pydat3_.mdme[0][176] = 1;
|
124 |
|
|
pydat3_.mdme[0][177] = 1;
|
125 |
|
|
pydat3_.mdme[0][178] = 1;
|
126 |
|
|
pydat3_.mdme[0][181] = 1;
|
127 |
|
|
pydat3_.mdme[0][182] = 1;
|
128 |
|
|
pydat3_.mdme[0][183] = 1;
|
129 |
|
|
pydat3_.mdme[0][184] = 1;
|
130 |
|
|
pydat3_.mdme[0][185] = 1;
|
131 |
|
|
pydat3_.mdme[0][186] = 1;
|
132 |
|
|
pydat3_.mdme[0][187] = 1;
|
133 |
|
|
|
134 |
|
|
pydat3_.mdme[0][4070] = 1;
|
135 |
|
|
pydat3_.mdme[0][4071] = 1;
|
136 |
|
|
pydat3_.mdme[0][4072] = 1;
|
137 |
|
|
pydat3_.mdme[0][4073] = 1;
|
138 |
|
|
pydat3_.mdme[0][4074] = 1;
|
139 |
|
|
pydat3_.mdme[0][4075] = 1;
|
140 |
|
|
pydat3_.mdme[0][4076] = 1;
|
141 |
|
|
pydat3_.mdme[0][4077] = 1;
|
142 |
|
|
|
143 |
|
|
// pysubs_.ckin[0] = 60.;
|
144 |
|
|
// pysubs_.ckin[1] = 120.;
|
145 |
|
|
// Pythia's D6T UE cards:
|
146 |
|
|
pydat1_.mstj[10] = 3;
|
147 |
|
|
pydat1_.mstj[21] = 2;
|
148 |
|
|
pydat1_.parj[70] = 10;
|
149 |
|
|
pypars_.mstp[1] = 1;
|
150 |
|
|
pypars_.mstp[32] = 0;
|
151 |
|
|
pypars_.mstp[50] = 10042;
|
152 |
|
|
pypars_.mstp[51] = 2;
|
153 |
|
|
pypars_.mstp[80] = 1;
|
154 |
|
|
pypars_.mstp[81] = 4;
|
155 |
|
|
pydat1_.mstu[20] = 1;
|
156 |
|
|
pypars_.parp[81] = 1.8387;
|
157 |
|
|
pypars_.parp[88] = 1960.;
|
158 |
|
|
pypars_.parp[82] = 0.5;
|
159 |
|
|
pypars_.parp[83] = 0.4;
|
160 |
|
|
pypars_.parp[89] = 0.16;
|
161 |
|
|
pypars_.parp[66] = 2.5;
|
162 |
|
|
pypars_.parp[84] = 1.0;
|
163 |
|
|
pypars_.parp[85] = 1.0;
|
164 |
|
|
pypars_.parp[61] = 1.25;
|
165 |
|
|
pypars_.parp[63] = 0.2;
|
166 |
|
|
pypars_.mstp[90] = 1;
|
167 |
|
|
pypars_.parp[90] = 2.1;
|
168 |
|
|
pypars_.parp[92] = 15.0;
|
169 |
|
|
|
170 |
|
|
// Pythia ProQ20 UE cards:
|
171 |
|
|
/* pydat1_.mstu[20] = 1;
|
172 |
|
|
pydat1_.mstj[21] = 2;
|
173 |
|
|
pydat1_.parj[70] = 10.;
|
174 |
|
|
pypars_.mstp[1] = 1;
|
175 |
|
|
pypars_.mstp[32] = 0;
|
176 |
|
|
pypars_.mstp[50] = 7;
|
177 |
|
|
pypars_.mstp[51] = 1;
|
178 |
|
|
pypars_.mstp[80] = 1;
|
179 |
|
|
pypars_.mstp[81] = 4;
|
180 |
|
|
pydat1_.parj[0] = 0.073;
|
181 |
|
|
pydat1_.parj[1] = 0.2;
|
182 |
|
|
pydat1_.parj[2] = 0.94;
|
183 |
|
|
pydat1_.parj[3] = 0.032;
|
184 |
|
|
pydat1_.parj[10] = 0.31;
|
185 |
|
|
pydat1_.parj[11] = 0.4;
|
186 |
|
|
pydat1_.parj[12] = 0.54;
|
187 |
|
|
pydat1_.parj[24] = 0.63;
|
188 |
|
|
pydat1_.parj[25] = 0.12;
|
189 |
|
|
pydat1_.mstj[10] = 5;
|
190 |
|
|
pydat1_.parj[20] = 0.313;
|
191 |
|
|
pydat1_.parj[40] = 0.49;
|
192 |
|
|
pydat1_.parj[41] = 1.2;
|
193 |
|
|
pydat1_.parj[45] = 1.0;
|
194 |
|
|
pydat1_.parj[46] = 1.0;
|
195 |
|
|
pypars_.parp[61] = 2.9;
|
196 |
|
|
pypars_.parp[63] = 0.14;
|
197 |
|
|
pypars_.parp[66] = 2.65;
|
198 |
|
|
pypars_.parp[81] = 1.9;
|
199 |
|
|
pypars_.parp[82] = 0.83;
|
200 |
|
|
pypars_.parp[83] = 0.6;
|
201 |
|
|
pypars_.parp[84] = 0.86;
|
202 |
|
|
pypars_.parp[85] = 0.93;
|
203 |
|
|
pypars_.parp[88] = 1800.;
|
204 |
|
|
pypars_.parp[89] = 0.22;
|
205 |
|
|
pypars_.mstp[90] = 1;
|
206 |
|
|
pypars_.parp[90] = 2.1;
|
207 |
|
|
pypars_.parp[92] = 5.0;
|
208 |
|
|
*/
|
209 |
|
|
double energy = 7000.;
|
210 |
|
|
char opt1[4] = "CMS";
|
211 |
|
|
char opt2[2] = "p";
|
212 |
|
|
char opt3[2] = "p";
|
213 |
|
|
|
214 |
|
|
pyinit_(opt1,opt2,opt3,&energy,3,1,1);
|
215 |
|
|
for(int event=0; event<1000; event++) pyevnt_();
|
216 |
|
|
double xsecU = pyint5_.xsec[2][0];
|
217 |
|
|
cout<<"xsecU="<<xsecU<<endl;
|
218 |
|
|
|
219 |
|
|
pysubs_.msub[166] = 1; // d* ci
|
220 |
|
|
pysubs_.msub[167] = 0; // u* ci
|
221 |
|
|
|
222 |
|
|
pyinit_(opt1,opt2,opt3,&energy,3,1,1);
|
223 |
|
|
for(int event=0; event<1000; event++) pyevnt_();
|
224 |
|
|
double xsecD = pyint5_.xsec[2][0];
|
225 |
|
|
cout<<"xsecD="<<xsecD<<endl;
|
226 |
|
|
|
227 |
|
|
// cout<<"!!!!! alphaS="<<aS(mqStar*mqStar)<<endl;
|
228 |
|
|
// cout<<"!!!!! alphaE="<<aE(mqStar*mqStar)<<endl;
|
229 |
|
|
// cout<<" (alphaS_91.2="<<aS(91.2*91.2)<<" alphaS_500="<<aS(500.*500.)<<")"<<endl;
|
230 |
|
|
// int stat=1;
|
231 |
|
|
// pystat_(&stat);
|
232 |
|
|
// stat=13;
|
233 |
|
|
// pylist_(&stat);
|
234 |
|
|
cout<<" Total cross section: "<<pyint5_.xsec[2][0]<<" and the limit: "<<limitXsec<<endl;
|
235 |
|
|
|
236 |
|
|
double closestXsec=0, Lambda=0;
|
237 |
|
|
for(double lambda=500; lambda<1500; lambda++){
|
238 |
|
|
// Cross section of the u*->uZ for various Lambdas
|
239 |
|
|
double xsec1 =
|
240 |
|
|
xsecU * (mqStar/lambda)*(mqStar/lambda)*(mqStar/lambda)*(mqStar/lambda) // total xsec of the u* production
|
241 |
|
|
*uStar2qZ(mqStar,mqStar)/(qStar2qg(mqStar,mqStar,fs) + uStar2qA(mqStar,mqStar) + qStar2qW(mqStar,mqStar) + uStar2qZ(mqStar,mqStar) + qStar2qqq(mqStar,mqStar) + qStar2qll(mqStar,mqStar)) // u*->uZ
|
242 |
|
|
* 0.03366; // Z->mm
|
243 |
|
|
double xsec2 =
|
244 |
|
|
xsecD * (mqStar/lambda)*(mqStar/lambda)*(mqStar/lambda)*(mqStar/lambda) // total xsec of the d* production
|
245 |
|
|
*dStar2qZ(mqStar,mqStar)/(qStar2qg(mqStar,mqStar,fs) + dStar2qA(mqStar,mqStar) + qStar2qW(mqStar,mqStar) + dStar2qZ(mqStar,mqStar) + qStar2qqq(mqStar,mqStar) + qStar2qll(mqStar,mqStar)) // u*->uZ
|
246 |
|
|
* 0.03366; // Z->mm
|
247 |
|
|
|
248 |
|
|
if(lambda>999 && lambda<1001 ) cout<<"lambda="<<lambda<<" xsec1="<<xsec1<<" xsec2="<<xsec2<<endl;
|
249 |
|
|
double xsec = xsec1 + xsec2;
|
250 |
|
|
if( fabs(xsec-limitXsec)<fabs(closestXsec-limitXsec) ){
|
251 |
|
|
closestXsec=xsec;
|
252 |
|
|
Lambda = lambda;
|
253 |
|
|
}
|
254 |
|
|
}
|
255 |
|
|
cout<<" Partial cross section: "<<closestXsec<<endl;
|
256 |
|
|
cout<<" Lambda: "<<Lambda<<endl;
|
257 |
|
|
|
258 |
|
|
return 0;
|
259 |
|
|
}
|