File indexing completed on 2023-03-17 11:15:44
0001 #include "FWCore/Framework/interface/EDAnalyzer.h"
0002 #include "FWCore/Framework/interface/Event.h"
0003 #include "DataFormats/Common/interface/Handle.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "FWCore/Utilities/interface/InputTag.h"
0006 #include "DataFormats/Candidate/interface/Candidate.h"
0007 #include "FWCore/Utilities/interface/EDMException.h"
0008 using namespace std;
0009 using namespace edm;
0010 using namespace reco;
0011
0012 class TestGenParticleCandidates : public EDAnalyzer {
0013 private:
0014 bool dumpHepMC_;
0015 public:
0016 explicit TestGenParticleCandidates( const ParameterSet & cfg ) :
0017 srcToken_( consumes<CandidateCollection>( cfg.getParameter<InputTag>( "src" ) ) ) {
0018 }
0019 private:
0020 void analyze( const Event & evt, const EventSetup&) override {
0021 Handle<CandidateCollection> gen;
0022 evt.getByToken( srcToken_, gen );
0023 size_t n = gen->size();
0024 if (n == 0)
0025 throw Exception(errors::EventCorruption)
0026 << "No particles in genParticleCandidates\n";
0027 for(size_t i = 0; i < n; ++ i) {
0028 const Candidate & p = (*gen)[i];
0029 size_t nd = p.numberOfDaughters();
0030 if(nd==0 && p.status()==3)
0031 throw Exception(errors::EventCorruption)
0032 << "Particle with no daughters and status " << p.status()
0033 << ", pdgId = " << p.pdgId() << "\n";
0034 for(size_t j = 0; j < nd; ++ j ) {
0035 const Candidate * d = p.daughter(j);
0036 size_t nm = d->numberOfMothers();
0037 bool noMother = true;
0038 for(size_t k = 0; k < nm; ++ k ) {
0039 if(d->mother(k)==&p) {
0040 noMother = false;
0041 break;
0042 }
0043 }
0044 if(noMother)
0045 throw Exception(errors::EventCorruption)
0046 << "Inconsistent mother/daughter relation, pdgId = " << d->pdgId() << "\n";
0047 }
0048 }
0049 }
0050 EDGetTokenT<CandidateCollection> srcToken_;
0051 };
0052
0053 #include "FWCore/Framework/interface/MakerMacros.h"
0054
0055 DEFINE_FWK_MODULE( TestGenParticleCandidates );
0056
0057
0058