1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
// -*- C++ -*-
//
// Package: TrajectorySeeds
// Class : FWTrajectorySeedProxyBuilder
//
// Implementation:
// <Notes on implementation>
//
// Original Author: Chris Jones
// Created: Tue Nov 25 14:42:13 EST 2008
//
// system include files
#include "TEveStraightLineSet.h"
#include "TEvePointSet.h"
#include "TEveLine.h"
// user include files
#include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h"
#include "Fireworks/Core/interface/FWEventItem.h"
#include "Fireworks/Core/interface/FWMagField.h"
#include "Fireworks/Tracks/interface/TrackUtils.h"
#include "Fireworks/Tracks/interface/estimate_field.h"
#include "Fireworks/Core/interface/FWGeometry.h"
#include "Fireworks/Core/interface/fwLog.h"
#include "DataFormats/TrajectorySeed/interface/TrajectorySeed.h"
#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h"
#include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"
class FWTrajectorySeedProxyBuilder : public FWSimpleProxyBuilderTemplate<TrajectorySeed> {
public:
FWTrajectorySeedProxyBuilder();
~FWTrajectorySeedProxyBuilder() override;
REGISTER_PROXYBUILDER_METHODS();
FWTrajectorySeedProxyBuilder(const FWTrajectorySeedProxyBuilder&) = delete; // stop default
const FWTrajectorySeedProxyBuilder& operator=(const FWTrajectorySeedProxyBuilder&) = delete; // stop default
private:
using FWSimpleProxyBuilderTemplate<TrajectorySeed>::build;
void build(const TrajectorySeed& iData, unsigned int iIndex, TEveElement& oItemHolder, const FWViewContext*) override;
};
FWTrajectorySeedProxyBuilder::FWTrajectorySeedProxyBuilder() {}
FWTrajectorySeedProxyBuilder::~FWTrajectorySeedProxyBuilder() {}
void FWTrajectorySeedProxyBuilder::build(const TrajectorySeed& iData,
unsigned int iIndex,
TEveElement& itemHolder,
const FWViewContext*) {
// LocalPoint pnt = iData.startingState().parameters().position();
// std::cout << pnt << std::endl;
// std::cout << dynamic_cast<const SiPixelRecHit *>(&(*iData.recHits().first)) << std::endl;
// TEveVector startPos(pnt.x(), pnt.y(), pnt.z());
TEvePointSet* pointSet = new TEvePointSet;
TEveLine* line = new TEveLine;
TEveStraightLineSet* lineSet = new TEveStraightLineSet;
for (auto const& hit : iData.recHits()) {
unsigned int id = hit.geographicalId();
const FWGeometry* geom = item()->getGeom();
const float* pars = geom->getParameters(id);
const SiPixelRecHit* rh = dynamic_cast<const SiPixelRecHit*>(&hit);
// std::cout << id << "id "<< std::endl;
if (rh) {
const SiPixelCluster* itc = rh->cluster().get();
if (!geom->contains(id)) {
fwLog(fwlog::kWarning) << "failed get geometry of SiPixelCluster with detid: " << id << std::endl;
continue;
}
float localPoint[3] = {
fireworks::pixelLocalX((*itc).minPixelRow(), pars), fireworks::pixelLocalY((*itc).minPixelCol(), pars), 0.0};
float globalPoint[3];
geom->localToGlobal(id, localPoint, globalPoint);
pointSet->SetNextPoint(globalPoint[0], globalPoint[1], globalPoint[2]);
line->SetNextPoint(globalPoint[0], globalPoint[1], globalPoint[2]);
}
else {
const SiStripCluster* cluster = fireworks::extractClusterFromTrackingRecHit(&hit);
if (cluster) {
short firststrip = cluster->firstStrip();
float localTop[3] = {0.0, 0.0, 0.0};
float localBottom[3] = {0.0, 0.0, 0.0};
fireworks::localSiStrip(firststrip, localTop, localBottom, pars, id);
float globalTop[3];
float globalBottom[3];
geom->localToGlobal(id, localTop, globalTop, localBottom, globalBottom);
lineSet->AddLine(globalTop[0], globalTop[1], globalTop[2], globalBottom[0], globalBottom[1], globalBottom[2]);
}
}
}
setupAddElement(pointSet, &itemHolder);
setupAddElement(line, &itemHolder);
setupAddElement(lineSet, &itemHolder);
}
//
// static member functions
//
REGISTER_FWPROXYBUILDER(FWTrajectorySeedProxyBuilder,
TrajectorySeed,
"TrajectorySeeds",
FWViewType::kAll3DBits | FWViewType::kAllRPZBits);
|