#ifndef ReconObjectUtils_hxx_seen #define ReconObjectUtils_hxx_seen #include "ICOMETEvent.hxx" #include "IHandle.hxx" #include "IReconBase.hxx" #include "IReconNode.hxx" #include "IReconState.hxx" #include "IReconPID.hxx" #include "IReconShower.hxx" #include "IReconTrack.hxx" #include "IReconVertex.hxx" #include "IReconCluster.hxx" /// This namespace contains functions that were originally in oaRecPack. There are a variety of /// useful functions for accessing and manipulating object and object containers. namespace ReconObjectUtils { // ====> General management of objects void GetUnusedObjects(const COMET::IReconObjectContainer& inputContainer, COMET::IReconObjectContainer& outputContainer); void CopyObjects(COMET::IHandle objects1, COMET::IHandle objects2); COMET::IHandle CopyObject(COMET::IHandle object); COMET::IHandle CreateNewObject(const std::string& type); void CopyUnusedObjects(COMET::IHandle tc1, COMET::IHandle tc2); void CopyUnusedObjects(const COMET::IReconObjectContainer& tc1, COMET::IReconObjectContainer& tc2); void SetOriginalObject(COMET::IHandle object1, COMET::IHandle object2); COMET::IHandle GetOriginalObject(COMET::IHandle object); // ====> States management void CopyState(const COMET::IReconState& state1, COMET::IReconState& state2); COMET::IHandle CreateNewState(const std::string& type); COMET::IHandle GetContainer(COMET::ICOMETEvent& event, const std::string& fit, const std::string& container_name); // ====> Management of objects with constituents void GetConstituentsInDetector(COMET::IHandle t1, COMET::IReconBase::Status det, COMET::IReconObjectContainer& outputContainer); //get object itself/highest level constituent that DOESNT USE the detector bit COMET::IHandle GetConstituentNotUsingDetector(COMET::IHandle t1, COMET::IReconBase::Status det); COMET::IReconObjectContainer GetConstituentsRecursive(COMET::IHandle t1, bool includeComposite = false); void AddDetectorRecursive(COMET::IHandle object, COMET::IReconBase::Status det); void GetObjectsInDetector(const COMET::IReconObjectContainer& inputContainer, COMET::IReconBase::Status det, COMET::IReconObjectContainer& outputContainer); COMET::IHandle GetConstituentInDetector(COMET::IHandle t1, COMET::IReconBase::Status det); //from input container get objects/highest-level constituents that EXACTLY MATCH the detector bit COMET::IReconObjectContainer GetAllConstituentsInDetector(COMET::IHandle t1, COMET::IReconBase::Status det); void GetAllConstituentsInDetector(const COMET::IReconObjectContainer& inputContainer, COMET::IReconBase::Status det, COMET::IReconObjectContainer& outputContainer); //from input container get objects/highest-level constituents that DONT USE the detector bit void GetAllConstituentsNotUsingDetector(const COMET::IReconObjectContainer& inputContainer, COMET::IReconBase::Status det, COMET::IReconObjectContainer& outputContainer); COMET::IHandle GetConstituentUsingDetector(COMET::IHandle t1, COMET::IReconBase::Status det); bool IsConstituent(COMET::IHandle object1, COMET::IHandle object2); bool IsContained(COMET::IHandle object1, COMET::IHandle object2); void MergeContainers(COMET::IHandle objects1, COMET::IHandle objects2, COMET::IHandle objects3); void MergeContainers(const COMET::IReconObjectContainer& objects1, const COMET::IReconObjectContainer& objects2, COMET::IReconObjectContainer& objects3); }; #endif