ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerBasicClusters.cc
Revision: 1.22
Committed: Thu Aug 9 21:16:05 2012 UTC (12 years, 8 months ago) by paus
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_032, Mit_031, Mit_030, Mit_029c, Mit_029b, Mit_030_pre1, Mit_029a, Mit_029, HEAD
Changes since 1.21: +39 -43 lines
Log Message:
For version 029.

File Contents

# Content
1 // $Id: FillerBasicClusters.cc,v 1.21 2012/07/16 13:13:40 bendavid Exp $
2
3 #include "MitProd/TreeFiller/interface/FillerBasicClusters.h"
4 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
5 #include "DataFormats/CaloRecHit/interface/CaloCluster.h"
6 #include "MitAna/DataTree/interface/BasicClusterCol.h"
7 #include "MitAna/DataTree/interface/Names.h"
8 #include "MitProd/ObjectService/interface/ObjectService.h"
9 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h"
10 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h"
11 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
12 #include "RecoEgamma/EgammaTools/interface/EcalClusterLocal.h"
13 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h"
14 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
15 #include "Geometry/Records/interface/CaloGeometryRecord.h"
16 #include "RecoEgamma/EgammaTools/interface/ggPFClusters.h"
17
18 using namespace std;
19 using namespace edm;
20 using namespace mithep;
21
22 //--------------------------------------------------------------------------------------------------
23 FillerBasicClusters::FillerBasicClusters(const ParameterSet &cfg, const char *name, bool active) :
24 BaseFiller(cfg,name,active),
25 edmName_ (Conf().getUntrackedParameter<string>("edmName","hybridSuperClusters")),
26 mitName_ (Conf().getUntrackedParameter<string>("mitName","BasicClusters")),
27 barrelEcalRecHitName_(Conf().getUntrackedParameter<string>("barrelEcalRecHitName","")),
28 endcapEcalRecHitName_(Conf().getUntrackedParameter<string>("endcapEcalRecHitName","")),
29 basicClusterMapName_ (Conf().getUntrackedParameter<string>("basicClusterMapName",
30 "BasicClusterMap")),
31 pfClusters_ (Conf().getUntrackedParameter<bool>("pfClusters",false)),
32 basicClusters_ (new mithep::BasicClusterArr(100)),
33 basicClusterMap_ (new mithep::BasicClusterMap)
34 {
35 // Constructor.
36 }
37
38 //--------------------------------------------------------------------------------------------------
39 FillerBasicClusters::~FillerBasicClusters()
40 {
41 // Destructor.
42
43 delete basicClusters_;
44 delete basicClusterMap_;
45 }
46
47 //--------------------------------------------------------------------------------------------------
48 void FillerBasicClusters::BookDataBlock(TreeWriter &tws)
49 {
50 // Add BasicCluster branch and the BasicClusterMap to tree.
51
52 tws.AddBranch(mitName_,&basicClusters_);
53 OS()->add<BasicClusterArr>(basicClusters_,mitName_);
54
55 if (!basicClusterMapName_.empty()) {
56 basicClusterMap_->SetBrName(mitName_);
57 OS()->add<BasicClusterMap>(basicClusterMap_,basicClusterMapName_);
58 }
59 }
60
61 //--------------------------------------------------------------------------------------------------
62 void FillerBasicClusters::FillDataBlock(const edm::Event &event,
63 const edm::EventSetup &setup)
64 {
65 // Fill the BasicCluster information into our structures.
66
67 basicClusters_ ->Delete();
68 basicClusterMap_->Reset();
69
70 Handle<reco::CaloClusterCollection> hBasicClusterProduct;
71 GetProduct(edmName_, hBasicClusterProduct, event);
72 basicClusterMap_->SetEdmProductId(hBasicClusterProduct.id().id());
73 const reco::CaloClusterCollection &inBasicClusters = *(hBasicClusterProduct.product());
74
75 edm::Handle< EcalRecHitCollection > pEBRecHits;
76 event.getByLabel(barrelEcalRecHitName_, pEBRecHits );
77 edm::Handle< EcalRecHitCollection > pEERecHits;
78 event.getByLabel( endcapEcalRecHitName_, pEERecHits );
79
80 edm::ESHandle<CaloGeometry> pGeometry;
81 setup.get<CaloGeometryRecord>().get(pGeometry);
82
83 const CaloSubdetectorGeometry *geometryEB = pGeometry->getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
84 const CaloSubdetectorGeometry *geometryEE = pGeometry->getSubdetectorGeometry(DetId::Ecal, EcalEndcap);
85
86 EcalClusterLazyTools lazyTools(event, setup, edm::InputTag(barrelEcalRecHitName_),
87 edm::InputTag(endcapEcalRecHitName_));
88
89 ggPFClusters pfclusters(pEBRecHits, pEERecHits, geometryEB, geometryEE);
90
91 EcalClusterLocal local;
92
93 //loop over rechits and make map of energy values
94 std::map<DetId,float> hitEnergies;
95
96 for (EcalRecHitCollection::const_iterator it = pEBRecHits->begin(); it!=pEBRecHits->end(); ++it) {
97 hitEnergies.insert(std::pair<DetId,float>(it->id(),it->energy()));
98 }
99
100 for (EcalRecHitCollection::const_iterator it = pEERecHits->begin(); it!=pEERecHits->end(); ++it) {
101 hitEnergies.insert(std::pair<DetId,float>(it->id(),it->energy()));
102 }
103
104 // loop through all basic clusters
105 for (reco::CaloClusterCollection::const_iterator inBC = inBasicClusters.begin();
106 inBC != inBasicClusters.end(); ++inBC) {
107
108 mithep::BasicCluster *outBasicCluster = basicClusters_->Allocate();
109 new (outBasicCluster) mithep::BasicCluster();
110
111 outBasicCluster->SetXYZ (inBC->x(),inBC->y(),inBC->z());
112 outBasicCluster->SetEnergy(inBC->energy());
113 outBasicCluster->SetNHits (inBC->size());
114
115 outBasicCluster->SetCovEtaPhi (lazyTools.covariances(*inBC)[1]);
116 outBasicCluster->SetCoviEtaiEta(lazyTools.localCovariances(*inBC)[0]);
117 outBasicCluster->SetCoviEtaiPhi(lazyTools.localCovariances(*inBC)[1]);
118 outBasicCluster->SetCoviPhiiPhi(lazyTools.localCovariances(*inBC)[2]);
119 outBasicCluster->SetZernike20 (lazyTools.zernike20(*inBC));
120 outBasicCluster->SetZernike42 (lazyTools.zernike42(*inBC));
121 outBasicCluster->SetEtaLat (lazyTools.lat(*inBC)[0]);
122 outBasicCluster->SetPhiLat (lazyTools.lat(*inBC)[1]);
123 outBasicCluster->SetLat (lazyTools.lat(*inBC)[2]);
124 outBasicCluster->SetE1x3 (lazyTools.e1x3(*inBC));
125 outBasicCluster->SetE3x1 (lazyTools.e3x1(*inBC));
126 outBasicCluster->SetE1x5 (lazyTools.e1x5(*inBC));
127 outBasicCluster->SetE2x2 (lazyTools.e2x2(*inBC));
128 outBasicCluster->SetE3x2 (lazyTools.e3x2(*inBC));
129 outBasicCluster->SetE3x3 (lazyTools.e3x3(*inBC));
130 outBasicCluster->SetE4x4 (lazyTools.e4x4(*inBC));
131 outBasicCluster->SetE5x5 (lazyTools.e5x5(*inBC));
132 outBasicCluster->SetE2x5Right (lazyTools.e2x5Right(*inBC));
133 outBasicCluster->SetE2x5Left (lazyTools.e2x5Left(*inBC));
134 outBasicCluster->SetE2x5Top (lazyTools.e2x5Top(*inBC));
135 outBasicCluster->SetE2x5Bottom (lazyTools.e2x5Bottom(*inBC));
136 outBasicCluster->SetE2x5Max (lazyTools.e2x5Max(*inBC));
137 outBasicCluster->SetELeft (lazyTools.eLeft(*inBC));
138 outBasicCluster->SetERight (lazyTools.eRight(*inBC));
139 outBasicCluster->SetETop (lazyTools.eTop(*inBC));
140 outBasicCluster->SetEBottom (lazyTools.eBottom(*inBC));
141 outBasicCluster->SetEMax (lazyTools.eMax(*inBC));
142 outBasicCluster->SetE2nd (lazyTools.e2nd(*inBC));
143 outBasicCluster->SetCovEtaEta (lazyTools.covariances(*inBC)[0]);
144 outBasicCluster->SetCovPhiPhi (lazyTools.covariances(*inBC)[2]);
145
146 //ecal timing information
147 const reco::BasicCluster *inbcd = dynamic_cast<const reco::BasicCluster*>(&*inBC);
148
149 if (inbcd) {
150 outBasicCluster->SetTime(lazyTools.BasicClusterTime(*inbcd, event));
151 outBasicCluster->SetSeedTime(lazyTools.BasicClusterSeedTime(*inbcd));
152 }
153
154 //local coordinates
155 if (inBC->hitsAndFractions().at(0).first.subdetId()==EcalBarrel) {
156 float etacry, phicry, thetatilt, phitilt;
157 int ieta, iphi;
158 local.localCoordsEB(*inBC,setup,etacry,phicry,ieta,iphi,thetatilt,phitilt);
159 outBasicCluster->SetEtaCry(etacry);
160 outBasicCluster->SetPhiCry(phicry);
161 outBasicCluster->SetIEta(ieta);
162 outBasicCluster->SetIPhi(iphi);
163 outBasicCluster->SetThetaAxis(thetatilt);
164 outBasicCluster->SetPhiAxis(phitilt);
165
166 EBDetId edet(inBC->hitsAndFractions().at(0).first);
167
168 outBasicCluster->SetSeedIEta(edet.ieta());
169 outBasicCluster->SetSeedIPhi(edet.iphi());
170 }
171 else {
172 float xcry, ycry, thetatilt, phitilt;
173 int ix, iy;
174 local.localCoordsEE(*inBC,setup,xcry,ycry,ix,iy,thetatilt,phitilt);
175 outBasicCluster->SetXCry(xcry);
176 outBasicCluster->SetYCry(ycry);
177 outBasicCluster->SetIX(ix);
178 outBasicCluster->SetIY(iy);
179 outBasicCluster->SetThetaAxis(thetatilt);
180 outBasicCluster->SetPhiAxis(phitilt);
181
182 EEDetId edet(inBC->hitsAndFractions().at(0).first);
183
184 outBasicCluster->SetSeedIX(edet.ix());
185 outBasicCluster->SetSeedIY(edet.iy());
186 }
187
188 // add basic clusters to the map
189 reco::CaloClusterPtr thePtr(hBasicClusterProduct, inBC-inBasicClusters.begin());
190 basicClusterMap_->Add(thePtr, outBasicCluster);
191
192 }
193 basicClusters_->Trim();
194 }