CMS 3D CMS Logo

CustomParticleFactory.cc
Go to the documentation of this file.
4 
7 
8 #include "G4ParticleTable.hh"
9 #include "G4DecayTable.hh"
10 #include "G4PhaseSpaceDecayChannel.hh"
11 #include "G4ProcessManager.hh"
12 #include "G4ParticleDefinition.hh"
13 #include "G4SystemOfUnits.hh"
14 
17 
18 #include <iomanip>
19 #include <iostream>
20 #include <sstream>
21 
23 std::vector<G4ParticleDefinition *> CustomParticleFactory::m_particles;
24 
25 #ifdef G4MULTITHREADED
26 G4Mutex CustomParticleFactory::customParticleFactoryMutex = G4MUTEX_INITIALIZER;
27 #endif
28 
30 
32 
34  if (loaded) {
35  return;
36  }
37 #ifdef G4MULTITHREADED
38  G4MUTEXLOCK(&customParticleFactoryMutex);
39  if (loaded) {
40  return;
41  }
42 #endif
43 
44  // loading once
45  loaded = true;
46  std::ifstream configFile(filePath.c_str());
47 
49  edm::LogInfo("SimG4CoreCustomPhysics") << "CustomParticleFactory: Reading Custom Particle and G4DecayTable from \n"
50  << filePath;
51  // This should be compatible IMO to SLHA
52  G4ParticleTable *theParticleTable = G4ParticleTable::GetParticleTable();
53  while (getline(configFile, line)) {
54  line.erase(0, line.find_first_not_of(" \t")); // Remove leading whitespace.
55  if (line.length() == 0 || line.at(0) == '#') {
56  continue;
57  } // Skip blank lines and comments.
58  // The mass table begins with a line containing "BLOCK MASS"
59  if (ToLower(line).find("block") < line.npos && ToLower(line).find("mass") < line.npos) {
60  edm::LogInfo("SimG4CoreCustomPhysics") << "CustomParticleFactory: Retrieving mass table.";
61  getMassTable(&configFile);
62  }
63  if (line.find("DECAY") < line.npos) {
64  int pdgId;
65  double width;
66  std::string tmpString;
67  std::stringstream lineStream(line);
68  lineStream >> tmpString >> pdgId >> width;
69  // assume SLHA format, e.g.: DECAY 1000021 5.50675438E+00 # gluino decays
70  edm::LogInfo("SimG4CoreCustomPhysics")
71  << "CustomParticleFactory: entry to G4DecayTable: pdgID, width " << pdgId << ", " << width;
72  G4ParticleDefinition *aParticle = theParticleTable->FindParticle(pdgId);
73  if (!aParticle || width == 0.0) {
74  continue;
75  }
76  G4DecayTable *aDecayTable = getDecayTable(&configFile, pdgId);
77  aParticle->SetDecayTable(aDecayTable);
78  aParticle->SetPDGStable(false);
79  aParticle->SetPDGLifeTime(1.0 / (width * CLHEP::GeV) * 6.582122e-22 * CLHEP::MeV * CLHEP::s);
80  G4ParticleDefinition *aAntiParticle = theParticleTable->FindAntiParticle(pdgId);
81  if (aAntiParticle && aAntiParticle->GetPDGEncoding() != pdgId) {
82  aAntiParticle->SetDecayTable(getAntiDecayTable(pdgId, aDecayTable));
83  aAntiParticle->SetPDGStable(false);
84  aAntiParticle->SetPDGLifeTime(1.0 / (width * CLHEP::GeV) * 6.582122e-22 * CLHEP::MeV * CLHEP::s);
85  }
86  }
87  }
88 #ifdef G4MULTITHREADED
89  G4MUTEXUNLOCK(&customParticleFactoryMutex);
90 #endif
91 }
92 
94  if (std::abs(pdgCode) % 100 < 14 && std::abs(pdgCode) / 1000000 == 0) {
95  edm::LogError("CustomParticleFactory::addCustomParticle")
96  << "Pdg code too low " << pdgCode << " " << std::abs(pdgCode) / 1000000;
97  return;
98  }
99 
100  if (CustomPDGParser::s_isSIMP(pdgCode)) {
101  CMSSIMP *simp = CMSSIMP::Definition(mass * GeV);
103  m_particles.push_back(simp);
104  m_particles.push_back(antisimp);
105  return;
106  }
107 
109  G4String pType = "custom";
110  G4String pSubType = "";
111  G4double spectatormass = 0.0;
112  G4ParticleDefinition *spectator = nullptr;
114  if (CustomPDGParser::s_isRHadron(pdgCode)) {
115  pType = "rhadron";
116  }
117  if (CustomPDGParser::s_isSLepton(pdgCode)) {
118  pType = "sLepton";
119  }
120  if (CustomPDGParser::s_isMesonino(pdgCode)) {
121  pType = "mesonino";
122  }
123  if (CustomPDGParser::s_isSbaryon(pdgCode)) {
124  pType = "sbaryon";
125  }
126 
127  double massGeV = mass * CLHEP::GeV;
128  double width = 0.0;
129  double charge = CLHEP::eplus * CustomPDGParser::s_charge(pdgCode);
130  if (name.compare(0, 4, "~HIP") == 0) {
131  if ((name.compare(0, 7, "~HIPbar") == 0)) {
132  std::string str = name.substr(7);
133  charge = CLHEP::eplus * atoi(str.c_str()) / 3.;
134  } else {
135  std::string str = name.substr(4);
136  charge = -CLHEP::eplus * atoi(str.c_str()) / 3.;
137  }
138  }
139  if (name.compare(0, 9, "anti_~HIP") == 0) {
140  if ((name.compare(0, 12, "anti_~HIPbar") == 0)) {
141  std::string str = name.substr(12);
142  charge = -CLHEP::eplus * atoi(str.c_str()) / 3.;
143  } else {
144  std::string str = name.substr(9);
145  charge = CLHEP::eplus * atoi(str.c_str()) / 3.;
146  }
147  }
148  int spin = (int)CustomPDGParser::s_spin(pdgCode) - 1;
149  int parity = +1;
150  int conjugation = 0;
151  int isospin = 0;
152  int isospinZ = 0;
153  int gParity = 0;
154  int lepton = 0; //FIXME:
155  int baryon = 1; //FIXME:
156  bool stable = true;
157  double lifetime = -1;
158 
159  if (CustomPDGParser::s_isDphoton(pdgCode)) {
160  pType = "darkpho";
161  spin = 2;
162  parity = -1;
163  conjugation = -1;
164  isospin = 0;
165  isospinZ = 0;
166  gParity = 0;
167  lepton = 0;
168  baryon = 0;
169  stable = true;
170  lifetime = -1;
171  }
172 
173  G4DecayTable *decaytable = nullptr;
174  G4ParticleTable *theParticleTable = G4ParticleTable::GetParticleTable();
175 
176  CustomParticle *particle = new CustomParticle(name,
177  massGeV,
178  width,
179  charge,
180  spin,
181  parity,
182  conjugation,
183  isospin,
184  isospinZ,
185  gParity,
186  pType,
187  lepton,
188  baryon,
189  pdgCode,
190  stable,
191  lifetime,
192  decaytable);
193 
194  if (pType == "rhadron" && name != "~g") {
195  G4String cloudname = name + "cloud";
196  G4String cloudtype = pType + "cloud";
197  spectator = theParticleTable->FindParticle(1000021);
198  spectatormass = spectator->GetPDGMass();
199  G4double cloudmass = massGeV - spectatormass;
200  CustomParticle *tmpParticle =
201  new CustomParticle(cloudname, cloudmass, 0.0, 0, 0, +1, 0, 0, 0, 0, cloudtype, 0, +1, 0, true, -1.0, nullptr);
202  particle->SetCloud(tmpParticle);
203  particle->SetSpectator(spectator);
204 
205  edm::LogInfo("SimG4CoreCustomPhysics")
206  << "CustomParticleFactory: " << name << " being assigned spectator" << spectator->GetParticleName()
207  << " and cloud " << cloudname << "\n"
208  << " Masses: " << mass << " Gev, " << spectatormass / CLHEP::GeV << " GeV and "
209  << cloudmass / CLHEP::GeV << " GeV.";
210  } else if (pType == "mesonino" || pType == "sbaryon") {
211  int sign = 1;
212  if (pdgCode < 0)
213  sign = -1;
214 
215  G4String cloudname = name + "cloud";
216  G4String cloudtype = pType + "cloud";
217  if (CustomPDGParser::s_isstopHadron(pdgCode)) {
218  spectator = theParticleTable->FindParticle(1000006 * sign);
219  } else {
220  if (CustomPDGParser::s_issbottomHadron(pdgCode)) {
221  spectator = theParticleTable->FindParticle(1000005 * sign);
222  } else {
223  spectator = nullptr;
224  edm::LogError("SimG4CoreCustomPhysics") << "CustomParticleFactory: Cannot find spectator parton";
225  }
226  }
227  if (spectator) {
228  spectatormass = spectator->GetPDGMass();
229  }
230  G4double cloudmass = massGeV - spectatormass;
231  CustomParticle *tmpParticle =
232  new CustomParticle(cloudname, cloudmass, 0.0, 0, 0, +1, 0, 0, 0, 0, cloudtype, 0, +1, 0, true, -1.0, nullptr);
233  particle->SetCloud(tmpParticle);
234  particle->SetSpectator(spectator);
235 
236  if (spectator)
237  edm::LogVerbatim("SimG4CoreCustomPhysics")
238  << "CustomParticleFactory: " << name << " being assigned spectator" << spectator->GetParticleName()
239  << " and cloud " << cloudname << "\n"
240  << " Masses: " << mass << " Gev, " << spectatormass / CLHEP::GeV << " GeV and "
241  << cloudmass / CLHEP::GeV << " GeV.";
242  } else {
243  particle->SetCloud(nullptr);
244  particle->SetSpectator(nullptr);
245  }
246  m_particles.push_back(particle);
247 }
248 
249 void CustomParticleFactory::getMassTable(std::ifstream *configFile) {
250  int pdgId;
251  double mass;
254  G4ParticleTable *theParticleTable = G4ParticleTable::GetParticleTable();
255 
256  // This should be compatible IMO to SLHA
257  while (getline(*configFile, line)) {
258  line.erase(0, line.find_first_not_of(" \t")); // remove leading whitespace
259  if (line.length() == 0 || line.at(0) == '#')
260  continue; // skip blank lines and comments
261  if (ToLower(line).find("block") < line.npos) {
262  edm::LogInfo("SimG4CoreCustomPhysics") << "CustomParticleFactory: Finished the Mass Table ";
263  break;
264  }
265  std::stringstream sstr(line);
266  sstr >> pdgId >> mass >> tmp >> name; // Assume SLHA format, e.g.: 1000001 5.68441109E+02 # ~d_L
267 
268  mass = std::max(mass, 0.0);
269  if (theParticleTable->FindParticle(pdgId)) {
270  continue;
271  }
272 
273  edm::LogInfo("SimG4CoreCustomPhysics")
274  << "CustomParticleFactory: Calling addCustomParticle for pdgId: " << pdgId << ", mass " << mass << " GeV "
275  << name << ", isRHadron: " << CustomPDGParser::s_isRHadron(pdgId)
276  << ", isstopHadron: " << CustomPDGParser::s_isstopHadron(pdgId)
277  << ", isSIMP: " << CustomPDGParser::s_isSIMP(pdgId);
279 
281  int pdgIdPartner = pdgId % 100;
282  G4ParticleDefinition *aParticle = theParticleTable->FindParticle(pdgIdPartner);
283  //Add antiparticles for SUSY particles only, not for rHadrons.
284  if (aParticle) {
285  edm::LogInfo("SimG4CoreCustomPhysics")
286  << "CustomParticleFactory: Found partner particle for "
287  << " pdgId= " << pdgId << ", pdgIdPartner= " << pdgIdPartner << " " << aParticle->GetParticleName();
288  }
289 
291  !CustomPDGParser::s_isSIMP(pdgId) && pdgId != 1000006 && pdgId != -1000006 && pdgId != 25 && pdgId != 35 &&
292  pdgId != 36 && pdgId != 37) {
293  int sign = aParticle->GetAntiPDGEncoding() / pdgIdPartner;
294  edm::LogInfo("SimG4CoreCustomPhysics")
295  << "CustomParticleFactory: For " << aParticle->GetParticleName() << " pdg= " << pdgIdPartner
296  << ", GetAntiPDGEncoding() " << aParticle->GetAntiPDGEncoding() << " sign= " << sign;
297 
298  if (std::abs(sign) != 1) {
299  edm::LogInfo("SimG4CoreCustomPhysics") << "CustomParticleFactory: sign= " << sign
300  << " a: " << aParticle->GetAntiPDGEncoding() << " b: " << pdgIdPartner;
301  aParticle->DumpTable();
302  }
303  if (sign == -1 && pdgId != 25 && pdgId != 35 && pdgId != 36 && pdgId != 37 && pdgId != 1000039) {
304  tmp = "anti_" + name;
305  if (!theParticleTable->FindParticle(-pdgId)) {
306  edm::LogInfo("SimG4CoreCustomPhysics")
307  << "CustomParticleFactory: Calling addCustomParticle for antiparticle with pdgId: " << -pdgId << ", mass "
308  << mass << " GeV, name " << tmp;
310  theParticleTable->FindParticle(pdgId)->SetAntiPDGEncoding(-pdgId);
311  }
312  } else
313  theParticleTable->FindParticle(pdgId)->SetAntiPDGEncoding(pdgId);
314  }
315 
316  if (pdgId == 1000039)
317  theParticleTable->FindParticle(pdgId)->SetAntiPDGEncoding(pdgId); // gravitino
318  if (pdgId == 1000024 || pdgId == 1000037 || pdgId == 37) {
319  tmp = "anti_" + name;
320  if (!theParticleTable->FindParticle(-pdgId)) {
321  edm::LogInfo("SimG4CoreCustomPhysics")
322  << "CustomParticleFactory: Calling addCustomParticle for antiparticle (2) with pdgId: " << -pdgId
323  << ", mass " << mass << " GeV, name " << tmp;
325  theParticleTable->FindParticle(pdgId)->SetAntiPDGEncoding(-pdgId);
326  }
327  }
328  if (pdgId == 9000006) {
329  tmp = name + "bar";
330  edm::LogInfo("CustomPhysics") << "Calling addCustomParticle for antiparticle with pdgId: " << -pdgId << ", mass "
331  << mass << ", name " << tmp;
333  theParticleTable->FindParticle(pdgId)->SetAntiPDGEncoding(-pdgId);
334  }
335  }
336 }
337 
338 G4DecayTable *CustomParticleFactory::getDecayTable(std::ifstream *configFile, int pdgId) {
339  double br;
340  int nDaughters;
341  int pdg[4] = {0};
343 
344  G4ParticleTable *theParticleTable = G4ParticleTable::GetParticleTable();
345 
346  std::string parentName = theParticleTable->FindParticle(pdgId)->GetParticleName();
347  G4DecayTable *decaytable = new G4DecayTable();
348 
349  while (getline(*configFile, line)) {
350  line.erase(0, line.find_first_not_of(" \t")); // remove leading whitespace
351  if (line.length() == 0)
352  continue; // skip blank lines
353  if (line.at(0) == '#' && ToLower(line).find("br") < line.npos && ToLower(line).find("nda") < line.npos)
354  continue; // skip a comment of the form: # BR NDA ID1 ID2
355  if (line.at(0) == '#' || ToLower(line).find("block") < line.npos) {
356  edm::LogInfo("SimG4CoreCustomPhysics") << "CustomParticleFactory: Finished the Decay Table ";
357  break;
358  }
359 
360  std::stringstream sstr(line);
361  sstr >> br >> nDaughters; // assume SLHA format, e.g.: 1.49435135E-01 2 -15 16 # BR(H+ -> tau+ nu_tau)
362  LogDebug("SimG4CoreCustomPhysics") << "CustomParticleFactory: Branching Ratio: " << br
363  << ", Number of Daughters: " << nDaughters;
364  if (nDaughters > 4) {
365  edm::LogError("SimG4CoreCustomPhysics")
366  << "CustomParticleFactory: Number of daughters is too large (max = 4): " << nDaughters
367  << " for pdgId: " << pdgId;
368  break;
369  }
370  if (br <= 0.0) {
371  edm::LogError("SimG4CoreCustomPhysics")
372  << "CustomParticleFactory: Branching ratio is " << br << " for pdgId: " << pdgId;
373  break;
374  }
375  std::string name[4] = {""};
376  for (int i = 0; i < nDaughters; ++i) {
377  sstr >> pdg[i];
378  LogDebug("SimG4CoreCustomPhysics") << "CustomParticleFactory: Daughter ID " << pdg[i];
379  const G4ParticleDefinition *part = theParticleTable->FindParticle(pdg[i]);
380  if (!part) {
381  edm::LogWarning("SimG4CoreCustomPhysics")
382  << "CustomParticleFactory: particle with PDG code" << pdg[i] << " not found!";
383  continue;
384  }
385  name[i] = part->GetParticleName();
386  }
388  G4PhaseSpaceDecayChannel *aDecayChannel =
389  new G4PhaseSpaceDecayChannel(parentName, br, nDaughters, name[0], name[1], name[2], name[3]);
390  decaytable->Insert(aDecayChannel);
391  edm::LogInfo("SimG4CoreCustomPhysics")
392  << "CustomParticleFactory: inserted decay channel "
393  << " for pdgID= " << pdgId << " " << parentName << " BR= " << br << " Daughters: " << name[0] << " "
394  << name[1] << " " << name[2] << " " << name[3];
395  }
396  return decaytable;
397 }
398 
399 G4DecayTable *CustomParticleFactory::getAntiDecayTable(int pdgId, G4DecayTable *theDecayTable) {
400  std::string name[4] = {""};
401  G4ParticleTable *theParticleTable = G4ParticleTable::GetParticleTable();
402 
403  std::string parentName = theParticleTable->FindParticle(-pdgId)->GetParticleName();
404  G4DecayTable *decaytable = new G4DecayTable();
405 
406  for (int i = 0; i < theDecayTable->entries(); ++i) {
407  G4VDecayChannel *theDecayChannel = theDecayTable->GetDecayChannel(i);
408  int nd = std::min(4, theDecayChannel->GetNumberOfDaughters());
409  for (int j = 0; j < nd; ++j) {
410  int id = theDecayChannel->GetDaughter(j)->GetAntiPDGEncoding();
411  const G4ParticleDefinition *part = theParticleTable->FindParticle(id);
412  if (!part) {
413  edm::LogWarning("SimG4CoreCustomPhysics")
414  << "CustomParticleFactory: antiparticle with PDG code" << id << " not found!";
415  continue;
416  }
417  name[j] = part->GetParticleName();
418  }
419  G4PhaseSpaceDecayChannel *aDecayChannel =
420  new G4PhaseSpaceDecayChannel(parentName, theDecayChannel->GetBR(), nd, name[0], name[1], name[2], name[3]);
421  decaytable->Insert(aDecayChannel);
422  edm::LogInfo("SimG4CoreCustomPhysics")
423  << "CustomParticleFactory: inserted decay channel "
424  << " for pdgID= " << -pdgId << " " << parentName << " BR= " << theDecayChannel->GetBR()
425  << " Daughters: " << name[0] << " " << name[1] << " " << name[2] << " " << name[3];
426  }
427  return decaytable;
428 }
429 
431  std::locale loc;
432  for (std::string::size_type i = 0; i < str.length(); ++i)
433  str.at(i) = std::tolower(str.at(i), loc);
434  return str;
435 }
436 
437 const std::vector<G4ParticleDefinition *> &CustomParticleFactory::GetCustomParticles() { return m_particles; }
CustomPDGParser::s_spin
static double s_spin(int pdg)
Definition: CustomPDGParser.cc:145
ApeEstimator_cff.width
width
Definition: ApeEstimator_cff.py:24
CustomParticleFactory::ToLower
std::string ToLower(std::string str)
Definition: CustomParticleFactory.cc:430
mps_fire.i
i
Definition: mps_fire.py:355
MessageLogger.h
CustomParticleFactory::m_particles
static std::vector< G4ParticleDefinition * > m_particles
Definition: CustomParticleFactory.h:28
CustomPDGParser::s_isDphoton
static bool s_isDphoton(int pdg)
Definition: CustomPDGParser.cc:40
min
T min(T a, T b)
Definition: MathUtil.h:58
CustomPDGParser::s_issbottomHadron
static bool s_issbottomHadron(int pdg)
Definition: CustomPDGParser.cc:20
edm::LogInfo
Definition: MessageLogger.h:254
Validation_hcalonly_cfi.sign
sign
Definition: Validation_hcalonly_cfi.py:32
MeV
const double MeV
CustomPDGParser::s_isstopHadron
static bool s_isstopHadron(int pdg)
Definition: CustomPDGParser.cc:15
CustomPDGParser::s_charge
static double s_charge(int pdg)
Definition: CustomPDGParser.cc:70
createJobs.tmp
tmp
align.sh
Definition: createJobs.py:716
CMSSIMP.h
FileInPath.h
alignCSCRings.s
s
Definition: alignCSCRings.py:92
part
part
Definition: HCALResponse.h:20
trigger::size_type
uint16_t size_type
Definition: TriggerTypeDefs.h:18
CustomParticleFactory::addCustomParticle
void addCustomParticle(int pdgCode, double mass, const std::string &name)
Definition: CustomParticleFactory.cc:93
CustomParticleFactory::getMassTable
void getMassTable(std::ifstream *configFile)
Definition: CustomParticleFactory.cc:249
CustomParticleFactory::getDecayTable
G4DecayTable * getDecayTable(std::ifstream *configFile, int pdgId)
Definition: CustomParticleFactory.cc:338
str
#define str(s)
Definition: TestProcessor.cc:48
CustomParticleFactory::loaded
static bool loaded
Definition: CustomParticleFactory.h:27
CustomPDGParser.h
dt4ml_dqm_sourceclient-live_cfg.filePath
filePath
CUSTOMIZE FOR ML.
Definition: dt4ml_dqm_sourceclient-live_cfg.py:45
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::LogWarning
Definition: MessageLogger.h:141
CustomParticleFactory::GetCustomParticles
const std::vector< G4ParticleDefinition * > & GetCustomParticles()
Definition: CustomParticleFactory.cc:437
CustomParticleFactory.h
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
CustomParticleFactory::~CustomParticleFactory
~CustomParticleFactory()
Definition: CustomParticleFactory.cc:31
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::LogError
Definition: MessageLogger.h:183
CustomPDGParser::s_isSIMP
static bool s_isSIMP(int pdg)
Definition: CustomPDGParser.cc:65
CMSAntiSIMP.h
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
CustomParticle::SetSpectator
void SetSpectator(G4ParticleDefinition *theSpectator)
Definition: CustomParticle.h:45
GeV
const double GeV
Definition: MathUtil.h:16
CMSAntiSIMP
Definition: CMSAntiSIMP.h:8
beamvalidation.br
br
Definition: beamvalidation.py:398
createfilelist.int
int
Definition: createfilelist.py:10
CustomParticleFactory::loadCustomParticles
void loadCustomParticles(const std::string &filePath)
Definition: CustomParticleFactory.cc:33
CustomParticle
Definition: CustomParticle.h:11
edm::LogVerbatim
Definition: MessageLogger.h:297
CustomPDGParser::s_isRHadron
static bool s_isRHadron(int pdg)
Definition: CustomPDGParser.cc:10
EgammaValidation_cff.pdgId
pdgId
Definition: EgammaValidation_cff.py:118
CMSAntiSIMP::Definition
static CMSAntiSIMP * Definition(double mass)
Definition: CMSAntiSIMP.cc:12
CustomParticle.h
CustomPDGParser::s_isMesonino
static bool s_isMesonino(int pdg)
Definition: CustomPDGParser.cc:50
CustomParticleFactory::getAntiDecayTable
G4DecayTable * getAntiDecayTable(int pdgId, G4DecayTable *theDecayTable)
Definition: CustomParticleFactory.cc:399
CustomParticleFactory::CustomParticleFactory
CustomParticleFactory()
Definition: CustomParticleFactory.cc:29
EgHLTOffHistBins_cfi.mass
mass
Definition: EgHLTOffHistBins_cfi.py:34
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
pdg
Definition: pdg_functions.h:28
TopDecayID::stable
static const int stable
Definition: TopGenEvent.h:10
CustomPDGParser::s_isSbaryon
static bool s_isSbaryon(int pdg)
Definition: CustomPDGParser.cc:55
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
CustomPDGParser::s_isSLepton
static bool s_isSLepton(int pdg)
Definition: CustomPDGParser.cc:25
CMSSIMP
Definition: CMSSIMP.h:8
mps_splice.line
line
Definition: mps_splice.py:76
CMSSIMP::Definition
static CMSSIMP * Definition(double mass)
Definition: CMSSIMP.cc:12
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
CustomParticle::SetCloud
void SetCloud(G4ParticleDefinition *theCloud)
Definition: CustomParticle.h:43