CMS 3D CMS Logo

makeCompositeCandidate.h

Go to the documentation of this file.
00001 #ifndef CandUtils_makeCompositeCandidate_h
00002 #define CandUtils_makeCompositeCandidate_h
00003 #include "DataFormats/Candidate/interface/CompositeCandidate.h"
00004 #include "DataFormats/Candidate/interface/ShallowCloneCandidate.h"
00005 #include <memory>
00006 
00007 namespace helpers {
00008   struct CompositeCandidateMaker {
00009     CompositeCandidateMaker( std::auto_ptr<reco::CompositeCandidate> cmp ) :
00010       cmp_( cmp ) {
00011     }
00012     void addDaughter( const reco::Candidate & dau ) {
00013       cmp_->addDaughter( dau );
00014     }
00015     template<typename S>
00016     std::auto_ptr<reco::Candidate> operator[]( const S & setup ) {
00017       setup.set( * cmp_ );
00018       return release();
00019     }
00020   private:
00021     std::auto_ptr<reco::CompositeCandidate> cmp_;
00022     std::auto_ptr<reco::Candidate> release() {
00023       std::auto_ptr<reco::Candidate> ret( cmp_.get() );
00024       cmp_.release();
00025       return ret;
00026     }
00027   };
00028 }
00029 
00030 helpers::CompositeCandidateMaker 
00031 makeCompositeCandidate( const reco::Candidate & c1, 
00032                         const reco::Candidate & c2 );
00033 
00034 helpers::CompositeCandidateMaker 
00035 makeCompositeCandidate( const reco::Candidate & c1, 
00036                         const reco::Candidate & c2,
00037                         const reco::Candidate & c3 );
00038 
00039 helpers::CompositeCandidateMaker 
00040 makeCompositeCandidate( const reco::Candidate & c1, 
00041                         const reco::Candidate & c2,
00042                         const reco::Candidate & c3 );
00043 
00044 
00045 helpers::CompositeCandidateMaker 
00046 makeCompositeCandidate( const reco::Candidate & c1, 
00047                         const reco::Candidate & c2,
00048                         const reco::Candidate & c3,
00049                         const reco::Candidate & c4 );
00050 
00051 template<typename C>
00052 helpers::CompositeCandidateMaker 
00053 makeCompositeCandidate( const typename C::const_iterator & begin, 
00054                         const typename C::const_iterator & end ) {
00055   helpers::CompositeCandidateMaker 
00056     cmp( std::auto_ptr<reco::CompositeCandidate>( new reco::CompositeCandidate ) );
00057   for( typename C::const_iterator i = begin; i != end; ++ i ) 
00058     cmp.addDaughter( * i );
00059   return cmp;
00060 }
00061 
00062 helpers::CompositeCandidateMaker 
00063 makeCompositeCandidateWithRefsToMaster( const reco::CandidateRef & c1, 
00064                                         const reco::CandidateRef & c2 );
00065 
00066 helpers::CompositeCandidateMaker 
00067 makeCompositeCandidateWithRefsToMaster( const reco::CandidateRef & c1, 
00068                                         const reco::CandidateRef & c2,
00069                                         const reco::CandidateRef & c3 );
00070 
00071 helpers::CompositeCandidateMaker 
00072 makeCompositeCandidateWithRefsToMaster( const reco::CandidateRef & c1, 
00073                                         const reco::CandidateRef & c2,
00074                                         const reco::CandidateRef & c3,
00075                                         const reco::CandidateRef & c4 );
00076 
00077 template<typename C>
00078 helpers::CompositeCandidateMaker 
00079 makeCompositeCandidateWithRefsToMaster( const typename C::const_iterator & begin, 
00080                                         const typename C::const_iterator & end ) {
00081   helpers::CompositeCandidateMaker 
00082     cmp( std::auto_ptr<reco::CompositeCandidate>( new reco::CompositeCandidate ) );
00083   for( typename C::const_iterator i = begin; i != end; ++ i ) 
00084     cmp.addDaughter( ShallowCloneCandidate( CandidateBaseRef( * i ) ) );
00085   return cmp;
00086 }
00087 
00088 #endif

Generated on Tue Jun 9 17:41:04 2009 for CMSSW by  doxygen 1.5.4