22 #include "CLHEP/Random/defs.h"
23 #include "CLHEP/Random/RandBreitWigner.h"
24 #include "CLHEP/Units/PhysicalConstants.h"
25 #include "CLHEP/Random/DoubConv.hh"
38 return fire( defaultA, defaultB );
54 displ = 0.5*gamma*std::tan(rval*CLHEP::halfpi);
61 double val, rval, displ;
63 if ( gamma == 0.0 )
return mean;
64 val = std::atan(2.0*cut/gamma);
66 displ = 0.5*gamma*std::tan(rval*val);
73 double val, rval, displ;
75 if ( gamma == 0.0 )
return mean;
76 val = std::atan(-mean/gamma);
78 displ = gamma*std::tan(rval);
80 return std::sqrt(mean*mean + mean*displ);
86 double lower, upper, tmp;
88 if ( gamma == 0.0 )
return mean;
89 tmp = std::max(0.0,(mean-cut));
90 lower = std::atan( (tmp*tmp-mean*mean)/(mean*gamma) );
91 upper = std::atan( ((mean+cut)*(mean+cut)-mean*mean)/(mean*gamma) );
93 displ = gamma*std::tan(rval);
95 return std::sqrt(std::max(0.0, mean*mean + mean*displ));
100 for(
double*
v = vect;
v != vect +
size; ++
v )
107 for(
double*
v = vect;
v != vect +
size; ++
v )
115 for(
double*
v = vect;
v != vect +
size; ++
v )
122 double mean,
double gamma)
126 rval = 2.0*anEngine->
flat()-1.0;
127 displ = 0.5*gamma*std::tan(rval*CLHEP::halfpi);
133 double mean,
double gamma,
double cut )
135 double val, rval, displ;
137 if ( gamma == 0.0 )
return mean;
138 val = std::atan(2.0*cut/gamma);
139 rval = 2.0*anEngine->
flat()-1.0;
140 displ = 0.5*gamma*std::tan(rval*val);
146 double mean,
double gamma )
148 double val, rval, displ;
150 if ( gamma == 0.0 )
return mean;
151 val = std::atan(-mean/gamma);
153 displ = gamma*std::tan(rval);
155 return std::sqrt(mean*mean + mean*displ);
159 double mean,
double gamma,
double cut )
162 double lower, upper, tmp;
164 if ( gamma == 0.0 )
return mean;
165 tmp = std::max(0.0,(mean-cut));
166 lower = std::atan( (tmp*tmp-mean*mean)/(mean*gamma) );
167 upper = std::atan( ((mean+cut)*(mean+cut)-mean*mean)/(mean*gamma) );
169 displ = gamma*std::tan(rval);
171 return std::sqrt( std::max(0.0, mean*mean+mean*displ) );
175 const int size,
double* vect )
177 for(
double*
v = vect;
v != vect +
size; ++
v )
178 *
v =
shoot( anEngine, 1.0, 0.2 );
182 const int size,
double* vect,
185 for(
double*
v = vect;
v != vect +
size; ++
v )
190 const int size,
double* vect,
191 double a,
double b,
double c )
193 for(
double*
v = vect;
v != vect +
size; ++
v )
201 return fire( defaultA, defaultB );
208 rval = 2.0*localEngine->flat()-1.0;
209 displ = 0.5*gamma*std::tan(rval*CLHEP::halfpi);
216 double val, rval, displ;
218 if ( gamma == 0.0 )
return mean;
219 val = std::atan(2.0*cut/gamma);
220 rval = 2.0*localEngine->flat()-1.0;
221 displ = 0.5*gamma*std::tan(rval*val);
228 return fireM2( defaultA, defaultB );
233 double val, rval, displ;
235 if ( gamma == 0.0 )
return mean;
236 val = std::atan(-mean/gamma);
238 displ = gamma*std::tan(rval);
240 return std::sqrt(mean*mean + mean*displ);
246 double lower, upper, tmp;
248 if ( gamma == 0.0 )
return mean;
249 tmp = std::max(0.0,(mean-cut));
250 lower = std::atan( (tmp*tmp-mean*mean)/(mean*gamma) );
251 upper = std::atan( ((mean+cut)*(mean+cut)-mean*mean)/(mean*gamma) );
253 displ = gamma*std::tan(rval);
255 return std::sqrt(std::max(0.0, mean*mean + mean*displ));
260 for(
double*
v = vect;
v != vect +
size; ++
v )
261 *
v =
fire(defaultA, defaultB );
267 for(
double*
v = vect;
v != vect +
size; ++
v )
272 double a,
double b,
double c )
274 for(
double*
v = vect;
v != vect +
size; ++
v )
280 int pr=os.precision(20);
281 std::vector<unsigned long> t(2);
282 os <<
" " <<
name() <<
"\n";
283 os <<
"Uvec" <<
"\n";
285 os << defaultA <<
" " << t[0] <<
" " << t[1] <<
"\n";
287 os << defaultB <<
" " << t[0] <<
" " << t[1] <<
"\n";
291 int pr=os.precision(20);
292 os <<
" " <<
name() <<
"\n";
293 os << defaultA <<
" " << defaultB <<
"\n";
302 if (inName !=
name()) {
303 is.clear(std::ios::badbit |
is.rdstate());
304 std::cerr <<
"Mismatch when expecting to read state of a "
305 <<
name() <<
" distribution\n"
306 <<
"Name found was " << inName
307 <<
"\nistream is left in the badbit state\n";
311 std::vector<unsigned long> t(2);