Page MenuHomeHEPForge

No OneTemporary

diff --git a/EvtGenBase/EvtSemiLeptonicAmp.hh b/EvtGenBase/EvtSemiLeptonicAmp.hh
index 35e5106..fdf9543 100644
--- a/EvtGenBase/EvtSemiLeptonicAmp.hh
+++ b/EvtGenBase/EvtSemiLeptonicAmp.hh
@@ -1,46 +1,47 @@
//--------------------------------------------------------------------------
//
// 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/EvtSemiLeptonicAmp.hh
//
// Description:Store decay parameters for one decay.
//
// Modification history:
//
// RYD September 30 1997 Module created
//
//------------------------------------------------------------------------
#ifndef EVTSEMILEPTONICAMP_HH
#define EVTSEMILEPTONICAMP_HH
class EvtAmp;
class EvtParticle;
class EvtSemiLeptonicFF;
class EvtId;
class EvtSemiLeptonicAmp{
public:
virtual ~EvtSemiLeptonicAmp( ) { } ;
//Daughters are initialized and have been added to the parent.
//No need to carry around the daughters seperately!
virtual void CalcAmp( EvtParticle *parent, EvtAmp& amp,
EvtSemiLeptonicFF *FormFactors ) = 0;
double CalcMaxProb( EvtId parent, EvtId meson, EvtId lepton,
- EvtId nudaug, EvtSemiLeptonicFF *FormFactors );
+ EvtId nudaug, EvtSemiLeptonicFF *FormFactors,
+ int nQ2Bins = 25);
};
#endif
diff --git a/EvtGenModels/EvtBCSFF.hh b/EvtGenModels/EvtBCSFF.hh
index e0b3c11..9a72dad 100644
--- a/EvtGenModels/EvtBCSFF.hh
+++ b/EvtGenModels/EvtBCSFF.hh
@@ -1,57 +1,57 @@
//--------------------------------------------------------------------------
//
// 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/EvtBCSFF.hh
//
// Description: Form factors for EvtBCSFF model
//
// Modification history:
//
-// DJL April 20, 1998 Module created
-//
+// AVL Jul 6, 2012 Module created
+// AVL Feb 5, 2018 D0, D*0 modes added
//------------------------------------------------------------------------
#ifndef EVTBCSFF_HH
#define EVTBCSFF_HH
#include "EvtGenBase/EvtSemiLeptonicFF.hh"
class EvtId;
class EvtBCSFF : public EvtSemiLeptonicFF {
public:
EvtBCSFF(int idV, int fit);
void getvectorff( EvtId parent, EvtId daught,
double t, double mass, double *a1f,
double *a2f, double *vf, double *a0f );
void getscalarff(EvtId, EvtId, double, double, double*,
double*);
void gettensorff(EvtId, EvtId, double, double, double*,
double*, double*, double*);
void getbaryonff(EvtId, EvtId, double, double, double*,
double*, double*, double*);
void getdiracff(EvtId, EvtId, double, double, double*, double*,
double*, double*, double*, double*);
void getraritaff(EvtId, EvtId, double, double, double*, double*,
double*, double*, double*, double*, double*, double*);
private:
int idScalar, whichfit;
-
+ double MBc, MD0;
};
#endif
diff --git a/EvtGenModels/EvtBCTFF.hh b/EvtGenModels/EvtBCTFF.hh
index 41a24ee..b0a741d 100644
--- a/EvtGenModels/EvtBCTFF.hh
+++ b/EvtGenModels/EvtBCTFF.hh
@@ -1,57 +1,58 @@
//--------------------------------------------------------------------------
//
// 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/EvtBCTFF.hh
//
// Description: Form factors for EvtBCTFF model
//
// Modification history:
//
// DJL April 20, 1998 Module created
//
//------------------------------------------------------------------------
#ifndef EVTBCTFF_HH
#define EVTBCTFF_HH
#include "EvtGenBase/EvtSemiLeptonicFF.hh"
class EvtId;
class EvtBCTFF : public EvtSemiLeptonicFF {
public:
EvtBCTFF(int idV, int fit);
void getvectorff( EvtId parent, EvtId daught,
double t, double mass, double *a1f,
double *a2f, double *vf, double *a0f );
void getscalarff(EvtId, EvtId, double, double, double*,
double*);
void gettensorff(EvtId, EvtId, double, double, double*,
double*, double*, double*);
void getbaryonff(EvtId, EvtId, double, double, double*,
double*, double*, double*);
void getdiracff(EvtId, EvtId, double, double, double*, double*,
double*, double*, double*, double*);
void getraritaff(EvtId, EvtId, double, double, double*, double*,
double*, double*, double*, double*, double*, double*);
private:
int idTensor, whichfit;
+ double MBc;
};
#endif
diff --git a/EvtGenModels/EvtBCVFF.hh b/EvtGenModels/EvtBCVFF.hh
index 0e54b37..dc9e5f3 100755
--- a/EvtGenModels/EvtBCVFF.hh
+++ b/EvtGenModels/EvtBCVFF.hh
@@ -1,59 +1,58 @@
//--------------------------------------------------------------------------
//
// 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/EvtBCVFF.hh
//
// Description: Form factors for EvtBCVFF model
//
// Modification history:
//
-// DJL April 20, 1998 Module created
+// AVL Jul 6, 2012 Module created
+// AVL Feb 5, 2018 D0, D*0 modes added
//
//------------------------------------------------------------------------
#ifndef EVTBCVFF_HH
#define EVTBCVFF_HH
#include "EvtGenBase/EvtSemiLeptonicFF.hh"
class EvtId;
class EvtBCVFF : public EvtSemiLeptonicFF {
public:
-
EvtBCVFF(int idV, int fit);
void getvectorff( EvtId parent, EvtId daught,
double t, double mass, double *a1f,
double *a2f, double *vf, double *a0f );
void getscalarff(EvtId, EvtId, double, double, double*,
double*);
void gettensorff(EvtId, EvtId, double, double, double*,
double*, double*, double*);
void getbaryonff(EvtId, EvtId, double, double, double*,
double*, double*, double*);
void getdiracff(EvtId, EvtId, double, double, double*, double*,
double*, double*, double*, double*);
void getraritaff(EvtId, EvtId, double, double, double*, double*,
double*, double*, double*, double*, double*, double*);
private:
-
int idVector, whichfit;
-
+ double MBc, MD0, Mpsi, Mpsi2S, kappa, Mchi;
};
#endif
diff --git a/EvtGenModels/EvtBcSMuNu.hh b/EvtGenModels/EvtBcSMuNu.hh
index 79524d1..8076554 100644
--- a/EvtGenModels/EvtBcSMuNu.hh
+++ b/EvtGenModels/EvtBcSMuNu.hh
@@ -1,59 +1,58 @@
//--------------------------------------------------------------------------
//
// 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/EvtBcSMuNu.hh
//
// Description:Implementation of the model for semileptonic Bc decays
//
// Modification history:
//
-// DJL April 20, 1998 Module created
+// AVL Jul 6, 2012 Module created
+// AVL Feb 5, 2018 D0, D*0 modes added
//
//------------------------------------------------------------------------
#ifndef EVTBcSMuNu_HH
#define EVTBcSMuNu_HH
#include <fstream>
#include <stdio.h>
#include "EvtGenBase/EvtDecayAmp.hh"
#include "EvtGenBase/EvtSemiLeptonicFF.hh"
#include "EvtGenBase/EvtSemiLeptonicAmp.hh"
class EvtParticle;
class EvtBcSMuNu:public EvtDecayAmp {
public:
EvtBcSMuNu() {}
virtual ~EvtBcSMuNu();
std::string getName();
EvtDecayBase* clone();
void decay(EvtParticle *p);
void init();
virtual void initProbMax();
- void PrintMaxProbs();
-
private:
EvtSemiLeptonicFF *ffmodel;
EvtSemiLeptonicAmp *calcamp;
int whichfit;
int idScalar;
};
#endif
diff --git a/EvtGenModels/EvtBcTMuNu.hh b/EvtGenModels/EvtBcTMuNu.hh
index df6aaea..dd3cc2e 100644
--- a/EvtGenModels/EvtBcTMuNu.hh
+++ b/EvtGenModels/EvtBcTMuNu.hh
@@ -1,59 +1,57 @@
//--------------------------------------------------------------------------
//
// 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/EvtBcTMuNu.hh
//
// Description:Implementation of the model for semileptonic Bc decays
//
// Modification history:
//
// DJL April 20, 1998 Module created
//
//------------------------------------------------------------------------
#ifndef EVTBcTMuNu_HH
#define EVTBcTMuNu_HH
#include <fstream>
#include <stdio.h>
#include "EvtGenBase/EvtDecayAmp.hh"
#include "EvtGenBase/EvtSemiLeptonicFF.hh"
#include "EvtGenBase/EvtSemiLeptonicAmp.hh"
class EvtParticle;
class EvtBcTMuNu:public EvtDecayAmp {
public:
EvtBcTMuNu() {}
virtual ~EvtBcTMuNu();
std::string getName();
EvtDecayBase* clone();
void decay(EvtParticle *p);
void init();
virtual void initProbMax();
- void PrintMaxProbs();
-
private:
EvtSemiLeptonicFF *ffmodel;
EvtSemiLeptonicAmp *calcamp;
int whichfit;
int idTensor;
};
#endif
diff --git a/EvtGenModels/EvtBcVMuNu.hh b/EvtGenModels/EvtBcVMuNu.hh
index 8dd18eb..9b5fb91 100755
--- a/EvtGenModels/EvtBcVMuNu.hh
+++ b/EvtGenModels/EvtBcVMuNu.hh
@@ -1,57 +1,59 @@
//--------------------------------------------------------------------------
//
// 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/EvtBcVMuNu.hh
//
// Description:Implementation of the model for semileptonic Bc decays
//
// Modification history:
//
-// DJL April 20, 1998 Module created
+// AVL Jul 6, 2012 Module created
+// AVL Feb 5, 2018 D0, D*0 modes added
//
//------------------------------------------------------------------------
#ifndef EVTBcVMuNu_HH
#define EVTBcVMuNu_HH
#include <fstream>
#include <stdio.h>
+
#include "EvtGenBase/EvtDecayAmp.hh"
#include "EvtGenBase/EvtSemiLeptonicFF.hh"
#include "EvtGenBase/EvtSemiLeptonicAmp.hh"
class EvtParticle;
class EvtBcVMuNu: public EvtDecayAmp {
public:
EvtBcVMuNu() {}
virtual ~EvtBcVMuNu();
std::string getName();
EvtDecayBase* clone();
void decay(EvtParticle *p);
void init();
virtual void initProbMax();
private:
EvtSemiLeptonicFF *ffmodel;
EvtSemiLeptonicAmp *calcamp;
int whichfit;
int idVector;
};
#endif
diff --git a/History.txt b/History.txt
index 62e2738..7af6e30 100644
--- a/History.txt
+++ b/History.txt
@@ -1,515 +1,523 @@
//==========================================================================
//
// History file for EvtGen
//
//===========================================================================
+12th March 2018 John Back
+ Updated EvtBcXMuNu models (X = Scalar, Vector, Tensor) to generate
+ Bc to D0(star) mu nu decays, with associated form factors in EvtBCXFF,
+ courtesy of Aleksei Luchinskii (LHCb). Also generalised the calculation
+ of their maximum probabilities by reusing the CalcMaxProb method in
+ EvtSemiLeptonicAmp, which now allows for different Q^2 binning
+ (default remains at 25 bins).
+
R01-07-00-------------------------------------------------------------------
13th December 2017 John Back
New tag incorporating all changes below. Recommended external packages
are HepMC 2.06.09, pythia 8.230, Photos++ 3.61 and Tauola++ 1.1.6c,
as used in the setupEvtGen.sh script.
12th December 2017 John Back
Changed Pythia validation example decay files to use Pythia8 codes.
6th December 2017 John Back
Modified the examples to use DECAY.DEC (see 25th April 2016) instead of
DECAY_2010.DEC. Changed EvtExternalGenList to assume Pythia8 codes are
used in decay files by default, which is the case for DECAY.DEC. Also
updated the setupEvtGen.sh script to work with Pythia 8.2x versions.
29th November 2017 John Back
Modified EvtSVP, EvtVVP and EvtTVP models to handle both radiative and
two-lepton decays, courtesy of Aleksei Luchinskii (LHCb).
14th July 2017 John Back
Only create external generator objects if they don't already exist in
EvtExternalGenFactory. Modified configure script to work with Pythia 8.2x
5th July 2017 Michal Kreps
Register the VTOSLL model.
14th June 2017 John Back
Add isNeutralKaon() boolean function and corrected comments in EvtDDalitz.
8th May 2017 Michal Kreps
Fix bug in EvtbTosllVectorAmp to recognise Bs --> K*bar mu mu decay as
b --> d ll transition.
8th May 2017 Michal Kreps
Significantly simplify way how we decide on decay mode and daughters
ordering in DDalitz model. With new code by definition all orderings of
daughters in the decay file will yield same output.
4th May 2017 John Back
Further fixes to DDalitz particle ordering (including charge-conjugates):
Mode 5: D0 -> K- K0bar K+ and K+ K- K0bar
Mode 12: D0 -> pi0 pi- pi+ and pi+ pi0 pi-
Removed unneeded index ordering checks for mode 10 (D+ -> pi- pi+ pi+)
and mode 11 (Ds+ -> pi- pi+ pi+)
27th April 2017 John Back
Fixed DDalitz particle ordering for mode 7: D+ -> pi+ K- K+ and K+ pi+ K-
and their charge-conjugates
7th April 2017 John Back
Modified EvtGenExternal/EvtPythiaEngine to ensure that the EvtGen-based
instances of Pythia8 (for generic and alias decays) use the same
particle properties as defined by EvtGen, courtesy Patrick Robbe (LHCb).
5th April 2017 Michal Kreps
Fixed indexing in copy constructor of Evt3Rank3C, which would otherwise
produce an infinite loop; bug report from David Grellscheid.
3rd November 2016 John Back
Modified EvtFlatQ2 model to work for all B -> X lepton lepton modes, as
well as adding an extra phase space factor to correct for the dip at low
q^2, courtesy of Marcin Chrzaszcz & Thomas Blake (LHCb), which is enabled
by using "FLATQ2 1" instead of just "FLATQ2" in the decay file.
13th October 2016 John Back
Added the TauolaCurrentOption decfile keyword to select the hadronic
current in Tauola; default is the BaBar-tuned current option (int = 1).
EvtParticles can store double attributes using the functions
setAttributeDouble(name, double) and getAttributeDouble(name), which can
be useful for storing and retrieving amplitude weights, for example.
The analogous EvtParticle integer attribute interface remains unchanged:
setAttribute(name, int) and getAttribute(name).
13th September 2016 John Back
Modified EvtTauolaEngine to use internal Tauola spin matrices for
tau pair events by temporarily setting the PDG id of the mother as a
boson, keeping the same 4-momentum. The BaBar hadronic currents are now
used by default. Also added the ability to change some Tauola parameters
using the "Define" keyword in decay files. Added an example decay file
illustrating the new features: validation/TauolaFiles/Btautau.dec
9th September 2016 Michal Kreps
Reimplement code in EvtBTo3pi.F, EvtBTo3piMPP.F, EvtBTo3piP00.F and
EvtBToKpipi.F in C++ in order to remove dependence on Fortran compiler.
With this, there is no internal Fortran code in EvtGen.
R01-06-00-------------------------------------------------------------------
1st June 2016 John Back
New tag incorporating all changes below. Recommended external packages
are HepMC 2.06.09, pythia 8.186, Photos++ 3.61 and Tauola++ 1.1.5.
28th April 2016 Michal Kreps
For Ds+ --> 2pi+ pi- there was double counting of branching fraction
resulting in total branching fraction being 1.5 times larger than measured
one. Fix by revisiting submodes, which now fill total Ds --> 3pi.
25th April 2016 Michal Kreps
Added DECAY.DEC/XML, which contain updated semileptonic charm and beauty
branching fractions using the 2014 PDG, tuned to minimize disagreements
between measurements and EvtGen for both inclusive and exclusive decays.
Updated the evt.pdl particle properties file to the PDG 2014 edition.
Implemented new LQCD form factors for Lb --> L mu mu from arXiv paper
1602.01399 (EvtRareLbToLllFFlQCD); old LQCD form factors are removed.
18th March 2016 John Back
Fixed incorrect spinor algebra used in S1 -> 1/2 S2, 1/2 -> S3 S4 decays
in EvtDiracParticle::rotateToHelicityBasis() functions, courtesy of
Luis Miguel Garcia Martin and the IFIC Valencia LHCb group.
19th Feburary 2016 John Back
Fixed bug in the definition of the initial spinor term Sinit in
EvtRareLbToLll::HadronicAmpRS(), from Tom Blake (LHCb).
12th February 2016 John Back
From LHCb, added extensions to the EvtHQET2(FF) model for semitauonic
decays from Brian Hamilton, which needs a patch to EvtSemiLeptonicAmp
from Jack Wimberley to ensure that the q^2 range is physical when
finding the maximum amplitude probability.
2nd December 2015 John Back
From LHCb, added EvtKStopizmumu model for KS -> pi0 mu mu decays based on
JHEP08(1998)004, courtesy of Veronika Chobanova, Diego Martinez Santos
and Jeremy Dalseno. Added EvtConst::Fermi for Fermi coupling constant.
R01-05-00-------------------------------------------------------------------
21st October 2015 John Back
New tag incorporating all changes below. Recommended external packages
are HepMC 2.06.09, pythia 8.186, Photos++ 3.61 and Tauola++ 1.1.5.
Added the EvtB2MuMuMuNu model for simulating the very rare four-leptonic
decays B- -> mu+ mu- anti-nu_mu mu-, courtesy Nikolai Nikitin.
16th October 2015 John Back
Updated the configure script to automatically select the library names
for PHOTOS++; version 3.56 and below uses Fortran, version 3.61 and above
uses C++ only (default). Avoid using v3.60, since it does not work.
This needs the PHOTOS libraries built before EvtGen is configured.
Modified setupEvtGen.sh to use Photos++ v3.61.
7th October 2015 John Back
Updated EvtGenExternal/EvtPhotosEngine to check that additional particles
from the outgoing vertex are indeed (FSR) photons, since later versions of
PHOTOS introduce pair emission, where particles may not always be photons.
Added the genRootDecayChain.cc validation program to create ROOT files
containing information about the complete decay tree. Two example test
decay files BKstarGamma.dec and BuDst0rhop.dec can be used with this; the
first tests PHOTOS, the second looks at sequential decay chain storage.
The plotBKstarGamma.C ROOT macro can be used for B -> K* gamma plots.
2nd October 2015 John Back
Modified EvtSVPHelAmp and added a new EvtSVPHelCPMix model, implementing
the complete mixing phenomenology of Bs to vector gamma decays, courtesy
of Clara Remon (LHCb).
EvtD0mixDalitz code: cleanup, inverted q/p for decays of D0bar (simplifies
user decay files) and fixed y parameter bug, courtesy of Jordi Tico (LHCb).
Changed the initialisation order of the infrared cut-off in EvtPhotosEngine.
This actually has no effect, since the exponentiation function sets it to the
same 1e-7 value, but it's now in the correct order if we need to update it.
Removed all remaining obsolete pragma (Win32) warnings from some classes.
23rd September 2015 Michal Kreps
Reimplement the real Spence function in C++ and removed its fortran
implementation.
15th September 2015 Michal Kreps
Fixed accessed uninitialised memory in EvtPDL.cpp, line 213.
Modified the configure and setupEvtGen.sh scripts to work on Mac; needed
Mac compilation patch files added to the new "platform" subdirectory.
10th September 2015 John Back
Updated setupEvtGen.sh to use the recommended external packages:
HepMC 2.06.09, pythia 8.186, Photos++ 3.56 and Tauola++ 1.1.5.
Fixed form-factor calculations for the BTOSLLBALL model 6 used to generate
b -> sll decays, courtesy of Christoph Langenbruch and David Loh (LHCb).
Affects B->K*ll, B->rholl and B->omegall, particularly the electron modes.
In the validation directory, added runPhotosTest.sh for testing FSR in
Upsilon(4S) -> e+ e- decays, and changed the plot comparison scripts to
use the 2nd directory "oldRootFiles" (which could be a soft-link) for
including ROOT histograms made from a previous version of EvtGen.
27th August 2015 John Back
Added Mersenne-Twister random number generator (RNG) EvtMTRandomEngine.
It requires c++11 compiler features (>= gcc 4.7), which should
automatically be enabled by the configure script. Introduced the
preprocessor environment variable EVTGEN_CPP11 for c++11 features.
EvtMTRandomEngine is the default RNG for the validation and test examples
if c++11 features are enabled.
Added a phase-space test validation/genPHSP.sh and PhaseSpacePlots.C to
visually check the flatness of Dalitz plots in order to ensure that the
RNG is not producing biased results that depend on particle ordering.
Added the models EvtbsToLLLLAmp and EvtbsToLLLLHyperCP for
B0_q -> l+ l- l+ l- decays (SM and one supersymmetric scenario),
courtesy of Nikolai Nikitin and Konstantin Toms. Documentation provided
in doc/evt_BQTOLLLL_model.pdf and doc/evt_BQTOLLLLHYPERCP_model.pdf.
Changed the installation and set-up script name to be just setupEvtGen.sh;
it uses the VERSION variable to specify the required tag. List of tags
are available using either "svn ls -v http://svn.cern.ch/guest/evtgen/tags"
or by going to http://svn.cern.ch/guest/evtgen/tags in a web browser.
12th June 2015 John Back
Changed the width of chi_b1 in evt.pdl from 9.8928 GeV (!) to zero.
1st May 2015 John Back
Added Bc -> scalar ell nu (EvtBcSMuNu) and Bc -> tensor ell nu
(EvtBcTMuNu) decays, courtesy of Jack Wimberley, LHCb. Also included the
chi_c1 mode for EvtBcVMuNu.
R01-04-00-------------------------------------------------------------------
2nd April 2015 John Back
Removed the EvtStdlibRandomEngine class since this can produce biases
to kinematic distributions when one or more of the daughters is a
resonance, such as B0 -> K pi psi (thanks to Antonio Augusto Alves Jr
who discovered this issue). EvtSimpleRandomEngine is now the default
random number generator in the validation and test examples.
Incorporated several additions and modifications from LHCb:
a) From Michal Kreps, Tom Blake & Christoph Langenbruch,
added rare Lb --> Lambda^(*) ell ell models described in
arXiv:1108.6129, with various form factors from Gutsche et al.
(arXiv:1301.3737) and lattice QCD (arXiv:1212.4827)
b) From Andrew Crocombe, implemented Bs --> K* form factors
from Ball-Zwicky and z-parametrization form factors from
arXiv:1006.4945 for EvtbTosllBallFF
c) Christoph Langenbruch fixed the Bs -> phi ll form factors in
EvtbTosllBallFF; T3 showed a non-physical pole at very low
q2 which significantly affected the electron mode
d) From Michal Kreps, removed semicolons from wrong places to
clear warnings when compiled with the "-pedantic" option.
9th October 2014 John Back
Change svnweb.cern.ch to svn.cern.ch in the setup script.
1st April 2014 John Back
In EvtReport, modified the logging output severity status flags
to have the "EVTGEN_" prefix, e.g. INFO becomes EVTGEN_INFO.
The global report() function has been renamed to EvtGenReport().
31st March 2014 John Back
Added the ability to store named attributes for EvtParticles in the
form of a map<string, int>. The setAttribute(name, value) stores the
required value, while getAttribute(name) retrieves the integer value.
This is used in EvtPhotosEngine to specify the final-state radiation
"FSR" attribute to 1 for any additional photons (EvtPhotonParticles)
created by Photos++. It also stores the "ISR" attribute, but this
is always set to zero, since only FSR photons are created.
If the named attribute doesn't exist, then getAttribute() returns zero.
29th January 2014 Daniel Craik
Removed mass assertion on GS shape in EvtDalitzReso to allow it to also
be used for charged rho resonances.
27th January 2014 John Back
Minor corrections to Vub models to remove further gcc 4.8 warnings.
Updated configure script to work for MacOS clang (from Genser team).
R01-03-00-------------------------------------------------------------------
9th January 2014 John Back
New tag version "1.3.0", incorporating all changes below.
Replaced auto-install script to work with this version as well as
the latest versions of all external generator packages.
Updated README to mention the new CERN-based web pages for Photos++
and Tauola++.
8th January 2014 John Back
Fix gcc 4.6 and 4.8 compilation warnings, courtesy of
Patrick Robbe (LHCb); main changes are removal of unused variables.
Changed the EvtPythiaEngine class and configure script to use new
Pythia 8 header locations; Pythia 8.180 or above is now required.
7th January 2014 John Back
Modified EvtBCVFF to correct the Kiselev form factors from
Jack Wimberley (LHCb).
9th October 2013 Daniel Craik
Added Gounaris-Sakurai and Gaussian shapes to EvtGenericDalitz
and set sensible defaults for LASS parameters.
19th September 2013 John Back
Modified EvtGenExternal/EvtPythiaEngine to keep track of any new
particles that are added to the default Pythia database to avoid
duplicating particle/anti-particle entries that could override
previously defined Pythia decay chains.
18th September 2013 John Back
Added Mac OS flags for the configure script and src/Makefile.
15th July 2013 Daniel Craik
Added flag to turn on scaling of LASS amplitude by M/q in EvtDalitzReso
15th July 2013 Daniel Craik
EvtParserXML now accepts file names containing environment variables,
exponential non-resonant shape in EvtDalitzReso now defined as exp(-alpha*m^2),
LASS shape in EvtDalitzReso now takes a cutoff parameter
4th July 2013 Daniel Craik
Added LASS, exponential non-resonant and linear non-resonant shapes to EvtGenericDalitz.
3rd July 2013 Daniel Craik
Fixed auto-install script for R01-02-00.
1st July 2013 Daniel Craik
Added auto-install script for R01-02-00.
R01-02-00-------------------------------------------------------------------
15th May 2013 John Back
New tag, version "1.2.0", incorporating all changes below.
14th May 2013 Michal Kreps
Added Blatt-Weisskopf barrier factors up to L=5 in
EvtGenBase/EvtBlattWeisskopf::compute().
14th May 2013 John Back
Added additional entries (appended at the end) to the evt.pdl particle
data file courtesy of Romulus Godang and Belle II colleagues.
14th March 2013 John Back
Added the method EvtParticle::getPDGId() to get the PDG integer for a
particle directly (which just calls EvtPDL::getStdHep()).
Added a check in EvtPhotosEngine::doDecay to skip Photos if a given
particle has too many daughters (>= 10) to avoid a problem with a
hard coded upper limit in the Photos PHOENE subroutine.
2nd February 2013 Daniel Craik
Updated EvtDalitzTable to estimate probMax when it is missing from a
Dalitz model.
1st February 2013 John Back
Added the ability to read in Pythia 6 commands in ascii decay files in
EvtDecayTable::readDecayFile (this was already possible in xml files).
Modified the Photos++ engine default settings to be more suited to B
decays (from LHCb defaults).
31st January 2013 John Back
Added the ability to read in Pythia 8 commands in ascii decay files
in EvtDecayTable::readDecayFile. They can be set using the syntax:
"PythiaTypeParam module:variable=value", where Type = Generic, Alias or
Both for specifying whether the parameter is for the generic or alias
Pythia decay engines (or both). The 2nd argument must not contain any
spaces. Fixed the list of commands strings being used in the
EvtPythiaEngine class (i.e. Pythia parameters that can be set via decay
files).
31st January 2013 Daniel Craik
Added named parameters to various decay models.
30th January 2013 John Back
Fixed some of the parameter arguments used in the EvtSVSCPiso model.
24th January 2013 John Back
Set the Photos++ and Tauola++ models to use the EvtGen random number
engine when useEvtGenRandom is set to true in the EvtExternalGenList
constructor.
23rd January 2013 John Back
Added EvtGenExternal/EvtPythiaRandom to allow the use of the EvtGen
random number engine to also be used for the random engine for Pythia 8.
Added a boolean (useEvtGenRandom, default = true) within the
EvtExternalGenList constructor to use this feature.
18th December 2012 John Back
Corrected some wrong daughter ordering assignments for decay modes 5 and
12 in EvtDDalitz. Updated validation/DalitzDecays.xml to also contain
D decay mode 12, as well as various modes that may use K_S0 and K_L0.
Added validation/genDDalitzModes.sh and updated
validation/compareDalitz.C to do a complete comparison of the D Dalitz
modes with the xml versions.
11th December 2012 Daniel Craik
Updated the Xml parser to support named model parameters. Updated the
generic Dalitz model to use named model parameters as an example.
15th October 2012 John Back
Make EvtSimpleRandomEngine inherit from EvtRandomEngine to avoid
crash in EvtGen.cpp when no random engine is defined
(from Bjoern Spruck).
R01-01-00-------------------------------------------------------------------
4th October 2012 John Back
New tag, version "1.1.0", incorporating all changes below.
Provide proper default constructors for EvtVector4R and
EvtPhotonParticle. Modified the validation and test code to also
compile/link in the case of no external generators being included.
3rd October 2012 John Back
Corrected the t3 vector form factor values for the Ball-Zwicky '05
model (modelId = 6) in EvtbTosllBallFF::getVectorFF(), which
were set to t3tilde instead.
18th September 2012 John Back
Moved the external generator engines to a new sub-directory
EvtGenExternal. Building the code now creates 2 libraries:
libEvtGen.so (Base+Models) and libEvtGenExternal.so.
This allows anyone to ignore using the new external generators
if required (by not creating/loading the 2nd library).
Added prefix option to the configure script/Makefile to allow the user
to specify an installation directory for the include files, libraries,
DECAY.DEC and evt.pdl files (for Genser).
14th September 2012 Michal Kreps
Fixed the calculation of the angle between decay planes in the function
EvtKine::EvtDecayAngleChi. Fixed typo in EvtLb2Lll decay model. Only
some NP scenarious could be affected, SM one is definitely unaffected.
13th September 2012 John Back
Added the use of the environment variables EVTGEN_PHOTOS, EVTGEN_PYTHIA
and EVTGEN_TAUOLA to specify if the Photos, Pythia and/or Tauola engine
classes are used or not. These variables are set by the configure script,
depending if the library paths are specified for these generators.
R01-00-01--------------------------------------------------------------------
12th September 2012 John Back
New tag incorporating all changes below, since R01-00-00.
11th September 2012 John Back
Modified the Photos and Tauola engine classes to use the new
Photospp and Tauolapp namespaces that are present in the latest
versions of Photos++(3.5) and Tauola++(1.0.7). Updated the configure file
to get the correct location of the Tauola++ include files.
Added the D0->pi+pi-pi0 decay mode in EvtDDalitz from Marco Gersabeck
and Frederic Dreyer (LHCb).
Added new decay models/classes from Alexey Luchinsky (LHCb):
EvtBcVMuNu, EvtTVP, EvtWnPi, EvtSVP, EvtXPsiGamma, EvtBcVNpi
29th June 2012 John Back
Corrected mass(squared) variables filled in the Dalitz TTree in
validation/genExampleRootFiles.
15th May 2012 Daniel Craik
Updated EvtD0gammaDalitz to deal with D mesons from neutral B->DK
Added save function to validation/compareDalitz.C.
11th May 2012 Daniel Craik
Replaced BaBar specific configuration for BlattWeisskopf birth factors.
Updated XML conversion script to handle new configuration.
Fixed some bugs in the XML conversion script related to particle
modifications.
9th May 2012 Daniel Craik
Added latex documentation for xml decay files.
2nd May 2012 Daniel Craik
Added resDaughters attribute to the Dalitz resonance xml tag to
simplify defining symmetric resonances. Updated validation xml files to
use the new functionality.
27th April 2012 Daniel Craik
Upgraded EvtGenericDalitz to use EvtDalitzReso for resonances.
Added validation to compare EvtGenericDalitz to all 11 EvtDDalitz modes.
Added a root macro to quickly compare two Dalitz decays for validation.
24th April 2012 John Back
Solved two bugs in the EvtD0gammaDalitz model (from Jordi Tico, LHCb):
configuration of the conjugated model, and using only the B charge
to determine the model used, not the D flavour.
17th April 2012 Daniel Craik
Updated the GenericDalitz validation code to use the same probMax
values as DDalitz. Added XML decay file parsing to EvtGen::readUDecay.
Dec files are still the default.
30th March 2012 John Back
Update maximum probability values in EvtDDalitz::initProbMax()
for all DDalitz modes.
23rd March 2012 John Back
Added the EvtEta2MuMuGamma decay model from LHCb.
21st March 2012 John Back
Added EvtD0gammaDalitz decay model from LHCb.
20th March 2012 Daniel Craik
Added backwards compatibility for Pythia 6 commands in the XML
configuration. Updated decay file conversion tool to convert JetSetPar
lines to pythia6Param tags.
19th March 2012 Daniel Craik
Added infrastructure to pass commands to external generators.
XML config now takes Pythia8 configuration commands.
16th March 2012 Daniel Craik
Added the ability to define particles from the PDL for Dalitz decay
resonances instead of defining mass, width and spin seperately. Renamed
the lifetime attribute of Dalitz decay resonaces to width to avoid
confusion. Added further validation code for the generic Dalitz model.
15th March 2012 Daniel Craik
Added validation code for xml decay files and the generic Dalitz model.
R01-00-00 ------------------------------------------------------------------
6th March 2012 John Back
First official version for Genser (evtgen 1.0.0) that includes
support for external generators: Pythia8, Photos++ and Tauola++.
This also includes a preliminary version of creating Dalitz plot
decay models using EvtGenericDalitz.
diff --git a/src/EvtGenBase/EvtSemiLeptonicAmp.cpp b/src/EvtGenBase/EvtSemiLeptonicAmp.cpp
index 97d966d..0ae0cd9 100644
--- a/src/EvtGenBase/EvtSemiLeptonicAmp.cpp
+++ b/src/EvtGenBase/EvtSemiLeptonicAmp.cpp
@@ -1,213 +1,214 @@
//--------------------------------------------------------------------------
//
// 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: EvtSemiLeptonicAmp.cc
//
// Description: Base class for semileptonic decays
//
// Modification history:
//
// DJL April 17,1998 Module created
//
//------------------------------------------------------------------------
//
#include "EvtGenBase/EvtPatches.hh"
#include "EvtGenBase/EvtPatches.hh"
#include "EvtGenBase/EvtParticle.hh"
#include "EvtGenBase/EvtGenKine.hh"
#include "EvtGenBase/EvtPDL.hh"
#include "EvtGenBase/EvtReport.hh"
#include "EvtGenBase/EvtVector4C.hh"
#include "EvtGenBase/EvtTensor4C.hh"
#include "EvtGenBase/EvtDiracSpinor.hh"
#include "EvtGenBase/EvtSemiLeptonicScalarAmp.hh"
#include "EvtGenBase/EvtId.hh"
#include "EvtGenBase/EvtAmp.hh"
#include "EvtGenBase/EvtScalarParticle.hh"
#include "EvtGenBase/EvtVectorParticle.hh"
#include "EvtGenBase/EvtTensorParticle.hh"
double EvtSemiLeptonicAmp::CalcMaxProb( EvtId parent, EvtId meson,
EvtId lepton, EvtId nudaug,
- EvtSemiLeptonicFF *FormFactors ) {
+ EvtSemiLeptonicFF *FormFactors,
+ int nQ2Bins) {
//This routine takes the arguements parent, meson, and lepton
//number, and a form factor model, and returns a maximum
//probability for this semileptonic form factor model. A
//brute force method is used. The 2D cos theta lepton and
//q2 phase space is probed.
//Start by declaring a particle at rest.
//It only makes sense to have a scalar parent. For now.
//This should be generalized later.
EvtScalarParticle *scalar_part;
EvtParticle *root_part;
scalar_part=new EvtScalarParticle;
//cludge to avoid generating random numbers!
scalar_part->noLifeTime();
EvtVector4R p_init;
p_init.set(EvtPDL::getMass(parent),0.0,0.0,0.0);
scalar_part->init(parent,p_init);
root_part=(EvtParticle *)scalar_part;
root_part->setDiagonalSpinDensity();
EvtParticle *daughter, *lep, *trino;
EvtAmp amp;
EvtId listdaug[3];
listdaug[0] = meson;
listdaug[1] = lepton;
listdaug[2] = nudaug;
amp.init(parent,3,listdaug);
root_part->makeDaughters(3,listdaug);
daughter=root_part->getDaug(0);
lep=root_part->getDaug(1);
trino=root_part->getDaug(2);
//cludge to avoid generating random numbers!
daughter->noLifeTime();
lep->noLifeTime();
trino->noLifeTime();
//Initial particle is unpolarized, well it is a scalar so it is
//trivial
EvtSpinDensity rho;
rho.setDiag(root_part->getSpinStates());
double mass[3];
double m = root_part->mass();
EvtVector4R p4meson, p4lepton, p4nu, p4w;
double q2min;
double q2max;
double q2, elepton, plepton;
int i,j;
double erho,prho,costl;
double maxfoundprob = 0.0;
double prob = -10.0;
int massiter;
for (massiter=0;massiter<3;massiter++){
mass[0] = EvtPDL::getMeanMass(meson);
mass[1] = EvtPDL::getMeanMass(lepton);
mass[2] = EvtPDL::getMeanMass(nudaug);
if ( massiter==1 ) {
mass[0] = EvtPDL::getMinMass(meson);
}
if ( massiter==2 ) {
mass[0] = EvtPDL::getMaxMass(meson);
if ( (mass[0]+mass[1]+mass[2])>m) mass[0]=m-mass[1]-mass[2]-0.00001;
}
q2min = mass[1]*mass[1];
q2max = (m-mass[0])*(m-mass[0]);
- //loop over q2
+ //loop over q2 (default = 25 bins)
- for (i=0;i<25;i++) {
- q2 = q2min + ((i+0.5)*(q2max-q2min))/25.0;
+ for (i=0;i<nQ2Bins;i++) {
+ q2 = q2min + ((i+0.5)*(q2max-q2min))/nQ2Bins;
erho = ( m*m + mass[0]*mass[0] - q2 )/(2.0*m);
prho = sqrt(erho*erho-mass[0]*mass[0]);
p4meson.set(erho,0.0,0.0,-1.0*prho);
p4w.set(m-erho,0.0,0.0,prho);
//This is in the W rest frame
elepton = (q2+mass[1]*mass[1])/(2.0*sqrt(q2));
plepton = sqrt(elepton*elepton-mass[1]*mass[1]);
double probctl[3];
for (j=0;j<3;j++) {
costl = 0.99*(j - 1.0);
//These are in the W rest frame. Need to boost out into
//the B frame.
p4lepton.set(elepton,0.0,
plepton*sqrt(1.0-costl*costl),plepton*costl);
p4nu.set(plepton,0.0,
-1.0*plepton*sqrt(1.0-costl*costl),-1.0*plepton*costl);
EvtVector4R boost((m-erho),0.0,0.0,1.0*prho);
p4lepton=boostTo(p4lepton,boost);
p4nu=boostTo(p4nu,boost);
//Now initialize the daughters...
daughter->init(meson,p4meson);
lep->init(lepton,p4lepton);
trino->init(nudaug,p4nu);
CalcAmp(root_part,amp,FormFactors);
//Now find the probability at this q2 and cos theta lepton point
//and compare to maxfoundprob.
//Do a little magic to get the probability!!
prob = rho.normalizedProb(amp.getSpinDensity());
probctl[j]=prob;
}
//probclt contains prob at ctl=-1,0,1.
//prob=a+b*ctl+c*ctl^2
double a=probctl[1];
double b=0.5*(probctl[2]-probctl[0]);
double c=0.5*(probctl[2]+probctl[0])-probctl[1];
prob=probctl[0];
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;
}
}
if ( prob > maxfoundprob ) {
maxfoundprob = prob;
}
}
if ( EvtPDL::getWidth(meson) <= 0.0 ) {
//if the particle is narrow dont bother with changing the mass.
massiter = 4;
}
}
root_part->deleteTree();
maxfoundprob *=1.1;
return maxfoundprob;
}
diff --git a/src/EvtGenModels/EvtBCSFF.cpp b/src/EvtGenModels/EvtBCSFF.cpp
index 8025af1..893e368 100644
--- a/src/EvtGenModels/EvtBCSFF.cpp
+++ b/src/EvtGenModels/EvtBCSFF.cpp
@@ -1,121 +1,146 @@
//--------------------------------------------------------------------------
//
// 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: EvtBCSFF.cc
//
-// Description: form factors for Bc->Slnu
+// Description: form factors for Bc->Slnu
//
// Modification history:
//
-// AVL Jul 6, Module created
+// AVL Jul 6, 2012 Module created
+// AVL Feb 5, 2018 D0, D*0 modes added
//
//------------------------------------------------------------------------
//
#include "EvtGenBase/EvtPatches.hh"
+#include "EvtGenBase/EvtPatches.hh"
#include "EvtGenBase/EvtReport.hh"
#include "EvtGenModels/EvtBCSFF.hh"
#include "EvtGenBase/EvtId.hh"
#include <string>
#include <math.h>
#include "EvtGenBase/EvtPDL.hh"
#include <stdlib.h>
#include <iostream>
using namespace std;
EvtBCSFF::EvtBCSFF(int idS, int fit) {
idScalar = idS;
whichfit = fit;
- //cout<<"==== EvtBCSFF:: idScalar="<<idScalar<<" whichfit="<<whichfit<<endl;
+ MBc = EvtPDL::getMeanMass(EvtPDL::getId("B_c+"));
+ MD0 = EvtPDL::getMeanMass(EvtPDL::getId("D0"));
return;
}
void EvtBCSFF::getscalarff(EvtId /*p*/, EvtId /*d*/, double t, double /*mass*/,
double *fpf, double *f0f) {
double q2 = t;
if (whichfit == 0) {
*fpf = 1;
*f0f = 0;
return;
}
if (idScalar == EvtPDL::getId("chi_c0").getId() ) { // Bc -> chi_c0
if (whichfit == 3) { // FF from Wang et al 10.1103/PhysRevD.79.114018
- double Mbc = 6.277; // Experimental value
- //double Mchi = 3.41475; // Experimental value
- double ratio = q2 / (Mbc*Mbc);
+ double ratio = q2 / (MBc*MBc);
double fpf_0 = 0.47;
double fpf_c1 = 2.03;
double fpf_c2 = 0.43;
double f0f_0 = 0.47;
double f0f_c1 = -0.45;
double f0f_c2 = -1.31;
*fpf = fpf_0*exp(fpf_c1*ratio+fpf_c2*ratio*ratio);
*f0f = f0f_0*exp(f0f_c1*ratio+f0f_c2*ratio*ratio);
return;
} else {
- EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Must choose 0 (fpf = 1) or 3 (Wang).\n";
+ EvtGenReport(EVTGEN_ERROR,"EvtBCSFF") << "Must choose 0 (fpf = 1) or 3 (Wang).\n";
::abort();
}
+ } else if (idScalar == EvtPDL::getId("D0").getId() || idScalar == EvtPDL::getId("anti-D0").getId()) { // Bc -> D0
+ if (whichfit == 1) {// FF from Kiselev:2002vz, tables III, IV
+ double q2invmass = q2 / (MBc * MBc - MD0 * MD0);
+ double den = 1 - q2 / (5.0 * 5.0);
+ if (fabs(den) < 1e-10) {
+ *fpf = 0;
+ *f0f = 0;
+ } else {
+ double fPlus = 0.32 / den;
+ double fMinus = -0.34 / den;
+ *fpf = fPlus;
+ *f0f = q2invmass * fMinus + fPlus;
+ }
+ } else if (whichfit == 2) {// FF from Ebert:2003cn, Fig 9
+ double ratio=q2/MBc/MBc;
+ double const fPlus_0 = 0.143, fPlus_a = 0.7, fPlus_b = 2.13;
+ double const f0_0 = 0.136, f0_a = 1.63, f0_b = -0.139;
+ *fpf = fPlus_0/ (1 - fPlus_a * ratio - fPlus_b * ratio * ratio);
+ *f0f = f0_0/ (1 - f0_a * ratio - f0_b * ratio * ratio);
+ return;
+ } else {
+ EvtGenReport(EVTGEN_ERROR,"EvtBCSFF") << "Should choose 1 (Kiselev:2002vz) or 2 (Ebert:2003cn).\n";
+ }
} else {
- EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Only chi_c0 implemented in EvtBCSFF.\n";
+ EvtGenReport(EVTGEN_ERROR,"EvtBCSFF") << "Only chi_c0 and D0/anti-D0 implemented.\n";
::abort();
}
}
+
void EvtBCSFF::getvectorff(EvtId, EvtId, double, double,
double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getvectorff in EvtBCSFF.\n";
::abort();
}
-void EvtBCSFF::gettensorff(EvtId /*p*/, EvtId /*d*/, double t, double /*mass*/,
+void EvtBCSFF::gettensorff(EvtId /*p*/, EvtId /*d*/, double /*t*/, double /*mass*/,
double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :gettensorff in EvtBCSFF.\n";
::abort();
}
void EvtBCSFF::getbaryonff(EvtId, EvtId, double, double,
double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getbaryonff in EvtBCSFF.\n";
::abort();
}
void EvtBCSFF::getdiracff(EvtId, EvtId, double, double,
double*, double*, double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getdiracff in EvtBCSFF.\n";
::abort();
}
void EvtBCSFF::getraritaff(EvtId, EvtId, double, double,
double*, double*, double*, double*, double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getraritaff in EvtBCSFF.\n";
::abort();
}
diff --git a/src/EvtGenModels/EvtBCTFF.cpp b/src/EvtGenModels/EvtBCTFF.cpp
index f4220af..d9a487a 100644
--- a/src/EvtGenModels/EvtBCTFF.cpp
+++ b/src/EvtGenModels/EvtBCTFF.cpp
@@ -1,132 +1,130 @@
//--------------------------------------------------------------------------
//
// 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: EvtBCTFF.cc
//
-// Description: form factors for Bc->Slnu
+// Description: form factors for Bc->Tlnu
//
// Modification history:
//
// AVL Jul 6, Module created
//
//------------------------------------------------------------------------
//
#include "EvtGenBase/EvtPatches.hh"
#include "EvtGenBase/EvtReport.hh"
#include "EvtGenModels/EvtBCTFF.hh"
#include "EvtGenBase/EvtId.hh"
#include <string>
#include <math.h>
#include "EvtGenBase/EvtPDL.hh"
#include <stdlib.h>
#include <iostream>
using namespace std;
EvtBCTFF::EvtBCTFF(int idT, int fit) {
idTensor = idT;
whichfit = fit;
- //cout<<"==== EvtBCTFF:: idTensor="<<idTensor<<" whichfit="<<whichfit<<endl;
+ MBc = EvtPDL::getMeanMass(EvtPDL::getId("B_c+"));
return;
}
void EvtBCTFF::getscalarff(EvtId, EvtId, double, double,
double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getscalarff in EvtBCTFF.\n";
::abort();
}
-void EvtBCTFF::getvectorff(EvtId,EvtId, double t, double,
+void EvtBCTFF::getvectorff(EvtId,EvtId, double, double,
double *, double *, double *, double *) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getvectorff in EvtBCTFF.\n";
::abort();
}
void EvtBCTFF::gettensorff(EvtId /*p*/, EvtId /*d*/, double t, double /*mass*/,
double *hf, double *kf, double *bpf, double *bmf) {
double q2 = t;
if (whichfit == 0) {
*hf = 0;
*kf = 0;
*bpf = 0;
*bmf = 0;
return;
}
if (idTensor == EvtPDL::getId("chi_c2").getId() ) { // Bc -> chi_c1
if (whichfit == 3) { // FF from Wang et al 10.1103/PhysRevD.79.114018
- double Mbc = 6.277; // Experimental value
- //double Mchi = 3.51066; // Experimental value
- double ratio = q2 / (Mbc*Mbc);
+ double ratio = q2 / (MBc*MBc);
double hf_0 = 0.022;
double hf_c1 = 2.58;
double hf_c2 = 0.61;
double kf_0 = 1.27;
double kf_c1 = 1.61;
double kf_c2 = 0.24;
double bpf_0 = -0.011;
double bpf_c1 = 2.27;
double bpf_c2 = 0.46;
double bmf_0 = 0.020;
double bmf_c1 = 2.48;
double bmf_c2 = 0.56;
*hf = hf_0*exp(hf_c1*ratio+hf_c2*ratio*ratio);
*kf = kf_0*exp(kf_c1*ratio+kf_c2*ratio*ratio);
*bpf = bpf_0*exp(bpf_c1*ratio+bpf_c2*ratio*ratio);
*bmf = bmf_0*exp(bmf_c1*ratio+bmf_c2*ratio*ratio);
return;
} else {
- EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Must choose 0 (a1f = 1) or 3 (Wang).\n";
+ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Must choose 0 (a1f = 1) or 3 (Wang).\n";
::abort();
}
} else {
- EvtGenReport(EVTGEN_ERROR,"EvtGen") << "chi_c1 is the only (pseudo)vector decay implemented in EvtBCTFF.\n";
+ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "chi_c2 is the only (pseudo)vector decay implemented in EvtBCTFF.\n";
::abort();
}
}
void EvtBCTFF::getbaryonff(EvtId, EvtId, double, double,
double*, double*, double*, double*) {
- EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getbaryonff in EvtBCTFF.\n";
+ EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getbaryonff in EvtBCTFF.\n";
::abort();
}
void EvtBCTFF::getdiracff(EvtId, EvtId, double, double,
double*, double*, double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getdiracff in EvtBCTFF.\n";
::abort();
}
void EvtBCTFF::getraritaff(EvtId, EvtId, double, double,
double*, double*, double*, double*, double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getraritaff in EvtBCTFF.\n";
::abort();
}
diff --git a/src/EvtGenModels/EvtBCVFF.cpp b/src/EvtGenModels/EvtBCVFF.cpp
index 436f260..ec1d564 100755
--- a/src/EvtGenModels/EvtBCVFF.cpp
+++ b/src/EvtGenModels/EvtBCVFF.cpp
@@ -1,180 +1,218 @@
//--------------------------------------------------------------------------
//
// 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: EvtBCVFF.cc
//
-// Description: form factors for Bc->Vlnu
+// Description: form factors for Bc->Vlnu
//
// Modification history:
//
-// AVL Jul 6, Module created
+// AVL Jul 6, 2012 Module created
+// AVL Feb 5, 2018 D0, D*0 modes added
//
//------------------------------------------------------------------------
//
#include "EvtGenBase/EvtPatches.hh"
+#include "EvtGenBase/EvtPatches.hh"
#include "EvtGenBase/EvtReport.hh"
#include "EvtGenModels/EvtBCVFF.hh"
#include "EvtGenBase/EvtId.hh"
#include <string>
#include <math.h>
#include "EvtGenBase/EvtPDL.hh"
#include <stdlib.h>
#include <iostream>
using namespace std;
EvtBCVFF::EvtBCVFF(int idV, int fit) {
idVector = idV;
whichfit = fit;
- //cout<<"==== EvtBCVFF:: idVector="<<idVector<<" whichfit="<<whichfit<<endl;
+ MBc = EvtPDL::getMeanMass(EvtPDL::getId("B_c+"));
+ MD0 = EvtPDL::getMeanMass(EvtPDL::getId("D*0"));
+ Mpsi = EvtPDL::getMeanMass(EvtPDL::getId("J/psi"));
+ Mpsi2S = EvtPDL::getMeanMass(EvtPDL::getId("psi(2S)"));
+ kappa = Mpsi/Mpsi2S;
+ Mchi = EvtPDL::getMeanMass(EvtPDL::getId("chi_c1"));
return;
}
void EvtBCVFF::getvectorff(EvtId,EvtId, double t, double,
double *a1f, double *a2f, double *vf, double *a0f ) {
double q2 = t;
if (whichfit == 0) {
*vf = 0;
*a0f = 0;
*a1f = 1;
*a2f = 0;
return;
}
if (idVector == EvtPDL::getId("J/psi").getId() ) { // Bc -> J/psi
if (whichfit == 1) { // SR form factor set from [Kiselev, hep-ph/0211021]
- double Mbc = 6.277, Mpsi=3.0967; // Experimental values
double Mpole2 = 4.5*4.5, den = 1./(1.-q2/Mpole2);
double FV = 0.11*den,
FAp = -0.074*den,
FA0 = 5.9*den,
FAm = 0.12*den;
- *vf = (Mbc + Mpsi)*FV;
- *a2f = -(Mbc+Mpsi)*FAp;
- *a1f = FA0/(Mbc+Mpsi);
- *a0f = (q2*FAm + (Mbc+Mpsi)*(*a1f)-(Mbc-Mpsi)*(*a2f))/(2*Mpsi);
+ *vf = (MBc + Mpsi)*FV;
+ *a2f = -(MBc+Mpsi)*FAp;
+ *a1f = FA0/(MBc+Mpsi);
+ *a0f = (q2*FAm + (MBc+Mpsi)*(*a1f)-(MBc-Mpsi)*(*a2f))/(2*Mpsi);
return;
} else if (whichfit == 2) { // form factor set from [Ebert, hep-ph/0306306]
*vf = (0.49077824756158533 - 0.0012925655191347828*q2)/(1 - 0.06292520325875656*q2);
*a0f = (0.4160345034630221 - 0.0024720095310225023*q2)/(1 - 0.061603451915567785*q2);
*a1f = (0.4970212860605933 - 0.0067519730024654745*q2)/(1 - 0.050487026667172176*q2);
*a2f = (0.7315284919705497 + 0.0014263826220727142*q2 - 0.0006946090066269195*q2*q2)/(1 - 0.04885587273651653*q2);
return;
} else {
- EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Must choose 0 (a1f = 1), 1 (Kiselev), or 2 (Ebert).\n";
+ EvtGenReport(EVTGEN_ERROR,"EvtBCVFF") << "Must choose 0 (a1f = 1), 1 (Kiselev), or 2 (Ebert).\n";
::abort();
}
} else if (idVector == EvtPDL::getId("psi(2S)").getId()) { // Bc -> psi((2S)
if (whichfit == 1) {
- ////cout<<"BC2:: psi2S, Kiselev, q2="<<q2<<endl;
- double Mbc = 6.277, Mpsi=3.0967, Mpsi2S = 3.686, kappa = Mpsi/Mpsi2S; // Experimental values
double Mpole2 = 4.5*4.5, den=1./(1.-q2/Mpole2);
double FV = 0.11*den*kappa/3.1,
FAp = -0.074*den*kappa/4.9,
FA0 = 5.9*den*kappa/3.5,
FAm = 0.12*den*kappa/2.3;
- *vf = (Mbc + Mpsi2S)*FV;
- *a2f = -(Mbc+Mpsi2S)*FAp;
- *a1f = FA0/(Mbc+Mpsi2S);
- *a0f = (q2*FAm + (Mbc+Mpsi2S)*(*a1f)-(Mbc-Mpsi2S)*(*a2f))/(2*Mpsi2S);
+ *vf = (MBc + Mpsi2S)*FV;
+ *a2f = -(MBc+Mpsi2S)*FAp;
+ *a1f = FA0/(MBc+Mpsi2S);
+ *a0f = (q2*FAm + (MBc+Mpsi2S)*(*a1f)-(MBc-Mpsi2S)*(*a2f))/(2*Mpsi2S);
return;
} else if (whichfit == 2) {
- ////cout<<"BC2:: psi2S, Ebert, q2="<<q2<<endl;
*vf = (0.24177223968739653 - 0.053589051007278135*q2)/(1 - 0.0977848994260899*q2);
*a0f = (0.23996026570086615 - 0.03530198514007337*q2)/(1 - 0.09371162519983989*q2);
*a1f = (0.17418379258849329 - 0.004129699022085851*q2*q2)/(1 + 0.06607665248402918*q2);
*a2f = (0.1352376939112041 - 0.040361722565209444*q2 + 0.003343515369431853*q2*q2)/(1 - 0.1463698128333418*q2);
return;
} else {
- EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Must choose 0 (a1f = 1), 1 (Kiselev), or 2 (Ebert).\n";
+ EvtGenReport(EVTGEN_ERROR,"EvtBCVFF") << "Must choose 0 (a1f = 1), 1 (Kiselev), or 2 (Ebert).\n";
::abort();
}
} else if (idVector == EvtPDL::getId("chi_c1").getId() ) { // Bc -> chi_c1
if (whichfit == 3) { // FF from Wang et al 10.1103/PhysRevD.79.114018
- double Mbc = 6.277, Mchi = 3.51066; // Experimental values
- double SoverD = (Mbc+Mchi)/(Mbc-Mchi);
- double DoverS = (Mbc-Mchi)/(Mbc+Mchi);
- double ratio = q2 / (Mbc*Mbc);
+ double SoverD = (MBc+Mchi)/(MBc-Mchi);
+ double DoverS = (MBc-Mchi)/(MBc+Mchi);
+ double ratio = q2 / (MBc*MBc);
double vf_0 = SoverD * 0.36;
double vf_c1 = 1.98;
double vf_c2 = 0.43;
double a2f_0 = SoverD * 0.15;
double a2f_c1 = 1.22;
double a2f_c2 = -0.08;
double a1f_0 = DoverS * 0.85;
double a1f_c1 = -0.51;
double a1f_c2 = -1.38;
double a0f_0 = 0.13;
double a0f_c1 = 2.99;
double a0f_c2 = 0.023;
*vf = vf_0*exp(vf_c1*ratio+vf_c2*ratio*ratio);
*a2f = a2f_0*exp(a2f_c1*ratio+a2f_c2*ratio*ratio);
*a1f = a1f_0*exp(a1f_c1*ratio+a1f_c2*ratio*ratio);
*a0f = a0f_0*exp(a0f_c1*ratio+a0f_c2*ratio*ratio);
return;
-
} else {
- EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Must choose 0 (a1f = 1) or 1 (Wang).\n";
+ EvtGenReport(EVTGEN_ERROR,"EvtBCVFF") << "Must choose 0 (a1f = 1) or 3 (Wang).\n";
+ ::abort();
+ }
+ } else if (idVector == EvtPDL::getId("D*0").getId() || idVector == EvtPDL::getId("anti-D*0").getId()) {
+ if (whichfit == 1) {
+ // SR form factor set from Kiselev, hep-ph/0211021
+ double Mpole2 = 6.2 * 6.2, den = (1. - q2 / Mpole2);
+ if (fabs(den) < 1e-10) {
+ *vf = 0;
+ *a2f = 0;
+ *a1f = 0;
+ *a0f = 0;
+ } else {
+ double FV = 0.20 / den,
+ FAp = -0.062 / den,
+ FA0 = 3.6,
+ FAm = 0.11 / den;
+ *vf = (MBc + MD0) * FV;
+ *a2f = -(MBc + MD0) * FAp;
+ *a1f = FA0 / (MBc + MD0);
+ *a0f = (q2 * FAm + (MBc + MD0)*(*a1f)-(MBc - MD0)*(*a2f)) / (2 * MD0);
+ }
+ return;
+ } else if (whichfit == 2) {
+ // form factors from Ebert, hep-ph/0306306
+ double ratio = q2 / MBc / MBc;
+ double const fV_0 = 0.202, fV_a = 1.38, fV_b = 1.31;
+ double const fA2_0 = 0.22, fA2_a = 2.44, fA2_b = -1.21;
+ double const fA0_0 = 0.144, fA0_a = 1.18, fA0_b = 1.39;
+ double const fA1_0 = 0.174, fA1_a = 1.69, fA1_b = -0.219;
+
+ *vf = fV_0 / (1 - fV_a * ratio - fV_b * ratio * ratio);
+ *a2f = fA2_0 / (1 - fA2_a * ratio - fA2_b * ratio * ratio);
+ *a0f = fA0_0 / (1 - fA0_a * ratio - fA0_b * ratio * ratio);
+ *a1f = fA1_0 / (1 - fA1_a * ratio - fA1_b * ratio * ratio);
+ return;
+ } else {
+ EvtGenReport(EVTGEN_ERROR,"BCVFF") << "FF should be 0 (a1f = 1), 1 (Kiselev 2002) or 2 (Ebert).\n";
::abort();
}
} else {
- EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Only J/psi, psi(2S), chi_c1 implemented in EvtBCVFF.\n";
+ EvtGenReport(EVTGEN_ERROR,"ECVFF") << "Only J/psi, psi(2S), chi_c1 and D*0/anti-D*0 implemented.\n";
::abort();
}
}
void EvtBCVFF::getscalarff(EvtId, EvtId, double, double,
double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getscalarff in EvtBCVFF.\n";
::abort();
}
void EvtBCVFF::gettensorff(EvtId, EvtId, double, double,
double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :gettensorff in EvtBCVFF.\n";
::abort();
}
void EvtBCVFF::getbaryonff(EvtId, EvtId, double, double,
double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getbaryonff in EvtBCVFF.\n";
::abort();
}
void EvtBCVFF::getdiracff(EvtId, EvtId, double, double,
double*, double*, double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getdiracff in EvtBCVFF.\n";
::abort();
}
void EvtBCVFF::getraritaff(EvtId, EvtId, double, double,
double*, double*, double*, double*, double*, double*, double*, double*) {
EvtGenReport(EVTGEN_ERROR,"EvtGen") << "Not implemented :getraritaff in EvtBCVFF.\n";
::abort();
}
diff --git a/src/EvtGenModels/EvtBcSMuNu.cpp b/src/EvtGenModels/EvtBcSMuNu.cpp
index 58395a7..fff614b 100644
--- a/src/EvtGenModels/EvtBcSMuNu.cpp
+++ b/src/EvtGenModels/EvtBcSMuNu.cpp
@@ -1,121 +1,98 @@
//--------------------------------------------------------------------------
//
// 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: EvtBcSMuNu.cc
//
-// Description: Routine to implement semileptonic B->psi lnu decays
+// Description: Routine to implement semileptonic Bc -> scalar l nu decays
//
// Modification history:
//
-// AVL July 6, 2012 Module created
+// AVL Jul 6, 2012 Module created
+// AVL Feb 5, 2018 D0, D*0 modes added
//
//------------------------------------------------------------------------
//
#include "EvtGenBase/EvtPatches.hh"
#include <stdlib.h>
#include "EvtGenBase/EvtParticle.hh"
#include "EvtGenBase/EvtGenKine.hh"
#include "EvtGenBase/EvtPDL.hh"
#include "EvtGenBase/EvtReport.hh"
#include "EvtGenBase/EvtSemiLeptonicScalarAmp.hh"
#include <string>
#include <iostream>
#include "EvtGenModels/EvtBcSMuNu.hh"
#include "EvtGenModels/EvtBCSFF.hh"
using namespace std;
EvtBcSMuNu::~EvtBcSMuNu() {
-// cout<<"EvtBcSMuNu::destructor getProbMax(-1) = "<<getProbMax(-1)<<endl;
}
std::string EvtBcSMuNu::getName(){
return "BC_SMN";
}
EvtDecayBase* EvtBcSMuNu::clone(){
-// cout<<" === EvtBcSMuNu::clone() ============"<<endl;
return new EvtBcSMuNu;
}
void EvtBcSMuNu::decay( EvtParticle *p ){
-// cout<<" === EvtBcSMuNu::decay() ============"<<endl;
-
p->initializePhaseSpace(getNDaug(),getDaugs());
calcamp->CalcAmp(p,_amp2,ffmodel);
-// cout<<"EvtBcSMuNu::decay() getProbMax(-1) = "<<getProbMax(-1)<<endl;
}
void EvtBcSMuNu::init(){
-// cout<<" === EvtBcSMuNu::init() ============"<<endl;
-
-
checkNArg(1);
checkNDaug(3);
//We expect the parent to be a scalar
//and the daughters to be X lepton neutrino
checkSpinParent(EvtSpinType::SCALAR);
checkSpinDaughter(0,EvtSpinType::SCALAR);
checkSpinDaughter(1,EvtSpinType::DIRAC);
checkSpinDaughter(2,EvtSpinType::NEUTRINO);
idScalar = getDaug(0).getId();
whichfit = int(getArg(0)+0.1);
- cout << "EvtBcSMuNu: whichfit =" << whichfit << " idScalar =" << idScalar << endl;
+
ffmodel = new EvtBCSFF(idScalar,whichfit);
calcamp = new EvtSemiLeptonicScalarAmp;
}
void EvtBcSMuNu::initProbMax() {
-
-// PrintMaxProbs();
-
- // cout<<" === EvtBcSMuNu::initProbMax() ============"<<endl;
- if (whichfit == 0) setProbMax(0.0); // NEED TO FIX
- else if (idScalar == EvtPDL::getId("chi_c0").getId() && whichfit == 3) setProbMax(3000.0); // NEED TO FIX
- else {
- cout<<"EvtBcSMuNu: Not realized yet"<<endl;
- ::abort();
+
+ EvtId parId = getParentId();
+ EvtId mesonId = getDaug(0);
+ EvtId lepId = getDaug(1);
+ EvtId nuId = getDaug(2);
+
+ int nQ2Bins = 200;
+ double maxProb = calcamp->CalcMaxProb(parId, mesonId, lepId, nuId, ffmodel, nQ2Bins);
+
+ if (verbose()) {
+ EvtGenReport(EVTGEN_INFO,"EvtBcSMuNu") << "Max prob = " << maxProb << endl;
}
-}
-void EvtBcSMuNu::PrintMaxProbs()
-{
- EvtId BcID = EvtPDL::getId("B_c+");
- EvtId Chic0ID = EvtPDL::getId("chi_c0");
- EvtId MuID = EvtPDL::getId("mu+");
- EvtId TauID = EvtPDL::getId("tau+");
- EvtId NuMuID = EvtPDL::getId("nu_mu");
- EvtId NuTauID = EvtPDL::getId("nu_tau");
+ setProbMax(maxProb);
- EvtBCSFF* testmodel;
- double mu_maxprob, tau_maxprob;
-
- // CHIC0
- testmodel = new EvtBCSFF(Chic0ID.getId(),3);
- mu_maxprob = calcamp->CalcMaxProb(BcID,Chic0ID,MuID,NuMuID,testmodel);
- tau_maxprob = calcamp->CalcMaxProb(BcID,Chic0ID,TauID,NuTauID,testmodel);
- cout << "B_c => chi_c0(1P) l nu transition w/ Wang:\n";
- cout << " --> Mu max prob should be: " << mu_maxprob << endl;
- cout << " --> Tau max prob should be: " << tau_maxprob << endl;
- delete testmodel;
+
}
diff --git a/src/EvtGenModels/EvtBcTMuNu.cpp b/src/EvtGenModels/EvtBcTMuNu.cpp
index 3e8316b..d0b1191 100644
--- a/src/EvtGenModels/EvtBcTMuNu.cpp
+++ b/src/EvtGenModels/EvtBcTMuNu.cpp
@@ -1,128 +1,100 @@
//--------------------------------------------------------------------------
//
// 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: EvtBcTMuNu.cc
//
-// Description: Routine to implement semileptonic B->psi lnu decays
+// Description: Routine to implement semileptonic B->T lnu decays
//
// Modification history:
//
// AVL July 6, 2012 Module created
//
//------------------------------------------------------------------------
//
#include "EvtGenBase/EvtPatches.hh"
#include <stdlib.h>
#include "EvtGenBase/EvtParticle.hh"
#include "EvtGenBase/EvtGenKine.hh"
#include "EvtGenBase/EvtPDL.hh"
#include "EvtGenBase/EvtReport.hh"
#include "EvtGenBase/EvtSemiLeptonicTensorAmp.hh"
#include <string>
#include <iostream>
#include "EvtGenModels/EvtBcTMuNu.hh"
#include "EvtGenModels/EvtBCTFF.hh"
using namespace std;
EvtBcTMuNu::~EvtBcTMuNu() {
-// cout<<"EvtBcTMuNu::destructor getProbMax(-1) = "<<getProbMax(-1)<<endl;
}
std::string EvtBcTMuNu::getName(){
return "BC_TMN";
}
EvtDecayBase* EvtBcTMuNu::clone(){
-// cout<<" === EvtBcTMuNu::clone() ============"<<endl;
return new EvtBcTMuNu;
}
void EvtBcTMuNu::decay( EvtParticle *p ){
-// cout<<" === EvtBcTMuNu::decay() ============"<<endl;
p->initializePhaseSpace(getNDaug(),getDaugs());
calcamp->CalcAmp(p,_amp2,ffmodel);
- cout<<"EvtBcTMuNu::decay() getProbMax(-1) = "<<getProbMax(-1)<<endl;
+
}
void EvtBcTMuNu::init(){
-// cout<<" === EvtBcTMuNu::init() ============"<<endl;
-
checkNArg(1);
checkNDaug(3);
- //We expect the parent to be a scalar
+ //We expect the parent to be a scalar
//and the daughters to be X lepton neutrino
checkSpinParent(EvtSpinType::SCALAR);
checkSpinDaughter(0,EvtSpinType::TENSOR);
checkSpinDaughter(1,EvtSpinType::DIRAC);
checkSpinDaughter(2,EvtSpinType::NEUTRINO);
idTensor = getDaug(0).getId();
whichfit = int(getArg(0)+0.1);
- cout << "EvtBcTMuNu: whichfit =" << whichfit << " idTensor=" << idTensor << endl;
+
ffmodel = new EvtBCTFF(idTensor,whichfit);
calcamp = new EvtSemiLeptonicTensorAmp;
}
void EvtBcTMuNu::initProbMax() {
- PrintMaxProbs();
+ EvtId parId = getParentId();
+ EvtId mesonId = getDaug(0);
+ EvtId lepId = getDaug(1);
+ EvtId nuId = getDaug(2);
- // cout<<" === EvtBcTMuNu::initProbMax() ============"<<endl;
- if (whichfit == 0) setProbMax(0.0); // NEED TO FIX!
- else if (idTensor == EvtPDL::getId("chi_c2").getId() && whichfit == 3) setProbMax(30.0); // NEED TO FIX
- else {
- cout<<"EvtBcTMuNu: Not realized yet"<<endl;
- ::abort();
+ int nQ2Bins = 200;
+ double maxProb = calcamp->CalcMaxProb(parId, mesonId, lepId, nuId, ffmodel, nQ2Bins);
+
+ if (verbose()) {
+ EvtGenReport(EVTGEN_INFO,"EvtBcTMuNu") << "Max prob = " << maxProb << endl;
}
-}
+ setProbMax(maxProb);
-void EvtBcTMuNu::PrintMaxProbs()
-{
- EvtId BcID = EvtPDL::getId("B_c+");
- //EvtId JpsiID = EvtPDL::getId("J/psi(1S)");
- //EvtId PsiID = EvtPDL::getId("psi(2S)");
- EvtId Chic2ID = EvtPDL::getId("chi_c2");
- EvtId MuID = EvtPDL::getId("mu+");
- EvtId TauID = EvtPDL::getId("tau+");
- EvtId NuMuID = EvtPDL::getId("nu_mu");
- EvtId NuTauID = EvtPDL::getId("nu_tau");
-
- EvtBCTFF* testmodel;
- double mu_maxprob, tau_maxprob;
-
- // CHIC2
- testmodel = new EvtBCTFF(Chic2ID.getId(),3);
- mu_maxprob = calcamp->CalcMaxProb(BcID,Chic2ID,MuID,NuMuID,testmodel);
- tau_maxprob = calcamp->CalcMaxProb(BcID,Chic2ID,TauID,NuTauID,testmodel);
- cout << "B_c => chi_c2(1P) l nu transition w/ Wang:\n";
- cout << " --> Mu max prob should be: " << mu_maxprob << endl;
- cout << " --> Tau max prob should be: " << tau_maxprob << endl;
- delete testmodel;
-
}
-
-
diff --git a/src/EvtGenModels/EvtBcVMuNu.cpp b/src/EvtGenModels/EvtBcVMuNu.cpp
index dacb6be..639fccd 100755
--- a/src/EvtGenModels/EvtBcVMuNu.cpp
+++ b/src/EvtGenModels/EvtBcVMuNu.cpp
@@ -1,100 +1,98 @@
//--------------------------------------------------------------------------
//
// 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: EvtBcVMuNu.cc
//
-// Description: Routine to implement semileptonic B->psi lnu decays
+// Description: Routine to implement semileptonic Bc -> vector l nu decays
//
// Modification history:
//
-// AVL July 6, 2012 Module created
+// AVL Jul 6, 2012 Module created
+// AVL Feb 5, 2018 D0, D*0 modes added
//
//------------------------------------------------------------------------
//
#include "EvtGenBase/EvtPatches.hh"
#include <stdlib.h>
#include "EvtGenBase/EvtParticle.hh"
#include "EvtGenBase/EvtGenKine.hh"
#include "EvtGenBase/EvtPDL.hh"
#include "EvtGenBase/EvtReport.hh"
#include "EvtGenBase/EvtSemiLeptonicVectorAmp.hh"
#include <string>
#include <iostream>
#include "EvtGenModels/EvtBcVMuNu.hh"
#include "EvtGenModels/EvtBCVFF.hh"
using namespace std;
EvtBcVMuNu::~EvtBcVMuNu() {
-// cout<<"EvtBcVMuNu::destructor getProbMax(-1) = "<<getProbMax(-1)<<endl;
}
std::string EvtBcVMuNu::getName(){
return "BC_VMN";
}
EvtDecayBase* EvtBcVMuNu::clone(){
-// cout<<" === EvtBcVMuNu::clone() ============"<<endl;
return new EvtBcVMuNu;
}
void EvtBcVMuNu::decay( EvtParticle *p ){
-// cout<<" === EvtBcVMuNu::decay() ============"<<endl;
p->initializePhaseSpace(getNDaug(),getDaugs());
calcamp->CalcAmp(p,_amp2,ffmodel);
-// cout<<"EvtBcVMuNu::decay() getProbMax(-1) = "<<getProbMax(-1)<<endl;
}
void EvtBcVMuNu::init(){
-// cout<<" === EvtBcVMuNu::init() ============"<<endl;
-
-
checkNArg(1);
checkNDaug(3);
//We expect the parent to be a scalar
//and the daughters to be X lepton neutrino
checkSpinParent(EvtSpinType::SCALAR);
checkSpinDaughter(0,EvtSpinType::VECTOR);
checkSpinDaughter(1,EvtSpinType::DIRAC);
checkSpinDaughter(2,EvtSpinType::NEUTRINO);
idVector = getDaug(0).getId();
whichfit = int(getArg(0)+0.1);
- cout << "EvtBcVMuNu: whichfit = " << whichfit << " idVector = " << idVector << endl;
+
ffmodel = new EvtBCVFF(idVector,whichfit);
calcamp = new EvtSemiLeptonicVectorAmp;
}
void EvtBcVMuNu::initProbMax() {
-// cout<<" === EvtBcVMuNu::initProbMax() ============"<<endl;
- if (whichfit == 0) setProbMax(1700.);
- else if (idVector == EvtPDL::getId("J/psi").getId() && whichfit == 1) setProbMax(40000.0); // > 26.6k for mu, 20.0k for tau
- else if (idVector == EvtPDL::getId("J/psi").getId() && whichfit == 2) setProbMax(15000.); // > 12.8k for mu, 9.7k for tau
- else if (idVector == EvtPDL::getId("psi(2S)").getId() && whichfit == 1) setProbMax(700.); // > 600 for mu, 350 for tau
- else if (idVector == EvtPDL::getId("psi(2S)").getId() && whichfit == 2) setProbMax(300.); // > 216 for mu, 43 for tau
- else if (idVector == EvtPDL::getId("chi_c1").getId() && whichfit == 3) setProbMax(2000.0); // > 2000 for mu, 940 for tau
- else {
- cout<<"EvtBcVMuNu: Not realized yet"<<endl;
- ::abort();
+
+ EvtId parId = getParentId();
+ EvtId mesonId = getDaug(0);
+ EvtId lepId = getDaug(1);
+ EvtId nuId = getDaug(2);
+
+ int nQ2Bins = 200;
+ double maxProb = calcamp->CalcMaxProb(parId, mesonId, lepId, nuId, ffmodel, nQ2Bins);
+
+ if (verbose()) {
+ EvtGenReport(EVTGEN_INFO,"EvtBcVMuNu") << "Max prob = " << maxProb << endl;
}
+
+ setProbMax(maxProb);
+
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Nov 19, 8:06 PM (1 d, 5 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3790362
Default Alt Text
(72 KB)

Event Timeline