00001 #include "SimG4Core/GFlash/interface/GFlash.h"
00002 #include "SimG4Core/GFlash/interface/ParametrisedPhysics.h"
00003 #include "SimG4Core/GFlash/interface/HadronPhysicsQGSP_WP.h"
00004 #include "SimG4Core/GFlash/interface/HadronPhysicsQGSP_BERT_WP.h"
00005 #include "SimG4Core/PhysicsLists/interface/CMSEmStandardPhysics.h"
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007
00008 #include "G4DecayPhysics.hh"
00009 #include "G4EmExtraPhysics.hh"
00010 #include "G4IonPhysics.hh"
00011 #include "G4QStoppingPhysics.hh"
00012 #include "G4HadronElasticPhysics.hh"
00013 #include "G4NeutronTrackingCut.hh"
00014
00015 #include "G4DataQuestionaire.hh"
00016 #include "SimG4Core/GFlash/interface/GflashHistogram.h"
00017
00018 GFlash::GFlash(G4LogicalVolumeToDDLogicalPartMap& map, const edm::ParameterSet & p) :
00019 PhysicsList(map, p), thePar(p.getParameter<edm::ParameterSet>("GFlash")) {
00020
00021 G4DataQuestionaire it(photon);
00022
00023 int ver = p.getUntrackedParameter<int>("Verbosity",0);
00024 edm::LogInfo("PhysicsList") << "You are using the simulation engine: "
00025 << "QGSP_BERT + CMS GFLASH\n";
00026
00027 RegisterPhysics(new ParametrisedPhysics("parametrised",thePar));
00028
00029
00030 RegisterPhysics( new CMSEmStandardPhysics("standard EM",ver));
00031
00032
00033 RegisterPhysics(new G4EmExtraPhysics("extra EM"));
00034
00035
00036 RegisterPhysics(new G4DecayPhysics("decay",ver));
00037
00038
00039 RegisterPhysics(new G4HadronElasticPhysics("elastic",ver,false));
00040
00041
00042 G4bool quasiElastic=true;
00043 std::string hadronPhysics = thePar.getParameter<std::string>("GflashHadronPhysics");
00044 if(hadronPhysics=="QGSP_BERT") {
00045 RegisterPhysics(new HadronPhysicsQGSP_BERT_WP("hadron",quasiElastic));
00046 }
00047 else if (hadronPhysics=="QGSP") {
00048 RegisterPhysics(new HadronPhysicsQGSP_WP("hadron",quasiElastic));
00049 }
00050 else {
00051 edm::LogInfo("PhysicsList") << hadronPhysics << " is not available for GflashHadronPhysics!"
00052 << "... Using QGSP_BERT\n";
00053 RegisterPhysics(new HadronPhysicsQGSP_BERT_WP("hadron",quasiElastic));
00054 }
00055
00056
00057 RegisterPhysics(new G4QStoppingPhysics("stopping"));
00058
00059
00060 RegisterPhysics(new G4IonPhysics("ion"));
00061
00062
00063 RegisterPhysics( new G4NeutronTrackingCut("Neutron tracking cut", ver));
00064
00065
00066
00067 theHisto = GflashHistogram::instance();
00068 if(thePar.getParameter<bool>("GflashHistogram")) {
00069 theHisto->setStoreFlag(true);
00070 theHisto->bookHistogram();
00071 }
00072
00073 }
00074
00075 GFlash::~GFlash() {
00076 if(theHisto) delete theHisto;
00077 }
00078
00079
00080 #include "FWCore/Framework/interface/MakerMacros.h"
00081 #include "SimG4Core/Physics/interface/PhysicsListFactory.h"
00082
00083 DEFINE_SEAL_MODULE();
00084 DEFINE_PHYSICSLIST(GFlash);
00085