Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

EvtPsi3Sdecay Class Reference

#include <EvtPsi3Sdecay.hh>

List of all members.

Public Member Functions

bool choseDecay ()
 EvtPsi3Sdecay (double ecms, EvtParticle *parent)
int findMode ()
int findPoints ()
double polint (std::vector< double > points)
double theProb (std::vector< double > myxs, int ich)
virtual ~EvtPsi3Sdecay ()

Private Attributes

std::vector< double > d0bardst0
std::vector< double > d0d0bar
std::vector< double > d0dst0bar
EvtIdDaughters
std::vector< double > dpdm
std::vector< double > dspdsm
std::vector< double > dst0dst0bar
std::vector< double > dstmdp
std::vector< double > dstpdm
std::vector< double > dstpdstm
double Ecms
int Ndaugs
int nsize
int theLocation
EvtParticletheParent
double theXsection [50]
std::vector< double > x


Constructor & Destructor Documentation

EvtPsi3Sdecay::EvtPsi3Sdecay double  ecms,
EvtParticle parent
[inline]
 

00035                                                   {
00036   //initializer
00037   Ecms = ecms;
00038   theParent = parent;
00039   Ndaugs=parent->getNDaug();
00040   nsize = 14;
00041   
00042   x.clear();
00043   // open charm cross section, see PRD 80, 072001
00044   double xx[14]={3.72968, 3.97,  3.99, 4.01,  4.015,  4.03, 4.06, 4.12, 4.14, 4.16, 4.17, 4.18, 4.2,  4.26}; // 14 energy points
00045   double y0[14]={0.,      86,    133,  76,    10,     334,  410,  303,  177,  167,  177,  179,  180,  86};   // 0) D0D0bar cross section
00046   double y1[14]={0.,      137,   90,   135,   38,     196,  480,  310,  200,  200,  182,  197,  181,  94};   // 1) D+D-
00047   double y2[14]={0.,      1140,  1370, 1660,  1920,   1600, 1115, 700,  675,  626,  636,  605,  515,  540};  // 2)D0D*0bar
00048   double y3[14]={0.,      1140,  1370, 1660,  1920,   1600, 1115, 700,  675,  626,  636,  605,  515,  540};  // 3)D0bar D*0
00049   double y4[14]={0.,      0,     0,    0,     213,    2000, 2290, 2550, 2443, 2566, 2363, 2173, 1830, 269};  // 4)D*0 D*0bar
00050   double y5[14]={0.,      1115,  1375, 1650,  1851,   1650, 1085, 780,  688,  688,  642,  648,  535,  511};  // 5)D*+D-
00051   double y6[14]={0.,      1115,  1375, 1650,  1851,   1650, 1085, 780,  688,  688,  642,  648,  535,  511};  // 6)D*-D+
00052   double y7[14]={0.,      0,     0,    0,     0,      1400, 2390, 2280, 2556, 2479, 2357, 2145, 1564, 237};  // 7)D*+D*-
00053   double y8[14]={0.,      102,   133,  269,   250,    174,  51,   26,   25,   15,   34,   7,    15,   47};   // 8)Ds+ Ds-
00054 
00055   d0d0bar.clear();
00056   dpdm.clear();
00057   d0dst0bar.clear();
00058   dst0dst0bar.clear();
00059   d0bardst0.clear();
00060   dstpdm.clear();
00061   dstmdp.clear();
00062   dstpdstm.clear();
00063   dspdsm.clear();
00064 
00065   for(int i=0;i<14;i++){
00066     x.push_back(xx[i]);
00067     d0d0bar.push_back(y0[i]);
00068     dpdm.push_back(y1[i]);
00069     d0dst0bar.push_back(y2[i]);
00070     d0bardst0.push_back(y3[i]);
00071     dst0dst0bar.push_back(y4[i]);
00072     dstpdm.push_back(  y5[i]);
00073     dstmdp.push_back(  y6[i]);
00074     dstpdstm.push_back(y7[i]);
00075     dspdsm.push_back(  y8[i]);
00076   }
00077  }

virtual EvtPsi3Sdecay::~EvtPsi3Sdecay  )  [inline, virtual]
 

00079 {}


Member Function Documentation

bool EvtPsi3Sdecay::choseDecay  ) 
 

00085                                { //determing accept or reject a generated decay
00086 
00087    // findPoints();
00088  double d0d0bar_xs=polint(d0d0bar);
00089  double dpdm_xs   = polint(dpdm);
00090  double d0dst0bar_xs = polint(d0dst0bar);
00091  double d0bardst0_xs = polint(d0bardst0);
00092 
00093  double dst0dst0bar_xs = polint(dst0dst0bar);
00094  double dstpdm_xs = polint(dstpdm);
00095 
00096  double dstmdp_xs = polint(dstmdp);
00097  double dstpdstm_xs = polint(dstpdstm);
00098 
00099  double dspdsm_xs = polint(dspdsm);
00100  
00101  int ich = findMode();
00102  // std::cout<<"calculated XS "<< d0d0bar_xs<<" "<<dpdm_xs<<" "<<d0dst0bar_xs<<" "<<d0bardst0_xs<< " "<<dst0dst0bar_xs<<" "<<dstpdm_xs<< " "<<dstmdp_xs<<" "<<dstpdstm_xs<<" "<<dspdsm_xs<<std::endl;
00103 
00104  std::vector<double> myxs; myxs.clear();
00105  myxs.push_back(d0d0bar_xs);
00106  myxs.push_back(dpdm_xs);
00107  myxs.push_back(d0dst0bar_xs);
00108  myxs.push_back(d0bardst0_xs);
00109  myxs.push_back(dst0dst0bar_xs);
00110  myxs.push_back(dstpdm_xs);
00111  myxs.push_back(dstmdp_xs);
00112  myxs.push_back(dstpdstm_xs);
00113  myxs.push_back(dspdsm_xs);
00114 
00115 
00116  double Prop0 = theProb(myxs,ich-1);
00117  double Prop1 = theProb(myxs,ich);
00118 
00119  double pm= EvtRandom::Flat(0.,1);
00120  bool flag = false;
00121  if( Prop0 < pm && pm<= Prop1 ) flag = true;
00122 
00123  //--- debuging
00124 
00125  if(flag) {
00126   // std::cout<<"findMode= "<<ich<<std::endl;
00127  // for(int i=0;i<myxs.size();i++){ std::cout<<"channel "<<i<<" myxs:  "<<myxs[i]<<std::endl;}
00128  //std::cout<<"prop0,prop1= "<<Prop0<<" "<<Prop1<<std::endl;
00129  }
00130 
00131  //-------------
00132 
00133  return flag;
00134 }

int EvtPsi3Sdecay::findMode  ) 
 

00062                            {
00063   // mode index: 0) D0D0bar, 1)D+D-; 2)D0D*0bar , 3)D0bar D*0, 4)D*0 D*0 bar, 5)D*+D-  6)D*-D+  7)D*+ D*- 8) Ds+ Ds-
00064     std::string son0=EvtPDL::name(theParent->getDaug(0)->getId());
00065     std::string son1=EvtPDL::name(theParent->getDaug(1)->getId());
00066     std::string son2;
00067     if(Ndaugs == 3){son2=EvtPDL::name(theParent->getDaug(2)->getId());}
00068   if(Ndaugs == 2 || Ndaugs ==3 && son2=="gammaFSR"){
00069    if(son0 == "D0"      && son1 == "anti-D0"  || son1 == "D0"      && son0 == "anti-D0")  {return 0;} else
00070    if(son0 == "D+"      && son1 == "D-"       || son1 == "D+"      && son0 == "D-"     )  {return 1;} else
00071    if(son0 == "D0"      && son1 == "anti-D*0" || son1 == "D0"      && son0 == "anti-D*0") {return 2;} else
00072    if(son0 == "anti-D0" && son1 == "D*0"      || son1 == "anti-D0" && son0 == "D*0")      {return 3;} else
00073    if(son0 == "D*0"     && son1 == "anti-D*0" || son1 == "D*0"     && son0 == "anti-D*0") {return 4;} else
00074    if(son0 == "D*+"     && son1 == "D-"       || son1 == "D*+"     && son0 == "D-")       {return 5;} else
00075    if(son0 == "D*-"     && son1 == "D+"       || son1 == "D*-"     && son0 == "D+")       {return 6;} else
00076    if(son0 == "D*+"     && son1 == "D*-"      || son1 == "D*+"     && son0 == "D*-")      {return 7;} else
00077    if(son0 == "D_s+"    && son1 == "D_s-"     || son1 == "D_s+"    && son0 == "D_s-")     {return 8;}  
00078   } else{
00079     std::cout<<"Not open charm decay"<<std::endl;
00080     ::abort();
00081   }
00082 
00083 }

int EvtPsi3Sdecay::findPoints  ) 
 

00030                                 {
00031     if(Ecms < x[0] ){theLocation =0;} else
00032     if(Ecms >=x[nsize]) {theLocation = nsize;} 
00033     for (int i=0;i<nsize-1;i++){
00034      if( x[i] <= Ecms  && x[i+1] > Ecms) {theLocation=i;} 
00035     }
00036     return theLocation;
00037 }

double EvtPsi3Sdecay::polint std::vector< double >  points  ) 
 

00039                                                   {
00040   //  EvtPolInt thePolInt(x,vy,Ecms); 
00041   //  double xs = thePolInt.getvalue(); 
00042   theLocation = findPoints();
00043   double xs = (vy[theLocation +1 ]- vy[theLocation]) / (x[theLocation+1]-x[theLocation])*(Ecms - x[theLocation])+vy[theLocation];
00044   if(xs <0 ) xs = 0;
00045   //  for(int i=0;i<vy.size();i++){ std::cout<<"channel "<<i<<" xsection:  "<<vy[i]<<std::endl;}
00046   // std::cout<<"Ecms, theLocation= "<<Ecms<<" "<<theLocation<<std::endl; 
00047   return xs;
00048  }

double EvtPsi3Sdecay::theProb std::vector< double >  myxs,
int  ich
 

00050                                                            {
00051   int Nchannels=myxs.size();
00052   std::vector <double> thexs;
00053   thexs.clear();
00054   double sumxs=0;
00055   for(int j=0;j<Nchannels;j++){
00056     sumxs += myxs[j];
00057     thexs.push_back(sumxs);
00058   }
00059   return thexs[ich] / sumxs ;  
00060 }


Member Data Documentation

std::vector<double> EvtPsi3Sdecay::d0bardst0 [private]
 

std::vector<double> EvtPsi3Sdecay::d0d0bar [private]
 

std::vector<double> EvtPsi3Sdecay::d0dst0bar [private]
 

EvtId* EvtPsi3Sdecay::Daughters [private]
 

std::vector<double> EvtPsi3Sdecay::dpdm [private]
 

std::vector<double> EvtPsi3Sdecay::dspdsm [private]
 

std::vector<double> EvtPsi3Sdecay::dst0dst0bar [private]
 

std::vector<double> EvtPsi3Sdecay::dstmdp [private]
 

std::vector<double> EvtPsi3Sdecay::dstpdm [private]
 

std::vector<double> EvtPsi3Sdecay::dstpdstm [private]
 

double EvtPsi3Sdecay::Ecms [private]
 

int EvtPsi3Sdecay::Ndaugs [private]
 

int EvtPsi3Sdecay::nsize [private]
 

int EvtPsi3Sdecay::theLocation [private]
 

EvtParticle* EvtPsi3Sdecay::theParent [private]
 

double EvtPsi3Sdecay::theXsection[50] [private]
 

std::vector<double> EvtPsi3Sdecay::x [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 16:08:41 2011 for BOSS6.5.5 by  doxygen 1.3.9.1