1 |
//--------------------------------------------------------------------------------------------------
|
2 |
// $Id: None.cc,v 1.3 2009/12/02 20:39:15 loizides Exp $
|
3 |
//
|
4 |
// ConversionRejectionExample
|
5 |
//
|
6 |
// Example analyzer for using the ConversionMatcher tool
|
7 |
//
|
8 |
// Authors: J.Bendavid
|
9 |
//--------------------------------------------------------------------------------------------------
|
10 |
|
11 |
#include <TMath.h>
|
12 |
#include "FWCore/Framework/interface/Frameworkfwd.h"
|
13 |
#include "FWCore/Framework/interface/EDAnalyzer.h"
|
14 |
#include "FWCore/Framework/interface/Event.h"
|
15 |
#include "FWCore/Framework/interface/MakerMacros.h"
|
16 |
#include "FWCore/ParameterSet/interface/ParameterSet.h"
|
17 |
#include "DataFormats/Common/interface/Handle.h"
|
18 |
#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
|
19 |
#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
|
20 |
#include "MitEdm/ConversionRejection/interface/ConversionMatcher.h"
|
21 |
|
22 |
namespace mitedm
|
23 |
{
|
24 |
class ConversionRejectionExample : public edm::EDAnalyzer {
|
25 |
public:
|
26 |
explicit ConversionRejectionExample(const edm::ParameterSet&) {}
|
27 |
~ConversionRejectionExample() {};
|
28 |
|
29 |
private:
|
30 |
virtual void beginJob() {}
|
31 |
virtual void analyze(const edm::Event &e, const edm::EventSetup &es);
|
32 |
virtual void endJob() {}
|
33 |
};
|
34 |
}
|
35 |
|
36 |
using namespace mitedm;
|
37 |
using namespace edm;
|
38 |
|
39 |
//define this as a plug-in
|
40 |
DEFINE_FWK_MODULE(ConversionRejectionExample);
|
41 |
|
42 |
void ConversionRejectionExample::analyze(const edm::Event &e, const edm::EventSetup &es)
|
43 |
{
|
44 |
|
45 |
//get electron collection
|
46 |
Handle<reco::GsfElectronCollection> hElectrons;
|
47 |
e.getByLabel("gsfElectrons", hElectrons);
|
48 |
const reco::GsfElectronCollection *electronCol = hElectrons.product();
|
49 |
|
50 |
//get collection of reconstructed conversions
|
51 |
edm::Handle<std::vector<mitedm::DecayPart> > hConversions;
|
52 |
e.getByLabel("mvfConversionRemoval", hConversions);
|
53 |
|
54 |
//initialize ConversionMatcher with default cuts
|
55 |
mitedm::ConversionMatcher convMatcher;
|
56 |
|
57 |
for (reco::GsfElectronCollection::const_iterator it = electronCol->begin(); it!=electronCol->end(); ++it) {
|
58 |
|
59 |
//check if electron matches a conversion passing all of the cuts (then the electron should be rejected)
|
60 |
bool matchesGoodConversion = convMatcher.matchesGoodConversion(*it,hConversions);
|
61 |
printf("matchesGoodConversion = %i\n", matchesGoodConversion);
|
62 |
|
63 |
//dump some info on the good conversions
|
64 |
std::vector<edm::Ptr<DecayPart> > goodConversions = convMatcher.goodMatchedConversions(*it,hConversions);
|
65 |
for (std::vector<edm::Ptr<DecayPart> >::const_iterator jt = goodConversions.begin(); jt!=goodConversions.end(); ++jt) {
|
66 |
const DecayPart *conv = jt->get();
|
67 |
printf("Good Matched Conversion %i:\n",jt-goodConversions.begin());
|
68 |
printf(" radius = %5f\n",conv->position().rho());
|
69 |
printf(" lxy = %5f\n",conv->lxy());
|
70 |
printf(" lz = %5f\n",conv->lz());
|
71 |
printf(" chi2 = %5f\n",conv->chi2());
|
72 |
printf(" ndof = %i\n",conv->ndof());
|
73 |
printf(" prob = %5f\n",TMath::Prob(conv->chi2(),conv->ndof()));
|
74 |
|
75 |
//loop through daughters
|
76 |
for (int i=0; i<conv->nStableChild(); ++i) {
|
77 |
printf(" Daughter %i\n",i);
|
78 |
const StableData &sd = conv->getStableData(i);
|
79 |
const StablePart *sp = dynamic_cast<const StablePart*>(sd.originalPtr().get());
|
80 |
const reco::Track *trk = sp->track();
|
81 |
|
82 |
printf(" Hits before vertex = %i\n", sd.nWrongHits());
|
83 |
printf(" Track Algo = %i\n", trk->algo());
|
84 |
printf(" Track chi2 = %5f\n",trk->chi2());
|
85 |
printf(" Track ndof = %5f\n", trk->ndof());
|
86 |
printf(" Track prob = %5f\n", TMath::Prob(trk->chi2(),trk->ndof()));
|
87 |
}
|
88 |
}
|
89 |
|
90 |
//dump some info on all matched conversions
|
91 |
std::vector<edm::Ptr<DecayPart> > allConversions = convMatcher.allMatchedConversions(*it,hConversions);
|
92 |
for (std::vector<edm::Ptr<DecayPart> >::const_iterator jt = allConversions.begin(); jt!=allConversions.end(); ++jt) {
|
93 |
const DecayPart *conv = jt->get();
|
94 |
printf("Matched Conversion %i:\n",jt-allConversions.begin());
|
95 |
printf(" radius = %5f\n",conv->position().rho());
|
96 |
printf(" prob = %5f\n",TMath::Prob(conv->chi2(),conv->ndof()));
|
97 |
}
|
98 |
}
|
99 |
|
100 |
} |