ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerPixelHits.cc
Revision: 1.6
Committed: Tue Dec 1 15:55:05 2009 UTC (15 years, 5 months ago) by edwenger
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_013pre1, Mit_012i, Mit_012h, Mit_012g, Mit_012f, Mit_012e, Mit_012d
Changes since 1.5: +3 -8 lines
Log Message:
fix disk/side assignments for PXF

File Contents

# Content
1 // $Id: FillerPixelHits.cc,v 1.5 2009/11/25 14:45:40 loizides Exp $
2
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 #include "Geometry/TrackerTopology/interface/RectangularPixelTopology.h"
12 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
13 #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 {
30 // Constructor.
31 }
32
33 //--------------------------------------------------------------------------------------------------
34 FillerPixelHits::~FillerPixelHits()
35 {
36 // Destructor.
37
38 delete phits_;
39 }
40
41 //--------------------------------------------------------------------------------------------------
42 void FillerPixelHits::BookDataBlock(TreeWriter &tws, const edm::EventSetup &es)
43 {
44 // Add tracks branch to tree, publish and get tracker geometry.
45
46 tws.AddBranch(mitName_,&phits_);
47 OS()->add<PixelHitArr>(phits_,mitName_);
48 }
49
50 //--------------------------------------------------------------------------------------------------
51 void FillerPixelHits::FillDataBlock(const edm::Event &event,
52 const edm::EventSetup &setup)
53 {
54 // Fill pixel hits from edm collection into our collection.
55
56 phits_->Delete();
57
58 // initialize handle and get product
59 Handle<SiPixelRecHitCollection> hRecHits;
60 GetProduct(edmName_, hRecHits, event);
61
62 const SiPixelRecHitCollection *hits = hRecHits.product();
63 if (!hits->size())
64 return;
65
66 // get tracker geometry
67 edm::ESHandle<TrackerGeometry> trackerHandle;
68 setup.get<TrackerDigiGeometryRecord>().get(trackerHandle);
69 const TrackerGeometry *tgeo = trackerHandle.product();
70
71 for(SiPixelRecHitCollection::DataContainer::const_iterator hit = hits->data().begin(),
72 end = hits->data().end(); hit != end; ++hit) {
73
74 if (!hit->isValid())
75 continue;
76
77 DetId id(hit->geographicalId());
78
79 int type = 0; // PXB: 1,2,3 // PXF: +/- 11,12
80 if(id.subdetId() == int(PixelSubdetector::PixelBarrel)) {
81 PXBDetId pid(id);
82 type = pid.layer();
83 } else if (id.subdetId() == int(PixelSubdetector::PixelEndcap)) {
84 PXFDetId pid(id);
85 type = (10 + pid.disk())*((pid.side()==1)?-1:1);
86 } else {
87 continue;
88 }
89
90 bool isAnyPixelOnEdge = false;
91 const PixelGeomDetUnit *pgdu =
92 static_cast<const PixelGeomDetUnit*>(tgeo->idToDetUnit(id));
93 if (1) {
94 const RectangularPixelTopology *pixTopo =
95 static_cast<const RectangularPixelTopology*>(&pgdu->specificTopology());
96 const vector<SiPixelCluster::Pixel> pixels(hit->cluster()->pixels());
97 for(std::vector<SiPixelCluster::Pixel>::const_iterator pixel = pixels.begin();
98 pixel != pixels.end(); ++pixel) {
99 int pixelX = pixel->x;
100 int pixelY = pixel->y;
101 if(pixTopo->isItEdgePixelInX(pixelX) || pixTopo->isItEdgePixelInY(pixelY)) {
102 isAnyPixelOnEdge = true;
103 break;
104 }
105 }
106 }
107
108 LocalPoint lpos = LocalPoint(hit->localPosition().x(),
109 hit->localPosition().y(),
110 hit->localPosition().z());
111 GlobalPoint gpos = pgdu->toGlobal(lpos);
112 mithep::PixelHit *newhit = phits_->Allocate();
113 new (newhit) mithep::PixelHit(gpos.x(),gpos.y(),gpos.z());
114 newhit->SetType(type);
115 newhit->SetQuality(hit->rawQualityWord());
116 newhit->SetCharge(static_cast<int>(hit->cluster()->charge()));
117 newhit->SetSizeX(hit->cluster()->sizeX());
118 newhit->SetSizeY(hit->cluster()->sizeY());
119 newhit->SetAnyPixelIsOnEdge(isAnyPixelOnEdge);
120 }
121 phits_->Trim();
122 }