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

# User Rev Content
1 paus 1.22 // $Id: FillerBasicClusters.cc,v 1.21 2012/07/16 13:13:40 bendavid 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 paus 1.22 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 paus 1.22 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 sixie 1.1 {
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 paus 1.22 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 paus 1.22 outBasicCluster->SetXYZ (inBC->x(),inBC->y(),inBC->z());
112 bendavid 1.4 outBasicCluster->SetEnergy(inBC->energy());
113 paus 1.22 outBasicCluster->SetNHits (inBC->size());
114 paus 1.20
115 paus 1.22 outBasicCluster->SetCovEtaPhi (lazyTools.covariances(*inBC)[1]);
116 sixie 1.11 outBasicCluster->SetCoviEtaiEta(lazyTools.localCovariances(*inBC)[0]);
117     outBasicCluster->SetCoviEtaiPhi(lazyTools.localCovariances(*inBC)[1]);
118     outBasicCluster->SetCoviPhiiPhi(lazyTools.localCovariances(*inBC)[2]);
119 paus 1.22 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 paus 1.20
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 bendavid 1.19
154 bendavid 1.16 //local coordinates
155 paus 1.20 if (inBC->hitsAndFractions().at(0).first.subdetId()==EcalBarrel) {
156 bendavid 1.17 float etacry, phicry, thetatilt, phitilt;
157 bendavid 1.16 int ieta, iphi;
158 bendavid 1.17 local.localCoordsEB(*inBC,setup,etacry,phicry,ieta,iphi,thetatilt,phitilt);
159 bendavid 1.16 outBasicCluster->SetEtaCry(etacry);
160     outBasicCluster->SetPhiCry(phicry);
161     outBasicCluster->SetIEta(ieta);
162     outBasicCluster->SetIPhi(iphi);
163 bendavid 1.17 outBasicCluster->SetThetaAxis(thetatilt);
164     outBasicCluster->SetPhiAxis(phitilt);
165 paus 1.20
166     EBDetId edet(inBC->hitsAndFractions().at(0).first);
167    
168     outBasicCluster->SetSeedIEta(edet.ieta());
169     outBasicCluster->SetSeedIPhi(edet.iphi());
170 bendavid 1.16 }
171     else {
172 bendavid 1.17 float xcry, ycry, thetatilt, phitilt;
173 bendavid 1.16 int ix, iy;
174 bendavid 1.17 local.localCoordsEE(*inBC,setup,xcry,ycry,ix,iy,thetatilt,phitilt);
175 bendavid 1.16 outBasicCluster->SetXCry(xcry);
176     outBasicCluster->SetYCry(ycry);
177     outBasicCluster->SetIX(ix);
178 bendavid 1.17 outBasicCluster->SetIY(iy);
179     outBasicCluster->SetThetaAxis(thetatilt);
180 paus 1.20 outBasicCluster->SetPhiAxis(phitilt);
181    
182     EEDetId edet(inBC->hitsAndFractions().at(0).first);
183    
184     outBasicCluster->SetSeedIX(edet.ix());
185     outBasicCluster->SetSeedIY(edet.iy());
186 bendavid 1.16 }
187 paus 1.22
188 loizides 1.8 // add basic clusters to the map
189 bendavid 1.7 reco::CaloClusterPtr thePtr(hBasicClusterProduct, inBC-inBasicClusters.begin());
190     basicClusterMap_->Add(thePtr, outBasicCluster);
191 peveraer 1.12
192 sixie 1.1 }
193     basicClusters_->Trim();
194     }