ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/UfCode/UserArea/StatTools/qStar.cc
Revision: 1.3
Committed: Thu Mar 31 19:46:45 2011 UTC (14 years, 1 month ago) by kkotov
Content type: text/plain
Branch: MAIN
CVS Tags: V2012-H-02, V2012-01-00, V2011-01-01, V2011-01-00, AnnaDimuon, V01-00-01, V01-00-00, HEAD
Changes since 1.2: +47 -19 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #include<math.h>
2 #include<stdlib.h>
3 #include<iostream>
4
5 // To compile with Pythia:
6 // g++ -g -c -Wall initpydata.f
7 // g++ -g -c -Wall pythia-6.4.22.f
8 // g++ -g -c -Wall qStar.cc
9 // g++ -o qStar qStar.o pythia-6.4.22.o initpydata.o -L./lib/ -lLHAPDF -lgfortran -static
10 // setenv LHAPATH /raid/raid3/cms/kkotov/Pythia/share/lhapdf/PDFsets/
11
12 using namespace std;
13
14 extern "C" {
15 void pyinit_(char *, char*, char*, double*, int, int, int);
16 void pystat_(int *);
17 void pylist_(int *);
18 void pyevnt_(void);
19 void pyckbd_(void);
20 void initpydata_(void);
21 double pyalps_(double *);
22 double pyalem_(double *);
23
24 extern struct {
25 int msel, mselpd, msub[500], kfin[81][2];
26 double ckin[200];
27 } pysubs_;
28
29 extern struct {
30 int mstu[200];
31 double paru[200];
32 int mstj[200];
33 double parj[200];
34 } pydat1_;
35
36 extern struct {
37 int kchg[4][500];
38 double pmas[4][500], parf[2000], vckm[4][4];
39 } pydat2_;
40
41 extern struct {
42 int mdcy[3][500], mdme[2][8000];
43 double brat[8000];
44 int kfdp[5][8000];
45 } pydat3_;
46
47 extern struct {
48 int mstp[200];
49 double parp[200];
50 int msti[200];
51 double pari[200];
52 } pypars_;
53
54 extern struct {
55 int itcm[100];
56 double rtcm[100];
57 } pytcsm_;
58
59 const int pyjets_maxn = 4000;
60 extern struct {
61 int n, npad, k[5][pyjets_maxn];
62 double p[5][pyjets_maxn], v[5][pyjets_maxn];
63 } pyjets_;
64
65 extern struct {
66 int mrpy[6];
67 double rrpy[100];
68 } pydatr_;
69
70 extern struct {
71 int ngenpd, ngen[3][501];
72 double xsec[3][501];
73 } pyint5_;
74
75 }
76
77 //#include "branchings.C"
78 double aS(double q2){ return pyalps_(&q2); }
79 double aE(double q2){ return pyalem_(&q2); }
80 double qStar2qg (double m,double lambda, double fS){ return m*aS(m*m)/3.*fS*fS*(m/lambda)*(m/lambda); } // Eq. (10)
81 // Now reminding several Standard Model facts:
82 // 1) Only left-handed doublets of the SU(2) isospin group couple to the weak bosons
83 // 2) For the _left-handed_ quarks the (T3,Y) parameters are:
84 // u(1/2,1/3); d(-1/2,1/3); c(1/2,1/3); b(-1/2,1/3); t(1/2,1/3); s(-1/2,1/3)
85 const double qU = 2./3., qD = 1./3.; // this is eq. (7) assuming f=f'=1
86 double uStar2qA (double m,double lambda){ return m*aE(m*m)/4.*qU*qU*(m/lambda)*(m/lambda); } // Eq. (5) and (7) for u*
87 double dStar2qA (double m,double lambda){ return m*aE(m*m)/4.*qD*qD*(m/lambda)*(m/lambda); } // Eq. (5) and (7) for d*
88 // Some constatns:
89 const double sin2_theta_W=0.23, cos2_theta_W=1-sin2_theta_W, fZ_uStar=0.35, fZ_dStar=0.42, mW=80.4, mZ=91.2;
90 // Widths to the W/Z bosons:
91 double qStar2qW (double m,double lambda){ return m*aE(m*m)/8./sin2_theta_W * 1/2.
92 *(m/lambda)*(m/lambda)*(1-mW*mW/m/m)*(1-mW*mW/m/m)
93 *(2+mW*mW/m/m); }
94 double uStar2qZ (double m,double lambda){ return m*aE(m*m)/8./cos2_theta_W/sin2_theta_W * fZ_uStar*fZ_uStar
95 *(m/lambda)*(m/lambda)*(1-mZ*mZ/m/m)*(1-mZ*mZ/m/m)
96 *(2+mZ*mZ/m/m); }
97 double dStar2qZ (double m,double lambda){ return m*aE(m*m)/8./cos2_theta_W/sin2_theta_W * fZ_dStar*fZ_dStar
98 *(m/lambda)*(m/lambda)*(1-mZ*mZ/m/m)*(1-mZ*mZ/m/m)
99 *(2+mZ*mZ/m/m); }
100 // C.I. only decays; assume q* can decay to any of 3 generations of quarks and leptons
101 double qStar2qll(double m,double lambda){ return m/96./3.1415927*(m/lambda)*(m/lambda)*(m/lambda)*(m/lambda)*1*(1 +1+1+1+1+1); }
102 double qStar2qqq(double m,double lambda){ return m/96./3.1415927*(m/lambda)*(m/lambda)*(m/lambda)*(m/lambda)*3*(4/3.+1+1+1+1+1); }
103
104 //#include "xsecLimits.C"
105 double ciLimitsOld(double mass){ //mass in GeV/c/c
106 return 0.430487-1000.*0.115741/mass+1000.*1000.*0.106742/mass/mass;
107 }
108 double giLimitsOld(double mass){ //same
109 return 0.780309-1000.*1.47909/mass+1000.*1000.*0.981498/mass/mass;
110 }
111 double ciLimits(double mass){ //mass in GeV/c/c
112 return 0.293825-1000.*0.0635844/mass+1000.*1000.*0.0736631/mass/mass;
113 }
114 double giLimits(double mass){ //same
115 return 0.845417-1000.*1.45942/mass+1000.*1000.*0.840098/mass/mass;
116 }
117
118 int main(int argc, char *argv[]){
119 // Initialize defaults:
120 // double lambda = atof(argv[1]);
121 double mqStar = atof(argv[1]); //atof(argv[2]);
122 double f = 1; //atof(argv[3]);
123 double fp = 1; //atof(argv[4]);
124 double fs = 1; //atof(argv[2]); //atof(argv[5]);
125
126 int mode = 1;
127 if( argv[2][0] == 'c' ) mode = 1; else mode = -1;
128
129 double limitXsec = ( mode>0 ? ciLimits(mqStar)*1E-9 : giLimits(mqStar)*1E-9 );
130 //double limitXsec = ( mode>0 ? ciLimitsOld(mqStar)*1E-9 : giLimitsOld(mqStar)*1E-9 );
131
132 initpydata_(); pyckbd_();
133 // Random seed:
134 pydatr_.mrpy[0] = 300;
135 // Q* contact interaction cards:
136 pysubs_.msel = 0;
137 pysubs_.msub[146] = 0; // d*
138 pysubs_.msub[147] = (mode<0?1:0); // u*
139 pysubs_.msub[166] = 0; // d* ci
140 pysubs_.msub[167] = (mode>0?1:0); // u* ci
141 pydat2_.pmas[0][342] = mqStar; // mass if d*
142 pydat2_.pmas[0][343] = mqStar; // mass of u*
143 pytcsm_.rtcm[41] = mqStar; // Lambda = mass for now, difference is accounted later
144 pytcsm_.rtcm[43] = f; // f
145 pytcsm_.rtcm[44] = fp; // fp
146 pytcsm_.rtcm[45] = fs; // fs
147
148 // W decays
149 pydat3_.mdme[0][189] = 1;
150 pydat3_.mdme[0][190] = 1;
151 pydat3_.mdme[0][191] = 1;
152 pydat3_.mdme[0][192] = 1;
153 pydat3_.mdme[0][193] = 1;
154 pydat3_.mdme[0][194] = 1;
155 pydat3_.mdme[0][195] = 1;
156 pydat3_.mdme[0][196] = 1;
157 pydat3_.mdme[0][197] = 1;
158 pydat3_.mdme[0][198] = 1;
159 pydat3_.mdme[0][199] = 1;
160 pydat3_.mdme[0][200] = 1;
161 pydat3_.mdme[0][201] = 1;
162 pydat3_.mdme[0][202] = 1;
163 pydat3_.mdme[0][203] = 1;
164 pydat3_.mdme[0][204] = 1;
165 pydat3_.mdme[0][205] = 1;
166 pydat3_.mdme[0][206] = 1;
167 pydat3_.mdme[0][207] = 1;
168 pydat3_.mdme[0][208] = 1;
169
170 // Z decays
171 pydat3_.mdme[0][173] = 1;
172 pydat3_.mdme[0][174] = 1;
173 pydat3_.mdme[0][175] = 1;
174 pydat3_.mdme[0][176] = 1;
175 pydat3_.mdme[0][177] = 1;
176 pydat3_.mdme[0][178] = 1;
177 pydat3_.mdme[0][181] = 1;
178 pydat3_.mdme[0][182] = 1;
179 pydat3_.mdme[0][183] = 1;
180 pydat3_.mdme[0][184] = 1;
181 pydat3_.mdme[0][185] = 1;
182 pydat3_.mdme[0][186] = 1;
183 pydat3_.mdme[0][187] = 1;
184
185 // q* decays
186 pydat3_.mdme[0][4070] = 1; // d*->dg
187 pydat3_.mdme[0][4071] = 1; // d*->d\gamma
188 pydat3_.mdme[0][4072] = 1; // d*->dZ
189 pydat3_.mdme[0][4073] = 1; // d*->uW
190 pydat3_.mdme[0][4074] = 1; // u*->ug
191 pydat3_.mdme[0][4075] = 1; // u*->u\gamma
192 pydat3_.mdme[0][4076] = 1; // u*->uZ
193 pydat3_.mdme[0][4077] = 1; // u*->dW
194
195 // pysubs_.ckin[0] = 60.;
196 // pysubs_.ckin[1] = 120.;
197 // Pythia's D6T UE cards:
198 pydat1_.mstj[10] = 3;
199 pydat1_.mstj[21] = 2;
200 pydat1_.parj[70] = 10;
201 pypars_.mstp[1] = 1;
202 pypars_.mstp[32] = 0;
203 pypars_.mstp[50] = 10042;
204 pypars_.mstp[51] = 2;
205 pypars_.mstp[80] = 1;
206 pypars_.mstp[81] = 4;
207 pydat1_.mstu[20] = 1;
208 pypars_.parp[81] = 1.8387;
209 pypars_.parp[88] = 1960.;
210 pypars_.parp[82] = 0.5;
211 pypars_.parp[83] = 0.4;
212 pypars_.parp[89] = 0.16;
213 pypars_.parp[66] = 2.5;
214 pypars_.parp[84] = 1.0;
215 pypars_.parp[85] = 1.0;
216 pypars_.parp[61] = 1.25;
217 pypars_.parp[63] = 0.2;
218 pypars_.mstp[90] = 1;
219 pypars_.parp[90] = 2.1;
220 pypars_.parp[92] = 15.0;
221
222 // Pythia ProQ20 UE cards:
223 /* pydat1_.mstu[20] = 1;
224 pydat1_.mstj[21] = 2;
225 pydat1_.parj[70] = 10.;
226 pypars_.mstp[1] = 1;
227 pypars_.mstp[32] = 0;
228 pypars_.mstp[50] = 7;
229 pypars_.mstp[51] = 1;
230 pypars_.mstp[80] = 1;
231 pypars_.mstp[81] = 4;
232 pydat1_.parj[0] = 0.073;
233 pydat1_.parj[1] = 0.2;
234 pydat1_.parj[2] = 0.94;
235 pydat1_.parj[3] = 0.032;
236 pydat1_.parj[10] = 0.31;
237 pydat1_.parj[11] = 0.4;
238 pydat1_.parj[12] = 0.54;
239 pydat1_.parj[24] = 0.63;
240 pydat1_.parj[25] = 0.12;
241 pydat1_.mstj[10] = 5;
242 pydat1_.parj[20] = 0.313;
243 pydat1_.parj[40] = 0.49;
244 pydat1_.parj[41] = 1.2;
245 pydat1_.parj[45] = 1.0;
246 pydat1_.parj[46] = 1.0;
247 pypars_.parp[61] = 2.9;
248 pypars_.parp[63] = 0.14;
249 pypars_.parp[66] = 2.65;
250 pypars_.parp[81] = 1.9;
251 pypars_.parp[82] = 0.83;
252 pypars_.parp[83] = 0.6;
253 pypars_.parp[84] = 0.86;
254 pypars_.parp[85] = 0.93;
255 pypars_.parp[88] = 1800.;
256 pypars_.parp[89] = 0.22;
257 pypars_.mstp[90] = 1;
258 pypars_.parp[90] = 2.1;
259 pypars_.parp[92] = 5.0;
260 */
261 double energy = 7000.;
262 char opt1[4] = "CMS";
263 char opt2[2] = "p";
264 char opt3[2] = "p";
265
266 pyinit_(opt1,opt2,opt3,&energy,3,1,1);
267 for(int event=0; event<1000; event++) pyevnt_();
268 double xsecU = pyint5_.xsec[2][0];
269 cout<<"xsecU="<<xsecU<<" (for L=m=1000, f=1 this should be ~1527.26 pb for C.I. and ~105.86 pb for G.I.)"<<endl;
270
271 pysubs_.msub[166] = (mode>0?1:0); // d* ci
272 pysubs_.msub[167] = 0; // u* ci
273
274 pysubs_.msub[146] = (mode<0?1:0); // d*
275 pysubs_.msub[147] = 0; // u*
276
277 pyinit_(opt1,opt2,opt3,&energy,3,1,1);
278 for(int event=0; event<1000; event++) pyevnt_();
279 double xsecD = pyint5_.xsec[2][0];
280 cout<<"xsecD="<<xsecD<<" (for L=m=1000, f=1 this should be ~512.004 pb for C.I. and ~46.34 pb for G.I.)"<<endl;
281
282 // cout<<"!!!!! alphaS="<<aS(mqStar*mqStar)<<endl;
283 // cout<<"!!!!! alphaE="<<aE(mqStar*mqStar)<<endl;
284 // cout<<" (alphaS_91.2="<<aS(91.2*91.2)<<" alphaS_500="<<aS(500.*500.)<<")"<<endl;
285 // int stat=1;
286 // pystat_(&stat);
287 // stat=13;
288 // pylist_(&stat);
289 cout<<" Total cross section: "<<(xsecU+xsecD)<<" and the limit: "<<limitXsec<<endl;
290
291 // The code below works strictly for the contact interaction
292 for(fs=0.0; fs<1.01; fs+=0.1){
293 double closestXsec=0, Lambda=0;
294 for(double lambda=100; lambda<3000; lambda++){
295 // Cross section of the u*->uZ for various Lambdas
296 double br1 = 0, xsec1 = 0;
297 if( mode>0 ){
298 br1 = uStar2qZ(mqStar,lambda)/(qStar2qg(mqStar,lambda,fs) + uStar2qA(mqStar,lambda) + qStar2qW(mqStar,lambda) + uStar2qZ(mqStar,lambda) + qStar2qqq(mqStar,lambda) + qStar2qll(mqStar,lambda)); // u*->uZ
299 xsec1 = xsecU * (mqStar/lambda)*(mqStar/lambda)*(mqStar/lambda)*(mqStar/lambda) // total xsec of the u* production
300 * br1 * 0.03366; // u*->uZ x Z->mm
301 } else {
302 br1 = uStar2qZ(mqStar,lambda)/(qStar2qg(mqStar,lambda,fs) + uStar2qA(mqStar,lambda) + qStar2qW(mqStar,lambda) + uStar2qZ(mqStar,lambda)); // u*->uZ
303 xsec1 = xsecU * (mqStar/lambda)*(mqStar/lambda) * fs*fs // total xsec of the u* production
304 * br1 * 0.03366; // u*->uZ x Z->mm
305 }
306
307 double br2 = 0, xsec2 = 0;
308 if( mode>0 ){
309 br2 = dStar2qZ(mqStar,lambda)/(qStar2qg(mqStar,lambda,fs) + dStar2qA(mqStar,lambda) + qStar2qW(mqStar,lambda) + dStar2qZ(mqStar,lambda) + qStar2qqq(mqStar,lambda) + qStar2qll(mqStar,lambda)); // u*->uZ
310 xsec2 = xsecD * (mqStar/lambda)*(mqStar/lambda)*(mqStar/lambda)*(mqStar/lambda) // total xsec of the d* production
311 * br2 * 0.03366; // d*->dZ x Z->mm
312 } else {
313 br2 = dStar2qZ(mqStar,lambda)/(qStar2qg(mqStar,lambda,fs) + dStar2qA(mqStar,lambda) + qStar2qW(mqStar,lambda) + dStar2qZ(mqStar,lambda)); // u*->uZ
314 xsec2 = xsecD * (mqStar/lambda)*(mqStar/lambda) * fs*fs // total xsec of the d* production
315 * br2 * 0.03366; // d*->dZ x Z->mm
316 }
317
318 if(lambda>500 && lambda<501 ) cout<<"lambda="<<lambda<<" fs="<<fs<<" xsec1(br1="<<br1<<")="<<xsec1<<" xsec2(br2="<<br2<<")="<<xsec2<<endl;
319 double xsec = xsec1 + xsec2;
320 if( fabs(xsec-limitXsec)<fabs(closestXsec-limitXsec) ){
321 closestXsec=xsec;
322 Lambda = lambda;
323 }
324 }
325 cout<<" Partial cross section(fs="<<fs<<",m="<<mqStar<<"): "<<closestXsec<<endl;
326 cout<<" Lambda(fs="<<fs<<",m="<<mqStar<<"): "<<Lambda<<endl;
327 }
328 return 0;
329 }