CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
CMSEmStandardPhysicsLPM Class Reference

#include <CMSEmStandardPhysicsLPM.h>

Inheritance diagram for CMSEmStandardPhysicsLPM:

Public Member Functions

 CMSEmStandardPhysicsLPM (G4int ver)
 
virtual void ConstructParticle ()
 
virtual void ConstructProcess ()
 
virtual ~CMSEmStandardPhysicsLPM ()
 

Private Attributes

G4int verbose
 

Detailed Description

Definition at line 8 of file CMSEmStandardPhysicsLPM.h.

Constructor & Destructor Documentation

CMSEmStandardPhysicsLPM::CMSEmStandardPhysicsLPM ( G4int  ver)

Definition at line 76 of file CMSEmStandardPhysicsLPM.cc.

76  :
77  G4VPhysicsConstructor("CMSEmStandard_emm"), verbose(ver) {
78  G4EmParameters* param = G4EmParameters::Instance();
79  param->SetDefaults();
80  param->SetVerbose(verbose);
81  param->SetApplyCuts(true);
82  param->SetMscRangeFactor(0.2);
83  param->SetMscStepLimitType(fMinimal);
84  SetPhysicsType(bElectromagnetic);
85 }
CMSEmStandardPhysicsLPM::~CMSEmStandardPhysicsLPM ( )
virtual

Definition at line 87 of file CMSEmStandardPhysicsLPM.cc.

87 {}

Member Function Documentation

void CMSEmStandardPhysicsLPM::ConstructParticle ( )
virtual

Definition at line 89 of file CMSEmStandardPhysicsLPM.cc.

References configurableAnalysis::Electron, and Gamma.

89  {
90  // gamma
92 
93  // leptons
95  G4Positron::Positron();
96  G4MuonPlus::MuonPlus();
97  G4MuonMinus::MuonMinus();
98  G4TauMinus::TauMinusDefinition();
99  G4TauPlus::TauPlusDefinition();
100 
101  // mesons
102  G4PionPlus::PionPlusDefinition();
103  G4PionMinus::PionMinusDefinition();
104  G4KaonPlus::KaonPlusDefinition();
105  G4KaonMinus::KaonMinusDefinition();
106  G4DMesonMinus::DMesonMinusDefinition();
107  G4DMesonPlus::DMesonPlusDefinition();
108  G4BMesonMinus::BMesonMinusDefinition();
109  G4BMesonPlus::BMesonPlusDefinition();
110 
111  // barions
112  G4Proton::Proton();
113  G4AntiProton::AntiProton();
114  G4SigmaMinus::SigmaMinusDefinition();
115  G4AntiSigmaMinus::AntiSigmaMinusDefinition();
116  G4SigmaPlus::SigmaPlusDefinition();
117  G4AntiSigmaPlus::AntiSigmaPlusDefinition();
118  G4XiMinus::XiMinusDefinition();
119  G4AntiXiMinus::AntiXiMinusDefinition();
120  G4OmegaMinus::OmegaMinusDefinition();
121  G4AntiOmegaMinus::AntiOmegaMinusDefinition();
122  G4LambdacPlus::LambdacPlusDefinition();
123  G4AntiLambdacPlus::AntiLambdacPlusDefinition();
124  G4XicPlus::XicPlusDefinition();
125  G4AntiXicPlus::AntiXicPlusDefinition();
126 
127  // ions
128  G4Deuteron::Deuteron();
129  G4Triton::Triton();
130  G4He3::He3();
131  G4Alpha::Alpha();
132  G4GenericIon::GenericIonDefinition();
133 }
dbl * Gamma
Definition: mlp_gen.cc:38
void CMSEmStandardPhysicsLPM::ConstructProcess ( )
virtual

Definition at line 135 of file CMSEmStandardPhysicsLPM.cc.

References kp, MeV, AnalysisDataFormats_SUSYBSMObjects::msc, createTree::pp, and contentValuesCheck::ss.

135  {
136 
137  if(verbose > 0) {
138  G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
139  }
140 
141  // This EM builder takes default models of Geant4 10 EMV.
142  // Multiple scattering by Urban for all particles
143  // except e+e- below 100 MeV for which the Urban93 model is used
144 
145  G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
146 
147  // muon & hadron bremsstrahlung and pair production
148  G4MuBremsstrahlung* mub = nullptr;
149  G4MuPairProduction* mup = nullptr;
150  G4hBremsstrahlung* pib = nullptr;
151  G4hPairProduction* pip = nullptr;
152  G4hBremsstrahlung* kb = nullptr;
153  G4hPairProduction* kp = nullptr;
154  G4hBremsstrahlung* pb = nullptr;
155  G4hPairProduction* pp = nullptr;
156 
157  // muon & hadron multiple scattering
158  G4MuMultipleScattering* mumsc = nullptr;
159  G4MuMultipleScattering* pimsc = nullptr;
160  G4MuMultipleScattering* kmsc = nullptr;
161  G4MuMultipleScattering* pmsc = nullptr;
162  G4hMultipleScattering* hmsc = nullptr;
163 
164  // high energy limit for e+- scattering models and bremsstrahlung
165  G4double highEnergyLimit = 100*MeV;
166 
167  G4Region* aRegion =
168  G4RegionStore::GetInstance()->GetRegion("HcalRegion",false);
169  G4Region* bRegion =
170  G4RegionStore::GetInstance()->GetRegion("HGCalRegion",false);
171 
172  aParticleIterator->reset();
173  while( (*aParticleIterator)() ){
174  G4ParticleDefinition* particle = aParticleIterator->value();
175  G4String particleName = particle->GetParticleName();
176 
177  if (particleName == "gamma") {
178 
179  ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
180  ph->RegisterProcess(new G4ComptonScattering(), particle);
181  ph->RegisterProcess(new G4GammaConversion(), particle);
182 
183  } else if (particleName == "e-") {
184 
185  G4eIonisation* eioni = new G4eIonisation();
186  eioni->SetStepFunction(0.8, 1.0*mm);
187 
188  G4eMultipleScattering* msc = new G4eMultipleScattering;
189  msc->SetStepLimitType(fMinimal);
190  G4UrbanMscModel* msc1 = new G4UrbanMscModel();
191  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
192  G4UrbanMscModel* msc3 = new G4UrbanMscModel();
193  msc3->SetLocked(true);
194  msc1->SetHighEnergyLimit(highEnergyLimit);
195  msc2->SetLowEnergyLimit(highEnergyLimit);
196  msc3->SetHighEnergyLimit(highEnergyLimit);
197  msc->AddEmModel(0, msc1);
198  msc->AddEmModel(0, msc2);
199  msc->AddEmModel(-1, msc3, aRegion);
200  if (bRegion) msc->AddEmModel(-1, msc3, bRegion);
201 
202  G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel();
203  G4CoulombScattering* ss = new G4CoulombScattering();
204  ss->SetEmModel(ssm, 1);
205  ss->SetMinKinEnergy(highEnergyLimit);
206  ssm->SetLowEnergyLimit(highEnergyLimit);
207  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
208 
209  ph->RegisterProcess(msc, particle);
210  ph->RegisterProcess(eioni, particle);
211  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
212  ph->RegisterProcess(ss, particle);
213 
214  } else if (particleName == "e+") {
215 
216  G4eIonisation* eioni = new G4eIonisation();
217  eioni->SetStepFunction(0.8, 1.0*mm);
218 
219  G4eMultipleScattering* msc = new G4eMultipleScattering;
220  msc->SetStepLimitType(fMinimal);
221  G4UrbanMscModel* msc1 = new G4UrbanMscModel();
222  G4WentzelVIModel* msc2 = new G4WentzelVIModel();
223  G4UrbanMscModel* msc3 = new G4UrbanMscModel();
224  msc1->SetHighEnergyLimit(highEnergyLimit);
225  msc2->SetLowEnergyLimit(highEnergyLimit);
226  msc3->SetHighEnergyLimit(highEnergyLimit);
227  msc3->SetLocked(true);
228  msc->AddEmModel(0, msc1);
229  msc->AddEmModel(0, msc2);
230  msc->AddEmModel(-1, msc3, aRegion);
231  if (bRegion) msc->AddEmModel(-1, msc3, bRegion);
232 
233  G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel();
234  G4CoulombScattering* ss = new G4CoulombScattering();
235  ss->SetEmModel(ssm, 1);
236  ss->SetMinKinEnergy(highEnergyLimit);
237  ssm->SetLowEnergyLimit(highEnergyLimit);
238  ssm->SetActivationLowEnergyLimit(highEnergyLimit);
239 
240  ph->RegisterProcess(msc, particle);
241  ph->RegisterProcess(eioni, particle);
242  ph->RegisterProcess(new G4eBremsstrahlung(), particle);
243  ph->RegisterProcess(new G4eplusAnnihilation(), particle);
244  ph->RegisterProcess(ss, particle);
245 
246  } else if (particleName == "mu+" ||
247  particleName == "mu-" ) {
248 
249  if(nullptr == mub) {
250  mub = new G4MuBremsstrahlung();
251  mup = new G4MuPairProduction();
252  mumsc = new G4MuMultipleScattering();
253  mumsc->AddEmModel(0, new G4WentzelVIModel());
254  }
255  ph->RegisterProcess(mumsc, particle);
256  ph->RegisterProcess(new G4MuIonisation(), particle);
257  ph->RegisterProcess(mub, particle);
258  ph->RegisterProcess(mup, particle);
259  ph->RegisterProcess(new G4CoulombScattering(), particle);
260 
261  } else if (particleName == "alpha" ||
262  particleName == "He3" ) {
263 
264  ph->RegisterProcess(new G4hMultipleScattering(), particle);
265  ph->RegisterProcess(new G4ionIonisation(), particle);
266 
267  } else if (particleName == "GenericIon") {
268 
269  if(nullptr == hmsc) {
270  hmsc = new G4hMultipleScattering("ionmsc");
271  }
272  ph->RegisterProcess(hmsc, particle);
273  ph->RegisterProcess(new G4ionIonisation(), particle);
274 
275  } else if (particleName == "pi+" ||
276  particleName == "pi-" ) {
277 
278  if(nullptr == pib) {
279  pib = new G4hBremsstrahlung();
280  pip = new G4hPairProduction();
281  pimsc = new G4MuMultipleScattering();
282  pimsc->AddEmModel(0, new G4WentzelVIModel());
283  }
284  ph->RegisterProcess(pimsc, particle);
285  ph->RegisterProcess(new G4hIonisation(), particle);
286  ph->RegisterProcess(pib, particle);
287  ph->RegisterProcess(pip, particle);
288  ph->RegisterProcess(new G4CoulombScattering(), particle);
289 
290  } else if (particleName == "kaon+" ||
291  particleName == "kaon-" ) {
292 
293  if(nullptr == kb) {
294  kb = new G4hBremsstrahlung();
295  kp = new G4hPairProduction();
296  kmsc = new G4MuMultipleScattering();
297  kmsc->AddEmModel(0, new G4WentzelVIModel());
298  }
299  ph->RegisterProcess(kmsc, particle);
300  ph->RegisterProcess(new G4hIonisation(), particle);
301  ph->RegisterProcess(kb, particle);
302  ph->RegisterProcess(kp, particle);
303  ph->RegisterProcess(new G4CoulombScattering(), particle);
304 
305  } else if (particleName == "proton" ||
306  particleName == "anti_proton") {
307 
308  if(nullptr == pb) {
309  pb = new G4hBremsstrahlung();
310  pp = new G4hPairProduction();
311  pmsc = new G4MuMultipleScattering();
312  pmsc->AddEmModel(0, new G4WentzelVIModel());
313  }
314  ph->RegisterProcess(pmsc, particle);
315  ph->RegisterProcess(new G4hIonisation(), particle);
316  ph->RegisterProcess(pb, particle);
317  ph->RegisterProcess(pp, particle);
318  ph->RegisterProcess(new G4CoulombScattering(), particle);
319 
320  } else if (particleName == "B+" ||
321  particleName == "B-" ||
322  particleName == "D+" ||
323  particleName == "D-" ||
324  particleName == "Ds+" ||
325  particleName == "Ds-" ||
326  particleName == "anti_He3" ||
327  particleName == "anti_alpha" ||
328  particleName == "anti_deuteron" ||
329  particleName == "anti_lambda_c+" ||
330  particleName == "anti_omega-" ||
331  particleName == "anti_sigma_c+" ||
332  particleName == "anti_sigma_c++" ||
333  particleName == "anti_sigma+" ||
334  particleName == "anti_sigma-" ||
335  particleName == "anti_triton" ||
336  particleName == "anti_xi_c+" ||
337  particleName == "anti_xi-" ||
338  particleName == "deuteron" ||
339  particleName == "lambda_c+" ||
340  particleName == "omega-" ||
341  particleName == "sigma_c+" ||
342  particleName == "sigma_c++" ||
343  particleName == "sigma+" ||
344  particleName == "sigma-" ||
345  particleName == "tau+" ||
346  particleName == "tau-" ||
347  particleName == "triton" ||
348  particleName == "xi_c+" ||
349  particleName == "xi-" ) {
350 
351  if(nullptr == hmsc) {
352  hmsc = new G4hMultipleScattering("ionmsc");
353  }
354  ph->RegisterProcess(hmsc, particle);
355  ph->RegisterProcess(new G4hIonisation(), particle);
356  }
357  }
358  G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
359  G4LossTableManager::Instance()->SetAtomDeexcitation(de);
360 }
tuple pp
Definition: createTree.py:15
int kp
susybsm::MuonSegmentCollection msc
Definition: classes.h:32
const double MeV

Member Data Documentation

G4int CMSEmStandardPhysicsLPM::verbose
private

Definition at line 18 of file CMSEmStandardPhysicsLPM.h.