00001 //-------------------------------------------------------------------------- 00002 // 00003 // Environment: 00004 // This software is part of models developed at BES collaboration 00005 // based on the EvtGen framework. If you use all or part 00006 // of it, please give an appropriate acknowledgement. 00007 // 00008 // Copyright Information: See EvtGen/BesCopyright 00009 // Copyright (A) 2006 Ping Rong-Gang @IHEP 00010 // 00011 // Module: EvtXsection.hh 00012 // 00013 // Description: To define cross section for the continuum exclusive process 00014 // Experimental cross section taken from PRD73,012005, PRD76,092006, also 00015 // see a review: Rev. Mod. Phys. 83,1545 00016 // Modification history: 00017 // 00018 // Ping R.-G. Nov., 2012 Module created 00019 // 00020 /*******************--- mode definition: also see EvtXsection.cc 00021 0: ppbar 00022 1: nnbar 00023 2: Lambda0 anti-Lambda0 00024 3: Sigma0 anti-Sigma0 00025 4: Lambda0 anti-Sigma0 00026 5: Sigma0 anti-Lambda0 00027 6: pi+ pi- 00028 7: pi+ pi- pi0 00029 8: K+K- pi0 00030 9: KsK+pi- 00031 10: KsK-pi+ 00032 11: K+K-eta 00033 12: 2(pi+pi-) 00034 13: pi+pi-2pi0 00035 14: K+K-pi+pi- 00036 15: K+K-2pi0 00037 16: 2(K+K-) 00038 17: 2(pi+pi-)pi0 00039 18: 2(pi+pi-)eta 00040 19: K+K-pi+pi-pi0 00041 20: K+K-pi+pi-eta 00042 21: 3(pi+pi-) 00043 22: 2(pi+pi-pi0) 00044 23: phi eta 00045 24: phi pi0 00046 25: K+K*- 00047 26: K-K*+ 00048 27: K_SK*0-bar 00049 28: K*0(892)K+pi- 00050 29: K*0(892)K-pi+ 00051 30: K*+K-pi0 00052 31: K*-K+pi0 00053 32: K_2*(1430)0 K+pi- 00054 33: K_2*(1430)0 K-pi+ 00055 34: K+K-rho 00056 35: phi pi+pi- 00057 36: phi f0(980) 00058 37: eta pi+pi- 00059 38: omega pi+ pi- 00060 39: omega f0(980) 00061 40: eta' pi+ pi- 00062 41: f_1(1285)pi+pi- 00063 42: omega K+K- 00064 43: omega pi+pi-pi0 00065 44: Sigma+ Sigma- (Sigma0 Sigma0-bar SU(3) extention ) 00066 45: K+K- 00067 46: K_S K_L 00068 00069 70: D0D0-bar 00070 71: D+D- 00071 72: D+D*- 00072 73: D-D*+ 00073 74: D*+D*- 00074 75: D0D-pi+ 00075 76: D0D+pi- 00076 77: D0D*-pi+ 00077 78: D0D*+pi- 00078 79: Lambda_c+ Lambda_c- 00079 00080 00081 90: J/psi pi+ pi- 00082 91: psi(2S)pi+pi- 00083 92: J/psi K+K- 00084 93: D_s+ D_s- 00085 94: D_s^{*+}D_s^- 00086 95: D_s^{*-}D_s^+ 00087 00088 *************************************/ 00089 //------------------------------------------------------------------------ 00090 // 00091 #ifndef EVTXSECTION_HH 00092 #define EVTXSECTION_HH 00093 00094 #include <math.h> 00095 #include <string.h> 00096 #include <stdlib.h> 00097 #include <string> 00098 #include <vector> 00099 #include <ostream> 00100 #include <fstream> 00101 #include <iostream> 00102 #include <algorithm> 00103 #include "EvtGenBase/EvtId.hh" 00104 #include "EvtGenBase/EvtComplex.hh" 00105 using namespace std; 00106 00107 class EvtXsection{ 00108 public: 00109 EvtXsection(std::vector<EvtId> evtdaugs){ 00110 xx.clear();yy.clear();er.clear(); 00111 _mode = getMode(evtdaugs); 00112 ini_data(_mode); 00113 00114 } 00115 EvtXsection(int mode){ 00116 xx.clear();yy.clear();er.clear(); 00117 _mode = mode; 00118 if(mode>=0){ 00119 ini_data(_mode); 00120 }else if(mode==-1){//calculate the correction factor with Breit-wigner 00121 _unit="nb"; 00122 }else if(mode==-2){//users provide the cross section list 00123 //std::cout<<"user diy"<<std::endl; 00124 ini_data_diy(); 00125 } 00126 //std::cout<<"The mode is : "<<_mode<<", "<<xx[0]<<", "<<yy[0]<<std::endl; 00127 } 00128 00129 virtual ~EvtXsection(); 00130 00131 int getMode(std::vector<EvtId> evtdaugs); 00132 void ini_data0(int mode); // exper. cross section data table 00133 void ini_data(int mode); // fitted results on the cross section of expe. xsection 00134 void ini_data_diy(); 00135 double getXsection(double mx); 00136 double getErr(double mx); 00137 double Xsection_a(double mx);//for bin given by up and lower edge 00138 double Xsection_b(double mx);//for bin given by a center value 00139 double Xsection_c(double mx);//for xsection calculated with breit-wigner 00140 00141 double Err_a(double mx);//for bin given by up and lower edge 00142 double Err_b(double mx);//for bin given by a center value 00143 00144 int getXBin(double mx,std::vector<double> vy); 00145 int getXBin_a(double mx );//for bin given by up and lower edge 00146 int getXBin_b(double mx );//for bin given by a center value 00147 std::string getUnit(){return _unit;} 00148 00149 std::vector<double> getXX(){return xx;} 00150 std::vector<double> getYY(){return yy;} 00151 std::vector<double> getEr(){return er;} 00152 double getXup(){return xx[nbins-1];} 00153 double getXlw(){return xx[0];} 00154 std::string getMsg(){return msg;} 00155 void setBW(int pdg); 00156 void setFile(std::string name){file = name;} 00157 double getVP(double mx); 00158 void ReadVP(); 00159 private: 00160 //e+e- --> ppbar mode, xsection taken from PRD73,012005 00161 std::vector<double> xx,yy,er; 00162 int nbins,_mode; 00163 std::string _unit,msg; 00164 // calculate cross section with Breit-Wigner 00165 int pdgcode; 00166 double bree; 00167 // user provide xsection list 00168 std::string file; 00169 std::vector<double> vpx,vpr,vpi; 00170 }; 00171 00172 #endif