ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/auterman/PhysicsTools/IsolationAlgos/interface/IsolationProducer.h
Revision: 1.1.1.1 (vendor branch)
Committed: Wed May 23 17:31:23 2007 UTC (17 years, 11 months ago) by auterman
Content type: text/plain
Branch: tex, PatCrossCleaner, Demo, SusyScan, scripts, IsolationAlgos, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
Log Message:

File Contents

# User Rev Content
1 auterman 1.1 #ifndef IsolationAlgos_IsolationProducer_h
2     #define IsolationAlgos_IsolationProducer_h
3     /* \class IsolationProducer<C1, C2, Algo>
4     *
5     * \author Francesco Fabozzi, INFN
6     *
7     * template class to store isolation
8     *
9     */
10     #include "PhysicsTools/UtilAlgos/interface/ParameterAdapter.h"
11     #include "FWCore/Framework/interface/EDProducer.h"
12     #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
13     #include "FWCore/ParameterSet/interface/InputTag.h"
14     #include "DataFormats/Common/interface/AssociationVector.h"
15     #include "FWCore/ParameterSet/interface/ParameterSet.h"
16     #include "FWCore/Framework/interface/Event.h"
17     #include "DataFormats/Common/interface/Handle.h"
18     #include <vector>
19    
20     namespace helper {
21    
22     template<typename Alg>
23     struct NullIsolationAlgorithmSetup {
24     static void init( Alg &, const edm::EventSetup& ) { }
25     };
26    
27     template<typename Alg>
28     struct IsolationAlgorithmSetup {
29     typedef NullIsolationAlgorithmSetup<Alg> type;
30     };
31     }
32    
33     template <typename C1, typename C2, typename Alg,
34     typename Setup = typename helper::IsolationAlgorithmSetup<Alg>::type>
35     class IsolationProducer : public edm::EDProducer {
36     public:
37     IsolationProducer( const edm::ParameterSet & );
38     ~IsolationProducer();
39    
40     private:
41     void produce( edm::Event&, const edm::EventSetup& );
42     edm::InputTag src_, elements_;
43     Alg alg_;
44     typedef typename Alg::value_type value_type;
45     typedef edm::AssociationVector<edm::RefProd<C1>,
46     std::vector<value_type> > IsolationCollection;
47     };
48    
49     template <typename C1, typename C2, typename Alg, typename Setup>
50     IsolationProducer<C1, C2, Alg, Setup>::IsolationProducer( const edm::ParameterSet & cfg ) :
51     src_( cfg.template getParameter<edm::InputTag>( "src" ) ),
52     elements_( cfg.template getParameter<edm::InputTag>( "elements" ) ),
53     alg_( reco::modules::make<Alg>( cfg ) ) {
54     //produces<IsolationCollection>();
55     produces<std::vector<value_type> >(); //CMSSW_1_3_x
56     }
57    
58     template <typename C1, typename C2, typename Alg, typename Setup>
59     IsolationProducer<C1, C2, Alg, Setup>::~IsolationProducer() {
60     }
61    
62     template <typename C1, typename C2, typename Alg, typename Setup>
63     void IsolationProducer<C1, C2, Alg, Setup>::produce( edm::Event& evt, const edm::EventSetup& es ) {
64     using namespace edm;
65     using namespace std;
66     Handle<C1> src;
67     Handle<C2> elements;
68     evt.getByLabel( src_, src );
69     evt.getByLabel( elements_, elements );
70    
71     Setup::init( alg_, es );
72    
73     //auto_ptr<IsolationCollection> isolations( new IsolationCollection( edm::RefProd<C1>( src ) ) );
74     auto_ptr<std::vector<value_type> > isolations( new std::vector<value_type>); //CMSSW_1_3_x
75    
76     //size_t i = 0;
77     for( typename C1::const_iterator lep = src->begin(); lep != src->end(); ++ lep ) {
78     value_type iso= alg_(*lep,*elements);
79     //isolations->setValue( i++, iso );
80     isolations->push_back( iso ); //CMSSW_1_3_x
81     }
82     evt.put( isolations );
83     }
84    
85     #endif