ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/HbbAnalyzer/plugins/HbbCandidateFinder.cc
(Generate patch)

Comparing UserCode/VHbbAnalysis/HbbAnalyzer/plugins/HbbCandidateFinder.cc (file contents):
Revision 1.3 by tboccali, Thu Jun 16 12:16:02 2011 UTC vs.
Revision 1.9 by tboccali, Thu Jul 28 13:17:30 2011 UTC

# Line 1 | Line 1
1   #include "VHbbAnalysis/HbbAnalyzer/interface/HbbCandidateFinder.h"
2  
3 < struct CompareJetPt {
4 <  bool operator()( const VHbbEvent::SimpleJet& j1, const  VHbbEvent::SimpleJet& j2 ) const {
5 <    return j1.fourMomentum.Pt() > j2.fourMomentum.Pt();
6 <  }
7 < };
8 <
9 <  struct CompareBTag {
10 <    bool operator()(const  VHbbEvent::SimpleJet& j1, const  VHbbEvent::SimpleJet& j2 ) const {
11 <      return j1.csv > j2.csv;
12 <    }
13 <  };
14 <
15 < HbbCandidateFinder::HbbCandidateFinder(const edm::ParameterSet& iConfig):   vhbbevent_(iConfig.getParameter<edm::InputTag>("VHbbEventLabel")), verbose_ (iConfig.getParameter<bool>("verbose")), jetPtThreshold(iConfig.getParameter<double>("jetPtThreshold")){
3 > HbbCandidateFinder::HbbCandidateFinder(const edm::ParameterSet& iConfig): verbose_(iConfig.getParameter<bool>("verbose") ) {
4 >  algo_ = new HbbCandidateFinderAlgo(iConfig.getParameter<bool>("verbose"), iConfig.getParameter<double>("jetPtThreshold"),
5 >                                     iConfig.getParameter<bool>("useHighestPtHiggs")                         );
6 >  applyFilter = iConfig.getParameter<bool>("actAsAFilter");
7    produces<std::vector<VHbbCandidate > >();
8   }
9  
10 < HbbCandidateFinder::~HbbCandidateFinder(){}
10 > HbbCandidateFinder::~HbbCandidateFinder(){delete algo_;}
11  
12   void HbbCandidateFinder::beginJob(){}
13   void HbbCandidateFinder::endJob(){}
14  
15 <
25 < float HbbCandidateFinder::getDeltaTheta( VHbbEvent::SimpleJet * j1, VHbbEvent::SimpleJet * j2 ){return -1.;}
26 <
27 <
28 <
29 < void HbbCandidateFinder::produce( edm::Event& iEvent, const edm::EventSetup& iEventSetup){
15 > bool HbbCandidateFinder::filter( edm::Event& iEvent, const edm::EventSetup& iEventSetup){
16    
17    std::auto_ptr<std::vector<VHbbCandidate> >  vHbbCandidates( new std::vector<VHbbCandidate>  );
18  
# Line 42 | Line 28 | void HbbCandidateFinder::produce( edm::E
28    //  hbbCandidateFinderAlgo(vHbbCandidates, vHbbEvent-> result());
29    // do nothing for a test
30    
31 <  run(vHbbEvent.product(),vHbbCandidates);
32 <
33 <
31 >  algo_->run(vHbbEvent.product(),(*vHbbCandidates));
32 >  
33 >  
34    if (verbose_)
35      std::cout <<" Pushing VHbb candidates: "<<vHbbCandidates->size()<<std::endl;
50
51  iEvent.put(vHbbCandidates);  
52
53 }
54
55 void HbbCandidateFinder::run (const VHbbEvent* event, std::auto_ptr<std::vector<VHbbCandidate> > & candidates){
56  //
57  // first find the jets
58  //
59
60  VHbbEvent::SimpleJet j1,j2;
61  std::vector<VHbbEvent::SimpleJet> addJets;
62  bool foundJets = findDiJets(event->simpleJets2,j1,j2,addJets) ;
63
64  if (verbose_){
65    std::cout <<" Found Dijets: "<<foundJets<< " Additional: "<<addJets.size()<< std::endl;
66  }
36    
37 <  if (foundJets == false) return;
69 <  //
70 <  // search for a dilepton - just
71 <  //
72 <  std::vector<VHbbEvent::MuonInfo> mu;
73 <  findMuons(event->muInfo,mu);
74 <  std::vector<VHbbEvent::ElectronInfo> ele;
75 <  findElectrons(event->eleInfo,ele);
76 <  
77 <  if (verbose_){
78 <    std::cout <<" Electrons: "<< ele.size()<<std::endl;
79 <    std::cout <<" Muons    : "<< mu.size()<<std::endl;
80 <  }
81 <  if (ele.size()<1 && mu.size() < 1 ) return;
82 <
83 <  //
84 <  // fill!
85 <  //
86 <  VHbbCandidate tempMu;
87 <  VHbbCandidate tempE;
88 <  tempMu.H.jets.push_back(j1);
89 <  tempMu.H.jets.push_back(j2);
90 <  tempMu.H.fourMomentum = (j1).fourMomentum+(j2).fourMomentum;
91 <  tempMu.additionalJets = addJets;
92 <  tempE = tempMu;
93 <  TLorentzVector pMu,pE;
94 <
95 <  if (mu.size()){
96 <    for (std::vector<VHbbEvent::MuonInfo>::iterator it = mu.begin(); it !=mu.end(); ++it){
97 <      tempMu.V.muons.push_back(*it);
98 <   }
99 <  }
100 <  if (ele.size()){
101 <    for (std::vector<VHbbEvent::ElectronInfo>::iterator it = ele.begin(); it !=ele.end(); ++it){
102 <      tempE.V.electrons.push_back(*it);
103 <   }
104 <  }
105 <
106 <  if (tempMu.V.muons.size()){
107 <   candidates->push_back(tempMu);
108 <  }
109 <  if (tempE.V.electrons.size()){
110 <   candidates->push_back(tempE);
111 <  }
112 < }
113 <
114 < bool HbbCandidateFinder::findDiJets (const std::vector<VHbbEvent::SimpleJet>& jets, VHbbEvent::SimpleJet& j1, VHbbEvent::SimpleJet& j2,std::vector<VHbbEvent::SimpleJet>& addJets){
115 <  
116 < std::vector<VHbbEvent::SimpleJet> tempJets;
117 <
118 < for (unsigned int i=0 ; i< jets.size(); ++i){
119 <   if (jets[i].fourMomentum.Pt()> jetPtThreshold)
120 <     tempJets.push_back(jets[i]);
121 < }
122 <
123 < CompareBTag  bTagComparator;
124 <
125 < if (tempJets.size()<2) return false;
126 <
127 < std::sort(tempJets.begin(), tempJets.end(), bTagComparator);
128 <
129 < j1 = tempJets[0];
130 < j2 = tempJets[1];
131 < //
132 < // additional jets
133 < //
134 < if (tempJets.size()>2){
135 <   for (unsigned int i=2 ; i< tempJets.size(); ++i){
136 <     addJets.push_back(tempJets[i]);
137 <   }
138 < }
139 <  CompareJetPt ptComparator;
140 <
141 <  std::sort(addJets.begin(), addJets.end(), ptComparator);
142 < return true;
143 < }
37 >  iEvent.put(vHbbCandidates);  
38  
39 < void HbbCandidateFinder::findMuons(const std::vector<VHbbEvent::MuonInfo>& muons, std::vector<VHbbEvent::MuonInfo>& out){
40 <  /* Use:
41 < For both W -> mu nu and Z -> mu mu, we adopt the standard VBTF muon selection described in VbtfWmunuBaselineSelection. The explicit cuts are reproduced here:
148 <
149 <    We use RECO Muons that are both Global and Tracker
150 <    chi2/ndof < 10 for the global muon fit
151 <    The track associated to the muon must have
152 <        >= 1 pixel hits
153 <        >= 10 pixel + strip hits
154 <        >= 1 valid hit in the muon chambers
155 <        >= 2 muon stations
156 <        |dxy| < 0.2
157 <        |eta| < 2.4
158 <    Relative combined isolation (R) is required to be < 0.15
159 <        R = [Sum pT(trks) + Et(ECAL) + Et(HCAL)] / pT(mu) computed in a cone of radius 0.3 in eta-phi
160 <    pT(mu) > 20 GeV
161 <  */
162 <  for (std::vector<VHbbEvent::MuonInfo>::const_iterator it = muons.begin(); it!= muons.end(); ++it){
163 <    if (
164 <        (*it).nPixelHits>= 1 &&
165 <        (*it).nHits +(*it).nPixelHits >= 10 &&
166 <        //
167 <        // sta muon not saved????
168 <        (*it).ipDb<.2 &&
169 <        ((*it).hIso+(*it).eIso+(*it).tIso)/(*it).fourMomentum.Pt()<.15 &&
170 <        (*it).fourMomentum.Eta()<2.4 &&
171 <        (*it).fourMomentum.Pt()>20) {
172 <      out.push_back(*it);
173 <    }
174 <  }
39 >  if (applyFilter == false) return true;
40 >  if (vHbbCandidates->size() == 0) return false;
41 >  return true;
42   }
43  
44  
178 void HbbCandidateFinder::findElectrons(const std::vector<VHbbEvent::ElectronInfo>& electrons, std::vector<VHbbEvent::ElectronInfo>& out){
179  /*
180 We adopt the standard cut-based selection from VBTF described in detail here.
181
182    Z -> ee
183        gsf electrons
184        VBTF WP95
185        |eta|<2.5, excluding the gap 1.44 < |eta| < 1.57
186        pT(e) > 20
187
188    W -> e nu
189        gsf electrons
190        VBTF WP80
191        |eta|<2.5, excluding the gap 1.44 < |eta| < 1.57
192        pT(e) > 30
193  */
194
195  for (std::vector<VHbbEvent::ElectronInfo>::const_iterator it = electrons.begin(); it!= electrons.end(); ++it){
196    if (
197        // fake
198        //      (*it).id95>  &&
199        std::abs((*it).fourMomentum.Eta()) < 2.5 &&
200        !(      std::abs((*it).fourMomentum.Eta()) < 1.57 &&    std::abs((*it).fourMomentum.Eta()) > 1.44) &&
201        (*it).fourMomentum.Pt()>30
202        ){
203      out.push_back(*it);
204    }  
205  }
206 }
207
45  
46   //define this as a plug-in
47   DEFINE_FWK_MODULE(HbbCandidateFinder);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines