diff --git a/EvtGenModels/EvtEta2MuMuGamma.hh b/EvtGenModels/EvtEta2MuMuGamma.hh deleted file mode 100644 index f0bf207..0000000 --- a/EvtGenModels/EvtEta2MuMuGamma.hh +++ /dev/null @@ -1,39 +0,0 @@ - -/*********************************************************************** -* Copyright 1998-2020 CERN for the benefit of the EvtGen authors * -* * -* This file is part of EvtGen. * -* * -* EvtGen is free software: you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation, either version 3 of the License, or * -* (at your option) any later version. * -* * -* EvtGen is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with EvtGen. If not, see . * -***********************************************************************/ - -#ifndef EVTETA2MUMUGAMMA_HH -#define EVTETA2MUMUGAMMA_HH - -#include "EvtGenBase/EvtDecayProb.hh" - -class EvtParticle; - -class EvtEta2MuMuGamma : public EvtDecayProb { - public: - std::string getName() override; - EvtDecayBase* clone() override; - - void init() override; - void initProbMax() override; - - void decay( EvtParticle* p ) override; -}; - -#endif diff --git a/EvtGenModels/EvtPi0Dalitz.hh b/EvtGenModels/EvtPi0Dalitz.hh index 53003d0..9a8bbee 100644 --- a/EvtGenModels/EvtPi0Dalitz.hh +++ b/EvtGenModels/EvtPi0Dalitz.hh @@ -1,39 +1,47 @@ /*********************************************************************** * Copyright 1998-2020 CERN for the benefit of the EvtGen authors * * * * This file is part of EvtGen. * * * * EvtGen is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * EvtGen is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with EvtGen. If not, see . * ***********************************************************************/ #ifndef EVTPI0DALITZ_HH #define EVTPI0DALITZ_HH #include "EvtGenBase/EvtDecayProb.hh" class EvtParticle; class EvtPi0Dalitz : public EvtDecayProb { public: std::string getName() override; EvtDecayBase* clone() override; void init() override; void initProbMax() override; void decay( EvtParticle* p ) override; + + private: + double m_poleSize{ 0.00000002 }; + + // Following are rho mass and width, but in order to keep consistency + // with what was done before do not use data from particle table. + const double m_m0Sq{ 0.768 * 0.768 }; + const double m_m0SqG0Sq{ m_m0Sq * 0.151 * 0.151 }; }; #endif diff --git a/src/EvtGenModels/EvtEta2MuMuGamma.cpp b/src/EvtGenModels/EvtEta2MuMuGamma.cpp deleted file mode 100644 index 1ec5d38..0000000 --- a/src/EvtGenModels/EvtEta2MuMuGamma.cpp +++ /dev/null @@ -1,107 +0,0 @@ - -/*********************************************************************** -* Copyright 1998-2020 CERN for the benefit of the EvtGen authors * -* * -* This file is part of EvtGen. * -* * -* EvtGen is free software: you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation, either version 3 of the License, or * -* (at your option) any later version. * -* * -* EvtGen is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with EvtGen. If not, see . * -***********************************************************************/ - -#include "EvtGenModels/EvtEta2MuMuGamma.hh" - -#include "EvtGenBase/EvtDiracSpinor.hh" -#include "EvtGenBase/EvtGenKine.hh" -#include "EvtGenBase/EvtPDL.hh" -#include "EvtGenBase/EvtParticle.hh" -#include "EvtGenBase/EvtPatches.hh" -#include "EvtGenBase/EvtReport.hh" -#include "EvtGenBase/EvtTensor4C.hh" -#include "EvtGenBase/EvtVector4C.hh" - -#include -#include -#include -#include -using std::fstream; - -std::string EvtEta2MuMuGamma::getName() -{ - return "ETA2MUMUGAMMA"; -} - -EvtDecayBase* EvtEta2MuMuGamma::clone() -{ - return new EvtEta2MuMuGamma; -} - -void EvtEta2MuMuGamma::initProbMax() -{ - setProbMax( 3.5 ); -} - -void EvtEta2MuMuGamma::init() -{ - // check that there are 0 arguments - checkNArg( 0 ); - checkNDaug( 3 ); - - checkSpinParent( EvtSpinType::SCALAR ); - - checkSpinDaughter( 0, EvtSpinType::DIRAC ); - checkSpinDaughter( 1, EvtSpinType::DIRAC ); - checkSpinDaughter( 2, EvtSpinType::PHOTON ); -} - -void EvtEta2MuMuGamma::decay( EvtParticle* p ) -{ - EvtParticle *ep, *em, *gamma; - setWeight( p->initializePhaseSpace( getNDaug(), getDaugs(), false, - 0.00000002, 0, 1 ) ); - - ep = p->getDaug( 0 ); - em = p->getDaug( 1 ); - gamma = p->getDaug( 2 ); - - // the next four lines generates events with a weight such that - // the efficiency for selecting them is good. The parameter below of - // 0.1 is the size of the peak at low q^2 (in arbitrary units). - // The value of 0.1 is appropriate for muons. - // when you use this remember to remove the cut on q^2! - - //ep em invariant mass^2 - double m2 = ( ep->getP4() + em->getP4() ).mass2(); - EvtVector4R q = ep->getP4() + em->getP4(); - //Just use the prob summed over spins... - - EvtTensor4C w, v; - - v = 2.0 * ( gamma->getP4() * q ) * - EvtGenFunctions::directProd( q, gamma->getP4() ) - - ( gamma->getP4() * q ) * ( gamma->getP4() * q ) * EvtTensor4C::g() - - m2 * EvtGenFunctions::directProd( gamma->getP4(), gamma->getP4() ); - - w = 4.0 * ( EvtGenFunctions::directProd( ep->getP4(), em->getP4() ) + - EvtGenFunctions::directProd( em->getP4(), ep->getP4() ) - - EvtTensor4C::g() * - ( ep->getP4() * em->getP4() - ep->getP4().mass2() ) ); - - double prob = ( real( cont( v, w ) ) ) / ( m2 * m2 ); - prob *= ( 1.0 / ( ( 0.768 * 0.768 - m2 ) * ( 0.768 * 0.768 - m2 ) + - 0.768 * 0.768 * 0.151 * 0.151 ) ); - - // EvtGenReport(EVTGEN_INFO,"EvtGen") << "prob is "<. * ***********************************************************************/ #include "EvtGenModels/EvtModelReg.hh" #include "EvtGenBase/EvtModel.hh" #include "EvtGenBase/EvtPDL.hh" #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtPatches.hh" #include "EvtGenModels/EvtBBScalar.hh" #include "EvtGenModels/EvtBHadronic.hh" #include "EvtGenModels/EvtBLLNuL.hh" #include "EvtGenModels/EvtBTo3piCP.hh" #include "EvtGenModels/EvtBTo4piCP.hh" #include "EvtGenModels/EvtBToDDalitzCPK.hh" #include "EvtGenModels/EvtBToDiBaryonlnupQCD.hh" #include "EvtGenModels/EvtBToKpipiCP.hh" #include "EvtGenModels/EvtBToPlnuBK.hh" #include "EvtGenModels/EvtBToVlnuBall.hh" #include "EvtGenModels/EvtBaryonPCR.hh" #include "EvtGenModels/EvtBcBsNPi.hh" #include "EvtGenModels/EvtBcBsStarNPi.hh" #include "EvtGenModels/EvtBcPsiNPi.hh" #include "EvtGenModels/EvtBcSMuNu.hh" #include "EvtGenModels/EvtBcTMuNu.hh" #include "EvtGenModels/EvtBcToNPi.hh" #include "EvtGenModels/EvtBcVHad.hh" #include "EvtGenModels/EvtBcVMuNu.hh" #include "EvtGenModels/EvtBcVNpi.hh" #include "EvtGenModels/EvtBsMuMuKK.hh" #include "EvtGenModels/EvtBsquark.hh" #include "EvtGenModels/EvtBto2piCPiso.hh" #include "EvtGenModels/EvtBtoKD3P.hh" #include "EvtGenModels/EvtBtoKpiCPiso.hh" #include "EvtGenModels/EvtBtoXsEtap.hh" #include "EvtGenModels/EvtBtoXsgamma.hh" #include "EvtGenModels/EvtBtoXsll.hh" #include "EvtGenModels/EvtCBTo3piMPP.hh" #include "EvtGenModels/EvtCBTo3piP00.hh" #include "EvtGenModels/EvtD0gammaDalitz.hh" #include "EvtGenModels/EvtD0mixDalitz.hh" #include "EvtGenModels/EvtDDalitz.hh" #include "EvtGenModels/EvtDMix.hh" #include "EvtGenModels/EvtDToKpienu.hh" -#include "EvtGenModels/EvtEta2MuMuGamma.hh" #include "EvtGenModels/EvtEtaDalitz.hh" #include "EvtGenModels/EvtFlatQ2.hh" #include "EvtGenModels/EvtFlatSqDalitz.hh" #include "EvtGenModels/EvtGenericDalitz.hh" #include "EvtGenModels/EvtGoityRoberts.hh" #include "EvtGenModels/EvtHQET.hh" #include "EvtGenModels/EvtHQET2.hh" #include "EvtGenModels/EvtHelAmp.hh" #include "EvtGenModels/EvtHypNonLepton.hh" #include "EvtGenModels/EvtISGW.hh" #include "EvtGenModels/EvtISGW2.hh" #include "EvtGenModels/EvtKKLambdaC.hh" #include "EvtGenModels/EvtKStopizmumu.hh" #include "EvtGenModels/EvtKstarnunu.hh" #include "EvtGenModels/EvtKstarstargamma.hh" #include "EvtGenModels/EvtLNuGamma.hh" #include "EvtGenModels/EvtLambdaB2LambdaV.hh" #include "EvtGenModels/EvtLambdaP_BarGamma.hh" #include "EvtGenModels/EvtLambdacPHH.hh" #include "EvtGenModels/EvtLb2Baryonlnu.hh" #include "EvtGenModels/EvtLb2Lll.hh" #include "EvtGenModels/EvtLb2plnuLCSR.hh" #include "EvtGenModels/EvtLb2plnuLQCD.hh" #include "EvtGenModels/EvtMelikhov.hh" #include "EvtGenModels/EvtMultibody.hh" #include "EvtGenModels/EvtOmegaDalitz.hh" #include "EvtGenModels/EvtPVVCPLH.hh" #include "EvtGenModels/EvtPartWave.hh" #include "EvtGenModels/EvtPhiDalitz.hh" #include "EvtGenModels/EvtPhsp.hh" #include "EvtGenModels/EvtPhspFlatLifetime.hh" #include "EvtGenModels/EvtPhspDecaytimeCut.hh" #include "EvtGenModels/EvtPi0Dalitz.hh" #include "EvtGenModels/EvtPropSLPole.hh" #include "EvtGenModels/EvtPsi2JpsiPiPi.hh" #include "EvtGenModels/EvtPto3P.hh" #include "EvtGenModels/EvtRareLbToLll.hh" #include "EvtGenModels/EvtSLBKPole.hh" #include "EvtGenModels/EvtSLN.hh" #include "EvtGenModels/EvtSLPole.hh" #include "EvtGenModels/EvtSSDCP.hh" #include "EvtGenModels/EvtSSD_DirectCP.hh" #include "EvtGenModels/EvtSSSCP.hh" #include "EvtGenModels/EvtSSSCPT.hh" #include "EvtGenModels/EvtSSSCPpng.hh" #include "EvtGenModels/EvtSTS.hh" #include "EvtGenModels/EvtSTSCP.hh" #include "EvtGenModels/EvtSVP.hh" #include "EvtGenModels/EvtSVPCP.hh" #include "EvtGenModels/EvtSVPHelAmp.hh" #include "EvtGenModels/EvtSVPHelCPMix.hh" #include "EvtGenModels/EvtSVS.hh" #include "EvtGenModels/EvtSVSCP.hh" #include "EvtGenModels/EvtSVSCPLH.hh" #include "EvtGenModels/EvtSVSCPiso.hh" #include "EvtGenModels/EvtSVSNONCPEIGEN.hh" #include "EvtGenModels/EvtSVVCP.hh" #include "EvtGenModels/EvtSVVCPLH.hh" #include "EvtGenModels/EvtSVVHelAmp.hh" #include "EvtGenModels/EvtSVVHelCPMix.hh" #include "EvtGenModels/EvtSVVNONCPEIGEN.hh" #include "EvtGenModels/EvtSingleParticle.hh" #include "EvtGenModels/EvtSll.hh" #include "EvtGenModels/EvtTSS.hh" #include "EvtGenModels/EvtTVP.hh" #include "EvtGenModels/EvtTVSPwave.hh" #include "EvtGenModels/EvtTauHadnu.hh" #include "EvtGenModels/EvtTauScalarnu.hh" #include "EvtGenModels/EvtTauVectornu.hh" #include "EvtGenModels/EvtTaulnunu.hh" #include "EvtGenModels/EvtVPHOtoVISRHi.hh" #include "EvtGenModels/EvtVSPPwave.hh" #include "EvtGenModels/EvtVSS.hh" #include "EvtGenModels/EvtVSSBMixCPT.hh" #include "EvtGenModels/EvtVSSMix.hh" #include "EvtGenModels/EvtVVP.hh" #include "EvtGenModels/EvtVVPIPI_WEIGHTED.hh" #include "EvtGenModels/EvtVVSPwave.hh" #include "EvtGenModels/EvtVVpipi.hh" #include "EvtGenModels/EvtVectorIsr.hh" #include "EvtGenModels/EvtVll.hh" #include "EvtGenModels/EvtVtoSll.hh" #include "EvtGenModels/EvtVub.hh" #include "EvtGenModels/EvtVubBLNP.hh" #include "EvtGenModels/EvtVubBLNPHybrid.hh" #include "EvtGenModels/EvtVubHybrid.hh" #include "EvtGenModels/EvtVubNLO.hh" #include "EvtGenModels/EvtXPsiGamma.hh" #include "EvtGenModels/EvtY3SToY1SpipiMoxhay.hh" #include "EvtGenModels/EvtYmSToYnSpipiCLEO.hh" #include "EvtGenModels/EvtbTosllAli.hh" #include "EvtGenModels/EvtbTosllBall.hh" #include "EvtGenModels/EvtbTosllMS.hh" #include "EvtGenModels/EvtbTosllMSExt.hh" #include "EvtGenModels/Evtbs2llGammaISRFSR.hh" #include "EvtGenModels/Evtbs2llGammaMNT.hh" #include "EvtGenModels/EvtbsToLLLL.hh" #include "EvtGenModels/EvtbsToLLLLHyperCP.hh" #include "EvtGenModels/EvtThreeBodyPhsp.hh" #include "EvtGenModels/EvtFourBodyPhsp.hh" #include "EvtGenModels/EvtEtaLLPiPi.hh" #include #include #include #include #include #include using std::cout; using std::endl; using std::fstream; EvtModelReg::EvtModelReg( const std::list* extraModels ) { EvtModel& modelist = EvtModel::instance(); if ( extraModels ) { for ( std::list::const_iterator it = extraModels->begin(); it != extraModels->end(); ++it ) { modelist.registerModel( *it ); } } modelist.registerModel( new EvtBBScalar ); modelist.registerModel( new EvtLambdaP_BarGamma ); modelist.registerModel( new EvtFlatQ2 ); modelist.registerModel( new EvtTauHadnu ); modelist.registerModel( new EvtTauVectornu ); modelist.registerModel( new EvtVVP ); modelist.registerModel( new EvtSLN ); modelist.registerModel( new EvtISGW2 ); modelist.registerModel( new EvtMelikhov ); modelist.registerModel( new EvtSLPole ); modelist.registerModel( new EvtPropSLPole ); modelist.registerModel( new EvtSLBKPole ); modelist.registerModel( new EvtHQET ); modelist.registerModel( new EvtHQET2 ); modelist.registerModel( new EvtISGW ); modelist.registerModel( new EvtBHadronic ); modelist.registerModel( new EvtVSS ); modelist.registerModel( new EvtVSSMix ); modelist.registerModel( new EvtVSSBMixCPT ); modelist.registerModel( new EvtVSPPwave ); modelist.registerModel( new EvtGoityRoberts ); modelist.registerModel( new EvtSVS ); modelist.registerModel( new EvtTSS ); modelist.registerModel( new EvtTVSPwave ); modelist.registerModel( new EvtSVVHelAmp ); modelist.registerModel( new EvtSVPHelAmp ); modelist.registerModel( new EvtSVPCP ); modelist.registerModel( new EvtVVSPwave ); modelist.registerModel( new EvtDDalitz ); modelist.registerModel( new EvtOmegaDalitz ); modelist.registerModel( new EvtEtaDalitz ); modelist.registerModel( new EvtPhsp ); modelist.registerModel( new EvtPhspDecaytimeCut ); modelist.registerModel( new EvtBtoXsgamma ); modelist.registerModel( new EvtBtoXsll ); modelist.registerModel( new EvtBtoXsEtap ); modelist.registerModel( new EvtSSSCP ); modelist.registerModel( new EvtSSSCPpng ); modelist.registerModel( new EvtSTSCP ); modelist.registerModel( new EvtSTS ); modelist.registerModel( new EvtSSSCPT ); modelist.registerModel( new EvtSVSCP ); modelist.registerModel( new EvtSSDCP ); modelist.registerModel( new EvtSVSNONCPEIGEN ); modelist.registerModel( new EvtSVVNONCPEIGEN ); modelist.registerModel( new EvtSVVCP ); modelist.registerModel( new EvtSVVCPLH ); modelist.registerModel( new EvtSVSCPLH ); modelist.registerModel( new EvtSll ); modelist.registerModel( new EvtVll ); modelist.registerModel( new EvtTaulnunu ); modelist.registerModel( new EvtTauScalarnu ); modelist.registerModel( new EvtKstarnunu ); modelist.registerModel( new EvtbTosllBall ); modelist.registerModel( new EvtBto2piCPiso ); modelist.registerModel( new EvtBtoKpiCPiso ); modelist.registerModel( new EvtSVSCPiso ); modelist.registerModel( new EvtSingleParticle ); modelist.registerModel( new EvtVectorIsr ); modelist.registerModel( new EvtPi0Dalitz ); modelist.registerModel( new EvtHelAmp ); modelist.registerModel( new EvtPartWave ); modelist.registerModel( new EvtVVpipi ); modelist.registerModel( new EvtY3SToY1SpipiMoxhay ); modelist.registerModel( new EvtYmSToYnSpipiCLEO ); modelist.registerModel( new EvtBsquark ); modelist.registerModel( new EvtPhiDalitz ); modelist.registerModel( new EvtBToPlnuBK ); modelist.registerModel( new EvtBToVlnuBall ); modelist.registerModel( new EvtVVPIPI_WEIGHTED ); modelist.registerModel( new EvtVPHOtoVISRHi ); modelist.registerModel( new EvtBTo4piCP ); modelist.registerModel( new EvtBTo3piCP ); modelist.registerModel( new EvtCBTo3piP00 ); modelist.registerModel( new EvtCBTo3piMPP ); modelist.registerModel( new EvtBToKpipiCP ); modelist.registerModel( new EvtLb2Lll ); modelist.registerModel( new EvtRareLbToLll ); modelist.registerModel( new EvtHypNonLepton ); modelist.registerModel( new EvtSVVHelCPMix ); modelist.registerModel( new EvtSVPHelCPMix ); modelist.registerModel( new EvtLNuGamma ); modelist.registerModel( new EvtKstarstargamma ); modelist.registerModel( new EvtVub ); modelist.registerModel( new EvtVubHybrid ); modelist.registerModel( new EvtVubNLO ); modelist.registerModel( new EvtVubBLNP ); modelist.registerModel( new EvtVubBLNPHybrid ); modelist.registerModel( new EvtPto3P ); modelist.registerModel( new EvtBtoKD3P ); modelist.registerModel( new EvtKKLambdaC ); modelist.registerModel( new EvtMultibody ); modelist.registerModel( new EvtDMix ); modelist.registerModel( new EvtD0mixDalitz ); modelist.registerModel( new EvtD0gammaDalitz ); - modelist.registerModel( new EvtEta2MuMuGamma ); modelist.registerModel( new EvtbTosllAli ); modelist.registerModel( new EvtBaryonPCR ); modelist.registerModel( new EvtBToDDalitzCPK ); modelist.registerModel( new EvtLambdaB2LambdaV ); modelist.registerModel( new EvtLambda2PPiForLambdaB2LambdaV ); modelist.registerModel( new EvtV2VpVmForLambdaB2LambdaV ); modelist.registerModel( new EvtPVVCPLH ); modelist.registerModel( new EvtSSD_DirectCP ); modelist.registerModel( new EvtBcToNPi( true ) ); // true = print author info modelist.registerModel( new EvtBcPsiNPi ); modelist.registerModel( new EvtBcBsNPi ); modelist.registerModel( new EvtBcBsStarNPi ); modelist.registerModel( new EvtBcSMuNu ); modelist.registerModel( new EvtBcVMuNu ); modelist.registerModel( new EvtBcTMuNu ); modelist.registerModel( new EvtBcVNpi ); modelist.registerModel( new EvtSVP ); modelist.registerModel( new EvtTVP ); modelist.registerModel( new EvtXPsiGamma ); modelist.registerModel( new EvtbsToLLLL ); modelist.registerModel( new EvtbsToLLLLHyperCP ); modelist.registerModel( new EvtBLLNuL ); modelist.registerModel( new EvtKStopizmumu ); modelist.registerModel( new EvtVtoSll ); modelist.registerModel( new EvtBsMuMuKK ); modelist.registerModel( new EvtGenericDalitz() ); modelist.registerModel( new EvtBcVHad ); modelist.registerModel( new Evtbs2llGammaMNT ); modelist.registerModel( new Evtbs2llGammaISRFSR ); modelist.registerModel( new EvtbTosllMS ); modelist.registerModel( new EvtbTosllMSExt ); modelist.registerModel( new EvtLb2plnuLQCD ); modelist.registerModel( new EvtLb2plnuLCSR ); modelist.registerModel( new EvtLb2Baryonlnu ); modelist.registerModel( new EvtBToDiBaryonlnupQCD ); modelist.registerModel( new EvtFlatSqDalitz ); modelist.registerModel( new EvtPhspFlatLifetime ); modelist.registerModel( new EvtLambdacPHH ); modelist.registerModel( new EvtDToKpienu ); modelist.registerModel( new EvtPsi2JpsiPiPi ); modelist.registerModel( new EvtThreeBodyPhsp ); modelist.registerModel( new EvtFourBodyPhsp ); modelist.registerModel( new EvtEtaLLPiPi ); } diff --git a/src/EvtGenModels/EvtPi0Dalitz.cpp b/src/EvtGenModels/EvtPi0Dalitz.cpp index 9e14e36..866ce31 100644 --- a/src/EvtGenModels/EvtPi0Dalitz.cpp +++ b/src/EvtGenModels/EvtPi0Dalitz.cpp @@ -1,107 +1,141 @@ /*********************************************************************** * Copyright 1998-2020 CERN for the benefit of the EvtGen authors * * * * This file is part of EvtGen. * * * * EvtGen is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * EvtGen is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with EvtGen. If not, see . * ***********************************************************************/ #include "EvtGenModels/EvtPi0Dalitz.hh" #include "EvtGenBase/EvtDiracSpinor.hh" #include "EvtGenBase/EvtGenKine.hh" #include "EvtGenBase/EvtPDL.hh" #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtPatches.hh" #include "EvtGenBase/EvtReport.hh" #include "EvtGenBase/EvtTensor4C.hh" #include "EvtGenBase/EvtVector4C.hh" #include #include #include #include using std::fstream; std::string EvtPi0Dalitz::getName() { return "PI0_DALITZ"; } EvtDecayBase* EvtPi0Dalitz::clone() { return new EvtPi0Dalitz; } void EvtPi0Dalitz::initProbMax() { - setProbMax( 3.5 ); + // Search for maximum probability. In order to avoid setting up all + // particles with spinors and four-momenta, we use result after all + // contractions, which is: + // 1/((m_R^2-q^2)^2+m_R^2 Gamma_R^2) 1/(2q^2) (M^2-q^2)^2 beta_l + // (1+cos(theta)^2) where we set cos(theta)=1 + auto daughter1 = getDaug( 0 ); + auto daughter2 = getDaug( 1 ); + double q2Min = EvtPDL::getMass( daughter1 ) + EvtPDL::getMass( daughter2 ); + q2Min *= q2Min; + double q2Max = EvtPDL::getMass( getParentId() ); + q2Max *= q2Max; + const int steps = 20000; + const double step = ( q2Max - q2Min ) / steps; + double maxProb = 0; + for ( int ii = 0; ii < steps; ++ii ) { + double q2 = q2Min + ii * step; + const double mSqDiff = m_m0Sq - q2; + const double q2Sq = q2 * q2; + double prob = ( q2Max - q2 ) * ( q2Max - q2 ) * ( q2 - q2Min ) / + ( q2Sq ); + prob *= ( 1.0 / ( mSqDiff * mSqDiff + m_m0SqG0Sq ) ); + // When generating events, we do not start from phase-space, but + // add some pole to it, weight of which is taken into account + // elsewhere + prob /= 1.0 + m_poleSize / ( q2Sq ); + if ( prob > maxProb ) { + maxProb = prob; + } + } + setProbMax( maxProb * 1.05 ); } void EvtPi0Dalitz::init() { // check that there are 0 arguments checkNArg( 0 ); checkNDaug( 3 ); checkSpinParent( EvtSpinType::SCALAR ); checkSpinDaughter( 0, EvtSpinType::DIRAC ); checkSpinDaughter( 1, EvtSpinType::DIRAC ); checkSpinDaughter( 2, EvtSpinType::PHOTON ); + + // Rescale pole size to improve efficiency. Not sure about exact + // factor, but this seem to be best simple rescaling for + // eta-->e+e-gamma. + const double parentMass = EvtPDL::getMass( getParentId() ); + m_poleSize *= parentMass * parentMass / ( 0.135 * 0.135 ); } void EvtPi0Dalitz::decay( EvtParticle* p ) { EvtParticle *ep, *em, *gamma; setWeight( p->initializePhaseSpace( getNDaug(), getDaugs(), false, - 0.00000002, 0, 1 ) ); - + m_poleSize, 0, 1 ) ); ep = p->getDaug( 0 ); em = p->getDaug( 1 ); gamma = p->getDaug( 2 ); // the next four lines generates events with a weight such that // the efficiency for selecting them is good. The parameter below of // 0.1 is the size of the peak at low q^2 (in arbitrary units). // The value of 0.1 is appropriate for muons. // when you use this remember to remove the cut on q^2! //ep em invariant mass^2 double m2 = ( ep->getP4() + em->getP4() ).mass2(); EvtVector4R q = ep->getP4() + em->getP4(); //Just use the prob summed over spins... EvtTensor4C w, v; v = 2.0 * ( gamma->getP4() * q ) * EvtGenFunctions::directProd( q, gamma->getP4() ) - ( gamma->getP4() * q ) * ( gamma->getP4() * q ) * EvtTensor4C::g() - m2 * EvtGenFunctions::directProd( gamma->getP4(), gamma->getP4() ); w = 4.0 * ( EvtGenFunctions::directProd( ep->getP4(), em->getP4() ) + EvtGenFunctions::directProd( em->getP4(), ep->getP4() ) - EvtTensor4C::g() * ( ep->getP4() * em->getP4() - ep->getP4().mass2() ) ); double prob = ( real( cont( v, w ) ) ) / ( m2 * m2 ); - prob *= ( 1.0 / ( ( 0.768 * 0.768 - m2 ) * ( 0.768 * 0.768 - m2 ) + - 0.768 * 0.768 * 0.151 * 0.151 ) ); + const double m2Diff = m_m0Sq - m2; + prob *= ( 1.0 / ( m2Diff * m2Diff + m_m0SqG0Sq ) ); // EvtGenReport(EVTGEN_INFO,"EvtGen") << "prob is "<