ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/Morgan/src/ElectronAnalyzer.cc
Revision: 1.2
Committed: Mon Dec 1 15:58:05 2008 UTC (16 years, 5 months ago) by lethuill
Content type: text/plain
Branch: MAIN
Changes since 1.1: +107 -26 lines
Log Message:
Proto-version for use with different data formats (RECO/AOD/PAT/PAT+AOD)
Replace the absolute path /UserCode/Morgan with a relative one

File Contents

# User Rev Content
1 lethuill 1.2 #include "../interface/ElectronAnalyzer.h"
2 lethuill 1.1
3     using namespace std;
4     using namespace reco;
5     using namespace edm;
6    
7     ElectronAnalyzer::ElectronAnalyzer(const edm::ParameterSet& producersNames):verbosity_(0)
8     {
9 lethuill 1.2 dataType_ = producersNames.getUntrackedParameter<string>("dataType","unknown");
10 lethuill 1.1 electronProducer_ = producersNames.getParameter<edm::InputTag>("electronProducer");
11     }
12    
13     ElectronAnalyzer::ElectronAnalyzer(const edm::ParameterSet& producersNames, int verbosity):verbosity_(verbosity)
14     {
15 lethuill 1.2 dataType_ = producersNames.getUntrackedParameter<string>("dataType","unknown");
16 lethuill 1.1 electronProducer_ = producersNames.getParameter<edm::InputTag>("electronProducer");
17     }
18    
19     ElectronAnalyzer::~ElectronAnalyzer()
20     {
21     }
22    
23 lethuill 1.2 void ElectronAnalyzer::Process(const edm::Event& iEvent, TClonesArray* rootElectrons, EcalClusterLazyTools& lazyTools )
24 lethuill 1.1 {
25    
26 lethuill 1.2 edm::Handle< vector < pat::Electron > > recoElectrons;
27     iEvent.getByLabel(electronProducer_, recoElectrons);
28     if(verbosity_>1) std::cout << " Number of electrons = " << recoElectrons->size() << " Label: " << electronProducer_.label() << " Instance: " << electronProducer_.instance() << std::endl;
29     for (unsigned int j=0; j<recoElectrons->size(); j++)
30     {
31     TRootElectron localElectron(TLorentzVector((*recoElectrons)[j].px(),(*recoElectrons)[j].py(),(*recoElectrons)[j].pz(),(*recoElectrons)[j].energy()),
32     TVector3((*recoElectrons)[j].vx(),(*recoElectrons)[j].vy(),(*recoElectrons)[j].vz()),
33     abs((*recoElectrons)[j].pdgId()),
34     (*recoElectrons)[j].charge()
35     );
36    
37     reco::SuperClusterRef sclRef = (*recoElectrons)[j].superCluster();
38     reco::BasicClusterRef seedRef = sclRef->seed();
39     reco::GsfTrackRef gsfTrackRef = (*recoElectrons)[j].gsfTrack();
40     localElectron.setD0(gsfTrackRef->d0());
41     localElectron.setD0Error(gsfTrackRef->d0Error());
42     localElectron.setDz(gsfTrackRef->dz());
43     localElectron.setDzError(gsfTrackRef->dzError());
44     localElectron.setEtaError(gsfTrackRef->etaError());
45     localElectron.setPhiError(gsfTrackRef->phiError());
46     localElectron.setPError(gsfTrackRef->covariance(0,0));
47     localElectron.setNormalizedChi2(gsfTrackRef->normalizedChi2());
48     localElectron.setSuperClusterEnergy(sclRef->energy());
49     localElectron.setEnergySeed(seedRef->energy());
50     localElectron.setClassification ((*recoElectrons)[j].classification ());
51     Float_t eta = (*recoElectrons)[j].caloPosition ().eta ();
52     if (fabs (eta) <= 1.4442) {
53     localElectron.setPosition (1);
54     }
55     else if (fabs (eta) > 1.4442 & fabs (eta) < 1.5560) {
56     localElectron.setPosition (0);
57     }
58     else if (fabs (eta) >= 1.5560) {
59     localElectron.setPosition (-1);
60     }
61     localElectron.setCaloEnergy ((*recoElectrons)[j].caloEnergy ());
62     localElectron.setCaloEnergyError ((*recoElectrons)[j].caloEnergyError ());
63     localElectron.setDEtaScT_Calo ((*recoElectrons)[j].deltaEtaSeedClusterTrackAtCalo ());
64     localElectron.setDEtaScT_Vtx ((*recoElectrons)[j].deltaEtaSuperClusterTrackAtVtx ());
65     localElectron.setDPhiScT_Calo ((*recoElectrons)[j].deltaPhiSeedClusterTrackAtCalo ());
66     localElectron.setDPhiScT_Vtx ((*recoElectrons)[j].deltaPhiSuperClusterTrackAtVtx ());
67     localElectron.setEnergySeedOverPout ((*recoElectrons)[j].eSeedClusterOverPout ());
68     localElectron.setEnergySeedOverP ((*recoElectrons)[j].eSuperClusterOverP ());
69     localElectron.setHadronicOverEM ((*recoElectrons)[j].hadronicOverEm ());
70     localElectron.setNbClusters ((*recoElectrons)[j].numberOfClusters ());
71     pair < Float_t, Int_t > varIso;
72     varIso = (*recoElectrons)[j].trackerIsoDeposit()->depositAndCountWithin(0.1);
73     localElectron.setTracksIsolation01(varIso.first - gsfTrackRef->p() );
74     localElectron.setNbTracks01(varIso.second);
75     varIso = (*recoElectrons)[j].trackerIsoDeposit()->depositAndCountWithin(0.2);
76     localElectron.setTracksIsolation02(varIso.first - gsfTrackRef->p() );
77     localElectron.setNbTracks02(varIso.second);
78     varIso = (*recoElectrons)[j].trackerIsoDeposit()->depositAndCountWithin(0.3);
79     localElectron.setTracksIsolation03(varIso.first - gsfTrackRef->p() );
80     localElectron.setNbTracks03(varIso.second);
81     varIso = (*recoElectrons)[j].trackerIsoDeposit()->depositAndCountWithin(0.4);
82     localElectron.setTracksIsolation04(varIso.first - gsfTrackRef->p() );
83     localElectron.setNbTracks04(varIso.second);
84     varIso = (*recoElectrons)[j].trackerIsoDeposit()->depositAndCountWithin(0.5);
85     localElectron.setTracksIsolation05(varIso.first - gsfTrackRef->p() );
86     localElectron.setNbTracks05(varIso.second);
87     localElectron.setEnergyCaloIsolation05((*recoElectrons)[j].ecalIsoDeposit()->depositAndCountWithin(0.5).first + (*recoElectrons)[j].hcalIsoDeposit()->depositAndCountWithin(0.5).first - sclRef->rawEnergy());
88    
89     reco::basicCluster_iterator cluster;
90     Float_t SEtaEta = 0;
91     Float_t SPhiPhi = 0;
92     Float_t ConeSizeCalo = 0;
93     for (cluster = (*(sclRef)).clustersBegin (); cluster != (*(sclRef)).clustersEnd (); ++cluster)
94 lethuill 1.1 {
95 lethuill 1.2 SEtaEta +=
96     pow ((*cluster)->eta () - seedRef->eta (), 2.) * ((*cluster)->energy () / seedRef->energy ());
97     SPhiPhi +=
98     pow ((*cluster)->phi () - seedRef->phi (), 2.) * ((*cluster)->energy () / seedRef->energy ());
99     Float_t DR = localElectron.DeltaR(TLorentzVector((*cluster)->position().x(),(*cluster)->position().y(),(*cluster)->position().z(),0));
100     if (DR > ConeSizeCalo)
101     ConeSizeCalo = DR;
102 lethuill 1.1 }
103 lethuill 1.2 localElectron.setSigmaEtaEta(SEtaEta);
104     localElectron.setSigmaPhiPhi(SPhiPhi);
105     localElectron.setConeSizeCalo(ConeSizeCalo);
106    
107     localElectron.setDPhiOut (abs ((*recoElectrons)[j].trackMomentumAtCalo().phi() - sclRef->phi()));
108     localElectron.setDPhiIn (abs ((*recoElectrons)[j].trackMomentumAtVtx().phi() - sclRef->phi()));
109     localElectron.setDEtaIn (abs ((*recoElectrons)[j].trackMomentumAtVtx().eta() - sclRef->eta()));
110    
111     localElectron.setElectronIdPTDRLoose((*recoElectrons)[j].leptonID("ptdrLoose"));
112     localElectron.setElectronIdPTDRMedium((*recoElectrons)[j].leptonID("ptdrMedium"));
113     localElectron.setElectronIdPTDRTight((*recoElectrons)[j].leptonID("ptdrTight"));
114     localElectron.setElectronIdCutBasedRobust((*recoElectrons)[j].leptonID("robust"));
115     localElectron.setElectronIdCutBasedLoose((*recoElectrons)[j].leptonID("loose"));
116     localElectron.setElectronIdCutBasedTight((*recoElectrons)[j].leptonID("tight"));
117     localElectron.setElectronIdLikelihood((*recoElectrons)[j].leptonID("likelihood"));
118     localElectron.setElectronIdNeuralNet((*recoElectrons)[j].leptonID("neuralnet"));
119    
120     // Here we need to use some objects out the PAT
121     // seedRef
122     localElectron.setE2x2(lazyTools.e2x2(*seedRef));
123     localElectron.setE3x3(lazyTools.e3x3(*seedRef));
124     localElectron.setE5x5(lazyTools.e5x5(*seedRef));
125     localElectron.setEnergyMax(lazyTools.eMax(*seedRef));
126    
127    
128     new( (*rootElectrons)[j] ) TRootElectron(localElectron);
129     if(verbosity_>2) cout << " ["<< setw(3) << j << "] " << localElectron << endl;
130     }
131 lethuill 1.1
132     }