ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/auterman/RA2/Selection/src/Selection.cc
Revision: 1.2
Committed: Wed Nov 11 13:05:23 2009 UTC (15 years, 6 months ago) by auterman
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +70 -17 lines
Log Message:
adding examples

File Contents

# User Rev Content
1 auterman 1.1
2     #include "RA2/Selection/interface/Selection.h"
3 auterman 1.2 #include <iostream>
4     #include <iomanip>
5 auterman 1.1
6     Selection::Selection(const edm::ParameterSet& iConfig) :
7     sequence_( iConfig.getParameter<edm::ParameterSet>("selections") ),
8 auterman 1.2 filterSelection_( iConfig.getParameter<std::vector<std::string> >("filterSelection") ),
9     weightName_(iConfig.getParameter<edm::InputTag>("weightName") ),
10     Nevents(0)
11 auterman 1.1 {
12     // Translate filterSelection strings into selector indices
13 auterman 1.2 //filterSelectionIndices_.reserve(filterSelection_.size());
14     for ( size_t i=0; i<filterSelection_.size(); ++i ) {
15 auterman 1.1 filterSelectionIndices_.push_back(sequence_.selectorIndex(filterSelection_[i]));
16 auterman 1.2 SelectionStats_.push_back( Selection::TStatistics() );
17     }
18    
19 auterman 1.1 // List all selectors and selection variables
20     edm::LogVerbatim("Selection") << "Selectors are:" << std::endl;
21     for ( std::vector<const SusyEventSelector*>::const_iterator it = sequence_.selectors().begin();
22     it != sequence_.selectors().end(); ++it )
23     {
24     edm::LogVerbatim("Selection") << " * " << (*it)->name()
25     << " selects on following "
26     << (*it)->numberOfVariables() << " variable(s):";
27     for ( unsigned int i=0; i<(*it)->numberOfVariables(); ++i )
28     edm::LogVerbatim("Selection") << " - " << (*it)->variableNames()[i];
29     edm::LogVerbatim("Selection") << std::endl;
30     }
31    
32    
33     }
34    
35    
36     //________________________________________________________________________________________
37     Selection::~Selection() { }
38    
39    
40     // ------------ method called on each new Event ------------
41     bool
42     Selection::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
43     {
44     // Retrieve the decision of each selector module
45     SelectorDecisions decisions = sequence_.decisions(iEvent);
46 auterman 1.2
47     edm::Handle< double > event_weight;
48     iEvent.getByLabel(weightName_, event_weight);
49     weight_ = (event_weight.isValid() ? (*event_weight) : 1.0);
50     ++Nevents;
51 auterman 1.1
52     bool dec(true);
53 auterman 1.2 for ( size_t i=0; i<filterSelectionIndices_.size(); ++i ){ // only "filter selection"
54     //Filter decision
55 auterman 1.1 dec = dec && decisions.decision(filterSelectionIndices_[i]);
56 auterman 1.2
57     //Statistics
58     SelectionStats_[i].NTotal += weight_;
59     if (decisions.decision(i)) SelectionStats_[i].NSelected += weight_;
60     if (decisions.cumulativeDecision(i)) SelectionStats_[i].NCumulative += weight_;
61     if (decisions.complementaryDecision(i)){
62     SelectionStats_[i].Nminus1total += weight_;
63     if (decisions.decision(i)) SelectionStats_[i].Nminus1 += weight_;
64     }
65     }
66 auterman 1.1
67 auterman 1.2 // Cutflow-Analysis
68     /*
69     std::ostringstream dbg;
70     dbg << "selector decisions " << std::endl
71     << " name, 2xdecision, 2xcompl. decision, 2xcumul. decision" << std::endl;
72     for ( size_t i=0; i<filterSelectionIndices_.size(); ++i ) {
73     std::string name = sequence_.selectorName(i);
74     size_t idxFromName = sequence_.selectorIndex(name);
75     dbg << " " << name
76     << " " << decisions.decision(i)
77     << " " << decisions.decision(idxFromName)
78     << " " << decisions.complementaryDecision(i)
79     << " " << decisions.complementaryDecision(idxFromName)
80     << " " << decisions.cumulativeDecision(i)
81     << " " << decisions.cumulativeDecision(idxFromName)
82     << std::endl;
83     }
84     dbg << " global decision = ("<<dec<<") " << decisions.globalDecision();
85     std::cout << dbg.str() <<std::endl;
86    
87     std::ostringstream dbg1;
88     std::vector<double> vars = sequence_.values();
89     dbg1 << "All variable values" << std::endl;
90     for ( size_t i=0; i<sequence_.variableNames().size(); ++i ) {
91     dbg1 << sequence_.variableNames()[i] << " " << vars[i] << std::endl;
92     }
93     */
94 auterman 1.1 return dec;
95    
96     }
97    
98     //________________________________________________________________________________________
99     // Called once per job, at start
100     void
101     Selection::beginJob(const edm::EventSetup&) {}
102    
103     //________________________________________________________________________________________
104     // Called once per job, at end
105    
106     void
107     Selection::endJob()
108     {
109 auterman 1.2 std::ostringstream dbg;
110     dbg << "\nStatistical CutFlow Analysis\n"
111     << "----------------------------\n";
112     if (SelectionStats_.size()>0) {
113     dbg << "Total events = " << SelectionStats_[0].NTotal
114     << ", average weight = " << SelectionStats_[0].NTotal/Nevents<<"\n";
115     }
116     dbg << " variable cut (eff) n-1 (eff) cumulative (eff)";
117     for ( size_t i=0; i<filterSelectionIndices_.size(); ++i )
118     dbg << "\n"
119     << std::setw(20) << sequence_.selectorName(i)
120     << " " <<std::setw(10)<< SelectionStats_[i].NSelected << " (" << std::setw(10) << SelectionStats_[i].Eff()<<")"
121     << " " <<std::setw(10)<< SelectionStats_[i].Nminus1total << " (" <<std::setw(10) << SelectionStats_[i].EffNminus1()<<")"
122     << " " <<std::setw(10)<< SelectionStats_[i].NCumulative << " (" <<std::setw(10) << SelectionStats_[i].EffCumulative()<<")";
123     //edm::LogVerbatim("Selection") << dbg.str() << std::endl;
124     std::cout << dbg.str() << std::endl;
125 auterman 1.1 }
126    
127    
128     //define this as a plug-in
129     DEFINE_FWK_MODULE(Selection);