File indexing completed on 2024-04-06 12:30:36
0001 #include "DataFormats/Common/interface/Handle.h"
0002 #include "FWCore/Framework/interface/ESHandle.h"
0003 #include "FWCore/Framework/interface/EventSetup.h"
0004 #include "SimGeneral/HepPDTESSource/test/HepPDTAnalyzer.h"
0005 #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h"
0006
0007 #include <iomanip>
0008 #include <iostream>
0009
0010 using namespace edm;
0011 using namespace std;
0012
0013 HepPDTAnalyzer::HepPDTAnalyzer(const edm::ParameterSet &iConfig)
0014 : particleName_(iConfig.getParameter<std::string>("particleName")),
0015 tok_pdt_(esConsumes<HepPDT::ParticleDataTable, PDTRecord>()) {}
0016
0017 void HepPDTAnalyzer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) {
0018 using namespace edm;
0019
0020 const auto &pdt = iSetup.getHandle(tok_pdt_);
0021
0022 if (particleName_ == "all") {
0023 std::cout << " Number of particles in table = " << pdt->size() << std::endl;
0024 printBanner();
0025 for (ParticleDataTable::const_iterator iter = pdt->begin(); iter != pdt->end(); iter++) {
0026 const ParticleData *part = pdt->particle((*iter).first);
0027 printInfo(part);
0028 }
0029 } else if (particleName_ == "names") {
0030 std::cout << " Number of particles in table = " << pdt->size() << std::endl;
0031 printBanner();
0032 for (ParticleDataTable::const_iterator iter = pdt->begin(); iter != pdt->end(); iter++) {
0033 const ParticleData *part = pdt->particle((*iter).first);
0034 std::cout << " " << part->name() << std::endl;
0035 }
0036 } else if (particleName_ == "checkAllowedIDs") {
0037 int maxID = 2000000000;
0038 int minID = -1 * maxID;
0039 int legalcount = 0;
0040 std::cout << " Scanning IDs from " << minID << " to " << maxID << std::endl;
0041 printBanner();
0042 for (int ii = minID; ii <= maxID; ii++) {
0043 const ParticleData *part = pdt->particle(ii);
0044 if (part) {
0045 legalcount++;
0046 printInfo(part);
0047 }
0048 if (abs(ii) >= 1000000000)
0049 ii = ii + 9;
0050 }
0051 std::cout << " Found " << legalcount << " legal IDs in range." << std::endl;
0052 } else {
0053 printBanner();
0054 const ParticleData *part = pdt->particle(particleName_);
0055 printInfo(part);
0056 }
0057 }
0058
0059 void HepPDTAnalyzer::printInfo(const ParticleData *&part) {
0060 cout << setfill(' ') << setw(14);
0061 cout << part->name();
0062 cout << setfill(' ') << setw(12);
0063 cout << part->pid();
0064 cout << setfill(' ') << setw(8) << setprecision(3);
0065 cout << part->charge();
0066 cout << setfill(' ') << setw(12) << setprecision(6);
0067 cout << part->mass();
0068 cout << setfill(' ') << setw(14) << setprecision(5);
0069 cout << part->totalWidth();
0070 cout << setfill(' ') << setw(14) << setprecision(5);
0071 cout << part->lifetime() << endl;
0072 }
0073
0074 void HepPDTAnalyzer::printBanner() {
0075 cout << " Particle name ID Charge Mass Tot. Width "
0076 "Lifetime "
0077 << endl;
0078 cout << " -------------------------------------------------------------------"
0079 "------ "
0080 << endl;
0081 }
0082
0083 #include "FWCore/Framework/interface/MakerMacros.h"
0084
0085 DEFINE_FWK_MODULE(HepPDTAnalyzer);