/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/KKMC/KKMC-00-00-55/src/KKMC.cxx

Go to the documentation of this file.
00001 //#include "HepMC/HEPEVT_Wrapper.h"
00002 #include "HepMC/IO_HEPEVT.h"
00003 //#include "HepMC/IO_Ascii.h"
00004 #include "HepMC/GenEvent.h"
00005 
00006 #include "GaudiKernel/MsgStream.h"
00007 #include "GaudiKernel/ISvcLocator.h"
00008 #include "GaudiKernel/AlgFactory.h"
00009 #include "GaudiKernel/DataSvc.h"
00010 #include "GaudiKernel/SmartDataPtr.h"
00011 
00012 #include "KKMC/KKMC.h"
00013 #include "KKMC/KKMCRandom.h"
00014 #include "GeneratorObject/McGenEvent.h"
00015 #include "BesKernel/IBesRndmGenSvc.h"
00016 #include "cfortran/cfortran.h"
00017 
00018 #include "EventModel/EventHeader.h"
00019 
00020 PROTOCCALLSFSUB3(PSEUMAR_INITIALIZE, pseumar_initialize, INT, INT, INT)
00021 #define PSEUMAR_INITIALIZE(ijklin, ntot1n, ntot2n) CCALLSFSUB3(PSEUMAR_INITIALIZE, pseumar_initialize, INT, INT, INT, ijklin, ntot1n, ntot2n);
00022 
00023 PROTOCCALLSFSUB1(WHYM_SETDEF, whym_setdef, DOUBLEV)
00024 #define WHYM_SETDEF(XPAR) CCALLSFSUB1(WHYM_SETDEF, whym_setdef, DOUBLEV, XPAR);
00025 PROTOCCALLSFSUB0(MY_PYUPD, my_pyupd)
00026 #define MY_PYUPD() CCALLSFSUB0(MY_PYUPD, my_pyupd);
00027 
00028 PROTOCCALLSFSUB1(KK2F_INITIALIZE, kk2f_initialize, DOUBLEV)
00029 #define KK2F_INITIALIZE(XPAR) CCALLSFSUB1(KK2F_INITIALIZE, kk2f_initialize, DOUBLEV, XPAR);
00030 
00031 PROTOCCALLSFSUB0(HEPEVT_CLEAN, hepevt_clean)
00032 #define HEPEVT_CLEAN() CCALLSFSUB0(HEPEVT_CLEAN, hepevt_clean);
00033 PROTOCCALLSFSUB0(KK2F_MAKE, kk2f_make)
00034 #define KK2F_MAKE() CCALLSFSUB0(KK2F_MAKE, kk2f_make);
00035 
00036 PROTOCCALLSFSUB1(KK2F_GETKEYSKIP, kk2f_getkeyskip, PINT)
00037 #define KK2F_GETKEYSKIP(KEY) CCALLSFSUB1(KK2F_GETKEYSKIP, kk2f_getkeyskip,PINT, KEY);
00038 
00039 PROTOCCALLSFSUB1(PSIPP_DDBARCUT, psipp_ddbarcut, PINT)
00040 #define PSIPP_DDBARCUT(KEY) CCALLSFSUB1(PSIPP_DDBARCUT, psipp_ddbarcut, PINT, KEY);
00041 
00042 PROTOCCALLSFSUB0(KK2F_FINALIZE, kk2f_finalize)
00043 #define KK2F_FINALIZE() CCALLSFSUB0(KK2F_FINALIZE, kk2f_finalize);
00044 PROTOCCALLSFSUB2(KK2F_GETXSECMC,kk2f_getxsecmc,PDOUBLE, PDOUBLE)
00045 #define KK2F_GETXSECMC(xsecpb, xerrpb) CCALLSFSUB2(KK2F_GETXSECMC, kk2f_getxsecmc, PDOUBLE, PDOUBLE, xsecpb, xerrpb);
00046 
00047 PROTOCCALLSFSUB1(PYLIST, pylist, INT)
00048 #define PYLIST(LIST) CCALLSFSUB1(PYLIST, pylist, INT, LIST);
00049 
00050 PROTOCCALLSFSUB1(PYHEPC, pyhepc, INT)
00051 #define PYHEPC(ICONV) CCALLSFSUB1(PYHEPC, pyhepc, INT, ICONV);
00052 
00053 PROTOCCALLSFSUB1(KK2F_SETEVTGENINTERFACE,kk2f_setevtgeninterface, INT)
00054 #define KK2F_SETEVTGENINTERFACE(KEY) CCALLSFSUB1(KK2F_SETEVTGENINTERFACE,kk2f_setevtgeninterface, INT, KEY);
00055 PROTOCCALLSFSUB1(KK2F_GETEVTGENINTERFACE,kk2f_getevtgeninterface, PINT)
00056 #define KK2F_GETEVTGENINTERFACE(KEY) CCALLSFSUB1(KK2F_GETEVTGENINTERFACE,kk2f_getevtgeninterface, PINT, KEY);
00057 
00058 PROTOCCALLSFSUB1(HEPEVT_NUMHEP, hepevt_numhep, PINT)
00059 #define HEPEVT_NUMHEP(Nhep) CCALLSFSUB1(HEPEVT_NUMHEP, hepevt_numhep, PINT, Nhep);
00060 PROTOCCALLSFSUB1(HEPEVT_GETF,hepevt_getf, PINT)
00061 #define HEPEVT_GETF(POS) CCALLSFSUB1(HEPEVT_GETF, hepevt_getf,PINT, POS);  
00062 PROTOCCALLSFSUB1(HEPEVT_GETFBAR,hepevt_getfbar, PINT)
00063 #define HEPEVT_GETFBAR(POS) CCALLSFSUB1(HEPEVT_GETFBAR, hepevt_getfbar,PINT, POS);  
00064 PROTOCCALLSFSUB1(HEPEVT_GETKFFIN,hepevt_getkffin, PINT)
00065 #define HEPEVT_GETKFFIN(KFIN) CCALLSFSUB1(HEPEVT_GETKFFIN, hepevt_getkffin,PINT, KFIN);  
00066 PROTOCCALLSFSUB1(HEPEVT_SETPHOTOSFLAGTRUE, hepevt_setphotosflagtrue, INT)
00067 #define HEPEVT_SETPHOTOSFLAGTRUE(IP) CCALLSFSUB1(HEPEVT_SETPHOTOSFLAGTRUE, hepevt_setphotosflagtrue, INT, IP);
00068 PROTOCCALLSFSUB1(PHOTOS, photos, INT)
00069 #define PHOTOS(IP) CCALLSFSUB1(PHOTOS, photos, INT, IP);
00070 PROTOCCALLSFSUB0(PHOINI, phoini)
00071 #define PHOINI() CCALLSFSUB0(PHOINI, phoini);
00072 
00073 PROTOCCALLSFSUB0(TURNOFFTAUDECAY, turnofftaudecay)
00074 #define TURNOFFTAUDECAY() CCALLSFSUB0(TURNOFFTAUDECAY, turnofftaudecay);
00075 
00076 PROTOCCALLSFSUB2(PYUPDA,  pyupda, INT, INT)
00077 #define PYUPDA(MUPDA, LFN) CCALLSFSUB2(PYUPDA, pyupda, INT, INT, MUPDA, LFN);
00078 
00079         typedef struct { 
00080                 double ddbarmassCUT; 
00081         } DDBAR_DEF;
00082 #define DDBARMASS COMMON_BLOCK(DDBAR_DEF, ddbarmass)
00083 COMMON_BLOCK_DEF(DDBAR_DEF, DDBARMASS);
00084 
00085 typedef struct { 
00086         int isrtag,fsrtag; 
00087 } PHOTONTAG_DEF;
00088 #define PHOTONTAG COMMON_BLOCK(PHOTONTAG_DEF,photontag)
00089 COMMON_BLOCK_DEF(PHOTONTAG_DEF,PHOTONTAG);
00090 
00091 typedef struct { 
00092         int ich; 
00093 } MODEXS_DEF;
00094 #define MODEXS COMMON_BLOCK(MODEXS_DEF, modexs)
00095 COMMON_BLOCK_DEF(MODEXS_DEF, MODEXS);
00096 
00097 extern "C" {
00098         extern void pygive_(const char *cnfgstr,int length);
00099 } 
00100 
00101 using namespace HepMC;
00102 int KKMC::m_runNo=0;
00103 
00104 KKMC::KKMC(const std::string& name, ISvcLocator* pSvcLocator) : Algorithm(name, pSvcLocator)
00105 {
00106         m_numberEvent = 0;
00107 
00108         m_kkseed.clear();
00109         m_kkseed.push_back(123456);
00110         m_kkseed.push_back(1);
00111         m_kkseed.push_back(0);
00112 
00113 
00114         declareProperty("NumberOfEventPrinted", m_numberEventPrint=100);
00115         declareProperty("InitializedSeed", m_kkseed);
00116         declareProperty("CMSEnergy", m_cmsEnergy = 3.773);
00117         declareProperty("ReadMeasuredEcms", m_RdMeasuredEcms = false);// Read ecms from database (Wu Lianjin)
00118         declareProperty("BeamEnergySpread", m_cmsEnergySpread = 0.0013); //it should be beam energy spread,pingrg-2009-09-24
00119         declareProperty("GenerateResonance", m_generateResonance = true);
00120         declareProperty("GenerateContinuum", m_generateContinuum = true);
00121         declareProperty("GenerateDownQuark", m_generateDownQuark = true);
00122         declareProperty("GenerateUpQuark", m_generateUpQuark = true);
00123         declareProperty("GenerateStrangeQuark", m_generateStrangeQuark = true);
00124         declareProperty("GenerateCharmQuark", m_generateCharmQuark = true);
00125         declareProperty("GenerateBottomQuark", m_generateBottomQuark = false);
00126         declareProperty("GenerateMuonPair", m_generateMuonPair = true);
00127         declareProperty("GenerateTauPair", m_generateTauPair = true);
00128         declareProperty("GenerateRho", m_generateRho = true);
00129         declareProperty("GenerateOmega", m_generateOmega = true);
00130         declareProperty("GeneratePhi", m_generatePhi = true);
00131         declareProperty("GenerateJPsi", m_generateJPsi = true);
00132         declareProperty("GeneratePsiPrime", m_generatePsiPrime = true);
00133         declareProperty("GeneratePsi3770", m_generatePsi3770 = true);
00134         declareProperty("GeneratePsi4030", m_generatePsi4030 = true);
00135         declareProperty("GeneratePsi4160", m_generatePsi4160 = true);
00136         declareProperty("GeneratePsi4415", m_generatePsi4415 = true);
00137         declareProperty("GeneratePsi4260", m_generatePsi4260 = true);
00138         declareProperty("ThresholdCut", m_DdbarCutPsi3770 = -3.0); //generate DDbar decay, pingrg-2009-10-14
00139         declareProperty("TagISR", m_isrtag = false);               //Tag ISR photon, false: ID=22, true: ID=-22, pingrg-2010-6-30
00140         declareProperty("TagFSR", m_fsrtag = false);               //Tag FSR photon, false: ID=22, true: ID=-22, pingrg-2010-6-30
00141         declareProperty("ModeIndexExpXS", m_ich = -10);  //mode index using the measured cross section  
00142         //Added by Ke LI (like@ihep.ac.cn), 2015-02-16
00143         declareProperty("IHVP", m_ihvp= 1);// m_ihvp=0, switch off vacuum polarization;
00144         //1, 2, 3 for three different caculations (Jegerlehner/Eidelman, Jegerlehner(1988), Burkhardt etal.).
00145         //By default, is 1.
00146 
00147         m_paramRho.clear(); m_paramRho.push_back(0.77457e0); m_paramRho.push_back(147.65e-3); m_paramRho.push_back(6.89e-6);
00148         m_paramRh2.clear(); m_paramRh2.push_back(1.465e0); m_paramRh2.push_back(310e-3); m_paramRh2.push_back(0.0e-6);
00149         m_paramRh3.clear(); m_paramRh3.push_back(1.700e0); m_paramRh3.push_back(240e-3); m_paramRh3.push_back(0.0e-6);
00150         m_paramOme.clear(); m_paramOme.push_back(0.78194e0);m_paramOme.push_back(8.41e-3);m_paramOme.push_back(0.60e-6);
00151         m_paramOm2.clear(); m_paramOm2.push_back(1.419e0);m_paramOm2.push_back(174e-3);m_paramOm2.push_back(0.00e-6);
00152         m_paramOm3.clear(); m_paramOm3.push_back(1.649e0);m_paramOm3.push_back(220e-3);m_paramOm3.push_back(0.00e-6);
00153         m_paramPhi.clear(); m_paramPhi.push_back(1.01942e0);m_paramPhi.push_back(4.46e-3);m_paramPhi.push_back(1.33e-6);
00154         m_paramPh2.clear(); m_paramPh2.push_back(1.680e0);m_paramPh2.push_back(150e-3);m_paramPh2.push_back(0.00e-6);
00155         m_paramPsi.clear(); m_paramPsi.push_back(3.096916e0);m_paramPsi.push_back(0.0929e-3);m_paramPsi.push_back(5.40e-6);
00156         m_paramPs2.clear(); m_paramPs2.push_back(3.686109e0);m_paramPs2.push_back(0.304e-3);m_paramPs2.push_back(2.12e-6);
00157         m_paramPs3.clear(); m_paramPs3.push_back(3.77315e0);m_paramPs3.push_back(27.2e-3);m_paramPs3.push_back(0.26e-6);
00158         m_paramPs4.clear(); m_paramPs4.push_back(4.039e0);m_paramPs4.push_back(80e-3);m_paramPs4.push_back(0.86e-6);
00159         m_paramPs5.clear(); m_paramPs5.push_back(4.153e0);m_paramPs5.push_back(103e-3);m_paramPs5.push_back(0.83e-6);
00160         m_paramPs6.clear(); m_paramPs6.push_back(4.421e0);m_paramPs6.push_back(62e-3);m_paramPs6.push_back(0.58e-6);
00161         m_paramPs7.clear(); m_paramPs7.push_back(4.263e0);m_paramPs7.push_back(95e-3);m_paramPs7.push_back(0.47e-6); 
00162         m_paramPs8.clear(); m_paramPs8.push_back(3.872e0);m_paramPs8.push_back(100e-3);m_paramPs8.push_back(0.00e-6);
00163         m_paramUps.clear(); m_paramUps.push_back(9.46030e0); m_paramUps.push_back(0.0525e-3); m_paramUps.push_back(1.32e-6);
00164         m_paramUp2.clear(); m_paramUp2.push_back(10.02326e0); m_paramUp2.push_back(0.044e-3); m_paramUp2.push_back(0.52e-6);
00165         m_paramUp3.clear(); m_paramUp3.push_back(10.3552e0); m_paramUp3.push_back(0.026e-3); m_paramUp3.push_back(0.00e-6);
00166         m_paramUp4.clear(); m_paramUp4.push_back(10.580e0); m_paramUp4.push_back(14e-3); m_paramUp4.push_back(0.248e-6);
00167         m_paramUp5.clear(); m_paramUp5.push_back(10.865e0); m_paramUp5.push_back(110e-3); m_paramUp5.push_back(0.31e-6);
00168         m_paramUp6.clear(); m_paramUp6.push_back(11.019); m_paramUp6.push_back(79e-3); m_paramUp6.push_back(0.13e-6);
00169         m_paramZeta.clear(); m_paramZeta.push_back(91.1876e0); m_paramZeta.push_back(2.4952e0); m_paramZeta.push_back(0.08391e0);
00170         m_paramW.clear(); m_paramW.push_back(80.43); m_paramW.push_back(2.11e0);
00171 
00172         declareProperty("ResParameterRho", m_paramRho);
00173         declareProperty("ResParameterRh2", m_paramRh2);
00174         declareProperty("ResParameterRh3", m_paramRh3);
00175         declareProperty("ResParameterOme", m_paramOme);
00176         declareProperty("ResParameterOm2", m_paramOm2);
00177         declareProperty("ResParameterOm3", m_paramOm3);
00178         declareProperty("ResParameterPhi", m_paramPhi); 
00179         declareProperty("ResParameterPh2", m_paramPh2);
00180         declareProperty("ResParameterPsi", m_paramPsi);
00181         declareProperty("ResParameterPs2", m_paramPs2);
00182         declareProperty("ResParameterPs3", m_paramPs3);
00183         declareProperty("ResParameterPs4", m_paramPs4);
00184         declareProperty("ResParameterPs5", m_paramPs5);
00185         declareProperty("ResParameterPs6", m_paramPs6);
00186         declareProperty("ResParameterPs7", m_paramPs7);  
00187         declareProperty("ResParameterPs8", m_paramPs8);
00188         declareProperty("ResParameterUps", m_paramUps);
00189         declareProperty("ResParameterUp2", m_paramUp2);
00190         declareProperty("ResParameterUp3", m_paramUp3);
00191         declareProperty("ResParameterUp4", m_paramUp4);
00192         declareProperty("ResParameterUp5", m_paramUp5);
00193         declareProperty("ResParameterUp6", m_paramUp6);
00194         declareProperty("ResParameterZeta", m_paramZeta);
00195         declareProperty("ResParameterW", m_paramW);
00196 
00197         // psi(3770) decay
00198         declareProperty("Psi3770toNonDDb", m_ps3toNonDDb = 0.0);
00199         declareProperty("Psi3770RatioOfD0toDp", m_ps3D0toDp = 0.563);
00200         // psi(4030) decay
00201         declareProperty("Psi4030toD0D0b", m_ps4toD0D0b = 0.0227);
00202         declareProperty("Psi4030toDpDm", m_ps4toDpDm = 0.0167);
00203         declareProperty("Psi4030toDsDs", m_ps4toDsDs = 0.0383);
00204         declareProperty("Psi4030toD0D0Star", m_ps4toD0D0Star = 0.2952);
00205         declareProperty("Psi4030toDpDmStar", m_ps4toDpDmStar = 0.2764);
00206         declareProperty("Psi4030toD0StarD0Star", m_ps4toD0StarD0Star=0.2476);
00207         declareProperty("Psi4030toDpStarDmStar", m_ps4toDpStarDmStar=0.1041);
00208         // psi(4160) decay
00209         declareProperty("Psi4160toD0D0b", m_ps5toD0D0b = 0.0190);
00210         declareProperty("Psi4160toDpDm", m_ps5toDpDm = 0.0180);
00211         declareProperty("Psi4160toDsDs", m_ps5toDsDs = 0.0488);
00212         declareProperty("Psi4160toD0D0Star", m_ps5toD0D0Star = 0.1248);
00213         declareProperty("Psi4160toDpDmStar", m_ps5toDpDmStar = 0.1240);
00214         declareProperty("Psi4160toDsDsStar", m_ps5toDsDsStar = 0.0820);
00215         declareProperty("Psi4160toD0StarD0Star", m_ps5toD0StarD0Star=0.3036);
00216         declareProperty("Psi4160toDpStarDmStar", m_ps5toDpStarDmStar=0.2838);
00217         // interface to EvtGen
00218         declareProperty("ParticleDecayThroughEvtGen", m_evtGenDecay = true);
00219         declareProperty("RadiationCorrection", m_radiationCorrection = true);
00220         //interface set pythia pars
00221         m_pypars.clear();
00222         declareProperty("setPythiaPars", m_pypars);
00223 }
00224 
00225 StatusCode KKMC::initialize() {
00226 
00227         MsgStream log(msgSvc(), name());
00228 
00229         log << MSG::INFO << "KKMC in initialize()" << endreq;
00230 
00231         //set Bes unified random engine
00232         static const bool CREATEIFNOTTHERE(true);
00233         StatusCode RndmStatus = service("BesRndmGenSvc", p_BesRndmGenSvc, CREATEIFNOTTHERE);
00234         if (!RndmStatus.isSuccess() || 0 == p_BesRndmGenSvc)
00235         {
00236                 log << MSG::ERROR << " Could not initialize Random Number Service" << endreq;
00237                 return RndmStatus;
00238         }
00239         CLHEP::HepRandomEngine* engine  = p_BesRndmGenSvc->GetEngine("KKMC");
00240         KKMCRandom::setRandomEngine(engine);
00241         //--- 
00242         if(m_ich == -2 || m_ich>=50 ) {// ISR exclusive default set particle as Psi(4260)
00243                 m_generatePsi4260 = true;
00244                 m_generateJPsi = 0;
00245                 m_generatePsiPrime = 0;
00246                 m_generatePsi3770 = 0;
00247                 m_generatePsi4030 = 0;
00248                 m_generatePsi4160 = 0;
00249                 m_generatePsi4415 = 0;
00250         }
00251 
00252         WHYM_SETDEF(xwpar);
00253         xwpar[0] = m_cmsEnergy;        // c.m.s energy
00254         xwpar[1] = m_cmsEnergySpread;  // energy spread of c.m.s.
00255         xwpar[3] = 6.0;                // fortran output unit
00256 
00257         // by Ke LI (like@ihep.ac.cn) 2015-02-16
00258         xwpar[900]=m_ihvp; // (1,2,3)flag of hadronic vacuum polarization, 0: no vacuum polarization(leptonic and hadronic)
00259 
00260         if(m_generateResonance)   // flag indicate to generate Resonance data
00261                 xwpar[12] = 1.0;
00262         else
00263                 xwpar[12] = 0.0;
00264 
00265         if(m_generateContinuum )   // generate continuum
00266                 xwpar[3000] = 1.0;
00267         else
00268                 xwpar[3000] = 0.0;
00269 
00270         if(m_generateDownQuark)         // d quark production
00271                 xwpar[400] = 1.0;
00272         else
00273                 xwpar[400] = 0.0;
00274 
00275         if(m_generateUpQuark)         // u quark production
00276                 xwpar[401] = 1.0;
00277         else
00278                 xwpar[401] = 0.0;
00279 
00280         if(m_generateStrangeQuark)         // s quark production
00281                 xwpar[402] = 1.0;
00282         else
00283                 xwpar[402] = 0.0;
00284 
00285         if(m_generateCharmQuark)         // c quark production
00286                 xwpar[403] = 1.0;
00287         else
00288                 xwpar[403] = 0.0;
00289 
00290         if(m_generateBottomQuark)         // b quark production
00291                 xwpar[404] = 1.0;
00292         else
00293                 xwpar[404] = 0.0;
00294 
00295 
00296         if(m_generateMuonPair)     // e+ e- --> mu+ mu- 
00297                 xwpar[412] = 1.0;
00298         else
00299                 xwpar[412] = 0.0; 
00300 
00301         if(m_generateTauPair)      // e+ e- --> tau+ tau-
00302                 xwpar[414] = 1.0;
00303         else
00304                 xwpar[414] = 0.0;
00305         int keyuds = 0;
00306         if(m_generateRho)     keyuds |= 1;
00307         if(m_generateOmega)   keyuds |= 2;
00308         if(m_generatePhi)     keyuds |= 4;
00309 
00310         int keycharm = 0;
00311         if(m_generateJPsi)     keycharm |=  1;
00312         if(m_generatePsiPrime) keycharm |=  2;
00313         if(m_generatePsi3770)  keycharm |=  4;
00314         if(m_generatePsi4030)  keycharm |=  8;
00315         if(m_generatePsi4160)  keycharm |= 16;
00316         if(m_generatePsi4415)  keycharm |= 32;
00317         if(m_generatePsi4260)  keycharm |= 64;
00318 
00319         // resonant parameters 
00320         int offset = 3100;
00321         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramRho[i];
00322         offset = offset + 3;
00323         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramRh2[i];
00324         offset = offset + 3;
00325         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramRh3[i];
00326         offset = offset + 3;
00327         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramOme[i];
00328         offset = offset + 3;
00329         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramOm2[i];
00330         offset = offset + 3;
00331         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramOm3[i];
00332         offset = offset + 3;
00333         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramPhi[i];
00334         offset = offset + 3;
00335         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramPh2[i];
00336         offset = offset + 3;
00337         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramPsi[i];
00338         offset = offset + 3;
00339         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramPs2[i];
00340         offset = offset + 3;
00341         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramPs3[i];
00342         offset = offset + 3;
00343         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramPs4[i];
00344         offset = offset + 3;
00345         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramPs5[i];
00346         offset = offset + 3;
00347         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramPs6[i];
00348         offset = offset + 3;
00349         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramPs7[i];
00350         offset = offset + 3;
00351         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramPs8[i];
00352         offset = offset + 3;
00353         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramUps[i];
00354         offset = offset + 3;
00355         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramUp2[i];
00356         offset = offset + 3;
00357         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramUp3[i];
00358         offset = offset + 3;
00359         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramUp4[i];
00360         offset = offset + 3;
00361         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramUp5[i];
00362         offset = offset + 3;
00363         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramUp6[i];
00364         offset = offset + 3;
00365         for(int i = 0; i < 3; i++) xwpar[offset+i] = m_paramZeta[i];
00366         offset = offset + 3;
00367         for(int i = 0; i < 2; i++) xwpar[offset+i] = m_paramW[i];
00368         // offset = offset + 2;
00369 
00370         xwpar[3001] = keyuds + 0.0;
00371         xwpar[3002] = keycharm + 0.0;
00372 
00373         // psi(3770) decay
00374         offset = 3200;
00375         xwpar[offset + 0] = m_ps3toNonDDb;
00376         xwpar[offset + 1] = m_ps3D0toDp;
00377         DDBARMASS.ddbarmassCUT= m_DdbarCutPsi3770;
00378         MODEXS.ich = m_ich;
00379         //tag ISR or FSR photon
00380         if(m_isrtag){PHOTONTAG.isrtag=1;} else {PHOTONTAG.isrtag=0;}
00381         if(m_fsrtag){PHOTONTAG.fsrtag=1;} else {PHOTONTAG.fsrtag=0;}
00382 
00383         // psi(4030) decay
00384         offset = 3210;
00385         xwpar[offset + 0] = m_ps4toD0D0b;
00386         xwpar[offset + 1] = m_ps4toDpDm;
00387         xwpar[offset + 2] = m_ps4toDsDs;
00388         xwpar[offset + 3] = m_ps4toD0D0Star;
00389         xwpar[offset + 4] = m_ps4toDpDmStar;
00390         xwpar[offset + 5] = m_ps4toD0StarD0Star;
00391         xwpar[offset + 6] = m_ps4toDpStarDmStar;
00392         // psi(4160) decay
00393         offset = 3220;
00394         xwpar[offset + 0] = m_ps5toD0D0b;
00395         xwpar[offset + 1] = m_ps5toDpDm;
00396         xwpar[offset + 2] = m_ps5toDsDs;
00397         xwpar[offset + 3] = m_ps5toD0D0Star;
00398         xwpar[offset + 4] = m_ps5toDpDmStar;
00399         xwpar[offset + 5] = m_ps5toDsDsStar;
00400         xwpar[offset + 6] = m_ps5toD0StarD0Star;
00401         xwpar[offset + 7] = m_ps5toDpStarDmStar;
00402 
00403         if(!m_radiationCorrection) {
00404                 xwpar[19] = 0;
00405                 xwpar[20] = 0;
00406                 xwpar[26] = 0;
00407         }
00408 
00409 
00410         KK2F_INITIALIZE(xwpar);
00411         MY_PYUPD();
00412         PYUPDA(1, 22);
00413         //for pythia parameter tunning,pingrg-2013-6-9
00414         for(int i=0;i<m_pypars.size();i++){
00415                 pygive_(m_pypars[i].c_str(),strlen(m_pypars[i].c_str()));
00416         }
00417 
00418         if(m_evtGenDecay) {
00419                 KK2F_SETEVTGENINTERFACE(1);
00420                 TURNOFFTAUDECAY();
00421         } else {
00422                 KK2F_SETEVTGENINTERFACE(0);
00423                 PHOINI();
00424         }
00425 
00426         HepMC::HEPEVT_Wrapper::set_sizeof_real(8);
00427         HepMC::HEPEVT_Wrapper::set_sizeof_int(4);
00428         HepMC::HEPEVT_Wrapper::set_max_number_entries(4000);
00429         //  std::cout << "max entries = " << HepMC::HEPEVT_Wrapper::max_number_entries() <<std::endl;
00430         //  std::cout << "size of real = " << HepMC::HEPEVT_Wrapper::sizeof_real() <<std::endl;
00431 
00432         /*** Read Database --Wu Lianjin ***/
00433         if(m_RdMeasuredEcms){
00434                 StatusCode status=serviceLocator()->service("MeasuredEcmsSvc", ecmsSvc, true);
00435                 if(!status.isSuccess()){
00436                         std::cout<<"ERROR: Can not initial the IMeasuredEcmsSvc right"<<std::endl;
00437                         return status;
00438                 }
00439         }
00440         /*** ***/
00441 
00442         log <<MSG::INFO<< "Finish KKMC initialize()" <<endreq;
00443         return StatusCode::SUCCESS;
00444 }
00445 
00446 StatusCode KKMC::execute() {
00447         SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00448         int runNo=eventHeader->runNumber();
00449         int event=eventHeader->eventNumber();
00450         bool newRunFlag=0;
00451         if(runNo != 0 && runNo != m_runNo){m_runNo=runNo;newRunFlag = true;}else{newRunFlag=false;}
00452 
00453         //std::cout<<"runNo= "<<runNo<<" m_runNo "<<m_runNo<<" newRunFlag= "<<newRunFlag<<std::endl;
00454 
00455         /****** Lianjin Wu add ******/
00456         if(m_RdMeasuredEcms&& newRunFlag){// using cms energy of beam read from database
00457                 if(!ecmsSvc->isRunNoValid(runNo)){
00458                         std::cout<<"ERROR: Can not read the MeasuredEcms, try to turn off the ReadEcmsDB"<<std::endl;
00459                         return StatusCode::FAILURE;
00460                 }
00461                 double dbEcms=ecmsSvc->getEcms(runNo);
00462                 std::cout<<"INFO: Read the MeasuredEcms"<<std::endl;
00463                 m_cmsEnergy=dbEcms;
00464                 xwpar[0] = m_cmsEnergy;
00465                 KK2F_INITIALIZE(xwpar);
00466         }
00467         /****** ******/
00468         //  std::cout<<"The beam energy is "<<m_cmsEnergy<<", set for RunNo "<<runNo<<std::endl;
00469 
00470         MsgStream log(msgSvc(), name());
00471 
00472         log << MSG::INFO << "KKMC in execute()" << endreq;
00473 
00474 
00475         HepMC::IO_HEPEVT HepEvtIO;
00476 
00477 
00478         int KeySkip,iflag;
00479         do {
00480                 HEPEVT_CLEAN();
00481                 KK2F_MAKE();
00482                 KK2F_GETKEYSKIP(KeySkip);
00483                 PSIPP_DDBARCUT(iflag);
00484         } while (KeySkip != 0 || iflag ==0);
00485 
00486         int KeyInter;
00487         KK2F_GETEVTGENINTERFACE(KeyInter);
00488 
00489         //  PSIPP_DDBARCUT(iflag);
00490         //  if(iflag == 0)  {return StatusCode::SUCCESS;}
00491 
00492         if(KeyInter == 0) {  // make photos correction
00493                 int Pos1, Pos2, KFfin, Nhep;
00494                 HEPEVT_NUMHEP(Nhep);
00495                 HEPEVT_GETF(Pos1);
00496                 HEPEVT_GETFBAR(Pos2);
00497                 HEPEVT_GETKFFIN(KFfin);
00498                 int Posn = Pos1;
00499                 if(Pos2 > Posn) Posn = Pos2;
00500                 Posn = Posn + 1;
00501                 if(KFfin < 10) Posn = Posn + 1;
00502                 for(int ip = Posn; ip <= Nhep; ip++) HEPEVT_SETPHOTOSFLAGTRUE(ip);
00503                 for(int ip = Posn; ip <= Nhep; ip++) PHOTOS(ip);
00504                 PYHEPC(2);
00505         }
00506 
00507         //sleep(5);
00508 
00509         m_numberEvent += 1;
00510 
00511         if(m_numberEvent <= m_numberEventPrint) PYLIST(1);
00512         log << MSG::INFO <<"  " <<m_numberEvent<<"th event was generated !!" <<endreq;
00513 
00514         PYHEPC(1);
00515 
00516         HepMC::GenEvent* evt = HepEvtIO.read_next_event();
00517         evt->set_event_number(m_numberEvent);
00518         evt->set_signal_process_id(1);
00519         //  evt->print();
00520 
00521         // Check if the McCollection already exists
00522         SmartDataPtr<McGenEventCol> anMcCol(eventSvc(), "/Event/Gen");
00523         if (anMcCol!=0) {
00524                 // Add event to existing collection
00525                 MsgStream log(messageService(), name());
00526                 log << MSG::INFO << "Add McGenEvent to existing collection" << endreq;
00527                 McGenEvent* mcEvent = new McGenEvent(evt);
00528                 anMcCol->push_back(mcEvent);
00529         }  else {
00530                 // Create Collection and add  to the transient store
00531                 McGenEventCol *mcColl = new McGenEventCol;
00532                 McGenEvent* mcEvent = new McGenEvent(evt);
00533                 mcColl->push_back(mcEvent);
00534                 StatusCode sc = eventSvc()->registerObject("/Event/Gen",mcColl);
00535                 if (sc != StatusCode::SUCCESS) {
00536                         log << MSG::ERROR << "Could not register McGenEvent" << endreq;
00537                         delete mcColl;
00538                         delete evt;
00539                         delete mcEvent;
00540                         return StatusCode::FAILURE;
00541                 }  else {
00542                         //      log << MSG::INFO << "McGenEventCol created and " << npart <<" particles stored in McGenEvent" << endreq;
00543                 }
00544         }
00545 
00546 
00547 
00548 
00549         return StatusCode::SUCCESS;
00550 
00551 }
00552 
00553 StatusCode KKMC::finalize() {
00554 
00555         MsgStream log(msgSvc(), name());
00556 
00557         log << MSG::INFO << "KKMC in finalize()" << endreq;
00558 
00559         KK2F_FINALIZE();
00560         double xSecPb, xErrPb;
00561         KK2F_GETXSECMC(xSecPb, xErrPb);
00562 
00563         log << MSG::INFO << "Total MC Xsec = " << xSecPb << " +/- " << xErrPb << endreq;
00564         return StatusCode::SUCCESS;
00565 }
00566 
00567 

Generated on Tue Nov 29 23:12:40 2016 for BOSS_7.0.2 by  doxygen 1.4.7