ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/DGele/PhysicsTools/RecoAlgos/interface/PhotonSelector.h
Revision: 1.1.1.1 (vendor branch)
Committed: Tue Oct 20 17:15:14 2009 UTC (15 years, 6 months ago) by dgele
Content type: text/plain
Branch: ANA
CVS Tags: start
Changes since 1.1: +0 -0 lines
Log Message:
version CMSSW_2_2_10

File Contents

# User Rev Content
1 dgele 1.1 #ifndef RecoAlgos_PhotonSelector_h
2     #define RecoAlgos_PhotonSelector_h
3     /** \class PhotonSelector
4     *
5     * selects a subset of an photon collection. Also clones
6     * all referenced objects
7     *
8     * \author Luca Lista, INFN
9     *
10     * \version $Revision: 1.7 $
11     *
12     * $Id: PhotonSelector.h,v 1.7 2007/09/20 18:48:28 llista Exp $
13     *
14     */
15    
16     #include "DataFormats/EgammaCandidates/interface/Photon.h"
17     #include "DataFormats/EgammaReco/interface/SuperCluster.h"
18     #include "PhysicsTools/UtilAlgos/interface/ObjectSelector.h"
19    
20     namespace helper {
21     struct PhotonCollectionStoreManager {
22     typedef reco::PhotonCollection collection;
23     PhotonCollectionStoreManager(const edm::Handle<reco::PhotonCollection>&) :
24     selPhotons_( new reco::PhotonCollection ),
25     selSuperClusters_( new reco::SuperClusterCollection ) {
26     }
27     template<typename I>
28     void cloneAndStore( const I & begin, const I & end, edm::Event & evt ) {
29     using namespace reco;
30     PhotonRefProd rPhotons = evt.template getRefBeforePut<PhotonCollection>();
31     SuperClusterRefProd rSuperClusters = evt.template getRefBeforePut<SuperClusterCollection>();
32     size_t idx = 0;
33     for( I i = begin; i != end; ++ i ) {
34     const Photon & ele = * * i;
35     selPhotons_->push_back( Photon( ele ) );
36     selPhotons_->back().setSuperCluster( SuperClusterRef( rSuperClusters, idx ++ ) );
37     selSuperClusters_->push_back( SuperCluster( * ( ele.superCluster() ) ) );
38     }
39     }
40     edm::OrphanHandle<reco::PhotonCollection> put( edm::Event & evt ) {
41     edm::OrphanHandle<reco::PhotonCollection> h = evt.put( selPhotons_ );
42     evt.put( selSuperClusters_ );
43     return h;
44     }
45     size_t size() const { return selPhotons_->size(); }
46     private:
47     std::auto_ptr<reco::PhotonCollection> selPhotons_;
48     std::auto_ptr<reco::SuperClusterCollection> selSuperClusters_;
49     };
50    
51     class PhotonSelectorBase : public edm::EDFilter {
52     public:
53     PhotonSelectorBase( const edm::ParameterSet & cfg ) {
54     std::string alias( cfg.getParameter<std::string>( "@module_label" ) );
55     produces<reco::PhotonCollection>().setBranchAlias( alias + "Photons" );
56     produces<reco::SuperClusterCollection>().setBranchAlias( alias + "SuperClusters" );
57     }
58     };
59    
60     template<>
61     struct StoreManagerTrait<reco::PhotonCollection> {
62     typedef PhotonCollectionStoreManager type;
63     typedef PhotonSelectorBase base;
64     };
65    
66     }
67    
68     #endif