ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronCleaningMod.cc
Revision: 1.9
Committed: Mon Jun 15 15:00:21 2009 UTC (15 years, 10 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_014b, Mit_014a, Mit_014, Mit_014pre3, Mit_014pre2, Mit_014pre1, Mit_013d, Mit_013c, Mit_013b, Mit_013a, Mit_013, Mit_013pre1, Mit_012i, Mit_012g, Mit_012f, Mit_012e, Mit_012d, Mit_012c, Mit_012b, Mit_012a, Mit_012, Mit_011a, Mit_011, Mit_010a, Mit_010, Mit_009c, Mit_009b
Changes since 1.8: +4 -1 lines
Log Message:
Added proper fwd defs plus split up complilation of MitAna/DataTree LinkDefs.

File Contents

# User Rev Content
1 loizides 1.9 // $Id: ElectronCleaningMod.cc,v 1.8 2009/02/18 15:52:33 loizides Exp $
2 loizides 1.1
3     #include "MitPhysics/Mods/interface/ElectronCleaningMod.h"
4 loizides 1.3 #include "MitCommon/MathTools/interface/MathUtils.h"
5 loizides 1.9 #include "MitAna/DataTree/interface/ElectronCol.h"
6     #include "MitAna/DataTree/interface/MuonCol.h"
7     #include "MitAna/DataTree/interface/Track.h"
8 loizides 1.3 #include "MitPhysics/Init/interface/ModNames.h"
9 loizides 1.1
10     using namespace mithep;
11    
12     ClassImp(mithep::ElectronCleaningMod)
13    
14     //--------------------------------------------------------------------------------------------------
15 loizides 1.4 ElectronCleaningMod::ElectronCleaningMod(const char *name, const char *title) :
16 loizides 1.1 BaseMod(name,title),
17 loizides 1.3 fGoodElectronsName(ModNames::gkGoodElectronsName),
18     fCleanMuonsName(ModNames::gkCleanMuonsName),
19 loizides 1.4 fCleanElectronsName(ModNames::gkCleanElectronsName)
20 loizides 1.1 {
21     // Constructor.
22     }
23    
24     //--------------------------------------------------------------------------------------------------
25     void ElectronCleaningMod::Process()
26     {
27 loizides 1.4 // Process entries of the tree.
28 loizides 1.1
29 loizides 1.4 // get input collection
30 loizides 1.7 const MuonCol *CleanMuons = GetObjThisEvt<MuonCol>(fCleanMuonsName);
31     const ElectronCol *GoodElectrons = GetObjThisEvt<ElectronCol>(fGoodElectronsName);
32 loizides 1.1
33 loizides 1.4 // Go through all electrons and remove electron overlaps with muons and duplicates.
34     std::vector<const Electron*> CleanElTemp;
35 loizides 1.1 for (UInt_t i=0; i<GoodElectrons->GetEntries(); ++i) {
36 loizides 1.4 const Electron *e = GoodElectrons->At(i);
37 loizides 1.1
38 loizides 1.8 FourVectorM mom(e->Mom());
39 loizides 1.4 const Track *trtrack = e->TrackerTrk();
40    
41     // Check whether it overlaps with a good muon: If the muon and electron both have
42     // tracker tracks then compare the tracks, otherwise
43     Bool_t isMuonOverlap = kFALSE;
44 loizides 1.7 UInt_t n = CleanMuons->GetEntries();
45     for (UInt_t j=0; j<n; ++j) {
46 loizides 1.4
47     if (trtrack && CleanMuons->At(j)->TrackerTrk()) {
48     if (CleanMuons->At(j)->TrackerTrk() == trtrack) {
49     isMuonOverlap = kTRUE;
50     break;
51     }
52 loizides 1.1 } else {
53 loizides 1.4 Double_t deltaR = MathUtils::DeltaR(CleanMuons->At(j)->Mom(), mom);
54 loizides 1.1 if (deltaR < 0.1) {
55 loizides 1.4 isMuonOverlap = kTRUE;
56 loizides 1.1 break;
57     }
58     }
59     }
60 loizides 1.4
61     if (isMuonOverlap)
62     continue;
63    
64     // Check whether it overlaps with another electron candidate:
65     // Here I check whether we have two electron candidates with the same super cluster
66     // or two electron candidates with the same track. At the end we also check deltaR
67     // to be sure. If there is a duplicate we swap the old one with the new one if the new
68     // one has E/P closer to 1.0.
69     bool isElectronOverlap = kFALSE;
70     for (UInt_t j=0; j<CleanElTemp.size(); ++j) {
71    
72     if (e->SCluster() == CleanElTemp[j]->SCluster() ||
73     e->Trk() == CleanElTemp[j]->Trk())
74     isElectronOverlap = kTRUE;
75    
76     if (!isElectronOverlap) {
77     Double_t deltaR = MathUtils::DeltaR(CleanElTemp[j]->Mom(), mom);
78     if (deltaR < 0.1)
79 ceballos 1.5 isElectronOverlap = kTRUE;
80 loizides 1.4 }
81 loizides 1.1
82     if (isElectronOverlap) {
83 loizides 1.4 if (TMath::Abs(CleanElTemp[j]->ESuperClusterOverP() - 1) >
84     TMath::Abs(e->ESuperClusterOverP() - 1)) {
85     CleanElTemp[j] = e;
86 loizides 1.1 }
87     break;
88     }
89     }
90    
91 loizides 1.4 if (isElectronOverlap)
92     continue;
93 loizides 1.1
94 loizides 1.4 // if no overlaps then add to clean electrons
95     CleanElTemp.push_back(GoodElectrons->At(i));
96     }
97 loizides 1.1
98 loizides 1.4 // Fill the electron array with the contents of the vector:
99     ElectronOArr *CleanElectrons = new ElectronOArr;
100     CleanElectrons->SetName(fCleanElectronsName);
101 loizides 1.1
102 loizides 1.4 for (UInt_t j=0; j<CleanElTemp.size(); ++j)
103     CleanElectrons->Add(CleanElTemp[j]);
104 loizides 1.6 CleanElectrons->Sort();
105 loizides 1.4
106     // add to event for other modules to use
107     AddObjThisEvt(CleanElectrons);
108 loizides 1.1 }