ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerSuperClusters.cc
Revision: 1.11
Committed: Fri Jun 25 15:18:38 2010 UTC (14 years, 10 months ago) by bendavid
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_014c, Mit_014b
Changes since 1.10: +24 -6 lines
Log Message:
Add supercluster-calotower associations

File Contents

# Content
1 // $Id: FillerSuperClusters.cc,v 1.10 2010/03/24 15:41:22 sixie Exp $
2
3 #include "MitProd/TreeFiller/interface/FillerSuperClusters.h"
4 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
5 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
6 #include "MitAna/DataTree/interface/BasicCluster.h"
7 #include "MitAna/DataTree/interface/SuperClusterCol.h"
8 #include "MitAna/DataTree/interface/Names.h"
9 #include "MitProd/ObjectService/interface/ObjectService.h"
10 #include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h"
11
12 using namespace std;
13 using namespace edm;
14 using namespace mithep;
15
16 //--------------------------------------------------------------------------------------------------
17 FillerSuperClusters::FillerSuperClusters(const ParameterSet &cfg, const char *name, bool active) :
18 BaseFiller(cfg,name,active),
19 edmName_(Conf().getUntrackedParameter<string>("edmName","hybridSuperClusters")),
20 mitName_(Conf().getUntrackedParameter<string>("mitName","SuperClusters")),
21 basicClusterMapName_(Conf().getUntrackedParameter<string>("basicClusterMapName",
22 "BasicClusterMap")),
23 caloTowerDetIdMapName_(Conf().getUntrackedParameter<string>("caloTowerDetIdMapName",
24 "CaloTowerDetIdMap")),
25 superClusterMapName_(Conf().getUntrackedParameter<string>("superClusterMapName",
26 "SuperClusterMap")),
27 superClusterIdMapName_(Conf().getUntrackedParameter<string>("superClusterIdMapName",
28 "SuperClusterIdMap")),
29 caloTowerName_(Conf().getUntrackedParameter<string>("caloTowerName","towerMaker")),
30 basicClusterMap_(0),
31 caloTowerDetIdMap_(0),
32 superClusters_(new mithep::SuperClusterArr(25)),
33 superClusterMap_(new mithep::SuperClusterMap),
34 superClusterIdMap_(new mithep::SuperClusterIdMap)
35 {
36 // Constructor.
37 }
38
39 //--------------------------------------------------------------------------------------------------
40 FillerSuperClusters::~FillerSuperClusters()
41 {
42 // Destructor.
43
44 delete superClusters_;
45 delete superClusterMap_;
46 delete superClusterIdMap_;
47 }
48
49 //--------------------------------------------------------------------------------------------------
50 void FillerSuperClusters::BookDataBlock(TreeWriter &tws)
51 {
52 // Add super cluster branch to tree and get pointers to maps.
53
54 tws.AddBranch(mitName_,&superClusters_);
55 OS()->add<SuperClusterArr>(superClusters_,mitName_);
56
57 if (!basicClusterMapName_.empty()) {
58 basicClusterMap_ = OS()->get<BasicClusterMap>(basicClusterMapName_);
59 if (basicClusterMap_)
60 AddBranchDep(mitName_,basicClusterMap_->GetBrName());
61 }
62
63 if (!caloTowerDetIdMapName_.empty()) {
64 caloTowerDetIdMap_ = OS()->get<CaloTowerDetIdMap>(caloTowerDetIdMapName_);
65 if (caloTowerDetIdMap_)
66 AddBranchDep(mitName_,caloTowerDetIdMap_->GetBrName());
67 }
68
69 if (!superClusterMapName_.empty()) {
70 superClusterMap_->SetBrName(mitName_);
71 OS()->add<SuperClusterMap>(superClusterMap_,superClusterMapName_);
72 }
73 if (!superClusterIdMapName_.empty()) {
74 superClusterIdMap_->SetBrName(mitName_);
75 OS()->add<SuperClusterIdMap>(superClusterIdMap_,superClusterIdMapName_);
76 }
77 }
78
79 //--------------------------------------------------------------------------------------------------
80 void FillerSuperClusters::FillDataBlock(const edm::Event &event,
81 const edm::EventSetup &setup)
82 {
83 // Fill the collection.
84
85 superClusters_->Delete();
86 superClusterMap_->Reset();
87 superClusterIdMap_->Reset();
88
89 Handle<reco::SuperClusterCollection> hSuperClusterProduct;
90 GetProduct(edmName_, hSuperClusterProduct, event);
91
92 Handle<CaloTowerCollection> hCaloTowerProduct;
93 GetProduct(caloTowerName_, hCaloTowerProduct, event);
94
95 superClusterMap_->SetEdmProductId(hSuperClusterProduct.id().id());
96 const reco::SuperClusterCollection inSuperClusters = *(hSuperClusterProduct.product());
97
98 // loop through all super clusters
99 for (reco::SuperClusterCollection::const_iterator inSC = inSuperClusters.begin();
100 inSC != inSuperClusters.end(); ++inSC) {
101
102 mithep::SuperCluster *outSC = superClusters_->Allocate();
103 new (outSC) mithep::SuperCluster();
104
105 outSC->SetXYZ(inSC->x(),inSC->y(),inSC->z());
106 outSC->SetEnergy(inSC->energy());
107 outSC->SetRawEnergy(inSC->rawEnergy());
108 outSC->SetPreshowerEnergy(inSC->preshowerEnergy());
109 outSC->SetPhiWidth(inSC->phiWidth());
110 outSC->SetEtaWidth(inSC->etaWidth());
111
112 //Compute Hadronic Energy behind the supercluster (within DR < 0.15)
113 EgammaTowerIsolation towerIsoDepth1(0.15,0.,0.,1,hCaloTowerProduct.product()) ;
114 EgammaTowerIsolation towerIsoDepth2(0.15,0.,0.,2,hCaloTowerProduct.product()) ;
115 outSC->SetHcalDepth1Energy(towerIsoDepth1.getTowerESum(&(*inSC)));
116 outSC->SetHcalDepth2Energy(towerIsoDepth2.getTowerESum(&(*inSC)));
117
118 // set the seed
119 if (basicClusterMap_ && inSC->seed().isNonnull())
120 outSC->SetSeed(basicClusterMap_->GetMit(inSC->seed()));
121
122 // add basic clusters that belong to this super cluster
123 for(reco::CaloCluster_iterator bc = inSC->clustersBegin(); bc != inSC->clustersEnd(); ++bc) {
124 if (basicClusterMap_ && bc->isNonnull())
125 outSC->AddCluster(basicClusterMap_->GetMit(*bc));
126 }
127
128 //add super cluster det ids to the id map and also fill supercluster-calotower associations
129 const std::vector< std::pair<DetId, float> > &pairs = inSC->hitsAndFractions();
130 for (std::vector< std::pair<DetId, float> >::const_iterator ipair = pairs.begin();
131 ipair < pairs.end(); ++ipair) {
132
133 const DetId &ihit = ipair->first;
134
135 if (caloTowerDetIdMap_) {
136 if (caloTowerDetIdMap_->HasMit(ihit)) {
137 outSC->AddTower(caloTowerDetIdMap_->GetMit(ihit));
138 }
139 }
140
141 superClusterIdMap_->Add(ihit,outSC);
142 }
143
144
145 // add super cluster to the map
146 reco::SuperClusterRef theRef(hSuperClusterProduct, inSC-inSuperClusters.begin());
147 superClusterMap_->Add(theRef, outSC);
148
149 }
150 superClusters_->Trim();
151 }