26 declareInterface<IFPGATrackSimTrackExtensionTool>(
this);
44 m_phits_atLayer[j] = std::map<unsigned, std::vector<std::shared_ptr<const FPGATrackSimHit>>>();
47 m_phits_atLayer[j][
i] = std::vector<std::shared_ptr<const FPGATrackSimHit>>();
51 return StatusCode::SUCCESS;
55 const std::vector<std::shared_ptr<const FPGATrackSimTrack>> & tracks,
56 std::vector<std::shared_ptr<const FPGATrackSimRoad>> & roads) {
62 for (
auto&
entry : sliceEntry.second) {
72 for (
int ireg = 0; ireg < rmap_2nd->
getNRegions(); ireg++) {
81 for (
const std::shared_ptr<const FPGATrackSimHit>& hit :
hits) {
82 std::shared_ptr<FPGATrackSimHit> hitCopy = std::make_shared<FPGATrackSimHit>(*hit);
83 pmap_2nd->
map(*hitCopy);
95 for (std::shared_ptr<const FPGATrackSimTrack>
track : tracks) {
96 if (
track->passedOR() == 0) {
101 double trackd0 =
track->getD0();
102 double trackphi =
track->getPhi();
103 double trackz0 =
track->getZ0();
104 double tracketa =
track->getEta();
105 double cottracktheta = 0.5*(
exp(tracketa)-
exp(-tracketa));
106 double trackqoverpt =
track->getQOverPt();
112 std::vector<std::vector<std::shared_ptr<const FPGATrackSimHit>>> road_hits;
116 for (
auto hit :
track->getFPGATrackSimHits()) {
117 road_hits[hit.getLayer()].push_back(std::make_shared<FPGATrackSimHit>(hit));
120 hitLayers |= 1 << hit.getLayer();
121 numHits[hit.getLayer()]++;
135 double hitphi = hit->getGPhi();
136 double hitr = hit->getR();
137 double hitz = hit->getZ();
138 double pred_hitphi = trackphi - asin(hitr * fpgatracksim::A * 1000 * trackqoverpt - trackd0/hitr);
139 double pred_hitz = trackz0 + hitr*cottracktheta;
144 pred_hitphi += fieldCor;
147 double diff = abs(hitphi-pred_hitphi);
148 double diffz = abs(hitz-pred_hitz);
154 road_hits[
layer].push_back(hit);
155 hitLayers |= 1 << hit->getLayer();
161 for (
auto num: numHits) {
162 if(
num > 0) nhit += 1;
174 road.
setY(trackqoverpt);
180 unsigned int wclayers = 0;
181 for (
unsigned i = 0;
i < numHits.size();
i++){
182 if(numHits[
i]==0) wclayers |= (0x1 <<
i);
188 road.
setHits(std::move(road_hits));
195 roads.emplace_back(std::make_shared<const FPGATrackSimRoad>(
r));
199 return StatusCode::SUCCESS;