ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerBasicClusters.cc
Revision: 1.21
Committed: Mon Jul 16 13:13:40 2012 UTC (12 years, 9 months ago) by bendavid
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_029_pre1
Changes since 1.20: +22 -122 lines
Log Message:
minimal changes for 53x

File Contents

# User Rev Content
1 bendavid 1.21 // $Id: FillerBasicClusters.cc,v 1.20 2012/05/05 16:49:59 paus Exp $
2 sixie 1.1
3     #include "MitProd/TreeFiller/interface/FillerBasicClusters.h"
4 bendavid 1.7 #include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
5     #include "DataFormats/CaloRecHit/interface/CaloCluster.h"
6 loizides 1.6 #include "MitAna/DataTree/interface/BasicClusterCol.h"
7     #include "MitAna/DataTree/interface/Names.h"
8     #include "MitProd/ObjectService/interface/ObjectService.h"
9 sixie 1.11 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h"
10 peveraer 1.12 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h"
11     #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
12 paus 1.18 #include "RecoEgamma/EgammaTools/interface/EcalClusterLocal.h"
13 paus 1.20 #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 sixie 1.1
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 sixie 1.11 barrelEcalRecHitName_(Conf().getUntrackedParameter<string>("barrelEcalRecHitName","")),
28     endcapEcalRecHitName_(Conf().getUntrackedParameter<string>("endcapEcalRecHitName","")),
29 sixie 1.1 basicClusterMapName_(Conf().getUntrackedParameter<string>("basicClusterMapName",
30     "BasicClusterMap")),
31 paus 1.20 pfClusters_(Conf().getUntrackedParameter<bool>("pfClusters",false)),
32 sixie 1.1 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 bendavid 1.10 void FillerBasicClusters::BookDataBlock(TreeWriter &tws)
49 sixie 1.1 {
50     // Add BasicCluster branch and the BasicClusterMap to tree.
51    
52 loizides 1.5 tws.AddBranch(mitName_,&basicClusters_);
53     OS()->add<BasicClusterArr>(basicClusters_,mitName_);
54 sixie 1.1
55 loizides 1.5 if (!basicClusterMapName_.empty()) {
56     basicClusterMap_->SetBrName(mitName_);
57     OS()->add<BasicClusterMap>(basicClusterMap_,basicClusterMapName_);
58     }
59 sixie 1.1 }
60    
61     //--------------------------------------------------------------------------------------------------
62     void FillerBasicClusters::FillDataBlock(const edm::Event &event,
63 loizides 1.2 const edm::EventSetup &setup)
64 sixie 1.1 {
65 loizides 1.5 // Fill the BasicCluster information into our structures.
66 sixie 1.1
67 bendavid 1.3 basicClusters_->Delete();
68 sixie 1.1 basicClusterMap_->Reset();
69    
70 bendavid 1.7 Handle<reco::CaloClusterCollection> hBasicClusterProduct;
71 sixie 1.1 GetProduct(edmName_, hBasicClusterProduct, event);
72     basicClusterMap_->SetEdmProductId(hBasicClusterProduct.id().id());
73 paus 1.20 const reco::CaloClusterCollection &inBasicClusters = *(hBasicClusterProduct.product());
74 sixie 1.1
75 bendavid 1.19 edm::Handle< EcalRecHitCollection > pEBRecHits;
76     event.getByLabel(barrelEcalRecHitName_, pEBRecHits );
77     edm::Handle< EcalRecHitCollection > pEERecHits;
78     event.getByLabel( endcapEcalRecHitName_, pEERecHits );
79 bendavid 1.16
80 paus 1.20 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 sixie 1.11 EcalClusterLazyTools lazyTools(event, setup, edm::InputTag(barrelEcalRecHitName_),
87     edm::InputTag(endcapEcalRecHitName_));
88    
89 paus 1.20 ggPFClusters pfclusters(pEBRecHits, pEERecHits, geometryEB, geometryEE);
90    
91 bendavid 1.16 EcalClusterLocal local;
92    
93 bendavid 1.19 //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 sixie 1.1 // loop through all basic clusters
105 bendavid 1.7 for (reco::CaloClusterCollection::const_iterator inBC = inBasicClusters.begin();
106 sixie 1.1 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 bendavid 1.4 outBasicCluster->SetEnergy(inBC->energy());
113 sixie 1.11 outBasicCluster->SetNHits(inBC->size());
114 paus 1.20
115 sixie 1.11 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 paus 1.20 outBasicCluster->SetEtaLat(lazyTools.lat(*inBC)[0]);
122     outBasicCluster->SetPhiLat(lazyTools.lat(*inBC)[1]);
123     outBasicCluster->SetLat(lazyTools.lat(*inBC)[2]);
124    
125    
126 bendavid 1.21 outBasicCluster->SetE1x3(lazyTools.e1x3(*inBC));
127     outBasicCluster->SetE3x1(lazyTools.e3x1(*inBC));
128     outBasicCluster->SetE1x5(lazyTools.e1x5(*inBC));
129     outBasicCluster->SetE2x2(lazyTools.e2x2(*inBC));
130     outBasicCluster->SetE3x2(lazyTools.e3x2(*inBC));
131     outBasicCluster->SetE3x3(lazyTools.e3x3(*inBC));
132     outBasicCluster->SetE4x4(lazyTools.e4x4(*inBC));
133     outBasicCluster->SetE5x5(lazyTools.e5x5(*inBC));
134     outBasicCluster->SetE2x5Right(lazyTools.e2x5Right(*inBC));
135     outBasicCluster->SetE2x5Left(lazyTools.e2x5Left(*inBC));
136     outBasicCluster->SetE2x5Top(lazyTools.e2x5Top(*inBC));
137     outBasicCluster->SetE2x5Bottom(lazyTools.e2x5Bottom(*inBC));
138     outBasicCluster->SetE2x5Max(lazyTools.e2x5Max(*inBC));
139     outBasicCluster->SetELeft(lazyTools.eLeft(*inBC));
140     outBasicCluster->SetERight(lazyTools.eRight(*inBC));
141     outBasicCluster->SetETop(lazyTools.eTop(*inBC));
142     outBasicCluster->SetEBottom(lazyTools.eBottom(*inBC));
143     outBasicCluster->SetEMax(lazyTools.eMax(*inBC));
144     outBasicCluster->SetE2nd(lazyTools.e2nd(*inBC));
145     outBasicCluster->SetCovEtaEta(lazyTools.covariances(*inBC)[0]);
146     outBasicCluster->SetCovPhiPhi(lazyTools.covariances(*inBC)[2]);
147 paus 1.20
148     //ecal timing information
149     const reco::BasicCluster *inbcd = dynamic_cast<const reco::BasicCluster*>(&*inBC);
150    
151     if (inbcd) {
152     outBasicCluster->SetTime(lazyTools.BasicClusterTime(*inbcd, event));
153     outBasicCluster->SetSeedTime(lazyTools.BasicClusterSeedTime(*inbcd));
154     }
155 bendavid 1.19
156 bendavid 1.16 //local coordinates
157 paus 1.20 if (inBC->hitsAndFractions().at(0).first.subdetId()==EcalBarrel) {
158 bendavid 1.17 float etacry, phicry, thetatilt, phitilt;
159 bendavid 1.16 int ieta, iphi;
160 bendavid 1.17 local.localCoordsEB(*inBC,setup,etacry,phicry,ieta,iphi,thetatilt,phitilt);
161 bendavid 1.16 outBasicCluster->SetEtaCry(etacry);
162     outBasicCluster->SetPhiCry(phicry);
163     outBasicCluster->SetIEta(ieta);
164     outBasicCluster->SetIPhi(iphi);
165 bendavid 1.17 outBasicCluster->SetThetaAxis(thetatilt);
166     outBasicCluster->SetPhiAxis(phitilt);
167 paus 1.20
168     EBDetId edet(inBC->hitsAndFractions().at(0).first);
169    
170     outBasicCluster->SetSeedIEta(edet.ieta());
171     outBasicCluster->SetSeedIPhi(edet.iphi());
172    
173 bendavid 1.16 }
174     else {
175 bendavid 1.17 float xcry, ycry, thetatilt, phitilt;
176 bendavid 1.16 int ix, iy;
177 bendavid 1.17 local.localCoordsEE(*inBC,setup,xcry,ycry,ix,iy,thetatilt,phitilt);
178 bendavid 1.16 outBasicCluster->SetXCry(xcry);
179     outBasicCluster->SetYCry(ycry);
180     outBasicCluster->SetIX(ix);
181 bendavid 1.17 outBasicCluster->SetIY(iy);
182     outBasicCluster->SetThetaAxis(thetatilt);
183 paus 1.20 outBasicCluster->SetPhiAxis(phitilt);
184    
185     EEDetId edet(inBC->hitsAndFractions().at(0).first);
186    
187     outBasicCluster->SetSeedIX(edet.ix());
188     outBasicCluster->SetSeedIY(edet.iy());
189    
190 bendavid 1.16 }
191    
192 loizides 1.8 // add basic clusters to the map
193 bendavid 1.7 reco::CaloClusterPtr thePtr(hBasicClusterProduct, inBC-inBasicClusters.begin());
194     basicClusterMap_->Add(thePtr, outBasicCluster);
195 peveraer 1.12
196 sixie 1.1 }
197     basicClusters_->Trim();
198     }