ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/Betchart/TopRefTuple/plugins/Tuple_Electron.cc
Revision: 1.4
Committed: Fri Nov 9 20:34:11 2012 UTC (12 years, 5 months ago) by bbetchar
Content type: text/plain
Branch: MAIN
CVS Tags: V00-01-05, V00-01-04, V00-01-03, V00-01-02, V00-01-01, V00-01-00
Changes since 1.3: +1 -1 lines
Log Message:
fabs( dxy )

File Contents

# User Rev Content
1 bbetchar 1.1 #include "TopQuarkAnalysis/TopRefTuple/interface/Tuple_Electron.h"
2 bbetchar 1.3 #include "TopQuarkAnalysis/TopRefTuple/interface/fTypes.h"
3 bbetchar 1.1
4 bbetchar 1.2 #include <boost/foreach.hpp>
5 bbetchar 1.1
6 bbetchar 1.2 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
7     #include "DataFormats/PatCandidates/interface/Electron.h"
8     #include "DataFormats/VertexReco/interface/VertexFwd.h"
9     #include "DataFormats/VertexReco/interface/Vertex.h"
10    
11    
12    
13     Tuple_Electron::
14     Tuple_Electron(const edm::ParameterSet& conf)
15     : electronTag( conf.getParameter<edm::InputTag>("electronTag") ),
16     vertexTag( conf.getParameter<edm::InputTag>("vertexTag") ),
17     electronIDs( conf.getParameter<std::vector<std::string> >("electronIDs") ),
18     prefix( conf.getParameter<std::string>("prefix") )
19 bbetchar 1.1 {
20 bbetchar 1.2 produces <bool> ( prefix + "HandleValid");
21 bbetchar 1.3 produces <std::vector<fTypes::dPolarLorentzV> > ( prefix + "P4" );
22 bbetchar 1.2 produces <std::vector<int> > ( prefix + "Charge");
23    
24 bbetchar 1.3 produces <std::vector<float> > ( prefix + "RelIso" );
25     produces <std::vector<float> > ( prefix + "ChIso" );
26     produces <std::vector<float> > ( prefix + "NhIso" );
27     produces <std::vector<float> > ( prefix + "PhIso" );
28     produces <std::vector<float> > ( prefix + "PuIso" );
29 bbetchar 1.2
30 bbetchar 1.3 produces <std::vector<float> > ( prefix + "SuperClusterEta");
31 bbetchar 1.2 produces <std::vector<bool> > ( prefix + "PassConversionVeto");
32 bbetchar 1.3 produces <std::vector<float> > ( prefix + "Dxy" );
33 bbetchar 1.2 produces <std::vector<unsigned> > (prefix + "GsfTrackInnerHits");
34    
35     BOOST_FOREACH(const std::string& idName, electronIDs ) {
36 bbetchar 1.3 produces <std::vector<float> > ( prefix + idName );
37 bbetchar 1.2 }
38 bbetchar 1.1 }
39    
40 bbetchar 1.2 void Tuple_Electron::
41     produce(edm::Event &event, const edm::EventSetup&) {
42 bbetchar 1.3 std::auto_ptr<std::vector<fTypes::dPolarLorentzV> > p4 ( new std::vector<fTypes::dPolarLorentzV>() );
43 bbetchar 1.2 std::auto_ptr<std::vector<int> > charge ( new std::vector<int>() );
44    
45 bbetchar 1.3 std::auto_ptr<std::vector<float> > relIso( new std::vector<float>() );
46     std::auto_ptr<std::vector<float> > chIso ( new std::vector<float>() );
47     std::auto_ptr<std::vector<float> > nhIso ( new std::vector<float>() );
48     std::auto_ptr<std::vector<float> > phIso ( new std::vector<float>() );
49     std::auto_ptr<std::vector<float> > puIso ( new std::vector<float>() );
50 bbetchar 1.2
51 bbetchar 1.3 std::auto_ptr<std::vector<float> > scEta ( new std::vector<float>() );
52 bbetchar 1.2 std::auto_ptr<std::vector<bool> > passCV ( new std::vector<bool>() );
53 bbetchar 1.3 std::auto_ptr<std::vector<float> > dxy ( new std::vector<float>() );
54 bbetchar 1.2 std::auto_ptr<std::vector<unsigned> > nHits ( new std::vector<unsigned>() );
55    
56 bbetchar 1.3 std::map<std::string, std::vector<float>* > idMaps;
57 bbetchar 1.2 BOOST_FOREACH(const std::string& idName, electronIDs ) {
58 bbetchar 1.3 idMaps[idName] = new std::vector<float>();
59 bbetchar 1.2 }
60    
61     typedef edm::View<pat::Electron> els_t;
62     edm::Handle<els_t> electrons; edm::Handle<reco::VertexCollection> vertices;
63     event.getByLabel(electronTag,electrons); event.getByLabel(vertexTag, vertices);
64    
65     const reco::Vertex* vertex = (vertices.isValid() && vertices->size() ) ? &vertices->at(0) : 0;
66    
67     if( electrons.isValid() ) {
68     for(els_t::const_iterator el=electrons->begin(); el!=electrons->end(); el++) {
69 bbetchar 1.3 p4->push_back(fTypes::dPolarLorentzV(el->pt(), el->eta(), el->phi(), el->mass()));
70 bbetchar 1.2 charge->push_back(el->charge());
71     chIso->push_back( el->chargedHadronIso() );
72     nhIso->push_back( el->neutralHadronIso() );
73     phIso->push_back( el->photonIso() );
74     puIso->push_back( el->puChargedHadronIso() );
75     relIso->push_back( (chIso->back() + std::max(0., nhIso->back()+phIso->back()-0.5*puIso->back()) ) / el->pt() );
76    
77     scEta->push_back( el->superCluster()->eta() );
78     passCV->push_back( el->passConversionVeto() );
79 bbetchar 1.4 dxy->push_back( vertex? fabs( el->gsfTrack()->dxy(vertex->position()) ) : -9999.9 );
80 bbetchar 1.2 nHits->push_back( el->gsfTrack()->trackerExpectedHitsInner().numberOfHits() );
81    
82     BOOST_FOREACH(const std::string& idName, electronIDs) {
83     idMaps[idName]->push_back( el->electronID(idName) );
84     }
85     }
86     }
87 bbetchar 1.1
88 bbetchar 1.2 event.put( std::auto_ptr<bool> ( new bool(electrons.isValid() ) ), prefix + "HandleValid" );
89     event.put( p4, prefix+"P4" );
90     event.put( charge, prefix+"Charge");
91     event.put( relIso, prefix+"RelIso");
92     event.put( chIso, prefix+"ChIso");
93     event.put( nhIso, prefix+"NhIso");
94     event.put( phIso, prefix+"PhIso");
95     event.put( puIso, prefix+"PuIso");
96     event.put( scEta, prefix+"SuperClusterEta");
97     event.put( passCV,prefix+"PassConversionVeto");
98     event.put( dxy, prefix+"Dxy");
99     event.put( nHits, prefix+"GsfTrackInnerHits");
100     BOOST_FOREACH(const std::string& idName, electronIDs) {
101 bbetchar 1.3 event.put( std::auto_ptr<std::vector<float> >(idMaps[idName]), prefix + idName);
102 bbetchar 1.2 }
103 bbetchar 1.1 }