ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerPixelHits.cc
Revision: 1.4
Committed: Thu Nov 19 14:35:23 2009 UTC (15 years, 5 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_012b
Changes since 1.3: +17 -16 lines
Log Message:
Fix access of event setup

File Contents

# User Rev Content
1 loizides 1.4 // $Id: FillerPixelHits.cc,v 1.3 2009/11/17 21:16:31 loizides Exp $
2 loizides 1.1
3     #include "MitProd/TreeFiller/interface/FillerPixelHits.h"
4     #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
5     #include "DataFormats/GeometryVector/interface/LocalPoint.h"
6     #include "DataFormats/SiPixelDetId/interface/PXBDetId.h"
7     #include "DataFormats/SiPixelDetId/interface/PXFDetId.h"
8     #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h"
9     #include "FWCore/Framework/interface/ESHandle.h"
10     #include "Geometry/CommonDetUnit/interface/GeomDet.h"
11 loizides 1.3 #include "Geometry/TrackerTopology/interface/RectangularPixelTopology.h"
12     #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
13 loizides 1.1 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
14     #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
15     #include "MitAna/DataTree/interface/Names.h"
16     #include "MitAna/DataTree/interface/PixelHitCol.h"
17     #include "MitProd/ObjectService/interface/ObjectService.h"
18    
19     using namespace std;
20     using namespace edm;
21     using namespace mithep;
22    
23     //--------------------------------------------------------------------------------------------------
24     FillerPixelHits::FillerPixelHits(const ParameterSet &cfg, const char *name, bool active) :
25     BaseFiller(cfg,name,active),
26     edmName_(Conf().getUntrackedParameter<string>("edmName","siPixelRecHits")),
27     mitName_(Conf().getUntrackedParameter<string>("mitName",Names::gkPixelHitBrn)),
28     phits_(new mithep::PixelHitArr(1000)),
29     tgeo_(0)
30     {
31     // Constructor.
32     }
33    
34     //--------------------------------------------------------------------------------------------------
35     FillerPixelHits::~FillerPixelHits()
36     {
37     // Destructor.
38    
39     delete phits_;
40     }
41    
42     //--------------------------------------------------------------------------------------------------
43     void FillerPixelHits::BookDataBlock(TreeWriter &tws, const edm::EventSetup &es)
44     {
45     // Add tracks branch to tree, publish and get tracker geometry.
46    
47     tws.AddBranch(mitName_,&phits_);
48     OS()->add<PixelHitArr>(phits_,mitName_);
49     }
50    
51     //--------------------------------------------------------------------------------------------------
52     void FillerPixelHits::FillDataBlock(const edm::Event &event,
53     const edm::EventSetup &setup)
54     {
55     // Fill pixel hits from edm collection into our collection.
56    
57     phits_->Delete();
58    
59     // initialize handle and get product
60     Handle<SiPixelRecHitCollection> hRecHits;
61     GetProduct(edmName_, hRecHits, event);
62    
63     const SiPixelRecHitCollection *hits = hRecHits.product();
64 loizides 1.4 if (!hits->size())
65     return;
66    
67     // get tracker geometry
68     edm::ESHandle<TrackerGeometry> trackerHandle;
69     setup.get<TrackerDigiGeometryRecord>().get(trackerHandle);
70     tgeo_ = trackerHandle.product();
71    
72 loizides 1.1 for(SiPixelRecHitCollection::DataContainer::const_iterator hit = hits->data().begin(),
73     end = hits->data().end(); hit != end; ++hit) {
74    
75 loizides 1.2 if (!hit->isValid())
76     continue;
77    
78 loizides 1.1 DetId id(hit->geographicalId());
79    
80 loizides 1.4 int type = 0;
81 loizides 1.1 if(id.subdetId() == int(PixelSubdetector::PixelBarrel)) {
82     PXBDetId pid(id);
83     type = pid.layer();
84     } else if (id.subdetId() == int(PixelSubdetector::PixelEndcap)) {
85     PXFDetId pid(id);
86     if (pid.disk()==0)
87     type = 11;
88     else
89     type = 12;
90     if (pid.side()!=0)
91     type = -type;
92 loizides 1.3 } else {
93     continue;
94     }
95    
96     bool isAnyPixelOnEdge = false;
97 loizides 1.4 const PixelGeomDetUnit *pgdu = static_cast<const PixelGeomDetUnit*>(tgeo_->idToDetUnit(id));
98 loizides 1.3 if (1) {
99     const RectangularPixelTopology *pixTopo =
100 loizides 1.4 static_cast<const RectangularPixelTopology*>(&pgdu->specificTopology());
101     const vector<SiPixelCluster::Pixel> pixels(hit->cluster()->pixels());
102 loizides 1.3 for(std::vector<SiPixelCluster::Pixel>::const_iterator pixel = pixels.begin();
103     pixel != pixels.end(); ++pixel) {
104     int pixelX = pixel->x;
105     int pixelY = pixel->y;
106     if(pixTopo->isItEdgePixelInX(pixelX) || pixTopo->isItEdgePixelInY(pixelY)) {
107     isAnyPixelOnEdge = true;
108     break;
109     }
110     }
111 loizides 1.1 }
112    
113 loizides 1.4 LocalPoint lpos = LocalPoint(hit->localPosition().x(),
114     hit->localPosition().y(),
115     hit->localPosition().z());
116     GlobalPoint gpos = pgdu->toGlobal(lpos);
117 loizides 1.1 mithep::PixelHit *newhit = phits_->Allocate();
118     new (newhit) mithep::PixelHit(gpos.x(),gpos.y(),gpos.z());
119     newhit->SetType(type);
120     newhit->SetQuality(hit->rawQualityWord());
121     newhit->SetCharge(static_cast<int>(hit->cluster()->charge()));
122 loizides 1.3 newhit->SetSizeX(hit->cluster()->sizeX());
123     newhit->SetSizeY(hit->cluster()->sizeY());
124     newhit->SetAnyPixelIsOnEdge(isAnyPixelOnEdge);
125 loizides 1.1 }
126     phits_->Trim();
127     }