#ifndef _DParticleCombo_ #define _DParticleCombo_ #include #include "JANA/JObject.h" #include "particleType.h" #include "PID/DKinematicData.h" #include "PID/DEventRFBunch.h" #include "ANALYSIS/DReaction.h" #include "ANALYSIS/DParticleComboStep.h" #include "ANALYSIS/DKinFitResults.h" using namespace std; using namespace jana; class DParticleCombo : public JObject { public: JOBJECT_PUBLIC(DParticleCombo); // SET STEPS inline void Add_ParticleComboStep(const DParticleComboStep* locParticleComboStep){dParticleComboSteps.push_back(locParticleComboStep);} void Set_ParticleComboStep(const DParticleComboStep* locParticleComboStep, size_t locStepIndex); // SET OBJECT DATA: inline void Set_Reaction(const DReaction* locReaction){dReaction = locReaction;} inline void Set_KinFitResults(const DKinFitResults* locKinFitResults){dKinFitResults = locKinFitResults;} inline void Set_EventRFBunch(const DEventRFBunch* locEventRFBunch){dEventRFBunch = locEventRFBunch;} // GET OBJECT DATA: inline const DReaction* Get_Reaction(void) const{return dReaction;} inline const DKinFitResults* Get_KinFitResults(void) const{return dKinFitResults;} inline const DEventRFBunch* Get_EventRFBunch(void) const{return dEventRFBunch;} // GET PARTCILE COMBO STEPS: inline size_t Get_NumParticleComboSteps(void) const{return dParticleComboSteps.size();} const DParticleComboStep* Get_ParticleComboStep(size_t locStepIndex) const; void Get_ParticleComboSteps(Particle_t locInitialPID, deque& locParticleComboStepDeque) const; // GET FINAL PARTICLES - BY PID: void Get_FinalParticles(Particle_t locPID, deque& locParticles) const; void Get_FinalParticles_Measured(Particle_t locPID, deque& locParticles) const; void Get_FinalParticles(Particle_t locStepInitialPID, Particle_t locPID, deque& locParticles) const; void Get_FinalParticles_Measured(Particle_t locStepInitialPID, Particle_t locPID, deque& locParticles) const; // GET FINAL PARTICLES - BY TRAIT: void Get_DetectedFinalChargedParticles_Measured(deque& locParticles) const; void Get_DetectedFinalNeutralParticles_Measured(deque& locParticles) const; void Get_DetectedFinalParticles_Measured(deque& locParticles) const; void Get_DetectedFinalChargedParticles(deque& locParticles) const; void Get_DetectedFinalNeutralParticles(deque& locParticles) const; void Get_DetectedFinalParticles(deque& locParticles) const; const DKinematicData* Get_MissingParticle(void) const; // GET FINAL PARTICLES - BY DECAY CHAIN: //get all of the measured particles included in the decaychain starting at locStepIndex void Get_DecayChainParticles_Measured(int locStepIndex, deque& locMeasuredParticles) const; // GET FINAL PARTICLE SOURCE OBJECTS - BY TRAIT: void Get_DetectedFinalChargedParticles_SourceObjects(deque& locSourceChargedTracks) const; void Get_DetectedFinalNeutralParticles_SourceObjects(deque& locSourceNeutralShowers) const; // GET DECAY CHAIN PARTICLE NAMES: string Get_DecayChainFinalParticlesROOTName(size_t locStepIndex, bool locKinFitResultsFlag = false) const; string Get_DecayChainFinalParticlesROOTName(size_t locStepIndex, deque& locParticleNames, bool locKinFitResultsFlag = false) const; // OTHER: bool Check_IfDecayingParticleExcludedFromP4KinFit(size_t locStepIndex) const; bool Will_KinFitBeIdentical(const DParticleCombo* locParticleCombo) const; //the pointers for the steps must be identical for this to be true!! private: // PRIVATE METHODS: string Get_DecayChainFinalParticlesROOTName_Recursive(size_t locStepIndex, deque& locParticleNames, bool locKinFitResultsFlag = false) const; void Get_DecayChainParticles_Measured_Recursive(int locStepIndex, deque& locMeasuredParticles) const; const DReaction* dReaction; const DKinFitResults* dKinFitResults; const DEventRFBunch* dEventRFBunch; deque dParticleComboSteps; }; #endif // _DParticleCombo_