123#include "EvtFitXsection.dat"
140 ifstream
file(
"xs_user.txt" );
144 cout <<
"EvtXsection.cc: The input file not found. The default file name should be "
150 double xm, xs, xs_er;
152 while ( !file.eof() )
154 file >> xm >> xs >> xs_er;
158 er.push_back( xs_er );
175 if ( _vmd.size() == 0 )
177 std::cout <<
"EvtXsection::ini_data_multimode: No mode indexes are available" << std::endl;
184 for (
int i = 0; i < _vmd.size(); i++ )
189 if ( x0 < xL ) xL = x0;
190 if ( x1 > xU ) xU = x1;
193 std::cout <<
"The low and up end of multimodes: " << xL <<
" ~ " << xU << std::endl;
199 std::vector<double> uxx, uyy, uer;
203 for (
double xxm = xL; xxm < xU; xxm += stp )
208 for (
int i = 0; i < _vmd.size(); i++ )
211 std::string myunit =
getUnit();
212 if ( myunit ==
"pb" ) { mypb = 0.001; }
215 xs_er += mypb *
getErr( xxm );
220 uer.push_back( xs_er );
226 for (
int i = 0; i < uxx.size(); i++ )
228 xx.push_back( uxx[i] );
229 yy.push_back( uyy[i] );
230 er.push_back( uer[i] );
238 msg =
"multi-exclusive mode";
256 int pp[2] = { -2212, 2212 };
257 int nn[2] = { -2112, 2112 };
258 int pipi[2] = { -211, 211 };
259 int pi3[3] = { -211, 111, 211 };
260 int kkpi0[3] = { -321, 111, 321 };
261 int kskpi[3] = { -211, 310, 321 };
263 std::vector<int> vson;
265 for (
int i = 0; i < evtdaugs.size(); i++ )
267 sort( vson.begin(), vson.end(),
mysort );
269 if ( vson.size() == 2 )
271 if ( vson[0] == pp[0] && vson[1] == pp[1] ) {
return 0; }
272 if ( vson[0] == nn[0] && vson[1] == nn[1] ) {
return 1; }
273 if ( vson[0] == pipi[0] && vson[1] == pipi[1] ) {
return 2; }
275 else if ( vson.size() == 3 ) {}
277 std::cerr << __FILE__ <<
":" << __LINE__ <<
": should not reach here" << std::endl;
282 if ( _mode == -1 ) {
return Xsection_c( mx ); }
296 if ( mx <= xx[0] )
return 0.;
297 if ( mx > xx[nbins] )
return 0.;
306 if ( mx <= xx[0] )
return 0.;
307 if ( mx > xx[nbins - 1] )
return 0.;
309 double ylow = yy[thebin];
310 double yup = yy[thebin + 1];
312 double xlow = xx[thebin];
313 double xup = xx[thebin + 1];
315 double yi = ylow + ( yup - ylow ) / (
xup -
xlow ) * ( mx -
xlow );
321 if ( _mode == -1 )
return 0.;
322 if ( mx <= xx[0] )
return er[0];
323 if ( mx > xx[nbins] )
return 0.;
332 if ( mx <= xx[0] )
return er[0];
333 if ( mx > xx[nbins - 1] )
return 0.;
335 double ylow = er[thebin];
336 double yup = er[thebin + 1];
338 double xlow = xx[thebin];
339 double xup = xx[thebin + 1];
341 double yi = ylow + ( yup - ylow ) / (
xup -
xlow ) * ( mx -
xlow );
346 if ( mx <= xx[0] )
return 0;
347 if ( mx > xx[nbins] )
return nbins;
348 for (
int i = 0; i < nbins; i++ )
350 if ( mx <= xx[i + 1] && mx > xx[i] )
return i;
353 std::cerr << __FILE__ <<
":" << __LINE__ <<
": should not reach here" << std::endl;
358 if ( mx <= xx[0] )
return 0;
359 if ( mx > xx[nbins - 1] )
return nbins;
360 for (
int i = 0; i < nbins - 1; i++ )
362 if ( mx <= xx[i + 1] && mx > xx[i] )
return i;
365 std::cerr << __FILE__ <<
":" << __LINE__ <<
": should not reach here" << std::endl;
370 double nbins = vy.size();
371 if ( vy[0] < mx || mx < vy[nbins - 1] )
373 std::cout <<
"Outside vacuum pol. value" << std::endl;
376 for (
int i = 0; i < nbins - 1; i++ )
378 if ( mx <= vy[i + 1] && mx > vy[i] )
return i;
381 std::cerr << __FILE__ <<
":" << __LINE__ <<
": should not reach here" << std::endl;
386 double pi = 3.1415926;
392 double width2 = width * width;
393 double br = (
s - mass2 ) * (
s - mass2 ) + mass2 * width2;
395 double sigma = 12 *
pi * bree * width2 / br;
397 double thexs = sigma * nbar;
412 double xstp = ( maxM - minM ) / 100.;
416 for (
int i = 0; i < 100; i++ )
420 EvtComplex bw = 1. / ( m * m - meanM * meanM + im * m * width );
421 double amps =
abs2( bw );
423 yy.push_back( amps );
431 for (
int i = 0; i < vmd.size(); i++ ) { _vmd.push_back( vmd[i] ); }
double abs2(const EvtComplex &c)
DOUBLE_PRECISION xlow[20]
static double getWidth(EvtId i)
static int getStdHep(EvtId id)
static double getMeanMass(EvtId i)
static EvtId evtIdFromStdHep(int stdhep)
static double getMinMass(EvtId i)
static double getMaxMass(EvtId i)
int getXBin(double mx, std::vector< double > vy)
double Xsection_b(double mx)
double Xsection_a(double mx)
void setModes(std::vector< int > vmd)
int getMode(std::vector< EvtId > evtdaugs)
void ini_data_multimode()
double getXsection(double mx)
double Xsection_c(double mx)
bool operator()(int i, int j)