ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerBasicClusters.cc
Revision: 1.12
Committed: Thu Jun 24 12:59:50 2010 UTC (14 years, 10 months ago) by peveraer
Content type: text/plain
Branch: MAIN
Changes since 1.11: +31 -1 lines
Log Message:
// $Id: FillerBasicClusters.cc,v 1.11 2010/03/24 15:40:57 sixie Exp $

#include "MitProd/TreeFiller/interface/FillerBasicClusters.h"
#include "DataFormats/CaloRecHit/interface/CaloClusterFwd.h"
#include "DataFormats/CaloRecHit/interface/CaloCluster.h"
#include "MitAna/DataTree/interface/BasicClusterCol.h"
#include "MitAna/DataTree/interface/Names.h"
#include "MitProd/ObjectService/interface/ObjectService.h"
#include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h"
#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h"
#include "DataFormats/EcalDetId/interface/EcalSubdetector.h"

using namespace std;
using namespace edm;
using namespace mithep;

//--------------------------------------------------------------------------------------------------
FillerBasicClusters::FillerBasicClusters(const ParameterSet &cfg, const char *name, bool active) :
  BaseFiller(cfg,name,active),
  edmName_(Conf().getUntrackedParameter<string>("edmName","hybridSuperClusters")),
  mitName_(Conf().getUntrackedParameter<string>("mitName","BasicClusters")),
  barrelEcalRecHitName_(Conf().getUntrackedParameter<string>("barrelEcalRecHitName","")),
  endcapEcalRecHitName_(Conf().getUntrackedParameter<string>("endcapEcalRecHitName","")),
  basicClusterMapName_(Conf().getUntrackedParameter<string>("basicClusterMapName",
                                                            "BasicClusterMap")),
  basicClusters_(new mithep::BasicClusterArr(100)),
  basicClusterMap_(new mithep::BasicClusterMap)
{
  // Constructor.
}

//--------------------------------------------------------------------------------------------------
FillerBasicClusters::~FillerBasicClusters()
{
  // Destructor.

  delete basicClusters_;
  delete basicClusterMap_;
}

//--------------------------------------------------------------------------------------------------
void FillerBasicClusters::BookDataBlock(TreeWriter &tws)
{
  // Add BasicCluster branch and the BasicClusterMap to tree.

  tws.AddBranch(mitName_,&basicClusters_);
  OS()->add<BasicClusterArr>(basicClusters_,mitName_);

  if (!basicClusterMapName_.empty()) {
    basicClusterMap_->SetBrName(mitName_);
    OS()->add<BasicClusterMap>(basicClusterMap_,basicClusterMapName_);
  }
}

//--------------------------------------------------------------------------------------------------
void FillerBasicClusters::FillDataBlock(const edm::Event      &event,
                                        const edm::EventSetup &setup)
{
  // Fill the BasicCluster information into our structures.

  basicClusters_->Delete();
  basicClusterMap_->Reset();

  Handle<reco::CaloClusterCollection> hBasicClusterProduct;
  GetProduct(edmName_, hBasicClusterProduct, event);
  basicClusterMap_->SetEdmProductId(hBasicClusterProduct.id().id());
  const reco::CaloClusterCollection inBasicClusters = *(hBasicClusterProduct.product());


  EcalClusterLazyTools lazyTools(event, setup, edm::InputTag(barrelEcalRecHitName_),
                                 edm::InputTag(endcapEcalRecHitName_));

  // loop through all basic clusters
  for (reco::CaloClusterCollection::const_iterator inBC = inBasicClusters.begin();
       inBC != inBasicClusters.end(); ++inBC) {

    mithep::BasicCluster *outBasicCluster = basicClusters_->Allocate();
    new (outBasicCluster) mithep::BasicCluster();

    outBasicCluster->SetXYZ(inBC->x(),inBC->y(),inBC->z());
    outBasicCluster->SetEnergy(inBC->energy());
    outBasicCluster->SetNHits(inBC->size());
    outBasicCluster->SetE1x3(lazyTools.e1x3(*inBC));
    outBasicCluster->SetE3x1(lazyTools.e3x1(*inBC));
    outBasicCluster->SetE1x5(lazyTools.e1x5(*inBC));
    outBasicCluster->SetE2x2(lazyTools.e2x2(*inBC));
    outBasicCluster->SetE3x2(lazyTools.e3x2(*inBC));
    outBasicCluster->SetE3x3(lazyTools.e3x3(*inBC));
    outBasicCluster->SetE4x4(lazyTools.e4x4(*inBC));
    outBasicCluster->SetE5x5(lazyTools.e5x5(*inBC));
    outBasicCluster->SetE2x5Right(lazyTools.e2x5Right(*inBC));
    outBasicCluster->SetE2x5Left(lazyTools.e2x5Left(*inBC));
    outBasicCluster->SetE2x5Top(lazyTools.e2x5Top(*inBC));
    outBasicCluster->SetE2x5Bottom(lazyTools.e2x5Bottom(*inBC));
    outBasicCluster->SetE2x5Max(lazyTools.e2x5Max(*inBC));
    outBasicCluster->SetELeft(lazyTools.eLeft(*inBC));
    outBasicCluster->SetERight(lazyTools.eRight(*inBC));
    outBasicCluster->SetETop(lazyTools.eTop(*inBC));
    outBasicCluster->SetEBottom(lazyTools.eBottom(*inBC));
    outBasicCluster->SetEMax(lazyTools.eMax(*inBC));
    outBasicCluster->SetE2nd(lazyTools.e2nd(*inBC));
    outBasicCluster->SetEtaLat(lazyTools.lat(*inBC)[0]);
    outBasicCluster->SetPhiLat(lazyTools.lat(*inBC)[1]);
    outBasicCluster->SetLat(lazyTools.lat(*inBC)[2]);
    outBasicCluster->SetCovEtaEta(lazyTools.covariances(*inBC)[0]);
    outBasicCluster->SetCovEtaPhi(lazyTools.covariances(*inBC)[1]);
    outBasicCluster->SetCovPhiPhi(lazyTools.covariances(*inBC)[2]);
    outBasicCluster->SetCoviEtaiEta(lazyTools.localCovariances(*inBC)[0]);
    outBasicCluster->SetCoviEtaiPhi(lazyTools.localCovariances(*inBC)[1]);
    outBasicCluster->SetCoviPhiiPhi(lazyTools.localCovariances(*inBC)[2]);
    outBasicCluster->SetZernike20(lazyTools.zernike20(*inBC));
    outBasicCluster->SetZernike42(lazyTools.zernike42(*inBC));


    edm::Handle< EcalRecHitCollection > pEBRecHits;
    event.getByLabel(barrelEcalRecHitName_, pEBRecHits );
    const EcalRecHitCollection * ebRecHits_ = pEBRecHits.product();
    edm::Handle< EcalRecHitCollection > pEERecHits;
    event.getByLabel( endcapEcalRecHitName_, pEERecHits );
    const EcalRecHitCollection * eeRecHits_ = pEERecHits.product();

    DetId id = ((*inBC).hitsAndFractions()[0]).first;
    const EcalRecHitCollection *recHits = 0;
    if (  id.subdetId() == EcalBarrel  ) {
                recHits = ebRecHits_;
        } else if ( id.subdetId() == EcalEndcap  ) {
                recHits = eeRecHits_;
        }
    float max = 0;
    DetId idmax(0);
        for ( size_t i = 0; i < (*inBC).hitsAndFractions().size(); ++i ) {
          float energy=0;
          if ((*inBC).hitsAndFractions()[i].first!=DetId(0)) energy= (*(recHits->find( id ))).energy() * (((*inBC).hitsAndFractions())[i].second);
                if ( energy > max ) {
                        max = energy;
                        id = ((*inBC).hitsAndFractions())[i].first;
                }
        }
   outBasicCluster->SetSwissCross(EcalSeverityLevelAlgo::swissCross(idmax,*recHits,0.));

    // add basic clusters to the map
    reco::CaloClusterPtr thePtr(hBasicClusterProduct, inBC-inBasicClusters.begin());
    basicClusterMap_->Add(thePtr, outBasicCluster);

  }
  basicClusters_->Trim();
}

File Contents

# User Rev Content
1 peveraer 1.12 // $Id: FillerBasicClusters.cc,v 1.11 2010/03/24 15:40:57 sixie 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 sixie 1.1
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 sixie 1.11 barrelEcalRecHitName_(Conf().getUntrackedParameter<string>("barrelEcalRecHitName","")),
23     endcapEcalRecHitName_(Conf().getUntrackedParameter<string>("endcapEcalRecHitName","")),
24 sixie 1.1 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 bendavid 1.10 void FillerBasicClusters::BookDataBlock(TreeWriter &tws)
43 sixie 1.1 {
44     // Add BasicCluster branch and the BasicClusterMap to tree.
45    
46 loizides 1.5 tws.AddBranch(mitName_,&basicClusters_);
47     OS()->add<BasicClusterArr>(basicClusters_,mitName_);
48 sixie 1.1
49 loizides 1.5 if (!basicClusterMapName_.empty()) {
50     basicClusterMap_->SetBrName(mitName_);
51     OS()->add<BasicClusterMap>(basicClusterMap_,basicClusterMapName_);
52     }
53 sixie 1.1 }
54    
55     //--------------------------------------------------------------------------------------------------
56     void FillerBasicClusters::FillDataBlock(const edm::Event &event,
57 loizides 1.2 const edm::EventSetup &setup)
58 sixie 1.1 {
59 loizides 1.5 // Fill the BasicCluster information into our structures.
60 sixie 1.1
61 bendavid 1.3 basicClusters_->Delete();
62 sixie 1.1 basicClusterMap_->Reset();
63    
64 bendavid 1.7 Handle<reco::CaloClusterCollection> hBasicClusterProduct;
65 sixie 1.1 GetProduct(edmName_, hBasicClusterProduct, event);
66     basicClusterMap_->SetEdmProductId(hBasicClusterProduct.id().id());
67 bendavid 1.7 const reco::CaloClusterCollection inBasicClusters = *(hBasicClusterProduct.product());
68 sixie 1.1
69 sixie 1.11
70     EcalClusterLazyTools lazyTools(event, setup, edm::InputTag(barrelEcalRecHitName_),
71     edm::InputTag(endcapEcalRecHitName_));
72    
73 sixie 1.1 // loop through all basic clusters
74 bendavid 1.7 for (reco::CaloClusterCollection::const_iterator inBC = inBasicClusters.begin();
75 sixie 1.1 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 bendavid 1.4 outBasicCluster->SetEnergy(inBC->energy());
82 sixie 1.11 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 sixie 1.1
114 peveraer 1.12
115     edm::Handle< EcalRecHitCollection > pEBRecHits;
116     event.getByLabel(barrelEcalRecHitName_, pEBRecHits );
117     const EcalRecHitCollection * ebRecHits_ = pEBRecHits.product();
118     edm::Handle< EcalRecHitCollection > pEERecHits;
119     event.getByLabel( endcapEcalRecHitName_, pEERecHits );
120     const EcalRecHitCollection * eeRecHits_ = pEERecHits.product();
121    
122     DetId id = ((*inBC).hitsAndFractions()[0]).first;
123     const EcalRecHitCollection *recHits = 0;
124     if ( id.subdetId() == EcalBarrel ) {
125     recHits = ebRecHits_;
126     } else if ( id.subdetId() == EcalEndcap ) {
127     recHits = eeRecHits_;
128     }
129     float max = 0;
130     DetId idmax(0);
131     for ( size_t i = 0; i < (*inBC).hitsAndFractions().size(); ++i ) {
132     float energy=0;
133     if ((*inBC).hitsAndFractions()[i].first!=DetId(0)) energy= (*(recHits->find( id ))).energy() * (((*inBC).hitsAndFractions())[i].second);
134     if ( energy > max ) {
135     max = energy;
136     id = ((*inBC).hitsAndFractions())[i].first;
137     }
138     }
139     outBasicCluster->SetSwissCross(EcalSeverityLevelAlgo::swissCross(idmax,*recHits,0.));
140    
141 loizides 1.8 // add basic clusters to the map
142 bendavid 1.7 reco::CaloClusterPtr thePtr(hBasicClusterProduct, inBC-inBasicClusters.begin());
143     basicClusterMap_->Add(thePtr, outBasicCluster);
144 peveraer 1.12
145 sixie 1.1 }
146     basicClusters_->Trim();
147     }