diff --git a/Generators/GeneratorFilters/CMakeLists.txt b/Generators/GeneratorFilters/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..6ed699b734a9c848a95acf494dd11d0c2da40a38 --- /dev/null +++ b/Generators/GeneratorFilters/CMakeLists.txt @@ -0,0 +1,47 @@ +################################################################################ +# Package: GeneratorFilters +################################################################################ + +# Declare the package name: +atlas_subdir( GeneratorFilters ) + +# Declare the package's dependencies: +atlas_depends_on_subdirs( PUBLIC + Control/StoreGate + GaudiKernel + Generators/GeneratorModules + PRIVATE + Control/AthenaKernel + Control/CxxUtils + Event/EventInfo + Event/xAOD/xAODJet + Event/xAOD/xAODTruth + Generators/TruthUtils + PhysicsAnalysis/AnalysisCommon/ParticleEvent + PhysicsAnalysis/TruthParticleID/McParticleEvent + Reconstruction/MissingETEvent ) + +# External dependencies: +find_package( CLHEP ) +find_package( HepMC ) +find_package( HepPDT ) +find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread MathMore Minuit Minuit2 Matrix Physics HistPainter Rint ) + +# Component(s) in the package: +atlas_add_library( GeneratorFiltersLib + src/*.cxx + PUBLIC_HEADERS GeneratorFilters + INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS} + PRIVATE_INCLUDE_DIRS ${HEPPDT_INCLUDE_DIRS} + DEFINITIONS ${CLHEP_DEFINITIONS} + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} GaudiKernel StoreGateLib SGtests GeneratorModulesLib + PRIVATE_LINK_LIBRARIES ${HEPPDT_LIBRARIES} AthenaKernel CxxUtils EventInfo xAODJet xAODTruth TruthUtils ParticleEvent McParticleEvent MissingETEvent ) + +atlas_add_component( GeneratorFilters + src/components/*.cxx + INCLUDE_DIRS ${HEPPDT_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS} + LINK_LIBRARIES ${HEPPDT_LIBRARIES} ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} StoreGateLib SGtests GaudiKernel GeneratorModulesLib AthenaKernel CxxUtils EventInfo xAODJet xAODTruth TruthUtils ParticleEvent McParticleEvent MissingETEvent GeneratorFiltersLib ) + +# Install files from the package: +atlas_install_joboptions( share/*.py ) + diff --git a/Generators/GeneratorFilters/GeneratorFilters/BSignalFilter.h b/Generators/GeneratorFilters/GeneratorFilters/BSignalFilter.h index 948f95e47864e9f167a256d9f06bdf118cbd0683..fa9a8746ebe146f3482ea233e6a03b2300f8e47a 100644 --- a/Generators/GeneratorFilters/GeneratorFilters/BSignalFilter.h +++ b/Generators/GeneratorFilters/GeneratorFilters/BSignalFilter.h @@ -67,7 +67,7 @@ class BSignalFilter : public GenFilter // Find child void FindAllChildren(const HepMC::GenParticle* mother,std::string treeIDStr, bool fromFinalB, bool &foundSignal, bool &passedAllCuts, - TLorentzVector &p1, TLorentzVector &p2) const; + TLorentzVector &p1, TLorentzVector &p2, bool fromSelectedB) const; // Check whether child has pass cuts bool FinalStatePassedCuts(const HepMC::GenParticle* child) const; diff --git a/Generators/GeneratorFilters/src/BSignalFilter.cxx b/Generators/GeneratorFilters/src/BSignalFilter.cxx index cc33e85e858166c35388f6a8e0820bd0fcb5e59a..667f5c92442d61e3ae723257063e3dd33ec8c0f6 100644 --- a/Generators/GeneratorFilters/src/BSignalFilter.cxx +++ b/Generators/GeneratorFilters/src/BSignalFilter.cxx @@ -253,7 +253,7 @@ StatusCode BSignalFilter::filterEvent() bool havePassedCuts=true; TLorentzVector CandPart1, CandPart2; // - FindAllChildren((*pitr),"",false,isSignal,havePassedCuts,CandPart1,CandPart2); + FindAllChildren((*pitr),"",false,isSignal,havePassedCuts,CandPart1,CandPart2,false); // ATH_MSG_DEBUG(""); ATH_MSG_DEBUG(" ------------------------------- "); @@ -396,26 +396,14 @@ bool BSignalFilter::LVL2_eMu_Trigger(const HepMC::GenParticle* child) const void BSignalFilter::FindAllChildren(const HepMC::GenParticle* mother,std::string treeIDStr, bool fromFinalB, bool &foundSignal, bool &passedAllCuts, - TLorentzVector &p1, TLorentzVector &p2) const + TLorentzVector &p1, TLorentzVector &p2, bool fromSelectedB) const { int pID = mother->pdg_id(); // if ( !(mother->end_vertex()) && (mother->status() != 2) ) // i.e. this is a final state { - bool hasChildGoodParent = false; + bool hasChildGoodParent = fromFinalB && (fromSelectedB || m_B_pdgid==0); // - HepMC::GenVertex::particle_iterator firstChildParent, lastChildParent, thisChildParent; - firstChildParent = mother->production_vertex()->particles_begin(HepMC::parents); - lastChildParent = mother->production_vertex()->particles_end(HepMC::parents); - for( thisChildParent = firstChildParent; thisChildParent != lastChildParent++; ++thisChildParent ) - { - int SigChild_parentID = (*thisChildParent)->pdg_id(); - if( SigChild_parentID == m_B_pdgid ){ - hasChildGoodParent = true; - }else if( MC::PID::isHadron(pID) && MC::PID::isCharged(pID) && SigChild_parentID == 333 ){ // If the parent is a phi(1020) - hasChildGoodParent = true; - } - } if( fromFinalB && hasChildGoodParent ) { foundSignal=true; @@ -468,7 +456,7 @@ void BSignalFilter::FindAllChildren(const HepMC::GenParticle* mother,std::string stringstream childCntSS; childCntSS << childCnt; childIDStr = treeIDStr + childCntSS.str(); PrintChild( (*thisChild), childIDStr, fromFinalB ); - FindAllChildren( (*thisChild),childIDStr,fromFinalB,foundSignal,passedAllCuts,p1,p2); + FindAllChildren( (*thisChild),childIDStr,fromFinalB,foundSignal,passedAllCuts,p1,p2,(pID==m_B_pdgid) || fromSelectedB); } return;