ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerBasicClusters.cc
Revision: 1.17.2.1
Committed: Tue May 15 23:31:20 2012 UTC (12 years, 11 months ago) by paus
Content type: text/plain
Branch: Mit_025c_branch
CVS Tags: Mit_025c_branch2, Mit_025c_branch1, Mit_025c_branch0
Changes since 1.17: +102 -57 lines
Log Message:
Backporting from 5x.

File Contents

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