]>
Commit | Line | Data |
---|---|---|
da32329d AM |
1 | /////////////////////////////////////////////////////////////////////////// |
2 | // | |
3 | // Copyright 2010 | |
4 | // | |
5 | // This file is part of starlight. | |
6 | // | |
7 | // starlight is free software: you can redistribute it and/or modify | |
8 | // it under the terms of the GNU General Public License as published by | |
9 | // the Free Software Foundation, either version 3 of the License, or | |
10 | // (at your option) any later version. | |
11 | // | |
12 | // starlight is distributed in the hope that it will be useful, | |
13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | // GNU General Public License for more details. | |
16 | // | |
17 | // You should have received a copy of the GNU General Public License | |
18 | // along with starlight. If not, see <http://www.gnu.org/licenses/>. | |
19 | // | |
20 | /////////////////////////////////////////////////////////////////////////// | |
21 | // | |
22 | // File and Version Information: | |
75ce6a3a | 23 | // $Rev:: 193 $: revision of last commit |
24 | // $Author:: jnystrand $: author of last commit | |
25 | // $Date:: 2014-12-01 20:39:46 +0100 #$: date of last commit | |
da32329d AM |
26 | // |
27 | // Description: | |
28 | // | |
29 | // | |
30 | /////////////////////////////////////////////////////////////////////////// | |
31 | ||
32 | ||
33 | #include <iostream> | |
34 | #include <fstream> | |
35 | #include <cmath> | |
36 | ||
37 | #include "reportingUtils.h" | |
38 | #include "starlightconstants.h" | |
39 | #include "bessel.h" | |
40 | #include "photonNucleusCrossSection.h" | |
41 | ||
42 | ||
43 | using namespace std; | |
44 | using namespace starlightConstants; | |
45 | ||
46 | ||
47 | //______________________________________________________________________________ | |
48 | photonNucleusCrossSection::photonNucleusCrossSection(const beamBeamSystem& bbsystem) | |
49 | : _nWbins (inputParametersInstance.nmbWBins() ), | |
50 | _nYbins (inputParametersInstance.nmbRapidityBins() ), | |
51 | _wMin (inputParametersInstance.minW() ), | |
52 | _wMax (inputParametersInstance.maxW() ), | |
53 | _yMax (inputParametersInstance.maxRapidity() ), | |
54 | _beamLorentzGamma (inputParametersInstance.beamLorentzGamma() ), | |
55 | _bbs (bbsystem ), | |
56 | _protonEnergy (inputParametersInstance.protonEnergy() ), | |
57 | _particleType (inputParametersInstance.prodParticleType() ), | |
58 | _beamBreakupMode (inputParametersInstance.beamBreakupMode() ), | |
59 | _coherentProduction(inputParametersInstance.coherentProduction()), | |
60 | _incoherentFactor (inputParametersInstance.incoherentFactor() ), | |
61 | _productionMode (inputParametersInstance.productionMode() ), | |
62 | _sigmaNucleus (_bbs.beam2().A() ) | |
63 | { | |
75ce6a3a | 64 | // The _luminosity variable should note be used. Set it to 1.0 here. |
65 | _luminosity = 1.0; | |
da32329d AM |
66 | |
67 | switch(_particleType) { | |
68 | case RHO: | |
69 | _slopeParameter = 11.0; // [(GeV/c)^{-2}] | |
70 | _vmPhotonCoupling = 2.02; | |
71 | _ANORM = -2.75; | |
72 | _BNORM = 0.0; | |
73 | _defaultC = 1.0; | |
74 | _channelMass = 0.7685; // [GeV/c^2] | |
75 | _width = 0.1507; // [GeV/c^2] | |
76 | break; | |
77 | case RHOZEUS: | |
78 | _slopeParameter =11.0; | |
79 | _vmPhotonCoupling=2.02; | |
80 | _ANORM=-2.75; | |
81 | _BNORM=1.84; | |
82 | _defaultC=1.0; | |
83 | _channelMass = 0.7685; | |
84 | _width=0.1507; | |
85 | break; | |
86 | case FOURPRONG: | |
87 | _slopeParameter = 11.0; | |
88 | _vmPhotonCoupling = 2.02; | |
89 | _ANORM = -2.75; | |
90 | _BNORM = 0; // no coherent background component is implemented for four-prong | |
91 | _defaultC = 11.0; | |
92 | _channelMass = 1.350; | |
93 | _width = 0.360; | |
94 | break; | |
95 | case OMEGA: | |
96 | _slopeParameter=10.0; | |
97 | _vmPhotonCoupling=23.13; | |
98 | _ANORM=-2.75; | |
99 | _BNORM=0.0; | |
100 | _defaultC=1.0; | |
101 | _channelMass=0.78194; | |
102 | _width=0.00843; | |
103 | break; | |
104 | case PHI: | |
105 | _slopeParameter=7.0; | |
106 | _vmPhotonCoupling=13.71; | |
107 | _ANORM=-2.75; | |
108 | _BNORM=0.0; | |
109 | _defaultC=1.0; | |
110 | _channelMass=1.019413; | |
111 | _width=0.00443; | |
112 | break; | |
113 | case JPSI: | |
114 | case JPSI_ee: | |
115 | case JPSI_mumu: | |
116 | _slopeParameter=4.0; | |
117 | _vmPhotonCoupling=10.45; | |
118 | _ANORM=-2.75;//Artificial Breit-Wigner parameters--no direct pions | |
119 | _BNORM=0.0; | |
120 | _defaultC=1.0; | |
121 | _channelMass=3.09692;//JN 3.09688 | |
122 | _width=0.000091;//JN 0.000087 | |
123 | break; | |
124 | case JPSI2S: | |
125 | case JPSI2S_ee: | |
126 | case JPSI2S_mumu: | |
127 | _slopeParameter=4.3; | |
128 | _vmPhotonCoupling=26.39; | |
129 | _ANORM=-2.75;//Artificial | |
130 | _BNORM=0.0; | |
131 | _defaultC=1.0; | |
132 | _channelMass=3.686093; | |
133 | _width=0.000337; | |
134 | break; | |
135 | case UPSILON: | |
136 | case UPSILON_ee: | |
137 | case UPSILON_mumu: | |
138 | _slopeParameter=4.0; | |
139 | _vmPhotonCoupling=125.37; | |
140 | _ANORM=-2.75;//Artificial | |
141 | _BNORM=0.0; | |
142 | _defaultC=1.0; | |
143 | _channelMass=9.46030; | |
144 | _width=0.00005402; | |
145 | break; | |
146 | case UPSILON2S: | |
147 | case UPSILON2S_ee: | |
148 | case UPSILON2S_mumu: | |
149 | _slopeParameter=4.0; | |
150 | _vmPhotonCoupling=290.84; | |
151 | _ANORM=-2.75; | |
152 | _BNORM=0.0; | |
153 | _defaultC=1.0; | |
154 | _channelMass=10.02326; | |
155 | _width=0.00003198; | |
156 | break; | |
157 | case UPSILON3S: | |
158 | case UPSILON3S_ee: | |
159 | case UPSILON3S_mumu: | |
160 | _slopeParameter=4.0; | |
161 | _vmPhotonCoupling=415.10; | |
162 | _ANORM=-2.75; | |
163 | _BNORM=0.0; | |
164 | _defaultC=1.0; | |
165 | _channelMass=10.3552; | |
166 | _width=0.00002032; | |
167 | break; | |
168 | default: | |
169 | cout <<"No sigma constants parameterized for pid: "<<_particleType | |
170 | <<" GammaAcrosssection"<<endl; | |
171 | } | |
172 | ||
75ce6a3a | 173 | // double maxradius = (_bbs.beam1().nuclearRadius()<_bbs.beam2().nuclearRadius())?_bbs.beam2().nuclearRadius():_bbs.beam1().nuclearRadius(); |
174 | _maxPhotonEnergy = 12. * _beamLorentzGamma * hbarc/(_bbs.beam1().nuclearRadius()+_bbs.beam2().nuclearRadius()); | |
da32329d AM |
175 | } |
176 | ||
177 | ||
178 | //______________________________________________________________________________ | |
179 | photonNucleusCrossSection::~photonNucleusCrossSection() | |
180 | { } | |
181 | ||
182 | ||
183 | //______________________________________________________________________________ | |
184 | void | |
185 | photonNucleusCrossSection::crossSectionCalculation(const double) | |
186 | { | |
187 | cout << "Neither narrow/wide resonance cross-section calculation.--Derived" << endl; | |
188 | } | |
189 | ||
190 | ||
191 | //______________________________________________________________________________ | |
192 | double | |
193 | photonNucleusCrossSection::getcsgA(const double Egamma, | |
75ce6a3a | 194 | const double W, |
195 | const int beam) | |
da32329d AM |
196 | { |
197 | //This function returns the cross-section for photon-nucleus interaction | |
198 | //producing vectormesons | |
199 | ||
200 | double Av,Wgp,cs,cvma; | |
201 | double t,tmin,tmax; | |
202 | double csgA,ax,bx; | |
75ce6a3a | 203 | int NGAUSS; |
da32329d AM |
204 | |
205 | // DATA FOR GAUSS INTEGRATION | |
206 | double xg[6] = {0, 0.1488743390, 0.4333953941, 0.6794095683, 0.8650633667, 0.9739065285}; | |
207 | double ag[6] = {0, 0.2955242247, 0.2692667193, 0.2190863625, 0.1494513492, 0.0666713443}; | |
208 | NGAUSS = 6; | |
209 | ||
210 | // Find gamma-proton CM energy | |
211 | Wgp = sqrt(2. * Egamma * (_protonEnergy | |
212 | + sqrt(_protonEnergy * _protonEnergy - protonMass * protonMass)) | |
213 | + protonMass * protonMass); | |
214 | ||
215 | //Used for d-A and A-A | |
216 | tmin = (W * W / (4. * Egamma * _beamLorentzGamma)) * (W * W / (4. * Egamma * _beamLorentzGamma)); | |
217 | ||
218 | if ((_bbs.beam1().A() == 1) && (_bbs.beam2().A() == 1)) // proton-proton, no scaling needed | |
219 | csgA = sigmagp(Wgp); | |
220 | else if ((_bbs.beam2().Z() == 1) && (_bbs.beam2().A() == 2)) { // deuteron-A interaction | |
221 | Av = _slopeParameter * sigmagp(Wgp); | |
222 | ||
223 | tmax = tmin + 0.64; //0.64 | |
224 | ax = 0.5 * (tmax - tmin); | |
225 | bx = 0.5 * (tmax + tmin); | |
226 | csgA = 0.; | |
227 | ||
228 | for (int k = 1; k < NGAUSS; ++k) { | |
229 | t = ax * xg[k] + bx; | |
230 | // We use beam2 here since the input stores the deuteron as nucleus 2 | |
231 | // and nucleus 2 is the pomeron field source | |
232 | // Also this is the way sergey formatted the formfactor. | |
233 | csgA = csgA + ag[k] * _bbs.beam2().formFactor(t); | |
234 | t = ax * (-xg[k]) + bx; | |
235 | csgA = csgA + ag[k] * _bbs.beam2().formFactor(t); | |
236 | } | |
237 | csgA = 0.5 * (tmax - tmin) * csgA; | |
238 | csgA = Av * csgA; | |
75ce6a3a | 239 | // } else if (!_coherentProduction && |
240 | // (!((_bbs.beam2().Z() == 1) && (_bbs.beam2().A() == 2)))) { // incoherent AA interactions | |
da32329d AM |
241 | // For incoherent AA interactions, since incoherent treating it as gamma-p |
242 | // Calculate the differential V.M.+proton cross section | |
75ce6a3a | 243 | // csgA = 1.E-4 * _incoherentFactor * _sigmaNucleus * _slopeParameter * sigmagp(Wgp); |
da32329d AM |
244 | } else { // coherent AA interactions |
245 | // For typical AA interactions. | |
246 | // Calculate V.M.+proton cross section | |
75ce6a3a | 247 | cs = sqrt(16. * pi * _vmPhotonCoupling * _slopeParameter * hbarc * hbarc * sigmagp(Wgp) / alpha); |
da32329d AM |
248 | |
249 | // Calculate V.M.+nucleus cross section | |
250 | // cvma = _bbs.beam1().A()*cs; | |
75ce6a3a | 251 | cvma = sigma_A(cs,beam); |
da32329d AM |
252 | |
253 | // Calculate Av = dsigma/dt(t=0) Note Units: fm**s/Gev**2 | |
254 | Av = (alpha * cvma * cvma) / (16. * pi * _vmPhotonCoupling * hbarc * hbarc); | |
255 | ||
256 | // Check if one or both beams are nuclei | |
257 | int A_1 = _bbs.beam1().A(); | |
258 | int A_2 = _bbs.beam2().A(); | |
259 | ||
260 | tmax = tmin + 0.25; | |
261 | ax = 0.5 * (tmax - tmin); | |
262 | bx = 0.5 * (tmax + tmin); | |
263 | csgA = 0.; | |
264 | for (int k = 1; k < NGAUSS; ++k) { | |
265 | ||
266 | t = ax * xg[k] + bx; | |
267 | if( A_1 == 1 && A_2 != 1){ | |
268 | csgA = csgA + ag[k] * _bbs.beam2().formFactor(t) * _bbs.beam2().formFactor(t); | |
269 | }else if(A_2 ==1 && A_1 != 1){ | |
270 | csgA = csgA + ag[k] * _bbs.beam1().formFactor(t) * _bbs.beam1().formFactor(t); | |
271 | }else{ | |
75ce6a3a | 272 | if( beam==1 ){ |
273 | csgA = csgA + ag[k] * _bbs.beam1().formFactor(t) * _bbs.beam1().formFactor(t); | |
274 | }else if(beam==2){ | |
275 | csgA = csgA + ag[k] * _bbs.beam2().formFactor(t) * _bbs.beam2().formFactor(t); | |
276 | }else{ | |
277 | cout<<"Something went wrong here, beam= "<<beam<<endl; | |
278 | } | |
da32329d AM |
279 | } |
280 | ||
281 | t = ax * (-xg[k]) + bx; | |
282 | if( A_1 == 1 && A_2 != 1){ | |
283 | csgA = csgA + ag[k] * _bbs.beam2().formFactor(t) * _bbs.beam2().formFactor(t); | |
284 | }else if(A_2 ==1 && A_1 != 1){ | |
285 | csgA = csgA + ag[k] * _bbs.beam1().formFactor(t) * _bbs.beam1().formFactor(t); | |
286 | }else{ | |
75ce6a3a | 287 | if( beam==1 ){ |
288 | csgA = csgA + ag[k] * _bbs.beam1().formFactor(t) * _bbs.beam1().formFactor(t); | |
289 | }else if(beam==2){ | |
290 | csgA = csgA + ag[k] * _bbs.beam2().formFactor(t) * _bbs.beam2().formFactor(t); | |
291 | }else{ | |
292 | cout<<"Something went wrong here, beam= "<<beam<<endl; | |
293 | } | |
da32329d AM |
294 | } |
295 | } | |
296 | csgA = 0.5 * (tmax - tmin) * csgA; | |
297 | csgA = Av * csgA; | |
298 | } | |
299 | ||
300 | return csgA; | |
301 | } | |
302 | ||
303 | ||
304 | //______________________________________________________________________________ | |
305 | double | |
75ce6a3a | 306 | photonNucleusCrossSection::photonFlux(const double Egamma, const int beam) |
da32329d AM |
307 | { |
308 | // This routine gives the photon flux as a function of energy Egamma | |
309 | // It works for arbitrary nuclei and gamma; the first time it is | |
310 | // called, it calculates a lookup table which is used on | |
311 | // subsequent calls. | |
312 | // It returns dN_gamma/dE (dimensions 1/E), not dI/dE | |
313 | // energies are in GeV, in the lab frame | |
314 | // rewritten 4/25/2001 by SRK | |
75ce6a3a | 315 | |
316 | // NOTE: beam (=1,2) defines the photon TARGET | |
317 | ||
da32329d AM |
318 | double lEgamma,Emin,Emax; |
319 | static double lnEmax, lnEmin, dlnE; | |
75ce6a3a | 320 | // double stepmult,energy,rZ,rA; |
321 | double stepmult,energy,rZ; | |
da32329d AM |
322 | int nbstep,nrstep,nphistep,nstep; |
323 | double bmin,bmax,bmult,biter,bold,integratedflux; | |
324 | double fluxelement,deltar,riter; | |
325 | double deltaphi,phiiter,dist; | |
326 | static double dide[401]; | |
327 | double lnElt; | |
75ce6a3a | 328 | // double rA2, rZ2; |
da32329d AM |
329 | double flux_r; |
330 | double Xvar; | |
331 | int Ilt; | |
75ce6a3a | 332 | double RNuc=0.,RSum=0.; |
333 | ||
334 | RSum=_bbs.beam1().nuclearRadius()+_bbs.beam2().nuclearRadius(); | |
335 | if( beam == 1){ | |
336 | rZ=double(_bbs.beam2().Z()); | |
337 | RNuc = _bbs.beam1().nuclearRadius(); | |
338 | } else { | |
339 | rZ=double(_bbs.beam1().Z()); | |
340 | RNuc = _bbs.beam2().nuclearRadius(); | |
341 | } | |
da32329d | 342 | |
da32329d | 343 | static int Icheck = 0; |
75ce6a3a | 344 | static int Ibeam = 0; |
da32329d AM |
345 | |
346 | //Check first to see if pp | |
347 | if( _bbs.beam1().A()==1 && _bbs.beam2().A()==1 ){ | |
348 | int nbsteps = 400; | |
349 | double bmin = 0.5; | |
350 | double bmax = 5.0 + (5.0*_beamLorentzGamma*hbarc/Egamma); | |
351 | double dlnb = (log(bmax)-log(bmin))/(1.*nbsteps); | |
75ce6a3a | 352 | |
da32329d AM |
353 | double local_sum=0.0; |
354 | ||
355 | // Impact parameter loop | |
356 | for (int i = 0; i<=nbsteps;i++){ | |
357 | ||
358 | double bnn0 = bmin*exp(i*dlnb); | |
359 | double bnn1 = bmin*exp((i+1)*dlnb); | |
360 | double db = bnn1-bnn0; | |
361 | ||
362 | // double PofB0 = 1.0; | |
363 | // if( bnn0 > 1.4 )PofB0=0.0; | |
364 | // double PofB1 = 1.0; | |
365 | // if( bnn1 > 1.4 )PofB1=0.0; | |
366 | ||
367 | double ppslope = 19.0; | |
368 | double GammaProfile = exp(-bnn0*bnn0/(2.*hbarc*hbarc*ppslope)); | |
369 | double PofB0 = 1. - (1. - GammaProfile)*(1. - GammaProfile); | |
370 | GammaProfile = exp(-bnn1*bnn1/(2.*hbarc*hbarc*ppslope)); | |
371 | double PofB1 = 1. - (1. - GammaProfile)*(1. - GammaProfile); | |
372 | ||
373 | double Xarg = Egamma*bnn0/(hbarc*_beamLorentzGamma); | |
374 | double loc_nofe0 = (_bbs.beam1().Z()*_bbs.beam1().Z()*alpha)/ | |
375 | (pi*pi); | |
376 | loc_nofe0 *= (1./(Egamma*bnn0*bnn0)); | |
377 | loc_nofe0 *= Xarg*Xarg*(bessel::dbesk1(Xarg))*(bessel::dbesk1(Xarg)); | |
378 | ||
379 | Xarg = Egamma*bnn1/(hbarc*_beamLorentzGamma); | |
380 | double loc_nofe1 = (_bbs.beam1().Z()*_bbs.beam1().Z()*alpha)/ | |
381 | (pi*pi); | |
382 | loc_nofe1 *= (1./(Egamma*bnn1*bnn1)); | |
383 | loc_nofe1 *= Xarg*Xarg*(bessel::dbesk1(Xarg))*(bessel::dbesk1(Xarg)); | |
384 | ||
385 | local_sum += loc_nofe0*(1. - PofB0)*bnn0*db; | |
386 | local_sum += loc_nofe1*(1. - PofB1)*bnn1*db; | |
387 | ||
388 | } | |
389 | // End Impact parameter loop | |
390 | ||
391 | // Note: 2*pi --> pi because of no factor 2 above | |
392 | double flux_r=local_sum*pi; | |
393 | return flux_r; | |
394 | ||
da32329d AM |
395 | } |
396 | ||
75ce6a3a | 397 | // first call or new beam? - initialize - calculate photon flux |
398 | Icheck=Icheck+1; | |
399 | if(Icheck > 1 && beam == Ibeam ) goto L1000f; | |
400 | Ibeam = beam; | |
da32329d | 401 | |
da32329d AM |
402 | |
403 | // Nuclear breakup is done by PofB | |
404 | // collect number of integration steps here, in one place | |
405 | ||
406 | nbstep=1200; | |
407 | nrstep=60; | |
408 | nphistep=40; | |
409 | ||
410 | // this last one is the number of energy steps | |
411 | nstep=100; | |
412 | ||
413 | // following previous choices, take Emin=10 keV at LHC, Emin = 1 MeV at RHIC | |
414 | Emin=1.E-5; | |
415 | if (_beamLorentzGamma < 500) | |
416 | Emin=1.E-3; | |
417 | ||
75ce6a3a | 418 | // maximum energy is 12 times the cutoff |
419 | Emax=_maxPhotonEnergy; | |
420 | // Emax=12.*hbarc*_beamLorentzGamma/RSum; | |
421 | ||
da32329d AM |
422 | // >> lnEmin <-> ln(Egamma) for the 0th bin |
423 | // >> lnEmax <-> ln(Egamma) for the last bin | |
75ce6a3a | 424 | lnEmin=log(Emin); |
da32329d | 425 | lnEmax=log(Emax); |
75ce6a3a | 426 | dlnE=(lnEmax-lnEmin)/nstep; |
da32329d AM |
427 | |
428 | cout<<" Calculating flux for photon energies from E= "<<Emin | |
75ce6a3a | 429 | <<" to "<<Emax<<" GeV (CM frame) for source nucleus with Z = "<<rZ<<endl; |
da32329d AM |
430 | |
431 | ||
432 | stepmult= exp(log(Emax/Emin)/double(nstep)); | |
433 | energy=Emin; | |
434 | ||
435 | for (int j = 1; j<=nstep;j++){ | |
436 | energy=energy*stepmult; | |
437 | ||
438 | // integrate flux over 2R_A < b < 2R_A+ 6* gamma hbar/energy | |
439 | // use exponential steps | |
440 | ||
75ce6a3a | 441 | bmin=0.8*RSum; //Start slightly below 2*Radius |
da32329d AM |
442 | bmax=bmin + 6.*hbarc*_beamLorentzGamma/energy; |
443 | ||
444 | bmult=exp(log(bmax/bmin)/double(nbstep)); | |
445 | biter=bmin; | |
446 | integratedflux=0.; | |
447 | ||
448 | if (_bbs.beam2().Z()==1&&_bbs.beam1().A()==2){ | |
449 | //This is for deuteron-gold | |
75ce6a3a | 450 | Xvar = RSum*energy/(hbarc*(_beamLorentzGamma)); |
da32329d AM |
451 | |
452 | fluxelement = (2.0/pi)*rZ*rZ*alpha/ | |
453 | energy*(Xvar*bessel::dbesk0(Xvar)*bessel::dbesk1(Xvar)-(1/2)*Xvar*Xvar* | |
454 | (bessel::dbesk1(Xvar)*bessel::dbesk1(Xvar)-bessel::dbesk0(Xvar)*bessel::dbesk0(Xvar))); | |
455 | ||
456 | integratedflux=integratedflux+fluxelement; | |
457 | }else if( (_bbs.beam1().A() == 1 && _bbs.beam2().A() != 1) || (_bbs.beam2().A() == 1 && _bbs.beam1().A() != 1) ){ | |
458 | // This is pA | |
459 | if( _productionMode == PHOTONPOMERONINCOHERENT ){ | |
460 | // This is pA incoherent | |
da32329d | 461 | double zproj = 0.0; |
da32329d AM |
462 | if( _bbs.beam1().A() == 1 ){ |
463 | zproj = (_bbs.beam2().Z()); | |
45d54d9a | 464 | } |
465 | else if( _bbs.beam2().A() == 1 ){ | |
da32329d | 466 | zproj = (_bbs.beam1().Z()); |
da32329d | 467 | } |
45d54d9a | 468 | |
469 | int nbsteps = 400; | |
75ce6a3a | 470 | double bmin = 0.7*RSum; |
471 | double bmax = 2.0*RSum + (8.0*_beamLorentzGamma*hbarc/energy); | |
45d54d9a | 472 | double dlnb = (log(bmax)-log(bmin))/(1.*nbsteps); |
473 | ||
474 | double local_sum=0.0; | |
475 | ||
476 | // Impact parameter loop | |
477 | for (int i = 0; i<=nbsteps; i++){ | |
478 | ||
479 | double bnn0 = bmin*exp(i*dlnb); | |
480 | double bnn1 = bmin*exp((i+1)*dlnb); | |
481 | double db = bnn1-bnn0; | |
482 | ||
483 | // double PofB0 = 1.0; | |
484 | // if( bnn0 > _bbs.beam2().nuclearRadius() + 0.7 )PofB0=0.0; | |
485 | // double PofB1 = 1.0; | |
486 | // if( bnn1 > _bbs.beam2().nuclearRadius() + 0.7 )PofB1=0.0; | |
487 | ||
488 | double PofB0 = _bbs.probabilityOfBreakup(bnn0); | |
489 | double PofB1 = _bbs.probabilityOfBreakup(bnn1); | |
490 | ||
491 | double Xarg = energy*bnn0/(hbarc*_beamLorentzGamma); | |
492 | double loc_nofe0 = (zproj*zproj*alpha)/ | |
493 | (pi*pi); | |
494 | loc_nofe0 *= (1./(energy*bnn0*bnn0)); | |
495 | loc_nofe0 *= Xarg*Xarg*(bessel::dbesk1(Xarg))*(bessel::dbesk1(Xarg)); | |
496 | ||
497 | Xarg = energy*bnn1/(hbarc*_beamLorentzGamma); | |
498 | double loc_nofe1 = (zproj*zproj*alpha)/ | |
499 | (pi*pi); | |
500 | loc_nofe1 *= (1./(energy*bnn1*bnn1)); | |
501 | loc_nofe1 *= Xarg*Xarg*(bessel::dbesk1(Xarg))*(bessel::dbesk1(Xarg)); | |
502 | // cout<<" i: "<<i<<" bnn0: "<<bnn0<<" PofB0: "<<PofB0<<" loc_nofe0: "<<loc_nofe0<<endl; | |
503 | ||
504 | local_sum += loc_nofe0*PofB0*bnn0*db; | |
505 | local_sum += loc_nofe1*PofB1*bnn1*db; | |
506 | } // End Impact parameter loop | |
507 | ||
508 | // Note: 2*pi --> pi because of no factor 2 above | |
509 | integratedflux = local_sum*pi; | |
da32329d AM |
510 | } else if ( _productionMode == PHOTONPOMERONNARROW || _productionMode == PHOTONPOMERONWIDE ){ |
511 | // cout<<" This is pA coherent "<<" j= "<<j<<endl; | |
512 | double localbmin = 0.0; | |
513 | if( _bbs.beam1().A() == 1 ){ | |
514 | localbmin = _bbs.beam2().nuclearRadius() + 0.7; | |
515 | } | |
516 | if( _bbs.beam2().A() == 1 ){ | |
517 | localbmin = _bbs.beam1().nuclearRadius() + 0.7; | |
518 | } | |
519 | integratedflux = nepoint(energy,localbmin); | |
520 | } | |
521 | }else{ | |
522 | for (int jb = 1; jb<=nbstep;jb++){ | |
523 | bold=biter; | |
524 | biter=biter*bmult; | |
525 | // When we get to b>20R_A change methods - just take the photon flux | |
526 | // at the center of the nucleus. | |
527 | if (biter > (10.*RNuc)) | |
528 | { | |
529 | // if there is no nuclear breakup or only hadronic breakup, which only | |
530 | // occurs at smaller b, we can analytically integrate the flux from b~20R_A | |
531 | // to infinity, following Jackson (2nd edition), Eq. 15.54 | |
532 | Xvar=energy*biter/(hbarc*_beamLorentzGamma); | |
533 | // Here, there is nuclear breakup. So, we can't use the integrated flux | |
534 | // However, we can do a single flux calculation, at the center of the nucleus | |
535 | // Eq. 41 of Vidovic, Greiner and Soff, Phys.Rev.C47,2308(1993), among other places | |
536 | // this is the flux per unit area | |
537 | fluxelement = (rZ*rZ*alpha*energy)* | |
538 | (bessel::dbesk1(Xvar))*(bessel::dbesk1(Xvar))/ | |
539 | ((pi*_beamLorentzGamma*hbarc)* | |
540 | (pi*_beamLorentzGamma*hbarc)); | |
541 | ||
542 | }//if biter>10 | |
543 | else{ | |
544 | // integrate over nuclear surface. n.b. this assumes total shadowing - | |
545 | // treat photons hitting the nucleus the same no matter where they strike | |
546 | fluxelement=0.; | |
547 | deltar=RNuc/double(nrstep); | |
548 | riter=-deltar/2.; | |
549 | ||
550 | for (int jr =1; jr<=nrstep;jr++){ | |
551 | riter=riter+deltar; | |
552 | // use symmetry; only integrate from 0 to pi (half circle) | |
553 | deltaphi=pi/double(nphistep); | |
554 | phiiter=0.; | |
555 | ||
556 | for( int jphi=1;jphi<= nphistep;jphi++){ | |
557 | phiiter=(double(jphi)-0.5)*deltaphi; | |
75ce6a3a | 558 | // dist is the distance from the center of the emitting nucleus |
559 | // to the point in question | |
da32329d AM |
560 | dist=sqrt((biter+riter*cos(phiiter))*(biter+riter* |
561 | cos(phiiter))+(riter*sin(phiiter))*(riter*sin(phiiter))); | |
562 | Xvar=energy*dist/(hbarc*_beamLorentzGamma); | |
563 | flux_r = (rZ*rZ*alpha*energy)* | |
564 | (bessel::dbesk1(Xvar)*bessel::dbesk1(Xvar))/ | |
565 | ((pi*_beamLorentzGamma*hbarc)* | |
566 | (pi*_beamLorentzGamma*hbarc)); | |
567 | ||
568 | // The surface element is 2.* delta phi* r * delta r | |
569 | // The '2' is because the phi integral only goes from 0 to pi | |
570 | fluxelement=fluxelement+flux_r*2.*deltaphi*riter*deltar; | |
571 | // end phi and r integrations | |
572 | }//for(jphi) | |
573 | }//for(jr) | |
574 | // average fluxelement over the nuclear surface | |
575 | fluxelement=fluxelement/(pi*RNuc*RNuc); | |
576 | }//else | |
577 | // multiply by volume element to get total flux in the volume element | |
578 | fluxelement=fluxelement*2.*pi*biter*(biter-bold); | |
579 | // modulate by the probability of nuclear breakup as f(biter) | |
75ce6a3a | 580 | // cout<<" jb: "<<jb<<" biter: "<<biter<<" fluxelement: "<<fluxelement<<endl; |
da32329d AM |
581 | if (_beamBreakupMode > 1){ |
582 | fluxelement=fluxelement*_bbs.probabilityOfBreakup(biter); | |
583 | } | |
75ce6a3a | 584 | // cout<<" jb: "<<jb<<" biter: "<<biter<<" fluxelement: "<<fluxelement<<endl; |
da32329d AM |
585 | integratedflux=integratedflux+fluxelement; |
586 | ||
587 | } //end loop over impact parameter | |
588 | } //end of else (pp, pA, AA) | |
589 | ||
590 | // In lookup table, store k*dN/dk because it changes less | |
591 | // so the interpolation should be better | |
592 | dide[j]=integratedflux*energy; | |
593 | ||
594 | }//end loop over photon energy | |
595 | ||
596 | // for 2nd and subsequent calls, use lookup table immediately | |
597 | ||
598 | L1000f: | |
599 | ||
600 | lEgamma=log(Egamma); | |
601 | if (lEgamma < (lnEmin+dlnE) || lEgamma > lnEmax){ | |
602 | flux_r=0.0; | |
603 | cout<<" ERROR: Egamma outside defined range. Egamma= "<<Egamma | |
604 | <<" "<<lnEmax<<" "<<(lnEmin+dlnE)<<endl; | |
605 | } | |
606 | else{ | |
607 | // >> Egamma between Ilt and Ilt+1 | |
608 | Ilt = int((lEgamma-lnEmin)/dlnE); | |
609 | // >> ln(Egamma) for first point | |
610 | lnElt = lnEmin + Ilt*dlnE; | |
611 | // >> Interpolate | |
612 | flux_r = dide[Ilt] + ((lEgamma-lnElt)/dlnE)*(dide[Ilt+1]- dide[Ilt]); | |
613 | flux_r = flux_r/Egamma; | |
614 | } | |
615 | ||
616 | return flux_r; | |
617 | } | |
618 | ||
619 | ||
620 | //______________________________________________________________________________ | |
621 | double | |
622 | photonNucleusCrossSection::nepoint(const double Egamma, | |
623 | const double bmin) | |
624 | { | |
625 | // Function for the spectrum of virtual photons, | |
626 | // dn/dEgamma, for a point charge q=Ze sweeping | |
627 | // past the origin with velocity gamma | |
628 | // (=1/SQRT(1-(V/c)**2)) integrated over impact | |
629 | // parameter from bmin to infinity | |
630 | // See Jackson eq15.54 Classical Electrodynamics | |
631 | // Declare Local Variables | |
632 | double beta,X,C1,bracket,nepoint_r; | |
633 | ||
634 | beta = sqrt(1.-(1./(_beamLorentzGamma*_beamLorentzGamma))); | |
635 | X = (bmin*Egamma)/(beta*_beamLorentzGamma*hbarc); | |
636 | ||
637 | bracket = -0.5*beta*beta*X*X*(bessel::dbesk1(X)*bessel::dbesk1(X) | |
638 | -bessel::dbesk0(X)*bessel::dbesk0(X)); | |
639 | ||
640 | bracket = bracket+X*bessel::dbesk0(X)*bessel::dbesk1(X); | |
641 | ||
642 | // C1=(2.*double((_bbs.beam1().Z())*(_bbs.beam1().Z()))* | |
643 | // alpha)/pi; | |
644 | ||
645 | // Note: NO Z*Z!! | |
646 | C1=(2.*alpha)/pi; | |
647 | ||
648 | nepoint_r = C1*(1./beta)*(1./beta)*(1./Egamma)*bracket; | |
649 | ||
650 | return nepoint_r; | |
651 | ||
652 | } | |
653 | ||
654 | ||
655 | //______________________________________________________________________________ | |
656 | double | |
657 | photonNucleusCrossSection::sigmagp(const double Wgp) | |
658 | { | |
75ce6a3a | 659 | // Function for the gamma-proton --> VectorMeson |
660 | // cross section. Wgp is the gamma-proton CM energy. | |
661 | // Unit for cross section: fm**2 | |
da32329d AM |
662 | |
663 | double sigmagp_r=0.; | |
664 | ||
665 | switch(_particleType) | |
666 | { | |
667 | case RHO: | |
668 | case RHOZEUS: | |
669 | case FOURPRONG: | |
670 | sigmagp_r=1.E-4*(5.0*exp(0.22*log(Wgp))+26.0*exp(-1.23*log(Wgp))); | |
671 | break; | |
672 | case OMEGA: | |
673 | sigmagp_r=1.E-4*(0.55*exp(0.22*log(Wgp))+18.0*exp(-1.92*log(Wgp))); | |
674 | break; | |
675 | case PHI: | |
676 | sigmagp_r=1.E-4*0.34*exp(0.22*log(Wgp)); | |
677 | break; | |
678 | case JPSI: | |
679 | case JPSI_ee: | |
680 | case JPSI_mumu: | |
681 | sigmagp_r=(1.0-((_channelMass+protonMass)*(_channelMass+protonMass))/(Wgp*Wgp)); | |
682 | sigmagp_r*=sigmagp_r; | |
683 | sigmagp_r*=1.E-4*0.00406*exp(0.65*log(Wgp)); | |
684 | // sigmagp_r=1.E-4*0.0015*exp(0.80*log(Wgp)); | |
685 | break; | |
686 | case JPSI2S: | |
687 | case JPSI2S_ee: | |
688 | case JPSI2S_mumu: | |
689 | sigmagp_r=(1.0-((_channelMass+protonMass)*(_channelMass+protonMass))/(Wgp*Wgp)); | |
690 | sigmagp_r*=sigmagp_r; | |
691 | sigmagp_r*=1.E-4*0.00406*exp(0.65*log(Wgp)); | |
692 | sigmagp_r*=0.166; | |
693 | // sigmagp_r=0.166*(1.E-4*0.0015*exp(0.80*log(Wgp))); | |
694 | break; | |
695 | case UPSILON: | |
696 | case UPSILON_ee: | |
697 | case UPSILON_mumu: | |
698 | // >> This is W**1.7 dependence from QCD calculations | |
699 | sigmagp_r=1.E-10*(0.060)*exp(1.70*log(Wgp)); | |
700 | break; | |
701 | case UPSILON2S: | |
702 | case UPSILON2S_ee: | |
703 | case UPSILON2S_mumu: | |
704 | sigmagp_r=1.E-10*(0.0259)*exp(1.70*log(Wgp)); | |
705 | break; | |
706 | case UPSILON3S: | |
707 | case UPSILON3S_ee: | |
708 | case UPSILON3S_mumu: | |
709 | sigmagp_r=1.E-10*(0.0181)*exp(1.70*log(Wgp)); | |
710 | break; | |
711 | default: cout<< "!!! ERROR: Unidentified Vector Meson: "<< _particleType <<endl; | |
712 | } | |
713 | return sigmagp_r; | |
714 | } | |
715 | ||
716 | ||
717 | //______________________________________________________________________________ | |
718 | double | |
75ce6a3a | 719 | photonNucleusCrossSection::sigma_A(const double sig_N, const int beam) |
da32329d AM |
720 | { |
721 | // Nuclear Cross Section | |
722 | // sig_N,sigma_A in (fm**2) | |
723 | ||
724 | double sum; | |
725 | double b,bmax,Pint,arg,sigma_A_r; | |
726 | ||
727 | int NGAUSS; | |
728 | ||
729 | double xg[17]= | |
730 | {.0, | |
731 | .0483076656877383162,.144471961582796493, | |
732 | .239287362252137075, .331868602282127650, | |
733 | .421351276130635345, .506899908932229390, | |
734 | .587715757240762329, .663044266930215201, | |
735 | .732182118740289680, .794483795967942407, | |
736 | .849367613732569970, .896321155766052124, | |
737 | .934906075937739689, .964762255587506430, | |
738 | .985611511545268335, .997263861849481564 | |
739 | }; | |
740 | ||
741 | double ag[17]= | |
742 | {.0, | |
743 | .0965400885147278006, .0956387200792748594, | |
744 | .0938443990808045654, .0911738786957638847, | |
745 | .0876520930044038111, .0833119242269467552, | |
746 | .0781938957870703065, .0723457941088485062, | |
747 | .0658222227763618468, .0586840934785355471, | |
748 | .0509980592623761762, .0428358980222266807, | |
749 | .0342738629130214331, .0253920653092620595, | |
750 | .0162743947309056706, .00701861000947009660 | |
751 | }; | |
752 | ||
753 | NGAUSS=16; | |
754 | ||
755 | // Check if one or both beams are nuclei | |
756 | int A_1 = _bbs.beam1().A(); | |
757 | int A_2 = _bbs.beam2().A(); | |
758 | if( A_1 == 1 && A_2 == 1)cout<<" This is pp, you should not be here..."<<endl; | |
759 | ||
760 | // CALCULATE P(int) FOR b=0.0 - bmax (fm) | |
761 | bmax = 25.0; | |
762 | sum = 0.; | |
763 | for(int IB=1;IB<=NGAUSS;IB++){ | |
764 | ||
765 | b = 0.5*bmax*xg[IB]+0.5*bmax; | |
766 | ||
767 | if( A_1 == 1 && A_2 != 1){ | |
768 | arg=-sig_N*_bbs.beam2().rho0()*_bbs.beam2().thickness(b); | |
769 | }else if(A_2 == 1 && A_1 != 1){ | |
770 | arg=-sig_N*_bbs.beam1().rho0()*_bbs.beam1().thickness(b); | |
75ce6a3a | 771 | }else{ |
772 | // Check which beam is target | |
773 | if( beam == 1 ){ | |
774 | arg=-sig_N*_bbs.beam1().rho0()*_bbs.beam1().thickness(b); | |
775 | }else if( beam==2 ){ | |
776 | arg=-sig_N*_bbs.beam2().rho0()*_bbs.beam2().thickness(b); | |
777 | }else{ | |
778 | cout<<" Something went wrong here, beam= "<<beam<<endl; | |
779 | } | |
da32329d AM |
780 | } |
781 | ||
782 | Pint=1.0-exp(arg); | |
783 | sum=sum+2.*pi*b*Pint*ag[IB]; | |
da32329d AM |
784 | |
785 | b = 0.5*bmax*(-xg[IB])+0.5*bmax; | |
786 | ||
787 | if( A_1 == 1 && A_2 != 1){ | |
788 | arg=-sig_N*_bbs.beam2().rho0()*_bbs.beam2().thickness(b); | |
789 | }else if(A_2 == 1 && A_1 != 1){ | |
790 | arg=-sig_N*_bbs.beam1().rho0()*_bbs.beam1().thickness(b); | |
791 | }else{ | |
75ce6a3a | 792 | // Check which beam is target |
793 | if( beam == 1 ){ | |
794 | arg=-sig_N*_bbs.beam1().rho0()*_bbs.beam1().thickness(b); | |
795 | }else if(beam==2){ | |
796 | arg=-sig_N*_bbs.beam2().rho0()*_bbs.beam2().thickness(b); | |
797 | }else{ | |
798 | cout<<" Something went wrong here, beam= "<<beam<<endl; | |
799 | } | |
da32329d AM |
800 | } |
801 | ||
802 | Pint=1.0-exp(arg); | |
803 | sum=sum+2.*pi*b*Pint*ag[IB]; | |
804 | ||
805 | } | |
806 | ||
807 | sum=0.5*bmax*sum; | |
808 | ||
809 | sigma_A_r=sum; | |
810 | ||
811 | return sigma_A_r; | |
812 | } | |
813 | ||
814 | //______________________________________________________________________________ | |
815 | double | |
816 | photonNucleusCrossSection::sigma_N(const double Wgp) | |
817 | { | |
818 | // Nucleon Cross Section in (fm**2) | |
819 | double cs = sqrt(16. * pi * _vmPhotonCoupling * _slopeParameter * hbarc * hbarc * sigmagp(Wgp) / alpha); | |
820 | return cs; | |
821 | } | |
822 | ||
823 | ||
824 | //______________________________________________________________________________ | |
825 | double | |
826 | photonNucleusCrossSection::breitWigner(const double W, | |
827 | const double C) | |
828 | { | |
829 | // use simple fixed-width s-wave Breit-Wigner without coherent backgorund for rho' | |
830 | // (PDG '08 eq. 38.56) | |
831 | if(_particleType==FOURPRONG) { | |
832 | if (W < 4.01 * pionChargedMass) | |
833 | return 0; | |
834 | const double termA = _channelMass * _width; | |
835 | const double termA2 = termA * termA; | |
836 | const double termB = W * W - _channelMass * _channelMass; | |
837 | return C * _ANORM * _ANORM * termA2 / (termB * termB + termA2); | |
838 | } | |
839 | ||
840 | // Relativistic Breit-Wigner according to J.D. Jackson, | |
841 | // Nuovo Cimento 34, 6692 (1964), with nonresonant term. A is the strength | |
842 | // of the resonant term and b the strength of the non-resonant | |
843 | // term. C is an overall normalization. | |
844 | ||
845 | double ppi=0.,ppi0=0.,GammaPrim,rat; | |
846 | double aa,bb,cc; | |
847 | ||
848 | double nrbw_r; | |
849 | ||
850 | // width depends on energy - Jackson Eq. A.2 | |
851 | // if below threshold, then return 0. Added 5/3/2001 SRK | |
852 | // 0.5% extra added for safety margin | |
be31281a | 853 | // omega added here 10/26/2014 SRK |
854 | if( _particleType==RHO ||_particleType==RHOZEUS || _particleType==OMEGA){ | |
da32329d AM |
855 | if (W < 2.01*pionChargedMass){ |
856 | nrbw_r=0.; | |
857 | return nrbw_r; | |
858 | } | |
859 | ppi=sqrt( ((W/2.)*(W/2.)) - pionChargedMass * pionChargedMass); | |
860 | ppi0=0.358; | |
861 | } | |
862 | ||
863 | // handle phi-->K+K- properly | |
864 | if (_particleType == PHI){ | |
865 | if (W < 2.*kaonChargedMass){ | |
866 | nrbw_r=0.; | |
867 | return nrbw_r; | |
868 | } | |
869 | ppi=sqrt( ((W/2.)*(W/2.))- kaonChargedMass*kaonChargedMass); | |
870 | ppi0=sqrt( ((_channelMass/2.)*(_channelMass/2.))-kaonChargedMass*kaonChargedMass); | |
871 | } | |
872 | ||
873 | //handle J/Psi-->e+e- properly | |
874 | if (_particleType==JPSI || _particleType==JPSI2S){ | |
875 | if(W<2.*mel){ | |
876 | nrbw_r=0.; | |
877 | return nrbw_r; | |
878 | } | |
879 | ppi=sqrt(((W/2.)*(W/2.))-mel*mel); | |
880 | ppi0=sqrt(((_channelMass/2.)*(_channelMass/2.))-mel*mel); | |
881 | } | |
882 | if (_particleType==JPSI_ee){ | |
883 | if(W<2.*mel){ | |
884 | nrbw_r=0.; | |
885 | return nrbw_r; | |
886 | } | |
887 | ppi=sqrt(((W/2.)*(W/2.))-mel*mel); | |
888 | ppi0=sqrt(((_channelMass/2.)*(_channelMass/2.))-mel*mel); | |
889 | } | |
890 | if (_particleType==JPSI_mumu){ | |
891 | if(W<2.*muonMass){ | |
892 | nrbw_r=0.; | |
893 | return nrbw_r; | |
894 | } | |
895 | ppi=sqrt(((W/2.)*(W/2.))-muonMass*muonMass); | |
896 | ppi0=sqrt(((_channelMass/2.)*(_channelMass/2.))-muonMass*muonMass); | |
897 | } | |
898 | if (_particleType==JPSI2S_ee){ | |
899 | if(W<2.*mel){ | |
900 | nrbw_r=0.; | |
901 | return nrbw_r; | |
902 | } | |
903 | ppi=sqrt(((W/2.)*(W/2.))-mel*mel); | |
904 | ppi0=sqrt(((_channelMass/2.)*(_channelMass/2.))-mel*mel); | |
905 | } | |
906 | if (_particleType==JPSI2S_mumu){ | |
907 | if(W<2.*muonMass){ | |
908 | nrbw_r=0.; | |
909 | return nrbw_r; | |
910 | } | |
911 | ppi=sqrt(((W/2.)*(W/2.))-muonMass*muonMass); | |
912 | ppi0=sqrt(((_channelMass/2.)*(_channelMass/2.))-muonMass*muonMass); | |
913 | } | |
914 | ||
915 | if(_particleType==UPSILON || _particleType==UPSILON2S ||_particleType==UPSILON3S ){ | |
916 | if (W<2.*muonMass){ | |
917 | nrbw_r=0.; | |
918 | return nrbw_r; | |
919 | } | |
920 | ppi=sqrt(((W/2.)*(W/2.))-muonMass*muonMass); | |
921 | ppi0=sqrt(((_channelMass/2.)*(_channelMass/2.))-muonMass*muonMass); | |
922 | } | |
923 | ||
924 | if(_particleType==UPSILON_mumu || _particleType==UPSILON2S_mumu ||_particleType==UPSILON3S_mumu ){ | |
925 | if (W<2.*muonMass){ | |
926 | nrbw_r=0.; | |
927 | return nrbw_r; | |
928 | } | |
929 | ppi=sqrt(((W/2.)*(W/2.))-muonMass*muonMass); | |
930 | ppi0=sqrt(((_channelMass/2.)*(_channelMass/2.))-muonMass*muonMass); | |
931 | } | |
932 | ||
933 | if(_particleType==UPSILON_ee || _particleType==UPSILON2S_ee ||_particleType==UPSILON3S_ee ){ | |
934 | if (W<2.*mel){ | |
935 | nrbw_r=0.; | |
936 | return nrbw_r; | |
937 | } | |
938 | ppi=sqrt(((W/2.)*(W/2.))-mel*mel); | |
939 | ppi0=sqrt(((_channelMass/2.)*(_channelMass/2.))-mel*mel); | |
940 | } | |
941 | ||
942 | if(ppi==0.&&ppi0==0.) | |
943 | cout<<"Improper Gammaacrosssection::breitwigner, ppi&ppi0=0."<<endl; | |
944 | ||
945 | rat=ppi/ppi0; | |
946 | GammaPrim=_width*(_channelMass/W)*rat*rat*rat; | |
947 | ||
948 | aa=_ANORM*sqrt(GammaPrim*_channelMass*W); | |
949 | bb=W*W-_channelMass*_channelMass; | |
950 | cc=_channelMass*GammaPrim; | |
951 | ||
952 | // First real part squared | |
953 | nrbw_r = (( (aa*bb)/(bb*bb+cc*cc) + _BNORM)*( (aa*bb)/(bb*bb+cc*cc) + _BNORM)); | |
954 | ||
955 | // Then imaginary part squared | |
956 | nrbw_r = nrbw_r + (( (aa*cc)/(bb*bb+cc*cc) )*( (aa*cc)/(bb*bb+cc*cc) )); | |
957 | ||
958 | // Alternative, a simple, no-background BW, following J. Breitweg et al. | |
959 | // Eq. 15 of Eur. Phys. J. C2, 247 (1998). SRK 11/10/2000 | |
960 | // nrbw_r = (_ANORM*_mass*GammaPrim/(bb*bb+cc*cc))**2 | |
961 | ||
962 | nrbw_r = C*nrbw_r; | |
963 | ||
964 | return nrbw_r; | |
965 | } |