ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerBasicClusters.cc
Revision: 1.14
Committed: Fri Jun 25 14:01:31 2010 UTC (14 years, 10 months ago) by peveraer
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_020d, TMit_020d, Mit_020c, Mit_020b, Mit_020a, Mit_020, Mit_020pre1, Mit_018, Mit_017, Mit_017pre3, Mit_017pre2, Mit_017pre1, Mit_016, Mit_015b, Mit_015a, Mit_015, Mit_014e, Mit_014d, Mit_014c, Mit_014b
Changes since 1.13: +1 -31 lines
Log Message:
Fixed merging

File Contents

# Content
1 // $Id: FillerBasicClusters.cc,v 1.13 2010/06/25 13:57:01 peveraer 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
13 using namespace std;
14 using namespace edm;
15 using namespace mithep;
16
17 //--------------------------------------------------------------------------------------------------
18 FillerBasicClusters::FillerBasicClusters(const ParameterSet &cfg, const char *name, bool active) :
19 BaseFiller(cfg,name,active),
20 edmName_(Conf().getUntrackedParameter<string>("edmName","hybridSuperClusters")),
21 mitName_(Conf().getUntrackedParameter<string>("mitName","BasicClusters")),
22 barrelEcalRecHitName_(Conf().getUntrackedParameter<string>("barrelEcalRecHitName","")),
23 endcapEcalRecHitName_(Conf().getUntrackedParameter<string>("endcapEcalRecHitName","")),
24 basicClusterMapName_(Conf().getUntrackedParameter<string>("basicClusterMapName",
25 "BasicClusterMap")),
26 basicClusters_(new mithep::BasicClusterArr(100)),
27 basicClusterMap_(new mithep::BasicClusterMap)
28 {
29 // Constructor.
30 }
31
32 //--------------------------------------------------------------------------------------------------
33 FillerBasicClusters::~FillerBasicClusters()
34 {
35 // Destructor.
36
37 delete basicClusters_;
38 delete basicClusterMap_;
39 }
40
41 //--------------------------------------------------------------------------------------------------
42 void FillerBasicClusters::BookDataBlock(TreeWriter &tws)
43 {
44 // Add BasicCluster branch and the BasicClusterMap to tree.
45
46 tws.AddBranch(mitName_,&basicClusters_);
47 OS()->add<BasicClusterArr>(basicClusters_,mitName_);
48
49 if (!basicClusterMapName_.empty()) {
50 basicClusterMap_->SetBrName(mitName_);
51 OS()->add<BasicClusterMap>(basicClusterMap_,basicClusterMapName_);
52 }
53 }
54
55 //--------------------------------------------------------------------------------------------------
56 void FillerBasicClusters::FillDataBlock(const edm::Event &event,
57 const edm::EventSetup &setup)
58 {
59 // Fill the BasicCluster information into our structures.
60
61 basicClusters_->Delete();
62 basicClusterMap_->Reset();
63
64 Handle<reco::CaloClusterCollection> hBasicClusterProduct;
65 GetProduct(edmName_, hBasicClusterProduct, event);
66 basicClusterMap_->SetEdmProductId(hBasicClusterProduct.id().id());
67 const reco::CaloClusterCollection inBasicClusters = *(hBasicClusterProduct.product());
68
69
70 EcalClusterLazyTools lazyTools(event, setup, edm::InputTag(barrelEcalRecHitName_),
71 edm::InputTag(endcapEcalRecHitName_));
72
73 // loop through all basic clusters
74 for (reco::CaloClusterCollection::const_iterator inBC = inBasicClusters.begin();
75 inBC != inBasicClusters.end(); ++inBC) {
76
77 mithep::BasicCluster *outBasicCluster = basicClusters_->Allocate();
78 new (outBasicCluster) mithep::BasicCluster();
79
80 outBasicCluster->SetXYZ(inBC->x(),inBC->y(),inBC->z());
81 outBasicCluster->SetEnergy(inBC->energy());
82 outBasicCluster->SetNHits(inBC->size());
83 outBasicCluster->SetE1x3(lazyTools.e1x3(*inBC));
84 outBasicCluster->SetE3x1(lazyTools.e3x1(*inBC));
85 outBasicCluster->SetE1x5(lazyTools.e1x5(*inBC));
86 outBasicCluster->SetE2x2(lazyTools.e2x2(*inBC));
87 outBasicCluster->SetE3x2(lazyTools.e3x2(*inBC));
88 outBasicCluster->SetE3x3(lazyTools.e3x3(*inBC));
89 outBasicCluster->SetE4x4(lazyTools.e4x4(*inBC));
90 outBasicCluster->SetE5x5(lazyTools.e5x5(*inBC));
91 outBasicCluster->SetE2x5Right(lazyTools.e2x5Right(*inBC));
92 outBasicCluster->SetE2x5Left(lazyTools.e2x5Left(*inBC));
93 outBasicCluster->SetE2x5Top(lazyTools.e2x5Top(*inBC));
94 outBasicCluster->SetE2x5Bottom(lazyTools.e2x5Bottom(*inBC));
95 outBasicCluster->SetE2x5Max(lazyTools.e2x5Max(*inBC));
96 outBasicCluster->SetELeft(lazyTools.eLeft(*inBC));
97 outBasicCluster->SetERight(lazyTools.eRight(*inBC));
98 outBasicCluster->SetETop(lazyTools.eTop(*inBC));
99 outBasicCluster->SetEBottom(lazyTools.eBottom(*inBC));
100 outBasicCluster->SetEMax(lazyTools.eMax(*inBC));
101 outBasicCluster->SetE2nd(lazyTools.e2nd(*inBC));
102 outBasicCluster->SetEtaLat(lazyTools.lat(*inBC)[0]);
103 outBasicCluster->SetPhiLat(lazyTools.lat(*inBC)[1]);
104 outBasicCluster->SetLat(lazyTools.lat(*inBC)[2]);
105 outBasicCluster->SetCovEtaEta(lazyTools.covariances(*inBC)[0]);
106 outBasicCluster->SetCovEtaPhi(lazyTools.covariances(*inBC)[1]);
107 outBasicCluster->SetCovPhiPhi(lazyTools.covariances(*inBC)[2]);
108 outBasicCluster->SetCoviEtaiEta(lazyTools.localCovariances(*inBC)[0]);
109 outBasicCluster->SetCoviEtaiPhi(lazyTools.localCovariances(*inBC)[1]);
110 outBasicCluster->SetCoviPhiiPhi(lazyTools.localCovariances(*inBC)[2]);
111 outBasicCluster->SetZernike20(lazyTools.zernike20(*inBC));
112 outBasicCluster->SetZernike42(lazyTools.zernike42(*inBC));
113
114 edm::Handle< EcalRecHitCollection > pEBRecHits;
115 event.getByLabel(barrelEcalRecHitName_, pEBRecHits );
116 const EcalRecHitCollection * ebRecHits_ = pEBRecHits.product();
117 edm::Handle< EcalRecHitCollection > pEERecHits;
118 event.getByLabel( endcapEcalRecHitName_, pEERecHits );
119 const EcalRecHitCollection * eeRecHits_ = pEERecHits.product();
120
121 DetId id = ((*inBC).hitsAndFractions()[0]).first;
122 const EcalRecHitCollection *recHits = 0;
123 if ( id.subdetId() == EcalBarrel ) {
124 recHits = ebRecHits_;
125 } else if ( id.subdetId() == EcalEndcap ) {
126 recHits = eeRecHits_;
127 }
128 float max = 0;
129 DetId idmax(0);
130 for ( size_t i = 0; i < (*inBC).hitsAndFractions().size(); ++i ) {
131 float energy=0;
132 if ((*inBC).hitsAndFractions()[i].first!=DetId(0)) energy= (*(recHits->find( (*inBC).hitsAndFractions()[i].first))).energy() * (((*inBC).hitsAndFractions())[i].second);
133 if ( energy > max ) {
134 max = energy;
135 idmax = ((*inBC).hitsAndFractions())[i].first;
136 }
137 }
138
139 outBasicCluster->SetSwissCross(EcalSeverityLevelAlgo::swissCross(idmax,*recHits,0.));
140
141
142 // add basic clusters to the map
143 reco::CaloClusterPtr thePtr(hBasicClusterProduct, inBC-inBasicClusters.begin());
144 basicClusterMap_->Add(thePtr, outBasicCluster);
145
146 }
147 basicClusters_->Trim();
148 }