ATLAS Offline Software
Loading...
Searching...
No Matches
VP1RawDataHandle_SCT_RDO.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
6// //
7// Implementation of class VP1RawDataHandle_SCT_RDO //
8// //
9// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
10// Initial version: April 2008 (rewritten January 2009) //
11// //
13
17#include "VP1Utils/VP1DetInfo.h"
19
20#include <Inventor/nodes/SoLineSet.h>
21#include <Inventor/nodes/SoVertexProperty.h>
22
25
26//#include "InDetReadoutGeometry/SCT_ReadoutGeometry/SCT_ModuleSideDesign.h" // old CMT
28
31
33
34
35//____________________________________________________________________
40
41//____________________________________________________________________
45
46//____________________________________________________________________
48{
49 static const SCT_ID * idhelper = VP1DetInfo::sctIDHelper();
50 QStringList l;
51 l << " ===> SCT_RDORawData";
52 l << " Data word: "+unsignedToHex(m_data->getWord());
53 if (verbose) {
54 if (idhelper) {
55 Identifier id(m_data->identify());
56 bool barrel(false);
57 if (idhelper->barrel_ec(id)==-2) l << " Part: End Cap C";
58 else if (idhelper->barrel_ec(id)==2) l << " Part: End Cap A";
59 else { l << " Part: Barrel"; barrel = true; }
60 l << " "+QString(barrel?"Layer":"Disk")+": "+QString::number(idhelper->layer_disk(id));
61 l << " Phi module: "+QString::number(idhelper->phi_module(id));
62 l << " Eta module: "+QString::number(idhelper->eta_module(id));
63 l << " Side: "+QString(idhelper->side(id)==0 ? "Inner":"Outer");
64 l << " Group Size: "+QString::number(m_data->getGroupSize());
65 if (m_data->getGroupSize()>1)
66 l << " Strips: "+QString::number(idhelper->strip(id))+".."+QString::number(idhelper->strip(id)+m_data->getGroupSize()-1);
67 else
68 l << " Strip: "+QString::number(idhelper->strip(id));
69 }
70 //Fixme: Try dynamic cast to SCT3_RawData, and print more information if it succeeds.
71 }
72 return l;
73}
74
75//____________________________________________________________________
77{
78 static const SCT_ID * idhelper = VP1DetInfo::sctIDHelper();
79 const InDetDD::SiDetectorElement * elem = element();
80 const int ngroup = m_data->getGroupSize();
81 if (!elem||ngroup<1)
82 return common()->nodeManager()->getShapeNode_Point();//fixme: warn
83
84 const InDetDD::SCT_ModuleSideDesign& design = dynamic_cast<const InDetDD::SCT_ModuleSideDesign&>(elem->design());
85
86 SoLineSet * line = new SoLineSet;
87 SoVertexProperty * vertices = new SoVertexProperty;
88 line->vertexProperty = vertices;
89
90 Amg::Transform3D invTransform(elem->transform().inverse());
91 const int ifirststrip(idhelper ? idhelper->strip(m_data->identify()) : 0);
92 int iver(0);
93 std::pair<InDetDD::SiLocalPosition,InDetDD::SiLocalPosition> localEnds;
94 for (int i=0;i<ngroup;++i) {
95 std::pair< Amg::Vector3D, Amg::Vector3D > globalEnds = elem->endsOfStrip(design.positionFromStrip(ifirststrip+i));
96 Amg::Vector3D localA(invTransform*globalEnds.first);
97 Amg::Vector3D localB(invTransform*globalEnds.second);
98 localEnds = design.endsOfStrip(design.positionFromStrip(ifirststrip+i));
99 vertices->vertex.set1Value(iver++,localA.x(),localA.y(),0);
100 vertices->vertex.set1Value(iver++,localB.x(),localB.y(),0);
101 line->numVertices.set1Value(i,2);
102 }
103 return line;
104}
105
106//____________________________________________________________________
108{
109 const InDetDD::SiDetectorElement * elem = element();
110 if (!elem)
111 return common()->nodeManager()->getUnitTransform();//fixme: warn
112 return VP1LinAlgUtils::toSoTransform(elem->transform());
113}
114
115//____________________________________________________________________
117{
119 if (!detmgr)
120 return 0;
121 return detmgr->getDetectorElement(m_data->identify());
122}
123
124// //____________________________________________________________________
125// SoMaterial * VP1RawDataHandle_SCT_RDO::determineMaterial() const
126// {
127// return common()->sctMaterial();
128// }
129
130//____________________________________________________________________
131VP1RawDataFlags::InDetPartsFlags VP1RawDataHandle_SCT_RDO::inInDetParts() const
132{
133 const InDetDD::SiDetectorElement * elem = element();
134 if (!elem)
136 if (elem->center().z()>=0)
138 else
140
141}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
This is an Identifier helper class for the SCT subdetector.
SoTransform * getUnitTransform()
Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated SCT in...
virtual const SiDetectorElement * getDetectorElement(const Identifier &id) const override
access to individual elements via Identifier
Base class for the SCT module side design, extended by the Forward and Barrel module design.
virtual SiLocalPosition positionFromStrip(const int stripNumber) const
gives position of strip center ALTERNATIVE/PREFERED way is to use localPositionOfCell(const SiCellId ...
virtual std::pair< SiLocalPosition, SiLocalPosition > endsOfStrip(const SiLocalPosition &position) const override=0
give the ends of strips
Class to hold geometrical description of a silicon detector element.
This is an Identifier helper class for the SCT subdetector.
Definition SCT_ID.h:68
int layer_disk(const Identifier &id) const
Definition SCT_ID.h:687
int side(const Identifier &id) const
Definition SCT_ID.h:705
int phi_module(const Identifier &id) const
Definition SCT_ID.h:693
int strip(const Identifier &id) const
Definition SCT_ID.h:717
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition SCT_ID.h:681
int eta_module(const Identifier &id) const
Definition SCT_ID.h:699
static const InDetDD::SCT_DetectorManager * sctDetMgr()
static const SCT_ID * sctIDHelper()
static SoTransform * toSoTransform(const HepGeom::Transform3D &, SoTransform *t=0)
HitsSoNodeManager * nodeManager() const
VP1RawDataCommonData * common() const
VP1RawDataHandleBase(VP1RawDataCollBase *)
static QString unsignedToHex(unsigned)
VP1RawDataCollBase * coll() const
QStringList clicked(bool verbose) const
VP1RawDataFlags::InDetPartsFlags inInDetParts() const
const InDetDD::SiDetectorElement * element() const
VP1RawDataHandle_SCT_RDO(VP1RawDataCollBase *, const SCT_RDORawData *)
bool verbose
Definition hcg.cxx:73
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D