ATLAS Offline Software
Loading...
Searching...
No Matches
MMPrepDataRetriever.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include "MuonFullIDHelper.h"
13
14#include <vector>
15
16namespace JiveXML {
17
18 //--------------------------------------------------------------------------
19
20 MMPrepDataRetriever::MMPrepDataRetriever(const std::string& type,const std::string& name, const IInterface* parent):
21 AthAlgTool(type, name, parent)
22 {
23
24 declareInterface<IDataRetriever>(this);
25
26 }
27
28 //--------------------------------------------------------------------------
29
31
32 ATH_MSG_DEBUG("Initializing retriever for " << dataTypeName());
33 ATH_CHECK(m_sgKey.initialize());
34
35 ATH_CHECK( m_idHelperSvc.retrieve() );
36
37 return StatusCode::SUCCESS;
38 }
39
40 //--------------------------------------------------------------------------
41
42 StatusCode MMPrepDataRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) {
43
44 //be verbose
45 ATH_MSG_VERBOSE("Retrieving " << dataTypeName());
46
48
49 int ndata = 0;
50 for (const auto mmCollection : *mmContainer){
51 ndata += mmCollection->size();
52 }
53 //Make the vectors to contain the information and reserve space accordingly
54 DataVect x; x.reserve(ndata);
55 DataVect y; y.reserve(ndata);
56 DataVect z; z.reserve(ndata);
57 DataVect lengthVec; lengthVec.reserve(ndata);
58 DataVect angleVec; angleVec.reserve(ndata);
59 DataVect idVec; idVec.reserve(ndata);
60 DataVect identifierVec; identifierVec.reserve(ndata);
61 DataVect barcode; barcode.reserve(ndata);
62
63 for (const auto mmCollection : *mmContainer){
64 for (const auto data : *mmCollection){
65
66 const MuonGM::MMReadoutElement *element = data->detectorElement();
67 Identifier id = data->identify();
68
69 if (!element) {
70 ATH_MSG_WARNING("No MuonGM::MMReadoutElement for hit " << id);
71 continue;
72 }
73
74 Amg::Vector3D globalPos;
75 double length=0, angle=0;
76 int channel = m_idHelperSvc->mmIdHelper().channel(id);
77 const MuonGM::MuonChannelDesign* design = element->getDesign(id);
78 element->stripGlobalPosition(id, globalPos);
79 length = design->channelLength(channel);
80 angle = design->stereoAngle();
81
82 x.push_back(DataType(globalPos.x()/CLHEP::cm));
83 y.push_back(DataType(globalPos.y()/CLHEP::cm));
84 z.push_back(DataType(globalPos.z()/CLHEP::cm));
85 lengthVec.push_back(DataType(length/CLHEP::cm));
86 angleVec.push_back(DataType(angle));
87 identifierVec.push_back(DataType(MuonFullIDHelper::getFullID(id, m_idHelperSvc->mmIdHelper())));
88 idVec.push_back(DataType( id.get_compact() ));
89 barcode.push_back(DataType(0));
90
91 }
92 }
93
94 DataMap myDataMap;
95 myDataMap["x"] = x;
96 myDataMap["y"] = y;
97 myDataMap["z"] = z;
98 myDataMap["length"] = lengthVec;
99 myDataMap["angle"] = angleVec;
100 myDataMap["identifier"] = identifierVec;
101 myDataMap["id"] = idVec;
102 myDataMap["barcode"] = barcode;
103
104 //Be verbose
105 ATH_MSG_DEBUG(dataTypeName() << ": "<< x.size());
106
107 //forward data to formating tool
108 // Atlantis can't deal with SGkey in xml output in CSCD (freezes)
109 // So not output SGKey for now. jpt 20Aug09
110 std::string emptyStr="";
111 return FormatTool->AddToEvent(dataTypeName(), m_sgKey.key(), &myDataMap);
112 }
113}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
OFFLINE_FRAGMENTS_NAMESPACE::PointerType DataType
double length(const pvec &v)
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
#define y
#define x
#define z
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
virtual std::string dataTypeName() const
Return the name of the data type.
SG::ReadHandleKey< Muon::MMPrepDataContainer > m_sgKey
The storegate key for the MM collection.
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
MMPrepDataRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
StatusCode initialize()
Default AthAlgTool methods.
An MMReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station con...
const MuonChannelDesign * getDesign(const Identifier &id) const
returns the MuonChannelDesign class for the given identifier
bool stripGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
Eigen::Matrix< double, 3, 1 > Vector3D
std::string getFullID(Identifier id, const MdtIdHelper &mdtHelper)
Get the identifier string for an MDT ID with the sequence: Detector/StationName/StationEta/StationPhi...
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
std::map< std::string, DataVect > DataMap
Definition DataType.h:59
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition DataType.h:58
double stereoAngle() const
returns the stereo angle
double channelLength(int channel) const
STRIPS ONLY: calculate channel length for a given strip number.