00001
00002 #include "HepMC/IO_HEPEVT.h"
00003
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);
00118 declareProperty("BeamEnergySpread", m_cmsEnergySpread = 0.0013);
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);
00139 declareProperty("TagISR", m_isrtag = false);
00140 declareProperty("TagFSR", m_fsrtag = false);
00141 declareProperty("ModeIndexExpXS", m_ich = -10);
00142
00143 declareProperty("IHVP", m_ihvp= 1);
00144
00145
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
00198 declareProperty("Psi3770toNonDDb", m_ps3toNonDDb = 0.0);
00199 declareProperty("Psi3770RatioOfD0toDp", m_ps3D0toDp = 0.563);
00200
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
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
00218 declareProperty("ParticleDecayThroughEvtGen", m_evtGenDecay = true);
00219 declareProperty("RadiationCorrection", m_radiationCorrection = true);
00220
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
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 ) {
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;
00254 xwpar[1] = m_cmsEnergySpread;
00255 xwpar[3] = 6.0;
00256
00257
00258 xwpar[900]=m_ihvp;
00259
00260 if(m_generateResonance)
00261 xwpar[12] = 1.0;
00262 else
00263 xwpar[12] = 0.0;
00264
00265 if(m_generateContinuum )
00266 xwpar[3000] = 1.0;
00267 else
00268 xwpar[3000] = 0.0;
00269
00270 if(m_generateDownQuark)
00271 xwpar[400] = 1.0;
00272 else
00273 xwpar[400] = 0.0;
00274
00275 if(m_generateUpQuark)
00276 xwpar[401] = 1.0;
00277 else
00278 xwpar[401] = 0.0;
00279
00280 if(m_generateStrangeQuark)
00281 xwpar[402] = 1.0;
00282 else
00283 xwpar[402] = 0.0;
00284
00285 if(m_generateCharmQuark)
00286 xwpar[403] = 1.0;
00287 else
00288 xwpar[403] = 0.0;
00289
00290 if(m_generateBottomQuark)
00291 xwpar[404] = 1.0;
00292 else
00293 xwpar[404] = 0.0;
00294
00295
00296 if(m_generateMuonPair)
00297 xwpar[412] = 1.0;
00298 else
00299 xwpar[412] = 0.0;
00300
00301 if(m_generateTauPair)
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
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
00369
00370 xwpar[3001] = keyuds + 0.0;
00371 xwpar[3002] = keycharm + 0.0;
00372
00373
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
00380 if(m_isrtag){PHOTONTAG.isrtag=1;} else {PHOTONTAG.isrtag=0;}
00381 if(m_fsrtag){PHOTONTAG.fsrtag=1;} else {PHOTONTAG.fsrtag=0;}
00382
00383
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
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
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
00430
00431
00432
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
00454
00455
00456 if(m_RdMeasuredEcms&& newRunFlag){
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
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
00490
00491
00492 if(KeyInter == 0) {
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
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
00520
00521
00522 SmartDataPtr<McGenEventCol> anMcCol(eventSvc(), "/Event/Gen");
00523 if (anMcCol!=0) {
00524
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
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
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