Index: version.info =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/version.info,v retrieving revision 1.14 retrieving revision 1.35 diff -c -r1.14 -r1.35 *** version.info 24 May 2005 16:45:30 -0000 1.14 --- version.info 5 Jun 2008 21:32:25 -0000 1.35 *************** *** 105,108 **** New Tag: v01_02_04 Message: ! Make sur the vector has the same 4-momentum as the parent VPHO \ No newline at end of file --- 105,282 ---- New Tag: v01_02_04 Message: ! Make sur the vector has the same 4-momentum as the parent VPHO ! Module : EvtGenModels ! Date : Tue Jan 10 16:37:25 2006 ! User : ryd ! Old Tag: v01_02_04 ! New Tag: v01_03_00 ! Message: ! ! Add argument in EvtPHOTOS constructor that allow us to ! controll what the photons are called that are produced by ! PHOTOS. ! ! -Anders ! Module : EvtGenModels ! Date : Wed Jan 11 16:00:26 2006 ! User : ryd ! Old Tag: v01_03_00 ! New Tag: v01_03_01 ! Message: ! ! Updated the lineshape code for the psi(3770) ! ! Module : EvtGenModels ! Date : Sun Jan 15 22:22:05 2006 ! User : ryd ! Old Tag: v01_03_01 ! New Tag: v02_00_00 ! Message: ! ! Merged with BABAR ! ! Module : EvtGenModels ! Date : Wed Jan 25 14:15:31 2006 ! User : ryd ! Old Tag: v02_00_00 ! New Tag: v02_01_00 ! Message: ! New model for BK pole formfactors ! ! Module : EvtGenModels ! Date : Thu Jan 26 19:14:16 2006 ! User : ryd ! Old Tag: v02_01_00 ! New Tag: v02_01_01 ! Message: ! ! Add missing header file ! Module : EvtGenModels ! Date : Fri Jan 27 10:26:12 2006 ! User : ryd ! Old Tag: v02_01_01 ! New Tag: v02_01_02 ! Message: ! ! Added missing header file ! Module : EvtGenModels ! Date : Sat Feb 4 22:10:16 2006 ! User : ryd ! Old Tag: v02_01_02 ! New Tag: v02_01_03 ! Message: ! ! Added eta_c(2S), Xdd, Xud states to lucomp.F ! Module : EvtGenModels ! Date : Wed Apr 19 21:29:34 2006 ! User : victor ! Old Tag: v02_01_03 ! New Tag: v02_02_00 ! Message: minimal changes to add a parameter for the pole mass to getscalarff() ! ! Module : EvtGenModels ! Date : Tue Jun 6 13:04:46 2006 ! User : gregor ! Old Tag: v02_02_00 ! New Tag: v02_02_01 ! Message: Eliminated globals.h ! ! Module : EvtGenModels/ ! Date : Wed Dec 13 11:05:10 2006 ! User : ponyisi ! Old Tag: v02_02_01 ! New Tag: v02_03_00 ! Message: Add VPHOtoVISRHi from Brian Lang ! ! Module : EvtGenModels/ ! Date : Thu Dec 14 12:22:38 2006 ! User : ponyisi ! Old Tag: v02_03_00 ! New Tag: v02_03_01 ! Message: Revert VPHOtoVISRHi to MC-determined probMax ! ! Module : EvtGenModels/ ! Date : Mon Feb 26 11:28:59 2007 ! User : ponyisi ! Old Tag: v02_03_01 ! New Tag: v02_03_02 ! Message: ! Flip sign of rho amplitude in D+ -> K0 pi+ pi0 ! ! Module : EvtGenModels ! Date : Wed Mar 7 00:11:51 2007 ! User : pcs ! Old Tag: v02_03_02 ! New Tag: v02_03_03 ! Message: ! EvtGenModels/Class/EvtISGW2.cc ! EvtGenModels/Class/EvtISGW2FF.cc ! ! ISGW2 form factors were wrong for Ds-->eta/eta'/K0/K*0 e nu decays, ! Cabibbo favored and suppressed FF were interchanged. ! Corrected FF parameters and implemented ISGW2 model of Ds-->f_0 e nu ! decay. ! ! ! Module : EvtGenModels ! Date : Mon Mar 26 23:34:22 2007 ! User : pcs ! Old Tag: v02_03_03 ! New Tag: v02_04_00 ! Message: ! initialized maximum prob for updated D and Ds semileptonic decays ! ! Module : EvtGenModels ! Date : Mon Apr 2 23:31:11 2007 ! User : ponyisi ! Old Tag: v02_04_00 ! New Tag: v02_04_01 ! Message: ! Fix crash in certain decay modes for VPHOtoVISRHi. ! Module : EvtGenModels ! Date : Wed Oct 17 10:11:30 2007 ! User : ponyisi ! Old Tag: v02_04_01 ! New Tag: v02_04_02 ! Message: ! Assert if daughters in VPHOTOVISRHI are listed in an order that the code ! doesn't treat properly ! ! Module : EvtGenModels ! Date : Thu Oct 18 22:52:34 2007 ! User : ryd ! Old Tag: v02_04_02 ! New Tag: v02_05_00 ! Message: ! Store 4-vector pre-PHOTOS ! ! Module : EvtGenModels ! Date : Fri Mar 21 16:14:51 2008 ! User : ponyisi ! Old Tag: v02_05_00 ! New Tag: v02_06_00 ! Message: ! New Ds -> KKpi D_DALITZ model ! ! Module : EvtGenModels/ ! Date : Tue Apr 1 16:39:58 2008 ! User : ponyisi ! Old Tag: v02_06_00 ! New Tag: v02_06_01 ! Message: ! Set a maximum probability for VPHOTOVISRHI ! ! Module : EvtGenModels/ ! Date : Wed Jun 4 17:50:35 2008 ! User : petez ! Old Tag: v02_06_01 ! New Tag: v02_07_00 ! Message: Added files for new modelling of VVPiPi decays ! ! Module : EvtGenModels ! Date : Thu Jun 5 17:32:25 2008 ! User : jmh263 ! Old Tag: v02_07_00 ! New Tag: v02_07_01 ! Message: updated VVPIPI_WEIGHTED Index: Class/EvtBHadronic.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtBHadronic.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtBHadronic.cc 7 Oct 2003 02:48:12 -0000 1.1.1.1 --- Class/EvtBHadronic.cc 12 Jan 2006 16:14:24 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenModels/EvtISGW2FF.hh" *************** *** 30,35 **** --- 31,37 ---- #include "EvtGenModels/EvtBHadronic.hh" #include "EvtGenBase/EvtReport.hh" #include + using std::endl; EvtBHadronic::~EvtBHadronic() {} *************** *** 71,78 **** p->initializePhaseSpace(getNDaug(),getDaugs()); - EvtParticle *pdaug[MAX_DAUG]; - EvtVector4R p4[MAX_DAUG]; double m; --- 73,78 ---- *************** *** 86,92 **** } int bcurrent,wcurrent; ! int nbcurrent,nwcurrent; bcurrent=(int)getArg(0); wcurrent=(int)getArg(1); --- 86,93 ---- } int bcurrent,wcurrent; ! int nbcurrent=0; ! int nwcurrent=0; bcurrent=(int)getArg(0); wcurrent=(int)getArg(1); *************** *** 219,225 **** jb[0]=fp*(p4b+p4[0])+fm*q; break; default: ! report(ERROR,"EvtGen")<<"In EvtBHadronic, unknown hadronic current."< #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtCPUtil.hh" Index: Class/EvtBTo4piCP.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtBTo4piCP.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtBTo4piCP.cc 7 Oct 2003 02:48:12 -0000 1.1.1.1 --- Class/EvtBTo4piCP.cc 12 Jan 2006 16:14:25 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtBToKpipiCP.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtBToKpipiCP.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtBToKpipiCP.cc 7 Oct 2003 02:48:12 -0000 1.1.1.1 --- Class/EvtBToKpipiCP.cc 12 Jan 2006 16:14:25 -0000 1.2 *************** *** 27,32 **** --- 27,33 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtBsquark.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtBsquark.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtBsquark.cc 7 Oct 2003 02:48:12 -0000 1.1.1.1 --- Class/EvtBsquark.cc 12 Jan 2006 16:14:25 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include "EvtGenBase/EvtPatches.hh" #include #include *************** *** 92,99 **** EvtVector4R p4c = p->getDaug(0)->getP4(); - EvtVector4R p4l = p->getDaug(1)->getP4(); - EvtVector4R p4sn = p->getDaug(2)->getP4(); EvtVector4R p4b(p->mass(),0.0,0.0,0.0); --- 93,98 ---- *************** *** 143,150 **** double ctheta=cos(theta); double stheta=sin(theta); - - double FL=0.5; double vcsb=0.08; double mchi1=mchargino; double mchi2=mchargino; --- 142,147 ---- *************** *** 161,178 **** EvtComplex f1=-(g*g*V11*vcsb)/((p4b-p4c).mass2()-mchi1*mchi1); EvtComplex f2=-(g*g*V21*vcsb)/((p4b-p4c).mass2()-mchi1*mchi2); ! //report(INFO,"EvtGen") <spParent(il)*((pslash*PR)*charmquark.spParent(ic)); } ! //report(INFO,"EvtGen") <<"pslash*PR:"<spParent(il)<spParent(il)*((pslash*PR)*charmquark.spParent(ic)); } ! //report(INFO,"EvtGen") <<"pslash*PR:"<spParent(il)< #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtRandom.hh" *************** *** 100,106 **** double t; EvtId other_b; ! int charged; //randomly generate the tag (B0 or B0B) --- 101,107 ---- double t; EvtId other_b; ! int charged=0; //randomly generate the tag (B0 or B0B) *************** *** 116,188 **** other_b = B0B; } ! EvtComplex amp; ! EvtComplex A,Abar; ! EvtComplex A2, A2_bar, A0, A0_bar; ! A2 = EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3))); ! A2_bar = EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5))); ! ! A0 = EvtComplex(getArg(6)*cos(getArg(7)),getArg(6)*sin(getArg(7))); ! A0_bar = EvtComplex(getArg(8)*cos(getArg(9)),getArg(8)*sin(getArg(9))); ! //depending on what combination of pi pi we have, there will be different ! //A and Abar ! if (((getDaugs()[0]==PIP) && (getDaugs()[1]==PI0)) || ((getDaugs()[0]==PI0) && (getDaugs()[1]==PIP))) { ! ! //pi+ pi0, so just A_2 charged = 1; A = 3.0*A2; ! } ! if (((getDaugs()[0]==PI0) && (getDaugs()[1]==PIM)) || ((getDaugs()[0]==PIM) && (getDaugs()[1]==PI0))) { ! ! //pi- pi0, so just A2_bar charged = 1; A = 3.0*A2_bar; ! } ! if (((getDaugs()[0]==PIP) && (getDaugs()[1]==PIM)) || ((getDaugs()[0]==PIM) && (getDaugs()[1]==PIP))) { ! //pi+ pi-, so A_2 - A_0 ! charged = 0; ! A=sqrt(2.0)*(A2-A0); ! Abar=sqrt(2.0)*(A2_bar-A0_bar); } ! if ((getDaugs()[0]==PI0) && (getDaugs()[1]==PI0)) { ! ! //pi0 pi0, so 2*A_2 + A_0 ! charged = 0; A=2.0*A2 + A0; Abar=2.0*A2_bar + A0_bar; } ! ! if(charged == 0) { ! ! if (other_b==B0B){ ! amp=A*cos(getArg(1)*t/(2*EvtConst::c))+ ! EvtComplex(cos(-2.0*getArg(0)),sin(-2.0*getArg(0)))* ! EvtComplex(0.0,1.0)*Abar*sin(getArg(1)*t/(2*EvtConst::c)); ! } ! if (other_b==B0){ ! amp=A*EvtComplex(cos(2.0*getArg(0)),sin(2.0*getArg(0)))* ! EvtComplex(0.0,1.0)*sin(getArg(1)*t/(2*EvtConst::c))+ ! Abar*cos(getArg(1)*t/(2*EvtConst::c)); ! } ! } ! else amp = A; ! ! vertex(amp); ! return ; } --- 117,189 ---- other_b = B0B; } ! EvtComplex amp; ! EvtComplex A,Abar; ! EvtComplex A2, A2_bar, A0, A0_bar; ! A2 = EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3))); ! A2_bar = EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5))); ! ! A0 = EvtComplex(getArg(6)*cos(getArg(7)),getArg(6)*sin(getArg(7))); ! A0_bar = EvtComplex(getArg(8)*cos(getArg(9)),getArg(8)*sin(getArg(9))); ! ! //depending on what combination of pi pi we have, there will be different ! //A and Abar ! if (((getDaugs()[0]==PIP) && (getDaugs()[1]==PI0)) || ((getDaugs()[0]==PI0) && (getDaugs()[1]==PIP))) { ! //pi+ pi0, so just A_2 charged = 1; A = 3.0*A2; ! } ! if (((getDaugs()[0]==PI0) && (getDaugs()[1]==PIM)) || ((getDaugs()[0]==PIM) && (getDaugs()[1]==PI0))) { + //pi- pi0, so just A2_bar + charged = 1; A = 3.0*A2_bar; ! } ! if (((getDaugs()[0]==PIP) && (getDaugs()[1]==PIM)) || ((getDaugs()[0]==PIM) && (getDaugs()[1]==PIP))) { ! //pi+ pi-, so A_2 - A_0 ! charged = 0; ! A=sqrt(2.0)*(A2-A0); ! Abar=sqrt(2.0)*(A2_bar-A0_bar); } ! if ((getDaugs()[0]==PI0) && (getDaugs()[1]==PI0)) { ! ! //pi0 pi0, so 2*A_2 + A_0 ! charged = 0; A=2.0*A2 + A0; Abar=2.0*A2_bar + A0_bar; } ! ! if(charged == 0) { ! ! if (other_b==B0B){ ! amp=A*cos(getArg(1)*t/(2*EvtConst::c))+ ! EvtComplex(cos(-2.0*getArg(0)),sin(-2.0*getArg(0)))* ! EvtComplex(0.0,1.0)*Abar*sin(getArg(1)*t/(2*EvtConst::c)); ! } ! if (other_b==B0){ ! amp=A*EvtComplex(cos(2.0*getArg(0)),sin(2.0*getArg(0)))* ! EvtComplex(0.0,1.0)*sin(getArg(1)*t/(2*EvtConst::c))+ ! Abar*cos(getArg(1)*t/(2*EvtConst::c)); ! } ! } ! else amp = A; ! ! vertex(amp); ! return ; } Index: Class/EvtBtoKD3P.cc =================================================================== RCS file: Class/EvtBtoKD3P.cc diff -N Class/EvtBtoKD3P.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtBtoKD3P.cc 6 Jun 2006 17:03:59 -0000 1.3 *************** *** 0 **** --- 1,226 ---- + //----------------------------------------------------------------------- + // File and Version Information: + // $Id: EvtBtoKD3P.cc,v 1.3 2006/06/06 17:03:59 gregor Exp $ + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: + // Copyright (C) 2003, Colorado State University + // + // Module creator: + // Abi soffer, CSU, 2003 + //----------------------------------------------------------------------- + #include "Experiment/Experiment.h" + + // Decay model that does the decay B+->D0K, D0->3 psudoscalars + + #include + + #include "EvtGenModels/EvtBtoKD3P.hh" + #include "EvtGenBase/EvtDecayTable.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenBase/EvtParticle.hh" + #include "EvtGenBase/EvtId.hh" + #include "EvtGenBase/EvtRandom.hh" + #include "EvtGenModels/EvtPto3P.hh" + + #include "EvtGenBase/EvtDalitzPoint.hh" + #include "EvtGenBase/EvtCyclic3.hh" + using std::endl; + + //------------------------------------------------------------------ + EvtBtoKD3P::EvtBtoKD3P() : + _model1(0), + _model2(0), + _decayedOnce(false) + { + } + + //------------------------------------------------------------------ + EvtBtoKD3P::EvtBtoKD3P(const EvtBtoKD3P & other){ + } + + //------------------------------------------------------------------ + EvtBtoKD3P::~EvtBtoKD3P(){ + } + + //------------------------------------------------------------------ + EvtDecayBase * EvtBtoKD3P::clone(){ + return new EvtBtoKD3P(); + } + + //------------------------------------------------------------------ + void EvtBtoKD3P::getName(std::string& model_name){ + model_name="BTOKD3P"; + } + + //------------------------------------------------------------------ + void EvtBtoKD3P::init(){ + checkNArg(2); // r, phase + checkNDaug(3); // K, D0(allowed), D0(suppressed). + // The last two daughters are really one particle + + // check that the mother and all daughters are scalars: + checkSpinParent ( EvtSpinType::SCALAR); + checkSpinDaughter(0,EvtSpinType::SCALAR); + checkSpinDaughter(1,EvtSpinType::SCALAR); + checkSpinDaughter(2,EvtSpinType::SCALAR); + + // Check that the B dtr types are K D D: + + // get the parameters: + _r = getArg(0); + double phase = getArg(1); + _exp = EvtComplex(cos(phase), sin(phase)); + } + + //------------------------------------------------------------------ + void EvtBtoKD3P::initProbMax(){ + setProbMax(1); // this is later changed in decay() + } + + //------------------------------------------------------------------ + void EvtBtoKD3P::decay(EvtParticle *p){ + // tell the subclass that we decay the daughter: + _daugsDecayedByParentModel = true; + + // the K is the 1st daughter of the B EvtParticle. + // The decay mode of the allowed D (the one produced in b->c decay) is 2nd + // The decay mode of the suppressed D (the one produced in b->u decay) is 3rd + const int KIND = 0; + const int D1IND = 1; + const int D2IND = 2; + + // generate kinematics of daughters (K and D): + EvtId tempDaug[2] = {getDaug(KIND), getDaug(D1IND)}; + p->initializePhaseSpace(2, tempDaug); + + // Get the D daughter particle and the decay models of the allowed + // and suppressed D modes: + EvtParticle * theD = p->getDaug(D1IND); + EvtPto3P * model1 = (EvtPto3P*)(EvtDecayTable::GetDecayFunc(theD)); + + // for the suppressed mode, re-initialize theD as the suppressed D alias: + theD->init(getDaug(D2IND), theD->getP4()); + EvtPto3P * model2 = (EvtPto3P*)(EvtDecayTable::GetDecayFunc(theD)); + + // on the first call: + if (false == _decayedOnce) { + _decayedOnce = true; + + // store the D decay model pointers: + _model1 = model1; + _model2 = model2; + + // check the decay models of the first 2 daughters and that they + // have the same final states: + std::string name1; + std::string name2; + model1->getName(name1); + model2->getName(name2); + + if (name1 != "PTO3P") { + report(ERROR,"EvtGen") + << "D daughters of EvtBtoKD3P decay must decay via the \"PTO3P\" model" + << endl + << " but found to decay via " << name1.c_str() + << " or " << name2.c_str() + << ". Will terminate execution!" << endl; + assert(0); + } + + EvtId * daugs1 = model1->getDaugs(); + EvtId * daugs2 = model2->getDaugs(); + + bool idMatch = true; + int d; + for (d = 0; d < 2; ++d) { + if (daugs1[d] != daugs2[d]) { + idMatch = false; + } + } + if (false == idMatch) { + report(ERROR,"EvtGen") + << "D daughters of EvtBtoKD3P decay must decay to the same final state" + << endl + << " particles in the same order (not CP-conjugate order)," << endl + << " but they were found to decay to" << endl; + for (d = 0; d < model1->getNDaug(); ++d) { + report(ERROR,"") << " " << EvtPDL::name(daugs1[d]).c_str() << " "; + } + report(ERROR,"") << endl; + for (d = 0; d < model1->getNDaug(); ++d) { + report(ERROR,"") << " " << EvtPDL::name(daugs2[d]).c_str() << " "; + } + report(ERROR,"") << endl << ". Will terminate execution!" << endl; + assert(0); + } + + // estimate the probmax. Need to know the probmax's of the 2 + // models for this: + setProbMax(model1->getProbMax(0) + + _r * _r * model2->getProbMax(0) + + 2 * _r * sqrt(model1->getProbMax(0) * model2->getProbMax(0))); + + } // end of things to do on the first call + + // make sure the models haven't changed since the first call: + if (_model1 != model1 || _model2 != model2) { + report(ERROR,"EvtGen") + << "D daughters of EvtBtoKD3P decay should have only 1 decay modes, " + << endl + << " but a new decay mode was found after the first call" << endl + << " Will terminate execution!" << endl; + assert(0); + } + + // get the cover function for each of the models and add them up. + // They are summed with coefficients 1 because we are willing to + // take a small inefficiency (~50%) in order to ensure that the + // cover function is large enough without getting into complications + // associated with the smallness of _r: + EvtPdfSum * pc1 = model1->getPC(); + EvtPdfSum * pc2 = model2->getPC(); + EvtPdfSum pc; + pc.addTerm(1.0, *pc1); + pc.addTerm(1.0, *pc2); + + // from this combined cover function, generate the Dalitz point: + EvtDalitzPoint x = pc.randomPoint(); + + // get the aptitude for each of the models on this point and add them up: + EvtComplex amp1 = model1->amplNonCP(x); + EvtComplex amp2 = model2->amplNonCP(x); + EvtComplex amp = amp1 + amp2 * _r * _exp; + + // get the value of the cover function for this point and set the + // relative amplitude for this decay: + + double comp = sqrt(pc.evaluate (x)); + vertex (amp/comp); + + // Make the daughters of theD: + theD->generateMassTree(); + + // Now generate the p4's of the daughters of theD: + std::vector v = model2->initDaughters(x); + + if(static_cast( v.size() ) != theD->getNDaug()) { + report(ERROR,"EvtGen") + << "Number of daughters " << theD->getNDaug() + << " != " << "Momentum vector size " << v.size() + << endl + << " Terminating execution." << endl; + assert(0); + } + + // Apply the new p4's to the daughters: + int i; + for(i=0; igetNDaug(); ++i){ + theD->getDaug(i)->init(model2->getDaugs()[i], v[i]); + } + } + Index: Class/EvtBtoKpiCPiso.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtBtoKpiCPiso.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtBtoKpiCPiso.cc 7 Oct 2003 02:48:12 -0000 1.1.1.1 --- Class/EvtBtoKpiCPiso.cc 12 Jan 2006 16:14:25 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtBtoXsEtap.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtBtoXsEtap.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtBtoXsEtap.cc 7 Oct 2003 02:48:12 -0000 1.1.1.1 --- Class/EvtBtoXsEtap.cc 12 Jan 2006 16:14:26 -0000 1.2 *************** *** 20,25 **** --- 20,26 ---- // Adlene Hicheur January 10, 2001 Module created //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtRandom.hh" *************** *** 30,35 **** --- 31,37 ---- #include "EvtGenModels/EvtBtoXsEtap.hh" #include #include "EvtGenBase/EvtConst.hh" + using std::endl; EvtBtoXsEtap::~EvtBtoXsEtap() {} *************** *** 64,70 **** // useless // if ( p->getNDaug() != 0 ) { // //Will end up here because maxrate multiplies by 1.2 ! // report(DEBUG,"EvtGen") << "In EvtBtoXsEtap: X_s daughters should not be here!"<getNDaug() != 0 ) { // //Will end up here because maxrate multiplies by 1.2 ! // report(DEBUG,"EvtGen") << "In EvtBtoXsEtap: X_s daughters should not be here!"<Xs,gamma decays. // Set the first input parameter to 1 to use the Ali-Greub model, // or 2 to use the Kagan-Neubert model. + #include "Experiment/Experiment.h" // // Modification history: *************** *** 41,46 **** --- 42,48 ---- #include "EvtGenModels/EvtBtoXsgammaKagan.hh" #include "EvtGenModels/EvtBtoXsgammaFixedMass.hh" #include "EvtGenModels/EvtBtoXsgammaFlatEnergy.hh" + using std::endl; EvtBtoXsgamma::~EvtBtoXsgamma() { *************** *** 72,96 **** if (getNArg() == 0) { report(ERROR,"EvtGen") << "EvtBtoXsgamma generator expected " ! << " at least 1 argument but found: "<init(getNArg(),getArgs()); } void EvtBtoXsgamma::initProbMax(){ --- 74,83 ---- if (getNArg() == 0) { report(ERROR,"EvtGen") << "EvtBtoXsgamma generator expected " ! << " at least 1 argument but found: "<getNDaug() != 0 ) { //Will end up here because maxrate multiplies by 1.2 ! // report(DEBUG,"EvtGen") << "In EvtBtoXsgamma: X_s daughters should not be here!"<init(getNArg(),getArgs()); + } + + // if ( p->getNDaug() != 0 ) { //Will end up here because maxrate multiplies by 1.2 ! // report(DEBUG,"EvtGen") << "In EvtBtoXsgamma: X_s daughters should not be here!"< #include "EvtGenModels/EvtBtoXsgammaAbsModel.hh" Index: Class/EvtBtoXsgammaAliGreub.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtBtoXsgammaAliGreub.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtBtoXsgammaAliGreub.cc 7 Oct 2003 02:48:12 -0000 1.1.1.1 --- Class/EvtBtoXsgammaAliGreub.cc 12 Jan 2006 16:14:26 -0000 1.2 *************** *** 30,35 **** --- 30,36 ---- // class to allow choice of input models. //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtRandom.hh" *************** *** 40,45 **** --- 41,47 ---- #include "EvtGenBase/EvtGenKine.hh" #include "EvtGenBase/EvtPDL.hh" #include "EvtGenBase/EvtReport.hh" + using std::endl; EvtBtoXsgammaAliGreub::~EvtBtoXsgammaAliGreub(){} *************** *** 50,57 **** report(ERROR,"EvtGen") << "EvtBtoXsgamma generator model " << "EvtBtoXsgammaAliGreub expected " ! << "zero arguments but found: "< #include ! double EvtBtoXsgammaFermiUtil::FermiExpFunc(double y, const HepVector &coeffs) { //coeffs: 1 = lambdabar, 2 = a, 3 = lam1, 4 = norm ! // report(INFO,"EvtGen")< #include + using std::endl; ! double EvtBtoXsgammaFermiUtil::FermiExpFunc(double y, const std::vector &coeffs) { //coeffs: 1 = lambdabar, 2 = a, 3 = lam1, 4 = norm ! // report(INFO,"EvtGen")< &coeffs) { //coeffs: 1 = lambdabar, 2 = a, 3 = c, 4 = norm return (pow(1. - (y/coeffs[1]),coeffs[2])*exp(-pow(coeffs[3],2.)*pow(1. - (y/coeffs[1]),2.)))/coeffs[4]; } ! double EvtBtoXsgammaFermiUtil::FermiGaussFuncRoot(double lambdabar, double lam1, double mb, std::vector &gammaCoeffs) { ! std::vector coeffs1(3); ! std::vector coeffs2(3); coeffs1[0]=0.2; coeffs1[1]=lambdabar; *************** *** 77,83 **** } ! double EvtBtoXsgammaFermiUtil::FermiGaussRootFcnA(double y, const HepVector &coeffs1, const HepVector &coeffs2) { //coeffs1: 0=ap, 1=lambdabar, coeffs2=gamma function coeffs --- 79,85 ---- } ! double EvtBtoXsgammaFermiUtil::FermiGaussRootFcnA(double y, const std::vector &coeffs1, const std::vector &coeffs2) { //coeffs1: 0=ap, 1=lambdabar, coeffs2=gamma function coeffs *************** *** 87,93 **** } ! double EvtBtoXsgammaFermiUtil::FermiGaussRootFcnB(double y, const HepVector &coeffs1, const HepVector &coeffs2) { //coeffs1: 0=ap, 1=lambdabar, coeffs2=gamma function coeffs double cp = Gamma((2.0 + coeffs1[0])/2., coeffs2)/Gamma((1.0 + coeffs1[0])/2., coeffs2); --- 89,95 ---- } ! double EvtBtoXsgammaFermiUtil::FermiGaussRootFcnB(double y, const std::vector &coeffs1, const std::vector &coeffs2) { //coeffs1: 0=ap, 1=lambdabar, coeffs2=gamma function coeffs double cp = Gamma((2.0 + coeffs1[0])/2., coeffs2)/Gamma((1.0 + coeffs1[0])/2., coeffs2); *************** *** 95,101 **** } ! double EvtBtoXsgammaFermiUtil::Gamma(double z, const HepVector &coeffs) { //Lifted from Numerical Recipies in C double x, y, tmp, ser; --- 97,103 ---- } ! double EvtBtoXsgammaFermiUtil::Gamma(double z, const std::vector &coeffs) { //Lifted from Numerical Recipies in C double x, y, tmp, ser; *************** *** 121,127 **** //Lifted from Numerical Recipies in C : Returns the modified Bessel //function K_1(x) for positive real x ! if (x<0.0) report(INFO,"EvtGen") <<"x is negative !"<GetRootSingleFunc(lhFunc, rhSide, 0.1, 0.4, 1.0e-6); //rho=0.250353; ! report(INFO,"EvtGen")<<"rho/2 "<GetRootSingleFunc(lhFunc, rhSide, 0.1, 0.4, 1.0e-6); //rho=0.250353; ! report(INFO,"EvtGen")<<"rho/2 "< &coeffs) { if (y == (coeffs[1]-coeffs[2])) y=0.99999999*(coeffs[1]-coeffs[2]); //coeffs: 1 = mB, 2=mb, 3=rho, 4=lambdabar, 5=norm double pF = coeffs[4]*sqrt(EvtConst::pi)/(coeffs[3]*exp(coeffs[3]/2.)*BesselK1(coeffs[3]/2.)); ! // report(INFO,"EvtGen")<<" pf "<Xs,gamma decays with a fixed hadronic // mass. For spectrum measurements. // The input parameters are 1: the hadronic mass + #include "Experiment/Experiment.h" // Modification history: // *************** *** 20,27 **** --- 21,31 ---- #include #include "EvtGenModels/EvtBtoXsgamma.hh" + #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtBtoXsgammaFixedMass.hh" #include + using std::endl; + using std::fstream; EvtBtoXsgammaFixedMass::~EvtBtoXsgammaFixedMass(){ } *************** *** 32,39 **** report(ERROR,"EvtGen") << "EvtBtoXsgamma generator model " << "EvtBtoXsgammaFixedMass expected " ! << "either 1(default config) or two arguments but found: "<Xs,gamma decays with a fixed hadronic // mass. For spectrum measurements. // The input parameters are 1: the hadronic mass + #include "Experiment/Experiment.h" // Modification history: // *************** *** 22,28 **** --- 23,32 ---- #include "EvtGenModels/EvtBtoXsgamma.hh" #include "EvtGenModels/EvtBtoXsgammaFlatEnergy.hh" #include "EvtGenBase/EvtRandom.hh" + #include "EvtGenBase/EvtReport.hh" #include + using std::endl; + using std::fstream; EvtBtoXsgammaFlatEnergy::~EvtBtoXsgammaFlatEnergy(){ } *************** *** 33,40 **** report(ERROR,"EvtGen") << "EvtBtoXsgamma generator model " << "EvtBtoXsgammaFlatEnergy expected " ! << "either 1(default config) or two arguments but found: "<(pow(_mB0,2)-pow(mPi+mK,2))/(2.0*_mB0)){ ! report(ERROR,"EvtGen") << "Emax greater than Kinematic limit" << std::endl; ! report(ERROR,"EvtGen") << "Reset to the kinematic limit" << std::endl; ! report(ERROR,"EvtGen") << "(m_B**2-(m_pi+m_k)**2)/(2m_B)" << std::endl; _eMax = (pow(_mB0,2)-pow(mPi+mK,2))/(2.0*_mB0); } _eRange=_eMax-_eMin; --- 54,62 ---- _eMax=args[2]; } if (_eMax>(pow(_mB0,2)-pow(mPi+mK,2))/(2.0*_mB0)){ ! report(ERROR,"EvtGen") << "Emax greater than Kinematic limit" << endl; ! report(ERROR,"EvtGen") << "Reset to the kinematic limit" << endl; ! report(ERROR,"EvtGen") << "(m_B**2-(m_pi+m_k)**2)/(2m_B)" << endl; _eMax = (pow(_mB0,2)-pow(mPi+mK,2))/(2.0*_mB0); } _eRange=_eMax-_eMin; Index: Class/EvtBtoXsgammaKagan.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtBtoXsgammaKagan.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtBtoXsgammaKagan.cc 7 Oct 2003 02:48:13 -0000 1.1.1.1 --- Class/EvtBtoXsgammaKagan.cc 12 Jan 2006 16:14:27 -0000 1.2 *************** *** 28,33 **** --- 28,34 ---- // Jane Tinslay, Francesca Di Lodovico March 21, 2001 Module created //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenModels/EvtBtoXsgamma.hh" *************** *** 49,54 **** --- 50,57 ---- #include "EvtGenModels/EvtBtoXsgammaFermiUtil.hh" #include + using std::endl; + using std::fstream; bool EvtBtoXsgammaKagan::bbprod = false; double EvtBtoXsgammaKagan::intervalMH = 0; *************** *** 67,74 **** << "either 1(default config) or " << "10 (default mass range) or " << "12 (user range) arguments but found: " ! < _mHmax){ report(ERROR,"EvtGen") << "Minimum hadronic mass exceeds maximum " ! << std::endl; ! report(ERROR,"EvtGen") << "Will terminate execution!" << std::endl; ::abort(); } if (_mHmin < mHminLimit){ report(ERROR,"EvtGen") << "Minimum hadronic mass below K pi threshold" ! << std::endl; ! report(ERROR,"EvtGen") << "Resetting to K pi threshold" << std::endl; _mHmin = mHminLimit; } if (_mHmax > mHmaxLimit){ report(ERROR,"EvtGen") << "Maximum hadronic mass above 4.5 GeV/c^2" ! << std::endl; ! report(ERROR,"EvtGen") << "Resetting to 4.5 GeV/c^2" << std::endl; _mHmax = mHmaxLimit; } }else{ --- 91,110 ---- _mHmax = args[11]; if (_mHmin > _mHmax){ report(ERROR,"EvtGen") << "Minimum hadronic mass exceeds maximum " ! << endl; ! report(ERROR,"EvtGen") << "Will terminate execution!" << endl; ::abort(); } if (_mHmin < mHminLimit){ report(ERROR,"EvtGen") << "Minimum hadronic mass below K pi threshold" ! << endl; ! report(ERROR,"EvtGen") << "Resetting to K pi threshold" << endl; _mHmin = mHminLimit; } if (_mHmax > mHmaxLimit){ report(ERROR,"EvtGen") << "Maximum hadronic mass above 4.5 GeV/c^2" ! << endl; ! report(ERROR,"EvtGen") << "Resetting to 4.5 GeV/c^2" << endl; _mHmax = mHmaxLimit; } }else{ *************** *** 139,151 **** _z = args[7]; _nIntervalS = args[8]; _nIntervalmH = args[9]; ! HepVector mHVect(int(_nIntervalmH+1.0)); massHad = new double[int(_nIntervalmH+1.0)]; brHad = new double[int(_nIntervalmH+1.0)]; intervalMH=_nIntervalmH; //Going to have to add a new entry into the data file - takes ages... ! report(WARNING,"EvtGen") << "EvtBtoXsgammaKagan: calculating new hadronic mass spectra. This takes a while..." << std::endl; //Now need to compute the mHVect vector for //the current parameters --- 142,154 ---- _z = args[7]; _nIntervalS = args[8]; _nIntervalmH = args[9]; ! std::vector mHVect(int(_nIntervalmH+1.0)); massHad = new double[int(_nIntervalmH+1.0)]; brHad = new double[int(_nIntervalmH+1.0)]; intervalMH=_nIntervalmH; //Going to have to add a new entry into the data file - takes ages... ! report(WARNING,"EvtGen") << "EvtBtoXsgammaKagan: calculating new hadronic mass spectra. This takes a while..." << endl; //Now need to compute the mHVect vector for //the current parameters *************** *** 192,205 **** //Build s22 and s27 vector - saves time because double //integration is required otherwise ! HepVector s22Coeffs(int(_nIntervalS+1.0)); ! HepVector s27Coeffs(int(_nIntervalS+1.0)); ! HepVector s28Coeffs(int(_nIntervalS+1.0)); double dy = (yMax - yMin)/_nIntervalS; double yp = yMin; ! HepVector sCoeffs(1); sCoeffs[0] = _z; //Define s22 and s27 functions --- 195,208 ---- //Build s22 and s27 vector - saves time because double //integration is required otherwise ! std::vector s22Coeffs(int(_nIntervalS+1.0)); ! std::vector s27Coeffs(int(_nIntervalS+1.0)); ! std::vector s28Coeffs(int(_nIntervalS+1.0)); double dy = (yMax - yMin)/_nIntervalS; double yp = yMin; ! std::vector sCoeffs(1); sCoeffs[0] = _z; //Define s22 and s27 functions *************** *** 228,238 **** //Define functions and vectors used to calculate mHVect. Each function takes a set //of vectors which are used as the function coefficients ! HepVector FermiCoeffs(6); ! HepVector varCoeffs(3); ! HepVector DeltaCoeffs(1); ! HepVector s88Coeffs(2); ! HepVector sInitCoeffs(3); varCoeffs[0] = _mB; varCoeffs[1] = _mb; --- 231,241 ---- //Define functions and vectors used to calculate mHVect. Each function takes a set //of vectors which are used as the function coefficients ! std::vector FermiCoeffs(6); ! std::vector varCoeffs(3); ! std::vector DeltaCoeffs(1); ! std::vector s88Coeffs(2); ! std::vector sInitCoeffs(3); varCoeffs[0] = _mB; varCoeffs[1] = _mb; *************** *** 255,261 **** FermiCoeffs[5]=0.0; //Coefficients for gamma function ! HepVector gammaCoeffs(6); gammaCoeffs[0]=76.18009172947146; gammaCoeffs[1]=-86.50532032941677; gammaCoeffs[2]=24.01409824083091; --- 258,264 ---- FermiCoeffs[5]=0.0; //Coefficients for gamma function ! std::vector gammaCoeffs(6); gammaCoeffs[0]=76.18009172947146; gammaCoeffs[1]=-86.50532032941677; gammaCoeffs[2]=24.01409824083091; *************** *** 365,371 **** double s78Result = mys78FermiSimp->evaluate((_mB*ymH-_mb),_mB-_mb); double s22Result = mys22FermiSimp->evaluate((_mB*ymH-_mb),_mB-_mb); double s27Result = mys27FermiSimp->evaluate((_mB*ymH-_mb),_mB-_mb); - double s28Result = mys28FermiSimp->evaluate((_mB*ymH-_mb),_mB-_mb); double py = (pow(_CKMrat,2.)*(6./_fz)*(_alpha/EvtConst::pi)*(deltaResult*_cDeltatot + (_alphasmu/EvtConst::pi)*(s77Result*pow(_c70mu,2.) + s27Result*_c2mu*(_c70mu - _c80mu/3.) + s78Result*_c70mu*_c80mu + s22Result*_c2mu*_c2mu + s88Result*_c80mu*_c80mu ) ) ); --- 368,373 ---- *************** *** 631,652 **** } } ! double EvtBtoXsgammaKagan::s22Func(double y, const HepVector &coeffs) { //coeffs[0]=z return (1. - y)*((pow(coeffs[0],2.)/pow(y,2.))*(pow(ReG(y/coeffs[0]),2.) + pow(ImG(y/coeffs[0]),2.)) + (coeffs[0]/y)*ReG(y/coeffs[0]) + (1./4.)); } ! double EvtBtoXsgammaKagan::s27Func(double y, const HepVector &coeffs) { //coeffs[0] = z return (ReG(y/coeffs[0]) + y/(2.*coeffs[0])); } ! double EvtBtoXsgammaKagan::DeltaFermiFunc(double y, const HepVector &coeffs1, ! const HepVector &coeffs2, const HepVector &coeffs3) { //coeffs1=fermi function coeffs, coeffs2[0]=mB, coeffs2[1]=mb, //coeffs2[2]=ymH, coeffs3[0]=DeltaCoeff (alphasmu) --- 633,654 ---- } } ! double EvtBtoXsgammaKagan::s22Func(double y, const std::vector &coeffs) { //coeffs[0]=z return (1. - y)*((pow(coeffs[0],2.)/pow(y,2.))*(pow(ReG(y/coeffs[0]),2.) + pow(ImG(y/coeffs[0]),2.)) + (coeffs[0]/y)*ReG(y/coeffs[0]) + (1./4.)); } ! double EvtBtoXsgammaKagan::s27Func(double y, const std::vector &coeffs) { //coeffs[0] = z return (ReG(y/coeffs[0]) + y/(2.*coeffs[0])); } ! double EvtBtoXsgammaKagan::DeltaFermiFunc(double y, const std::vector &coeffs1, ! const std::vector &coeffs2, const std::vector &coeffs3) { //coeffs1=fermi function coeffs, coeffs2[0]=mB, coeffs2[1]=mb, //coeffs2[2]=ymH, coeffs3[0]=DeltaCoeff (alphasmu) *************** *** 656,663 **** } ! double EvtBtoXsgammaKagan::s77FermiFunc(double y, const HepVector &coeffs1, ! const HepVector &coeffs2) { //coeffs1=fermi function coeffs, coeffs2[0]=mB, coeffs2[1]=mb, //coeffs2[2]=ymH --- 658,665 ---- } ! double EvtBtoXsgammaKagan::s77FermiFunc(double y, const std::vector &coeffs1, ! const std::vector &coeffs2) { //coeffs1=fermi function coeffs, coeffs2[0]=mB, coeffs2[1]=mb, //coeffs2[2]=ymH *************** *** 666,673 **** } ! double EvtBtoXsgammaKagan::s88FermiFunc(double y, const HepVector &coeffs1, ! const HepVector &coeffs2, const HepVector &coeffs3) { //coeffs1=fermi function coeffs, coeffs2[0]=mB, coeffs2[1]=mb, //coeffs2[2]=ymH, coeffs3=s88 coeffs --- 668,675 ---- } ! double EvtBtoXsgammaKagan::s88FermiFunc(double y, const std::vector &coeffs1, ! const std::vector &coeffs2, const std::vector &coeffs3) { //coeffs1=fermi function coeffs, coeffs2[0]=mB, coeffs2[1]=mb, //coeffs2[2]=ymH, coeffs3=s88 coeffs *************** *** 676,683 **** } ! double EvtBtoXsgammaKagan::s78FermiFunc(double y, const HepVector &coeffs1, ! const HepVector &coeffs2) { //coeffs1=fermi function coeffs, coeffs2[0]=mB, coeffs2[1]=mb, //coeffs2[2]=ymH --- 678,685 ---- } ! double EvtBtoXsgammaKagan::s78FermiFunc(double y, const std::vector &coeffs1, ! const std::vector &coeffs2) { //coeffs1=fermi function coeffs, coeffs2[0]=mB, coeffs2[1]=mb, //coeffs2[2]=ymH *************** *** 686,694 **** } ! double EvtBtoXsgammaKagan::sFermiFunc(double y, const HepVector &coeffs1, ! const HepVector &coeffs2, const HepVector &coeffs3, ! const HepVector &coeffs4) { //coeffs1=fermi function coeffs, coeffs2[0]=mB, coeffs2[1]=mb, //coeffs2[2]=ymH, coeffs3[0]=nIntervals in s22 or s27 array, coeffs3[1]=yMin, --- 688,696 ---- } ! double EvtBtoXsgammaKagan::sFermiFunc(double y, const std::vector &coeffs1, ! const std::vector &coeffs2, const std::vector &coeffs3, ! const std::vector &coeffs4) { //coeffs1=fermi function coeffs, coeffs2[0]=mB, coeffs2[1]=mb, //coeffs2[2]=ymH, coeffs3[0]=nIntervals in s22 or s27 array, coeffs3[1]=yMin, *************** *** 703,709 **** return (1. -8.*z + 8.*pow(z,3.) - pow(z,4.) - 12.*pow(z,2.)*log(z)); } ! double EvtBtoXsgammaKagan::GetArrayVal(double xp, double nInterval, double xMin, double xMax, HepVector array) { double dx = (xMax - xMin)/nInterval; int bin1 = int(((xp-xMin)/(xMax - xMin))*nInterval); --- 705,711 ---- return (1. -8.*z + 8.*pow(z,3.) - pow(z,4.) - 12.*pow(z,2.)*log(z)); } ! double EvtBtoXsgammaKagan::GetArrayVal(double xp, double nInterval, double xMin, double xMax, std::vector array) { double dx = (xMax - xMin)/nInterval; int bin1 = int(((xp-xMin)/(xMax - xMin))*nInterval); *************** *** 712,719 **** if (xp == x1) return array[bin1]; ! int bin2; ! if (xp > x1) { bin2 = bin1 + 1; } --- 714,720 ---- if (xp == x1) return array[bin1]; ! int bin2(0); if (xp > x1) { bin2 = bin1 + 1; } *************** *** 745,751 **** } ! double EvtBtoXsgammaKagan::FermiFunc(double y, const HepVector &coeffs) { //Fermi shape functions :1=exponential, 2=gaussian, 3=roman if (int(coeffs[0]) == 1) return EvtBtoXsgammaFermiUtil::FermiExpFunc(y, coeffs); --- 746,752 ---- } ! double EvtBtoXsgammaKagan::FermiFunc(double y, const std::vector &coeffs) { //Fermi shape functions :1=exponential, 2=gaussian, 3=roman if (int(coeffs[0]) == 1) return EvtBtoXsgammaFermiUtil::FermiExpFunc(y, coeffs); *************** *** 757,763 **** double EvtBtoXsgammaKagan::diLogFunc(double y) { ! return -log(std::fabs(1. - y))/y; } --- 758,764 ---- double EvtBtoXsgammaKagan::diLogFunc(double y) { ! return -log(fabs(1. - y))/y; } *************** *** 766,772 **** double li2(0); for(int i=1; i<1000; i++){ //the value 1000 should actually be Infinite... ! li2+=pow(y,i)/pow(i,2); } return li2; } --- 767,773 ---- double li2(0); for(int i=1; i<1000; i++){ //the value 1000 should actually be Infinite... ! li2+=pow(y,i)/(i*i); } return li2; } Index: Class/EvtBtoXsgammaRootFinder.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtBtoXsgammaRootFinder.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtBtoXsgammaRootFinder.cc 7 Oct 2003 02:48:13 -0000 1.1.1.1 --- Class/EvtBtoXsgammaRootFinder.cc 12 Jan 2006 16:14:27 -0000 1.2 *************** *** 17,28 **** --- 17,30 ---- // // Jane Tinslay March 21, 2001 Module created //------------------------------------------------------------------------ + #include "Experiment/Experiment.h" #include "EvtGenModels/EvtBtoXsgammaRootFinder.hh" #include "EvtGenModels/EvtItgTwoCoeffFcn.hh" #include "EvtGenModels/EvtItgSimpsonIntegrator.hh" #include "EvtGenBase/EvtReport.hh" #include + using std::endl; //------------- // C Headers -- *************** *** 56,71 **** double f2 = theFunc->value(upperValue) - functionValue; if ( f1*f2 > 0.0 ) { ! report(WARNING,"EvtGen") << "EvtBtoXsgammaRootFinder: No root in specified range !"<value(upperValue) - functionValue; if ( f1*f2 > 0.0 ) { ! report(WARNING,"EvtGen") << "EvtBtoXsgammaRootFinder: No root in specified range !"<value(rootGuess) - functionValue; --- 82,88 ---- } double rootGuess = 0.5*(lowerValue + upperValue); ! double dxold = fabs(upperValue - lowerValue); double dx = dxold; double f = theFunc->value(rootGuess) - functionValue; *************** *** 92,98 **** rootGuess = xLower+dx; // If change in root is negligible, take it as solution. ! if (std::fabs(xLower - rootGuess) < precision) { root = rootGuess; return root; } --- 94,100 ---- rootGuess = xLower+dx; // If change in root is negligible, take it as solution. ! if (fabs(xLower - rootGuess) < precision) { root = rootGuess; return root; } *************** *** 109,115 **** report(WARNING,"EvtGen") << "EvtBtoXsgammaRootFinder: Maximum number of iterations " <<"in EvtBtoXsgammaRootFinder::foundRoot exceeded!" ! <<" Returning false."< 0.0 ) { ! report(WARNING,"EvtGen") << "EvtBtoXsgammaRootFinder: No root in specified range !"< 0.0 ) { ! report(WARNING,"EvtGen") << "EvtBtoXsgammaRootFinder: No root in specified range !"<setCoeff(1,0,rootGuess); --- 165,171 ---- } double rootGuess = 0.5*(lowerValue + upperValue); ! double dxold = fabs(upperValue - lowerValue); double dx = dxold; theFunc1->setCoeff(1,0,rootGuess); *************** *** 177,183 **** rootGuess = xLower+dx; // If change in root is negligible, take it as solution. ! if (std::fabs(xLower - rootGuess) < precision) { root = rootGuess; return root; } --- 179,185 ---- rootGuess = xLower+dx; // If change in root is negligible, take it as solution. ! if (fabs(xLower - rootGuess) < precision) { root = rootGuess; return root; } *************** *** 196,202 **** report(WARNING,"EvtGen") << "EvtBtoXsgammaRootFinder: Maximum number of iterations " <<"in EvtBtoXsgammaRootFinder::foundRoot exceeded!" ! <<" Returning false."< #include "EvtGenBase/EvtRandom.hh" --- 14,25 ---- // // Modification history: // ! // Stephane Willocq Jan 17, 2001 Module created ! // Stephane Willocq Jul 15, 2003 Input model parameters ! // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtRandom.hh" *************** *** 27,37 **** #include "EvtGenBase/EvtGenKine.hh" #include "EvtGenBase/EvtPDL.hh" #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtBtoXsll.hh" #include "EvtGenModels/EvtBtoXsllUtil.hh" - #include #include "EvtGenBase/EvtConst.hh" #include "EvtGenBase/EvtId.hh" EvtBtoXsll::~EvtBtoXsll() {} --- 27,38 ---- #include "EvtGenBase/EvtGenKine.hh" #include "EvtGenBase/EvtPDL.hh" #include "EvtGenBase/EvtReport.hh" + #include "EvtGenModels/EvtbTosllAmp.hh" #include "EvtGenModels/EvtBtoXsll.hh" #include "EvtGenModels/EvtBtoXsllUtil.hh" #include "EvtGenBase/EvtConst.hh" #include "EvtGenBase/EvtId.hh" + using std::endl; EvtBtoXsll::~EvtBtoXsll() {} *************** *** 51,63 **** void EvtBtoXsll::init(){ // check that there are no arguments ! checkNArg(0); ! // Make sure that the correct number of decay particles is provided checkNDaug(3); // Check that the two leptons are the same type - EvtId mesontype = getDaug(0); EvtId lepton1type = getDaug(1); EvtId lepton2type = getDaug(2); --- 52,64 ---- void EvtBtoXsll::init(){ // check that there are no arguments ! ! checkNArg(0,4,5); ! checkNDaug(3); // Check that the two leptons are the same type EvtId lepton1type = getDaug(1); EvtId lepton2type = getDaug(2); *************** *** 101,110 **** ::abort(); } _calcprob = new EvtBtoXsllUtil; - double mb = 4.8; - double ms = 0.2; double ml = EvtPDL::getMeanMass(getDaug(1)); // determine the maximum probability density from dGdsProb --- 102,131 ---- ::abort(); } + + _mb=4.8; + _ms=0.2; + _mq=0.; + _pf=0.41; + _mxmin=1.1; + if ( getNArg()==4) + { + // b-quark mass + _mb = getArg(0); + // s-quark mass + _ms = getArg(1); + // spectator quark mass + _mq = getArg(2); + // Fermi motion parameter + _pf = getArg(3); + } + if ( getNArg()==5) + { + _mxmin = getArg(4); + } + _calcprob = new EvtBtoXsllUtil; double ml = EvtPDL::getMeanMass(getDaug(1)); // determine the maximum probability density from dGdsProb *************** *** 113,127 **** int nsteps = 100; double s = 0.0; double smin = 4.0 * ml * ml; ! double smax = (mb - ms)*(mb - ms); double probMax = -10000.0; double sProbMax = -10.0; double uProbMax = -10.0; for (i=0;idGdsProb(mb, ms, ml, s); if (prob > probMax) { sProbMax = s; --- 134,148 ---- int nsteps = 100; double s = 0.0; double smin = 4.0 * ml * ml; ! double smax = (_mb - _ms)*(_mb - _ms); double probMax = -10000.0; double sProbMax = -10.0; double uProbMax = -10.0; for (i=0;idGdsProb(_mb, _ms, ml, s); if (prob > probMax) { sProbMax = s; *************** *** 132,138 **** _dGdsProbMax = probMax; if ( verbose() ) { ! report(INFO,"EvtGen") << "dGdsProbMax = " << probMax << " for s = " << sProbMax << std::endl; } // determine the maximum probability density from dGdsdupProb --- 153,159 ---- _dGdsProbMax = probMax; if ( verbose() ) { ! report(INFO,"EvtGen") << "dGdsProbMax = " << probMax << " for s = " << sProbMax << endl; } // determine the maximum probability density from dGdsdupProb *************** *** 142,153 **** for (i=0;idGdsdupProb(mb, ms, ml, s, u); if (prob > probMax) { sProbMax = s; --- 163,174 ---- for (i=0;idGdsdupProb(_mb, _ms, ml, s, u); if (prob > probMax) { sProbMax = s; *************** *** 157,167 **** } } ! _dGdsdupProbMax = probMax; if ( verbose() ) { report(INFO,"EvtGen") << "dGdsdupProbMax = " << probMax << " for s = " << sProbMax ! << " and u = " << uProbMax << std::endl; } } --- 178,188 ---- } } ! _dGdsdupProbMax = 2.0*probMax; if ( verbose() ) { report(INFO,"EvtGen") << "dGdsdupProbMax = " << probMax << " for s = " << sProbMax ! << " and u = " << uProbMax << endl; } } *************** *** 180,187 **** EvtParticle* leptonp = p->getDaug(1); EvtParticle* leptonn = p->getDaug(2); - EvtVector4R p4[3]; - double mass[3]; findMasses( p, getNDaug(), getDaugs(), mass ); --- 201,206 ---- *************** *** 205,249 **** // to threshold as far as JETSET is concerned // (JETSET gets caught in an infinite loop) // so we choose a lightly larger value for the threshold ! while (xhadronMass < 0.65) { im++; // Apply Fermi motion and determine effective b-quark mass ! double pf = 0.25; ! double ms = 0.2; ! double mq = 0.3; double mb = 0.0; double xbox, ybox; while (mb <= 0.0) { ! pb = _calcprob->FermiMomentum(pf); // effective b-quark mass ! mb = mB*mB + mq*mq - 2.0*mB*sqrt(pb*pb + mq*mq); } mb = sqrt(mb); ! // report(INFO,"EvtGen") << "b-quark momentum = " << pb << " mass = " << mb << std::endl; // generate a dilepton invariant mass double s = 0.0; double smin = 4.0 * ml * ml; ! double smax = (mb - ms)*(mb - ms); while (s == 0.0) ! { xbox = EvtRandom::Flat(smin, smax); ybox = EvtRandom::Flat(_dGdsProbMax); ! if (ybox < _calcprob->dGdsProb(mb, ms, ml, xbox)) { s = xbox;} ! } ! // report(INFO,"EvtGen") << "dGdsProb(s) = " << _calcprob->dGdsProb(mb, ms, ml, s) ! // << " for s = " << s << std::endl; // two-body decay of b quark at rest into s quark and dilepton pair: // b -> s (ll) --- 224,275 ---- // to threshold as far as JETSET is concerned // (JETSET gets caught in an infinite loop) // so we choose a lightly larger value for the threshold ! while (xhadronMass < _mxmin) { im++; // Apply Fermi motion and determine effective b-quark mass ! // Old BaBar MC parameters ! // double pf = 0.25; ! // double ms = 0.2; ! // double mq = 0.3; ! double mb = 0.0; double xbox, ybox; while (mb <= 0.0) { ! pb = _calcprob->FermiMomentum(_pf); // effective b-quark mass ! mb = mB*mB + _mq*_mq - 2.0*mB*sqrt(pb*pb + _mq*_mq); ! if ( mb>0. && sqrt(mb)-_ms < 2.0*ml ) mb= -10.; } mb = sqrt(mb); ! // cout << "b-quark momentum = " << pb << " mass = " << mb << endl; // generate a dilepton invariant mass double s = 0.0; double smin = 4.0 * ml * ml; ! double smax = (mb - _ms)*(mb - _ms); while (s == 0.0) ! { xbox = EvtRandom::Flat(smin, smax); ybox = EvtRandom::Flat(_dGdsProbMax); ! double prob= _calcprob->dGdsProb(mb, _ms, ml, xbox); ! if ( !(prob>=0.0) && !(prob<=0.0)) { ! // report(INFO,"EvtGen") << "nan from dGdsProb " << prob << " " << mb << " " << _ms << " " << ml << " " << xbox << std::endl; ! } ! if ( ybox < prob ) s=xbox; ! } ! // cout << "dGdsProb(s) = " << _calcprob->dGdsProb(mb, _ms, ml, s) ! // << " for s = " << s << endl; // two-body decay of b quark at rest into s quark and dilepton pair: // b -> s (ll) *************** *** 251,257 **** EvtVector4R p4sdilep[2]; double msdilep[2]; ! msdilep[0] = ms; msdilep[1] = sqrt(s); EvtGenKine::PhaseSpace(2, msdilep, p4sdilep, mb); --- 277,283 ---- EvtVector4R p4sdilep[2]; double msdilep[2]; ! msdilep[0] = _ms; msdilep[1] = sqrt(s); EvtGenKine::PhaseSpace(2, msdilep, p4sdilep, mb); *************** *** 286,307 **** ybox = EvtRandom::Flat(_dGdsdupProbMax); ! double prob = _calcprob->dGdsdupProb(mb, ms, ml, s, u); if (prob > _dGdsdupProbMax && nmsg < 20) { report(INFO,"EvtGen") << "d2gdsdup GT d2gdsdup_max:" << prob << " " << _dGdsdupProbMax ! << " for s = " << s << " u = " << u << " mb = " << mb << std::endl; ! nmsg++; } if (ybox < prob) ! { ! tmp = 1.0; ! // report(INFO,"EvtGen") << "dGdsdupProb(s) = " << prob ! // << " for u = " << u << std::endl; ! } } // assign 4-momenta to valence quarks inside B meson in B rest frame double phi = EvtRandom::Flat( EvtConst::twoPi ); --- 312,337 ---- ybox = EvtRandom::Flat(_dGdsdupProbMax); ! double prob = _calcprob->dGdsdupProb(mb, _ms, ml, s, u); ! if ( !(prob>=0.0) && !(prob<=0.0)) { ! report(INFO,"EvtGen") << "nan from dGdsProb " << prob << " " << mb << " " << _ms << " " << ml << " " << s << " " << u << std::endl; ! } if (prob > _dGdsdupProbMax && nmsg < 20) { report(INFO,"EvtGen") << "d2gdsdup GT d2gdsdup_max:" << prob << " " << _dGdsdupProbMax ! << " for s = " << s << " u = " << u << " mb = " << mb << endl; ! nmsg++; } if (ybox < prob) ! { ! tmp = 1.0; ! // cout << "dGdsdupProb(s) = " << prob ! // << " for u = " << u << endl; ! } } + // assign 4-momenta to valence quarks inside B meson in B rest frame double phi = EvtRandom::Flat( EvtConst::twoPi ); *************** *** 323,329 **** // // p4B = boostTo(p4B, p4b); // ! // report(INFO,"EvtGen") << " B meson mass in b-quark rest frame = " << p4B.mass() << std::endl; // boost s, l+ and l- to B meson rest frame --- 353,359 ---- // // p4B = boostTo(p4B, p4b); // ! // cout << " B meson mass in b-quark rest frame = " << p4B.mass() << endl; // boost s, l+ and l- to B meson rest frame *************** *** 337,350 **** // spectator quark in B meson rest frame ! EvtVector4R p4q( sqrt(pb*pb + mq*mq), -p4b.get(1), -p4b.get(2), -p4b.get(3) ); // hadron system in B meson rest frame p4xhadron = p4s + p4q; xhadronMass = p4xhadron.mass(); ! // report(INFO,"EvtGen") << "Xs mass = " << xhadronMass << " trial " << im << std::endl; } // initialize the decay products --- 367,380 ---- // spectator quark in B meson rest frame ! EvtVector4R p4q( sqrt(pb*pb + _mq*_mq), -p4b.get(1), -p4b.get(2), -p4b.get(3) ); // hadron system in B meson rest frame p4xhadron = p4s + p4q; xhadronMass = p4xhadron.mass(); ! // cout << "Xs mass = " << xhadronMass << " trial " << im << endl; } // initialize the decay products Index: Class/EvtBtoXsllUtil.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtBtoXsllUtil.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtBtoXsllUtil.cc 7 Oct 2003 02:48:13 -0000 1.1.1.1 --- Class/EvtBtoXsllUtil.cc 12 Jan 2006 16:14:27 -0000 1.2 *************** *** 1,8 **** //-------------------------------------------------------------------------- // - // - // Copyright Information: See EvtGen/COPYRIGHT - // // Environment: // This software is part of the EvtGen package developed jointly // for the BaBar and CLEO collaborations. If you use all or part --- 1,5 ---- *************** *** 15,27 **** // F.Kruger and L.M.Sehgal, Phys. Lett. B380, 199 (1996) // and then generates the two lepton momenta according to // A.Ali, G.Hiller, L.T.Handoko and T.Morozumi, Phys. Rev. D55, 4105 (1997). // The resultant Xs particles may be decayed by JETSET. // // Modification history: // ! // Stephane Willocq Jan 19, 2001 Module created //------------------------------------------------------------------------ // extern "C" double ddilog_(const double & sh); // #include --- 12,33 ---- // F.Kruger and L.M.Sehgal, Phys. Lett. B380, 199 (1996) // and then generates the two lepton momenta according to // A.Ali, G.Hiller, L.T.Handoko and T.Morozumi, Phys. Rev. D55, 4105 (1997). + // Expressions for Wilson coefficients and power corrections are taken + // from A.Ali, E.Lunghi, C.Greub and G.Hiller, Phys. Rev. D66, 034002 (2002). + // Detailed formulae for shat dependence of these coefficients are taken + // from H.H.Asatryan, H.M.Asatrian, C.Greub and M.Walker, PRD65, 074004 (2002) + // and C.Bobeth, M.Misiak and J.Urban, Nucl. Phys. B574, 291 (2000). // The resultant Xs particles may be decayed by JETSET. // // Modification history: // ! // Stephane Willocq Jan 19, 2001 Module created ! // Stephane Willocq Nov 6, 2003 Update Wilson Coeffs & dG's ! // &Jeff Berryhill ! // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" extern "C" double ddilog_(const double & sh); // #include *************** *** 31,160 **** #include "EvtGenBase/EvtPDL.hh" #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtBtoXsllUtil.hh" - #include #include "EvtGenBase/EvtComplex.hh" #include "EvtGenBase/EvtConst.hh" ! EvtComplex EvtBtoXsllUtil::coeff9(double mb, double sh) { ! // Compute the complex effective Wilson coefficient c9 ! // First set the value of Wilson coefficients that do not depend ! // on the scaled dilepton invariant mass sh ! // These numbers and the following expressions can be found in ! // A.Ali and G.Hiller, Phys. Rev. D58, 074001 (1998) ! ! double c1 = -0.240; ! double c2 = 1.103; ! double c3 = 0.011; ! double c4 = -0.025; ! double c5 = 0.007; ! double c6 = -0.030; ! double c9ndr = 4.153; ! ! double mu = 4.8; // energy scale in GeV ! double mc = 1.4; // charm-quark mass in GeV ! double lambda_msbar = 0.225; ! double beta0 = 23.0 / 3.0; ! double beta1 = 116.0 / 3.0; ! ! double hlog = log(pow(mu/lambda_msbar,2)); ! double alpha_s_mu = 4.0*EvtConst::pi*(1.0-(beta1/(beta0*beta0)) ! *(log(hlog)/hlog)) / (beta0*hlog); ! double zh = mc/mb; ! double omesh = - 2.0/9.0*EvtConst::pi*EvtConst::pi - 4.0/3.0*ddilog_(sh) ! - 2.0/3.0*log(sh)*log(1.0-sh) ! - (5.0+4.0*sh)/(3.0*(1.0+2.0*sh)) * log(1.0-sh) ! - 2.0*sh*(1.0+sh)*(1.0-2.0*sh) ! /(3.0*pow(1.0-sh,2)*(1.0+2.0*sh)) * log(sh) ! + (5.0+9.0*sh-6.0*sh*sh)/(6.0*(1.0-sh)*(1.0+2.0*sh)); ! double etash = 1.0 + alpha_s_mu*omesh/EvtConst::pi; ! double y = 4.*zh*zh/sh; ! double tmp1 = sqrt(std::fabs(1.0-y)); ! double tmp2 = 2.0/9.0*(2.0+y)*tmp1; ! ! double gRe, gIm; ! if (y <= 1.0) ! { ! gRe = -8./9.*log(mb/mu)-8./9.*log(zh)+8./27.+4./9.*y ! -tmp2*log(std::fabs((tmp1+1.)/(tmp1-1.))); ! gIm = tmp2*EvtConst::pi; } else { ! gRe = -8./9.*log(mb/mu)-8./9.*log(zh)+8./27.+4./9.*y ! -tmp2*2.*atan(1./tmp1); ! gIm = 0.; ! } ! EvtComplex gmcsh(gRe,gIm); ! ! y = 4./sh; ! tmp1 = sqrt(std::fabs(1.-y)); ! tmp2 = 2./9.*(2.+y)*tmp1; ! if (y < 1.0) ! { ! gRe = -8./9.*log(mb/mu)+8./27.+4./9.*y ! -tmp2*log(std::fabs((tmp1+1.)/(tmp1-1.))); ! gIm = tmp2*EvtConst::pi; } else { ! gRe = -8./9.*log(mb/mu)+8./27.+4./9.*y ! -tmp2*2.*atan(1./tmp1); ! gIm = 0.; } - EvtComplex g1sh(gRe,gIm); ! EvtComplex g0sh(8./27.-8./9.*log(mb/mu)-4./9.*log(sh), 4./9.*EvtConst::pi); ! EvtComplex z1(c9ndr*etash, 0.); ! EvtComplex z2(3.*c1 + c2 + 3.*c3 + c4 + 3.*c5 + c6, 0.); ! EvtComplex z3( 4.*c3 + 4.*c4 + 3.*c5 + c6, 0.); ! EvtComplex z4( c3 + 3.*c4, 0.); ! EvtComplex z5( 3.*c3 + c4 + 3.*c5 + c6, 0.); ! EvtComplex coeff; ! coeff = z1 + gmcsh*z2 - 0.5*g1sh*z3 - 0.5*g0sh*z4 + (2./9.)*z5; ! return coeff; } double EvtBtoXsllUtil::dGdsProb(double mb, double ms, double ml, double s) { // Compute the decay probability density function given a value of s ! // according to Ali's paper ! double c7eff = -0.311; ! double c10 = -4.546; double delta, lambda, prob; double f1, f2, f3, f4; double msh, mlh, sh; mlh = ml / mb; msh = ms / mb; ! sh = s / (mb*mb); ! ! lambda = 1.0 + sh*sh + pow(msh,4) - 2.0*(sh + sh*msh*msh + msh*msh); ! ! f1 = pow(1.0-msh*msh,2) - sh*(1.0 + msh*msh); ! f2 = 2.0*(1.0 + msh*msh) * pow(1.0-msh*msh,2) ! - sh*(1.0 + 14.0*msh*msh + pow(msh,4)) - sh*sh*(1.0 + msh*msh); ! f3 = pow(1.0-msh*msh,2) + sh*(1.0 + msh*msh) - 2.0*sh*sh ! + lambda*2.0*mlh*mlh/sh; ! f4 = 1.0 - sh + msh*msh; ! EvtComplex c9eff = coeff9(mb, sh); ! delta = ( 12.0*c7eff*real(c9eff)*f1 ! + 4.0*c7eff*c7eff*f2/sh ) * (1.0 + 2.0*mlh*mlh/sh) ! + (pow(abs(c9eff),2) + c10*c10)*f3 ! + 6.0*mlh*mlh*(pow(abs(c9eff),2) - c10*c10)*f4; ! prob = sqrt(lambda*(1.0 - 4.0*mlh*mlh/sh)) * delta; return prob; } --- 37,509 ---- #include "EvtGenBase/EvtPDL.hh" #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtBtoXsllUtil.hh" #include "EvtGenBase/EvtComplex.hh" #include "EvtGenBase/EvtConst.hh" ! EvtComplex EvtBtoXsllUtil::GetC7Eff0(double sh, bool nnlo) { ! // This function returns the zeroth-order alpha_s part of C7 ! if (!nnlo) return -0.313; ! ! double A7; ! // use energy scale of 2.5 GeV as a computational trick (G.Hiller) ! // at least for shat > 0.25 ! A7 = -0.353 + 0.023; ! ! EvtComplex c7eff; ! if (sh > 0.25) ! { ! c7eff = A7; ! return c7eff; } + + // change energy scale to 5.0 for full NNLO calculation below shat = 0.25 + A7 = -0.312 + 0.008; + c7eff = A7; + + return c7eff; + } + + EvtComplex EvtBtoXsllUtil::GetC7Eff1(double sh, double mbeff, bool nnlo) + { + // This function returns the first-order alpha_s part of C7 + + if (!nnlo) return 0.0; + double logsh; + logsh = log(sh); + + EvtComplex uniti(0.0,1.0); + + EvtComplex c7eff = 0.0; + if (sh > 0.25) + { + return c7eff; + } + + // change energy scale to 5.0 for full NNLO calculation below shat = 0.25 + double muscale = 5.0; + double alphas = 0.215; + //double A7 = -0.312 + 0.008; + double A8 = -0.148; + //double A9 = 4.174 + (-0.035); + //double A10 = -4.592 + 0.379; + double C1 = -0.487; + double C2 = 1.024; + //double T9 = 0.374 + 0.252; + //double U9 = 0.033 + 0.015; + //double W9 = 0.032 + 0.012; + double Lmu = log(muscale/mbeff); + + EvtComplex F71; + EvtComplex f71; + EvtComplex k7100(-0.68192,-0.074998); + EvtComplex k7101(0.0,0.0); + EvtComplex k7110(-0.23935,-0.12289); + EvtComplex k7111(0.0027424,0.019676); + EvtComplex k7120(-0.0018555,-0.175); + EvtComplex k7121(0.022864,0.011456); + EvtComplex k7130(0.28248,-0.12783); + EvtComplex k7131(0.029027,-0.0082265); + f71 = k7100 + k7101*logsh + sh*(k7110 + k7111*logsh) + + sh*sh*(k7120 + k7121*logsh) + + sh*sh*sh*(k7130 + k7131*logsh); + F71 = (-208.0/243.0)*Lmu + f71; + + EvtComplex F72; + EvtComplex f72; + EvtComplex k7200(4.0915,0.44999); + EvtComplex k7201(0.0,0.0); + EvtComplex k7210(1.4361,0.73732); + EvtComplex k7211(-0.016454,-0.11806); + EvtComplex k7220(0.011133,1.05); + EvtComplex k7221(-0.13718,-0.068733); + EvtComplex k7230(-1.6949,0.76698); + EvtComplex k7231(-0.17416,0.049359); + f72 = k7200 + k7201*logsh + sh*(k7210 + k7211*logsh) + + sh*sh*(k7220 + k7221*logsh) + + sh*sh*sh*(k7230 + k7231*logsh); + F72 = (416.0/81.0)*Lmu + f72; + + EvtComplex F78; + F78 = (-32.0/9.0)*Lmu + 8.0*EvtConst::pi*EvtConst::pi/27.0 + (-44.0/9.0) + + (-8.0*EvtConst::pi/9.0)*uniti + + (4.0/3.0*EvtConst::pi*EvtConst::pi - 40.0/3.0)*sh + + (32.0*EvtConst::pi*EvtConst::pi/9.0 - 316.0/9.0)*sh*sh + + (200.0*EvtConst::pi*EvtConst::pi/27.0 - 658.0/9.0)*sh*sh*sh + + (-8.0*logsh/9.0)*(sh + sh*sh + sh*sh*sh); + + c7eff = - alphas/(4.0*EvtConst::pi)*(C1*F71 + C2*F72 + A8*F78); + + return c7eff; + } + + + EvtComplex EvtBtoXsllUtil::GetC9Eff0(double sh, double mbeff, + bool nnlo, bool btod) + { + // This function returns the zeroth-order alpha_s part of C9 + + if (!nnlo) return 4.344; + double logsh; + logsh = log(sh); + double mch = 0.29; + + + double muscale; + muscale = 2.5; + double alphas; + alphas = 0.267; + double A8; + A8 = -0.164; + double A9; + A9 = 4.287 + (-0.218); + double A10; + A10 = -4.592 + 0.379; + double C1; + C1 = -0.697; + double C2; + C2 = 1.046; + double T9; + T9 = 0.114 + 0.280; + double U9; + U9 = 0.045 + 0.023; + double W9; + W9 = 0.044 + 0.016; + + double Lmu; + Lmu = log(muscale/mbeff); + + + EvtComplex uniti(0.0,1.0); + + EvtComplex hc; + double xarg; + xarg = 4.0*mch/sh; + + hc = -4.0/9.0*log(mch*mch) + 8.0/27.0 + 4.0*xarg/9.0; + if (xarg < 1.0) + { + hc = hc - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* + (log((sqrt(1.0 - xarg)+1.0)/(sqrt(1.0 - xarg) - 1.0)) - + uniti*EvtConst::pi); + } else { ! hc = hc - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* ! 2.0*atan(1.0/sqrt(xarg-1.0)); } + + EvtComplex h1; + xarg = 4.0/sh; + h1 = 8.0/27.0 + 4.0*xarg/9.0; + if (xarg < 1.0) + { + h1 = h1 - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* + (log((sqrt(1.0 - xarg)+1.0)/(sqrt(1.0 - xarg) - 1.0)) - + uniti*EvtConst::pi); + } else { ! h1 = h1 - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* ! 2.0*atan(1.0/sqrt(xarg-1.0)); ! } ! ! EvtComplex h0; ! h0 = 8.0/27.0 - 4.0*log(2.0)/9.0 + 4.0*uniti*EvtConst::pi/9.0; ! ! ! // X=V_{ud}^* V_ub / V_{td}^* V_tb * (4/3 C_1 +C_2) * (h(\hat m_c^2, hat s)- ! // h(\hat m_u^2, hat s)) ! EvtComplex Vudstar(1.0 - 0.2279*0.2279/2.0, 0.0); ! EvtComplex Vub((0.118+0.273)/2.0, -1.0*(0.305+0.393)/2.0); ! EvtComplex Vtdstar(1.0 - (0.118+0.273)/2.0,(0.305+0.393)/2.0); ! EvtComplex Vtb(1.0,0.0); ! ! EvtComplex Xd; ! Xd = (Vudstar * Vub / Vtdstar * Vtb) * (4.0/3.0*C1 + C2) * (hc - h0); ! ! EvtComplex c9eff = 4.344; ! if (sh > 0.25) ! { ! c9eff = A9 + T9*hc + U9*h1 + W9*h0; ! if (btod) ! { ! c9eff += Xd; ! } ! return c9eff; ! } ! ! // change energy scale to 5.0 for full NNLO calculation below shat = 0.25 ! muscale = 5.0; ! alphas = 0.215; ! A9 = 4.174 + (-0.035); ! C1 = -0.487; ! C2 = 1.024; ! A8 = -0.148; ! T9 = 0.374 + 0.252; ! U9 = 0.033 + 0.015; ! W9 = 0.032 + 0.012; ! Lmu = log(muscale/mbeff); ! ! Xd = (Vudstar * Vub / Vtdstar * Vtb) * (4.0/3.0*C1 + C2) * (hc - h0); ! ! c9eff = A9 + T9*hc + U9*h1 + W9*h0; ! ! if (btod) ! { ! c9eff += Xd; } ! return c9eff; ! } ! ! EvtComplex EvtBtoXsllUtil::GetC9Eff1(double sh, double mbeff, ! bool nnlo, bool btod) ! { ! // This function returns the first-order alpha_s part of C9 ! ! if (!nnlo) return 0.0; ! double logsh; ! logsh = log(sh); ! double mch = 0.29; ! ! EvtComplex uniti(0.0,1.0); ! ! EvtComplex c9eff = 0.0; ! if (sh > 0.25) ! { ! return c9eff; ! } ! ! // change energy scale to 5.0 for full NNLO calculation below shat = 0.25 ! double muscale = 5.0; ! double alphas = 0.215; ! double C1 = -0.487; ! double C2 = 1.024; ! double A8 = -0.148; ! double Lmu = log(muscale/mbeff); ! ! EvtComplex F91; ! EvtComplex f91; ! EvtComplex k9100(-11.973,0.16371); ! EvtComplex k9101(-0.081271,-0.059691); ! EvtComplex k9110(-28.432,-0.25044); ! EvtComplex k9111(-0.040243,0.016442); ! EvtComplex k9120(-57.114,-0.86486); ! EvtComplex k9121(-0.035191,0.027909); ! EvtComplex k9130(-128.8,-2.5243); ! EvtComplex k9131(-0.017587,0.050639); ! f91 = k9100 + k9101*logsh + sh*(k9110 + k9111*logsh) + ! sh*sh*(k9120 + k9121*logsh) + ! sh*sh*sh*(k9130 + k9131*logsh); ! F91 = (-1424.0/729.0 + 16.0*uniti*EvtConst::pi/243.0 ! + 64.0/27.0*log(mch))*Lmu - 16.0*Lmu*logsh/243.0 + ! (16.0/1215.0 - 32.0/135.0/mch/mch)*Lmu*sh + ! (4.0/2835.0 - 8.0/315.0/mch/mch/mch/mch)*Lmu*sh*sh + ! (16.0/76545.0 - 32.0/8505.0/mch/mch/mch/mch/mch/mch)* ! Lmu*sh*sh*sh -256.0*Lmu*Lmu/243.0 + f91; ! ! EvtComplex F92; ! EvtComplex f92; ! EvtComplex k9200(6.6338,-0.98225); ! EvtComplex k9201(0.48763,0.35815); ! EvtComplex k9210(3.3585,1.5026); ! EvtComplex k9211(0.24146,-0.098649); ! EvtComplex k9220(-1.1906,5.1892); ! EvtComplex k9221(0.21115,-0.16745); ! EvtComplex k9230(-17.12,15.146); ! EvtComplex k9231(0.10552,-0.30383); ! f92 = k9200 + k9201*logsh + sh*(k9210 + k9211*logsh) + ! sh*sh*(k9220 + k9221*logsh) + ! sh*sh*sh*(k9230 + k9231*logsh); ! F92 = (256.0/243.0 - 32.0*uniti*EvtConst::pi/81.0 ! - 128.0/9.0*log(mch))*Lmu + 32.0*Lmu*logsh/81.0 + ! (-32.0/405.0 + 64.0/45.0/mch/mch)*Lmu*sh + ! (-8.0/945.0 + 16.0/105.0/mch/mch/mch/mch)*Lmu*sh*sh + ! (-32.0/25515.0 + 64.0/2835.0/mch/mch/mch/mch/mch/mch)* ! Lmu*sh*sh*sh + 512.0*Lmu*Lmu/81.0 + f92; ! ! EvtComplex F98; ! F98 = 104.0/9.0 - 32.0*EvtConst::pi*EvtConst::pi/27.0 + ! (1184.0/27.0 - 40.0*EvtConst::pi*EvtConst::pi/9.0)*sh + ! (14212.0/135.0 - 32.0*EvtConst::pi*EvtConst::pi/3.0)*sh*sh + ! (193444.0/945.0 - 560.0*EvtConst::pi*EvtConst::pi/27.0)*sh*sh*sh + ! 16.0*logsh/9.0*(1.0 + sh + sh*sh + sh*sh*sh); ! ! c9eff = - alphas/(4.0*EvtConst::pi)*(C1*F91 + C2*F92 + A8*F98); ! ! return c9eff; ! } ! EvtComplex EvtBtoXsllUtil::GetC10Eff(double sh, bool nnlo) ! { ! ! if (!nnlo) return -4.669; ! double A10; ! A10 = -4.592 + 0.379; ! EvtComplex c10eff; ! c10eff = A10; ! return c10eff; } double EvtBtoXsllUtil::dGdsProb(double mb, double ms, double ml, double s) { // Compute the decay probability density function given a value of s ! // according to Ali-Lunghi-Greub-Hiller's 2002 paper ! // Note that the form given below is taken from ! // F.Kruger and L.M.Sehgal, Phys. Lett. B380, 199 (1996) ! // but the differential rate as a function of dilepton mass ! // in this latter paper reduces to Eq.(12) in ALGH's 2002 paper ! // for ml = 0 and ms = 0. ! bool btod = false; ! bool nnlo = true; double delta, lambda, prob; double f1, f2, f3, f4; double msh, mlh, sh; + double mbeff = 4.8; mlh = ml / mb; msh = ms / mb; ! // set lepton and strange-quark masses to 0 if need to ! // be in strict agreement with ALGH 2002 paper ! // mlh = 0.0; msh = 0.0; ! // sh = s / (mb*mb); ! sh = s / (mbeff*mbeff); ! ! // if sh >1.0 code will return a nan. so just skip it ! if ( sh > 1.0 ) return 0.0; ! ! ! EvtComplex c7eff0 = EvtBtoXsllUtil::GetC7Eff0(sh,nnlo); ! EvtComplex c7eff1 = EvtBtoXsllUtil::GetC7Eff1(sh,mbeff,nnlo); ! EvtComplex c9eff0 = EvtBtoXsllUtil::GetC9Eff0(sh,mbeff,nnlo,btod); ! EvtComplex c9eff1 = EvtBtoXsllUtil::GetC9Eff1(sh,mbeff,nnlo,btod); ! EvtComplex c10eff = EvtBtoXsllUtil::GetC10Eff(sh,nnlo); ! ! double alphas = 0.119/ ! (1 + 0.119*log(pow(4.8,2)/pow(91.1867,2))*23.0/12.0/EvtConst::pi); ! ! double omega7 = -8.0/3.0*log(4.8/mb) ! -4.0/3.0*ddilog_(sh) ! -2.0/9.0*EvtConst::pi*EvtConst::pi ! -2.0/3.0*log(sh)*log(1.0-sh) ! -log(1-sh)*(8.0+sh)/(2.0+sh)/3.0 ! -2.0/3.0*sh*(2.0 - 2.0*sh - sh*sh)*log(sh)/pow((1.0 - sh),2)/(2.0 + sh) ! -(16.0 - 11.0*sh - 17.0*sh*sh)/18.0/(2.0 + sh)/(1.0 - sh); ! double eta7 = 1.0 + alphas*omega7/EvtConst::pi; ! ! double omega79 = -4.0/3.0*log(4.8/mb) ! -4.0/3.0*ddilog_(sh) ! -2.0/9.0*EvtConst::pi*EvtConst::pi ! -2.0/3.0*log(sh)*log(1.0-sh) ! -1.0/9.0*(2.0+7.0*sh)*log(1.0 - sh)/sh ! -2.0/9.0*sh*(3.0 - 2.0*sh)*log(sh)/pow((1.0 - sh),2) ! +1.0/18.0*(5.0 - 9.0*sh)/(1.0 - sh); ! double eta79 = 1.0 + alphas*omega79/EvtConst::pi; ! double omega9 = -2.0/9.0*EvtConst::pi*EvtConst::pi - 4.0/3.0*ddilog_(sh) ! - 2.0/3.0*log(sh)*log(1.0-sh) ! - (5.0+4.0*sh)/(3.0*(1.0+2.0*sh)) * log(1.0-sh) ! - 2.0*sh*(1.0+sh)*(1.0-2.0*sh) ! /(3.0*pow(1.0-sh,2)*(1.0+2.0*sh)) * log(sh) ! + (5.0+9.0*sh-6.0*sh*sh)/(6.0*(1.0-sh)*(1.0+2.0*sh)); ! double eta9 = 1.0 + alphas*omega9/EvtConst::pi; ! EvtComplex c7eff = eta7*c7eff0 + c7eff1; ! EvtComplex c9eff = eta9*c9eff0 + c9eff1; ! c10eff *= eta9; ! ! double c7c7 = abs2(c7eff); ! double c7c9 = real((eta79*c7eff0 + c7eff1)*conj(eta79*c9eff0 + c9eff1)); ! double c9c9plusc10c10 = abs2(c9eff) + abs2(c10eff); ! double c9c9minusc10c10 = abs2(c9eff) - abs2(c10eff); ! ! // Power corrections according to ALGH 2002 ! double lambda_1 = -0.2; ! double lambda_2 = 0.12; ! double C1 = -0.487; ! double C2 = 1.024; ! double mc = 0.29 * mb; ! ! EvtComplex F; ! double r = s / (4.0 * mc * mc); ! EvtComplex uniti(0.0,1.0); ! F = 3.0 / (2.0 * r); ! if (r < 1) ! { ! F *= 1.0/sqrt(r*(1.0-r))*atan(sqrt(r/(1.0-r)))-1.0; ! } ! else ! { ! F *= 0.5/sqrt(r*(r-1.0))*(log((1.0-sqrt(1.0-1.0/r))/(1.0+sqrt(1.0-1.0/r))) ! +uniti*EvtConst::pi)-1.0; ! } ! double G1 = 1.0 + lambda_1 / (2.0 * mb * mb) ! + 3.0 * (1.0 - 15.0*sh*sh + 10.0*sh*sh*sh) ! / ((1.0 - sh)*(1.0 -sh)*(1.0 + 2.0*sh)) ! * lambda_2 / (2.0*mb*mb); ! double G2 = 1.0 + lambda_1 / (2.0 * mb * mb) ! - 3.0 * (6.0 + 3.0*sh - 5.0*sh*sh*sh) ! / ((1.0 - sh)*(1.0 -sh)*(2.0 + sh)) ! * lambda_2 / (2.0*mb*mb); ! double G3 = 1.0 + lambda_1 / (2.0 * mb * mb) ! - (5.0 + 6.0*sh - 7.0*sh*sh) ! / ((1.0 - sh)*(1.0 -sh)) ! * lambda_2 / (2.0*mb*mb); ! double Gc = -8.0/9.0 * (C2 - C1/6.0) * lambda_2/(mc*mc) ! * real(F*(conj(c9eff)*(2.0+sh)+conj(c7eff)*(1.0 + 6.0*sh - sh*sh)/sh)); ! ! // end of power corrections section ! // now back to Kruger & Sehgal expressions ! ! double msh2=msh*msh; ! lambda = 1.0 + sh*sh + msh2*msh2 - 2.0*(sh + sh*msh2 + msh2); ! // negative lambda screw up sqrt below! ! if ( lambda < 0.0 ) return 0.0; ! ! f1 = pow(1.0-msh2,2) - sh*(1.0 + msh2); ! f2 = 2.0*(1.0 + msh2) * pow(1.0-msh2,2) ! - sh*(1.0 + 14.0*msh2 + pow(msh,4)) - sh*sh*(1.0 + msh2); ! f3 = pow(1.0-msh2,2) + sh*(1.0 + msh2) - 2.0*sh*sh ! + lambda*2.0*mlh*mlh/sh; ! f4 = 1.0 - sh + msh2; + delta = ( 12.0*c7c9*f1*G3 + 4.0*c7c7*f2*G2/sh ) * (1.0 + 2.0*mlh*mlh/sh) + + c9c9plusc10c10*f3*G1 + + 6.0*mlh*mlh*c9c9minusc10c10*f4 + + Gc; + + // avoid negative probs + if ( delta < 0.0 ) delta=0.; + // negative when sh < 4*mlh*mlh + // s < 4*ml*ml + /// prob = sqrt(lambda*(1.0 - 4.0*mlh*mlh/sh)) * delta; + prob = sqrt(lambda*(1.0 - 4.0*ml*ml/s)) * delta; + + // if ( !(prob>=0.0) && !(prob<=0.0) ) { + //nan + // std::cout << lambda << " " << mlh << " " << sh << " " << delta << " " << mb << " " << mbeff << std::endl; + // std::cout << 4.0*mlh*mlh/sh << " " << 4.0*ml*ml/s << " " << s-4.0*ml*ml << " " << ml << std::endl; + // std::cout << sh << " " << sh*sh << " " << msh2*msh2 << " " << msh << std::endl; + //std::cout << ( 12.0*c7c9*f1*G3 + 4.0*c7c7*f2*G2/sh ) * (1.0 + 2.0*mlh*mlh/sh) + // <<" " << c9c9plusc10c10*f3*G1 + // << " "<< 6.0*mlh*mlh*c9c9minusc10c10*f4 + // << " "<< Gc << std::endl; + //std::cout << C2 << " " << C1 << " "<< lambda_2 << " " << mc << " " << real(F*(conj(c9eff)*(2.0+sh)+conj(c7eff)*(1.0 + 6.0*sh - sh*sh)/sh)) << " " << sh << " " << r << std::endl; + //std::cout << c9eff << " " << eta9 << " " < 1.0) std::cout << "not a nan \n"; + // } return prob; } *************** *** 162,195 **** double s, double u) { // Compute the decay probability density function given a value of s and u ! // according to Ali's paper ! double c7eff = -0.311; ! double c10 = -4.546; ! double prob, prob_max; double f1sp, f2sp, f3sp; ! double u_ext; ! double sh = s / (mb*mb); ! EvtComplex c9eff = coeff9(mb, sh); ! f1sp = ( pow(mb*mb-ms*ms,2) - s*s) * ( pow(abs(c9eff),2) + c10*c10 ) + 4.0*( pow(mb,4) - ms*ms*mb*mb - pow(ms,4)*(1.0 - ms*ms/(mb*mb)) ! - 8.0*s*ms*ms - s*s*(1.0 + ms*ms/(mb*mb) ))*mb*mb*c7eff*c7eff/s // kludged mass term *(1.0 + 2.0*ml*ml/s) ! - 8.0*(s*(mb*mb + ms*ms) - pow(mb*mb-ms*ms,2)) * c7eff * real(c9eff) // kludged mass term *(1.0 + 2.0*ml*ml/s); ! f2sp = 4.0*s*real(c9eff)*c10 + 8.0*(mb*mb + ms*ms)*c10*c7eff; ! f3sp = - (pow(abs(c9eff),2) + c10*c10) ! + 4.0*(1.0 + pow(ms/mb,4)) * mb*mb*c7eff*c7eff/s // kludged mass term *(1.0 + 2.0*ml*ml/s); prob = (f1sp + f2sp*u + f3sp*u*u)/ pow(mb,3); return prob; } --- 511,596 ---- double s, double u) { // Compute the decay probability density function given a value of s and u ! // according to Ali-Hiller-Handoko-Morozumi's 1997 paper ! // see Appendix E ! bool btod = false; ! bool nnlo = true; ! double prob; double f1sp, f2sp, f3sp; ! //double u_ext; ! double mbeff = 4.8; ! ! // double sh = s / (mb*mb); ! double sh = s / (mbeff*mbeff); ! ! // if sh >1.0 code will return a nan. so just skip it ! if ( sh > 1.0 ) return 0.0; ! EvtComplex c7eff0 = EvtBtoXsllUtil::GetC7Eff0(sh,nnlo); ! EvtComplex c7eff1 = EvtBtoXsllUtil::GetC7Eff1(sh,mbeff,nnlo); ! EvtComplex c9eff0 = EvtBtoXsllUtil::GetC9Eff0(sh,mbeff,nnlo,btod); ! EvtComplex c9eff1 = EvtBtoXsllUtil::GetC9Eff1(sh,mbeff,nnlo,btod); ! EvtComplex c10eff = EvtBtoXsllUtil::GetC10Eff(sh,nnlo); ! ! double alphas = 0.119/ ! (1 + 0.119*log(pow(4.8,2)/pow(91.1867,2))*23.0/12.0/EvtConst::pi); ! ! double omega7 = -8.0/3.0*log(4.8/mb) ! -4.0/3.0*ddilog_(sh) ! -2.0/9.0*EvtConst::pi*EvtConst::pi ! -2.0/3.0*log(sh)*log(1.0-sh) ! -log(1-sh)*(8.0+sh)/(2.0+sh)/3.0 ! -2.0/3.0*sh*(2.0 - 2.0*sh - sh*sh)*log(sh)/pow((1.0 - sh),2)/(2.0 + sh) ! -(16.0 - 11.0*sh - 17.0*sh*sh)/18.0/(2.0 + sh)/(1.0 - sh); ! double eta7 = 1.0 + alphas*omega7/EvtConst::pi; ! ! double omega79 = -4.0/3.0*log(4.8/mb) ! -4.0/3.0*ddilog_(sh) ! -2.0/9.0*EvtConst::pi*EvtConst::pi ! -2.0/3.0*log(sh)*log(1.0-sh) ! -1.0/9.0*(2.0+7.0*sh)*log(1.0 - sh)/sh ! -2.0/9.0*sh*(3.0 - 2.0*sh)*log(sh)/pow((1.0 - sh),2) ! +1.0/18.0*(5.0 - 9.0*sh)/(1.0 - sh); ! double eta79 = 1.0 + alphas*omega79/EvtConst::pi; ! double omega9 = - 2.0/9.0*EvtConst::pi*EvtConst::pi - 4.0/3.0*ddilog_(sh) ! - 2.0/3.0*log(sh)*log(1.0-sh) ! - (5.0+4.0*sh)/(3.0*(1.0+2.0*sh)) * log(1.0-sh) ! - 2.0*sh*(1.0+sh)*(1.0-2.0*sh) ! /(3.0*pow(1.0-sh,2)*(1.0+2.0*sh)) * log(sh) ! + (5.0+9.0*sh-6.0*sh*sh)/(6.0*(1.0-sh)*(1.0+2.0*sh)); ! double eta9 = 1.0 + alphas*omega9/EvtConst::pi; ! ! EvtComplex c7eff = eta7*c7eff0 + c7eff1; ! EvtComplex c9eff = eta9*c9eff0 + c9eff1; ! c10eff *= eta9; ! ! double c7c7 = abs2(c7eff); ! double c7c9 = real((eta79*c7eff0 + c7eff1)*conj(eta79*c9eff0 + c9eff1)); ! double c7c10 = real((eta79*c7eff0 + c7eff1)*conj(eta9*c10eff)); ! double c9c10 = real((eta9*c9eff0 + c9eff1)*conj(eta9*c10eff)); ! double c9c9plusc10c10 = abs2(c9eff) + abs2(c10eff); ! //double c9c9minusc10c10 = abs2(c9eff) - abs2(c10eff); ! ! f1sp = ( pow(mb*mb-ms*ms,2) - s*s) * c9c9plusc10c10 + 4.0*( pow(mb,4) - ms*ms*mb*mb - pow(ms,4)*(1.0 - ms*ms/(mb*mb)) ! - 8.0*s*ms*ms - s*s*(1.0 + ms*ms/(mb*mb) ))*mb*mb*c7c7/s // kludged mass term *(1.0 + 2.0*ml*ml/s) ! - 8.0*(s*(mb*mb + ms*ms) - pow(mb*mb-ms*ms,2)) * c7c9 // kludged mass term *(1.0 + 2.0*ml*ml/s); ! f2sp = 4.0*s*c9c10 + 8.0*(mb*mb + ms*ms)*c7c10; ! f3sp = - (c9c9plusc10c10) ! + 4.0*(1.0 + pow(ms/mb,4)) * mb*mb*c7c7/s // kludged mass term *(1.0 + 2.0*ml*ml/s); prob = (f1sp + f2sp*u + f3sp*u*u)/ pow(mb,3); + if ( prob < 0.0 ) prob=0.; return prob; } *************** *** 223,225 **** --- 624,627 ---- return prob; } + Index: Class/EvtCBTo3piMPP.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtCBTo3piMPP.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtCBTo3piMPP.cc 7 Oct 2003 02:48:13 -0000 1.1.1.1 --- Class/EvtCBTo3piMPP.cc 12 Jan 2006 16:14:27 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtCBTo3piP00.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtCBTo3piP00.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtCBTo3piP00.cc 7 Oct 2003 02:48:13 -0000 1.1.1.1 --- Class/EvtCBTo3piP00.cc 12 Jan 2006 16:14:27 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtDDalitz.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtDDalitz.cc,v retrieving revision 1.3 retrieving revision 1.8 diff -c -r1.3 -r1.8 *** Class/EvtDDalitz.cc 10 Dec 2003 01:35:32 -0000 1.3 --- Class/EvtDDalitz.cc 21 Mar 2008 20:11:39 -0000 1.8 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 25,33 **** --- 26,36 ---- #include "EvtGenBase/EvtReport.hh" #include "EvtGenBase/EvtResonance.hh" #include "EvtGenBase/EvtResonance2.hh" + #include "EvtGenBase/EvtFlatte.hh" #include "EvtGenModels/EvtDDalitz.hh" #include #include "EvtGenBase/EvtConst.hh" + using std::endl; EvtDDalitz::~EvtDDalitz() {} *************** *** 46,57 **** --- 49,63 ---- void EvtDDalitz::init(){ + // check that there are 0 arguments static EvtId DM=EvtPDL::getId("D-"); static EvtId DP=EvtPDL::getId("D+"); static EvtId D0=EvtPDL::getId("D0"); static EvtId D0B=EvtPDL::getId("anti-D0"); + static EvtId DSP=EvtPDL::getId("D_s+"); + static EvtId DSM=EvtPDL::getId("D_s-"); static EvtId KM=EvtPDL::getId("K-"); static EvtId KP=EvtPDL::getId("K+"); static EvtId K0=EvtPDL::getId("K0"); *************** *** 62,67 **** --- 68,76 ---- static EvtId PIP=EvtPDL::getId("pi+"); static EvtId PI0=EvtPDL::getId("pi0"); + static double MPI = EvtPDL::getMeanMass(PI0); + static double MKP = EvtPDL::getMeanMass(KP); + checkNArg(0); checkNDaug(3); *************** *** 85,105 **** if ( d3==KM && d1==PIP && d2==PI0 ) { _flag=4; _d1=2; _d2=0; _d3=1;} if ( d3==KM && d2==PIP && d1==PI0 ) { _flag=4; _d1=2; _d2=1; _d3=0;} ! if ( d1==KB && d2==PIP && d3==PIM ) { _flag=3; _d1=0; _d2=2; _d3=1;} if ( d1==KB && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=1; _d3=2;} if ( d2==KB && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;} if ( d2==KB && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;} if ( d3==KB && d1==PIP && d2==PIM ) { _flag=3; _d1=2; _d2=1; _d3=0;} if ( d3==KB && d2==PIP && d1==PIM ) { _flag=3; _d1=2; _d2=0; _d3=1;} ! if ( d1==KL && d2==PIP && d3==PIM ) { _flag=3; _d1=0; _d2=2; _d3=1;} if ( d1==KL && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=1; _d3=2;} if ( d2==KL && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;} if ( d2==KL && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;} if ( d3==KL && d1==PIP && d2==PIM ) { _flag=3; _d1=2; _d2=1; _d3=0;} if ( d3==KL && d2==PIP && d1==PIM ) { _flag=3; _d1=2; _d2=0; _d3=1;} ! if ( d1==KS && d2==PIP && d3==PIM ) { _flag=3; _d1=0; _d2=2; _d3=1;} if ( d1==KS && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=1; _d3=2;} if ( d2==KS && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;} if ( d2==KS && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;} --- 94,114 ---- if ( d3==KM && d1==PIP && d2==PI0 ) { _flag=4; _d1=2; _d2=0; _d3=1;} if ( d3==KM && d2==PIP && d1==PI0 ) { _flag=4; _d1=2; _d2=1; _d3=0;} ! if ( d1==KB && d2==PIP && d3==PIM ) { _flag=3; _d1=0; _d2=2; _d3=1;} if ( d1==KB && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=1; _d3=2;} if ( d2==KB && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;} if ( d2==KB && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;} if ( d3==KB && d1==PIP && d2==PIM ) { _flag=3; _d1=2; _d2=1; _d3=0;} if ( d3==KB && d2==PIP && d1==PIM ) { _flag=3; _d1=2; _d2=0; _d3=1;} ! if ( d1==KL && d2==PIP && d3==PIM ) { _flag=3; _d1=0; _d2=2; _d3=1;} if ( d1==KL && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=1; _d3=2;} if ( d2==KL && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;} if ( d2==KL && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;} if ( d3==KL && d1==PIP && d2==PIM ) { _flag=3; _d1=2; _d2=1; _d3=0;} if ( d3==KL && d2==PIP && d1==PIM ) { _flag=3; _d1=2; _d2=0; _d3=1;} ! if ( d1==KS && d2==PIP && d3==PIM ) { _flag=3; _d1=0; _d2=2; _d3=1;} if ( d1==KS && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=1; _d3=2;} if ( d2==KS && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;} if ( d2==KS && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;} *************** *** 192,200 **** if ( d2==KP && d1==PIM && d3==PIM ) { _flag=1; _d1=1; _d2=0; _d3=2;} if ( d3==KP && d1==PIM && d2==PIM ) { _flag=1; _d1=2; _d2=0; _d3=1;} } if ( _flag==0) { ! report(ERROR,"EvtGen") << "EvtDDaltiz: Invalid mode."< K0_bar pi+ pi- or charge conjugate - EvtResonance DK2piRes1(p4_p,moms1,moms2,2.31,109.0,0.0498,0.89610,1);//K*(892) - EvtResonance DK2piRes2(p4_p,moms3,moms2,1.59,-123.0,0.1491,0.7683,1);//RHO(770) - - amp = amp + DK2piRes1.resAmpl() + DK2piRes2.resAmpl(); } --- 302,368 ---- EvtResonance DplusKpipi0Res1(p4_p,moms2,moms3,1.00,0.00,0.1512,0.7699,1); //rho+ EvtResonance DplusKpipi0Res2(p4_p,moms3,moms1,0.8695,0.7191,0.0498,0.89159,1); //K*0 ! amp = 0.9522*EvtComplex(cos(-1.8565),sin(-1.8565)) + 1.00*DplusKpipi0Res1.relBrWig(0) + 0.8695*EvtComplex(cos(0.7191),sin(0.7191))*DplusKpipi0Res2.relBrWig(1); } if(_flag==3) { //know it's a D0 -> K0_bar pi+ pi- or charge conjugate + //PRD 73, 112009(2006) Belle + //for D0 particle 1: K particle 2: pi- particle 3: pi+ + //the right order is: (1,2), (1,3), (3,2) + + EvtResonance2 DK2piRes0(p4_p,moms3,moms2,1.00,0.0,0.1503,0.7758,1);//RHO(770) + EvtResonance2 DK2piRes1(p4_p,moms3,moms2,0.0314,110.8,0.00849,0.78259,1);//OMEGA + EvtResonance2 DK2piRes2(p4_p,moms3,moms2,0.365,201.9,0.044,0.980,0);//F_0(980) + EvtResonance2 DK2piRes3(p4_p,moms3,moms2,1.32,348,0.1851,1.2754,2);//F_2(1270) + EvtResonance2 DK2piRes4(p4_p,moms3,moms2,1.44,82.0,0.173,1.434,0);//F_0(1370) hep-ph 0009168 + EvtResonance2 DK2piRes5(p4_p,moms3,moms2,0.66,9,0.4000,1.465,1);//RHO(1450) + EvtResonance2 DK2piRes6(p4_p,moms3,moms2,1.43,212,0.454,0.519,0);//Sigma(600) + EvtResonance2 DK2piRes7(p4_p,moms3,moms2,0.23,237,0.101,1.050,0);//Sigma' + + EvtResonance2 DK2piRes8(p4_p,moms1,moms2,1.644,132.1,0.0508,0.89166,1);//K*(892)- + EvtResonance2 DK2piRes9(p4_p,moms1,moms2,0.61,113,0.232,1.414,1);//K*(1410)- + EvtResonance2 DK2piRes10(p4_p,moms1,moms2,2.15,353.6,0.294,1.412,0);//K*_0(1430)- + EvtResonance2 DK2piRes11(p4_p,moms1,moms2,0.88,318.7,0.0985,1.4256,2);//K*_2(1430)- + EvtResonance2 DK2piRes12(p4_p,moms1,moms2,1.39,103,0.322,1.717,1);//K*(1680)- + + EvtResonance2 DK2piRes13(p4_p,moms1,moms3,0.144,320.3,0.0508,0.89166,1);//K*(892)+ + EvtResonance2 DK2piRes14(p4_p,moms1,moms3,0.45,254,0.232,1.414,1);//K*(1410)+ + EvtResonance2 DK2piRes15(p4_p,moms1,moms3,0.47,88, 0.294,1.412,0);//K*_0(1430)+ + EvtResonance2 DK2piRes16(p4_p,moms1,moms3,0.25,265.0,0.0985,1.4256,2);//K*_2(1430)+ + EvtResonance2 DK2piRes17(p4_p,moms1,moms3,1.2,118,0.322,1.717,1);//K*(1680)+ + + EvtComplex Resonance[19]; + Resonance[0] = DK2piRes0.resAmpl(); + Resonance[1] = DK2piRes1.resAmpl(); + Resonance[2] = DK2piRes2.resAmpl(); + Resonance[3] = DK2piRes3.resAmpl(); + Resonance[4] = DK2piRes4.resAmpl(); + Resonance[5] = DK2piRes5.resAmpl(); + Resonance[6] = DK2piRes6.resAmpl(); + Resonance[7] = DK2piRes7.resAmpl(); + Resonance[8] = DK2piRes8.resAmpl(); + Resonance[9] = DK2piRes9.resAmpl(); + Resonance[10] = DK2piRes10.resAmpl(); + Resonance[11] = DK2piRes11.resAmpl(); + Resonance[12] = DK2piRes12.resAmpl(); + Resonance[13] = DK2piRes13.resAmpl(); + Resonance[14] = DK2piRes14.resAmpl(); + Resonance[15] = DK2piRes15.resAmpl(); + Resonance[16] = DK2piRes16.resAmpl(); + Resonance[17] = DK2piRes17.resAmpl(); + + double pi180inv = 1.0/EvtConst::radToDegrees; + Resonance[18] = EvtComplex(3.0*cos(164*pi180inv),3.0*sin(164*pi180inv)); + + amp = EvtComplex(0,0); + for(int i=0; i<19; i++) + { + amp += Resonance[i]; + } } *************** *** 307,312 **** --- 388,406 ---- + DKpipi0Res7.resAmpl(); } + + // Ds -> K K pi + if(_flag==5) { + EvtResonance2 DsKKpiRes1(p4_p, moms3, moms1, 1.0, 0.0, 0.0455, 0.8944, 1, true); // K*(892) + EvtResonance2 DsKKpiRes2(p4_p, moms3, moms1, 1.48, 138., 0.290, 1.414, 0); // K*_0(1430) + EvtFlatte DsKKpiRes3(p4_p, moms1, moms2, 5.07, 156., 0.965, _kkpi_params); // f_0(980) + EvtResonance2 DsKKpiRes4(p4_p, moms1, moms2, 1.15, -10., 0.00426, 1.019455, 1, true); // phi(1020) + EvtResonance2 DsKKpiRes5(p4_p, moms1, moms2, 1.28, 53., 0.265, 1.350, 0); // f_0(1370) + EvtResonance2 DsKKpiRes6(p4_p, moms1, moms2, 1.19, 87., 0.137, 1.724, 0); // f_0(1710) + amp = DsKKpiRes1.resAmpl() + DsKKpiRes2.resAmpl() + DsKKpiRes3.resAmpl() + + DsKKpiRes4.resAmpl() + DsKKpiRes5.resAmpl() + DsKKpiRes6.resAmpl(); + + } vertex(amp); Index: Class/EvtEtaDalitz.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtEtaDalitz.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtEtaDalitz.cc 7 Oct 2003 02:48:13 -0000 1.1.1.1 --- Class/EvtEtaDalitz.cc 12 Jan 2006 16:14:28 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtFlatQ2.cc =================================================================== RCS file: Class/EvtFlatQ2.cc diff -N Class/EvtFlatQ2.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtFlatQ2.cc 12 Jan 2006 16:14:28 -0000 1.1 *************** *** 0 **** --- 1,89 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtFlatQ2.cc + // + // Description: B->Xu l nu with flat q2 distribution + // + // Modification history: + // + // David Cote, U. de Montreal, 11/02/2003 Module created + // + //------------------------------------------------------------------------ + // + #include "Experiment/Experiment.h" + #include "EvtGenModels/EvtFlatQ2.hh" + + #include + #include + #include + #include + #include "EvtGenBase/EvtGenKine.hh" + #include "EvtGenBase/EvtParticle.hh" + #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenBase/EvtDiracSpinor.hh" + #include "EvtGenBase/EvtVector4C.hh" + #include "EvtGenBase/EvtTensor4C.hh" + using std::fstream; + + EvtFlatQ2::~EvtFlatQ2() {} + + void EvtFlatQ2::getName(std::string& model_name){ + + model_name="FLATQ2"; + + } + + EvtDecayBase* EvtFlatQ2::clone(){ + + return new EvtFlatQ2; + + } + + + void EvtFlatQ2::initProbMax(){ + + setProbMax(100); + + } + + + void EvtFlatQ2::init(){ + + // check that there are 0 arguments + checkNArg(0); + checkNDaug(3); + + //We expect B->X l nu events + checkSpinParent(EvtSpinType::SCALAR); + checkSpinDaughter(1,EvtSpinType::DIRAC); + checkSpinDaughter(2,EvtSpinType::NEUTRINO); + + } + + + void EvtFlatQ2::decay( EvtParticle *p){ + + p->initializePhaseSpace(getNDaug(),getDaugs()); + + EvtVector4R p4Xu = p->getDaug(0)->getP4(); + double pXu_x2=p4Xu.get(1)*p4Xu.get(1); + double pXu_y2=p4Xu.get(2)*p4Xu.get(2); + double pXu_z2=p4Xu.get(3)*p4Xu.get(3); + double pXu = sqrt(pXu_x2+pXu_y2+pXu_z2); + double prob=1/pXu; + + if(pXu>0.01) setProb(prob); + + return; + } + + Index: Class/EvtGoityRoberts.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtGoityRoberts.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtGoityRoberts.cc 7 Oct 2003 02:48:13 -0000 1.1.1.1 --- Class/EvtGoityRoberts.cc 12 Jan 2006 16:14:28 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 164,170 **** pow((2*betas*betad/(betasd)),3.5)* exp(lambdabar*lambdabar*(1.0-w*w)/(2*betasd)); ! //report(INFO,"EvtGen") <<"rho's:"<initializePhaseSpace(getNDaug(),getDaugs()); --- 316,321 ---- Index: Class/EvtHQET.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtHQET.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtHQET.cc 7 Oct 2003 02:48:13 -0000 1.1.1.1 --- Class/EvtHQET.cc 12 Jan 2006 16:14:28 -0000 1.2 *************** *** 22,27 **** --- 22,28 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include #include "EvtGenBase/EvtParticle.hh" *************** *** 33,38 **** --- 34,40 ---- #include "EvtGenBase/EvtSemiLeptonicVectorAmp.hh" #include "EvtGenBase/EvtSemiLeptonicScalarAmp.hh" #include + using std::endl; EvtHQET::EvtHQET(): hqetffmodel(0) *************** *** 110,116 **** calcamp = new EvtSemiLeptonicVectorAmp; } else{ ! report(ERROR,"EvtGen") << "HQET model handles only scalar and vector meson daughters. Sorry."< #include #include "EvtGenBase/EvtParticle.hh" *************** *** 33,38 **** --- 34,40 ---- #include "EvtGenBase/EvtSemiLeptonicVectorAmp.hh" #include "EvtGenBase/EvtSemiLeptonicScalarAmp.hh" #include + using std::endl; EvtHQET2::EvtHQET2(): hqetffmodel(0) *************** *** 101,107 **** if ( getNArg()==2 ) {hqetffmodel = new EvtHQET2FF(getArg(0),getArg(1)); calcamp = new EvtSemiLeptonicScalarAmp;} else { ! report(ERROR,"EvtGen") << "HQET2 model for scalar meson daughters needs 2 arguments. Sorry."< #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 29,35 **** --- 30,38 ---- #include "EvtGenBase/EvtId.hh" #include #include "EvtGenBase/EvtConst.hh" + #include "EvtGenBase/EvtReport.hh" #include "EvtGenBase/EvtEvalHelAmp.hh" + using std::endl; EvtHelAmp::~EvtHelAmp() { *************** *** 61,73 **** int _nB=EvtSpinType::getSpinStates(EvtPDL::getSpinType(getDaug(0))); int _nC=EvtSpinType::getSpinStates(EvtPDL::getSpinType(getDaug(1))); - EvtId _idA=getParentId(); - EvtId _idB=getDaug(0); - EvtId _idC=getDaug(1); - if (verbose()){ report(INFO,"EvtGen")<<"_nA,_nB,_nC:" ! <<_nA<<","<<_nB<<","<<_nC<probMax(); if (verbose()){ ! report(INFO,"EvtGen")<<"Calculated probmax"< #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtISGW2.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtISGW2.cc,v retrieving revision 1.1.1.1 retrieving revision 1.4 diff -c -r1.1.1.1 -r1.4 *** Class/EvtISGW2.cc 7 Oct 2003 02:48:14 -0000 1.1.1.1 --- Class/EvtISGW2.cc 27 Mar 2007 03:32:49 -0000 1.4 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 82,87 **** --- 83,92 ---- static EvtId BM=EvtPDL::getId("B-"); static EvtId B0=EvtPDL::getId("B0"); static EvtId B0B=EvtPDL::getId("anti-B0"); + static EvtId BS0=EvtPDL::getId("B_s0"); + static EvtId BSB=EvtPDL::getId("anti-B_s0"); + static EvtId BCP=EvtPDL::getId("B_c+"); + static EvtId BCM=EvtPDL::getId("B_c-"); static EvtId DST0=EvtPDL::getId("D*0"); static EvtId DSTB=EvtPDL::getId("anti-D*0"); *************** *** 206,211 **** --- 211,227 ---- static EvtId DSP=EvtPDL::getId("D_s+"); static EvtId DSM=EvtPDL::getId("D_s-"); + static EvtId DSSTP=EvtPDL::getId("D_s*+"); + static EvtId DSSTM=EvtPDL::getId("D_s*-"); + static EvtId DS1P=EvtPDL::getId("D_s1+"); + static EvtId DS1M=EvtPDL::getId("D_s1-"); + static EvtId DS0STP=EvtPDL::getId("D_s0*+"); + static EvtId DS0STM=EvtPDL::getId("D_s0*-"); + static EvtId DPS1P=EvtPDL::getId("D'_s1+"); + static EvtId DPS1M=EvtPDL::getId("D'_s1-"); + static EvtId DS2STP=EvtPDL::getId("D_s2*+"); + static EvtId DS2STM=EvtPDL::getId("D_s2*-"); + EvtId parnum,mesnum,lnum; *************** *** 214,222 **** lnum = getDaug(1); ! if ( parnum==BP||parnum==BM||parnum==B0||parnum==B0B ) { ! if ( mesnum==DST0||mesnum==DSTP||mesnum==DSTB||mesnum==DSTM) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { setProbMax(10000.0); --- 230,238 ---- lnum = getDaug(1); ! if ( parnum==BP||parnum==BM||parnum==B0||parnum==B0B||parnum==BS0||parnum==BSB ) { ! if ( mesnum==DST0||mesnum==DSTP||mesnum==DSTB||mesnum==DSTM||mesnum==DSSTP||mesnum==DSSTM) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { setProbMax(10000.0); *************** *** 229,235 **** } ! if ( mesnum==D0||mesnum==DP||mesnum==D0B||mesnum==DM) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { setProbMax(4000.0); --- 245,251 ---- } ! if ( mesnum==D0||mesnum==DP||mesnum==D0B||mesnum==DM||mesnum==DSP||mesnum==DSM) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { setProbMax(4000.0); *************** *** 242,284 **** } ! if ( mesnum==D1P1P||mesnum==D1P1N||mesnum==D1P10||mesnum==D1P1B) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { ! setProbMax(1100.0); return; } if ( lnum==TAUP||lnum==TAUM ) { ! setProbMax(470.0); return; } } ! if ( mesnum==D3P1P||mesnum==D3P1N||mesnum==D3P10||mesnum==D3P1B) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { setProbMax(450.0); return; } if ( lnum==TAUP||lnum==TAUM ) { ! setProbMax(68.0);//??? return; } } ! if ( mesnum==D3P0P||mesnum==D3P0N||mesnum==D3P00||mesnum==D3P0B) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { ! setProbMax(140.0); return; } if ( lnum==TAUP||lnum==TAUM ) { ! setProbMax(66.0); return; } } ! if ( mesnum==D3P2P||mesnum==D3P2N||mesnum==D3P20||mesnum==D3P2B) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { setProbMax(400.0); return; --- 258,304 ---- } ! if ( mesnum==D1P1P||mesnum==D1P1N||mesnum==D1P10||mesnum==D1P1B||mesnum==DS1P||mesnum==DS1M) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { ! setProbMax(1300.0); return; } if ( lnum==TAUP||lnum==TAUM ) { ! setProbMax(480.0); return; } } ! if ( mesnum==D3P1P||mesnum==D3P1N||mesnum==D3P10||mesnum==D3P1B||mesnum==DS0STP||mesnum==DS0STM) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { setProbMax(450.0); return; } if ( lnum==TAUP||lnum==TAUM ) { ! setProbMax(73.0);//??? return; } } ! if ( mesnum==D3P0P||mesnum==D3P0N||mesnum==D3P00||mesnum==D3P0B||mesnum==DPS1P||mesnum==DPS1M) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { ! setProbMax(200.0); return; } if ( lnum==TAUP||lnum==TAUM ) { ! setProbMax(90.0); return; } } ! if ( mesnum==D3P2P||mesnum==D3P2N||mesnum==D3P20||mesnum==D3P2B||mesnum==DS2STP||mesnum==DS2STM) { + if ( mesnum==DS2STP|| mesnum==DS2STM) { + setProbMax(550.0); + return; + } if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { setProbMax(400.0); return; *************** *** 567,572 **** --- 587,618 ---- } } + if ( mesnum==KP||mesnum==KM|| + mesnum==K1P||mesnum==K1M||mesnum==K1STP||mesnum==K1STM) { + + if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { + setProbMax(2000.0); + return; + } + if ( lnum==TAUP||lnum==TAUM ) { + setProbMax(1000.0); + return; + } + } + + if ( mesnum==KSTP||mesnum==KSTM ) { + + if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { + setProbMax(10000.0); + return; + } + if ( lnum==TAUP||lnum==TAUM ) { + setProbMax(7000.0); + return; + } + } + + } if ( parnum==D0||parnum==DP||parnum==DM||parnum==D0B ) { *************** *** 656,661 **** --- 702,714 ---- } } + if ( mesnum==F0) { + if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { + setProbMax(1.0); + return; + } + } + } if ( parnum==DSP||parnum==DSM ) { *************** *** 672,678 **** if ( mesnum==ETA ) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { ! setProbMax( 50.0 ); return; } } --- 725,731 ---- if ( mesnum==ETA ) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { ! setProbMax( 75.0 ); return; } } *************** *** 680,686 **** if ( mesnum==ETAPR ) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { ! setProbMax( 50.0) ; return; } } --- 733,739 ---- if ( mesnum==ETAPR ) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { ! setProbMax( 80.0) ; return; } } *************** *** 688,694 **** if ( mesnum==KST0||mesnum==KSTB ) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { ! setProbMax( 110.0) ; return; } } --- 741,747 ---- if ( mesnum==KST0||mesnum==KSTB ) { if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { ! setProbMax( 100.0) ; return; } } *************** *** 702,709 **** --- 755,776 ---- } } + if ( mesnum==F0) { + + if ( lnum==EP||lnum==EM||lnum==MUP||lnum==MUM ) { + setProbMax(1.0); + return; + } + } + } + if ( parnum==BCP||parnum==BCM ) { + setProbMax(1000.0 ); + return; + } + + //This is a real cludge.. (ryd) setProbMax(0.0); *************** *** 737,746 **** } } - - - - - - - --- 804,806 ---- Index: Class/EvtISGW2FF.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtISGW2FF.cc,v retrieving revision 1.1.1.1 retrieving revision 1.3 diff -c -r1.1.1.1 -r1.3 *** Class/EvtISGW2FF.cc 7 Oct 2003 02:48:14 -0000 1.1.1.1 --- Class/EvtISGW2FF.cc 7 Mar 2007 05:09:54 -0000 1.3 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include "EvtGenBase/EvtPatches.hh" #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtISGW2FF.hh" *************** *** 28,33 **** --- 29,35 ---- #include "EvtGenBase/EvtConst.hh" #include #include + using std::endl; void EvtISGW2FF::getscalarff(EvtId parent,EvtId daught, double t, double mass, double *fpf, *************** *** 583,594 **** void EvtISGW2FF::EvtISGW2FF1S0 (EvtId parent,EvtId daugt, double t, double mass, double *fpf, double *fmf ) { ! double mtb, mbb; ! double msd, mx,mb,nf,nfp; ! double msq,bx2,mbx,mtx; double zji,cji,w,gammaji,chiji,betaji_fppfm; double rfppfm,rfpmfm,f3fppfm,f3fpmfm,fppfm,fpmfm,al,ai,rcji,f3; ! double mqm,msb,bb2,mup,mum,bbx2,tm,wt,r2,betaji_fpmfm; EvtId prnt=parent; EvtId dgt=daugt; --- 585,596 ---- void EvtISGW2FF::EvtISGW2FF1S0 (EvtId parent,EvtId daugt, double t, double mass, double *fpf, double *fmf ) { ! double mtb, mbb(0.0); ! double msd(0.0), mx,mb,nf(0.0),nfp(0.0); ! double msq(0.0),bx2(0.0),mbx(0.0),mtx; double zji,cji,w,gammaji,chiji,betaji_fppfm; double rfppfm,rfpmfm,f3fppfm,f3fpmfm,fppfm,fpmfm,al,ai,rcji,f3; ! double mqm,msb(0.0),bb2(0.0),mup,mum,bbx2,tm,wt,r2,betaji_fpmfm; EvtId prnt=parent; EvtId dgt=daugt; *************** *** 805,821 **** mbb=1.968; nf = 3.0; ! if (dgt==PI0||dgt==ETA||dgt==ETAPR) { msq=0.33; ! bx2=0.406*0.406; mbx=0.75*0.770+0.25*0.14; nfp = 0.0; } else{ ! if (dgt==K0||dgt==K0S||dgt==K0L||dgt==KB) { msq=0.55; ! bx2=0.44*0.44; mbx=0.75*0.892+0.25*0.49767; nfp = 2.0; } --- 807,828 ---- mbb=1.968; nf = 3.0; ! //PCS_BEGIN if (dgt==PI0||dgt==ETA||dgt==ETAPR) { ! if (dgt==K0||dgt==K0S||dgt==K0L||dgt==KB) { ! //PCS_END msq=0.33; ! bx2=0.44*0.44; mbx=0.75*0.770+0.25*0.14; nfp = 0.0; } else{ ! //PCS_BEGIN if (dgt==K0||dgt==K0S||dgt==K0L||dgt==KB) { ! if (dgt==PI0||dgt==ETA||dgt==ETAPR) { ! // I don't think pi0 is included in ISGW for this decay but leave as is for now ! //PCS_END msq=0.55; ! bx2=0.53*0.53; mbx=0.75*0.892+0.25*0.49767; nfp = 2.0; } *************** *** 856,862 **** else{ report(ERROR,"EvtGen") << "Not implemented parent in get_isgw_ff_1S0.\n"; ! report(ERROR,"EvtGen") << "Parent:"< cs constants added by djl on Jan. 21,1998 ! if (prnt==BS0||prnt==BSB){ ! ! msb=5.2; ! msd=0.55; ! bb2=0.54*0.54; ! mbb=5.38; ! nf = 4.0; ! if (dgt==D3P0SP||dgt==D3P0SN) { ! msq=1.82; ! bx2=0.41*0.41; ! mbx=(3.0*2.54+2.46)/4.0; ! nfp = 3.0; ! } ! else if (dgt==K0STM||dgt==K0STB||dgt==K0STP||dgt==K0ST0) { ! msq=0.55; ! bx2=0.30*0.30; ! mbx=(3.0*1.40+1.43+5.0*1.43+3.0*1.27)/12.0; ! nfp = 2.0; ! } ! else{ ! report(ERROR,"EvtGen") << "Not implemented daugt:"< cs constants added by djl on Jan. 21,1998 ! if (prnt==BS0||prnt==BSB){ ! ! msb=5.2; ! msd=0.55; ! bb2=0.54*0.54; ! mbb=5.38; ! nf = 4.0; ! if (dgt==D3P0SP||dgt==D3P0SN) { ! msq=1.82; ! bx2=0.41*0.41; ! mbx=(3.0*2.54+2.46)/4.0; ! nfp = 3.0; ! } ! else if (dgt==K0STM||dgt==K0STB||dgt==K0STP||dgt==K0ST0) { ! msq=0.55; ! bx2=0.30*0.30; ! mbx=(3.0*1.40+1.43+5.0*1.43+3.0*1.27)/12.0; ! nfp = 2.0; ! } ! else{ ! report(ERROR,"EvtGen") << "Not implemented daugt:"< #include + using std::endl; void EvtISGWFF::getscalarff(EvtId parent,EvtId daught, double t, double mass, double *fpf, *************** *** 743,752 **** static EvtId BS0=EvtPDL::getId("B_s0"); double mtb; ! double msd, mx,mb; ! double msq,bx2,mtx,f5; ! double mum,mup,tm,bb2,bbx2; ! double msb, kap; if (parent==BM||parent==BP||parent==B0||parent==B0B) { msb=5.2; --- 745,754 ---- static EvtId BS0=EvtPDL::getId("B_s0"); double mtb; ! double msd(0.0), mx(0.0), mb(0.0); ! double msq(0.0), bx2(0.0),mtx,f5; ! double mum,mup,tm,bb2(0.0),bbx2; ! double msb(0.0), kap; if (parent==BM||parent==BP||parent==B0||parent==B0B) { msb=5.2; *************** *** 957,966 **** static EvtId BS0=EvtPDL::getId("B_s0"); double mtb; ! double msd, mx,mb; ! double msq,bx2,mtx; double f3,kap; ! double msb,bb2,mup,mum,bbx2,tm; if (parent==BM||parent==BP||parent==B0||parent==B0B) { msb=5.2; --- 959,968 ---- static EvtId BS0=EvtPDL::getId("B_s0"); double mtb; ! double msd(0.0), mx(0.0), mb(0.0); ! double msq(0.0), bx2(0.0),mtx; double f3,kap; ! double msb(0.0),bb2(0.0),mup,mum,bbx2,tm; if (parent==BM||parent==BP||parent==B0||parent==B0B) { msb=5.2; *************** *** 982,988 **** } else{ report(ERROR,"EvtGen") << "Not implemented parent in get_isgw_ff_1S0.\n"; ! report(ERROR,"EvtGen") << "Parent:"<= _lowerRange && x <= _upperRange) return myFunction(x); report(ERROR,"EvtGen") << "Error in EvtItgAbsFunction::value. Given co-ordinate " << x << " is outside of allowed range [" << _lowerRange << ", " ! << _upperRange << "]. Returning 0.0" << std::endl; return 0.0; // Never get here } --- 46,52 ---- if (x >= _lowerRange && x <= _upperRange) return myFunction(x); report(ERROR,"EvtGen") << "Error in EvtItgAbsFunction::value. Given co-ordinate " << x << " is outside of allowed range [" << _lowerRange << ", " ! << _upperRange << "]. Returning 0.0" << endl; return 0.0; // Never get here } Index: Class/EvtItgAbsIntegrator.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtItgAbsIntegrator.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtItgAbsIntegrator.cc 7 Oct 2003 02:48:14 -0000 1.1.1.1 --- Class/EvtItgAbsIntegrator.cc 12 Jan 2006 16:14:29 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // EvtGen // //------------------------------------------------------------------------ + #include "Experiment/Experiment.h" #include "EvtGenModels/EvtItgAbsIntegrator.hh" //------------- *************** *** 32,37 **** --- 33,39 ---- #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtItgAbsFunction.hh" + using std::endl; EvtItgAbsIntegrator::EvtItgAbsIntegrator(const EvtItgAbsFunction &theFunction): *************** *** 89,102 **** if (lower < _myFunction.lowerRange() ) { report(WARNING,"EvtGen") << "Warning in EvtItgAbsIntegrator::evaluate. Lower bound " << lower << " of integral " << " is less than lower bound " << _myFunction.lowerRange() ! << " of function. No contribution from this range will be counted." << std::endl; lower = _myFunction.lowerRange(); } if (upper > _myFunction.upperRange() ) { report(WARNING,"EvtGen") << "Warning in EvtItgAbsIntegrator::evaluate. Upper bound " << upper << " of integral " << " is greater than upper bound " << _myFunction.upperRange() ! << " of function. No contribution from this range will be counted." << std::endl; upper = _myFunction.upperRange(); } --- 91,104 ---- if (lower < _myFunction.lowerRange() ) { report(WARNING,"EvtGen") << "Warning in EvtItgAbsIntegrator::evaluate. Lower bound " << lower << " of integral " << " is less than lower bound " << _myFunction.lowerRange() ! << " of function. No contribution from this range will be counted." << endl; lower = _myFunction.lowerRange(); } if (upper > _myFunction.upperRange() ) { report(WARNING,"EvtGen") << "Warning in EvtItgAbsIntegrator::evaluate. Upper bound " << upper << " of integral " << " is greater than upper bound " << _myFunction.upperRange() ! << " of function. No contribution from this range will be counted." << endl; upper = _myFunction.upperRange(); } Index: Class/EvtItgFourCoeffFcn.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtItgFourCoeffFcn.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtItgFourCoeffFcn.cc 7 Oct 2003 02:48:14 -0000 1.1.1.1 --- Class/EvtItgFourCoeffFcn.cc 12 Jan 2006 16:14:30 -0000 1.2 *************** *** 17,22 **** --- 17,23 ---- // Jane Tinslay March 21, 2001 Module created // //------------------------------------------------------------------------ + #include "Experiment/Experiment.h" #include "EvtGenModels/EvtItgFourCoeffFcn.hh" //------------- *************** *** 25,37 **** extern "C" { } ! EvtItgFourCoeffFcn::EvtItgFourCoeffFcn( double (*theFunction)(double, const HepVector &, const HepVector &, const HepVector &, const HepVector &), double lowerRange, double upperRange, const HepVector &coeffs1, const HepVector &coeffs2, const HepVector &coeffs3, const HepVector &coeffs4): EvtItgAbsFunction(lowerRange, upperRange), _coeffs1(coeffs1), _coeffs2(coeffs2), _coeffs3(coeffs3), ! _coeffs4(coeffs4), ! _myFunction(theFunction) {} EvtItgFourCoeffFcn::~EvtItgFourCoeffFcn( ) --- 26,38 ---- extern "C" { } ! EvtItgFourCoeffFcn::EvtItgFourCoeffFcn( double (*theFunction)(double, const std::vector &, const std::vector &, const std::vector &, const std::vector &), double lowerRange, double upperRange, const std::vector &coeffs1, const std::vector &coeffs2, const std::vector &coeffs3, const std::vector &coeffs4): EvtItgAbsFunction(lowerRange, upperRange), + _myFunction(theFunction), _coeffs1(coeffs1), _coeffs2(coeffs2), _coeffs3(coeffs3), ! _coeffs4(coeffs4) {} EvtItgFourCoeffFcn::~EvtItgFourCoeffFcn( ) Index: Class/EvtItgFunction.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtItgFunction.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtItgFunction.cc 7 Oct 2003 02:48:14 -0000 1.1.1.1 --- Class/EvtItgFunction.cc 12 Jan 2006 16:14:30 -0000 1.2 *************** *** 1,6 **** //-------------------------------------------------------------------------- // File and Version Information: ! // $Id: EvtItgFunction.cc,v 1.1.1.1 2003/10/07 02:48:14 ryd Exp $ // // Description: // Class EvtItgFunction --- 1,6 ---- //-------------------------------------------------------------------------- // File and Version Information: ! // $Id: EvtItgFunction.cc,v 1.2 2006/01/12 16:14:30 ryd Exp $ // // Description: // Class EvtItgFunction *************** *** 17,22 **** --- 17,23 ---- // Copyright (C) 1998 LBNL // //------------------------------------------------------------------------ + #include "Experiment/Experiment.h" //----------------------- // This Class's Header -- Index: Class/EvtItgPtrFunction.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtItgPtrFunction.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtItgPtrFunction.cc 7 Oct 2003 02:48:14 -0000 1.1.1.1 --- Class/EvtItgPtrFunction.cc 12 Jan 2006 16:14:30 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // EvtGen // //------------------------------------------------------------------------ + #include "Experiment/Experiment.h" #include "EvtGenModels/EvtItgPtrFunction.hh" *************** *** 31,40 **** //---------------- // Constructors -- //---------------- ! EvtItgPtrFunction::EvtItgPtrFunction( double (*theFunction)(double, const HepVector &), double lowerRange, double upperRange, const HepVector &coeffs1): EvtItgAbsFunction(lowerRange, upperRange), ! _coeffs1(coeffs1), ! _myFunction(theFunction) {} --- 32,41 ---- //---------------- // Constructors -- //---------------- ! EvtItgPtrFunction::EvtItgPtrFunction( double (*theFunction)(double, const std::vector &), double lowerRange, double upperRange, const std::vector &coeffs1): EvtItgAbsFunction(lowerRange, upperRange), ! _myFunction(theFunction), ! _coeffs1(coeffs1) {} Index: Class/EvtItgSimpsonIntegrator.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtItgSimpsonIntegrator.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtItgSimpsonIntegrator.cc 7 Oct 2003 02:48:14 -0000 1.1.1.1 --- Class/EvtItgSimpsonIntegrator.cc 12 Jan 2006 16:14:30 -0000 1.2 *************** *** 21,26 **** --- 21,27 ---- // EvtGen // //------------------------------------------------------------------------ + #include "Experiment/Experiment.h" #include "EvtGenModels/EvtItgSimpsonIntegrator.hh" *************** *** 42,47 **** --- 43,49 ---- #include "EvtGenModels/EvtItgAbsFunction.hh" #include "EvtGenBase/EvtReport.hh" + using std::endl; EvtItgSimpsonIntegrator::EvtItgSimpsonIntegrator(const EvtItgAbsFunction &theFunction, double precision, int maxLoop): *************** *** 61,67 **** double EvtItgSimpsonIntegrator::evaluateIt(double lower, double higher) const{ ! // report(INFO,"EvtGen")<<"in evaluate"< &, const std::vector &, const std::vector &), double lowerRange, double upperRange, const std::vector &coeffs1, const std::vector &coeffs2, const std::vector &coeffs3): EvtItgAbsFunction(lowerRange, upperRange), + _myFunction(theFunction), _coeffs1(coeffs1), _coeffs2(coeffs2), ! _coeffs3(coeffs3) {} EvtItgThreeCoeffFcn::~EvtItgThreeCoeffFcn( ) Index: Class/EvtItgTwoCoeffFcn.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtItgTwoCoeffFcn.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtItgTwoCoeffFcn.cc 7 Oct 2003 02:48:14 -0000 1.1.1.1 --- Class/EvtItgTwoCoeffFcn.cc 12 Jan 2006 16:14:30 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // Jane Tinslay March 21, 2001 Module created // //------------------------------------------------------------------------ + #include "Experiment/Experiment.h" #include "EvtGenModels/EvtItgTwoCoeffFcn.hh" *************** *** 27,37 **** extern "C" { } ! EvtItgTwoCoeffFcn::EvtItgTwoCoeffFcn( double (*theFunction)(double, const HepVector &, const HepVector &), double lowerRange, double upperRange, const HepVector &coeffs1, const HepVector &coeffs2): EvtItgAbsFunction(lowerRange, upperRange), _coeffs1(coeffs1), ! _coeffs2(coeffs2), ! _myFunction(theFunction) {} EvtItgTwoCoeffFcn::~EvtItgTwoCoeffFcn( ) --- 28,38 ---- extern "C" { } ! EvtItgTwoCoeffFcn::EvtItgTwoCoeffFcn( double (*theFunction)(double, const std::vector &, const std::vector &), double lowerRange, double upperRange, const std::vector &coeffs1, const std::vector &coeffs2): EvtItgAbsFunction(lowerRange, upperRange), + _myFunction(theFunction), _coeffs1(coeffs1), ! _coeffs2(coeffs2) {} EvtItgTwoCoeffFcn::~EvtItgTwoCoeffFcn( ) Index: Class/EvtJetSet.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtJetSet.cc,v retrieving revision 1.3 retrieving revision 1.5 diff -c -r1.3 -r1.5 *** Class/EvtJetSet.cc 9 Sep 2004 02:23:10 -0000 1.3 --- Class/EvtJetSet.cc 6 Jun 2006 17:03:59 -0000 1.5 *************** *** 18,23 **** --- 18,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" + #include "EvtGenBase/EvtPatches.hh" #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtStringParticle.hh" #include "EvtGenBase/EvtDecayTable.hh" *************** *** 33,38 **** --- 35,47 ---- #include #include #include + using std::endl; + using std::fstream; + using std::ios; + using std::ofstream; + using std::resetiosflags; + using std::setiosflags; + using std::setw; int EvtJetSet::njetsetdecays=0; *************** *** 90,96 **** } } ! report(ERROR,"EvtGen") << "Error in destroying JetSet model!"<getId()).c_str() ! <<" ("<getId()).c_str()<9999) { ! report(INFO,"EvtGen") << "Too many loops in EvtJetSet!!!"<9999) { ! report(INFO,"EvtGen") << "Too many loops in EvtJetSet!!!"<getId()).c_str() << " " << p->mass()<getId()).c_str() << " " << p->mass()<getId()).c_str() << " " << p->mass() <getId()).c_str() << " " << p->mass() <=0) { if (EvtPDL::chargeConj(evtnum)==evtnum) { --- 510,520 ---- } ! outdec << setw(5) << lundkc << " "; outdec.width(namelength); ! outdec << setiosflags(ios::left) << sname << resetiosflags(ios::left); ! outdec << setw(3) << chg; ! outdec << setw(3) << cchg; outdec.width(3); if (evtnum.getId()>=0) { if (EvtPDL::chargeConj(evtnum)==evtnum) { *************** *** 519,536 **** else{ outdec << 0; } ! outdec.setf(std::ios::fixed); outdec.precision(5); ! outdec << std::setw(12) << mass; ! outdec << std::setw(12) << width; outdec.width(12); ! if (std::fabs(width)<0.0000000001) { outdec << 0.0 ; } else{ outdec << maxwidth; } ! outdec << std::setw(14) << ctau; outdec.width(3); if (evtnum.getId()>=0) { if (ctau>1.0 || rawbrfrsum<0.000001) { --- 527,544 ---- else{ outdec << 0; } ! outdec.setf(ios::fixed); outdec.precision(5); ! outdec << setw(12) << mass; ! outdec << setw(12) << width; outdec.width(12); ! if (fabs(width)<0.0000000001) { outdec << 0.0 ; } else{ outdec << maxwidth; } ! outdec << setw(14) << ctau; outdec.width(3); if (evtnum.getId()>=0) { if (ctau>1.0 || rawbrfrsum<0.000001) { *************** *** 538,549 **** } } outdec << stable; ! outdec << std::endl; outdec.width(0); } ! void EvtJetSet::WriteJetSetParticle(std::ofstream &outdec,EvtId ipar, EvtId iparname,int &first){ int ijetset; --- 546,557 ---- } } outdec << stable; ! outdec << endl; outdec.width(0); } ! void EvtJetSet::WriteJetSetParticle(ofstream &outdec,EvtId ipar, EvtId iparname,int &first){ int ijetset; *************** *** 630,636 **** unknown=1; report(ERROR,"EvtGen") << "JetSet (lucomp) does not " << "know the particle:"<< ! EvtPDL::name(jetsetdecays[ijetset]->getDaugs()[i]).c_str()<getDaugs()[i]).c_str()<getParentId()).c_str()<<" -> "; for(i=0;igetNDaug();i++){ report(ERROR,"") << EvtPDL::name(jetsetdecays[ijetset]->getDaugs()[i]).c_str()<<" "; } ! report(ERROR,"")<=0) { // dflag=1; ! //report(INFO,"EvtGen") << EvtPDL::name(iparname) << " dflag=1 because channel>=0"<=0)){ --- 648,679 ---- unknown=1; report(ERROR,"EvtGen") << "JetSet (lucomp) does not " << "know the particle:"<< ! EvtPDL::name(ipar).c_str()<getParentId()).c_str()<<" -> "; for(i=0;igetNDaug();i++){ report(ERROR,"") << EvtPDL::name(jetsetdecays[ijetset]->getDaugs()[i]).c_str()<<" "; } ! report(ERROR,"")<=0) { // dflag=1; ! //report(INFO,"EvtGen") << EvtPDL::name(iparname) << " dflag=1 because channel>=0"<=0)){ *************** *** 676,682 **** outdec.width(5); outdec <<(int)jetsetdecays[ijetset]->getArgs()[0]; outdec.width(12); ! if (std::fabs(br)<0.000000001) { outdec <<"0.00000"; } else{ --- 684,690 ---- outdec.width(5); outdec <<(int)jetsetdecays[ijetset]->getArgs()[0]; outdec.width(12); ! if (fabs(br)<0.000000001) { outdec <<"0.00000"; } else{ *************** *** 692,698 **** outdec <( EvtPDL::entries() );iipar++){ ipar=EvtId(iipar,iipar); //no aliased particles! *************** *** 782,795 **** first=0; ! report(INFO,"EvtGen") << "Will initialize JetSet."< #include #include *************** *** 29,35 **** #include "EvtGenBase/EvtId.hh" #include "EvtGenBase/EvtReport.hh" #include - #include extern "C" { extern void continuum_(double *,int *,int *,int *, --- 30,35 ---- Index: Class/EvtKKLambdaC.cc =================================================================== RCS file: Class/EvtKKLambdaC.cc diff -N Class/EvtKKLambdaC.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtKKLambdaC.cc 12 Jan 2006 16:14:31 -0000 1.1 *************** *** 0 **** --- 1,90 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtSLPole.cc + // + // Description: Routine to implement semileptonic decays according + // to light cone sum rules + // + // Modification history: + // + // DJL April 23, 1998 Module created + // + //------------------------------------------------------------------------ + // + #include "Experiment/Experiment.h" + #include + #include "EvtGenBase/EvtParticle.hh" + #include "EvtGenBase/EvtGenKine.hh" + #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenModels/EvtKKLambdaC.hh" + #include "EvtGenModels/EvtKKLambdaCFF.hh" + #include "EvtGenBase/EvtSemiLeptonicBaryonAmp.hh" + #include + + EvtKKLambdaC::~EvtKKLambdaC() {} + + void EvtKKLambdaC::getName(std::string& model_name){ + + model_name="KK_LAMBDAC_SL"; + + } + + + EvtDecayBase* EvtKKLambdaC::clone(){ + + return new EvtKKLambdaC; + + } + + void EvtKKLambdaC::decay( EvtParticle *p ){ + + p->initializePhaseSpace(getNDaug(),getDaugs()); + + _calcamp->CalcAmp(p,_amp2,_ffmodel); + return; + } + + void EvtKKLambdaC::initProbMax(){ + + EvtId parnum,mesnum,lnum,nunum; + + parnum = getParentId(); + mesnum = getDaug(0); + lnum = getDaug(1); + nunum = getDaug(2); + + //double mymaxprob = _calcamp->CalcMaxProb(parnum,mesnum, + // lnum,nunum,_ffmodel); + double mymaxprob=100.; + setProbMax(mymaxprob); + + } + + + void EvtKKLambdaC::init(){ + + checkNDaug(3); + + //We expect the parent to be a dirac + //and the daughters to be dirac lepton neutrino + + checkSpinParent(EvtSpinType::DIRAC); + checkSpinDaughter(0,EvtSpinType::DIRAC); + checkSpinDaughter(1,EvtSpinType::DIRAC); + checkSpinDaughter(2,EvtSpinType::NEUTRINO); + + _ffmodel = new EvtKKLambdaCFF(getNArg(),getArgs()); + + _calcamp = new EvtSemiLeptonicBaryonAmp; + + } + Index: Class/EvtKKLambdaCFF.cc =================================================================== RCS file: Class/EvtKKLambdaCFF.cc diff -N Class/EvtKKLambdaCFF.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtKKLambdaCFF.cc 16 Jan 2006 03:20:47 -0000 1.1 *************** *** 0 **** --- 1,48 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtSLPoleFF.cc + // + // Description: Routine to implement semileptonic form factors + // according to the model SLPoles + // + // Modification history: + // + // DJL April 17,1998 Module created + // + //------------------------------------------------------------------------ + // + #include "Experiment/Experiment.h" + #include "EvtGenBase/EvtPatches.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenModels/EvtKKLambdaCFF.hh" + #include + #include "EvtGenBase/EvtPDL.hh" + #include + + EvtKKLambdaCFF::EvtKKLambdaCFF(int numarg, double *arglist) { + _nargs = numarg; + for (int i=0; i #include #include Index: Class/EvtKstarstargamma.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtKstarstargamma.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtKstarstargamma.cc 7 Oct 2003 02:48:15 -0000 1.1.1.1 --- Class/EvtKstarstargamma.cc 12 Jan 2006 16:14:31 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtScalarParticle.hh" Index: Class/EvtLNuGamma.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtLNuGamma.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtLNuGamma.cc 7 Oct 2003 02:48:15 -0000 1.1.1.1 --- Class/EvtLNuGamma.cc 12 Jan 2006 16:14:31 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include #include Index: Class/EvtLambdaP_BarGamma.cc =================================================================== RCS file: Class/EvtLambdaP_BarGamma.cc diff -N Class/EvtLambdaP_BarGamma.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtLambdaP_BarGamma.cc 12 Jan 2006 16:14:32 -0000 1.1 *************** *** 0 **** --- 1,136 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 2003 Caltech + // + // Module: EvtGen/EvtRadiativeBaryonicPenguins.hh + // + // Description:Implementation of the decay B- -> lambda p_bar gamma according to + // Cheng, Yang; hep-ph/0201015 + // + // Modification history: + // + // JFS December 16th, 2003 Module created + // + //------------------------------------------------------------------------ + #include "Experiment/Experiment.h" + + #include "EvtGenModels/EvtLambdaP_BarGamma.hh" + #include "EvtGenBase/EvtGammaMatrix.hh" + #include "EvtGenBase/EvtDiracSpinor.hh" + #include "EvtGenBase/EvtSpinType.hh" + #include "EvtGenBase/EvtDiracParticle.hh" + #include "EvtGenBase/EvtPhotonParticle.hh" + #include + using std::cout; + using std::endl; + + EvtLambdaP_BarGamma::EvtLambdaP_BarGamma() : + _mLambdab ( 5.624), // Lambda_b mass + _mLambda0 ( 1.115684), // Lambda0 mass + _c7Eff ( -0.31), // Wilson coefficient + _mb ( 4.4), // running b mass + _mV ( 5.42), // pole mass vector current + _mA ( 5.86), // pole mass axial current + _GF ( 1.166E-5), // Fermi constant + _gLambdab ( 16), // coupling constant Lambda_b -> B- p + _e0 ( 1), // electromagnetic coupling (+1) + _g1 ( 0.64), // heavy-light form factors at q_mSqare + _g2 ( -0.10), + _f1 ( 0.64), + _f2 ( -0.31), + _VtbVtsStar ( 0.038) // |V_tb V_ts^*| + { + } + + + + void EvtLambdaP_BarGamma::getName(std::string& modelName){ + modelName = "B_TO_LAMBDA_PBAR_GAMMA"; + } + + EvtDecayBase* EvtLambdaP_BarGamma::clone(){ + return new EvtLambdaP_BarGamma; + } + + void EvtLambdaP_BarGamma::init() { + // no arguments, daughter lambda p_bar gamma + checkNArg(0); + checkNDaug(3); + + checkSpinParent(EvtSpinType::SCALAR); + checkSpinDaughter(0, EvtSpinType::DIRAC); + checkSpinDaughter(1, EvtSpinType::DIRAC); + checkSpinDaughter(2, EvtSpinType::PHOTON); + } + + + // initialize phasespace and calculate the amplitude + void EvtLambdaP_BarGamma::decay(EvtParticle* p) { + EvtComplex I(0, 1); + + p->initializePhaseSpace(getNDaug(), getDaugs()); + + EvtDiracParticle* theLambda = static_cast(p->getDaug(0)); + EvtVector4R lambdaMomentum = theLambda->getP4Lab(); + + EvtDiracParticle* theAntiP = static_cast(p->getDaug(1)); + + EvtPhotonParticle* thePhoton = static_cast(p->getDaug(2)); + EvtVector4R photonMomentum = thePhoton->getP4Lab(); // get momentum in the same frame + + // loop over all possible spin states + for (int i=0; i<2; ++i) { + EvtDiracSpinor lambdaPol = theLambda->spParent(i); + for (int j=0; j<2; ++j) { + EvtDiracSpinor antiP_Pol = theAntiP->spParent(j); + for (int k=0; k<2; ++k) { + EvtVector4C photonPol = thePhoton->epsParentPhoton(k); // one of two possible polarization states + EvtGammaMatrix photonGamma; // sigma[mu][nu] * epsilon[mu] * k[nu] (watch lower indices) + for (int mu=0; mu<4; ++mu) + for (int nu=0; nu<4; ++nu) + photonGamma += EvtGammaMatrix::sigmaLower(mu, nu) * photonPol.get(mu) * photonMomentum.get(nu); + + EvtComplex amp = + -I*_gLambdab * lambdaPol.adjoint() * ((constA()*EvtGammaMatrix::id() + constB()*EvtGammaMatrix::g5()) + * photonGamma * (slash(lambdaMomentum) + slash(photonMomentum) + _mLambdab*EvtGammaMatrix::id()) + / ((lambdaMomentum + photonMomentum)*(lambdaMomentum + photonMomentum) - _mLambdab*_mLambdab) + * EvtGammaMatrix::g5() * antiP_Pol); + // use of parentheses so I do not have to define EvtDiracSpinor*EvtGammaMatrix, which shouldn't be defined to prevent errors in indexing + + vertex(i, j, k, amp); + } + } + } + } + + void EvtLambdaP_BarGamma::initProbMax() + { + // setProbMax(1); + setProbMax(9.0000E-13); // found by trial and error + } + + // form factors at 0 + const double EvtLambdaP_BarGamma::f0(double fqm, int n){ + return fqm * pow(1 - pow(_mLambdab - _mLambda0, 2) / (_mV * _mV), n); + } + + const double EvtLambdaP_BarGamma::g0(double gqm, int n){ + return gqm * pow(1 - pow(_mLambdab - _mLambda0, 2) / (_mA * _mA), n); + } + + + const double EvtLambdaP_BarGamma::constA(){ + return _GF/sqrt(2.) * _e0 / (8 * EvtConst::pi*EvtConst::pi) * 2 * _c7Eff * _mb * _VtbVtsStar + * (f0(_f1) - f0(_f2)); + } + + const double EvtLambdaP_BarGamma::constB(){ + return _GF/sqrt(2.) * _e0 / (8 * EvtConst::pi*EvtConst::pi) * 2 * _c7Eff * _mb * _VtbVtsStar + * (g0(_g1) - (_mLambdab - _mLambda0) / (_mLambdab + _mLambda0) * g0(_g2)); + } Index: Class/EvtLundAreaLaw.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtLundAreaLaw.cc,v retrieving revision 1.1 retrieving revision 1.2 diff -c -r1.1 -r1.2 *** Class/EvtLundAreaLaw.cc 2 Feb 2004 16:20:12 -0000 1.1 --- Class/EvtLundAreaLaw.cc 6 Jun 2006 17:04:00 -0000 1.2 *************** *** 27,33 **** #include "EvtGenBase/EvtId.hh" #include "EvtGenBase/EvtReport.hh" #include ! #include extern "C" { extern void lundarealawcont_(double *,int *,int *,int *, --- 27,33 ---- #include "EvtGenBase/EvtId.hh" #include "EvtGenBase/EvtReport.hh" #include ! #include extern "C" { extern void lundarealawcont_(double *,int *,int *,int *, *************** *** 89,95 **** void EvtLundAreaLaw::decay( EvtParticle *p){ - EvtParticle *pdaug[MAX_DAUG]; EvtVector4R p4[100]; double energy=p->mass(); --- 89,94 ---- Index: Class/EvtMelikhov.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtMelikhov.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtMelikhov.cc 7 Oct 2003 02:48:15 -0000 1.1.1.1 --- Class/EvtMelikhov.cc 12 Jan 2006 16:14:32 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtMelikhovFF.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtMelikhovFF.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtMelikhovFF.cc 7 Oct 2003 02:48:15 -0000 1.1.1.1 --- Class/EvtMelikhovFF.cc 12 Jan 2006 16:14:32 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include "EvtGenBase/EvtPatches.hh" #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtMelikhovFF.hh" *************** *** 37,45 **** double t, double mass, double *a1f, double *a2f, double *vf, double *a0f ){ ! double ma1,ra1,na1; ! double ma2,ra2,na2; ! double mv,rv,nv; if ( whichfit==1) { ma1 = 7.07; --- 38,46 ---- double t, double mass, double *a1f, double *a2f, double *vf, double *a0f ){ ! double ma1(0.0),ra1(0.0),na1(0.0); ! double ma2(0.0),ra2(0.0),na2(0.0); ! double mv(0.0),rv(0.0),nv(0.0); if ( whichfit==1) { ma1 = 7.07; Index: Class/EvtModelReg.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtModelReg.cc,v retrieving revision 1.5 retrieving revision 1.10 diff -c -r1.5 -r1.10 *** Class/EvtModelReg.cc 22 Mar 2004 05:52:49 -0000 1.5 --- Class/EvtModelReg.cc 4 Jun 2008 21:48:38 -0000 1.10 *************** *** 32,37 **** --- 32,38 ---- #include "EvtGenModels/EvtISGW2.hh" #include "EvtGenModels/EvtMelikhov.hh" #include "EvtGenModels/EvtSLPole.hh" + #include "EvtGenModels/EvtSLBKPole.hh" #include "EvtGenModels/EvtISGW.hh" #include "EvtGenModels/EvtBHadronic.hh" #include "EvtGenModels/EvtVSS.hh" *************** *** 88,93 **** --- 89,95 ---- #include "EvtGenModels/EvtBtoKpiCPiso.hh" #include "EvtGenModels/EvtSVSCPiso.hh" #include "EvtGenModels/EvtVVpipi.hh" + #include "EvtGenModels/EvtVVPIPI_WEIGHTED.hh" #include "EvtGenModels/EvtBTo4piCP.hh" #include "EvtGenModels/EvtBTo3piCP.hh" *************** *** 100,110 **** --- 102,118 ---- #include "EvtGenModels/EvtLNuGamma.hh" #include "EvtGenModels/EvtVub.hh" + #include "EvtGenModels/EvtVubHybrid.hh" #include "EvtGenModels/EvtPto3P.hh" #include "EvtGenModels/EvtKstarstargamma.hh" + // XXX Added by Attila Bergou XXX + #include "EvtGenModels/EvtMultibody.hh" + #include "EvtGenModels/EvtLundAreaLaw.hh" + #include "EvtGenModels/EvtVPHOtoVISRHi.hh" + //#ifndef EVTSTANDALONE //#include "EvtGenModels/EvtUclaII.hh" #include "EvtGenModels/EvtJetSet.hh" *************** *** 117,122 **** --- 125,131 ---- #include "EvtGenModels/EvtModelReg.hh" + EvtModelReg::EvtModelReg() { EvtModel &modelist=EvtModel::instance(); *************** *** 129,134 **** --- 138,144 ---- modelist.Register(new EvtISGW2); modelist.Register(new EvtMelikhov); modelist.Register(new EvtSLPole); + modelist.Register(new EvtSLBKPole); modelist.Register(new EvtHQET); modelist.Register(new EvtHQET2); modelist.Register(new EvtISGW); *************** *** 178,183 **** --- 188,194 ---- modelist.Register(new EvtHelAmp); modelist.Register(new EvtPartWave); modelist.Register(new EvtVVpipi); + modelist.Register(new EvtVVPIPI_WEIGHTED); modelist.Register(new EvtBsquark); modelist.Register(new EvtPhiDalitz); modelist.Register(new EvtVPHOtoV); *************** *** 193,201 **** --- 204,217 ---- modelist.Register(new EvtKstarstargamma); modelist.Register(new EvtVub); + modelist.Register(new EvtVubHybrid); modelist.Register(new EvtPto3P); modelist.Register(new EvtLundAreaLaw); + modelist.Register(new EvtVPHOtoVISRHi); + + // XXX Added by Attila J. Bergou XXX + modelist.Register(new EvtMultibody); //#ifndef EVTSTANDALONE // modelist.Register(new EvtUclaII); Index: Class/EvtMultibody.cc =================================================================== RCS file: Class/EvtMultibody.cc diff -N Class/EvtMultibody.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtMultibody.cc 6 Jun 2006 17:04:00 -0000 1.6 *************** *** 0 **** --- 1,74 ---- + #include "EvtGenBase/EvtGenKine.hh" + #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenBase/EvtResonance.hh" + #include "EvtGenBase/EvtResonance2.hh" + #include "EvtGenModels/EvtMultibody.hh" + #include "EvtGenBase/EvtConst.hh" + #include "EvtGenBase/EvtdFunction.hh" + #include "EvtGenBase/EvtKine.hh" + #include "EvtGenBase/EvtParticle.hh" + + EvtMultibody::~EvtMultibody() + { + if( _decayTree != NULL ) delete _decayTree; + _decayTree=NULL; + if( _ilist != NULL ) delete [] _ilist; + _ilist=NULL; + } + + void EvtMultibody::getName(std::string& model_name) + { + model_name = "D_MULTIBODY"; + } + + EvtDecayBase* EvtMultibody::clone() + { + return new EvtMultibody; + } + + void EvtMultibody::init() + { + int N = getNArg(); + + _decayTree = new EvtMTree( getDaugs(), getNDaug() ); + _ilist = new int[getNDaug()+1]; + + for(int i=0; iaddtree( getArgStr( ++i ) ); + } else { + report(ERROR,"EvtGen") + << "Syntax error at " << getArgStr( i ) << std::endl; + ::abort(); + } + } + } + + // Set the maximum probability amplitude - if function is left blank then the + // program will search for it. This however is not deterministic and therefore + // in the release cannot be in place. + void EvtMultibody::initProbMax() + { + // setProbMax(1.0); + } + + void EvtMultibody::decay( EvtParticle *p ) + { + // Initialize the phase space before doing anything else! + p->initializePhaseSpace(getNDaug(),getDaugs()); + + EvtSpinAmp amp = _decayTree->amplitude( p ); + + vector index = amp.iterallowedinit(); + vector spins = amp.dims(); + + do { + for( size_t i=0; i #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtPFermi.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtPFermi.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtPFermi.cc 7 Oct 2003 02:48:15 -0000 1.1.1.1 --- Class/EvtPFermi.cc 12 Jan 2006 16:14:32 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- //----------------------- // This Class's Header -- //----------------------- + #include "Experiment/Experiment.h" #include "EvtGenModels/EvtPFermi.hh" //--------------- Index: Class/EvtPHOTOS.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtPHOTOS.cc,v retrieving revision 1.2 retrieving revision 1.6 diff -c -r1.2 -r1.6 *** Class/EvtPHOTOS.cc 6 Dec 2003 00:48:56 -0000 1.2 --- Class/EvtPHOTOS.cc 19 Oct 2007 02:50:58 -0000 1.6 *************** *** 20,31 **** // //------------------------------------------------------------------------ // #include "EvtGenBase/EvtPatches.hh" #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtPhotonParticle.hh" #include "EvtGenBase/EvtPDL.hh" #include "EvtGenModels/EvtPHOTOS.hh" - #include extern "C" void begevtgenstorex_(int *,int *,int *,int *, int *,int *,int *,int *, --- 20,33 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include "EvtGenBase/EvtPatches.hh" + #include "EvtGenBase/EvtIdSet.hh" + #include "EvtGenBase/EvtReport.hh" #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtPhotonParticle.hh" #include "EvtGenBase/EvtPDL.hh" #include "EvtGenModels/EvtPHOTOS.hh" extern "C" void begevtgenstorex_(int *,int *,int *,int *, int *,int *,int *,int *, *************** *** 46,64 **** extern "C" void phoini_(); void EvtPHOTOS::doRadCorr( EvtParticle *p){ static int first=1; //added by Lange Jan4,2000 ! static EvtId GAMM=EvtPDL::getId("gamma"); ! if (first) { first=0; phoini_(); } int entry,eventnum,numparticle,istat,partnum,mother; int daugfirst,dauglast; --- 48,80 ---- extern "C" void phoini_(); + EvtPHOTOS::EvtPHOTOS(std::string photontype){ + + _photontype=photontype; + + } + void EvtPHOTOS::doRadCorr( EvtParticle *p){ static int first=1; //added by Lange Jan4,2000 ! //allow to set photon tupe ! static EvtId GAMM=EvtPDL::getId(_photontype); ! if (GAMM==EvtId(-1,-1)) { ! report(ERROR,"EvtGen") << "In EvtPHOTOS::doRadCorr():Particle:"<< ! _photontype<<" is not in EvtPDL"<getId() == vpho ) return; + if ( p->getNDaug() > 10 ) return; + px=0.0; py=0.0; pz=0.0; *************** *** 90,98 **** &px,&py,&pz,&e,&m,&x,&y,&z,&t); int i; ! for(i=0;igetNDaug();i++){ px=p->getDaug(i)->getP4().get(1); py=p->getDaug(i)->getP4().get(2); pz=p->getDaug(i)->getP4().get(3); --- 125,136 ---- &px,&py,&pz,&e,&m,&x,&y,&z,&t); int i; ! // std::cout << EvtPDL::name(p->getId()) <<" " ; for(i=0;igetNDaug();i++){ + //No quarks to photos + if (quarks.contains(p->getDaug(i)->getId())==1) continue; + px=p->getDaug(i)->getP4().get(1); py=p->getDaug(i)->getP4().get(2); pz=p->getDaug(i)->getP4().get(3); *************** *** 102,108 **** y=0.0; z=0.0; t=0.0; ! entry+=1; eventnum=1; numparticle+=1; --- 140,147 ---- y=0.0; z=0.0; t=0.0; ! ! // std::cout << EvtPDL::name(p->getDaug(i)->getId()) << " " ; entry+=1; eventnum=1; numparticle+=1; *************** *** 118,124 **** } ! //can't use heplst since the common block used by the BaBar //implementation of PHOTOS is renamed due to real*4 vs real*8 //problems. --- 157,163 ---- } ! // std::cout << std::endl; //can't use heplst since the common block used by the BaBar //implementation of PHOTOS is renamed due to real*4 vs real*8 //problems. *************** *** 129,135 **** entry=1; ! // report(INFO,"EvtGen") << "Doing photos " << EvtPDL::name(p->getId()) << std::endl; photos_(&entry); // report(INFO,"EvtGen") << "done\n"; begevtgengetx_(&entry,&eventnum,&numparticlephotos,&istat,&partnum, --- 168,174 ---- entry=1; ! // report(INFO,"EvtGen") << "Doing photos " << EvtPDL::name(p->getId()) << endl; photos_(&entry); // report(INFO,"EvtGen") << "done\n"; begevtgengetx_(&entry,&eventnum,&numparticlephotos,&istat,&partnum, *************** *** 137,143 **** &px,&py,&pz,&e,&m,&x,&y,&z,&t); ! //report(INFO,"EvtGen") << "numparticlephotos:"<getDaug(i)->setP4(new4mom); } --- 199,205 ---- new4mom.set(e,px,py,pz); ! p->getDaug(i)->setP4WithFSR(new4mom); } *************** *** 170,175 **** --- 209,216 ---- &mother,&daugfirst,&dauglast, &px,&py,&pz,&e,&m,&x,&y,&z,&t); + //Hack here to give the photon the mass of the generated particle + e=sqrt(mpho*mpho+px*px+py*py+pz*pz); new4mom.set(e,px,py,pz); //new4mom.dump(); *************** *** 177,183 **** EvtPhotonParticle* gamma; gamma=new EvtPhotonParticle; gamma->init(GAMM,new4mom); ! // report(INFO,"EvtGen") << gamma << " " << p << " "<< px << " " << py << " " << pz << " " << p->getNDaug() << " " << EvtPDL::name(p->getId())<<" " << entry << " " <addDaug(p); // p->getDaug(i)->set_type(EvtSpinType::PHOTON); --- 218,225 ---- EvtPhotonParticle* gamma; gamma=new EvtPhotonParticle; gamma->init(GAMM,new4mom); ! gamma->setFSRP4toZero(); ! // report(INFO,"EvtGen") << gamma << " " << p << " "<< px << " " << py << " " << pz << " " << p->getNDaug() << " " << EvtPDL::name(p->getId())<<" " << entry << " " <addDaug(p); // p->getDaug(i)->set_type(EvtSpinType::PHOTON); Index: Class/EvtPartWave.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtPartWave.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtPartWave.cc 7 Oct 2003 02:48:15 -0000 1.1.1.1 --- Class/EvtPartWave.cc 12 Jan 2006 16:14:32 -0000 1.2 *************** *** 21,26 **** --- 21,27 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 36,41 **** --- 37,43 ---- #include "EvtGenBase/EvtKine.hh" #include "EvtGenBase/EvtCGCoefSingle.hh" #include + using std::endl; EvtPartWave::~EvtPartWave() {} void EvtPartWave::getName(std::string& model_name){ *************** *** 60,72 **** int _nB=EvtSpinType::getSpinStates(EvtPDL::getSpinType(getDaug(0))); int _nC=EvtSpinType::getSpinStates(EvtPDL::getSpinType(getDaug(1))); - EvtId _idA=getParentId(); - EvtId _idB=getDaug(0); - EvtId _idC=getDaug(1); - if (verbose()){ report(INFO,"EvtGen")<<"_nA,_nB,_nC:" ! <<_nA<<","<<_nB<<","<<_nC<probMax(); if (verbose()){ ! report(INFO,"EvtGen")<<"Calculated probmax"< #include Index: Class/EvtPhsp.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtPhsp.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtPhsp.cc 7 Oct 2003 02:48:15 -0000 1.1.1.1 --- Class/EvtPhsp.cc 12 Jan 2006 16:14:33 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 60,66 **** //if ( p->getNDaug() != 0 ) { //Will end up here because maxrate multiplies by 1.2 // report(DEBUG,"EvtGen") << "In EvtPhsp: has " ! // <<" daugthers should not be here!"<getNDaug() != 0 ) { //Will end up here because maxrate multiplies by 1.2 // report(DEBUG,"EvtGen") << "In EvtPhsp: has " ! // <<" daugthers should not be here!"< #include #include *************** *** 31,36 **** --- 32,38 ---- #include "EvtGenBase/EvtDiracSpinor.hh" #include "EvtGenBase/EvtVector4C.hh" #include "EvtGenBase/EvtTensor4C.hh" + using std::fstream; EvtPi0Dalitz::~EvtPi0Dalitz() {} *************** *** 104,110 **** prob *=(1.0/( (0.768*0.768-m2)*(0.768*0.768-m2) +0.768*0.768*0.151*0.151)); ! // report(INFO,"EvtGen") << "prob is "<* EvtPto3P::createFactory(const EvtMultiChannelParser& parser) { // Compute the interval size EvtDalitzPlot plot = dp(); ! EvtDalitz2D ival(plot); ! ival.compute_size(10000); ! ! EvtAmpFactory* fact = new EvtPto3PAmpFactory(plot); ! fact->build(ival,parser); return fact; } --- 42,54 ---- return EvtDalitzPlot(EvtPDL::getMass(dau0),EvtPDL::getMass(dau1),EvtPDL::getMass(dau2),EvtPDL::getMass(parent)); } ! EvtAmpFactory* EvtPto3P::createFactory(const EvtMultiChannelParser& parser) { // Compute the interval size EvtDalitzPlot plot = dp(); ! EvtAmpFactory* fact = new EvtPto3PAmpFactory(plot); ! fact->build(parser,10000); return fact; } *************** *** 60,68 **** { std::vector v; assert(x.isValid()); ! // Calculate in the r.f. of AB ! double eA = x.e(A,AB); double eB = x.e(B,AB); double eC = x.e(C,AB); --- 57,65 ---- { std::vector v; assert(x.isValid()); ! // Calculate in the r.f. of AB ! double eA = x.e(A,AB); double eB = x.e(B,AB); double eC = x.e(C,AB); *************** *** 70,85 **** double pC = x.p(C,AB); double cos = x.cosTh(CA,AB); double sin = sqrt(1.0-cos*cos); ! ! EvtVector4R vA(eA,0,0,pA); EvtVector4R vB(eB,0,0,-pA); EvtVector4R vC(eC,0,pC*sin,pC*cos); - // Boost from rest frame of AB to rest-frame of decaying particle // vboost is the 4-momentum of frame being boosted from in the frame // being boosted into. ! EvtVector4R vboost = vA + vB + vC; vboost.set(1,-vboost.get(1)); vboost.set(2,-vboost.get(2)); --- 67,81 ---- double pC = x.p(C,AB); double cos = x.cosTh(CA,AB); double sin = sqrt(1.0-cos*cos); ! ! EvtVector4R vA(eA,0,0,pA); EvtVector4R vB(eB,0,0,-pA); EvtVector4R vC(eC,0,pC*sin,pC*cos); // Boost from rest frame of AB to rest-frame of decaying particle // vboost is the 4-momentum of frame being boosted from in the frame // being boosted into. ! EvtVector4R vboost = vA + vB + vC; vboost.set(1,-vboost.get(1)); vboost.set(2,-vboost.get(2)); *************** *** 87,113 **** vA.applyBoostTo(vboost); vB.applyBoostTo(vboost); vC.applyBoostTo(vboost); - // Rotate ! double alpha = EvtRandom::Flat( EvtConst::twoPi ); double beta = acos(EvtRandom::Flat( -1.0, 1.0 )); double gamma = EvtRandom::Flat( EvtConst::twoPi ); ! vA.applyRotateEuler( alpha, beta, gamma ); vB.applyRotateEuler( alpha, beta, gamma ); vC.applyRotateEuler( alpha, beta, gamma ); ! // Fill vector ! assert(v.size() == 0); v.push_back(vA); v.push_back(vB); v.push_back(vC); return v; ! } --- 83,109 ---- vA.applyBoostTo(vboost); vB.applyBoostTo(vboost); vC.applyBoostTo(vboost); // Rotate ! double alpha = EvtRandom::Flat( EvtConst::twoPi ); double beta = acos(EvtRandom::Flat( -1.0, 1.0 )); double gamma = EvtRandom::Flat( EvtConst::twoPi ); ! vA.applyRotateEuler( alpha, beta, gamma ); vB.applyRotateEuler( alpha, beta, gamma ); vC.applyRotateEuler( alpha, beta, gamma ); ! // Fill vector ! assert(v.size() == 0); v.push_back(vA); v.push_back(vB); v.push_back(vC); return v; ! } ! Index: Class/EvtPyGaGa.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtPyGaGa.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtPyGaGa.cc 7 Oct 2003 02:48:15 -0000 1.1.1.1 --- Class/EvtPyGaGa.cc 12 Jan 2006 16:14:33 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtDecayTable.hh" Index: Class/EvtPycont.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtPycont.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtPycont.cc 7 Oct 2003 02:48:15 -0000 1.1.1.1 --- Class/EvtPycont.cc 12 Jan 2006 16:14:33 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtDecayTable.hh" *************** *** 29,34 **** --- 30,36 ---- #include "EvtGenBase/EvtReport.hh" #include #include + using std::endl; extern "C" { extern void pystat_(int &); *************** *** 41,48 **** EvtPycont::~EvtPycont() { ! int i=1; ! pystat_(i); } void EvtPycont::getName(std::string& model_name) --- 43,50 ---- EvtPycont::~EvtPycont() { ! // int i=1; ! // pystat_(i); } void EvtPycont::getName(std::string& model_name) *************** *** 61,67 **** if ( getNArg() != 12 && getNArg() != 0 ) { report(ERROR,"EvtGen") << "EvtPYCONT expects " << " 12 arguments (d u s c b t e nu_e mu nu_mu tau nu_tau) but found: " ! << getNArg() < #include #include + using std::endl; + using std::fstream; + using std::ios; + using std::ofstream; + using std::resetiosflags; + using std::setiosflags; + using std::setw; using std::string; *************** *** 107,113 **** } } ! report(ERROR,"EvtGen") << "Error in destroying Pythia model!"<getId()).c_str()<getId()).c_str()<9999) { ! report(INFO,"EvtGen") << "Too many loops in EvtPythia!!!"<9999) { ! report(INFO,"EvtGen") << "Too many loops in EvtPythia!!!"<=0) && (EvtPDL::chargeConj(evtnum)!=evtnum)) --- 534,543 ---- } // RS output format changed to new PYTHIA style ! outdec << " " << setw(9) << lundkc; outdec << " "; outdec.width(namelength); ! outdec << setiosflags(ios::left) << sname; // RS: name for cc paricle if ((evtnum.getId()>=0) && (EvtPDL::chargeConj(evtnum)!=evtnum)) *************** *** 541,549 **** outdec << " "; } ! outdec << resetiosflags(std::ios::left); ! outdec << std::setw(3) << chg; ! outdec << std::setw(3) << cchg; outdec.width(3); if (evtnum.getId()>=0) { if (EvtPDL::chargeConj(evtnum)==evtnum) { --- 550,558 ---- outdec << " "; } ! outdec << resetiosflags(ios::left); ! outdec << setw(3) << chg; ! outdec << setw(3) << cchg; outdec.width(3); if (evtnum.getId()>=0) { if (EvtPDL::chargeConj(evtnum)==evtnum) { *************** *** 556,576 **** else{ outdec << 0; } ! outdec.setf(std::ios::fixed,std::ios::floatfield); outdec.precision(5); ! outdec << std::setw(12) << mass; ! outdec.setf(std::ios::fixed,std::ios::floatfield); ! outdec << std::setw(12) << width; ! outdec.setf(std::ios::fixed,std::ios::floatfield); outdec.width(12); ! if (std::fabs(width)<0.0000000001) { outdec << 0.0 ; } else{ outdec << maxwidth; } ! // scientific notation ... outdec << std::setw(14) << ctau; ! outdec.setf(std::ios::scientific,std::ios::floatfield); outdec << " "; outdec << ctau; outdec.width(3); --- 565,585 ---- else{ outdec << 0; } ! outdec.setf(ios::fixed,ios::floatfield); outdec.precision(5); ! outdec << setw(12) << mass; ! outdec.setf(ios::fixed,ios::floatfield); ! outdec << setw(12) << width; ! outdec.setf(ios::fixed,ios::floatfield); outdec.width(12); ! if (fabs(width)<0.0000000001) { outdec << 0.0 ; } else{ outdec << maxwidth; } ! // scientific notation ... outdec << setw(14) << ctau; ! outdec.setf(ios::scientific,ios::floatfield); outdec << " "; outdec << ctau; outdec.width(3); *************** *** 584,596 **** outdec << 0; outdec.width(3); outdec << stable; ! outdec << std::endl; outdec.width(0); //outdec.setf(0,0); } ! void EvtPythia::WritePythiaParticle(std::ofstream &outdec,EvtId ipar, EvtId iparname,int &first){ int ijetset; --- 593,605 ---- outdec << 0; outdec.width(3); outdec << stable; ! outdec << endl; outdec.width(0); //outdec.setf(0,0); } ! void EvtPythia::WritePythiaParticle(ofstream &outdec,EvtId ipar, EvtId iparname,int &first){ int ijetset; *************** *** 682,688 **** unknown=1; report(ERROR,"EvtGen") << "Pythia (pycomp) does not " << "know the particle:"<< ! EvtPDL::name(jetsetdecays[ijetset]->getDaugs()[i])<getDaugs()[i])<getParentId())<<" -> "; for(i=0;igetNDaug();i++){ report(ERROR,"") << EvtPDL::name(jetsetdecays[ijetset]->getDaugs()[i])<<" "; } ! report(ERROR,"")<=0) { // dflag=1; ! //report(INFO,"EvtGen") << EvtPDL::name(iparname) << " dflag=1 because channel>=0"<=0)){ --- 701,732 ---- unknown=1; report(ERROR,"EvtGen") << "Pythia (pycomp) does not " << "know the particle:"<< ! EvtPDL::name(ipar)<getParentId())<<" -> "; for(i=0;igetNDaug();i++){ report(ERROR,"") << EvtPDL::name(jetsetdecays[ijetset]->getDaugs()[i])<<" "; } ! report(ERROR,"")<=0) { // dflag=1; ! //report(INFO,"EvtGen") << EvtPDL::name(iparname) << " dflag=1 because channel>=0"<=0)){ *************** *** 730,736 **** outdec.width(5); outdec <<(int)jetsetdecays[ijetset]->getArgs()[0]; outdec.width(12); ! if (std::fabs(br)<0.000000001) { outdec <<"0.00000"; } else{ --- 739,745 ---- outdec.width(5); outdec <<(int)jetsetdecays[ijetset]->getArgs()[0]; outdec.width(12); ! if (fabs(br)<0.000000001) { outdec <<"0.00000"; } else{ *************** *** 746,752 **** outdec < + #include "EvtGenBase/EvtParticle.hh" + #include "EvtGenBase/EvtGenKine.hh" + #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenModels/EvtSLBKPole.hh"//modified + #include "EvtGenModels/EvtSLBKPoleFF.hh"//modified + #include "EvtGenBase/EvtSemiLeptonicScalarAmp.hh" + #include "EvtGenBase/EvtSemiLeptonicVectorAmp.hh" + #include "EvtGenBase/EvtSemiLeptonicTensorAmp.hh" + #include + + EvtSLBKPole::~EvtSLBKPole() {} + + void EvtSLBKPole::getName(std::string& model_name){ + + model_name="SLBKPOLE";//modified + + } + + + EvtDecayBase* EvtSLBKPole::clone(){//modified + + return new EvtSLBKPole; + + } + + void EvtSLBKPole::decay( EvtParticle *p ){//modified + + p->initializePhaseSpace(getNDaug(),getDaugs()); + + calcamp->CalcAmp(p,_amp2,SLBKPoleffmodel);//modified + return; + } + + void EvtSLBKPole::initProbMax(){ + + EvtId parnum,mesnum,lnum,nunum; + + parnum = getParentId(); + mesnum = getDaug(0); + lnum = getDaug(1); + nunum = getDaug(2); + + double mymaxprob = calcamp->CalcMaxProb(parnum,mesnum, + lnum,nunum,SLBKPoleffmodel);//modified + + setProbMax(mymaxprob); + + } + + + void EvtSLBKPole::init(){//modified + + checkNDaug(3); + + //We expect the parent to be a scalar + //and the daughters to be X lepton neutrino + + checkSpinParent(EvtSpinType::SCALAR); + checkSpinDaughter(1,EvtSpinType::DIRAC); + checkSpinDaughter(2,EvtSpinType::NEUTRINO); + + EvtSpinType::spintype mesontype=EvtPDL::getSpinType(getDaug(0)); + + SLBKPoleffmodel = new EvtSLBKPoleFF(getNArg(),getArgs());//modified + + if ( mesontype==EvtSpinType::SCALAR ) { + calcamp = new EvtSemiLeptonicScalarAmp; + } + if ( mesontype==EvtSpinType::VECTOR ) { + calcamp = new EvtSemiLeptonicVectorAmp; + } + if ( mesontype==EvtSpinType::TENSOR ) { + calcamp = new EvtSemiLeptonicTensorAmp; + } + + } + Index: Class/EvtSLBKPoleFF.cc =================================================================== RCS file: Class/EvtSLBKPoleFF.cc diff -N Class/EvtSLBKPoleFF.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtSLBKPoleFF.cc 6 Jun 2006 17:04:00 -0000 1.3 *************** *** 0 **** --- 1,276 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtSLBKPoleFF.cc + // + // Description: Routine to implement semileptonic form factors + // according to the model SLBKPoles + // + // Modification history: + // + // liheng October 20,2005 Module created + // + //------------------------------------------------------------------------ + // + #include "EvtGenBase/EvtPatches.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenModels/EvtSLBKPoleFF.hh"//modified + #include + #include "EvtGenBase/EvtPDL.hh" + #include + + EvtSLBKPoleFF::EvtSLBKPoleFF(int numarg, double *arglist) {//modified + numSLBKPoleargs = numarg;//modified + for (int i=0; i #include #include *************** *** 60,96 **** void EvtSLN::initProbMax(){ ! static EvtId EM=EvtPDL::getId("e-"); ! static EvtId MUM=EvtPDL::getId("mu-"); ! static EvtId TAUM=EvtPDL::getId("tau-"); ! static EvtId EP=EvtPDL::getId("e+"); ! static EvtId MUP=EvtPDL::getId("mu+"); ! static EvtId TAUP=EvtPDL::getId("tau+"); ! ! static EvtId DP=EvtPDL::getId("D+"); ! static EvtId DM=EvtPDL::getId("D-"); ! static EvtId BP=EvtPDL::getId("B+"); ! static EvtId BM=EvtPDL::getId("B-"); ! static EvtId DSP=EvtPDL::getId("D_s+"); ! static EvtId DSM=EvtPDL::getId("D_s-"); ! ! if (getParentId()==DP||getParentId()==DM){ ! if (getDaug(0)==TAUM||getDaug(0)==TAUP) setProbMax(18.2); ! if (getDaug(0)==MUM||getDaug(0)==MUP) setProbMax(0.35); ! } ! if (getParentId()==DSP||getParentId()==DSM){ ! if (getDaug(0)==TAUM||getDaug(0)==TAUP) setProbMax(18.2); ! if (getDaug(0)==MUM||getDaug(0)==MUP) setProbMax(0.35); ! if (getDaug(0)==EM||getDaug(0)==EP) setProbMax(0.035); ! } ! if (getParentId()==BP||getParentId()==BM){ ! if (getDaug(0)==TAUM||getDaug(0)==TAUP) setProbMax(625.0); ! if (getDaug(0)==MUM||getDaug(0)==MUP) setProbMax(3.0); ! if (getDaug(0)==EM||getDaug(0)==EP) setProbMax(0.00006); ! } ! } --- 61,72 ---- void EvtSLN::initProbMax(){ ! double M=EvtPDL::getMeanMass(getParentId()); ! double m=EvtPDL::getMeanMass(getDaug(0)); + double probMax=8.0*(M*M-m*m)*m*m; ! setProbMax(probMax); } Index: Class/EvtSLPole.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSLPole.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSLPole.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSLPole.cc 12 Jan 2006 16:14:33 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtSLPoleFF.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSLPoleFF.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSLPoleFF.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSLPoleFF.cc 12 Jan 2006 16:14:34 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include "EvtGenBase/EvtPatches.hh" #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtSLPoleFF.hh" Index: Class/EvtSSDCP.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSSDCP.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSSDCP.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSSDCP.cc 12 Jan 2006 16:14:34 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // F. Sandrelli, Fernando M-V March 1, 2002 Debugged and added z parameter (CPT violation) //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtRandom.hh" *************** *** 30,35 **** --- 31,37 ---- #include "EvtGenModels/EvtSSDCP.hh" #include #include "EvtGenBase/EvtConst.hh" + using std::endl; EvtSSDCP::~EvtSSDCP() {} *************** *** 61,68 **** // report(ERROR, "EvtGen") << "EvtSSDCP cannot decay " // << EvtPDL::name(getParentId()) // << ". Must be specified to decay" ! // << " only B0 or a B0B ." << std::endl; ! // report(ERROR,"EvtGen") << "Will terminate execution!"<=12){ + _eigenstate=false; _A_fbar=getArg(8)*EvtComplex(cos(getArg(9)),sin(getArg(9))); _Abar_fbar=getArg(10)*EvtComplex(cos(getArg(11)),sin(getArg(11))); } *************** *** 119,124 **** --- 122,129 ---- } // FS substituted next 2 lines... + + // // _gamma=EvtPDL::getctau(EvtPDL::getId("B0")); //units of 1/mm //_dgamma=_gamma*0.5*_dgog; *************** *** 130,145 **** if (verbose()){ report(INFO,"EvtGen") << "SSD_CP will generate CP/CPT violation:" ! << std::endl << std::endl << " " << EvtPDL::name(getParentId()).c_str() << " --> " << EvtPDL::name(getDaug(0)).c_str() << " + " ! << EvtPDL::name(getDaug(1)).c_str() << std::endl << std::endl ! << "using parameters:" << std::endl << std::endl ! << " delta(m) = " << _dm << " hbar/ps" << std::endl ! << "dGamma = " << _dgamma <<" ps-1" < " << EvtPDL::name(getDaug(0)).c_str() << " + " ! << EvtPDL::name(getDaug(1)).c_str() << endl << endl ! << "using parameters:" << endl << endl ! << " delta(m) = " << _dm << " hbar/ps" << endl ! << "dGamma = " << _dgamma <<" ps-1" < ! // EvtComplex barBB=_qoverp*0.5*(expL-expH); // ! // EvtComplex BbarB=_poverq*0.5*(expL-expH); // ! // EvtComplex barBbarB=BB; // // FS redefinition of these guys... (See BAD #188 eq.35 for ref.) // q/p is taken as in the BaBar Phys. Book (opposite sign wrt ref.) EvtComplex BB=gp+_z*gm; // ! EvtComplex barBB=-sqz*_qoverp*gm; // ! EvtComplex BbarB=-sqz*_poverq*gm; // EvtComplex barBbarB=gp-_z*gm; // if (!flip){ if (other_b==B0B){ //at t=0 we have a B0 ! //report(INFO,"EvtGen") << "B0B"< ! //EvtComplex barBB=_qoverp*0.5*(expL-expH); // ! //EvtComplex BbarB=_poverq*0.5*(expL-expH); // ! //EvtComplex barBbarB=BB; // // FS redefinition of these guys... (See BAD #188 eq.35 for ref.) // q/p is taken as in the BaBar Phys. Book (opposite sign wrt ref.) EvtComplex BB=gp+_z*gm; // ! EvtComplex barBB=sqz*_qoverp*gm; // ! EvtComplex BbarB=sqz*_poverq*gm; // EvtComplex barBbarB=gp-_z*gm; // if (!flip){ if (other_b==B0B){ //at t=0 we have a B0 ! //report(INFO,"EvtGen") << "B0B"< #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtSSSCPT.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSSSCPT.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSSSCPT.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSSSCPT.cc 12 Jan 2006 16:14:34 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtSSSCPpng.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSSSCPpng.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSSSCPpng.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSSSCPpng.cc 12 Jan 2006 16:14:34 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtRandom.hh" Index: Class/EvtSTS.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSTS.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSTS.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSTS.cc 12 Jan 2006 16:14:34 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtSTSCP.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSTSCP.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSTSCP.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSTSCP.cc 12 Jan 2006 16:14:34 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtSVPCP.cc =================================================================== RCS file: Class/EvtSVPCP.cc diff -N Class/EvtSVPCP.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtSVPCP.cc 12 Jan 2006 16:14:35 -0000 1.1 *************** *** 0 **** --- 1,163 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // + // Module: EvtSVPCP.cc + // + // Description: Routine to decay scalar -> vectors+photon + // including CP violation effects + // + // Modification history: + // + // Maurizio pierini Nov 11, 2003 Module created + // + //------------------------------------------------------------------------ + // + #include "Experiment/Experiment.h" + #include + #include "EvtGenBase/EvtParticle.hh" + #include "EvtGenBase/EvtGenKine.hh" + #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtVector4R.hh" + #include "EvtGenBase/EvtVector4C.hh" + #include "EvtGenBase/EvtTensor4C.hh" + #include "EvtGenBase/EvtTensor3C.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenBase/EvtComplex.hh" + #include "EvtGenModels/EvtSVPCP.hh" + #include "EvtGenBase/EvtId.hh" + #include "EvtGenBase/EvtCPUtil.hh" + #include + #include "EvtGenBase/EvtConst.hh" + + EvtSVPCP::~EvtSVPCP() {} + + void EvtSVPCP::getName(std::string& model_name){ + + model_name="SVP_CP"; + + } + + + EvtDecayBase* EvtSVPCP::clone(){ + + return new EvtSVPCP; + + } + + void EvtSVPCP::initProbMax(){ + + setProbMax(2*(getArg(3)*getArg(3)+getArg(5)*getArg(5))); + + } + + + void EvtSVPCP::init(){ + + // check that there are 7 arguments + checkNArg(7); + checkNDaug(2); + + checkSpinParent(EvtSpinType::SCALAR); + + checkSpinDaughter(0,EvtSpinType::VECTOR); + checkSpinDaughter(1,EvtSpinType::PHOTON); + + } + + void EvtSVPCP::decay( EvtParticle *p ){ + + static EvtId B0=EvtPDL::getId("B0"); + static EvtId B0B=EvtPDL::getId("anti-B0"); + + double t; + EvtId other_b; + + EvtCPUtil::OtherB(p,t,other_b); + + EvtComplex G1P,G1M, G1_T_even, G1_T_odd; + + double norm = getArg(3)*getArg(3)+getArg(5)*getArg(5); + + G1P=EvtComplex(getArg(3)*cos(getArg(4))/norm,getArg(3)*sin(getArg(4))/norm); + G1M=EvtComplex(getArg(5)*cos(getArg(6))/norm,getArg(5)*sin(getArg(6))/norm); + + G1_T_even = (G1P+G1M)/sqrt(2.0); + G1_T_odd = (G1P-G1M)/sqrt(2.0); + + EvtComplex lambda_km =EvtComplex(cos(-2*getArg(0)),sin(-2*getArg(0))); + + double cdmt=cos(getArg(1)*t/(2*EvtConst::c)); + double sdmt=sin(getArg(1)*t/(2*EvtConst::c)); + + EvtComplex cG1_T_even,cG1_T_odd; + + if (other_b==B0B){ + cG1_T_even = G1_T_even*(cdmt+lambda_km*EvtComplex(0.0,getArg(2)*sdmt)); + cG1_T_odd = G1_T_odd*(cdmt-lambda_km*EvtComplex(0.0,getArg(2)*sdmt)); + } + if (other_b==B0){ + cG1_T_even = G1_T_even*(cdmt+(1.0/lambda_km)*EvtComplex(0.0,getArg(2)*sdmt)); + cG1_T_odd =-G1_T_odd*(cdmt-(1.0/lambda_km)*EvtComplex(0.0,getArg(2)*sdmt)); + } + + EvtComplex hp, hm, h0; + + // This part is adopted from EvtSVVHel and since there is + // a photon that can not have helicity 0 this is put in by + // setting the h0 amplitude to 0. + hm=(cG1_T_even-cG1_T_odd)/sqrt(2.0); + hp=(cG1_T_even+cG1_T_odd)/sqrt(2.0); + h0=EvtComplex(0.0,0.0); + + EvtParticle *v1,*ph; + + p->initializePhaseSpace(getNDaug(),getDaugs()); + v1 = p->getDaug(0); + ph = p->getDaug(1); + EvtVector4R momv1 = v1->getP4(); + EvtVector4R momph = ph->getP4(); + + EvtTensor4C d,g; + + g.setdiag(1.0,-1.0,-1.0,-1.0); + + EvtVector4R v,vp; + + v=momv1/momv1.d3mag(); + vp=(momv1+momph)/(momv1+momph).mass(); + + d=((1.0/sqrt(3.0))*(h0-(hp+hm))*(-1.0/sqrt(3.0)))*g+ + ((1.0/sqrt(2.0))*(hp-hm)*EvtComplex(0.0,1.0)*(sqrt(1.0/2.0)))*dual(directProd(v,vp))+ + (sqrt(2.0/3.0)*(h0+0.5*(hp+hm))*sqrt(3.0/2.0))*(directProd(v,v)+(1.0/3.0)*g); + + EvtVector4C ep0,ep1,ep2; + + ep0=d.cont1(v1->eps(0).conj()); + ep1=d.cont1(v1->eps(1).conj()); + ep2=d.cont1(v1->eps(2).conj()); + + EvtVector4C ep20,ep21,ep22; + + ep20=ph->epsParentPhoton(0).conj(); + ep21=ph->epsParentPhoton(1).conj(); + + vertex(0,0,ep0*ep20); + vertex(0,1,ep0*ep21); + + vertex(1,0,ep1*ep20); + vertex(1,1,ep1*ep21); + + vertex(2,0,ep2*ep20); + vertex(2,1,ep2*ep21); + + + return ; + + } + Index: Class/EvtSVPHelAmp.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSVPHelAmp.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSVPHelAmp.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSVPHelAmp.cc 12 Jan 2006 16:14:35 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtSVS.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSVS.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSVS.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSVS.cc 12 Jan 2006 16:14:35 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 69,75 **** p->initializePhaseSpace(getNDaug(),getDaugs()); //report(INFO,"EvtGen") << "par " << p->getP4() << " " << p->getDaug(0)->getP4() << " " << // p->getDaug(1)->getP4() << " " << p->mass() << " " << ! // p->getDaug(0)->mass() << " " << p->getDaug(1)->mass() <getDaug(0); double massv = v->mass(); --- 70,76 ---- p->initializePhaseSpace(getNDaug(),getDaugs()); //report(INFO,"EvtGen") << "par " << p->getP4() << " " << p->getDaug(0)->getP4() << " " << // p->getDaug(1)->getP4() << " " << p->mass() << " " << ! // p->getDaug(0)->mass() << " " << p->getDaug(1)->mass() <getDaug(0); double massv = v->mass(); Index: Class/EvtSVSCP.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSVSCP.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSVSCP.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSVSCP.cc 12 Jan 2006 16:14:35 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtSVSCPLH.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSVSCPLH.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSVSCPLH.cc 7 Oct 2003 02:48:16 -0000 1.1.1.1 --- Class/EvtSVSCPLH.cc 12 Jan 2006 16:14:35 -0000 1.2 *************** *** 20,25 **** --- 20,26 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 31,36 **** --- 32,38 ---- #include #include "EvtGenBase/EvtConst.hh" #include "EvtGenBase/EvtVector4C.hh" + using std::endl; EvtSVSCPLH::~EvtSVSCPLH() {} *************** *** 72,82 **** _Abarf=getArg(6)*exp(EvtComplex(0.0,getArg(7))); if (verbose()){ ! report(INFO,"EvtGen")<<":EvtSVSCPLH:dm="<<_dm< #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtRandom.hh" *************** *** 113,119 **** double t; EvtId other_b; ! int charged; int first_time=0; int flip=0; --- 114,120 ---- double t; EvtId other_b; ! int charged(0); int first_time=0; int flip=0; Index: Class/EvtSVSNONCPEIGEN.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSVSNONCPEIGEN.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSVSNONCPEIGEN.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtSVSNONCPEIGEN.cc 12 Jan 2006 16:14:35 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtRandom.hh" *************** *** 52,71 **** checkNArg(11,7); checkNDaug(2); - if ( getParentId() != EvtPDL::getId("B0") ) { - report(ERROR, "EvtGen") << "EvtSVSNONCPEIGEN cannot decay " - << EvtPDL::name(getParentId()).c_str() - << ". Must be specified to decay" - << " only B0 or a B0 alias." << std::endl; - report(ERROR,"EvtGen") << "Will terminate execution!"<initializePhaseSpace(2, daugs); - v= p->getDaug(0); - EvtVector4R momv = v->getP4(); - EvtVector4R moms = p->getDaug(1)->getP4(); - EvtComplex amp; ! double tag = EvtRandom::Flat(0.0,1.0); ! if (tag < 0.5) { ! EvtCPUtil::OtherB(p,t,other_b,1.0); ! } ! else { ! EvtCPUtil::OtherB(p,t,other_b,0.0); ! } if (!flip) { if (other_b==B0B){ ! ! amp=_A_f*cos(_dm*t/(2*EvtConst::c))+ ! EvtComplex(cos(-2.0*_phickm),sin(-2.0*_phickm))* ! EvtComplex(0.0,1.0)*_Abar_f*sin(_dm*t/(2*EvtConst::c)); } if (other_b==B0){ ! ! amp=_A_f*EvtComplex(cos(2.0*_phickm),sin(2.0*_phickm))* ! EvtComplex(0.0,1.0)*sin(_dm*t/(2*EvtConst::c))+ ! _Abar_f*cos(_dm*t/(2*EvtConst::c)); } } else{ if (other_b==B0B){ ! ! amp=_A_fbar*cos(_dm*t/(2*EvtConst::c))+ ! EvtComplex(cos(-2.0*_phickm),sin(-2.0*_phickm))* ! EvtComplex(0.0,1.0)*_Abar_fbar*sin(_dm*t/(2*EvtConst::c)); } if (other_b==B0){ ! ! amp=_A_fbar*EvtComplex(cos(2.0*_phickm),sin(2.0*_phickm))* ! EvtComplex(0.0,1.0)*sin(_dm*t/(2*EvtConst::c))+ ! _Abar_fbar*cos(_dm*t/(2*EvtConst::c)); } } - EvtVector4R p4_parent; ! p4_parent=momv+moms; double norm=momv.mass()/(momv.d3mag()*p->mass()); --- 91,140 ---- EvtId other_b; EvtId daugs[2]; ! // MB: flip selects the final of the decay ! int flip = ((p->getId() == B0) ? 0 : 1); ! daugs[0]=getDaug(0); ! daugs[1]=getDaug(1); ! p->initializePhaseSpace(2, daugs); ! EvtCPUtil::OtherB(p,t,other_b,0.5); EvtComplex amp; + double dmt2 = (_dm * t) / (2 * EvtConst::c); + EvtComplex ePlusIPhi(cos(_phickm), sin(_phickm)); + EvtComplex eMinusIPhi(cos(-_phickm), -sin(_phickm)); ! // flip == 0 : D-rho+ ! // flip == 1 : D+rho- if (!flip) { if (other_b==B0B){ ! // At t=0 we have a B0 ! amp = cos(dmt2)*_A_f + eMinusIPhi*EvtComplex(0.0,sin(dmt2))*_Abar_f; } if (other_b==B0){ ! // At t=0 we have a B0bar ! amp = ePlusIPhi*EvtComplex(0.0,sin(dmt2))*_A_f + cos(dmt2)*_Abar_f; } } else{ if (other_b==B0B){ ! // At t=0 we have a B0 ! amp = cos(dmt2)*_A_fbar + eMinusIPhi*EvtComplex(0.0,sin(dmt2))*_Abar_fbar; } if (other_b==B0){ ! // At t=0 we have a B0bar ! amp = ePlusIPhi*EvtComplex(0.0,sin(dmt2))*_A_fbar + cos(dmt2)*_Abar_fbar; } } ! EvtParticle *v; ! v= p->getDaug(0); ! ! EvtVector4R momv = p->getDaug(0)->getP4(); ! EvtVector4R moms = p->getDaug(1)->getP4(); ! EvtVector4R p4_parent=momv+moms; double norm=momv.mass()/(momv.d3mag()*p->mass()); Index: Class/EvtSVVCP.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSVVCP.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSVVCP.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtSVVCP.cc 12 Jan 2006 16:14:35 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtSVVCPLH.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSVVCPLH.cc,v retrieving revision 1.1.1.1 retrieving revision 1.3 diff -c -r1.1.1.1 -r1.3 *** Class/EvtSVVCPLH.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtSVVCPLH.cc 6 Jun 2006 17:04:00 -0000 1.3 *************** *** 20,25 **** --- 20,26 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 31,36 **** --- 32,38 ---- #include "EvtGenBase/EvtId.hh" #include #include "EvtGenBase/EvtConst.hh" + using std::endl; EvtSVVCPLH::~EvtSVVCPLH() {} *************** *** 95,107 **** static double ctauL=EvtPDL::getctau(EvtPDL::getId("B_s0L")); static double ctauH=EvtPDL::getctau(EvtPDL::getId("B_s0H")); ! static double ctau=ctauL #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 101,107 **** v2 = parent->getDaug(1); EvtVector4R momv1 = v1->getP4(); ! EvtVector4R momv2 = v2->getP4(); EvtVector3R v1dir(momv1.get(1),momv1.get(2),momv1.get(3)); v1dir=v1dir/v1dir.d3mag(); --- 102,108 ---- v2 = parent->getDaug(1); EvtVector4R momv1 = v1->getP4(); ! //EvtVector4R momv2 = v2->getP4(); EvtVector3R v1dir(momv1.get(1),momv1.get(2),momv1.get(3)); v1dir=v1dir/v1dir.d3mag(); Index: Class/EvtSVVNONCPEIGEN.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSVVNONCPEIGEN.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSVVNONCPEIGEN.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtSVVNONCPEIGEN.cc 12 Jan 2006 16:14:36 -0000 1.2 *************** *** 10,33 **** // // Module: EvtSVVNONCPEIGEN.cc // ! // Description: Routine to decay scalar -> vector vector // and has CP violation. // ! // There are 27 arguments ! The first three are dm, phase1 ! // and phase2. dm is the B0-B0bar mass difference. Phases 1 ! // and 2 are the CKM phases relevant for the particular mode, // eg for B-->DstRho phase1 is beta and phase2 is gamma. - // The other 24 aruguments are the 4 amplitudes in the order: - // A_f, Abar_f, A_fbar, Abar_fbar. Each amplitude has its 3 - // helicity states in the order +, 0, -, which are each - // specified by a magnitude and a phase. // // // Modification history: // Ajit Kurup 9 March 2001 Module created (from EvtSVSNONCPEIGEN) ! // //------------------------------------------------------------------------ // #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtRandom.hh" --- 10,60 ---- // // Module: EvtSVVNONCPEIGEN.cc // ! // Description: Routine to decay scalar -> vector vector // and has CP violation. // ! // This model does all the ckm-suppressed decays and mixing for you. It randomly 'overwrites' ! // any reco or tagging state as set in the Y(4S) decay model (VSS_(B)MIX) with its own generated states. ! // ! // As such, the corresponding dec file requires only one decay-mode description, for example: ! // Decay MyB0 ! // 1.000 rho+ MyD*- SVV_NONCPEIGEN dm beta gamma 0.322 0.31 0.941 0 0.107 1.42 0.02 0 0.02 0 0.02 0 ; ! // EndDecay ! // and furthermore Y(4S) only needs to decay to B0's (or B0bar's). ! // The decay above should be a CKM-favored mode (eg. B0->D*-rho+ or B0bar->D*+rho-). ! // All ckm-suppressed decays and the mixing are derived from this line in the ::Decay function. ! // ! // There are 15 or 27 arguments. The first three are dm, phase1 ! // and phase2. dm is the B0-B0bar mass difference. Phases 1 ! // and 2 are the CKM weak phases relevant for the particular mode, // eg for B-->DstRho phase1 is beta and phase2 is gamma. // + // The next arguments are the 2 amplitudes (= 12 input parameters) + // in the order: A_f, Abar_f. In the example above, the 'A_f' amplitude now + // stands for the ckm-favored decay 'B0->D*-rho+', and 'Abar_f' stands for 'B0bar->D*-rho+' + // + // Each amplitude has its 3 helicity states in the order +, 0, -, which are each + // specified by a magnitude and a strong phase. + // + // The last 2 arguments A_fbar and Abar_fbar (=12 input parameters) are not necessary, + // but can included if one wants to set them differently from A_f, Abar_f. + // + // Mind you that Hbar_+- = H_-+ (ignoring the weak phase, which flips sign). + // It is custumary to select one set of helicity states (eg H_+-) and to adopt these for + // the CP-conjugate decays as well (ie. depict Hbar_-+ with H_+-), which is the interpretation + // we use for the input-parameters above. + // However, the angular decay in EvtGen is just a formula in which helicity amplitudes are 'plugged' in, + // making no difference between B0 or B0bar decays. In the model below we (thus) account for the +- + // flipping between B0 and B0bar. // + // // Modification history: // Ajit Kurup 9 March 2001 Module created (from EvtSVSNONCPEIGEN) ! // Max Baak 01/16/2004 Fix of Helicity amplitude ordering. ! // Decay also works for B0bar decays. //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtRandom.hh" *************** *** 62,99 **** checkNArg(27,15); checkNDaug(2); - EvtSpinType::spintype parenttype = EvtPDL::getSpinType(getParentId()); - - if ( getParentId() != EvtPDL::getId("B0") ) { - report(ERROR,"EvtGen") << "EvtSVVNONCPEIGEN decay " - << EvtPDL::name(getParentId()).c_str() - << ". Must be specified to decay " - << "only B0 or a B0 alias. " << std::endl; - report(ERROR,"EvtGen") << "Will terminate execution!"<initializePhaseSpace(2,daugs); ! double tag = EvtRandom::Flat(0.0,1.0); ! if (tag < 0.5) { ! EvtCPUtil::OtherB(p,t,other_b,1.0); ! } ! else { ! EvtCPUtil::OtherB(p,t,other_b,0.0); ! } EvtComplex amp[3]; double dmt2 = getArg(0) * t / (2 * EvtConst::c); ! double phiCKM = 2.0 * getArg(1) + getArg(2); EvtComplex ePlusIPhi(cos(phiCKM), sin(phiCKM)); EvtComplex eMinusIPhi(cos(-phiCKM), sin(-phiCKM)); if (!flip) { if (other_b==B0B){ ! for (int i=0; i<3; ++i){ ! amp[i] = _A_f[i] * cos(dmt2)+ ! eMinusIPhi * EvtComplex(0.0,1.0) * _A_f[i+3] * sin(dmt2); } } if (other_b==B0){ ! for(int i=0; i<3; ++i){ ! amp[i] = _A_f[i] * ePlusIPhi * EvtComplex(0.0,1.0) * sin(dmt2) + ! _A_f[i+3] * cos(dmt2); } } ! } ! else{ if (other_b==B0B){ ! for(int i=0; i<3; ++i){ ! amp[i] = _A_f[i+6] * cos(dmt2) + ! eMinusIPhi * EvtComplex(0.0,1.0) * _A_f[i+9] * sin(dmt2); } } if (other_b==B0){ ! for(int i=0; i<3; ++i){ ! amp[i] = _A_f[i+6] * ePlusIPhi * EvtComplex(0.0,1.0) * sin(dmt2)+ ! _A_f[i+9]*cos(dmt2); } } } --- 137,191 ---- EvtId other_b; EvtId daugs[2]; + // MB: flip selects the final of the decay + int flip = ((p->getId() == B0) ? 0 : 1); + daugs[0]=getDaug(0); + daugs[1]=getDaug(1); p->initializePhaseSpace(2,daugs); ! EvtCPUtil::OtherB(p,t,other_b,0.5); EvtComplex amp[3]; double dmt2 = getArg(0) * t / (2 * EvtConst::c); ! double phiCKM = (2.0 * getArg(1) + getArg(2)); // 2b+g EvtComplex ePlusIPhi(cos(phiCKM), sin(phiCKM)); EvtComplex eMinusIPhi(cos(-phiCKM), sin(-phiCKM)); + // flip == 0 : D*-rho+ + // flip == 1 : D*+rho- + if (!flip) { if (other_b==B0B){ ! // At t=0 we have a B0 ! for (int i=0; i<3; ++i) { ! amp[i] = _A_f[i]*cos(dmt2) + eMinusIPhi*EvtComplex(0.0,sin(dmt2))*_A_f[i+3]; } } if (other_b==B0){ ! // At t=0 we have a B0bar ! for(int i=0; i<3; ++i) { ! amp[i] = _A_f[i]*ePlusIPhi*EvtComplex(0.0,sin(dmt2)) + _A_f[i+3]*cos(dmt2); } } ! } else{ if (other_b==B0B){ ! // At t=0 we have a B0 ! ! // M.Baak 01/16/2004 ! // Note: \bar{H}+- = H-+ ! // If one wants to use the correct helicities for B0 and B0bar decays but the same formula-notation (as done in EvtSVV_HelAmp), ! // count the B0bar helicities backwards. (Equivalently, one could flip the chi angle.) ! ! for(int i=0; i<3; ++i) { ! amp[i] = _A_f[8-i]*cos(dmt2) + eMinusIPhi*EvtComplex(0.0,sin(dmt2))*_A_f[11-i]; } } if (other_b==B0){ ! // At t=0 we have a B0bar ! for(int i=0; i<3; ++i) { ! amp[i] = _A_f[8-i] * ePlusIPhi * EvtComplex(0.0,sin(dmt2)) + _A_f[11-i]*cos(dmt2); } } } Index: Class/EvtSingleParticle.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtSingleParticle.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtSingleParticle.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtSingleParticle.cc 12 Jan 2006 16:14:36 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtRandom.hh" *************** *** 26,31 **** --- 27,33 ---- #include "EvtGenBase/EvtReport.hh" #include #include "EvtGenBase/EvtConst.hh" + using std::endl; EvtSingleParticle::~EvtSingleParticle() {} *************** *** 95,112 **** }else{ report(ERROR,"EvtGen") << "EvtSingleParticle generator expected " ! << " 6, 4, or 2 arguments but found:"< p > " << pmin < costheta > " << cthetamin < phi > " << phimin < p > " << pmin < costheta > " << cthetamin < phi > " << phimin < #include #include Index: Class/EvtTSS.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtTSS.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtTSS.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtTSS.cc 12 Jan 2006 16:14:36 -0000 1.2 *************** *** 30,35 **** --- 30,36 ---- // Created: Nov 24, 1996 // // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtVector4C.hh" #include "EvtGenBase/EvtParticle.hh" Index: Class/EvtTVSPwave.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtTVSPwave.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtTVSPwave.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtTVSPwave.cc 12 Jan 2006 16:14:36 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtTauHadnu.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtTauHadnu.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtTauHadnu.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtTauHadnu.cc 12 Jan 2006 16:14:36 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include #include *************** *** 30,35 **** --- 31,37 ---- #include "EvtGenBase/EvtReport.hh" #include "EvtGenBase/EvtVector4C.hh" #include "EvtGenBase/EvtIdSet.hh" + using std::endl; EvtTauHadnu::~EvtTauHadnu() {} *************** *** 91,101 **** } if ( !validndaug ) { ! report(ERROR,"EvtGen") << "Have not yet implemented this final state in TAUHADNU model" << std::endl; ! report(ERROR,"EvtGen") << "Ndaug="<getDaug(getNDaug()-1); - EvtVector4R momscalar = p->getDaug(0)->getP4(); //get the leptonic current EvtVector4C tau1, tau2; --- 122,127 ---- *************** *** 148,155 **** EvtVector4R q1 = p->getDaug(0)->getP4(); EvtVector4R q2 = p->getDaug(1)->getP4(); - double m1=p->getDaug(0)->mass(); - double m2=p->getDaug(1)->mass(); hadCurr = Fpi(q1,q2)*(q1-q2); --- 149,154 ---- *************** *** 165,171 **** //figure out which is the different charged pi //want it to be q3 ! int diffPi,samePi1,samePi2; if ( getDaug(0) == getDaug(1) ) {diffPi=2; samePi1=0; samePi2=1;} if ( getDaug(0) == getDaug(2) ) {diffPi=1; samePi1=0; samePi2=2;} if ( getDaug(1) == getDaug(2) ) {diffPi=0; samePi1=1; samePi2=2;} --- 164,170 ---- //figure out which is the different charged pi //want it to be q3 ! int diffPi(0),samePi1(0),samePi2(0); if ( getDaug(0) == getDaug(1) ) {diffPi=2; samePi1=0; samePi2=1;} if ( getDaug(0) == getDaug(2) ) {diffPi=1; samePi1=0; samePi2=2;} if ( getDaug(1) == getDaug(2) ) {diffPi=0; samePi1=1; samePi2=2;} *************** *** 194,204 **** if ( !foundHadCurr ) { ! report(ERROR,"EvtGen") << "Have not yet implemented this final state in TAUHADNU model" << std::endl; ! report(ERROR,"EvtGen") << "Ndaug="<pipi decay --- 226,233 ---- double m1=q1.mass(); double m2=q2.mass(); ! ! EvtVector4R Q = q1 + q2; double mQ2= Q*Q; // momenta in the rho->pipi decay Index: Class/EvtTauScalarnu.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtTauScalarnu.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtTauScalarnu.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtTauScalarnu.cc 12 Jan 2006 16:14:36 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include #include Index: Class/EvtTauVectornu.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtTauVectornu.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtTauVectornu.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtTauVectornu.cc 12 Jan 2006 16:14:36 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include #include Index: Class/EvtTaulnunu.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtTaulnunu.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtTaulnunu.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtTaulnunu.cc 12 Jan 2006 16:14:37 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include #include Index: Class/EvtVPHOtoVISR.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVPHOtoVISR.cc,v retrieving revision 1.5 retrieving revision 1.9 diff -c -r1.5 -r1.9 *** Class/EvtVPHOtoVISR.cc 29 Mar 2004 04:38:31 -0000 1.5 --- Class/EvtVPHOtoVISR.cc 6 Jun 2006 17:04:00 -0000 1.9 *************** *** 46,53 **** void EvtVPHOtoVISR::init(){ ! // check that there are 0 or 1 arguments ! checkNArg(0,1); // check that there are 2 daughters checkNDaug(2); --- 46,53 ---- void EvtVPHOtoVISR::init(){ ! // check that there are 0 or 2 arguments ! checkNArg(0,2); // check that there are 2 daughters checkNDaug(2); *************** *** 77,86 **** double alpha=1/137.0; double beta=(L-1)*2.0*alpha/EvtConst::pi; ! //Hardcoded threshold mass of the resonance decay. ! double md=1.87; ! double pgmax=(s-4.0*md*md)/(4.0*md); double pgz=0.99*pgmax*exp(log(EvtRandom::Flat(1.0))/beta); --- 77,93 ---- double alpha=1/137.0; double beta=(L-1)*2.0*alpha/EvtConst::pi; ! //This uses the fact that there is a daughter of the ! //psi(3770) ! assert(p->getDaug(0)->getDaug(0)!=0); ! double md=EvtPDL::getMeanMass(p->getDaug(0)->getDaug(0)->getId()); ! static double mD0=EvtPDL::getMeanMass(EvtPDL::getId("D0")); ! static double mDp=EvtPDL::getMeanMass(EvtPDL::getId("D+")); ! ! double pgmax=(s-4.0*md*md)/(2.0*w); ! ! assert(pgmax>0.0); double pgz=0.99*pgmax*exp(log(EvtRandom::Flat(1.0))/beta); *************** *** 96,103 **** --- 103,113 ---- double ed=mres/2.0; + assert(ed>md); + double pd=sqrt(ed*ed-md*md); + //std::cout << "k, mres, w, md, ed, pd:"<getDaug(0)->init(getDaug(0),p4res); *************** *** 106,119 **** double sigma=beta*pow(2/w,beta)*(1+alpha*(1.5*L-2.0+EvtConst::pi*EvtConst::pi/3.0)/EvtConst::pi); ! double power=3.0; ! if (getNArg()==1) power=getArg(0); ! double m=EvtPDL::getMeanMass(p->getId()); ! double ww=EvtPDL::getWidth(p->getId()); ! sigma*=pow(pd,power)/((mres*mres-m*m)*(mres*mres-m*m)+mres*mres*ww*ww); static double sigmax=sigma; --- 116,150 ---- double sigma=beta*pow(2/w,beta)*(1+alpha*(1.5*L-2.0+EvtConst::pi*EvtConst::pi/3.0)/EvtConst::pi); ! double m=EvtPDL::getMeanMass(p->getDaug(0)->getId()); ! double Gamma=EvtPDL::getWidth(p->getDaug(0)->getId()); ! //mres is the energy of the psi(3770) ! double p0=0.0; ! if (ed>mD0) p0=sqrt(ed*ed-mD0*mD0); ! double pp=0.0; ! if (ed>mDp) pp=sqrt(ed*ed-mDp*mDp); ! double p0norm=sqrt(0.25*m*m-mD0*mD0); ! double ppnorm=sqrt(0.25*m*m-mDp*mDp); ! ! double r0=12.7; ! double rp=12.7; ! ! if (getNArg()==2){ ! r0=getArg(0); ! rp=getArg(1); ! } ! ! double GammaTot=Gamma*(pp*pp*pp/(1+pp*pp*rp*rp)+p0*p0*p0/(1+p0*p0*r0*r0))/ ! (ppnorm*ppnorm*ppnorm/(1+ppnorm*ppnorm*rp*rp)+ ! p0norm*p0norm*p0norm/(1+p0norm*p0norm*r0*r0)); ! ! ! sigma*=pd*pd*pd/((mres-m)*(mres-m)+0.25*GammaTot*GammaTot); ! ! assert(sigma>0.0); static double sigmax=sigma; *************** *** 134,142 **** double norm=sqrt(sigma); - EvtParticle* d=p->getDaug(0); - - vertex(0,0,0,norm*p->eps(0)*p->epsParent(0).conj()); vertex(1,0,0,norm*p->eps(1)*p->epsParent(0).conj()); vertex(2,0,0,norm*p->eps(2)*p->epsParent(0).conj()); --- 165,170 ---- Index: Class/EvtVPHOtoVISRHi.cc =================================================================== RCS file: Class/EvtVPHOtoVISRHi.cc diff -N Class/EvtVPHOtoVISRHi.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtVPHOtoVISRHi.cc 1 Apr 2008 20:38:48 -0000 1.5 *************** *** 0 **** --- 1,326 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 2004 Cornell + // + // Module: EvtVPHOtoVISR.cc + // + // Description: Routine to decay vpho -> (DDx) + ISR photon from 3.9 to 4.3 GeV, using CLEO-c data (Brian Lang) + // + // Modification history: + // + // Ryd March 20, 2004 Module created + // + //------------------------------------------------------------------------ + // + #include + #include "EvtGenBase/EvtParticle.hh" + #include "EvtGenBase/EvtGenKine.hh" + #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtVector4C.hh" + #include "EvtGenBase/EvtVector4R.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenBase/EvtRandom.hh" + #include "EvtGenModels/EvtVPHOtoVISRHi.hh" + #include + + using std::endl; + + EvtVPHOtoVISRHi::~EvtVPHOtoVISRHi() {} + + void EvtVPHOtoVISRHi::getName(std::string& model_name){ + + model_name="VPHOTOVISRHI"; + + } + + + EvtDecayBase* EvtVPHOtoVISRHi::clone(){ + + return new EvtVPHOtoVISRHi; + + } + + void EvtVPHOtoVISRHi::init(){ + + // check that there are 0 or 1 arguments + checkNArg(0,1); + + // check that there are 2 daughters + checkNDaug(2); + + // check the parent and daughter spins + checkSpinParent(EvtSpinType::VECTOR); + checkSpinDaughter(0,EvtSpinType::VECTOR); + checkSpinDaughter(1,EvtSpinType::PHOTON); + } + + void EvtVPHOtoVISRHi::initProbMax() { + + setProbMax(20.0); + + } + + void EvtVPHOtoVISRHi::decay( EvtParticle *p){ + //take photon along z-axis, either forward or backward. + //Implement this as generating the photon momentum along + //the z-axis uniformly + double power=1; + if (getNArg()==1) power=getArg(0); + // define particle names + static EvtId D0=EvtPDL::getId("D0"); + static EvtId D0B=EvtPDL::getId("anti-D0"); + static EvtId DP=EvtPDL::getId("D+"); + static EvtId DM=EvtPDL::getId("D-"); + static EvtId DSM=EvtPDL::getId("D_s-"); + static EvtId DSP=EvtPDL::getId("D_s+"); + static EvtId DSMS=EvtPDL::getId("D_s*-"); + static EvtId DSPS=EvtPDL::getId("D_s*+"); + static EvtId D0S=EvtPDL::getId("D*0"); + static EvtId D0BS=EvtPDL::getId("anti-D*0"); + static EvtId DPS=EvtPDL::getId("D*+"); + static EvtId DMS=EvtPDL::getId("D*-"); + // setup some parameters + double w=p->mass(); + double s=w*w; + double L=2.0*log(w/0.000511); + double alpha=1/137.0; + double beta=(L-1)*2.0*alpha/EvtConst::pi; + // make sure only 2 or 3 body are present + assert (p->getDaug(0)->getNDaug() == 2 || p->getDaug(0)->getNDaug() == 3); + + // determine minimum rest mass of parent + double md1 = EvtPDL::getMeanMass(p->getDaug(0)->getDaug(0)->getId()); + double md2 = EvtPDL::getMeanMass(p->getDaug(0)->getDaug(1)->getId()); + double minResMass = md1+md2; + if (p->getDaug(0)->getNDaug() == 3) { + double md3 = EvtPDL::getMeanMass(p->getDaug(0)->getDaug(2)->getId()); + minResMass = minResMass + md3; + } + + // calculate the maximum energy of the ISR photon + double pgmax=(s-minResMass*minResMass)/(2.0*w); + double pgz=0.99*pgmax*exp(log(EvtRandom::Flat(1.0))/(beta*power)); + if (EvtRandom::Flat(1.0)<0.5) pgz=-pgz; + + double k=fabs(pgz); + // print of ISR energy + // std::cout << "Energy ISR :"<< k <getP4Restframe()-p4g; + + double mres=p4res.mass(); + + // set masses + p->getDaug(0)->init(getDaug(0),p4res); + p->getDaug(1)->init(getDaug(1),p4g); + + + // determine XS - langbw + // very crude way of determining XS just a simple straight line Approx. + // this was determined by eye. + // lots of cout statements to make plots to check that things are working as expected + double sigma=9.0; + if (mres<=3.9) sigma = 0.00001; + + bool sigmacomputed(false); + + // DETERMINE XS FOR D*D* + if (p->getDaug(0)->getNDaug() == 2 + &&((p->getDaug(0)->getDaug(0)->getId()==D0S + && p->getDaug(0)->getDaug(1)->getId()==D0BS) + ||(p->getDaug(0)->getDaug(0)->getId()==DPS + && p->getDaug(0)->getDaug(1)->getId()==DMS))){ + if(mres>4.18) { + sigma*=5./9.*(1.-1.*sqrt((4.18-mres)*(4.18-mres))/(4.3-4.18)); + } + else if(mres>4.07 && mres<=4.18) { + sigma*=5./9.; + } + else if (mres<=4.07&&mres>4.03) + { + sigma*=(5./9. - 1.5/9.*sqrt((4.07-mres)*(4.07-mres))/(4.07-4.03)); + } + else if (mres<=4.03&& mres>=4.013) + { + sigma*=(3.5/9. - 3.5/9.*sqrt((4.03-mres)*(4.03-mres))/(4.03-4.013)); + } + else{ + sigma=0.00001; + } + sigmacomputed = true; + // std::cout << "DSDSXS "<getDaug(0)->getNDaug() == 2 && ((p->getDaug(0)->getDaug(0)->getId()==D0S + && p->getDaug(0)->getDaug(1)->getId()==D0B) + ||(p->getDaug(0)->getDaug(0)->getId()==DPS + && p->getDaug(0)->getDaug(1)->getId()==DM) + ||(p->getDaug(0)->getDaug(0)->getId()==D0BS + && p->getDaug(0)->getDaug(1)->getId()==D0) + ||(p->getDaug(0)->getDaug(0)->getId()==DMS + && p->getDaug(0)->getDaug(1)->getId()==DP)) ) + { + if(mres>=4.2){ + sigma*=1.5/9.; + } + else if( mres>4.06 && mres<4.2){ + sigma*=((1.5/9.+2.5/9.*sqrt((4.2-mres)*(4.2-mres))/(4.2-4.06))); + } + else if(mres>=4.015 && mres<4.06){ + sigma*=((4./9.+3./9.*sqrt((4.06-mres)*(4.06-mres))/(4.06-4.015))); + } + else if (mres<4.015 && mres>=3.9){ + sigma*=((7./9.-7/9.*sqrt((4.015-mres)*(4.015-mres))/(4.015-3.9))); + } + else { + sigma = 0.00001; + } + sigmacomputed = true; + // std::cout << "DSDXS "<getDaug(0)->getDaug(0)->getId()==DSPS && p->getDaug(0)->getDaug(1)->getId()==DSMS))) + { + if(mres>(2.112+2.112)){ + sigma=0.4; + } + else { + // sigma=0.4; + // sigma = 0 surely below Ds*Ds* threshold? - ponyisi + sigma=0.00001; + } + sigmacomputed = true; + // std::cout << "DsSDsSXS "<getDaug(0)->getNDaug() == 2 && ((p->getDaug(0)->getDaug(0)->getId()==DSPS + && p->getDaug(0)->getDaug(1)->getId()==DSM) + || (p->getDaug(0)->getDaug(0)->getId()==DSMS + && p->getDaug(0)->getDaug(1)->getId()==DSP))) + { + if(mres>4.26){ + sigma=0.05; + } + else if (mres>4.18 && mres<=4.26){ + sigma*=1./9.*(0.05+0.95*sqrt((4.26-mres)*(4.26-mres))/(4.26-4.18)); + } + else if (mres>4.16 && mres<=4.18){ + sigma*=1/9.; + } + else if (mres<=4.16 && mres>4.08){ + sigma*=1/9.*(1-sqrt((4.16-mres)*(4.16-mres))/(4.16-4.08)); + } + else if (mres<=(4.08)){ + sigma=0.00001; + } + sigmacomputed = true; + // std::cout << "DsSDsXS "<getDaug(0)->getNDaug() == 2 && ((p->getDaug(0)->getDaug(0)->getId()==D0 + && p->getDaug(0)->getDaug(1)->getId()==D0B) + ||(p->getDaug(0)->getDaug(0)->getId()==DP + && p->getDaug(0)->getDaug(1)->getId()==DM))){ + sigma*=0.4/9.; + sigmacomputed = true; + // std::cout << "DDXS "<getDaug(0)->getNDaug() == 2 && ((p->getDaug(0)->getDaug(0)->getId()==DSP && p->getDaug(0)->getDaug(1)->getId()==DSM))){ + sigma*=0.2/9.; + sigmacomputed = true; + // std::cout << "DsDsXS "<getDaug(0)->getNDaug() == 3){ + if(mres>4.03){ + sigma*=0.5/9.; + } + else { + sigma=0.00001; + } + sigmacomputed = true; + // std::cout << "DSDpiXS "<sigmax){ + // sigmax=sigma; + // } + + static int count=0; + + count++; + + // if (count%10000==0){ + // std::cout << "sigma :"<getDaug(0); + + + vertex(0,0,0,norm*p->eps(0)*p->epsParent(0).conj()); + vertex(1,0,0,norm*p->eps(1)*p->epsParent(0).conj()); + vertex(2,0,0,norm*p->eps(2)*p->epsParent(0).conj()); + + vertex(0,1,0,norm*p->eps(0)*p->epsParent(1).conj()); + vertex(1,1,0,norm*p->eps(1)*p->epsParent(1).conj()); + vertex(2,1,0,norm*p->eps(2)*p->epsParent(1).conj()); + + vertex(0,2,0,norm*p->eps(0)*p->epsParent(2).conj()); + vertex(1,2,0,norm*p->eps(1)*p->epsParent(2).conj()); + vertex(2,2,0,norm*p->eps(2)*p->epsParent(2).conj()); + + vertex(0,0,1,norm*p->eps(0)*p->epsParent(0).conj()); + vertex(1,0,1,norm*p->eps(1)*p->epsParent(0).conj()); + vertex(2,0,1,norm*p->eps(2)*p->epsParent(0).conj()); + + vertex(0,1,1,norm*p->eps(0)*p->epsParent(1).conj()); + vertex(1,1,1,norm*p->eps(1)*p->epsParent(1).conj()); + vertex(2,1,1,norm*p->eps(2)*p->epsParent(1).conj()); + + vertex(0,2,1,norm*p->eps(0)*p->epsParent(2).conj()); + vertex(1,2,1,norm*p->eps(1)*p->epsParent(2).conj()); + vertex(2,2,1,norm*p->eps(2)*p->epsParent(2).conj()); + + return; + } + Index: Class/EvtVSPPwave.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVSPPwave.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtVSPPwave.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtVSPPwave.cc 12 Jan 2006 16:14:37 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" Index: Class/EvtVSS.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVSS.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtVSS.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtVSS.cc 12 Jan 2006 16:14:37 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 67,79 **** p->initializePhaseSpace(getNDaug(),getDaugs()); ! EvtVector4R pdaug = p->getDaug(0)->getP4(); ! double norm=1.0/pdaug.d3mag(); ! vertex(0,norm*pdaug*(p->eps(0))); ! vertex(1,norm*pdaug*(p->eps(1))); ! vertex(2,norm*pdaug*(p->eps(2))); return; } --- 68,78 ---- p->initializePhaseSpace(getNDaug(),getDaugs()); ! EvtVector4R pDaug = p->getDaug(0)->getP4(); ! double norm=1.0/pDaug.d3mag(); ! for (int i=0; i<3; i++) vertex(i,norm*pDaug*(p->eps(i))); return; } Index: Class/EvtVSSBMixCPT.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVSSBMixCPT.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtVSSBMixCPT.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtVSSBMixCPT.cc 12 Jan 2006 16:14:37 -0000 1.2 *************** *** 21,26 **** --- 21,27 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtConst.hh" #include "EvtGenBase/EvtParticle.hh" *************** *** 32,37 **** --- 33,39 ---- #include "EvtGenBase/EvtId.hh" #include #include "EvtGenBase/EvtRandom.hh" + using std::endl; EvtVSSBMixCPT::~EvtVSSBMixCPT() {} *************** *** 51,58 **** if (getNArg()<1) { report(ERROR,"EvtGen") << "EvtVSSBMix generator expected " ! << " at least 1 argument (deltam) but found:"< " << EvtPDL::name(getDaug(0)).c_str() << " + " ! << EvtPDL::name(getDaug(1)).c_str() << std::endl << std::endl ! << "using parameters:" << std::endl << std::endl ! << " delta(m) = " << dm << " hbar/ps" << std::endl ! << " _freq = " << _freq << " hbar/mm" << std::endl ! << " dgog = " << dgog <B0bar) = " << _chib0_b0bar << std::endl ! << " chi(B0bar->B0) = " << _chib0bar_b0 << std::endl ! << " Af = " << _A_f << std::endl ! << " Abarf = " << _Abar_f << std::endl ! << " Afbar = " << _A_fbar << std::endl ! << " Abarfbar = " << _Abar_fbar << std::endl ! << std::endl; } void EvtVSSBMixCPT::initProbMax(){ --- 157,182 ---- _chib0bar_b0=(1/qop2)*(x*x+y*y)/((1/qop2)*(x*x+y*y)+2+x*x-y*y); // does not include CPT in mixing report(INFO,"EvtGen") << "VSS_BMIXCPT will generate mixing and CPT/CP effects in mixing:" ! << endl << endl << " " << EvtPDL::name(getParentId()).c_str() << " --> " << EvtPDL::name(getDaug(0)).c_str() << " + " ! << EvtPDL::name(getDaug(1)).c_str() << endl << endl ! << "using parameters:" << endl << endl ! << " delta(m) = " << dm << " hbar/ps" << endl ! << " _freq = " << _freq << " hbar/mm" << endl ! << " dgog = " << dgog <B0bar) = " << _chib0_b0bar << endl ! << " chi(B0bar->B0) = " << _chib0bar_b0 << endl ! << " Af = " << _A_f << endl ! << " Abarf = " << _Abar_f << endl ! << " Afbar = " << _A_fbar << endl ! << " Abarfbar = " << _Abar_fbar << endl ! << endl; } void EvtVSSBMixCPT::initProbMax(){ Index: Class/EvtVSSMix.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVSSMix.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtVSSMix.cc 7 Oct 2003 02:48:17 -0000 1.1.1.1 --- Class/EvtVSSMix.cc 12 Jan 2006 16:14:37 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 87,99 **** dm=getArg(0)/EvtConst::c; - double mix_amp; - EvtId d1,d2; d1=s1->getId(); d2=s2->getId(); if (d1==B0&&d2==B0B) mix_amp=cos(0.5*dm*(t1-t2)); if (d1==B0B&&d2==B0) mix_amp=cos(0.5*dm*(t1-t2)); if (d1==B0&&d2==B0) mix_amp=sin(0.5*dm*(t1-t2)); --- 88,99 ---- dm=getArg(0)/EvtConst::c; EvtId d1,d2; d1=s1->getId(); d2=s2->getId(); + double mix_amp=0.; if (d1==B0&&d2==B0B) mix_amp=cos(0.5*dm*(t1-t2)); if (d1==B0B&&d2==B0) mix_amp=cos(0.5*dm*(t1-t2)); if (d1==B0&&d2==B0) mix_amp=sin(0.5*dm*(t1-t2)); Index: Class/EvtVVP.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVVP.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtVVP.cc 7 Oct 2003 02:48:18 -0000 1.1.1.1 --- Class/EvtVVP.cc 12 Jan 2006 16:14:37 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include #include Index: Class/EvtVVPIPI_WEIGHTED.cc =================================================================== RCS file: Class/EvtVVPIPI_WEIGHTED.cc diff -N Class/EvtVVPIPI_WEIGHTED.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtVVPIPI_WEIGHTED.cc 5 Jun 2008 21:28:21 -0000 1.2 *************** *** 0 **** --- 1,138 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtVVSPwave.cc + // + // Description: Routine to decay vector-> vector pi pi where the + // decay is S-wave dominated. + // + // Modification history: + // + // Jim Hunt June 4, 2008 Module Created + // + //------------------------------------------------------------------------ + // + #include "Experiment/Experiment.h" + #include + #include "EvtGenBase/EvtParticle.hh" + #include "EvtGenBase/EvtGenKine.hh" + #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtVector4C.hh" + #include "EvtGenBase/EvtTensor4C.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenModels/EvtVVPIPI_WEIGHTED.hh" + #include + using std::endl; + + EvtVVPIPI_WEIGHTED::~EvtVVPIPI_WEIGHTED() {} + + void EvtVVPIPI_WEIGHTED::getName(std::string& model_name){ + + model_name="VVPIPI_WEIGHTED"; + + } + + + EvtDecayBase* EvtVVPIPI_WEIGHTED::clone(){ + + return new EvtVVPIPI_WEIGHTED; + + } + + void EvtVVPIPI_WEIGHTED::init(){ + + static EvtId PIP=EvtPDL::getId("pi+"); + static EvtId PIM=EvtPDL::getId("pi-"); + static EvtId PI0=EvtPDL::getId("pi0"); + + // check that there are 0 arguments + checkNArg(0); + checkNDaug(3); + + checkSpinParent(EvtSpinType::VECTOR); + checkSpinDaughter(0,EvtSpinType::VECTOR); + + + + if ((!(getDaug(1)==PIP&&getDaug(2)==PIM))&& + (!(getDaug(1)==PI0&&getDaug(2)==PI0))) { + report(ERROR,"EvtGen") << "EvtVVPIPI_WEIGHTED generator expected " + << " pi+ and pi- (or pi0 and pi0) " + << "as 2nd and 3rd daughter. "<initializePhaseSpace(getNDaug(),getDaugs()); + + EvtParticle *jpsi,*pi1,*pi2; + + jpsi=psi_prime->getDaug(0); + pi1=psi_prime->getDaug(1); + pi2=psi_prime->getDaug(2); + + // Put phase space results into the daughters. + + EvtVector4C ep0,ep1,ep2; + + ep0=psi_prime->eps(0); + ep1=psi_prime->eps(1); + ep2=psi_prime->eps(2); + + EvtVector4C e0,e1,e2; + + e0 = jpsi->epsParent(0); + e1 = jpsi->epsParent(1); + e2 = jpsi->epsParent(2); + + double mass2 = (pi1->getP4()+pi2->getP4()).mass2(); + + double fac = mass2-4*pi1->mass()*pi2->mass(); + + fac *= reweight_event(sqrt(mass2)); + + vertex(0,0,fac*(ep0*e0.conj())); + vertex(0,1,fac*(ep0*e1.conj())); + vertex(0,2,fac*(ep0*e2.conj())); + + vertex(1,0,fac*(ep1*e0.conj())); + vertex(1,1,fac*(ep1*e1.conj())); + vertex(1,2,fac*(ep1*e2.conj())); + + vertex(2,0,fac*(ep2*e0.conj())); + vertex(2,1,fac*(ep2*e1.conj())); + vertex(2,2,fac*(ep2*e2.conj())); + + return ; + + } + + + + Index: Class/EvtVVSPwave.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVVSPwave.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtVVSPwave.cc 7 Oct 2003 02:48:18 -0000 1.1.1.1 --- Class/EvtVVSPwave.cc 12 Jan 2006 16:14:37 -0000 1.2 *************** *** 20,25 **** --- 20,26 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 29,34 **** --- 30,36 ---- #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtVVSPwave.hh" #include + using std::endl; EvtVVSPwave::~EvtVVSPwave() {} *************** *** 73,80 **** EvtComplex ad(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5))); if (ap!=EvtComplex(0.0,0.0)) { ! report(ERROR,"EvtGen") << "In EvtVectorToVectorScalar.cc"<getDaug(0); s=p->getDaug(1); - EvtVector4R p4[2]; - EvtTensor4C d,g; g.setdiag(1.0,-1.0,-1.0,-1.0); --- 84,89 ---- Index: Class/EvtVVpipi.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVVpipi.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtVVpipi.cc 7 Oct 2003 02:48:18 -0000 1.1.1.1 --- Class/EvtVVpipi.cc 12 Jan 2006 16:14:37 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 28,33 **** --- 29,35 ---- #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtVVpipi.hh" #include + using std::endl; EvtVVpipi::~EvtVVpipi() {} *************** *** 63,70 **** (!(getDaug(1)==PI0&&getDaug(2)==PI0))) { report(ERROR,"EvtGen") << "EvtVVpipi generator expected " << " pi+ and pi- (or pi0 and pi0) " ! << "as 2nd and 3rd daughter. "<getDaug(1); s2=p->getDaug(2); - EvtVector4R p4[3]; - // Put phase space results into the daughters. EvtVector4C ep0,ep1,ep2; --- 89,94 ---- Index: Class/EvtVectorIsr.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVectorIsr.cc,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** Class/EvtVectorIsr.cc 15 Feb 2004 22:56:47 -0000 1.2 --- Class/EvtVectorIsr.cc 6 Jun 2006 17:04:00 -0000 1.3 *************** *** 148,154 **** double ltm = 2.*log(wcm/electMass); double hpi = ltm - 1.; ! double cs, sn, prob = -1.; double nom1, nom2, nom3, denom; double cspc[3], probpc[3], ypc[3]; --- 148,155 ---- double ltm = 2.*log(wcm/electMass); double hpi = ltm - 1.; ! double cs = 0.0; ! double sn, prob = -1.; double nom1, nom2, nom3, denom; double cspc[3], probpc[3], ypc[3]; *************** *** 193,199 **** // 2. a. Calculates the maximum angular distribution probability. ! double y, y1, y0p9999999; for(int i=1; i<=2; i++) { --- 194,201 ---- // 2. a. Calculates the maximum angular distribution probability. ! double y1 = 0.0; ! double y0p9999999 = 0.0; for(int i=1; i<=2; i++) { *************** *** 214,220 **** denom = pow((sn*sn)+(mesq*(cs*cs)),2); ! y = (nom1-nom2-nom3)/denom; if( i == 1 ) { y1 = y; } --- 216,222 ---- denom = pow((sn*sn)+(mesq*(cs*cs)),2); ! double y = (nom1-nom2-nom3)/denom; if( i == 1 ) { y1 = y; } Index: Class/EvtVll.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVll.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtVll.cc 7 Oct 2003 02:48:18 -0000 1.1.1.1 --- Class/EvtVll.cc 12 Jan 2006 16:14:37 -0000 1.2 *************** *** 20,25 **** --- 20,26 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include #include Index: Class/EvtVub.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVub.cc,v retrieving revision 1.1.1.1 retrieving revision 1.3 diff -c -r1.1.1.1 -r1.3 *** Class/EvtVub.cc 7 Oct 2003 02:48:18 -0000 1.1.1.1 --- Class/EvtVub.cc 6 Jun 2006 17:04:00 -0000 1.3 *************** *** 10,16 **** // // Module: EvtVub.cc // ! // Description: Routine to decay a particle according th phase space // // Modification history: // --- 10,16 ---- // // Module: EvtVub.cc // ! // Description: Routine to decay a particle according th phase space // // Modification history: // *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 26,40 **** #include "EvtGenModels/EvtVub.hh" #include #include "EvtGenBase/EvtVector4R.hh" - #include "EvtGenModels/EvtHepRandomEngine.hh" #include "EvtGenModels/EvtPFermi.hh" #include "EvtGenModels/EvtVubdGamma.hh" - #include "CLHEP/Random/RandGeneral.h" #include "EvtGenBase/EvtRandom.hh" EvtVub::~EvtVub() { delete _dGamma; - delete _pFermi; delete [] _masses; delete [] _weights; } --- 27,39 ---- #include "EvtGenModels/EvtVub.hh" #include #include "EvtGenBase/EvtVector4R.hh" #include "EvtGenModels/EvtPFermi.hh" #include "EvtGenModels/EvtVubdGamma.hh" #include "EvtGenBase/EvtRandom.hh" + using std::endl; EvtVub::~EvtVub() { delete _dGamma; delete [] _masses; delete [] _weights; } *************** *** 60,67 **** report(ERROR,"EvtGen") << "EvtVub generator expected " << " at least 6 arguments (mb,a,alpha_s,Nbins,m1,w1,...) but found: " ! <0 && _masses[i] <= _masses[i-1]) { report(ERROR,"EvtGen") << "EvtVub generator expected " << " mass bins in ascending order!" ! << "Will terminate execution!"<= 0, but found: " ! <<_weights[i] < maxw ) maxw = _weights[i]; --- 87,101 ---- if (i>0 && _masses[i] <= _masses[i-1]) { report(ERROR,"EvtGen") << "EvtVub generator expected " << " mass bins in ascending order!" ! << "Will terminate execution!"<= 0, but found: " ! <<_weights[i] < maxw ) maxw = _weights[i]; *************** *** 104,110 **** if (maxw == 0) { report(ERROR,"EvtGen") << "EvtVub generator expected at least one " << " weight > 0, but found none! " ! << "Will terminate execution!"< 0, but found none! " ! << "Will terminate execution!"<= xhigh || kplus <= xlow || (_alphas == 0 && kplus >= mB/2-_mb + sqrt(mB*mB/4-_masses[0]*_masses[0]))) { ! kplus = _pFermi->shoot(); kplus = xlow + kplus*(xhigh-xlow); } int tryit = 1; - while (tryit) { x = EvtRandom::Flat(); z = EvtRandom::Flat(0,2); ! p2 = pow(10,log10(p2epsilon) - log10(p2epsilon)*EvtRandom::Flat()); - qplus = mB-_mb-kplus; El = x*(mB-qplus)/2; if ( El > ml && El < mB/2) { --- 202,221 ---- while( kplus >= xhigh || kplus <= xlow || (_alphas == 0 && kplus >= mB/2-_mb + sqrt(mB*mB/4-_masses[0]*_masses[0]))) { ! kplus = findPFermi(); //_pFermi->shoot(); kplus = xlow + kplus*(xhigh-xlow); } + qplus = mB-_mb-kplus; + if( (mB-qplus)/2.<=ml)continue; + int tryit = 1; while (tryit) { x = EvtRandom::Flat(); z = EvtRandom::Flat(0,2); ! p2=EvtRandom::Flat(); ! p2 = pow(10,lp2epsilon*p2); El = x*(mB-qplus)/2; if ( El > ml && El < mB/2) { *************** *** 219,225 **** double y = _dGamma->getdGdxdzdp(x,z,p2)/_dGMax*p2; ! if ( y > 1 ) report(WARNING,"EvtGen")<<"EvtVub decay probability > 1 found: " << y << std::endl; if ( y >= xran ) tryit = 0; } } --- 230,236 ---- double y = _dGamma->getdGdxdzdp(x,z,p2)/_dGMax*p2; ! if ( y > 1 ) report(WARNING,"EvtGen")<<"EvtVub decay probability > 1 found: " << y << endl; if ( y >= xran ) tryit = 0; } } *************** *** 325,332 **** double apLW = ptmp; // calculate the neutrino 4 vector in the W restframe ! ! double pNW[4] = {sqrt(mW2)-pLW[0],-pLW[1],-pLW[2],-pLW[3]}; // boost them back in the B Meson restframe --- 336,342 ---- double apLW = ptmp; // calculate the neutrino 4 vector in the W restframe ! //double pNW[4] = {sqrt(mW2)-pLW[0],-pLW[1],-pLW[2],-pLW[3]}; // boost them back in the B Meson restframe *************** *** 356,358 **** --- 366,400 ---- } + double EvtVub::findPFermi() { + + double ranNum=EvtRandom::Flat(); + double oOverBins= 1.0/(float(_pf.size())); + int nBinsBelow = 0; // largest k such that I[k] is known to be <= rand + int nBinsAbove = _pf.size(); // largest k such that I[k] is known to be > rand + int middle; + + while (nBinsAbove > nBinsBelow+1) { + middle = (nBinsAbove + nBinsBelow+1)>>1; + if (ranNum >= _pf[middle]) { + nBinsBelow = middle; + } else { + nBinsAbove = middle; + } + } + + double bSize = _pf[nBinsAbove] - _pf[nBinsBelow]; + // binMeasure is always aProbFunc[nBinsBelow], + + if ( bSize == 0 ) { + // rand lies right in a bin of measure 0. Simply return the center + // of the range of that bin. (Any value between k/N and (k+1)/N is + // equally good, in this rare case.) + return (nBinsBelow + .5) * oOverBins; + } + + double bFract = (ranNum - _pf[nBinsBelow]) / bSize; + + return (nBinsBelow + bFract) * oOverBins; + + } Index: Class/EvtVubHybrid.cc =================================================================== RCS file: Class/EvtVubHybrid.cc diff -N Class/EvtVubHybrid.cc *** /dev/null 1 Jan 1970 00:00:00 -0000 --- Class/EvtVubHybrid.cc 6 Jun 2006 17:04:00 -0000 1.2 *************** *** 0 **** --- 1,476 ---- + //--------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtVubHybrid.cc + // + // Description: Routine to decay a particle according to phase space. + // + // Modification history: + // + // Jochen Dingfelder February 1, 2005 Created Module as update of the + // original module EvtVub by Sven Menke + //--------------------------------------------------------------------------- + // + #include "Experiment/Experiment.h" + #include + #include "EvtGenBase/EvtParticle.hh" + #include "EvtGenBase/EvtGenKine.hh" + #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenModels/EvtVubHybrid.hh" + #include "EvtGenBase/EvtVector4R.hh" + #include "EvtGenModels/EvtPFermi.hh" + #include "EvtGenModels/EvtVubdGamma.hh" + #include "EvtGenBase/EvtRandom.hh" + + #include + #include + #include + using std::ifstream; + using std::cout; + using std::endl; + + + // _noHybrid will be set TRUE if the DECAY.DEC file has no binning or weights + // _storeQplus should alwasy be TRUE: writes out Fermi motion parameter + + EvtVubHybrid::EvtVubHybrid() + : _noHybrid(false), _storeQplus(true), + _mb(4.62), _a(2.27), _alphas(0.22), _dGMax(3.), + _nbins_mX(0), _nbins_q2(0), _nbins_El(0), _nbins(0), + _masscut(0.28), _bins_mX(0), _bins_q2(0), _bins_El(0), + _weights(0), _dGamma(0) + {} + + EvtVubHybrid::~EvtVubHybrid() { + delete _dGamma; + delete [] _bins_mX; + delete [] _bins_q2; + delete [] _bins_El; + delete [] _weights; + + } + + void EvtVubHybrid::getName(std::string& model_name){ + + model_name="VUBHYBRID"; + + } + + EvtDecayBase* EvtVubHybrid::clone(){ + + return new EvtVubHybrid; + + } + + void EvtVubHybrid::init(){ + + // check that there are at least 3 arguments + if (getNArg() < EvtVubHybrid::nParameters) { + report(ERROR,"EvtVubHybrid") << "EvtVub generator expected " + << "at least " << EvtVubHybrid::nParameters + << " arguments but found: " << getNArg() + << "\nWill terminate execution!"< Xu l nu events " + << "without using the hybrid reweighting." + << endl; + _noHybrid = true; + } else if (getNArg() < EvtVubHybrid::nParameters+EvtVubHybrid::nVariables) { + report(ERROR,"EvtVubHybrid") << "EvtVub could not read number of bins for " + << "all variables used in the reweighting\n" + << "Will terminate execution!" << endl; + ::abort(); + } + + // check that there are 3 daughters + checkNDaug(3); + + // read minimum required parameters from decay.dec + _mb = getArg(0); + _a = getArg(1); + _alphas = getArg(2); + + // the maximum dGamma*p2 value depends on alpha_s only: + const double dGMax0 = 3.; + _dGMax = 0.21344+8.905*_alphas; + if ( _dGMax < dGMax0 ) _dGMax = dGMax0; + + // for the Fermi Motion we need a B-Meson mass - but it's not critical + // to get an exact value; in order to stay in the phase space for + // B+- and B0 use the smaller mass + + static double mB0 = EvtPDL::getMaxMass(EvtPDL::getId("B0")); + static double mBP = EvtPDL::getMaxMass(EvtPDL::getId("B+")); + static double mB = (mB0 u-bar specflav l+ nu + + EvtParticle *xuhad, *lepton, *neutrino; + EvtVector4R p4; + // R. Faccini 21/02/03 + // move the reweighting up , before also shooting the fermi distribution + double x,z,p2; + double sh=0.0; + double mB,ml,xlow,xhigh,qplus; + double El=0.0; + double Eh=0.0; + double kplus; + double q2, mX; + + const double lp2epsilon=-10; + bool rew(true); + while(rew){ + + p->initializePhaseSpace(getNDaug(),getDaugs()); + + xuhad=p->getDaug(0); + lepton=p->getDaug(1); + neutrino=p->getDaug(2); + + mB = p->mass(); + ml = lepton->mass(); + + xlow = -_mb; + xhigh = mB-_mb; + + // Fermi motion does not need to be computed inside the + // tryit loop as m_b in Gamma0 does not need to be replaced by (m_b+kplus). + // The difference however should be of the Order (lambda/m_b)^2 which is + // beyond the considered orders in the paper anyway ... + + // for alpha_S = 0 and a mass cut on X_u not all values of kplus are + // possible. The maximum value is mB/2-_mb + sqrt(mB^2/4-_masscut^2) + kplus = 2*xhigh; + + while( kplus >= xhigh || kplus <= xlow + || (_alphas == 0 && kplus >= mB/2-_mb + + sqrt(mB*mB/4-_masscut*_masscut))) { + kplus = findPFermi(); //_pFermi->shoot(); + kplus = xlow + kplus*(xhigh-xlow); + } + qplus = mB-_mb-kplus; + if( (mB-qplus)/2.<=ml) continue; + + int tryit = 1; + while (tryit) { + + x = EvtRandom::Flat(); + z = EvtRandom::Flat(0,2); + p2=EvtRandom::Flat(); + p2 = pow(10,lp2epsilon*p2); + + El = x*(mB-qplus)/2; + if ( El > ml && El < mB/2) { + + Eh = z*(mB-qplus)/2+qplus; + if ( Eh > 0 && Eh < mB ) { + + sh = p2*pow(mB-qplus,2)+2*qplus*(Eh-qplus)+qplus*qplus; + if ( sh > _masscut*_masscut + && mB*mB + sh - 2*mB*Eh > ml*ml) { + + double xran = EvtRandom::Flat(); + + double y = _dGamma->getdGdxdzdp(x,z,p2)/_dGMax*p2; + + if ( y > 1 ) report(WARNING,"EvtVubHybrid") + <<"EvtVubHybrid decay probability > 1 found: " << y << endl; + if ( y >= xran ) tryit = 0; + } + } + } + } + + // compute all kinematic variables needed for reweighting (J. Dingfelder) + mX = sqrt(sh); + q2 = mB*mB + sh - 2*mB*Eh; + + // Reweighting in bins of mX, q2, El (J. Dingfelder) + if (_nbins>0) { + double xran1 = EvtRandom::Flat(); + double w = 1.0; + if (!_noHybrid) w = getWeight(mX, q2, El); + if ( w >= xran1 ) rew = false; + } + else { + rew = false; + } + } + + // o.k. we have the three kineamtic variables + // now calculate a flat cos Theta_H [-1,1] distribution of the + // hadron flight direction w.r.t the B flight direction + // because the B is a scalar and should decay isotropic. + // Then chose a flat Phi_H [0,2Pi] w.r.t the B flight direction + // and and a flat Phi_L [0,2Pi] in the W restframe w.r.t the + // W flight direction. + + double ctH = EvtRandom::Flat(-1,1); + double phH = EvtRandom::Flat(0,2*M_PI); + double phL = EvtRandom::Flat(0,2*M_PI); + + // now compute the four vectors in the B Meson restframe + + double ptmp,sttmp; + // calculate the hadron 4 vector in the B Meson restframe + + sttmp = sqrt(1-ctH*ctH); + ptmp = sqrt(Eh*Eh-sh); + double pHB[4] = {Eh,ptmp*sttmp*cos(phH),ptmp*sttmp*sin(phH),ptmp*ctH}; + p4.set(pHB[0],pHB[1],pHB[2],pHB[3]); + xuhad->init( getDaug(0), p4); + + if (_storeQplus ) { + // cludge to store the hidden parameter q+ with the decay; + // the lifetime of the Xu is abused for this purpose. + // tau = 1 ps corresponds to ctau = 0.3 mm -> in order to + // stay well below BaBars sensitivity we take q+/(10000 GeV) which + // goes up to 0.0005 in the most extreme cases as ctau in mm. + // To extract q+ back from the StdHepTrk its necessary to get + // delta_ctau = Xu->anyDaughter->getVertexTime()-Xu->getVertexTime() + // where these pseudo calls refere to the StdHep time stored at + // the production vertex in the lab for each particle. The boost + // has to be reversed and the result is: + // + // q+ = delta_ctau * 10000 GeV/mm * Mass_Xu/Energy_Xu + // + xuhad->setLifetime(qplus/10000.); + } + + // calculate the W 4 vector in the B Meson restrframe + + double apWB = ptmp; + double pWB[4] = {mB-Eh,-pHB[1],-pHB[2],-pHB[3]}; + + // first go in the W restframe and calculate the lepton and + // the neutrino in the W frame + + double mW2 = mB*mB + sh - 2*mB*Eh; + double beta = ptmp/pWB[0]; + double gamma = pWB[0]/sqrt(mW2); + + double pLW[4]; + + ptmp = (mW2-ml*ml)/2/sqrt(mW2); + pLW[0] = sqrt(ml*ml + ptmp*ptmp); + + double ctL = (El - gamma*pLW[0])/beta/gamma/ptmp; + if ( ctL < -1 ) ctL = -1; + if ( ctL > 1 ) ctL = 1; + sttmp = sqrt(1-ctL*ctL); + + // eX' = eZ x eW + double xW[3] = {-pWB[2],pWB[1],0}; + // eZ' = eW + double zW[3] = {pWB[1]/apWB,pWB[2]/apWB,pWB[3]/apWB}; + + double lx = sqrt(xW[0]*xW[0]+xW[1]*xW[1]); + for (j=0;j<2;j++) + xW[j] /= lx; + + // eY' = eZ' x eX' + double yW[3] = {-pWB[1]*pWB[3],-pWB[2]*pWB[3],pWB[1]*pWB[1]+pWB[2]*pWB[2]}; + double ly = sqrt(yW[0]*yW[0]+yW[1]*yW[1]+yW[2]*yW[2]); + for (j=0;j<3;j++) + yW[j] /= ly; + + // p_lep = |p_lep| * ( sin(Theta) * cos(Phi) * eX' + // + sin(Theta) * sin(Phi) * eY' + // + cos(Theta) * eZ') + for (j=0;j<3;j++) + pLW[j+1] = sttmp*cos(phL)*ptmp*xW[j] + + sttmp*sin(phL)*ptmp*yW[j] + + ctL *ptmp*zW[j]; + + double apLW = ptmp; + // calculate the neutrino 4 vector in the W restframe + //double pNW[4] = {sqrt(mW2)-pLW[0],-pLW[1],-pLW[2],-pLW[3]}; + + // boost them back in the B Meson restframe + + double appLB = beta*gamma*pLW[0] + gamma*ctL*apLW; + + ptmp = sqrt(El*El-ml*ml); + double ctLL = appLB/ptmp; + + if ( ctLL > 1 ) ctLL = 1; + if ( ctLL < -1 ) ctLL = -1; + + double pLB[4] = {El,0,0,0}; + double pNB[4] = {pWB[0]-El,0,0,0}; + + for (j=1;j<4;j++) { + pLB[j] = pLW[j] + (ctLL*ptmp - ctL*apLW)/apWB*pWB[j]; + pNB[j] = pWB[j] - pLB[j]; + } + + p4.set(pLB[0],pLB[1],pLB[2],pLB[3]); + lepton->init( getDaug(1), p4); + + p4.set(pNB[0],pNB[1],pNB[2],pNB[3]); + neutrino->init( getDaug(2), p4); + + return ; + } + + + double EvtVubHybrid::findPFermi() { + + double ranNum=EvtRandom::Flat(); + double oOverBins= 1.0/(float(_pf.size())); + int nBinsBelow = 0; // largest k such that I[k] is known to be <= rand + int nBinsAbove = _pf.size(); // largest k such that I[k] is known to be > rand + int middle; + + while (nBinsAbove > nBinsBelow+1) { + middle = (nBinsAbove + nBinsBelow+1)>>1; + if (ranNum >= _pf[middle]) { + nBinsBelow = middle; + } else { + nBinsAbove = middle; + } + } + + double bSize = _pf[nBinsAbove] - _pf[nBinsBelow]; + // binMeasure is always aProbFunc[nBinsBelow], + + if ( bSize == 0 ) { + // rand lies right in a bin of measure 0. Simply return the center + // of the range of that bin. (Any value between k/N and (k+1)/N is + // equally good, in this rare case.) + return (nBinsBelow + .5) * oOverBins; + } + + double bFract = (ranNum - _pf[nBinsBelow]) / bSize; + + return (nBinsBelow + bFract) * oOverBins; + + } + + + double EvtVubHybrid::getWeight(double mX, double q2, double El) { + + int ibin_mX = -1; + int ibin_q2 = -1; + int ibin_El = -1; + + for (int i = 0; i < _nbins_mX; i++) { + if (mX >= _bins_mX[i]) ibin_mX = i; + } + for (int i = 0; i < _nbins_q2; i++) { + if (q2 >= _bins_q2[i]) ibin_q2 = i; + } + for (int i = 0; i < _nbins_El; i++) { + if (El >= _bins_El[i]) ibin_El = i; + } + int ibin = ibin_mX + ibin_q2*_nbins_mX + ibin_El*_nbins_mX*_nbins_q2; + + if ( (ibin_mX < 0) || (ibin_q2 < 0) || (ibin_El < 0) ) { + report(ERROR,"EvtVubHybrid") << "Cannot determine hybrid weight " + << "for this event " + << "-> assign weight = 0" << endl; + return 0.0; + } + + return _weights[ibin]; + } + + + void EvtVubHybrid::readWeights(int startArg) { + _weights = new double[_nbins]; + + double maxw = 0.0; + for (int i = 0; i < _nbins; i++, startArg++) { + _weights[i] = getArg(startArg); + if (_weights[i] > maxw) maxw = _weights[i]; + } + + if (maxw == 0) { + report(ERROR,"EvtVubHybrid") << "EvtVub generator expected at least one " + << " weight > 0, but found none! " + << "Will terminate execution!"<Xulnu according to Bosch, Lange, Neubert, and Paz hep-ph/0402094 + // Equation numbers refer to this paper + // + // Modification history: + // + // Riccardo Faccini Feb. 11, 2004 + // + //------------------------------------------------------------------------ + // + #include "Experiment/Experiment.h" + #include + #include "EvtGenBase/EvtParticle.hh" + #include "EvtGenBase/EvtGenKine.hh" + #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtReport.hh" + #include "EvtGenModels/EvtVubNLO.hh" + #include + #include "EvtGenBase/EvtVector4R.hh" + #include "EvtGenModels/EvtItgSimpsonIntegrator.hh" + #include "EvtGenModels/EvtBtoXsgammaFermiUtil.hh" + #include "EvtGenModels/EvtItgPtrFunction.hh" + #include "EvtGenModels/EvtPFermi.hh" + #include "EvtGenBase/EvtRandom.hh" + using std::cout; + using std::endl; + + EvtVubNLO::~EvtVubNLO() { + delete [] _masses; + delete [] _weights; + cout <<" max pdf : "<<_gmax< sCoeffs(11); + sCoeffs[3] = _b; + sCoeffs[4] = _mb; + sCoeffs[5] = _mB; + sCoeffs[6] = _idSF; + sCoeffs[7] = lambda_SF(); + sCoeffs[8] = mu_h(); + sCoeffs[9] = mu_i(); + sCoeffs[10] = 1.; + _SFNorm = SFNorm(sCoeffs) ; // SF normalization; + + + cout << " pdf 0.66, 1.32 , 4.32 "<0 && _masses[i] <= _masses[i-1]) { + report(ERROR,"EvtGen") << "EvtVubNLO generator expected " + << " mass bins in ascending order!" + << "Will terminate execution!"<= 0, but found: " + <<_weights[i] < maxw ) maxw = _weights[i]; + } + if (maxw == 0) { + report(ERROR,"EvtGen") << "EvtVubNLO generator expected at least one " + << " weight > 0, but found none! " + << "Will terminate execution!"< u-bar specflav l+ nu + + EvtParticle *xuhad, *lepton, *neutrino; + EvtVector4R p4; + + double pp,pm,pl,ml,El(0.0),Eh(0.0),sh(0.0); + + + + p->initializePhaseSpace(getNDaug(),getDaugs()); + + xuhad=p->getDaug(0); + lepton=p->getDaug(1); + neutrino=p->getDaug(2); + + _mB = p->mass(); + ml = lepton->mass(); + + bool tryit = true; + + while (tryit) { + // pm=(E_H+P_H) + pm= EvtRandom::Flat(0.,1); + pm= pow(pm,1./3.)*_mB; + // pl=mB-2*El + pl = EvtRandom::Flat(0.,1); + pl=sqrt(pl)*pm; + // pp=(E_H-P_H) + pp = EvtRandom::Flat(0.,pl); + + _ntot++; + + El = (_mB-pl)/2.; + Eh = (pp+pm)/2; + sh = pp*pm; + + double pdf(0.); + if (ppml&& sh > _masses[0]*_masses[0]&& _mB*_mB + sh - 2*_mB*Eh > ml*ml) { + double xran = EvtRandom::Flat(0,_dGMax); + pdf = tripleDiff(pp,pl,pm); // triple differential distribution + // cout <<" P+,P-,Pl,Pdf= "<_dGMax){ + report(ERROR,"EvtGen") << "EvtVubNLO pdf above maximum: " <= xran ) tryit = false; + + if(pdf>_gmax)_gmax=pdf; + } else { + // cout <<" EvtVubNLO incorrect kinematics sh= "<0){ + _ngood++; + double xran1 = EvtRandom::Flat(); + double m = sqrt(sh);j=0; + while ( j < _nbins && m > _masses[j] ) j++; + double w = _weights[j-1]; + if ( w < xran1 ) tryit = true;// through away this candidate + } + } + + // cout <<" max prob "<init( getDaug(0), p4); + + + // calculate the W 4 vector in the B Meson restrframe + + double apWB = ptmp; + double pWB[4] = {_mB-Eh,-pHB[1],-pHB[2],-pHB[3]}; + + // first go in the W restframe and calculate the lepton and + // the neutrino in the W frame + + double mW2 = _mB*_mB + sh - 2*_mB*Eh; + // if(mW2<0.1){ + // cout <<" low Q2! "< 1 ) ctL = 1; + sttmp = sqrt(1-ctL*ctL); + + // eX' = eZ x eW + double xW[3] = {-pWB[2],pWB[1],0}; + // eZ' = eW + double zW[3] = {pWB[1]/apWB,pWB[2]/apWB,pWB[3]/apWB}; + + double lx = sqrt(xW[0]*xW[0]+xW[1]*xW[1]); + for (j=0;j<2;j++) + xW[j] /= lx; + + // eY' = eZ' x eX' + double yW[3] = {-pWB[1]*pWB[3],-pWB[2]*pWB[3],pWB[1]*pWB[1]+pWB[2]*pWB[2]}; + double ly = sqrt(yW[0]*yW[0]+yW[1]*yW[1]+yW[2]*yW[2]); + for (j=0;j<3;j++) + yW[j] /= ly; + + // p_lep = |p_lep| * ( sin(Theta) * cos(Phi) * eX' + // + sin(Theta) * sin(Phi) * eY' + // + cos(Theta) * eZ') + for (j=0;j<3;j++) + pLW[j+1] = sttmp*cos(phL)*ptmp*xW[j] + + sttmp*sin(phL)*ptmp*yW[j] + + ctL *ptmp*zW[j]; + + double apLW = ptmp; + + // boost them back in the B Meson restframe + + double appLB = beta*gamma*pLW[0] + gamma*ctL*apLW; + + ptmp = sqrt(El*El-ml*ml); + double ctLL = appLB/ptmp; + + if ( ctLL > 1 ) ctLL = 1; + if ( ctLL < -1 ) ctLL = -1; + + double pLB[4] = {El,0,0,0}; + double pNB[8] = {pWB[0]-El,0,0,0}; + + for (j=1;j<4;j++) { + pLB[j] = pLW[j] + (ctLL*ptmp - ctL*apLW)/apWB*pWB[j]; + pNB[j] = pWB[j] - pLB[j]; + } + + p4.set(pLB[0],pLB[1],pLB[2],pLB[3]); + lepton->init( getDaug(1), p4); + + p4.set(pNB[0],pNB[1],pNB[2],pNB[3]); + neutrino->init( getDaug(2), p4); + + return ; + } + + double + EvtVubNLO::tripleDiff ( double pp, double pl, double pm){ + + std::vector sCoeffs(11); + sCoeffs[0] = pp; + sCoeffs[1] = pl; + sCoeffs[2] = pm; + sCoeffs[3] = _b; + sCoeffs[4] = _mb; + sCoeffs[5] = _mB; + sCoeffs[6] = _idSF; + sCoeffs[7] = lambda_SF(); + sCoeffs[8] = mu_h(); + sCoeffs[9] = mu_i(); + sCoeffs[10] = _SFNorm; // SF normalization; + + + double c1=(_mB+pl-pp-pm)*(pm-pl); + double c2=2*(pl-pp)*(pm-pl); + double c3=(_mB-pm)*(pm-pp); + double aF1=F10(sCoeffs); + double aF2=F20(sCoeffs); + double aF3=F30(sCoeffs); + double td0=c1*aF1+c2*aF2+c3*aF3; + + + EvtItgPtrFunction *func = new EvtItgPtrFunction(&integrand, 0., _mB, sCoeffs); + EvtItgAbsIntegrator *jetSF = new EvtItgSimpsonIntegrator(*func,0.01,25); + double smallfrac=0.000001;// stop a bit before the end to avoid problems with numerical integration + double tdInt = jetSF->evaluate(0,pp*(1-smallfrac)); + delete jetSF; + + double SU=U1lo(mu_h(),mu_i())*pow((pm-pp)/(_mB-pp),alo(mu_h(),mu_i())); + double TD=(_mB-pp)*SU*(td0+tdInt); + + return TD; + + } + + double + EvtVubNLO::integrand(double omega, const std::vector &coeffs){ + //double pp=coeffs[0]; + double c1=(coeffs[5]+coeffs[1]-coeffs[0]-coeffs[2])*(coeffs[2]-coeffs[1]); + double c2=2*(coeffs[1]-coeffs[0])*(coeffs[2]-coeffs[1]); + double c3=(coeffs[5]-coeffs[2])*(coeffs[2]-coeffs[0]); + + return c1*F1Int(omega,coeffs)+c2*F2Int(omega,coeffs)+c3*F3Int(omega,coeffs); + } + + double + EvtVubNLO::F10(const std::vector &coeffs){ + double pp=coeffs[0]; + double y=(coeffs[2]-coeffs[0])/(coeffs[5]-coeffs[0]); + double mui=coeffs[9]; + double muh=coeffs[8]; + double z=1-y; + double result= U1nlo(muh,mui)/ U1lo(muh,mui); + + result += anlo(muh,mui)*log(y); + + result += C_F(muh)*(-4*pow(log(y*coeffs[4]/muh),2)+10*log(y*coeffs[4]/muh)-4*log(y)-2*log(y)/(1-y)-4.0*ddilog_(&z)-pow(EvtConst::pi,2)/6.-12 ); + + result += C_F(mui)*(2*pow(log(y*coeffs[4]*pp/pow(mui,2)),2)-3*log(y*coeffs[4]*pp/pow(mui,2))+7-pow(EvtConst::pi,2) ); + result *=shapeFunction(pp,coeffs); + // changes due to SSF + result += (-subS(coeffs)+2*subT(coeffs)+(subU(coeffs)-subV(coeffs))*(1/y-1.))/(coeffs[5]-pp); + result += shapeFunction(pp,coeffs)/pow((coeffs[5]-coeffs[0]),2)*(-5*(lambda1()+3*lambda2())/6+2*(2*lambda1()/3-lambda2())/pow(y,2)); + // result += (subS(coeffs)+subT(coeffs)+(subU(coeffs)-subV(coeffs))/y)/(coeffs[5]-pp); + // this part has been added after Feb '05 + + //result += shapeFunction(pp,coeffs)/pow((coeffs[5]-coeffs[0]),2)*((lambda1()+3*lambda2())/6+2*(2*lambda1()/3-lambda2())/pow(y,2)); + return result; + } + + double + EvtVubNLO::F1Int(double omega,const std::vector &coeffs){ + double pp=coeffs[0]; + double y=(coeffs[2]-coeffs[0])/(coeffs[5]-coeffs[0]); + // mubar == mui + return C_F(coeffs[9])*( + (shapeFunction(omega,coeffs)-shapeFunction(pp,coeffs))*(4*log(y*coeffs[4]*(pp-omega)/pow(coeffs[9],2))-3)/(pp-omega)+ + (g1(y,(pp-omega)/(coeffs[5]-coeffs[0]))/(coeffs[5]-pp)*shapeFunction(omega,coeffs)) + ); + } + + double + EvtVubNLO::F20(const std::vector &coeffs){ + double pp=coeffs[0]; + double y=(coeffs[2]-coeffs[0])/(coeffs[5]-coeffs[0]); + double result= C_F(coeffs[8])*log(y)/(1-y)*shapeFunction(pp,coeffs)- + 1/y*(subS(coeffs)+2*subT(coeffs)-(subT(coeffs)+subV(coeffs))/y)/(coeffs[5]-pp); + // added after Feb '05 + result += shapeFunction(pp,coeffs)/pow((coeffs[5]-coeffs[0])*y,2)*(2*lambda1()/3+4*lambda2()-y*(7/6*lambda1()+3*lambda2())); + return result; + } + + double + EvtVubNLO::F2Int(double omega,const std::vector &coeffs){ + double pp=coeffs[0]; + double y=(coeffs[2]-coeffs[0])/(coeffs[5]-coeffs[0]); + return C_F(coeffs[9])*g3(y,(pp-omega)/(coeffs[5]-coeffs[0]))*shapeFunction(omega,coeffs)/(coeffs[5]-pp); + } + + double + EvtVubNLO::F30(const std::vector &coeffs){ + double y=(coeffs[2]-coeffs[0])/(coeffs[5]-coeffs[0]); + return shapeFunction(coeffs[0],coeffs)/pow((coeffs[5]-coeffs[0])*y,2)*(-2*lambda1()/3+lambda2()); + } + + double + EvtVubNLO::F3Int(double omega,const std::vector &coeffs){ + double pp=coeffs[0]; + double y=(coeffs[2]-coeffs[0])/(coeffs[5]-coeffs[0]); + return C_F(coeffs[9])*g3(y,(pp-omega)/(coeffs[5]-coeffs[0]))/2*shapeFunction(omega,coeffs)/(coeffs[2]-coeffs[0]); + } + + double + EvtVubNLO::g1(double y, double x){ + double result=(y*(-9+10*y)+x*x*(-12+13*y)+2*x*(-8+6*y+3*y*y))/y/pow(1+x,2)/(x+y); + result -= 4*log((1+1/x)*y)/x; + result -=2*log(1+y/x)*(3*pow(x,4)*(-2+y)-2*pow(y,3)-4*pow(x,3)*(2+y)-2*x*y*y*(4+y)-x*x*y*(12+4*y+y*y))/x/pow((1+x)*y,2)/(x+y); + return result; + } + + double + EvtVubNLO::g2(double y, double x){ + double result=y*(10*pow(x,4)+y*y+3*x*x*y*(10+y)+pow(x,3)*(12+19*y)+x*y*(8+4*y+y*y)); + result -= 2*x*log(1+y/x)*(5*pow(x,4)+2*y*y+6*pow(x,3)*(1+2*y)+4*y*x*(1+2*y)+x*x*y*(18+5*y)); + result *= 2/(pow(y*(1+x),2)*y*(x+y)); + return result; + } + + double + EvtVubNLO::g3(double y, double x){ + double result=(2*pow(y,3)*(-11+2*y)-10*pow(x,4)*(6-6*y+y*y)+x*y*y*(-94+29*y+2*y*y)+2*x*x*y*(-72+18*y+13*y*y)-pow(x,3)*(72+42*y-70*y*y+3*pow(y,3)))/(pow(y*(1+x),2)*y*(x+y)); + result += 2*log(1+y/x)*(-6*x*pow(y,3)*(-5+y)+4*pow(y,4)+5*pow(x,5)*(6-6*y+y*y)-4*pow(x*y,2)*(-20+6*y+y*y)+pow(x,3)*y*(90-10*y-28*y*y+pow(y,3))+pow(x,4)*(36+36*y-50*y*y+4*pow(y,3)))/(pow((1+x)*y*y,2)*(x+y)); + return result; + } + + /* old version (before Feb 05 notebook from NNeubert + + double + EvtVubNLO::F1Int(double omega,const std::vector &coeffs){ + double pp=coeffs[0]; + double y=(coeffs[2]-coeffs[0])/(coeffs[5]-coeffs[0]); + // mubar == mui + return C_F(coeffs[9])*( + (shapeFunction(omega,coeffs)-shapeFunction(pp,coeffs))*(4*log(y*coeffs[4]*(pp-omega)/pow(coeffs[9],2))-3)/(pp-omega)- + (1./y/(coeffs[5]-pp)*shapeFunction(omega,coeffs)*(5-6*y+4*(3-y)*log((pp-omega)/y/coeffs[4]))) + ); + } + + + double + EvtVubNLO::F2Int(double omega,const std::vector &coeffs){ + double pp=coeffs[0]; + double y=(coeffs[2]-coeffs[0])/(coeffs[5]-coeffs[0]); + return C_F(coeffs[9])*shapeFunction(omega,coeffs)*(2-11/y-4/y*log((pp-omega)/y/coeffs[4]))/(coeffs[5]-pp); + } + + double + EvtVubNLO::F3(const std::vector &coeffs){ + return C_F(coeffs[9])*shapeFunction(omega,coeffs)/(coeffs[2]-coeffs[0]); + } + */ + + double EvtVubNLO::SFNorm( const std::vector &coeffs){ + + double omega0=1.68;//normalization scale (mB-2*1.8) + if(_idSF==1){ // exponential SF + double omega0=1.68;//normalization scale (mB-2*1.8) + return M0(mu_i(),omega0)*pow(_b,_b)/lambda_SF()/ (Gamma(_b)-Gamma(_b,_b*omega0/lambda_SF())); + } else if(_idSF==2){ // Gaussian SF + double c=cGaus(_b); + return M0(mu_i(),omega0)*2/lambda_SF()/pow(c,-(1+_b)/2.)/ + (Gamma((1+_b)/2)-Gamma((1+_b)/2,pow(omega0/lambda_SF(),2)*c)); + } else { + report(ERROR,"EvtGen") << "unknown SF "<<_idSF< &sCoeffs){ + if( sCoeffs[6]==1){ + return sCoeffs[10]*expShapeFunction(omega, sCoeffs); + } else if( sCoeffs[6]==2) { + return sCoeffs[10]*gausShapeFunction(omega, sCoeffs); + } else { + report(ERROR,"EvtGen") << "EvtVubNLO : unknown shape function # " + < &c){ return (lambda_bar(1.68)-c[0])*shapeFunction(c[0],c);} + double + EvtVubNLO::subT(const std::vector &c){ return -3*lambda2()*subS(c)/mu_pi2(1.68);} + double + EvtVubNLO::subU(const std::vector &c){ return -2*subS(c);} + double + EvtVubNLO::subV(const std::vector &c){ return -subT(c);} + + + double + EvtVubNLO::lambda_bar(double omega0){ + if(_lbar<0){ + if(_idSF==1){ // exponential SF + double rat=omega0*_b/lambda_SF(); + _lbar=lambda_SF()/_b*(Gamma(1+_b)-Gamma(1+_b,rat))/(Gamma(_b)-Gamma(_b,rat)); + } else if(_idSF==2){ // Gaussian SF + double c=cGaus(_b); + _lbar=lambda_SF()*(Gamma(1+_b/2)-Gamma(1+_b/2,pow(omega0/lambda_SF(),2)*c))/(Gamma((1+_b)/2)-Gamma((1+_b)/2,pow(omega0/lambda_SF(),2)*c))/sqrt(c); + } + } + return _lbar; + } + + + double + EvtVubNLO::mu_pi2(double omega0){ + if(_mupi2<0){ + if(_idSF==1){ // exponential SF + double rat=omega0*_b/lambda_SF(); + _mupi2= 3*(pow(lambda_SF()/_b,2)*(Gamma(2+_b)-Gamma(2+_b,rat))/(Gamma(_b)-Gamma(_b,rat))-pow(lambda_bar(omega0),2)); + } else if(_idSF==2){ // Gaussian SF + double c=cGaus(_b); + double m1=Gamma((3+_b)/2)-Gamma((3+_b)/2,pow(omega0/lambda_SF(),2)*c); + double m2=Gamma(1+_b/2)-Gamma(1+_b/2,pow(omega0/lambda_SF(),2)*c); + double m3=Gamma((1+_b)/2)-Gamma((1+_b)/2,pow(omega0/lambda_SF(),2)*c); + _mupi2= 3*pow(lambda_SF(),2)*(m1/m3-pow(m2/m3,2))/c; + } + } + return _mupi2; + } + + double + EvtVubNLO::M0(double mui,double omega0){ + double mf=omega0-lambda_bar(omega0); + return 1+4*C_F(mui)*(-pow(log(mf/mui),2)-log(mf/mui)-pow(EvtConst::pi/2,2)/6.+mu_pi2(omega0)/3/pow(mf,2)*(log(mf/mui)-0.5)); + } + + double + EvtVubNLO::alphas(double mu){ + double Lambda4=0.302932; + double lg=2*log(mu/Lambda4); + return 4*EvtConst::pi/lg/beta0()*(1-beta1()*log(lg)/pow(beta0(),2)/lg+pow(beta1()/lg,2)/pow(beta0(),4)*(pow(log(lg)-0.5,2)-1.25+beta2()*beta0()/pow(beta1(),2))); + } + + double + EvtVubNLO::gausShapeFunction ( double omega, const std::vector &sCoeffs){ + double b=sCoeffs[3]; + double l=sCoeffs[7]; + double wL=omega/l; + + return pow(wL,b)*exp(-cGaus(b)*wL*wL); + } + + double + EvtVubNLO::expShapeFunction ( double omega, const std::vector &sCoeffs){ + double b=sCoeffs[3]; + double l=sCoeffs[7]; + double wL=omega/l; + + return pow(wL,b-1)*exp(-b*wL); + } + + double + EvtVubNLO::Gamma(double z) { + + std::vector gammaCoeffs(6); + gammaCoeffs[0]=76.18009172947146; + gammaCoeffs[1]=-86.50532032941677; + gammaCoeffs[2]=24.01409824083091; + gammaCoeffs[3]=-1.231739572450155; + gammaCoeffs[4]=0.1208650973866179e-2; + gammaCoeffs[5]=-0.5395239384953e-5; + + //Lifted from Numerical Recipies in C + double x, y, tmp, ser; + + int j; + y = z; + x = z; + + tmp = x + 5.5; + tmp = tmp - (x+0.5)*log(tmp); + ser=1.000000000190015; + + for (j=0;j<6;j++) { + y = y +1.0; + ser = ser + gammaCoeffs[j]/y; + } + + return exp(-tmp+log(2.5066282746310005*ser/x)); + + } + + + + double + EvtVubNLO::Gamma(double z, double tmin) { + std::vector c(1); + c[0]=z; + EvtItgPtrFunction *func = new EvtItgPtrFunction(&dgamma, tmin, 100., c); + EvtItgAbsIntegrator *jetSF = new EvtItgSimpsonIntegrator(*func,0.001); + return jetSF->evaluate(tmin,100.); + } Index: Class/EvtVubdGamma.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtVubdGamma.cc,v retrieving revision 1.1.1.1 retrieving revision 1.3 diff -c -r1.1.1.1 -r1.3 *** Class/EvtVubdGamma.cc 7 Oct 2003 02:48:18 -0000 1.1.1.1 --- Class/EvtVubdGamma.cc 6 Jun 2006 17:04:01 -0000 1.3 *************** *** 10,18 **** // ---------- = 12 Gamma | (1+x-z)(z-x-p ) -- W + (1-z+p ) -- W // _ 2 0 \ 2 1 2 2 // dx dz dp 2 ! // _ _ _2 mb 2 \ // + [x(z-x)-p ] -- (W + 2mb W + mb W ) | ! // 4 3 4 5 / // // with // 2 E 2 --- 10,18 ---- // ---------- = 12 Gamma | (1+x-z)(z-x-p ) -- W + (1-z+p ) -- W // _ 2 0 \ 2 1 2 2 // dx dz dp 2 ! // _ _ _2 mb 2 | // + [x(z-x)-p ] -- (W + 2mb W + mb W ) | ! // 4 3 4 5 / // // with // 2 E 2 *************** *** 34,39 **** --- 34,40 ---- //----------------------- // This Class's Header -- //----------------------- + #include "Experiment/Experiment.h" #include "EvtGenModels/EvtVubdGamma.hh" //--------------- *************** *** 99,105 **** if ( x < 0 || x > 1 || z < xb || z > (1+xb) ) return 0; ! double mx = (0>z-1?0:z-1); double p2min = (0>z-1.?0:z-1.); double p2max = (1.-x)*(z-1.+x); --- 100,107 ---- if ( x < 0 || x > 1 || z < xb || z > (1+xb) ) return 0; ! //not used ! //double mx = (0>z-1?0:z-1); double p2min = (0>z-1.?0:z-1.); double p2max = (1.-x)*(z-1.+x); *************** *** 145,152 **** double EvtVubdGamma::getW1delta(const double &x, const double &z) { double mz = 1.-z; ! double p2min = (0>z-1.?0:z-1.); ! double p2max = (1.-x)*(z-1.+x); double lz; if (z == 1) lz = -1.; --- 147,154 ---- double EvtVubdGamma::getW1delta(const double &x, const double &z) { double mz = 1.-z; ! //double p2min = (0>z-1.?0:z-1.); ! //double p2max = (1.-x)*(z-1.+x); double lz; if (z == 1) lz = -1.; Index: Class/EvtbTosllAli.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtbTosllAli.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtbTosllAli.cc 7 Oct 2003 02:48:18 -0000 1.1.1.1 --- Class/EvtbTosllAli.cc 12 Jan 2006 16:14:38 -0000 1.2 *************** *** 18,23 **** --- 18,24 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 30,35 **** --- 31,37 ---- #include "EvtGenModels/EvtbTosllVectorAmp.hh" #include + using std::endl; EvtbTosllAli::~EvtbTosllAli() {} *************** *** 89,96 **** mesontype == EvtSpinType::SCALAR)) { report(ERROR,"EvtGen") << "EvtbTosllAli generator expected " << " a SCALAR or VECTOR 1st daughter, found:"<< ! EvtPDL::name(getDaug(0)).c_str()<prob) prob=probctl[1]; if (probctl[2]>prob) prob=probctl[2]; ! if (std::fabs(c)>1e-20){ double ctlx=-0.5*b/c; ! if (std::fabs(ctlx)<1.0){ double probtmp=a+b*ctlx+c*ctlx*ctlx; if (probtmp>prob) prob=probtmp; } --- 193,201 ---- if (probctl[1]>prob) prob=probctl[1]; if (probctl[2]>prob) prob=probctl[2]; ! if (fabs(c)>1e-20){ double ctlx=-0.5*b/c; ! if (fabs(ctlx)<1.0){ double probtmp=a+b*ctlx+c*ctlx*ctlx; if (probtmp>prob) prob=probtmp; } *************** *** 204,210 **** //report(DEBUG,"EvtGen") << "prob,probctl:"< 0.25) + { + c7eff = A7; + return c7eff; + } + + + + + // change energy scale to 5.0 for full NNLO calculation below shat = 0.25 + muscale = 5.0; + alphas = 0.215; + A7 = -0.312 + 0.008; + A8 = -0.148; + A9 = 4.174 + (-0.035); + A10 = -4.592 + 0.379; + C1 = -0.487; + C2 = 1.024; + T9 = 0.374 + 0.252; + U9 = 0.033 + 0.015; + W9 = 0.032 + 0.012; + Lmu = log(muscale/mbeff); + + EvtComplex F71; + EvtComplex f71; + EvtComplex k7100(-0.68192,-0.074998); + EvtComplex k7101(0.0,0.0); + EvtComplex k7110(-0.23935,-0.12289); + EvtComplex k7111(0.0027424,0.019676); + EvtComplex k7120(-0.0018555,-0.175); + EvtComplex k7121(0.022864,0.011456); + EvtComplex k7130(0.28248,-0.12783); + EvtComplex k7131(0.029027,-0.0082265); + f71 = k7100 + k7101*logshat + shat*(k7110 + k7111*logshat) + + shat*shat*(k7120 + k7121*logshat) + + shat*shat*shat*(k7130 + k7131*logshat); + F71 = (-208.0/243.0)*Lmu + f71; + + EvtComplex F72; + EvtComplex f72; + EvtComplex k7200(4.0915,0.44999); + EvtComplex k7201(0.0,0.0); + EvtComplex k7210(1.4361,0.73732); + EvtComplex k7211(-0.016454,-0.11806); + EvtComplex k7220(0.011133,1.05); + EvtComplex k7221(-0.13718,-0.068733); + EvtComplex k7230(-1.6949,0.76698); + EvtComplex k7231(-0.17416,0.049359); + f72 = k7200 + k7201*logshat + shat*(k7210 + k7211*logshat) + + shat*shat*(k7220 + k7221*logshat) + + shat*shat*shat*(k7230 + k7231*logshat); + F72 = (416.0/81.0)*Lmu + f72; + + EvtComplex F78; + F78 = (-32.0/9.0)*Lmu + 8.0*EvtConst::pi*EvtConst::pi/27.0 + (-44.0/9.0) + + (-8.0*EvtConst::pi/9.0)*uniti + + (4.0/3.0*EvtConst::pi*EvtConst::pi - 40.0/3.0)*shat + + (32.0*EvtConst::pi*EvtConst::pi/9.0 - 316.0/9.0)*shat*shat + + (200.0*EvtConst::pi*EvtConst::pi/27.0 - 658.0/9.0)*shat*shat*shat + + (-8.0*logshat/9.0)*(shat + shat*shat + shat*shat*shat); + + c7eff = A7 - alphas/(4.0*EvtConst::pi)*(C1*F71 + C2*F72 + A8*F78); + + return c7eff; + } + + + EvtComplex EvtbTosllAmp::GetC9Eff(double q2, bool nnlo, bool btod) + { + + if (!nnlo) return 4.344; + double mbeff = 4.8; + double shat = q2/mbeff/mbeff; + double logshat; + logshat = log(shat); + double mchat = 0.29; + + + double muscale; + muscale = 2.5; + double alphas; + alphas = 0.267; + double A7; + A7 = -0.353 + 0.023; + double A8; + A8 = -0.164; + double A9; + A9 = 4.287 + (-0.218); + double A10; + A10 = -4.592 + 0.379; + double C1; + C1 = -0.697; + double C2; + C2 = 1.046; + double T9; + T9 = 0.114 + 0.280; + double U9; + U9 = 0.045 + 0.023; + double W9; + W9 = 0.044 + 0.016; + + double Lmu; + Lmu = log(muscale/mbeff); + + + EvtComplex uniti(0.0,1.0); + + EvtComplex hc; + double xarg; + xarg = 4.0*mchat/shat; + hc = -4.0/9.0*log(mchat*mchat) + 8.0/27.0 + 4.0*xarg/9.0; + + if (xarg < 1.0) + { + hc = hc - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* + (log(fabs((sqrt(1.0 - xarg)+1.0)/(sqrt(1.0 - xarg) - 1.0))) - + uniti*EvtConst::pi); + } + else + { + hc = hc - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* + 2.0*atan(1.0/sqrt(xarg - 1.0)); + } + + EvtComplex h1; + xarg = 4.0/shat; + h1 = 8.0/27.0 + 4.0*xarg/9.0; + if (xarg < 1.0) + { + h1 = h1 - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* + (log(fabs((sqrt(1.0 - xarg)+1.0)/(sqrt(1.0 - xarg) - 1.0))) - + uniti*EvtConst::pi); + } + else + { + h1 = h1 - 2.0/9.0*(2.0 + xarg)*sqrt(fabs(1.0 - xarg))* + 2.0*atan(1.0/sqrt(xarg - 1.0)); + } + + + EvtComplex h0; + h0 = 8.0/27.0 - 4.0*log(2.0)/9.0 + 4.0*uniti*EvtConst::pi/9.0; + + + // X=V_{ud}^* V_ub / V_{td}^* V_tb * (4/3 C_1 +C_2) * (h(\hat m_c^2, hat s)- + // h(\hat m_u^2, hat s)) + EvtComplex Vudstar(1.0 - 0.2279*0.2279/2.0, 0.0); + EvtComplex Vub((0.118+0.273)/2.0, -1.0*(0.305+0.393)/2.0); + EvtComplex Vtdstar(1.0 - (0.118+0.273)/2.0,(0.305+0.393)/2.0); + EvtComplex Vtb(1.0,0.0); + + EvtComplex Xd; + Xd = (Vudstar * Vub / Vtdstar * Vtb) * (4.0/3.0*C1 + C2) * (hc - h0); + + + EvtComplex c9eff=4.344; + if (shat > 0.25) + { + c9eff = A9 + T9*hc + U9*h1 + W9*h0; + if (btod) + { + c9eff += Xd; + } + + return c9eff; + } + + // change energy scale to 5.0 for full NNLO calculation below shat = 0.25 + muscale = 5.0; + alphas = 0.215; + A9 = 4.174 + (-0.035); + C1 = -0.487; + C2 = 1.024; + A8 = -0.148; + T9 = 0.374 + 0.252; + U9 = 0.033 + 0.015; + W9 = 0.032 + 0.012; + Lmu = log(muscale/mbeff); + + EvtComplex F91; + EvtComplex f91; + EvtComplex k9100(-11.973,0.16371); + EvtComplex k9101(-0.081271,-0.059691); + EvtComplex k9110(-28.432,-0.25044); + EvtComplex k9111(-0.040243,0.016442); + EvtComplex k9120(-57.114,-0.86486); + EvtComplex k9121(-0.035191,0.027909); + EvtComplex k9130(-128.8,-2.5243); + EvtComplex k9131(-0.017587,0.050639); + f91 = k9100 + k9101*logshat + shat*(k9110 + k9111*logshat) + + shat*shat*(k9120 + k9121*logshat) + + shat*shat*shat*(k9130 + k9131*logshat); + F91 = (-1424.0/729.0 + 16.0*uniti*EvtConst::pi/243.0 + + 64.0/27.0*log(mchat))*Lmu - 16.0*Lmu*logshat/243.0 + + (16.0/1215.0 - 32.0/135.0/mchat/mchat)*Lmu*shat + + (4.0/2835.0 - 8.0/315.0/mchat/mchat/mchat/mchat)*Lmu*shat*shat + + (16.0/76545.0 - 32.0/8505.0/mchat/mchat/mchat/mchat/mchat/mchat)* + Lmu*shat*shat*shat -256.0*Lmu*Lmu/243.0 + f91; + + EvtComplex F92; + EvtComplex f92; + EvtComplex k9200(6.6338,-0.98225); + EvtComplex k9201(0.48763,0.35815); + EvtComplex k9210(3.3585,1.5026); + EvtComplex k9211(0.24146,-0.098649); + EvtComplex k9220(-1.1906,5.1892); + EvtComplex k9221(0.21115,-0.16745); + EvtComplex k9230(-17.12,15.146); + EvtComplex k9231(0.10552,-0.30383); + f92 = k9200 + k9201*logshat + shat*(k9210 + k9211*logshat) + + shat*shat*(k9220 + k9221*logshat) + + shat*shat*shat*(k9230 + k9231*logshat); + F92 = (256.0/243.0 - 32.0*uniti*EvtConst::pi/81.0 + - 128.0/9.0*log(mchat))*Lmu + 32.0*Lmu*logshat/81.0 + + (-32.0/405.0 + 64.0/45.0/mchat/mchat)*Lmu*shat + + (-8.0/945.0 + 16.0/105.0/mchat/mchat/mchat/mchat)*Lmu*shat*shat + + (-32.0/25515.0 + 64.0/2835.0/mchat/mchat/mchat/mchat/mchat/mchat)* + Lmu*shat*shat*shat + 512.0*Lmu*Lmu/81.0 + f92; + + EvtComplex F98; + F98 = 104.0/9.0 - 32.0*EvtConst::pi*EvtConst::pi/27.0 + + (1184.0/27.0 - 40.0*EvtConst::pi*EvtConst::pi/9.0)*shat + + (14212.0/135.0 - 32.0*EvtConst::pi*EvtConst::pi/3.0)*shat*shat + + (193444.0/945.0 - 560.0*EvtConst::pi*EvtConst::pi/27.0)*shat*shat*shat + + 16.0*logshat/9.0*(1.0 + shat + shat*shat + shat*shat*shat); + + Xd = (Vudstar * Vub / Vtdstar * Vtb) * (4.0/3.0*C1 + C2) * (hc - h0); + + c9eff = A9 + T9*hc + U9*h1 + W9*h0 - + alphas/(4.0*EvtConst::pi)*(C1*F91 + C2*F92 + A8*F98); + if (btod) + { + c9eff += Xd; + } + + return c9eff; + } + + EvtComplex EvtbTosllAmp::GetC10Eff(double q2, bool nnlo) + { + + if (!nnlo) return -4.669; + double A10; + A10 = -4.592 + 0.379; + + EvtComplex c10eff; + c10eff = A10; + + return c10eff; + } + + double EvtbTosllAmp::dGdsProb(double mb, double ms, double ml, + double s) + { + // Compute the decay probability density function given a value of s + // according to Ali's paper + + + double delta, lambda, prob; + double f1, f2, f3, f4; + double msh, mlh, sh; + + mlh = ml / mb; + msh = ms / mb; + sh = s / (mb*mb); + + EvtComplex c9eff = EvtbTosllAmp::GetC9Eff(sh*mb); + EvtComplex c7eff = EvtbTosllAmp::GetC7Eff(sh*mb); + EvtComplex c10eff = EvtbTosllAmp::GetC10Eff(sh*mb); + + double alphas = 0.119/ + (1 + 0.119*log(pow(4.8,2)/pow(91.1867,2))*23.0/12.0/EvtConst::pi); + double omega9 = -2.0/9.0*EvtConst::pi*EvtConst::pi - 4.0/3.0*ddilog_(sh) + - 2.0/3.0*log(sh)*log(1.0-sh) + - (5.0+4.0*sh)/(3.0*(1.0+2.0*sh)) * log(1.0-sh) + - 2.0*sh*(1.0+sh)*(1.0-2.0*sh) + /(3.0*pow(1.0-sh,2)*(1.0+2.0*sh)) * log(sh) + + (5.0+9.0*sh-6.0*sh*sh)/(6.0*(1.0-sh)*(1.0+2.0*sh)); + double eta9 = 1.0 + alphas*omega9/EvtConst::pi; + double omega7 = -8.0/3.0*log(4.8/mb) + -4.0/3.0*ddilog_(sh) + -2.0/9.0*EvtConst::pi*EvtConst::pi + -2.0/3.0*log(sh)*log(1.0-sh) + -log(1-sh)*(8.0+sh)/(2.0+sh)/3.0 + -2.0/3.0*sh*(2.0 - 2.0*sh - sh*sh)*log(sh)/pow((1.0 - sh),2)/(2.0 + sh) + -(16.0 - 11.0*sh - 17.0*sh*sh)/18.0/(2.0 + sh)/(1.0 - sh); + double eta7 = 1.0 + alphas*omega7/EvtConst::pi; + + double omega79 = -4.0/3.0*log(4.8/mb) + -4.0/3.0*ddilog_(sh) + -2.0/9.0*EvtConst::pi*EvtConst::pi + -2.0/3.0*log(sh)*log(1.0-sh) + -1.0/9.0*(2.0+7.0*sh)*log(1.0 - sh)/sh + -2.0/9.0*sh*(3.0 - 2.0*sh)*log(sh)/pow((1.0 - sh),2) + +1.0/18.0*(5.0 - 9.0*sh)/(1.0 - sh); + double eta79 = 1.0 + alphas*omega79/EvtConst::pi; + + double c7c9 = abs(c7eff)*real(c9eff); + c7c9 *= pow(eta79,2); + double c7c7 = pow(abs(c7eff),2); + c7c7 *= pow(eta7,2); + + double c9c9plusc10c10 = pow(abs(c9eff),2) + pow(abs(c10eff),2); + c9c9plusc10c10 *= pow(eta9,2); + double c9c9minusc10c10 = pow(abs(c9eff),2) - pow(abs(c10eff),2); + c9c9minusc10c10 *= pow(eta9,2); + + lambda = 1.0 + sh*sh + pow(msh,4) - 2.0*(sh + sh*msh*msh + msh*msh); + + f1 = pow(1.0-msh*msh,2) - sh*(1.0 + msh*msh); + f2 = 2.0*(1.0 + msh*msh) * pow(1.0-msh*msh,2) + - sh*(1.0 + 14.0*msh*msh + pow(msh,4)) - sh*sh*(1.0 + msh*msh); + f3 = pow(1.0-msh*msh,2) + sh*(1.0 + msh*msh) - 2.0*sh*sh + + lambda*2.0*mlh*mlh/sh; + f4 = 1.0 - sh + msh*msh; + + delta = ( 12.0*c7c9*f1 + 4.0*c7c7*f2/sh ) * (1.0 + 2.0*mlh*mlh/sh) + + c9c9plusc10c10*f3 + + 6.0*mlh*mlh*c9c9minusc10c10*f4; + + prob = sqrt(lambda*(1.0 - 4.0*mlh*mlh/sh)) * delta; + + return prob; + } + + double EvtbTosllAmp::dGdsdupProb(double mb, double ms, double ml, + double s, double u) + { + // Compute the decay probability density function given a value of s and u + // according to Ali's paper + + double prob; + double f1sp, f2sp, f3sp; + + double sh = s / (mb*mb); + + EvtComplex c9eff = EvtbTosllAmp::GetC9Eff(sh*mb); + EvtComplex c7eff = EvtbTosllAmp::GetC7Eff(sh*mb); + EvtComplex c10eff = EvtbTosllAmp::GetC10Eff(sh*mb); + + double alphas = 0.119/ + (1 + 0.119*log(pow(4.8,2)/pow(91.1867,2))*23.0/12.0/EvtConst::pi); + double omega9 = - 2.0/9.0*EvtConst::pi*EvtConst::pi - 4.0/3.0*ddilog_(sh) + - 2.0/3.0*log(sh)*log(1.0-sh) + - (5.0+4.0*sh)/(3.0*(1.0+2.0*sh)) * log(1.0-sh) + - 2.0*sh*(1.0+sh)*(1.0-2.0*sh) + /(3.0*pow(1.0-sh,2)*(1.0+2.0*sh)) * log(sh) + + (5.0+9.0*sh-6.0*sh*sh)/(6.0*(1.0-sh)*(1.0+2.0*sh)); + double eta9 = 1.0 + alphas*omega9/EvtConst::pi; + double omega7 = -8.0/3.0*log(4.8/mb) + -4.0/3.0*ddilog_(sh) + -2.0/9.0*EvtConst::pi*EvtConst::pi + -2.0/3.0*log(sh)*log(1.0-sh) + -log(1-sh)*(8.0+sh)/(2.0+sh)/3.0 + -2.0/3.0*sh*(2.0 - 2.0*sh - sh*sh)*log(sh)/pow((1.0 - sh),2)/(2.0 + sh) + -(16.0 - 11.0*sh - 17.0*sh*sh)/18.0/(2.0 + sh)/(1.0 - sh); + double eta7 = 1.0 + alphas*omega7/EvtConst::pi; + + double omega79 = -4.0/3.0*log(4.8/mb) + -4.0/3.0*ddilog_(sh) + -2.0/9.0*EvtConst::pi*EvtConst::pi + -2.0/3.0*log(sh)*log(1.0-sh) + -1.0/9.0*(2.0+7.0*sh)*log(1.0 - sh)/sh + -2.0/9.0*sh*(3.0 - 2.0*sh)*log(sh)/pow((1.0 - sh),2) + +1.0/18.0*(5.0 - 9.0*sh)/(1.0 - sh); + double eta79 = 1.0 + alphas*omega79/EvtConst::pi; + + double c7c9 = abs(c7eff)*real(c9eff); + c7c9 *= pow(eta79,2); + double c7c7 = pow(abs(c7eff),2); + c7c7 *= pow(eta7,2); + + double c9c9plusc10c10 = pow(abs(c9eff),2) + pow(abs(c10eff),2); + c9c9plusc10c10 *= pow(eta9,2); + double c9c9minusc10c10 = pow(abs(c9eff),2) - pow(abs(c10eff),2); + c9c9minusc10c10 *= pow(eta9,2); + double c7c10 = abs(c7eff)*real(c10eff); + c7c10 *= eta7; c7c10 *= eta9; + double c9c10 = real(c9eff)*real(c10eff); + c9c10 *= pow(eta9,2); + + f1sp = ( pow(mb*mb-ms*ms,2) - s*s) * c9c9plusc10c10 + + 4.0*( pow(mb,4) - ms*ms*mb*mb - pow(ms,4)*(1.0 - ms*ms/(mb*mb)) + - 8.0*s*ms*ms - s*s*(1.0 + ms*ms/(mb*mb) ))*mb*mb*c7c7/s + // kludged mass term + *(1.0 + 2.0*ml*ml/s) + - 8.0*(s*(mb*mb + ms*ms) - pow(mb*mb-ms*ms,2)) * c7c9 + // kludged mass term + *(1.0 + 2.0*ml*ml/s); + + f2sp = 4.0*s*c9c10 + 8.0*(mb*mb + ms*ms)*c7c10; + f3sp = - (c9c9plusc10c10) + + 4.0*(1.0 + pow(ms/mb,4)) * mb*mb*c7c7/s + // kludged mass term + *(1.0 + 2.0*ml*ml/s); + + prob = (f1sp + f2sp*u + f3sp*u*u)/ pow(mb,3); + + return prob; + } + + + + + + + + + + + + + Index: Class/EvtbTosllBall.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtbTosllBall.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtbTosllBall.cc 7 Oct 2003 02:48:18 -0000 1.1.1.1 --- Class/EvtbTosllBall.cc 12 Jan 2006 16:14:39 -0000 1.2 *************** *** 16,23 **** --- 16,25 ---- // // Ryd January 5, 2000 Module created // + // jjhollar October 7, 2005 Option to select form factors at runtime //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 30,35 **** --- 32,38 ---- #include "EvtGenModels/EvtbTosllVectorAmp.hh" #include + using std::endl; EvtbTosllBall::~EvtbTosllBall() {} *************** *** 67,73 **** double mymaxprob = _calcamp->CalcMaxProb(parnum,mesnum, l1num,l2num, _ballffmodel,_poleSize); ! setProbMax(mymaxprob); } --- 70,76 ---- double mymaxprob = _calcamp->CalcMaxProb(parnum,mesnum, l1num,l2num, _ballffmodel,_poleSize); ! // cout << EvtPDL::getStdHep(mesnum) << "\t" << mymaxprob << endl; setProbMax(mymaxprob); } *************** *** 75,81 **** void EvtbTosllBall::init(){ ! checkNArg(0); checkNDaug(3); //We expect the parent to be a scalar --- 78,98 ---- void EvtbTosllBall::init(){ ! // First choose form factors from the .DEC file ! // 1 = Ali-Ball '01 LCSR ! // 2 = Ali-Ball '99 LCSR ! // 3 = Colangelo 3pt QCD ! // 4 = Melikhov Lattice/Quark dispersion ! // 5 = ??? ! // 6 = Ball-Zwicky '05 LCSR (mb = 480) ! // 7 = Ball-Zwicky '05 LCSR (mb = 460 - pseudoscalar modes only) ! ! // The default is Ali '01 ! int theFormFactorModel = 1; ! ! if(getNArg() == 1) ! theFormFactorModel = (int)getArg(0); ! checkNDaug(3); //We expect the parent to be a scalar *************** *** 89,108 **** mesontype == EvtSpinType::SCALAR)) { report(ERROR,"EvtGen") << "EvtbTosllBall generator expected " << " a SCALAR or VECTOR 1st daughter, found:"<< ! EvtPDL::name(getDaug(0)).c_str()< ! EvtbTosllBallFF::EvtbTosllBallFF(){} void EvtbTosllBallFF::getScalarFF(EvtId parent, EvtId daught, double t, double mass, double& fp,double& f0,double& ft){ ! int model = 1; ! double m=EvtPDL::getMeanMass(parent); double md=EvtPDL::getMeanMass(daught); --- 16,42 ---- // // Ryd January 5, 2000 Module created // + // jjhollar October 7 2005 Add Ball & Zwicky '05 LCSR //------------------------------------------------------------------------ + #include "Experiment/Experiment.h" #include "EvtGenBase/EvtPatches.hh" #include "EvtGenBase/EvtPDL.hh" #include "EvtGenModels/EvtbTosllBallFF.hh" #include ! EvtbTosllBallFF::EvtbTosllBallFF(int ffmodel) ! { ! _theFFModel = ffmodel; ! } void EvtbTosllBallFF::getScalarFF(EvtId parent, EvtId daught, double t, double mass, double& fp,double& f0,double& ft){ ! int model = _theFFModel; ! double m=EvtPDL::getMeanMass(parent); double md=EvtPDL::getMeanMass(daught); *************** *** 39,64 **** double shat2=shat*shat; double shat3=shat2*shat; if (model == 1) { ! //this is Ali-Ball fp = 0.319*exp(1.465*shat+0.372*shat2+0.782*shat3); f0 = 0.319*exp(0.633*shat-0.095*shat2+0.591*shat3); ft = 0.355*exp(1.478*shat+0.373*shat2+0.700*shat3); } ! if (model == 2) { //QCD sum rules (Colangelo et al) fp = 0.25/(1.-t/(5.0*5.0)); f0 = 0.25/(1.-t/(7.0*7.0)); ft = - 0.14/((1.0 - t/(5.0*5.0))*(1.0 - t/(7.0*7.0))); } ! if (model == 3) { // Quark model (Melikhov et al) fp = 0.36/(1. - 0.048*t + 0.00063*t*t); double fm = -0.30/(1. - 0.050*t + 0.00061*t*t); f0 = fp + fm*(t/(m*m - md*md)); ft = -(m+md)*0.06/(1 -0.049*t + 0.00064*t*t); } ! } --- 44,161 ---- double shat2=shat*shat; double shat3=shat2*shat; + if (daught == EvtPDL::getId(std::string("K+")) || + daught == EvtPDL::getId(std::string("K-")) || + daught == EvtPDL::getId(std::string("K_S0")) || + daught == EvtPDL::getId(std::string("K0")) || + daught == EvtPDL::getId(std::string("anti-K0")) || + daught == EvtPDL::getId(std::string("K_L0")) + ) + { + // B --> K form factors if (model == 1) { ! //this is Ali-Ball '01 ! fp = 0.278*exp(1.568*shat+0.470*shat2+0.885*shat3); ! f0 = 0.278*exp(0.740*shat+0.080*shat2+0.425*shat3); ! ft = 0.300*exp(1.600*shat+0.501*shat2+0.796*shat3); ! } ! if (model == 2) { ! //this is Ali-Ball '99 fp = 0.319*exp(1.465*shat+0.372*shat2+0.782*shat3); f0 = 0.319*exp(0.633*shat-0.095*shat2+0.591*shat3); ft = 0.355*exp(1.478*shat+0.373*shat2+0.700*shat3); } ! if (model == 3) { //QCD sum rules (Colangelo et al) fp = 0.25/(1.-t/(5.0*5.0)); f0 = 0.25/(1.-t/(7.0*7.0)); ft = - 0.14/((1.0 - t/(5.0*5.0))*(1.0 - t/(7.0*7.0))); } ! if (model == 4) { // Quark model (Melikhov et al) fp = 0.36/(1. - 0.048*t + 0.00063*t*t); double fm = -0.30/(1. - 0.050*t + 0.00061*t*t); f0 = fp + fm*(t/(m*m - md*md)); ft = -(m+md)*0.06/(1 -0.049*t + 0.00064*t*t); } ! if (model == 5) { ! fp = 0.341/(1. - 1.41*shat + 0.406*shat*shat); ! f0 = 0.341/(1. - 0.41*shat -0.361*shat*shat); ! ft = 0.374/(1. - 1.42*shat + 0.434*shat*shat); ! } ! if (model == 6) { ! // Ball-Zwicky LCSR '05 "set 2" (mb = 4.8) ! fp = (0.1616 / (1. - (t/29.30))) + ! (0.1730 / (1. - (t/29.30)) / (1. - (t/29.30))); ! f0 = (0.3302 / (1. - (t/37.46/37.46))); ! ft = (0.1614 / (1. - (t/29.30))) + ! (0.1981 / (1. - (t/29.30)) / (1. - (t/29.30))); ! } ! if (model == 7){ ! // Ball-Zwicky LCSR '05 "set 4" (mb = 4.6) ! fp = (0.1903 / (1. - (t/29.30))) + ! (0.1478 / (1. - (t/29.30)) / (1. - (t/29.30))); ! f0 = (0.3338 / (1. - (t/38.98/38.98))); ! ft = (0.1851 / (1. - (t/29.30))) + ! (0.1905 / (1. - (t/29.30)) / (1. - (t/29.30))); ! } ! } ! else if (daught == EvtPDL::getId(std::string("pi+")) || ! daught == EvtPDL::getId(std::string("pi-")) || ! daught == EvtPDL::getId(std::string("pi0")) ! ) ! { ! if(model == 1){ ! // B --> pi form factors ! fp = 0.261/(1. - 2.03*shat + 1.293*shat*shat); ! f0 = 0.261/(1. - 0.27*shat -0.752*shat*shat); ! ft = 0.296/(1. - 1.28*shat + 0.193*shat*shat); ! } ! if(model == 6){ ! // Ball-Zwicky LCSR '05 "set 4" (mb = 4.6) ! fp = (0.744 / (1. - (t/28.40))) + (-0.486 / (1. - (t/40.73))); ! f0 = (0.258 / (1. - (t/33.81))); ! ft = (1.387 / (1. - (t/28.40))) + (-1.134 / (1. - (t/32.22))); ! } ! if(model == 7){ ! // Ball-Zwicky LCSR '05 "set 4" (mb = 4.8) ! fp = (0.944 / (1. - (t/28.40))) + (-0.486 / (1. - (t/34.27))); ! f0 = (0.270 / (1. - (t/33.63))); ! ft = (0.152 / (1. - (t/28.40))) + ! (0.122 / (1. - (t/28.40)) / (1. - (t/28.40))); ! } ! } ! else if (daught == EvtPDL::getId(std::string("eta")) || ! daught == EvtPDL::getId(std::string("eta'")) ! ) ! { ! if(model == 1){ ! // B --> eta form factors ! fp = 0.261/(1. - 2.03*shat + 1.293*shat*shat); ! f0 = 0.261/(1. - 0.27*shat -0.752*shat*shat); ! ft = 0.296/(1. - 1.28*shat + 0.193*shat*shat); ! } ! if(model == 6){ ! // Ball-Zwicky LCSR '05 "set 2" (mb = 4.8) ! fp = (0.1220 / (1. - (t/28.40))) + ! (0.1553 / (1. - (t/28.40)) / (1. - (t/28.40))); ! f0 = (0.2734 / (1. - (t/31.03/31.03))); ! ft = (0.1108 / (1. - (t/28.40))) + ! (0.1752 / (1. - (t/28.40)) / (1. - (t/28.40))); ! } ! if(model == 7){ ! // Ball-Zwicky LCSR '05 "set 2" (mb = 4.8) ! fp = (0.1380 / (1. - (t/28.40))) + ! (0.1462 / (1. - (t/28.40)) / (1. - (t/28.40))); ! f0 = (0.2799 / (1. - (t/30.46/30.46))); ! ft = (0.1160 / (1. - (t/28.40))) + ! (0.1841 / (1. - (t/28.40)) / (1. - (t/28.40))); ! } ! } ! ! // cout << "shat "< rho form factors ! a1 = 0.261/(1. - 0.29*shat - 0.415*shat*shat); ! a2 = 0.223/(1. - 0.93*shat - 0.092*shat*shat); ! a0 = 0.372/(1. - 1.40*shat + 0.437*shat*shat); ! v = 0.338/(1. - 1.37*shat + 0.315*shat*shat); ! t1 = 0.285/(1. - 1.41*shat + 0.361*shat*shat); ! t2 = 0.285/(1. - 0.28*shat - 0.500*shat*shat); ! t3 = 0.202/(1. - 1.06*shat - 0.076*shat*shat); ! } ! if(model == 6){ ! // Ball-Zwicky LCSR '05 (mb = 4.8) ! a1 = 0.240 / (1. - (t/37.51)); ! a2 = (0.009 / (1. - (t/40.82))) + ! (0.212 / (1. - (t/40.82)) / (1. - (t/40.82))); ! a0 = (1.527 / (1. - (t/(5.28*5.28)))) + ! (-1.220 / (1. - (t/33.36))); ! v = (1.045 / (1. - (t/(5.32*5.32)))) + ! (-0.721 / (1. - (t/38.34))); ! t1 = (0.897 / (1. - (t/(5.32*5.32)))) + ! (-0.629 / (1 - (t/38.04))); ! t2 = 0.267 / (1. - (t/38.59)); ! t3 = (0.022 / (1. - (t/40.88))) + ! (0.246 / (1. - (t/40.88)) / (1. - (t/40.88))); ! } ! } ! else if (daught == EvtPDL::getId(std::string("omega")) ! ) ! { ! if(model == 1){ ! // B --> rho form factors ! a1 = 0.261/(1. - 0.29*shat - 0.415*shat*shat); ! a2 = 0.223/(1. - 0.93*shat - 0.092*shat*shat); ! a0 = 0.372/(1. - 1.40*shat + 0.437*shat*shat); ! v = 0.338/(1. - 1.37*shat + 0.315*shat*shat); ! t1 = 0.285/(1. - 1.41*shat + 0.361*shat*shat); ! t2 = 0.285/(1. - 0.28*shat - 0.500*shat*shat); ! t3 = 0.202/(1. - 1.06*shat - 0.076*shat*shat); ! } ! if(model == 6){ ! // Ball-Zwicky LCSR '05 (mb = 4.8) ! a1 = -0.217 / (1. - (t/37.01)); ! a2 = (0.006 / (1. - (t/41.24))) + ! (0.192 / (1. - (t/41.24)) / (1. - (t/41.24))); ! a0 = (1.321 / (1. - (t/(5.28*5.28)))) + ! (-1.040 / (1. - (t/34.47))); ! v = (1.006 / (1. - (t/(5.32*5.32)))) + ! (-0.713 / (1. - (t/37.45))); ! t1 = (0.865 / (1. - (t/(5.32*5.32)))) + ! (-0.622 / (1 - (t/37.19))); ! t2 = 0.242 / (1. - (t/37.95)); ! t3 = (0.023 / (1. - (t/40.87))) + ! (0.220 / (1. - (t/40.87)) / (1. - (t/40.87))); ! } ! } ! else if (daught == EvtPDL::getId(std::string("phi")) ! ) ! { ! if(model == 6){ ! // Ball-Zwicky LCSR '05 (mb = 4.8) ! a1 = 0.308 / (1. - (t/36.54)); ! a2 = (-0.054 / (1. - (t/48.94))) + ! (0.288 / (1. - (t/48.94)) / (1. - (t/48.94))); ! a0 = (3.310 / (1. - (t/(5.28*5.28)))) + ! (-2.835 / (1. - (t/31.57))); ! v = (1.484 / (1. - (t/(5.32*5.32)))) + ! (-1.049 / (1. - (t/39.52))); ! t1 = (1.303 / (1. - (t/(5.32*5.32)))) + ! (-0.954 / (1 - (t/38.28))); ! t2 = 0.349 / (1. - (t/37.21)); ! t3 = (0.027 / (1. - (t/45.56))) + ! (0.321 / (1. - (t/45.56)) / (1. - (t/45.56))); ! } ! } ! //cout << "shat "<getDaug(1)->getP4() --- 33,45 ---- #include "EvtGenBase/EvtId.hh" #include "EvtGenBase/EvtIdSet.hh" #include "EvtGenBase/EvtAmp.hh" + #include "EvtGenModels/EvtbTosllAmp.hh" #include "EvtGenModels/EvtbTosllFF.hh" void EvtbTosllScalarAmp::CalcAmp( EvtParticle *parent, EvtAmp& amp, EvtbTosllFF *formFactors ) { //Add the lepton and neutrino 4 momenta to find q2 EvtVector4R q = parent->getDaug(1)->getP4() *************** *** 54,63 **** mesonmass, fp,f0,ft); EvtVector4R p4b; p4b.set(parent->mass(),0.0,0.0,0.0); - EvtVector4R p4meson = parent->getDaug(0)->getP4(); EvtVector4C l11,l12; EvtVector4C l21,l22; --- 56,74 ---- mesonmass, fp,f0,ft); + EvtId daught = parent->getDaug(0)->getId(); + bool btod = false; + bool nnlo = true; + if (daught == EvtPDL::getId(std::string("pi+")) || + daught == EvtPDL::getId(std::string("pi-")) || + daught == EvtPDL::getId(std::string("pi0")) || + daught == EvtPDL::getId(std::string("eta")) || + daught == EvtPDL::getId(std::string("eta'")) + ) btod = true; + EvtVector4R p4b; p4b.set(parent->mass(),0.0,0.0,0.0); EvtVector4C l11,l12; EvtVector4C l21,l22; *************** *** 72,80 **** EvtVector4R phat=p4b/parentmass; EvtVector4R qhat=q/parentmass; ! //double c9=4.344; ! //double c7=-0.313; ! //double c10=-4.669; //double mbhat=1; double mbhat=4.4/(parentmass); //double mkhat = 0.15; --- 83,92 ---- EvtVector4R phat=p4b/parentmass; EvtVector4R qhat=q/parentmass; ! EvtComplex c7eff = EvtbTosllAmp::GetC7Eff(q2,nnlo); ! EvtComplex c9eff = EvtbTosllAmp::GetC9Eff(q2,nnlo,btod); ! EvtComplex c10eff = EvtbTosllAmp::GetC10Eff(q2,nnlo); ! //double mbhat=1; double mbhat=4.4/(parentmass); //double mkhat = 0.15; *************** *** 83,93 **** double fm=(f0-fp)*(1-mkhat*mkhat)/shat; ! double aprime=_c9*fp+2.0*mbhat*_c7*ft/(1+mkhat); ! double bprime=_c9*fm-2*mbhat*_c7*ft*(1-mkhat)/shat; ! ! double cprime=_c10*fp; ! double dprime=_c10*fm; static EvtIdSet leptons("e-","mu-","tau-"); static EvtIdSet antileptons("e+","mu+","tau+"); --- 95,109 ---- double fm=(f0-fp)*(1-mkhat*mkhat)/shat; ! EvtComplex aprime; ! aprime = c9eff*fp+2.0*mbhat*c7eff*ft/(1+mkhat); ! EvtComplex bprime; ! bprime = c9eff*fm-2*mbhat*c7eff*ft*(1-mkhat)/shat; ! ! EvtComplex cprime; ! cprime = c10eff*fp; ! EvtComplex dprime; ! dprime = c10eff*fm; static EvtIdSet leptons("e-","mu-","tau-"); static EvtIdSet antileptons("e+","mu+","tau+"); *************** *** 154,156 **** --- 170,183 ---- + + + + + + + + + + + Index: Class/EvtbTosllVectorAmp.cc =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/EvtbTosllVectorAmp.cc,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/EvtbTosllVectorAmp.cc 7 Oct 2003 02:48:18 -0000 1.1.1.1 --- Class/EvtbTosllVectorAmp.cc 12 Jan 2006 16:14:39 -0000 1.2 *************** *** 19,24 **** --- 19,25 ---- // //------------------------------------------------------------------------ // + #include "Experiment/Experiment.h" #include "EvtGenBase/EvtPatches.hh" #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" *************** *** 31,43 **** #include "EvtGenBase/EvtId.hh" #include "EvtGenBase/EvtIdSet.hh" #include "EvtGenBase/EvtAmp.hh" #include "EvtGenModels/EvtbTosllFF.hh" void EvtbTosllVectorAmp::CalcAmp( EvtParticle *parent, EvtAmp& amp, EvtbTosllFF *formFactors ) { - //Add the lepton and neutrino 4 momenta to find q2 EvtVector4R q = parent->getDaug(1)->getP4() --- 32,44 ---- #include "EvtGenBase/EvtId.hh" #include "EvtGenBase/EvtIdSet.hh" #include "EvtGenBase/EvtAmp.hh" + #include "EvtGenModels/EvtbTosllAmp.hh" #include "EvtGenModels/EvtbTosllFF.hh" void EvtbTosllVectorAmp::CalcAmp( EvtParticle *parent, EvtAmp& amp, EvtbTosllFF *formFactors ) { //Add the lepton and neutrino 4 momenta to find q2 EvtVector4R q = parent->getDaug(1)->getP4() *************** *** 56,61 **** --- 57,74 ---- a1,a2,a0,v,t1,t2,t3); + EvtId daught = parent->getDaug(0)->getId(); + bool btod = false; + bool nnlo = true; + if + ( + daught == EvtPDL::getId(std::string("rho+")) || + daught == EvtPDL::getId(std::string("rho-")) || + daught == EvtPDL::getId(std::string("rho0")) || + daught == EvtPDL::getId(std::string("omega")) + ) + btod = true; + EvtVector4R p4b; p4b.set(parent->mass(),0.0,0.0,0.0); EvtVector4R p4meson = parent->getDaug(0)->getP4(); *************** *** 75,100 **** EvtVector4R pkstarhat=p4meson/parentmass; EvtVector4R phat=pbhat+pkstarhat; ! //values of the Wilson coefficients are given on p. 5 ! //double c9=4.344; ! //double c7=-0.313; ! //double c10=-4.669; double mhatb=4.4/(parentmass); double mhatkstar=mesonmass/(parentmass); double shat=q2/(parentmass*parentmass); ! double a=_c9*v*2/(1+mhatkstar)+4*mhatb*_c7*t1/shat; ! double b=(1+mhatkstar)*(_c9*a1+2*mhatb*(1-mhatkstar)*_c7*t2/shat); ! double c=((1-mhatkstar)*_c9*a2+ ! 2*mhatb*_c7*(t3+(1-mhatkstar*mhatkstar)*t2/shat))/ (1-mhatkstar*mhatkstar); ! double d=(_c9*((1+mhatkstar)*a1-(1-mhatkstar)*a2-2*mhatkstar*a0) ! -2*mhatb*_c7*t3)/shat; ! double e=2*_c10*v/(1+mhatkstar); ! double f=(1+mhatkstar)*_c10*a1; ! double g=_c10*a2/(1+mhatkstar); ! double h=_c10*((1+mhatkstar)*a1-(1-mhatkstar)*a2-2*mhatkstar*a0)/shat; EvtTensor4C T1,T2; --- 88,122 ---- EvtVector4R pkstarhat=p4meson/parentmass; EvtVector4R phat=pbhat+pkstarhat; ! EvtComplex c7eff = EvtbTosllAmp::GetC7Eff(q2,nnlo); ! EvtComplex c9eff = EvtbTosllAmp::GetC9Eff(q2,nnlo,btod); ! EvtComplex c10eff = EvtbTosllAmp::GetC10Eff(q2,nnlo); ! EvtComplex uniti(0.0,1.0); ! double mhatb=4.4/(parentmass); double mhatkstar=mesonmass/(parentmass); double shat=q2/(parentmass*parentmass); ! EvtComplex a; ! a=c9eff*v*2/(1+mhatkstar)+4*mhatb*c7eff*t1/shat; ! EvtComplex b; ! b=(1+mhatkstar)*(c9eff*a1+2*mhatb*(1-mhatkstar)*c7eff*t2/shat); ! EvtComplex c; ! c=((1-mhatkstar)*c9eff*a2+ ! 2*mhatb*c7eff*(t3+(1-mhatkstar*mhatkstar)*t2/shat))/ (1-mhatkstar*mhatkstar); ! EvtComplex d; ! d=(c9eff*((1+mhatkstar)*a1-(1-mhatkstar)*a2-2*mhatkstar*a0) ! -2*mhatb*c7eff*t3)/shat; ! EvtComplex e; ! e=2*c10eff*v/(1+mhatkstar); ! EvtComplex f; ! f=(1+mhatkstar)*c10eff*a1; ! EvtComplex g; ! g=c10eff*a2/(1+mhatkstar); ! EvtComplex h; ! h=c10eff*((1+mhatkstar)*a1-(1-mhatkstar)*a2-2*mhatkstar*a0)/shat; EvtTensor4C T1,T2; *************** *** 117,130 **** if (bmesons.contains(parentID)) { T1=a*dual(directProd(pbhat,pkstarhat)) ! -EvtComplex(0,b)*EvtTensor4C::g() ! +EvtComplex(0,c)*directProd(pbhat,phat) ! +EvtComplex(0,d)*directProd(pbhat,qhat); T2=e*dual(directProd(pbhat,pkstarhat)) ! -EvtComplex(0,f)*EvtTensor4C::g() ! +EvtComplex(0,g)*directProd(pbhat,phat) ! +EvtComplex(0,h)*directProd(pbhat,qhat); l11=EvtLeptonVCurrent(lepPlus->spParent(0), lepMinus->spParent(0)); --- 139,152 ---- if (bmesons.contains(parentID)) { T1=a*dual(directProd(pbhat,pkstarhat)) ! -b*uniti*EvtTensor4C::g() ! +c*uniti*directProd(pbhat,phat) ! +d*uniti*directProd(pbhat,qhat); T2=e*dual(directProd(pbhat,pkstarhat)) ! -f*uniti*EvtTensor4C::g() ! +g*uniti*directProd(pbhat,phat) ! +h*uniti*directProd(pbhat,qhat); l11=EvtLeptonVCurrent(lepPlus->spParent(0), lepMinus->spParent(0)); *************** *** 149,162 **** if (bbarmesons.contains(parentID)) { T1=-a*dual(directProd(pbhat,pkstarhat)) ! -EvtComplex(0,b)*EvtTensor4C::g() ! +EvtComplex(0,c)*directProd(pbhat,phat) ! +EvtComplex(0,d)*directProd(pbhat,qhat); T2=-e*dual(directProd(pbhat,pkstarhat)) ! -EvtComplex(0,f)*EvtTensor4C::g() ! +EvtComplex(0,g)*directProd(pbhat,phat) ! +EvtComplex(0,h)*directProd(pbhat,qhat); l11=EvtLeptonVCurrent(lepPlus->spParent(1), lepMinus->spParent(1)); --- 171,184 ---- if (bbarmesons.contains(parentID)) { T1=-a*dual(directProd(pbhat,pkstarhat)) ! -b*uniti*EvtTensor4C::g() ! +c*uniti*directProd(pbhat,phat) ! +d*uniti*directProd(pbhat,qhat); T2=-e*dual(directProd(pbhat,pkstarhat)) ! -f*uniti*EvtTensor4C::g() ! +g*uniti*directProd(pbhat,phat) ! +h*uniti*directProd(pbhat,qhat); l11=EvtLeptonVCurrent(lepPlus->spParent(1), lepMinus->spParent(1)); *************** *** 203,205 **** --- 225,228 ---- + Index: Class/continuum.F =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/continuum.F,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/continuum.F 7 Oct 2003 02:48:19 -0000 1.1.1.1 --- Class/continuum.F 12 Jan 2006 16:14:39 -0000 1.2 *************** *** 75,96 **** do 2, i=1,n if(k(i,3).le.0.and.k(i,2).ne.22) goto 2 c if particle is jet or cluster ! if(k(k(i,3),2).eq.92.or.k(k(i,3),2).eq.91.or. ! + (k(i,2).eq.22.and.istart.eq.0)) then C Copy particle. If parent is cluster or string or photon if C before first cluster or string. Uggly... ! if (k(i,2).ne.22) istart=1 ! ndaug = ndaug + 1 ! kf(ndaug)=k(i,2) ! px(ndaug)=p(i,1) ! py(ndaug)=p(i,2) ! pz(ndaug)=p(i,3) ! pxsum=pxsum+px(ndaug) ! pysum=pysum+py(ndaug) ! pzsum=pzsum+pz(ndaug) ! e(ndaug) =p(i,4) ! endif ! 2 continue if (abs(pxsum).gt.0.001.or. --- 75,102 ---- do 2, i=1,n if(k(i,3).le.0.and.k(i,2).ne.22) goto 2 c if particle is jet or cluster ! ! if (k(i,2).eq.22.and.istart.eq.0) goto 22 ! if ( k(i,3).le.0) goto 2 ! ! if(k(k(i,3),2).eq.92.or.k(k(i,3),2).eq.91) goto 22 ! ! goto 2 ! ! 22 continue C Copy particle. If parent is cluster or string or photon if C before first cluster or string. Uggly... ! if (k(i,2).ne.22) istart=1 ! ndaug = ndaug + 1 ! kf(ndaug)=k(i,2) ! px(ndaug)=p(i,1) ! py(ndaug)=p(i,2) ! pz(ndaug)=p(i,3) ! pxsum=pxsum+px(ndaug) ! pysum=pysum+py(ndaug) ! pzsum=pzsum+pz(ndaug) ! e(ndaug) =p(i,4) ! 2 continue if (abs(pxsum).gt.0.001.or. Index: Class/jetset1.F =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/jetset1.F,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/jetset1.F 7 Oct 2003 02:48:19 -0000 1.1.1.1 --- Class/jetset1.F 12 Jan 2006 16:14:39 -0000 1.2 *************** *** 81,87 **** MSTJ(92)=0 ELSEIF(MSTJ(92).LT.0) THEN IP1=-MSTJ(92) ! CALL LUSHOW(IP1,-3,P(IP,5)) CALL LUPREP(IP1) MSTJ(92)=0 ENDIF --- 81,87 ---- MSTJ(92)=0 ELSEIF(MSTJ(92).LT.0) THEN IP1=-MSTJ(92) ! CALL LUSHOW(IP1,-3,P(IP1,5)) CALL LUPREP(IP1) MSTJ(92)=0 ENDIF Index: Class/lucomp.F =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/lucomp.F,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** Class/lucomp.F 16 Oct 2003 04:09:15 -0000 1.2 --- Class/lucomp.F 5 Feb 2006 03:08:28 -0000 1.3 *************** *** 51,56 **** --- 51,70 ---- RETURN ENDIF + C...Allow for massive dbar-u, dbar-d systems + IF (KFA.EQ.30373.OR.KFA.EQ.30383) THEN + LUCOMP=451+KFLC + RETURN + ENDIF + + + C...Add eta_c(2S) + IF (KFA.EQ.20441) THEN + LUCOMP=460 + RETURN + ENDIF + + C...Simple cases: direct translation or table. IF(KFA.EQ.0.OR.KFA.GE.1000000) THEN RETURN Index: Class/pytime.F =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/Class/pytime.F,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** Class/pytime.F 7 Oct 2003 02:48:20 -0000 1.1.1.1 --- Class/pytime.F 12 Jan 2006 16:14:39 -0000 1.2 *************** *** 13,20 **** C...Double precision and integer declarations. IMPLICIT DOUBLE PRECISION(A-H, O-Z) IMPLICIT INTEGER(I-N) ! INTEGER PYK,PYCHGE,PYCOMP ! CHARACTER*8 ATIME C...Local array. INTEGER IDATI(6),IDTEMP(3) --- 13,20 ---- C...Double precision and integer declarations. IMPLICIT DOUBLE PRECISION(A-H, O-Z) IMPLICIT INTEGER(I-N) ! C INTEGER PYK,PYCHGE,PYCOMP ! C CHARACTER*8 ATIME C...Local array. INTEGER IDATI(6),IDTEMP(3) Index: EvtGenModels/EvtBtoKD3P.hh =================================================================== RCS file: EvtGenModels/EvtBtoKD3P.hh diff -N EvtGenModels/EvtBtoKD3P.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtBtoKD3P.hh 12 Jan 2006 16:13:04 -0000 1.1 *************** *** 0 **** --- 1,87 ---- + //----------------------------------------------------------------------- + // File and Version Information: + // $Id: EvtBtoKD3P.hh,v 1.1 2006/01/12 16:13:04 ryd Exp $ + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: + // Copyright (C) 2003, Colorado State University + // + // Module creator: + // Abi soffer, CSU, 2003 + //----------------------------------------------------------------------- + + // Decay model that does the decay B+ -> K+ D , D -> 3 psudoscalars. + // + // The B- daughters specified in the decay file should be K-, D0, D0, + // where the first D0 is produced via b->c decay and the second via b->u. + // In reality, only one D daughter exists, so the first two + // daughters must be defined to decay to the same final state using + // the EvtPto3P model, but with CP-conjugate amplitudes. + // + // For a given point in the Pto3P Dalitz plot, + // the total amplitude is \propto [A1 + A2 r exp(i(phase))], where + // + // A1 & A2 are the amplitudes of the D0 and D0bar to decay into that + // Dalitz plot point, + // + // r is the (positive) ratio between the A(B->B0bar K) and A(B->D0 K) + // B decay amplitudes, + // + // phase is the total phase difference (weak phase + strong phase) between + // A(B->D0bar K) and A(B->B0 K). + // + // Note that this model knows nothing about your convention for the + // sign of the phase, so when specifying the decay of a B- you need to + // change the order of D0 and D0bar and change the total phase so that + // the sign of the weak phase flips with respect to the parameters of B+. + // + + #ifndef EVT_BTOKD3P + #define EVT_BTOKD3P + + class EvtParticle; + #include "EvtGenBase/EvtDecayAmp.hh" + #include "EvtGenBase/EvtComplex.hh" + + + class EvtBtoKD3P : public EvtDecayAmp { + + public: + EvtBtoKD3P(); + EvtBtoKD3P(const EvtBtoKD3P & other); + virtual ~EvtBtoKD3P(); + EvtDecayBase* clone(); + + // Initialize model + virtual void init(); + virtual void initProbMax(); + virtual void decay(EvtParticle *p); + + // we really have two daughters, although three are listed in the .dec file: + virtual int nRealDaughters() { return 2;} + + void getName(std::string& model_name); + + protected: + // parameters: + double _r; + EvtComplex _exp; + + // other: + const EvtDecayBase * _model1; + const EvtDecayBase * _model2; + bool _decayedOnce; + + }; + + + #endif + + + + + Index: EvtGenModels/EvtBtoXsgamma.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtBtoXsgamma.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtBtoXsgamma.hh 7 Oct 2003 02:48:02 -0000 1.1.1.1 --- EvtGenModels/EvtBtoXsgamma.hh 12 Jan 2006 16:13:04 -0000 1.2 *************** *** 33,39 **** public: ! EvtBtoXsgamma() {}; virtual ~EvtBtoXsgamma(); --- 33,39 ---- public: ! EvtBtoXsgamma() {_model=0;} virtual ~EvtBtoXsgamma(); Index: EvtGenModels/EvtBtoXsgammaFermiUtil.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtBtoXsgammaFermiUtil.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtBtoXsgammaFermiUtil.hh 7 Oct 2003 02:48:02 -0000 1.1.1.1 --- EvtGenModels/EvtBtoXsgammaFermiUtil.hh 12 Jan 2006 16:13:04 -0000 1.2 *************** *** 23,29 **** #ifndef EVTBTOXSGAMMAFERMIUTIL_HH #define EVTBTOXSGAMMAFERMIUTIL_HH ! #include "CLHEP/Matrix/Vector.h" class EvtBtoXsgammaFermiUtil { --- 23,29 ---- #ifndef EVTBTOXSGAMMAFERMIUTIL_HH #define EVTBTOXSGAMMAFERMIUTIL_HH ! #include class EvtBtoXsgammaFermiUtil { *************** *** 38,58 **** virtual ~EvtBtoXsgammaFermiUtil() { }; //Exponential function ! static double FermiExpFunc(double var, const HepVector &coeffs); //Gaussian function and its helper functions ! static double FermiGaussFunc(double, HepVector const &coeffs); ! static double FermiGaussFuncRoot(double, double, double, HepVector &coeffs); ! static double FermiGaussRootFcnA(double, const HepVector &coeffs1, const HepVector &coeffs2); ! static double FermiGaussRootFcnB(double, const HepVector &coeffs1, const HepVector &coeffs2); ! static double Gamma(double, const HepVector &coeffs); //Roman function and its helper functions static double BesselI1(double); static double BesselK1(double); static double FermiRomanFuncRoot(double, double); static double FermiRomanRootFcnA(double); ! static double FermiRomanFunc(double, HepVector const &coeffs); }; --- 38,58 ---- virtual ~EvtBtoXsgammaFermiUtil() { }; //Exponential function ! static double FermiExpFunc(double var, const std::vector &coeffs); //Gaussian function and its helper functions ! static double FermiGaussFunc(double, std::vector const &coeffs); ! static double FermiGaussFuncRoot(double, double, double, std::vector &coeffs); ! static double FermiGaussRootFcnA(double, const std::vector &coeffs1, const std::vector &coeffs2); ! static double FermiGaussRootFcnB(double, const std::vector &coeffs1, const std::vector &coeffs2); ! static double Gamma(double, const std::vector &coeffs); //Roman function and its helper functions static double BesselI1(double); static double BesselK1(double); static double FermiRomanFuncRoot(double, double); static double FermiRomanRootFcnA(double); ! static double FermiRomanFunc(double, std::vector const &coeffs); }; Index: EvtGenModels/EvtBtoXsgammaKagan.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtBtoXsgammaKagan.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtBtoXsgammaKagan.hh 7 Oct 2003 02:48:02 -0000 1.1.1.1 --- EvtGenModels/EvtBtoXsgammaKagan.hh 12 Jan 2006 16:13:05 -0000 1.2 *************** *** 23,29 **** #ifndef EVTBTOXSGAMMAKAGAN_HH #define EVTBTOXSGAMMAKAGAN_HH ! #include "CLHEP/Matrix/Vector.h" #include "EvtGenModels/EvtBtoXsgammaAbsModel.hh" class EvtBtoXsgammaKagan : public EvtBtoXsgammaAbsModel { --- 23,29 ---- #ifndef EVTBTOXSGAMMAKAGAN_HH #define EVTBTOXSGAMMAKAGAN_HH ! #include #include "EvtGenModels/EvtBtoXsgammaAbsModel.hh" class EvtBtoXsgammaKagan : public EvtBtoXsgammaAbsModel { *************** *** 96,123 **** double _alphasmubar; double _etamu; ! HepVector _mHVect; static double ReG(double); static double ImG(double); static double s77(double); static double s88(double, double, double); static double s78(double); ! static double s22Func(double var, const HepVector &coeffs); ! static double s27Func(double var, const HepVector &coeffs); static double Delta(double, double); ! static double DeltaFermiFunc(double, const HepVector &coeffs1, const HepVector &coeffs2, const HepVector &coeffs3); ! static double s77FermiFunc(double, const HepVector &coeffs1, const HepVector &coeffs2); ! static double s88FermiFunc(double, const HepVector &coeffs1, const HepVector &coeffs2, const HepVector &coeffs3); ! static double s78FermiFunc(double, const HepVector &coeffs1, const HepVector &coeffs2); ! static double s22FermiFunc(double, HepVector &coeffs); ! static double s27FermiFunc(double, HepVector &coeffs); ! static double s28FermiFunc(double, HepVector &coeffs); ! static double GetArrayVal(double, double, double, double, HepVector); ! static double sFermiFunc(double, const HepVector &coeffs1, const HepVector &coeffs2, ! const HepVector &coeffs3, const HepVector &coeffs4); ! static double FermiFunc(double, const HepVector &coeffs); static double diLogFunc(double); static double diLogMathematica(double); double *massHad; double *brHad; --- 96,123 ---- double _alphasmubar; double _etamu; ! std::vector _mHVect; static double ReG(double); static double ImG(double); static double s77(double); static double s88(double, double, double); static double s78(double); ! static double s22Func(double var, const std::vector &coeffs); ! static double s27Func(double var, const std::vector &coeffs); static double Delta(double, double); ! static double DeltaFermiFunc(double, const std::vector &coeffs1, const std::vector &coeffs2, const std::vector &coeffs3); ! static double s77FermiFunc(double, const std::vector &coeffs1, const std::vector &coeffs2); ! static double s88FermiFunc(double, const std::vector &coeffs1, const std::vector &coeffs2, const std::vector &coeffs3); ! static double s78FermiFunc(double, const std::vector &coeffs1, const std::vector &coeffs2); ! static double s22FermiFunc(double, std::vector &coeffs); ! static double s27FermiFunc(double, std::vector &coeffs); ! static double s28FermiFunc(double, std::vector &coeffs); ! static double GetArrayVal(double, double, double, double, std::vector); ! static double sFermiFunc(double, const std::vector &coeffs1, const std::vector &coeffs2, ! const std::vector &coeffs3, const std::vector &coeffs4); ! static double FermiFunc(double, const std::vector &coeffs); static double diLogFunc(double); static double diLogMathematica(double); double *massHad; double *brHad; Index: EvtGenModels/EvtBtoXsll.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtBtoXsll.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtBtoXsll.hh 7 Oct 2003 02:48:03 -0000 1.1.1.1 --- EvtGenModels/EvtBtoXsll.hh 12 Jan 2006 16:13:05 -0000 1.2 *************** *** 1,8 **** //-------------------------------------------------------------------------- // - // - // Copyright Information: See EvtGen/COPYRIGHT - // // Environment: // This software is part of the EvtGen package developed jointly // for the BaBar and CLEO collaborations. If you use all or part --- 1,5 ---- *************** *** 50,55 **** --- 47,57 ---- EvtBtoXsllUtil *_calcprob; double _dGdsProbMax; double _dGdsdupProbMax; + double _mb; + double _ms; + double _mq; + double _pf; + double _mxmin; }; #endif Index: EvtGenModels/EvtBtoXsllUtil.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtBtoXsllUtil.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtBtoXsllUtil.hh 7 Oct 2003 02:48:03 -0000 1.1.1.1 --- EvtGenModels/EvtBtoXsllUtil.hh 12 Jan 2006 16:13:05 -0000 1.2 *************** *** 1,8 **** //-------------------------------------------------------------------------- // - // - // Copyright Information: See EvtGen/COPYRIGHT - // // Environment: // This software is part of the EvtGen package developed jointly // for the BaBar and CLEO collaborations. If you use all or part --- 1,5 ---- *************** *** 16,22 **** // // Modification history: // ! // Stephane Willocq Jan 19, 2001 Module created // //------------------------------------------------------------------------ --- 13,20 ---- // // Modification history: // ! // Stephane Willocq Jan 19, 2001 Module created ! // Stephane Willocq Nov 6, 2003 Update Wilson Coeffs // //------------------------------------------------------------------------ *************** *** 27,43 **** #include "EvtGenBase/EvtDecayIncoherent.hh" #include "EvtGenBase/EvtParticle.hh" class EvtBtoXsllUtil{ public: ! EvtComplex coeff9(double mb, double sh); double dGdsProb(double mb, double ms, double ml, ! double s); double dGdsdupProb(double mb, double ms, double ml, ! double s, double u); double FermiMomentum( double pf ); --- 25,47 ---- #include "EvtGenBase/EvtDecayIncoherent.hh" #include "EvtGenBase/EvtParticle.hh" + class EvtComplex; + class EvtBtoXsllUtil{ public: ! EvtComplex GetC7Eff0(double sh, bool nnlo=true); ! EvtComplex GetC7Eff1(double sh, double mb, bool nnlo=true); ! EvtComplex GetC9Eff0(double sh, double mb, bool nnlo=true, bool btod=false); ! EvtComplex GetC9Eff1(double sh, double mb, bool nnlo=true, bool btod=false); ! EvtComplex GetC10Eff(double sh, bool nnlo=true); double dGdsProb(double mb, double ms, double ml, ! double s); double dGdsdupProb(double mb, double ms, double ml, ! double s, double u); double FermiMomentum( double pf ); Index: EvtGenModels/EvtDDalitz.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtDDalitz.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtDDalitz.hh 7 Oct 2003 02:48:03 -0000 1.1.1.1 --- EvtGenModels/EvtDDalitz.hh 21 Mar 2008 18:20:32 -0000 1.2 *************** *** 22,27 **** --- 22,29 ---- #define EVTDDALITZ_HH #include "EvtGenBase/EvtDecayAmp.hh" + #include "EvtGenBase/EvtFlatte.hh" + #include class EvtParticle; *************** *** 44,49 **** --- 46,53 ---- int _d1,_d2,_d3,_flag; + vector _kkpi_params; + }; #endif Index: EvtGenModels/EvtFlatQ2.hh =================================================================== RCS file: EvtGenModels/EvtFlatQ2.hh diff -N EvtGenModels/EvtFlatQ2.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtFlatQ2.hh 12 Jan 2006 16:13:05 -0000 1.1 *************** *** 0 **** --- 1,45 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtGen/EvtFlatQ2.hh + // + // Description: B->Xu l nu with flat q2 distribution + // + // Modification history: + // + // David Cote, U. de Montreal, 11/02/2003 Module created + // + //------------------------------------------------------------------------ + + #ifndef EVTFLATQ2_HH + #define EVTFLATQ2_HH + + #include "EvtGenBase/EvtDecayProb.hh" + + class EvtParticle; + + class EvtFlatQ2: public EvtDecayProb { + + public: + + EvtFlatQ2() {} + virtual ~EvtFlatQ2(); + + void getName(std::string& name); + EvtDecayBase* clone(); + + void init(); + void initProbMax(); + + void decay(EvtParticle *p); + }; + + #endif + Index: EvtGenModels/EvtHQET2FF.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtHQET2FF.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtHQET2FF.hh 7 Oct 2003 02:48:03 -0000 1.1.1.1 --- EvtGenModels/EvtHQET2FF.hh 12 Jan 2006 16:13:05 -0000 1.2 *************** *** 26,32 **** double t, double mass, double *a1f, double *a2f, double *vf, double *a0f ); ! void EvtHQET2FF::getscalarff(EvtId parent,EvtId daught, double t, double mass, double *f0p, double *f0m); --- 26,32 ---- double t, double mass, double *a1f, double *a2f, double *vf, double *a0f ); ! void getscalarff(EvtId parent,EvtId daught, double t, double mass, double *f0p, double *f0m); Index: EvtGenModels/EvtHQETFF.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtHQETFF.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtHQETFF.hh 7 Oct 2003 02:48:03 -0000 1.1.1.1 --- EvtGenModels/EvtHQETFF.hh 12 Jan 2006 16:13:05 -0000 1.2 *************** *** 34,41 **** double t, double mass, double *a1f, double *a2f, double *vf, double *a0f ); ! void EvtHQETFF::getscalarff(EvtId parent,EvtId daught, ! double t, double mass, double *f0p, double *f0m); private: --- 34,41 ---- double t, double mass, double *a1f, double *a2f, double *vf, double *a0f ); ! void getscalarff(EvtId parent,EvtId daught, ! double t, double mass, double *f0p, double *f0m); private: Index: EvtGenModels/EvtIntervalDecayAmp.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtIntervalDecayAmp.hh,v retrieving revision 1.1.1.1 retrieving revision 1.4 diff -c -r1.1.1.1 -r1.4 *** EvtGenModels/EvtIntervalDecayAmp.hh 7 Oct 2003 02:48:06 -0000 1.1.1.1 --- EvtGenModels/EvtIntervalDecayAmp.hh 6 Jun 2006 17:04:06 -0000 1.4 *************** *** 1,6 **** //----------------------------------------------------------------------- // File and Version Information: ! // $Id: EvtIntervalDecayAmp.hh,v 1.1.1.1 2003/10/07 02:48:06 ryd Exp $ // // Environment: // This software is part of the EvtGen package developed jointly --- 1,6 ---- //----------------------------------------------------------------------- // File and Version Information: ! // $Id: EvtIntervalDecayAmp.hh,v 1.4 2006/06/06 17:04:06 gregor Exp $ // // Environment: // This software is part of the EvtGen package developed jointly *************** *** 27,42 **** #include "EvtGenBase/EvtDecayAmp.hh" #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtMacros.hh" ! #include "EvtGenBase/EvtRandDist.hh" #include "EvtGenBase/EvtPdf.hh" #include "EvtGenBase/EvtAmpFactory.hh" #include "EvtGenBase/EvtMultiChannelParser.hh" #include "EvtGenBase/EvtAmpPdf.hh" - #include "EvtGenBase/EvtPoleCompPdfSum.hh" #include "EvtGenBase/EvtCPUtil.hh" #include "EvtGenBase/EvtPDL.hh" ! template class EvtIntervalDecayAmp : public EvtDecayAmp { public: --- 27,42 ---- #include "EvtGenBase/EvtDecayAmp.hh" #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtMacros.hh" ! #include "EvtGenBase/EvtReport.hh" #include "EvtGenBase/EvtPdf.hh" #include "EvtGenBase/EvtAmpFactory.hh" #include "EvtGenBase/EvtMultiChannelParser.hh" #include "EvtGenBase/EvtAmpPdf.hh" #include "EvtGenBase/EvtCPUtil.hh" #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtCyclic3.hh" ! template class EvtIntervalDecayAmp : public EvtDecayAmp { public: *************** *** 45,51 **** : _probMax(0.), _nScan(0), _fact(0) {} ! EvtIntervalDecayAmp(const EvtIntervalDecayAmp& other) : _probMax(other._probMax), _nScan(other._nScan), COPY_PTR(_fact) {} --- 45,51 ---- : _probMax(0.), _nScan(0), _fact(0) {} ! EvtIntervalDecayAmp(const EvtIntervalDecayAmp& other) : _probMax(other._probMax), _nScan(other._nScan), COPY_PTR(_fact) {} *************** *** 61,75 **** virtual void init() { // Collect model parameters and parse them ! vector args; int i; for(i=0;i args; int i; for(i=0;ifindMax(_nScan).value(); setProbMax(_probMax); } } --- 94,107 ---- else { double factor = 1.2; // increase maximum probability by 20% ! EvtAmpPdf pdf(*_fact->getAmp()); ! EvtPdfSum* pc = _fact->getPC(); ! EvtPdfDiv pdfdiv(pdf,*pc); ! printf("Sampling %d points to find maximum\n",_nScan); ! EvtPdfMax x = pdfdiv.findMax(*pc,_nScan); ! _probMax = factor * x.value(); ! printf("Found maximum %f\n",x.value()); ! printf("Increase to %f\n",_probMax); setProbMax(_probMax); } } *************** *** 111,123 **** // Sample using pole-compensator pdf ! typename Interval::point_type x = _fact->generate(); if(_fact->isCPModel()) { EvtCPUtil::OtherB(p,t,other_b); ! EvtComplex A = _fact->amp(x); ! EvtComplex Abar = _fact->ampConj(x); double dm = _fact->dm(); if (other_b==B0B) ampl=A*cos(dm*t/(2*EvtConst::c))+Abar*sin(dm*t/(2*EvtConst::c)); --- 118,131 ---- // Sample using pole-compensator pdf ! EvtPdfSum* pc = getPC(); ! _x = pc->randomPoint(); if(_fact->isCPModel()) { EvtCPUtil::OtherB(p,t,other_b); ! EvtComplex A = _fact->getAmp()->evaluate(_x); ! EvtComplex Abar = _fact->getAmpConj()->evaluate(_x); double dm = _fact->dm(); if (other_b==B0B) ampl=A*cos(dm*t/(2*EvtConst::c))+Abar*sin(dm*t/(2*EvtConst::c)); *************** *** 125,145 **** } else { ! ampl = _fact->amp(x); } // Pole-compensate ! double comp = sqrt(_fact->pc(x)); assert(comp > 0); vertex(ampl/comp); ! // Now generate random angles, rotate and setup // the daughters ! std::vector v = initDaughters(x); ! int N = p->getNDaug(); if(v.size() != N) { report(INFO,"EvtGen") << "Number of daughters " << N << std::endl; --- 133,153 ---- } else { ! ampl = amplNonCP(_x); } // Pole-compensate ! double comp = sqrt(pc->evaluate(_x)); assert(comp > 0); vertex(ampl/comp); ! // Now generate random angles, rotate and setup // the daughters ! std::vector v = initDaughters(_x); ! size_t N = p->getNDaug(); if(v.size() != N) { report(INFO,"EvtGen") << "Number of daughters " << N << std::endl; *************** *** 147,170 **** assert(0); } ! int i; ! for(i=0;igetDaug(i)->init(getDaugs()[i],v[i]); } } ! ! ! virtual EvtAmpFactory* createFactory(const EvtMultiChannelParser& parser) = 0; ! virtual std::vector initDaughters(const typename Interval::point_type& p) const = 0; protected: - double _probMax; // Maximum probability int _nScan; // Number of points for max prob DP scan ! EvtAmpFactory* _fact; // factory }; --- 155,181 ---- assert(0); } ! for(size_t i=0;igetDaug(i)->init(getDaugs()[i],v[i]); } } + + virtual EvtAmpFactory* createFactory(const EvtMultiChannelParser& parser) = 0; + virtual std::vector initDaughters(const T& p) const = 0; ! // provide access to the decay point and to the amplitude of any decay point. ! // this is used by EvtBtoKD3P: ! const T & x() const {return _x;} ! EvtComplex amplNonCP(const T & x) {return _fact->getAmp()->evaluate(x);} ! EvtPdfSum* getPC() {return _fact->getPC();} protected: double _probMax; // Maximum probability int _nScan; // Number of points for max prob DP scan + T _x; // Decay point ! EvtAmpFactory* _fact; // factory }; Index: EvtGenModels/EvtItgFourCoeffFcn.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtItgFourCoeffFcn.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtItgFourCoeffFcn.hh 7 Oct 2003 02:48:06 -0000 1.1.1.1 --- EvtGenModels/EvtItgFourCoeffFcn.hh 12 Jan 2006 16:13:05 -0000 1.2 *************** *** 22,36 **** #ifndef EVTITFOURCOEFFFCN_HH #define EVTITFOURCOEFFFCN_HH ! #include "CLHEP/Matrix/Vector.h" #include "EvtGenModels/EvtItgAbsFunction.hh" class EvtItgFourCoeffFcn: public EvtItgAbsFunction { public: ! EvtItgFourCoeffFcn( double (*theFunction)(double, const HepVector &, const HepVector &, const HepVector &, const HepVector &), ! double lowerRange, double upperRange, const HepVector &coeffs1, const HepVector &coeffs2, const HepVector &coeffs3, const HepVector &coeffs4); virtual ~EvtItgFourCoeffFcn( ); --- 22,36 ---- #ifndef EVTITFOURCOEFFFCN_HH #define EVTITFOURCOEFFFCN_HH ! #include #include "EvtGenModels/EvtItgAbsFunction.hh" class EvtItgFourCoeffFcn: public EvtItgAbsFunction { public: ! EvtItgFourCoeffFcn( double (*theFunction)(double, const std::vector &, const std::vector &, const std::vector &, const std::vector &), ! double lowerRange, double upperRange, const std::vector &coeffs1, const std::vector &coeffs2, const std::vector &coeffs3, const std::vector &coeffs4); virtual ~EvtItgFourCoeffFcn( ); *************** *** 44,59 **** private: // Data members ! double (*_myFunction)(double x, const HepVector & coeffs1, const HepVector & coeffs2, const HepVector & coeffs3, const HepVector & coeffs4); // Note: if your class needs a copy constructor or an assignment operator, // make one of the following public and implement it. EvtItgFourCoeffFcn( const EvtItgFourCoeffFcn& ); //// Copy Constructor EvtItgFourCoeffFcn& operator= ( const EvtItgFourCoeffFcn& ); // Assignment op ! HepVector _coeffs1; ! HepVector _coeffs2; ! HepVector _coeffs3; ! HepVector _coeffs4; }; --- 44,59 ---- private: // Data members ! double (*_myFunction)(double x, const std::vector & coeffs1, const std::vector & coeffs2, const std::vector & coeffs3, const std::vector & coeffs4); // Note: if your class needs a copy constructor or an assignment operator, // make one of the following public and implement it. EvtItgFourCoeffFcn( const EvtItgFourCoeffFcn& ); //// Copy Constructor EvtItgFourCoeffFcn& operator= ( const EvtItgFourCoeffFcn& ); // Assignment op ! std::vector _coeffs1; ! std::vector _coeffs2; ! std::vector _coeffs3; ! std::vector _coeffs4; }; Index: EvtGenModels/EvtItgFunction.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtItgFunction.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtItgFunction.hh 7 Oct 2003 02:48:06 -0000 1.1.1.1 --- EvtGenModels/EvtItgFunction.hh 12 Jan 2006 16:13:05 -0000 1.2 *************** *** 25,31 **** * * @see EvtItgFunctionEvtItgFunction * ! * @version $Id: EvtItgFunction.hh,v 1.1.1.1 2003/10/07 02:48:06 ryd Exp $ * * @author Phil Strother Originator */ --- 25,31 ---- * * @see EvtItgFunctionEvtItgFunction * ! * @version $Id: EvtItgFunction.hh,v 1.2 2006/01/12 16:13:05 ryd Exp $ * * @author Phil Strother Originator */ Index: EvtGenModels/EvtItgPtrFunction.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtItgPtrFunction.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtItgPtrFunction.hh 7 Oct 2003 02:48:06 -0000 1.1.1.1 --- EvtGenModels/EvtItgPtrFunction.hh 12 Jan 2006 16:13:06 -0000 1.2 *************** *** 24,38 **** #ifndef EVTITGPTRFUNCTION_HH #define EVTITGPTRFUNCTION_HH ! #include "CLHEP/Matrix/Vector.h" #include "EvtGenModels/EvtItgAbsFunction.hh" class EvtItgPtrFunction: public EvtItgAbsFunction { public: ! EvtItgPtrFunction( double (*theFunction)(double, const HepVector &), ! double lowerRange, double upperRange, const HepVector &coeffs1); virtual ~EvtItgPtrFunction( ); --- 24,38 ---- #ifndef EVTITGPTRFUNCTION_HH #define EVTITGPTRFUNCTION_HH ! #include #include "EvtGenModels/EvtItgAbsFunction.hh" class EvtItgPtrFunction: public EvtItgAbsFunction { public: ! EvtItgPtrFunction( double (*theFunction)(double, const std::vector &), ! double lowerRange, double upperRange, const std::vector &coeffs1); virtual ~EvtItgPtrFunction( ); *************** *** 46,58 **** private: // Data members ! double (*_myFunction)(double x, const HepVector & coeffs1); // Note: if your class needs a copy constructor or an assignment operator, // make one of the following public and implement it. EvtItgPtrFunction( const EvtItgPtrFunction& ); //// Copy Constructor EvtItgPtrFunction& operator= ( const EvtItgPtrFunction& ); // Assignment op ! HepVector _coeffs1; }; --- 46,58 ---- private: // Data members ! double (*_myFunction)(double x, const std::vector & coeffs1); // Note: if your class needs a copy constructor or an assignment operator, // make one of the following public and implement it. EvtItgPtrFunction( const EvtItgPtrFunction& ); //// Copy Constructor EvtItgPtrFunction& operator= ( const EvtItgPtrFunction& ); // Assignment op ! std::vector _coeffs1; }; Index: EvtGenModels/EvtItgThreeCoeffFcn.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtItgThreeCoeffFcn.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtItgThreeCoeffFcn.hh 7 Oct 2003 02:48:06 -0000 1.1.1.1 --- EvtGenModels/EvtItgThreeCoeffFcn.hh 12 Jan 2006 16:13:06 -0000 1.2 *************** *** 22,28 **** #ifndef EVTITTHREECOEFFFCN_HH #define EVTITTHREECOEFFFCN_HH ! #include "CLHEP/Matrix/Vector.h" //------------- // C Headers -- --- 22,28 ---- #ifndef EVTITTHREECOEFFFCN_HH #define EVTITTHREECOEFFFCN_HH ! #include //------------- // C Headers -- *************** *** 36,43 **** public: ! EvtItgThreeCoeffFcn( double (*theFunction)(double, const HepVector &, const HepVector &, const HepVector &), ! double lowerRange, double upperRange, const HepVector &coeffs1, const HepVector &coeffs2, const HepVector &coeffs3); virtual ~EvtItgThreeCoeffFcn( ); --- 36,43 ---- public: ! EvtItgThreeCoeffFcn( double (*theFunction)(double, const std::vector &, const std::vector &, const std::vector &), ! double lowerRange, double upperRange, const std::vector &coeffs1, const std::vector &coeffs2, const std::vector &coeffs3); virtual ~EvtItgThreeCoeffFcn( ); *************** *** 51,65 **** private: // Data members ! double (*_myFunction)(double x, const HepVector & coeffs1, const HepVector & coeffs2, const HepVector & coeffs3); // Note: if your class needs a copy constructor or an assignment operator, // make one of the following public and implement it. EvtItgThreeCoeffFcn( const EvtItgThreeCoeffFcn& ); //// Copy Constructor EvtItgThreeCoeffFcn& operator= ( const EvtItgThreeCoeffFcn& ); // Assignment op ! HepVector _coeffs1; ! HepVector _coeffs2; ! HepVector _coeffs3; }; --- 51,65 ---- private: // Data members ! double (*_myFunction)(double x, const std::vector & coeffs1, const std::vector & coeffs2, const std::vector & coeffs3); // Note: if your class needs a copy constructor or an assignment operator, // make one of the following public and implement it. EvtItgThreeCoeffFcn( const EvtItgThreeCoeffFcn& ); //// Copy Constructor EvtItgThreeCoeffFcn& operator= ( const EvtItgThreeCoeffFcn& ); // Assignment op ! std::vector _coeffs1; ! std::vector _coeffs2; ! std::vector _coeffs3; }; Index: EvtGenModels/EvtItgTwoCoeffFcn.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtItgTwoCoeffFcn.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtItgTwoCoeffFcn.hh 7 Oct 2003 02:48:06 -0000 1.1.1.1 --- EvtGenModels/EvtItgTwoCoeffFcn.hh 12 Jan 2006 16:13:06 -0000 1.2 *************** *** 22,28 **** #ifndef EVTITTWOCOEFFFCN_HH #define EVTITTWOCOEFFFCN_HH ! #include "CLHEP/Matrix/Vector.h" //------------- // C Headers -- --- 22,28 ---- #ifndef EVTITTWOCOEFFFCN_HH #define EVTITTWOCOEFFFCN_HH ! #include //------------- // C Headers -- *************** *** 36,43 **** public: ! EvtItgTwoCoeffFcn( double (*theFunction)(double, const HepVector &, const HepVector &), ! double lowerRange, double upperRange, const HepVector &coeffs1, const HepVector &coeffs2); virtual ~EvtItgTwoCoeffFcn( ); --- 36,43 ---- public: ! EvtItgTwoCoeffFcn( double (*theFunction)(double, const std::vector &, const std::vector &), ! double lowerRange, double upperRange, const std::vector &coeffs1, const std::vector &coeffs2); virtual ~EvtItgTwoCoeffFcn( ); *************** *** 52,66 **** private: // Data members ! double (*_myFunction)(double x, const HepVector & coeffs1, const HepVector & coeffs2); // Note: if your class needs a copy constructor or an assignment operator, // make one of the following public and implement it. EvtItgTwoCoeffFcn( const EvtItgTwoCoeffFcn& ); //// Copy Constructor EvtItgTwoCoeffFcn& operator= ( const EvtItgTwoCoeffFcn& ); // Assignment op ! HepVector _coeffs1; ! HepVector _coeffs2; }; --- 52,66 ---- private: // Data members ! double (*_myFunction)(double x, const std::vector & coeffs1, const std::vector & coeffs2); // Note: if your class needs a copy constructor or an assignment operator, // make one of the following public and implement it. EvtItgTwoCoeffFcn( const EvtItgTwoCoeffFcn& ); //// Copy Constructor EvtItgTwoCoeffFcn& operator= ( const EvtItgTwoCoeffFcn& ); // Assignment op ! std::vector _coeffs1; ! std::vector _coeffs2; }; Index: EvtGenModels/EvtJetSet.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtJetSet.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtJetSet.hh 7 Oct 2003 02:48:07 -0000 1.1.1.1 --- EvtGenModels/EvtJetSet.hh 12 Jan 2006 16:13:06 -0000 1.2 *************** *** 27,33 **** typedef EvtDecayBase* EvtDecayBasePtr; ! class ofstream; class EvtJetSet:public EvtDecayIncoherent { --- 27,33 ---- typedef EvtDecayBase* EvtDecayBasePtr; ! #include class EvtJetSet:public EvtDecayIncoherent { Index: EvtGenModels/EvtKKLambdaC.hh =================================================================== RCS file: EvtGenModels/EvtKKLambdaC.hh diff -N EvtGenModels/EvtKKLambdaC.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtKKLambdaC.hh 12 Jan 2006 16:13:06 -0000 1.1 *************** *** 0 **** --- 1,50 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtGen/EvtKKLambdaC.hh + // + // Description:Semileptonic decays with pole form form factors + // + // Modification history: + // + // DJL April 23, 1998 Module created + // + //------------------------------------------------------------------------ + + #ifndef EVTKKLAMBDAC_HH + #define EVTKKLAMBDAC_HH + + #include "EvtGenBase/EvtDecayAmp.hh" + #include "EvtGenBase/EvtSemiLeptonicFF.hh" + #include "EvtGenBase/EvtSemiLeptonicAmp.hh" + + class Evtparticle; + + class EvtKKLambdaC:public EvtDecayAmp { + + public: + + EvtKKLambdaC() {} + virtual ~EvtKKLambdaC(); + + void getName(std::string& name); + EvtDecayBase* clone(); + + void decay(EvtParticle *p); + void initProbMax(); + void init(); + + private: + EvtSemiLeptonicFF *_ffmodel; + EvtSemiLeptonicAmp *_calcamp; + }; + + #endif + Index: EvtGenModels/EvtKKLambdaCFF.hh =================================================================== RCS file: EvtGenModels/EvtKKLambdaCFF.hh diff -N EvtGenModels/EvtKKLambdaCFF.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtKKLambdaCFF.hh 12 Jan 2006 16:13:06 -0000 1.1 *************** *** 0 **** --- 1,44 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtGen/EvtSLPoleFF.hh + // + // Description:Form factor routines for EvtSLPole + // + // Modification history: + // + // DJL April 23, 1998 Module created + // + //------------------------------------------------------------------------ + + #ifndef EVTKKLAMBDACFF_HH + #define EVTKKLAMBDACFF_HH + + #include "EvtGenBase/EvtSemiLeptonicFF.hh" + #include "EvtGenBase/EvtId.hh" + + class EvtKKLambdaCFF : public EvtSemiLeptonicFF { + + public: + EvtKKLambdaCFF(int numarg, double *arglist); + void getbaryonff(EvtId parent,EvtId daught, + double t, double mass, double *f1v, + double *f1a, double *f2v, double *f2a ); + + private: + int _nargs; + double _args[2]; + + }; + + #endif + + + Index: EvtGenModels/EvtLambdaP_BarGamma.hh =================================================================== RCS file: EvtGenModels/EvtLambdaP_BarGamma.hh diff -N EvtGenModels/EvtLambdaP_BarGamma.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtLambdaP_BarGamma.hh 12 Jan 2006 16:13:06 -0000 1.1 *************** *** 0 **** --- 1,77 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 2003 Caltech + // + // Module: EvtGen/EvtRadiativeBaryonicPenguins.hh + // + // Description:Implementation of the decay B- -> lambda p_bar gamma according to + // Cheng, Yang; hep-ph/0201015 + // + // Modification history: + // + // JFS December 16th, 2003 Module created + // + //------------------------------------------------------------------------ + + #ifndef EVTLAMBDAPBARGAMMA_HH + #define EVTLAMBDAPBARGAMMA_HH + + #include "EvtGenBase/EvtDecayAmp.hh" + #include "EvtGenBase/EvtPDL.hh" + #include "EvtGenBase/EvtComplex.hh" + #include "EvtGenBase/EvtParticle.hh" + #include "EvtGenBase/EvtConst.hh" + + class EvtLambdaP_BarGamma : public EvtDecayAmp { + + public: + + EvtLambdaP_BarGamma(); + ~EvtLambdaP_BarGamma() {;} + + void getName(std::string& name); + EvtDecayBase* clone(); + void decay(EvtParticle* p); + void init(); + void initProbMax(); + + private: + // some constants to make the code easier to read and maintain + // these three should be constants... (implementation of getMass() prohibits this) + double _mLambdab; // = 5.624; // Lambda_b mass + double _mLambda0; // = 1.115684; // Lambda0 mass + double _c7Eff; // = -0.31; // Wilson coefficient + double _mb; // = 4.4; // running b mass + double _mV; // = 5.42; // pole mass vector current + double _mA; // = 5.86; // pole mass axial current + double _GF; // = 1.166E-5; // Fermi constant + double _gLambdab; // = 16; // coupling constant Lambda_b -> B- p + double _e0; // = 1; // electromagnetic coupling (+1) + double _g1; // = 0.64; // heavy-light form factors at q_mSqare + double _g2; // = -0.10; + double _f1; // = 0.64; + double _f2; // = -0.31; + double _VtbVtsStar;// = 0.038; // |V_tb V_ts^*| + + // user never needs to call this -> private + // baryonic form factors f(p), g(p), at p=0 + const double f0(const double f_qm, int n=1); // calculate f(0) with f(q_max) + const double g0(const double f_qm, int n=1); // calculate g(0) with g(q_max) + + // shorthand for constants a and b in the formula + const double constA(); + const double constB(); + + // initialize phasespace and calculate the amplitude for one (i=0,1) state of the photon + EvtComplex calcAmpliude(const EvtParticle* p, const unsigned int polState); + + }; + + + #endif Index: EvtGenModels/EvtMultibody.hh =================================================================== RCS file: EvtGenModels/EvtMultibody.hh diff -N EvtGenModels/EvtMultibody.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtMultibody.hh 10 Apr 2005 23:58:34 -0000 1.4 *************** *** 0 **** --- 1,27 ---- + #ifndef EVTMULTIBODY_HH + #define EVTMULTIBODY_HH + + #include "EvtGenBase/EvtMTree.hh" + #include "EvtGenBase/EvtDecayAmp.hh" + #include "EvtGenBase/EvtSpinAmp.hh" + + class EvtMultibody:public EvtDecayAmp + { + public: + EvtMultibody() { _decayTree = NULL; _ilist = NULL; } + virtual ~EvtMultibody(); + + void getName(std::string& name); + EvtDecayBase* clone(); + + void init(); + void initProbMax(); + + void decay(EvtParticle *p); + + private: + EvtMTree * _decayTree; + int * _ilist; + }; + + #endif Index: EvtGenModels/EvtPHOTOS.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtPHOTOS.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtPHOTOS.hh 7 Oct 2003 02:48:08 -0000 1.1.1.1 --- EvtGenModels/EvtPHOTOS.hh 10 Jan 2006 21:36:06 -0000 1.2 *************** *** 24,37 **** #define EVTPHOTOS_HH #include "EvtGenBase/EvtAbsRadCorr.hh" class EvtParticle; class EvtPHOTOS : public EvtAbsRadCorr{ public: - void doRadCorr(EvtParticle *p); }; #endif --- 24,45 ---- #define EVTPHOTOS_HH #include "EvtGenBase/EvtAbsRadCorr.hh" + #include class EvtParticle; class EvtPHOTOS : public EvtAbsRadCorr{ public: + + //The photon type to use + EvtPHOTOS(std::string photontype="gamma"); + + void doRadCorr(EvtParticle *p); + + private: + std::string _photontype; }; #endif Index: EvtGenModels/EvtPto3P.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtPto3P.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtPto3P.hh 7 Oct 2003 02:48:08 -0000 1.1.1.1 --- EvtGenModels/EvtPto3P.hh 12 Jan 2006 16:13:07 -0000 1.2 *************** *** 1,6 **** //----------------------------------------------------------------------- // File and Version Information: ! // $Id: EvtPto3P.hh,v 1.1.1.1 2003/10/07 02:48:08 ryd Exp $ // // Environment: // This software is part of the EvtGen package developed jointly --- 1,6 ---- //----------------------------------------------------------------------- // File and Version Information: ! // $Id: EvtPto3P.hh,v 1.2 2006/01/12 16:13:07 ryd Exp $ // // Environment: // This software is part of the EvtGen package developed jointly *************** *** 20,30 **** #include #include "EvtGenBase/EvtVector4R.hh" #include "EvtGenModels/EvtIntervalDecayAmp.hh" ! #include "EvtGenBase/EvtDalitz2D.hh" ! class EvtPto3P : public EvtIntervalDecayAmp { ! public: EvtPto3P() {} --- 20,30 ---- #include #include "EvtGenBase/EvtVector4R.hh" #include "EvtGenModels/EvtIntervalDecayAmp.hh" ! #include "EvtGenBase/EvtDalitzPoint.hh" ! class EvtPto3P : public EvtIntervalDecayAmp { ! public: EvtPto3P() {} *************** *** 33,43 **** EvtDecayBase* clone() { return new EvtPto3P(); } ! virtual EvtAmpFactory* createFactory(const EvtMultiChannelParser& parser); virtual std::vector initDaughters(const EvtDalitzPoint& p) const; ! EvtDalitzPlot dp(); ! }; #endif --- 33,43 ---- EvtDecayBase* clone() { return new EvtPto3P(); } ! virtual EvtAmpFactory* createFactory(const EvtMultiChannelParser& parser); virtual std::vector initDaughters(const EvtDalitzPoint& p) const; ! EvtDalitzPlot dp(); ! }; #endif Index: EvtGenModels/EvtPythia.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtPythia.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtPythia.hh 7 Oct 2003 02:48:09 -0000 1.1.1.1 --- EvtGenModels/EvtPythia.hh 12 Jan 2006 16:13:07 -0000 1.2 *************** *** 26,32 **** #include "EvtGenBase/EvtParticle.hh" #include ! class ofstream; typedef EvtDecayBase* EvtDecayBasePtr; --- 26,32 ---- #include "EvtGenBase/EvtParticle.hh" #include ! #include typedef EvtDecayBase* EvtDecayBasePtr; Index: EvtGenModels/EvtSLBKPole.hh =================================================================== RCS file: EvtGenModels/EvtSLBKPole.hh diff -N EvtGenModels/EvtSLBKPole.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtSLBKPole.hh 25 Jan 2006 19:14:33 -0000 1.1 *************** *** 0 **** --- 1,51 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtGen/EvtSLBKPole.hh + // + // Description:Semileptonic decays with pole form form factors, + // according to Becirevic and Kaidalov(BK) + // + // Modification history: + // + // liheng October 20, 2005 Module created + // + //------------------------------------------------------------------------ + + #ifndef EVTSLBKPOLE_HH//modified + #define EVTSLBKPOLE_HH//modified + + #include "EvtGenBase/EvtDecayAmp.hh" + #include "EvtGenBase/EvtSemiLeptonicFF.hh"//modified + #include "EvtGenBase/EvtSemiLeptonicAmp.hh" + + class Evtparticle; + + class EvtSLBKPole:public EvtDecayAmp { + + public: + + EvtSLBKPole() {}//modified + virtual ~EvtSLBKPole();//modified + + void getName(std::string& name); + EvtDecayBase* clone(); + + void decay(EvtParticle *p); + void initProbMax(); + void init(); + + private: + EvtSemiLeptonicFF *SLBKPoleffmodel;//modified + EvtSemiLeptonicAmp *calcamp; + }; + + #endif + Index: EvtGenModels/EvtSLBKPoleFF.hh =================================================================== RCS file: EvtGenModels/EvtSLBKPoleFF.hh diff -N EvtGenModels/EvtSLBKPoleFF.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtSLBKPoleFF.hh 25 Jan 2006 19:14:33 -0000 1.1 *************** *** 0 **** --- 1,51 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtGen/EvtSLBKPoleFF.hh + // + // Description:Form factor routines for EvtSLBKPole, + // according to Becirevic and Kaidalov(BK) + // + // Modification history: + // + // liheng October 20, 2005 Module created + // + //------------------------------------------------------------------------ + + #ifndef EVTSLBKPOLEFF_HH//modified + #define EVTSLBKPOLEFF_HH//modified + + #include "EvtGenBase/EvtSemiLeptonicFF.hh"//modified + #include "EvtGenBase/EvtId.hh" + + class EvtSLBKPoleFF : public EvtSemiLeptonicFF {//modified + + public: + EvtSLBKPoleFF(int numarg, double *arglist);//modified + void getscalarff(EvtId parent,EvtId daught, + double t, double mass, double *fpf, + double *f0f ); + void getvectorff(EvtId parent,EvtId daught, + double t, double mass, double *a1f, + double *a2f, double *vf, double *a0f ); + void gettensorff(EvtId parent,EvtId daught,//need to be modified, but not yet + double t, double mass, double *hf, + double *kf, double *bp, double *bm ); + + private: + int numSLBKPoleargs;//modified + double SLBKPoleargs[16];//modified + + }; + + #endif + + + Index: EvtGenModels/EvtSVPCP.hh =================================================================== RCS file: EvtGenModels/EvtSVPCP.hh diff -N EvtGenModels/EvtSVPCP.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtSVPCP.hh 12 Jan 2006 16:13:07 -0000 1.1 *************** *** 0 **** --- 1,54 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // + // Module: EvtSVPCP.cc + // + // Description: Routine to decay scalar -> vectors+photon + // including CP violation effects + // + // Modification history: + // + // Maurizio pierini Nov 11, 2003 Module created + // + //------------------------------------------------------------------------ + // + + #ifndef EVTSVPCP_HH + #define EVTSVPCP_HH + + #include "EvtGenBase/EvtDecayAmp.hh" + + class EvtParticle; + + //Class to handle decays of the form SCALAR ->VECTOR PHOTON + //where the helicity amplitudes must be specified. The + //first and third arguements are the magnetudes of the H+ + //and H- helicity amplitudes respectively. The second and + //fourth arguements are the phases. + //Calls EvtSVPHel. + + class EvtSVPCP:public EvtDecayAmp { + + public: + + EvtSVPCP() {} + virtual ~EvtSVPCP(); + + void getName(std::string& name); + EvtDecayBase* clone(); + + void init(); + void initProbMax(); + void decay(EvtParticle *p); + static void SVPHel(EvtParticle *parent,EvtAmp& amp,EvtId n_v1,EvtId n_v2, + const EvtComplex& hp,const EvtComplex& hm); + + }; + + #endif Index: EvtGenModels/EvtVPHOtoVISRHi.hh =================================================================== RCS file: EvtGenModels/EvtVPHOtoVISRHi.hh diff -N EvtGenModels/EvtVPHOtoVISRHi.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtVPHOtoVISRHi.hh 13 Dec 2006 15:59:42 -0000 1.1 *************** *** 0 **** --- 1,44 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 2004 Cornell + // + // Module: EvtGen/EvtVPHOtoVISRHi.hh + // + // Description: + // + // Modification history: + // + // Ryd March 20, 2004 Module created + // + //------------------------------------------------------------------------ + + #ifndef EVTVPHOTOVISRHI_HH + #define EVTVPHOTOVISRHI_HH + + #include "EvtGenBase/EvtDecayAmp.hh" + + class EvtParticle; + + class EvtVPHOtoVISRHi:public EvtDecayAmp { + + public: + + EvtVPHOtoVISRHi() {} + virtual ~EvtVPHOtoVISRHi(); + + void getName(std::string& name); + EvtDecayBase* clone(); + + void decay(EvtParticle *p); + void init(); + void initProbMax(); + + }; + + #endif Index: EvtGenModels/EvtVVPIPI_WEIGHTED.hh =================================================================== RCS file: EvtGenModels/EvtVVPIPI_WEIGHTED.hh diff -N EvtGenModels/EvtVVPIPI_WEIGHTED.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtVVPIPI_WEIGHTED.hh 4 Jun 2008 21:47:27 -0000 1.1 *************** *** 0 **** --- 1,46 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtGen/EvtVVpipi.hh + // + // Description: For decays of a vector to a vector and 2 pions, + // the decay is assumed to be dominated by S-wave. + // + // Modification history: + // + // Jim Hunt June 4, 2008 Module Created + // + //------------------------------------------------------------------------ + + #ifndef EVTVVPIPI_WEIGHTED_HH + #define EVTVVPIPI_WEIGHTED_HH + + #include "EvtGenBase/EvtDecayAmp.hh" + + class EvtParticle; + + class EvtVVPIPI_WEIGHTED:public EvtDecayAmp { + + public: + + EvtVVPIPI_WEIGHTED() {} + virtual ~EvtVVPIPI_WEIGHTED(); + + void getName(std::string& name); + EvtDecayBase* clone(); + + void decay(EvtParticle *p); + void init(); + void initProbMax(); + + }; + + #endif + Index: EvtGenModels/EvtVectorIsr.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtVectorIsr.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtVectorIsr.hh 7 Oct 2003 02:48:11 -0000 1.1.1.1 --- EvtGenModels/EvtVectorIsr.hh 12 Jan 2006 16:13:07 -0000 1.2 *************** *** 8,20 **** // Copyright Information: See EvtGen/COPYRIGHT // Copyright (C) 1998 Caltech, UCSB // ! // Module: EvtGen/EvtVectorIsr.hh // ! // Description: // // Modification history: // ! // DJL/RYD August 11, 1998 Module created // //------------------------------------------------------------------------ --- 8,25 ---- // Copyright Information: See EvtGen/COPYRIGHT // Copyright (C) 1998 Caltech, UCSB // ! // Module: EvtGen/EvtVectorIsr2.hh // ! // Description: ! // This is a special decay model to generate e+e- -> phi gamma + soft gammas ! // using soft collinear ISR calculation from AfkQed ! // This is implemented as a decay of the VPHO. // // Modification history: // ! // Joe Izen Oct, 2005 Soft Colinear Photons (secondary ISR) ported from AfkQed ! // Joe Izen Dec 16, 2002 Fix cos_theta distribution - prevents boom at cos_theta=+/-1 ! // RYD/Adriano June 16, 1998 Module created // //------------------------------------------------------------------------ *************** *** 25,31 **** class EvtParticle; - //This is a special decay model to generate e+e- -> phi gamma class EvtVectorIsr:public EvtDecayIncoherent { --- 30,35 ---- *************** *** 45,55 **** void initProbMax(); private: double csfrmn,csbkmn; ! ! }; #endif --- 49,64 ---- void initProbMax(); + double ckhrad1(double xx, double a, double b); + + void ckhrad(const double& e_beam,const double& q2_min,double& e01,double& e02,double& f); + + private: double csfrmn,csbkmn; ! double fmax; ! bool firstorder; }; #endif Index: EvtGenModels/EvtVub.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtVub.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtVub.hh 7 Oct 2003 02:48:11 -0000 1.1.1.1 --- EvtGenModels/EvtVub.hh 12 Jan 2006 16:13:07 -0000 1.2 *************** *** 25,30 **** --- 25,32 ---- #include "EvtGenBase/EvtDecayIncoherent.hh" + #include + class EvtParticle; class EvtVubdGamma; class RandGeneral; *************** *** 58,65 **** double * _weights; EvtVubdGamma *_dGamma; // calculates the decay rate ! RandGeneral *_pFermi; // calculates the Fermi Motion ! }; #endif --- 60,67 ---- double * _weights; EvtVubdGamma *_dGamma; // calculates the decay rate ! double findPFermi(); ! std::vector _pf; }; #endif Index: EvtGenModels/EvtVubHybrid.hh =================================================================== RCS file: EvtGenModels/EvtVubHybrid.hh diff -N EvtGenModels/EvtVubHybrid.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtVubHybrid.hh 12 Jan 2006 16:13:07 -0000 1.1 *************** *** 0 **** --- 1,91 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtGen/EvtVubHybrid.hh + // + // Description: + // Class to generate inclusive B to X_u l nu decays. + // This class is based on EvtVub by Sven Menke with an update to + // generate the inclusive decays in such a way that the right + // mix of inclusive and exclusive decays is obtained: + // "Hybrid Model" by Dominique Fortin. + // NOTE: + // - A set of weights (for bins in the kinematic variables mX, q2, El) + // is read from DECAY.DEC. This set of weights must be consistent + // with the other parameters specified (excl. BF, non-res BF, mb, a). + // - If no binning/weights are specified in DECAY.DEC the hybrid + // reweighting is not activated + // + // Modification history: + // + // Jochen Dingfelder February 1, 2005 Created Module as update of + // the module EvtVub including + // hybrid model. + //------------------------------------------------------------------------ + + #ifndef EVTVUBHYBRID_HH + #define EVTVUBHYBRID_HH + + #include "EvtGenBase/EvtDecayIncoherent.hh" + + #include + + class EvtParticle; + class EvtVubdGamma; + class RandGeneral; + + class EvtVubHybrid:public EvtDecayIncoherent { + + public: + + EvtVubHybrid(); + virtual ~EvtVubHybrid(); + + void getName(std::string& name); + + EvtDecayBase* clone(); + + void initProbMax(); + + void init(); + + void decay(EvtParticle *p); + + void readWeights(int startArg=0); + + double getWeight(double mX, double q2, double El); + + private: + double findPFermi(); + + enum { nParameters = 3, nVariables = 3 }; + + bool _noHybrid; + bool _storeQplus; + + double _mb; // the b-quark pole mass in GeV (try 4.65 to 4.9) + double _a; // Parameter for the Fermi Motion (1.29 is good) + double _alphas; // Strong Coupling at m_b (around 0.24) + double _dGMax; // max dGamma*p2 value; + int _nbins_mX; + int _nbins_q2; + int _nbins_El; + int _nbins; + double _masscut; + double * _bins_mX; + double * _bins_q2; + double * _bins_El; + double * _weights; + EvtVubdGamma *_dGamma; // calculates the decay rate + std::vector _pf; + }; + + #endif + Index: EvtGenModels/EvtVubNLO.hh =================================================================== RCS file: EvtGenModels/EvtVubNLO.hh diff -N EvtGenModels/EvtVubNLO.hh *** /dev/null 1 Jan 1970 00:00:00 -0000 --- EvtGenModels/EvtVubNLO.hh 12 Jan 2006 16:13:08 -0000 1.1 *************** *** 0 **** --- 1,164 ---- + //-------------------------------------------------------------------------- + // + // Environment: + // This software is part of the EvtGen package developed jointly + // for the BaBar and CLEO collaborations. If you use all or part + // of it, please give an appropriate acknowledgement. + // + // Copyright Information: See EvtGen/COPYRIGHT + // Copyright (C) 1998 Caltech, UCSB + // + // Module: EvtGen/EvtVubNLO.hh + // + // Description: + // Class to generate inclusive B to X_u l nu decays according to various + // decay models. Implemtented are ACCM, parton-model and a QCD model. + // + // Modification history: + // + // Sven Menke January 17, 2001 Module created + // + //------------------------------------------------------------------------ + + #ifndef EVTVUBNLO_HH + #define EVTVUBNLO_HH + + #include + #include "EvtGenBase/EvtDecayIncoherent.hh" + + class EvtParticle; + class RandGeneral; + + class EvtVubNLO:public EvtDecayIncoherent { + + public: + + EvtVubNLO() {} + virtual ~EvtVubNLO(); + + void getName(std::string& name); + + EvtDecayBase* clone(); + + void initProbMax(); + + void init(); + + void decay(EvtParticle *p); + + + private: + + // cache + double _lbar; + double _mupi2; + + double _mb; // the b-quark pole mass in GeV + double _mB; + double _lambdaSF; + double _b; // Parameter for the Fermi Motion + double _kpar; + double _mui; // renormalization scale (preferred value=1.5 GeV) + double _SFNorm; // SF normalization + double _dGMax; // max dGamma*p2 value; + int _nbins; + int _idSF;// which shape function? + double * _masses; + double * _weights; + + double _gmax; + int _ngood,_ntot; + + + double tripleDiff(double pp, double pl, double pm); + double SFNorm(const std::vector &coeffs); + static double integrand(double omega, const std::vector &coeffs); + double F10(const std::vector &coeffs); + static double F1Int(double omega,const std::vector &coeffs); + double F20(const std::vector &coeffs); + static double F2Int(double omega,const std::vector &coeffs); + double F30(const std::vector &coeffs); + static double F3Int(double omega,const std::vector &coeffs); + static double g1(double y, double z); + static double g2(double y, double z); + static double g3(double y, double z); + + static double Gamma(double z);// Euler Gamma Function + static double dgamma(double t, const std::vector &c){ return pow(t,c[0]-1)*exp(-t);} + static double Gamma(double z, double tmax); + + // theory parameters + inline double mu_i(){return _mui;} // intermediate scale + inline double mu_bar(){return _mui;} + inline double mu_h(){return _mb/sqrt(2.0);} // high scale + inline double lambda1(){return -_mupi2;} + + // expansion coefficients for RGE + static double beta0(int nf=4){return 11.-2./3.*nf;} + static double beta1(int nf=4){return 34.*3.-38./3.*nf;} + static double beta2(int nf=4){return 1428.5-5033./18.*nf+325./54.*nf*nf;} + static double gamma0(){return 16./3.;} + static double gamma1(int nf=4){return 4./3.*(49.85498-40./9.*nf);} + static double gamma2(int nf=4){return 64./3.*(55.07242-8.58691*nf-nf*nf/27.);} /* zeta3=1.20206 */ + static double gammap0(){return -20./3.;} + static double gammap1(int nf=4){return -32./3.*(6.92653-0.9899*nf);} /* ?? zeta3=1.202 */ + + + // running constants + + static double alphas(double mu) ; + static double C_F(double mu){return (4.0/3.0)*alphas(mu)/4./EvtConst::pi;} + + // Shape Functions + + inline double lambda_SF(){ return _lambdaSF;} + double lambda_bar(double omega0); + inline double lambda2(){return 0.12;} + double mu_pi2(double omega0); + inline double lambda(double mu=0){ return _mB-_mb;} + + // specail for gaussian SF + static double cGaus(double b){return pow(Gamma(1+b/2.)/Gamma((1+b)/2.),2);} + + double M0(double mui,double omega0); + static double shapeFunction(double omega, const std::vector &coeffs); + static double expShapeFunction(double omega, const std::vector &coeffs); + static double gausShapeFunction(double omega, const std::vector &coeffs); + // SSF (not yet implemented) + double subS(const std::vector &coeffs ); + double subT(const std::vector &coeffs); + double subU(const std::vector &coeffs); + double subV(const std::vector &coeffs); + + + // Sudakov + + inline double S0(double a, double r){return -gamma0()/4/a/pow(beta0(),2)*(1/r-1+log(r));} + inline double S1(double a, double r){return gamma0()/4./pow(beta0(),2)*( + pow(log(r),2)*beta1()/2./beta0()+(gamma1()/gamma0()-beta1()/beta0())*(1.-r+log(r)) + );} + inline double S2(double a, double r){return gamma0()*a/4./pow(beta0(),2)*( + -0.5*pow((1-r),2)*( + pow(beta1()/beta0(),2)-beta2()/beta0()-beta1()/beta0()*gamma1()/gamma0()+gamma2()/gamma0() + ) + +(pow(beta1()/beta0(),2)-beta2()/beta0())*(1-r)*log(r) + +(beta1()/beta0()*gamma1()/gamma0()-beta2()/beta0())*(1-r+r*log(r)) + );} + inline double dSudakovdepsi(double mu1, double mu2){return S2(alphas(mu1)/(4*EvtConst::pi),alphas(mu2)/alphas(mu1));} + inline double Sudakov(double mu1, double mu2, double epsi=0){double fp(4*EvtConst::pi);return S0(alphas(mu1)/fp,alphas(mu2)/alphas(mu1))+S1(alphas(mu1)/fp,alphas(mu2)/alphas(mu1))+epsi*dSudakovdepsi(mu1,mu2);} + + // RG + inline double dGdepsi(double mu1, double mu2){return 1./8./EvtConst::pi*(alphas(mu2)-alphas(mu1))*(gamma1()/beta0()-beta1()*gamma0()/pow(beta0(),2));} + inline double aGamma(double mu1, double mu2, double epsi=0){return gamma0()/2/beta0()*log(alphas(mu2)/alphas(mu1))+epsi*dGdepsi( mu1, mu2);} + inline double dgpdepsi(double mu1, double mu2){return 1./8./EvtConst::pi*(alphas(mu2)-alphas(mu1))*(gammap1()/beta0()-beta1()*gammap0()/pow(beta0(),2));} + inline double agammap(double mu1, double mu2, double epsi=0){return gammap0()/2/beta0()*log(alphas(mu2)/alphas(mu1))+epsi*dgpdepsi( mu1, mu2);} + inline double U1(double mu1, double mu2, double epsi=0){return exp(2*(Sudakov(mu1,mu2,epsi)-agammap(mu1,mu2,epsi)-aGamma(mu1,mu2,epsi)*log(_mb/mu1)));} + inline double U1lo(double mu1, double mu2){return U1(mu1,mu2);} + inline double U1nlo(double mu1, double mu2){return U1(mu1,mu2)*(1+2*(dSudakovdepsi(mu1,mu2)-dgpdepsi( mu1, mu2)-log(_mb/mu1)*dGdepsi( mu1, mu2)));} + inline double alo(double mu1, double mu2){return -2*aGamma(mu1,mu2);} + inline double anlo(double mu1, double mu2){return -2*dGdepsi(mu1,mu2);} + + }; + + #endif + Index: EvtGenModels/EvtVubdGamma.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtVubdGamma.hh,v retrieving revision 1.1.1.1 retrieving revision 1.3 diff -c -r1.1.1.1 -r1.3 *** EvtGenModels/EvtVubdGamma.hh 7 Oct 2003 02:48:11 -0000 1.1.1.1 --- EvtGenModels/EvtVubdGamma.hh 6 Jun 2006 17:04:07 -0000 1.3 *************** *** 10,16 **** // ---------- = 12 Gamma | (1+x-z)(z-x-p ) -- W + (1-z+p ) -- W // _ 2 0 \ 2 1 2 2 // dx dz dp 2 ! // _ _ _2 mb 2 \ // + [x(z-x)-p ] -- (W + 2mb W + mb W ) | // 4 3 4 5 / // --- 10,16 ---- // ---------- = 12 Gamma | (1+x-z)(z-x-p ) -- W + (1-z+p ) -- W // _ 2 0 \ 2 1 2 2 // dx dz dp 2 ! // _ _ _2 mb 2 | // + [x(z-x)-p ] -- (W + 2mb W + mb W ) | // 4 3 4 5 / // Index: EvtGenModels/EvtbTosllAmp.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtbTosllAmp.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtbTosllAmp.hh 7 Oct 2003 02:48:11 -0000 1.1.1.1 --- EvtGenModels/EvtbTosllAmp.hh 12 Jan 2006 16:13:08 -0000 1.2 *************** *** 20,30 **** --- 20,32 ---- #ifndef EVTBTOSLLAMP_HH #define EVTBTOSLLAMP_HH + extern "C" double ddilog_(const double & sh); class EvtAmp; class EvtId; class EvtbTosllFF; class EvtParticle; + class EvtComplex; class EvtbTosllAmp{ *************** *** 40,46 **** --- 42,60 ---- EvtId nudaug, EvtbTosllFF *formFactors, double& poleSize); + EvtComplex GetC7Eff(double q2, bool nnlo=true); + EvtComplex GetC9Eff(double q2, bool nnlo=true, bool btod=false); + EvtComplex GetC10Eff(double q2, bool nnlo=true); + + double dGdsProb(double mb, double ms, double ml, + double s); + + double dGdsdupProb(double mb, double ms, double ml, + double s, double u); }; #endif + + + Index: EvtGenModels/EvtbTosllBallFF.hh =================================================================== RCS file: /nfs/cleo3/cvsroot/Offline/src/EvtGenModels/EvtGenModels/EvtbTosllBallFF.hh,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -c -r1.1.1.1 -r1.2 *** EvtGenModels/EvtbTosllBallFF.hh 7 Oct 2003 02:48:11 -0000 1.1.1.1 --- EvtGenModels/EvtbTosllBallFF.hh 12 Jan 2006 16:13:08 -0000 1.2 *************** *** 30,36 **** public: ! EvtbTosllBallFF(); void getScalarFF(EvtId parent, EvtId daught,double t, double mass, double& fp,double& f0,double& ft); --- 30,36 ---- public: ! EvtbTosllBallFF(int); void getScalarFF(EvtId parent, EvtId daught,double t, double mass, double& fp,double& f0,double& ft); *************** *** 41,47 **** private: ! }; #endif --- 41,47 ---- private: ! int _theFFModel; }; #endif