ATLAS Offline Software
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 
5 #include "MMPrepDataRetriever.h"
6 
7 #include "MuonFullIDHelper.h"
13 
14 #include <vector>
15 
16 namespace JiveXML {
17 
18  //--------------------------------------------------------------------------
19 
20  MMPrepDataRetriever::MMPrepDataRetriever(const std::string& type,const std::string& name, const IInterface* 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 }
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
JiveXML::MMPrepDataRetriever::MMPrepDataRetriever
MMPrepDataRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
Definition: MMPrepDataRetriever.cxx:20
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
JiveXML::MMPrepDataRetriever::dataTypeName
virtual std::string dataTypeName() const
Return the name of the data type.
Definition: MMPrepDataRetriever.h:32
JiveXML::MMPrepDataRetriever::retrieve
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
Definition: MMPrepDataRetriever.cxx:42
JiveXML::DataVect
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition: DataType.h:58
MuonGM::MMReadoutElement::getDesign
const MuonChannelDesign * getDesign(const Identifier &id) const
returns the MuonChannelDesign class for the given identifier
Definition: MMReadoutElement.h:193
DataType
OFFLINE_FRAGMENTS_NAMESPACE::PointerType DataType
Definition: RoIBResultByteStreamTool.cxx:25
MuonPrepDataContainer.h
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
JiveXML::DataMap
std::map< std::string, DataVect > DataMap
Definition: DataType.h:59
x
#define x
JiveXML::MMPrepDataRetriever::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MMPrepDataRetriever.h:42
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
GeoPrimitives.h
MMReadoutElement.h
z
#define z
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
MuonGM::MMReadoutElement::stripGlobalPosition
bool stripGlobalPosition(const Identifier &id, Amg::Vector3D &gpos) const
Definition: MMReadoutElement.h:282
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
JiveXML
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
Definition: BadLArRetriever.cxx:21
JiveXML::MMPrepDataRetriever::initialize
StatusCode initialize()
Default AthAlgTool methods.
Definition: MMPrepDataRetriever.cxx:30
MuonPadDesign.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
JiveXML::MMPrepDataRetriever::m_sgKey
SG::ReadHandleKey< Muon::MMPrepDataContainer > m_sgKey
The storegate key for the MM collection.
Definition: MMPrepDataRetriever.h:40
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
JiveXML::MuonFullIDHelper::getFullID
std::string getFullID(Identifier id, const MdtIdHelper &mdtHelper)
Get the identifier string for an MDT ID with the sequence: Detector/StationName/StationEta/StationPhi...
Definition: MuonFullIDHelper.cxx:26
MuonGM::MuonChannelDesign::channelLength
double channelLength(int channel) const
STRIPS ONLY: calculate channel length for a given strip number.
Definition: MuonChannelDesign.h:391
MuonChannelDesign.h
MuonGM::MuonChannelDesign
Definition: MuonChannelDesign.h:24
y
#define y
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
MuonGM::MuonChannelDesign::stereoAngle
double stereoAngle() const
returns the stereo angle
Definition: MuonChannelDesign.h:73
MuonGM::MMReadoutElement
An MMReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station con...
Definition: MMReadoutElement.h:23
MuonFullIDHelper.h
AthAlgTool
Definition: AthAlgTool.h:26
MMPrepDataRetriever.h
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26