diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/AlignableTransform.h b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/AlignableTransform.h new file mode 100755 index 0000000000000000000000000000000000000000..86d2cbab0fffc8d0371ee5d11e39b84f57182a5d --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/AlignableTransform.h @@ -0,0 +1,129 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DETDESCRCOND_ALIGNTRANS_H +#define DETDESCRCOND_ALIGNTRANS_H +// AlignableTransform.h - simple class to hold Identifier and transform for +// alignment information +// Richard Hawkings, started 23/9/03 +// +// AlignableTransform consists of a vector of AlignTransMember objects, +// each of which is contains an Identifier and a HepGeom::Transform3D +// It is designed to reside in the detector store and be kept in the +// conditionsDB. The AlignTransTool AlgTool (in DetDescrTools) provides +// a user interface to manage these objects + +#include <vector> +#include <algorithm> +#include "Identifier/Identifier.h" +#include "CLHEP/Geometry/Transform3D.h" + +#ifndef CLIDSVC_CLASSDEF_H +#include "CLIDSvc/CLASS_DEF.h" +#endif + +class AlignableTransform { + public: + AlignableTransform(); + AlignableTransform(std::string tag); + virtual ~AlignableTransform(); + + // embedded class AlignTransMember holds the information for one module + // i.e. module identifier and associated transform + class AlignTransMember { + public: + AlignTransMember(); + AlignTransMember(const Identifier& ident, const HepGeom::Transform3D& trans); + const Identifier& identify() const; + const HepGeom::Transform3D& transform() const; + void setTransform(const HepGeom::Transform3D& trans); + + private: + Identifier m_ident; + HepGeom::Transform3D m_trans; + }; + + // const and non-const iterator definitions + typedef std::vector<AlignTransMember>::const_iterator AlignTransMem_citr; + AlignTransMem_citr begin() const; + AlignTransMem_citr end() const; + typedef std::vector<AlignTransMember>::iterator AlignTransMem_itr; + AlignTransMem_itr mbegin(); + AlignTransMem_itr mend(); + // return pointer to particular module + AlignTransMem_citr findIdent(const Identifier& ident) const; + AlignTransMem_itr findIdent(const Identifier& ident); + // return tag name for AlignableTransform + const std::string& tag() const; + + // add a new member to the AlignableTransform + void add(Identifier ident,HepGeom::Transform3D trans); + // reset the specified transform + bool update(const Identifier ident,const HepGeom::Transform3D trans); + // tweak, i.e. combine new transform with that already existing + bool tweak(const Identifier ident,const HepGeom::Transform3D trans); + void print() const; + void print2() const; + // sort transform vector, to be called after adding new transforms + void sortv(); + + private: + std::string m_tag; + std::vector<AlignTransMember> m_vec; +}; + +CLASS_DEF(AlignableTransform,158187411,1) + +inline const Identifier& +AlignableTransform::AlignTransMember::identify() const +{ return m_ident;} + +inline const HepGeom::Transform3D& +AlignableTransform::AlignTransMember::transform() const +{ return m_trans;} + +inline void AlignableTransform::AlignTransMember::setTransform( + const HepGeom::Transform3D& trans) { m_trans=trans;} + +inline bool operator< (const AlignableTransform::AlignTransMember& lhs, + const AlignableTransform::AlignTransMember& rhs) { + return (lhs.identify() < rhs.identify()); +} + +inline AlignableTransform::AlignableTransform() { m_tag="null"; } +inline AlignableTransform::~AlignableTransform() {} + +inline AlignableTransform::AlignTransMem_citr + AlignableTransform::begin() const { return m_vec.begin();} +inline AlignableTransform::AlignTransMem_citr + AlignableTransform::end() const { return m_vec.end();} + +inline AlignableTransform::AlignTransMem_itr + AlignableTransform::mbegin() { return m_vec.begin();} +inline AlignableTransform::AlignTransMem_itr + AlignableTransform::mend() { return m_vec.end();} + +inline AlignableTransform::AlignTransMem_citr + AlignableTransform::findIdent(const Identifier& ident) const { + AlignableTransform::AlignTransMember obj(ident,HepGeom::Transform3D()); + AlignableTransform::AlignTransMem_citr rc=std::lower_bound(m_vec.begin(),m_vec.end(),obj); + if (rc!=m_vec.end() && rc->identify()!=ident) rc=m_vec.end(); + return rc; +} + +// same as previous but non-const +inline AlignableTransform::AlignTransMem_itr + AlignableTransform::findIdent(const Identifier& ident) { + AlignableTransform::AlignTransMember obj(ident,HepGeom::Transform3D()); + AlignableTransform::AlignTransMem_itr rc=std::lower_bound(m_vec.begin(),m_vec.end(),obj); + if (rc!=m_vec.end() && rc->identify()!=ident) rc=m_vec.end(); + return rc; +} + +inline const std::string& AlignableTransform::tag() const {return m_tag;} + +inline void AlignableTransform::sortv() { + sort(m_vec.begin(),m_vec.end()); } + +#endif // DETDESCRCOND_ALIGNTRANS_H diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/AlignableTransformContainer.h b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/AlignableTransformContainer.h new file mode 100755 index 0000000000000000000000000000000000000000..ac238e0f4a6c543d69625adea29f74f053cdb7b6 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/AlignableTransformContainer.h @@ -0,0 +1,22 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DETDESCRCOND_ALIGNTRKCONTAINER_H +#define DETDESCRCOND_ALIGNTRKCONTAINER_H +// AlignableTransformContainer.h - a container for AlignableTransform objects +// using the CondMultChanCollection to allow storage as a set of POOLrefs +// in conditions database +// Richard Hawkings, 31/8/05 + +#ifndef CLIDSVC_CLASSDEF_H +#include "CLIDSvc/CLASS_DEF.h" +#endif +#include "AthenaPoolUtilities/CondMultChanCollection.h" +#include "DetDescrConditions/AlignableTransform.h" + +typedef CondMultChanCollection<AlignableTransform> AlignableTransformContainer; + +CLASS_DEF( AlignableTransformContainer , 1170039409 , 1 ) + +#endif // DETDESCRCOND_ALIGNTRKCONTAINER_H diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondCFloat.h b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondCFloat.h new file mode 100755 index 0000000000000000000000000000000000000000..6e818227940588644fc83dbd0b0adb8a7a291062 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondCFloat.h @@ -0,0 +1,82 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DETDESCRCOND_DETCONDCFLOAT_H +#define DETDESCRCOND_DETCONDCFLOAT_H +// DetCondCFloat.h - class to hold sets of Identifiers and arrays of floats +// for detector element specific information +// Richard Hawkings, started 29/1/04 +// formerly DetCondFloat but renamed to DetCondCFloat to allow DetCondFloat +// to be a parallel virtual class with no CLASS_DEF +// Latter is inherited by specialised TRT conditions data classes +// +// Based on AlignableTransform but with vectors of floats of arbitrary size +// (at initialisation time). These objects are designed to reside in the +// detector store and be kept in the conditionsDB. +// +// Methods are provided to create a new object with a float vector of a +// specified size, add an Identifier and associated array of floats, +// and to associate a new Identifier with some already stored set of floats +// This sharing mechanism can be used to tranparently associate one set of +// constants to a large number of identifiers (i.e. detector elements) +// and then increase the granularity later +// +// Access to the data is provided by the find method, which returns a pointer +// to the floats associated with a particular identifier (or a null pointer +// if the identifier is not known. The index within the internal storage +// of a particular identifier's data can also be retrieved, for use in +// a subsequent call to the share method (this index is also returned by +// the add method). +// print and print2 methods print the data with varying amounts of detail + +#include <vector> +#include <map> +#include <algorithm> +#include "Identifier/Identifier.h" + +#ifndef CLIDSVC_CLASSDEF_H +#include "CLIDSvc/CLASS_DEF.h" +#endif + +class DetCondCFloat { + public: + DetCondCFloat(); + DetCondCFloat(const int size,const std::string tag); + virtual ~DetCondCFloat(); + + int size() const; + const std::string& tag() const; + + int add(const Identifier& ident, const float* f); + void share(const Identifier& ident, const int index); + const float* find(const Identifier& ident) const; + int findindex(const Identifier& ident) const; + void print() const; + void print2() const; + + private: + int m_size; + std::string m_tag; + typedef std::less<Identifier> lessp; + typedef std::map<Identifier,int,lessp> BufferMap; + BufferMap m_bufmap; + std::vector<float> m_buf; +}; + +CLASS_DEF(DetCondCFloat,247459965,1) + +// inline functions for DetCondCFloat + +inline DetCondCFloat::DetCondCFloat() : m_size(0), m_tag("null") {} + +inline DetCondCFloat::DetCondCFloat(int size,const std::string tag) : +m_size(size), m_tag(tag) {} + +inline DetCondCFloat::~DetCondCFloat() {} + +inline int DetCondCFloat::size() const {return m_size;} + +inline const std::string& DetCondCFloat::tag() const {return m_tag;} + +#endif // DETDESCRCOND_DETCONDCFLOAT_H diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondFloat.h b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondFloat.h new file mode 100755 index 0000000000000000000000000000000000000000..fcf31720c83cb0c6edf690b05d198c2ce832a5a4 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondFloat.h @@ -0,0 +1,80 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DETDESCRCOND_DETCONDFLOAT_H +#define DETDESCRCOND_DETCONDFLOAT_H +// DetCondFloat.h - class to hold sets of Identifiers and arrays of floats +// for detector element specific information +// Richard Hawkings, started 29/1/04 +// +// Based on AlignableTransform but with vectors of floats of arbitrary size +// (at initialisation time). These objects are designed to reside in the +// detector store and be kept in the conditionsDB. +// +// Methods are provided to create a new object with a float vector of a +// specified size, add an Identifier and associated array of floats, +// and to associate a new Identifier with some already stored set of floats +// This sharing mechanism can be used to tranparently associate one set of +// constants to a large number of identifiers (i.e. detector elements) +// and then increase the granularity later +// +// Access to the data is provided by the find method, which returns a pointer +// to the floats associated with a particular identifier (or a null pointer +// if the identifier is not known. The index within the internal storage +// of a particular identifier's data can also be retrieved, for use in +// a subsequent call to the share method (this index is also returned by +// the add method). +// print and print2 methods print the data with varying amounts of detail + +#include <vector> +#include <map> +#include <algorithm> +#include "Identifier/Identifier.h" + +// remove classdef as this is now abstract class which TRT alignment inherits +//#ifndef CLIDSVC_CLASSDEF_H +//#include "CLIDSvc/CLASS_DEF.h" +//#endif + +class DetCondFloat { + public: + DetCondFloat(); + DetCondFloat(const int size,const std::string tag); + virtual ~DetCondFloat(); + + int size() const; + const std::string& tag() const; + + int add(const Identifier& ident, const float* f); + void share(const Identifier& ident, const int index); + const float* find(const Identifier& ident) const; + int findindex(const Identifier& ident) const; + virtual void print() const; + virtual void print2() const; + + protected: + int m_size; + std::string m_tag; + typedef std::less<Identifier> lessp; + typedef std::map<Identifier,int,lessp> BufferMap; + BufferMap m_bufmap; + std::vector<float> m_buf; +}; + +// CLASS_DEF(DetCondFloat,158187412,1); + +// inline functions for DetCondFloat + +inline DetCondFloat::DetCondFloat() : m_size(0), m_tag("null") {} + +inline DetCondFloat::DetCondFloat(int size,const std::string tag) : +m_size(size), m_tag(tag) {} + +inline DetCondFloat::~DetCondFloat() {} + +inline int DetCondFloat::size() const {return m_size;} + +inline const std::string& DetCondFloat::tag() const {return m_tag;} + +#endif // DETDESCRCOND_DETCONDFLOAT_H diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondKeyTrans.h b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondKeyTrans.h new file mode 100755 index 0000000000000000000000000000000000000000..c30df307844920a953380f5a95503a345d847c22 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetCondKeyTrans.h @@ -0,0 +1,58 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DETDESCRCOND_KEYTRANS_H +#define DETDESCRCOND_KEYTRANS_H +// DetCondKeyTrans.h - class to hold set of HepGeom::Transform3D keyed by string +// value for storage in the conditions DB +// typically for holding top-level transforms for GeoModel/G4 +// This class can be persistified (converters in DetDescrCondAthenaPool) +// +// Richard Hawkings, started 23/6/05 + +#include <string> +#include <map> +#include "CLHEP/Geometry/Transform3D.h" + +#ifndef CLIDSVC_CLASSDEF_H +#include "CLIDSvc/CLASS_DEF.h" +#endif + +class DetCondKeyTrans { + public: + DetCondKeyTrans(); + virtual ~DetCondKeyTrans(); + + // set a transform corresponding to a particular key value + // if a transform with this key is already present, it is overwritten + void setTransform(const std::string& key, const HepGeom::Transform3D& trans); + + // get the transform corresponding to this key into result + // returns false if the transform cannot be found + bool getTransform(const std::string& key, HepGeom::Transform3D& result) const; + + // check if transform corresponding to this key exists + bool exists(const std::string& key) const; + + // print the set of key/transform pairs to stdout + void print() const; + + private: + typedef std::map<std::string,HepGeom::Transform3D> KeyTrans; + KeyTrans m_keytrans; +}; + +CLASS_DEF(DetCondKeyTrans,254546453,1) + +// iterator declaration for SEAL dictionary +// removed - perhaps will not be needed for reflex, causes problem for gcc344 +// template std::map<std::string,HepGeom::Transform3D>::iterator; + +// virtual destructor to satify requirement for persistent classes to have vtbl +inline DetCondKeyTrans::~DetCondKeyTrans() {} + +inline void DetCondKeyTrans::setTransform(const std::string& key, + const HepGeom::Transform3D&trans) { m_keytrans[key]=trans;} + +#endif // DETDESCRCOND_KEYTRANS_H diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetDescrConditionsDict.h b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetDescrConditionsDict.h new file mode 100755 index 0000000000000000000000000000000000000000..159d7680e0a51f4e8e2a9a586878c25fa7e4a1c9 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetDescrConditionsDict.h @@ -0,0 +1,20 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DETDESCRCONDITIONS_DETDESCRCONDDICT_H +#define DETDESCRCONDITIONS_DETDESCRCONDDICT_H + +#include "DetDescrConditions/AlignableTransform.h" +#include "DetDescrConditions/AlignableTransformContainer.h" +#include "DetDescrConditions/DetCondFloat.h" +#include "DetDescrConditions/DetCondCFloat.h" +#include "DetDescrConditions/DetCondKeyTrans.h" +#include "DetDescrConditions/DetStatusMap.h" + +struct dummy { + DetStatusMap::const_iterator m_it; +}; + +#endif + diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetStatus.h b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetStatus.h new file mode 100755 index 0000000000000000000000000000000000000000..dc690b6f0e4bb7718db0e43fa924136f017ebaf6 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetStatus.h @@ -0,0 +1,41 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DETDESCRCOND_DETSTATUS_H +#define DETDESCRCOND_DETSTATUS_H +// DetStatus.h - class to hold details of a subdetector status +// Richard Hawkings, started 19/12/06 + +#include<string> + +class DetStatus { + public: + DetStatus(); + // constructor with parameters + DetStatus(const int fullcode, + const float deadfrac, const float deadthrust); + + virtual ~DetStatus(); + + // access functions + int code() const; + int fullCode() const; + float deadFrac() const; + float deadThrust() const; + std::string colour() const; + + private: + int m_code; + float m_deadfrac; + float m_deadthrust; +}; + +inline DetStatus::~DetStatus() {} + +inline int DetStatus::code() const { return m_code<0 ? m_code : m_code & 3; } +inline int DetStatus::fullCode() const { return m_code; } +inline float DetStatus::deadFrac() const { return m_deadfrac;} +inline float DetStatus::deadThrust() const { return m_deadthrust;} + +#endif // DETDESCRCOND_DETSTATUS_H diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetStatusMap.h b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetStatusMap.h new file mode 100755 index 0000000000000000000000000000000000000000..c64d2c88362284bb2cd9b3a5eabcdf6c631c65fa --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetStatusMap.h @@ -0,0 +1,95 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef DETDESCRCOND_DETSTATUSMAP_H +#define DETDESCRCOND_DETSTATUSMAP_H +// DetStatusMap.h - class to hold details of all subdetector status +// can be written to POOL for ESD/AOD files +// Richard Hawkings, started 13/12/06 + +#include "CLIDSvc/CLASS_DEF.h" +#include "GaudiKernel/DataObject.h" +#include "GaudiKernel/MsgStream.h" +#include "DetDescrConditions/DetStatus.h" +#include <string> +#include <vector> +#include <algorithm> + +class DetStatusMap : public DataObject { + public: + typedef std::pair<std::string,DetStatus> DetStatusPair; + typedef std::vector<DetStatusPair> StatusMap; + typedef StatusMap::const_iterator const_iterator; + + // Add this to allow python iteration over the contents. + typedef const_iterator iterator; + + DetStatusMap(); + virtual ~DetStatusMap(); + + // access methods to map + unsigned int size() const; + const_iterator begin() const; + const_iterator end() const; + const_iterator find(const std::string& name) const; + + // set methods + void clear(); + void add(const std::string& name, const DetStatus& status); + + // print method + MsgStream& toOutputStream(MsgStream& os) const; + + private: + + class PairSort { + public: + bool operator () (const DetStatusPair& x, const DetStatusPair& y) + { return (x.first < y.first); } + bool operator () (const DetStatusPair& x, const std::string& y) + { return (x.first < y); } + }; + + StatusMap m_statmap; +}; + +CLASS_DEF( DetStatusMap , 264405569 , 1 ) + +inline DetStatusMap::~DetStatusMap() {} + +inline unsigned int DetStatusMap::size() const { return m_statmap.size(); } + +inline DetStatusMap::const_iterator DetStatusMap::begin() const +{ return m_statmap.begin(); } + +inline DetStatusMap::const_iterator DetStatusMap::end() const +{ return m_statmap.end(); } + +inline DetStatusMap::const_iterator DetStatusMap::find(const std::string& name) const +{ + const_iterator result = std::lower_bound(m_statmap.begin(), + m_statmap.end(), + name, PairSort()) ; + if ( result != m_statmap.end() && (*result).first == name ) return (result) ; + return m_statmap.end() ; +} + +inline void DetStatusMap::clear() { m_statmap.clear(); } + +inline void DetStatusMap::add(const std::string& name, const DetStatus& status) +{ + m_statmap.push_back( DetStatusPair(name, status) ) ; + std::sort( m_statmap.begin() , m_statmap.end() , PairSort() ); +} + +inline MsgStream& DetStatusMap::toOutputStream(MsgStream& os) const { + os << "DetStatusMap of size: " << m_statmap.size() << endreq; + for (StatusMap::const_iterator itr=m_statmap.begin();itr!=m_statmap.end(); + ++itr) os << itr->first << " : " << itr->second.colour() << " (" << + itr->second.deadFrac() << "," << itr->second.deadThrust() << + ")" << endreq; + return os; +} + +#endif // DETDESCRCOND_DETSTATUSMAP_H diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/selection.xml b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/selection.xml new file mode 100755 index 0000000000000000000000000000000000000000..e450ffbead5a591eed90d5d6b460a95fda82d291 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/selection.xml @@ -0,0 +1,23 @@ +<lcgdict> + <class name="AlignableTransform" id="E779C6B5-3F2A-473E-B35E-6CCB345E0665" /> + +<!-- Temporarily commented out - done by hand in ../src/ DetDescrConditionsDict_dict_fixes.cxx --> +<!-- Put back in as fix removed for ROOT5 migration (RJH) --> + <class name="AlignableTransform::AlignTransMember" /> + + <class name="std::vector<AlignableTransform::AlignTransMember>" /> + <class name="AlignableTransformContainer" id="E6740904-E6F2-4D41-944A-C8EF92FE4B17" /> + <class name="DataVector<AlignableTransform>" /> + <class name="std::vector<AlignableTransform*>" /> + <class name="DetCondFloat" id="C2CDCE81-DF11-4F14-97AA-B6618376ABFC" /> + <class name="DetCondCFloat" id="DCE158E2-27A7-4A78-9778-D3E4D4F740CB" /> + <class name="DetCondKeyTrans" id="A6DA54AC-D54E-4B6C-8489-C6D015277AD0" /> + <class name="std::map<std::string,HepGeom::Transform3D>" /> + <!-- <class name="std::set<unsigned long>"/> --> + <class name="DetStatusMap" id="CB1BFF00-64B1-4693-8035-19BB18867AF1" /> + <class name="DetStatus" /> + <class name="std::pair<std::string,DetStatus>" /> + <class name="std::vector<std::pair<std::string,DetStatus> >" /> + <class name="DetStatusMap::iterator"/> + <class name="__gnu_cxx::__normal_iterator<std::pair<std::string,DetStatus>*,std::vector<std::pair<std::string,DetStatus> > >"/> +</lcgdict> diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/cmt/requirements b/DetectorDescription/DetDescrCond/DetDescrConditions/cmt/requirements new file mode 100755 index 0000000000000000000000000000000000000000..5694cd1d775452598fb5abc8b64075e9bb747913 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/cmt/requirements @@ -0,0 +1,35 @@ +package DetDescrConditions +############################################################################## +# DetDescrConditions - data classes for subdetector independent alignment info +# and other conditions data (to be added) +############################################################################## + +author Richard Hawkings <richard.hawkings@cern.ch> + +use AtlasPolicy AtlasPolicy-* +use GaudiInterface GaudiInterface-01-* External +use CLIDSvc CLIDSvc-00-* Control +use Identifier Identifier-00-* DetectorDescription +use AtlasCLHEP AtlasCLHEP-00-* External +use AthenaPoolUtilities AthenaPoolUtilities-00-* Database/AthenaPOOL + +apply_pattern installed_library +library DetDescrConditions \ + AlignableTransform.cxx \ + DetCondFloat.cxx DetCondCFloat.cxx \ + DetCondKeyTrans.cxx DetStatus.cxx DetStatusMap.cxx + +private +use AtlasReflex AtlasReflex-00-* External -no_auto_imports + +apply_pattern lcgdict dict=DetDescrConditions selectionfile=selection.xml headerfiles="../DetDescrConditions/DetDescrConditionsDict.h" + +# Now build a special (hand-written) library to build a dictionary for AlignTransMember +# temporarily removed for ROOT5 migration (RJH) +#apply_pattern lcgdictfix libname=DetDescrConditions dictfiles="DetDescrConditionsDict_dict_fixes.cxx" + + +end_private + + + diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/doc/mainpage.h b/DetectorDescription/DetDescrCond/DetDescrConditions/doc/mainpage.h new file mode 100755 index 0000000000000000000000000000000000000000..94164a0cec0ae68c761fd00e75008d3c5ecb4bf1 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/doc/mainpage.h @@ -0,0 +1,39 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/** +\mainpage The DetDescrCondtions package + +\section introductionDetDescrConditions Introduction + +This package collects together conditions database objects used in detector +description applications. The POOL converters for all the objects are +defined in the package InDetCondAthenaPool. + +\section AlignableTransform + +This class consists of a vector of HepGeom::Transform3Ds each associated with +an offline Identifier. It is used for example to store the alignment constants +for each layer of the SCT and pixel detector. Methods are provided to +get and set the tranforms using the Identifier as a key, to iterate over +all the transforms in the class, and to print the contents. + +An AlignableTransformContainer is also defined, consisting of a DataVector +of AlignableTransforms, allowing them to be read/written as a single entity. + +\section DetCondFloat + +This class consists of a vector of vectors of floats, each associated +with an offline Identifier. Several identifiers can be mapped to the same +set of floats to save space where common constants are required. This +class is used for example by the TRT calibration data. + +\section DetDescrKeyTrans + +This class consists of a vector of HepGeom::Transform3Ds, each associated with +an artbitrary string identifier. It is similar to AlignableTranform, but +using strings instead of Identifiers, and the internal implementation is +simpler (using a map instead of an embedded class). + +*/ diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/src/AlignableTransform.cxx b/DetectorDescription/DetDescrCond/DetDescrConditions/src/AlignableTransform.cxx new file mode 100755 index 0000000000000000000000000000000000000000..bf43a713be363077059edf78b6600f0d83d94daa --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/src/AlignableTransform.cxx @@ -0,0 +1,63 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// AlignableTransform.cxx +// simple alignable transform +// Richard Hawkings, started 23/9/03 + +#include <iostream> +#include "DetDescrConditions/AlignableTransform.h" + +AlignableTransform::AlignableTransform(std::string tag) : + m_tag(tag), m_vec() +{} + +void AlignableTransform::add(Identifier ident, HepGeom::Transform3D trans) { + m_vec.push_back(AlignTransMember(ident,trans)); +} + +void AlignableTransform::print() const { + std::cout << "AlignableTransform::print tagname:" << m_tag << + " vector size " << m_vec.size() << std::endl; +} + +void AlignableTransform::print2() const { + print(); + int i=0; + CLHEP::Hep3Vector trans; + for (AlignTransMem_citr cit=begin(); cit!=end(); ++cit) { + trans=(cit->transform()).getTranslation(); + std::cout << "Member " << i++ << " transl [" << trans.x()*1.E3 << "," << + trans.y()*1.E3 << "," << trans.z()*1.E3 << "]" << " ID: " << + cit->identify().getString() << std::endl; + } +} + +bool AlignableTransform::update(const Identifier ident, +const HepGeom::Transform3D trans) { + AlignTransMem_itr itr=findIdent(ident); + if (itr==m_vec.end()) return false; + itr->setTransform(trans); + return true; +} + +bool AlignableTransform::tweak(const Identifier ident, +const HepGeom::Transform3D trans) { + AlignTransMem_itr itr=findIdent(ident); + if (itr==m_vec.end()) return false; + HepGeom::Transform3D newtrans=trans*(itr->transform()); + itr->setTransform(newtrans); + return true; +} + +AlignableTransform::AlignTransMember::AlignTransMember() : + m_ident(), m_trans() +{} + +AlignableTransform::AlignTransMember::AlignTransMember +(const Identifier& ident,const HepGeom::Transform3D& trans) : + m_ident(ident), m_trans(trans) +{} + + diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetCondCFloat.cxx b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetCondCFloat.cxx new file mode 100755 index 0000000000000000000000000000000000000000..3f3ab98c1a91278e86c833afdb157f6264a474b0 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetCondCFloat.cxx @@ -0,0 +1,68 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// DetCondCFloat.cxx +// class to hold sets of identifiers and vectors of floats for detector +// element specific information +// Richard Hawkings, started 30/1/04 + +#include <iostream> +#include "DetDescrConditions/DetCondCFloat.h" + +int DetCondCFloat::add(const Identifier& ident, const float* f) { + // get pointer to added objects + size_t j=m_buf.size(); + // add them in to the buffer + m_buf.resize(j+m_size); + for (int i=0;i<m_size;++i) m_buf[j+i]=f[i]; + // put new map entry + m_bufmap[ident]=j; + return j; +} + +void DetCondCFloat::share(const Identifier& ident, const int index) { + // add object which is pointing to already existing buffer space + m_bufmap[ident]=index; +} + +const float* DetCondCFloat::find(const Identifier& ident) const { + BufferMap::const_iterator itr=m_bufmap.find(ident); + if (itr!=m_bufmap.end()) { + // return pointer to datastructure + return &m_buf[itr->second]; + } else { + // identifier not in map, return null pointer + return 0; + } +} + +int DetCondCFloat::findindex(const Identifier& ident) const { + BufferMap::const_iterator itr=m_bufmap.find(ident); + if (itr!=m_bufmap.end()) { + // return index in datastructure, for subsequent share call + return itr->second; + } else { + // identifier not in map, return -ve offset to signal error + return -1; + } +} + +void DetCondCFloat::print() const { + std::cout << "DetCondCFloat " << m_tag << " has granularity " << m_size << + " with " << m_bufmap.size() << " entries and " << m_buf.size() << + " elements" << std::endl; +} + +void DetCondCFloat::print2() const { + print(); + int i=0; + for (BufferMap::const_iterator itr=m_bufmap.begin(); + itr!=m_bufmap.end(); ++itr,++i) { + int j=itr->second; + std::cout << "Element " << i << " ident " << (itr->first).getString() << + "offset " << j << " values:"; + for (int k=j; k<j+m_size; ++k) std::cout << " " << m_buf[k]; + std::cout << std::endl; + } +} diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetCondFloat.cxx b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetCondFloat.cxx new file mode 100755 index 0000000000000000000000000000000000000000..6101ca9d038f3c48734f53802cc60c7e06c5c2a7 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetCondFloat.cxx @@ -0,0 +1,68 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// DetCondFloat.cxx +// class to hold sets of identifiers and vectors of floats for detector +// element specific information +// Richard Hawkings, started 30/1/04 + +#include <iostream> +#include "DetDescrConditions/DetCondFloat.h" + +int DetCondFloat::add(const Identifier& ident, const float* f) { + // get pointer to added objects + size_t j=m_buf.size(); + // add them in to the buffer + m_buf.resize(j+m_size); + for (int i=0;i<m_size;++i) m_buf[j+i]=f[i]; + // put new map entry + m_bufmap[ident]=j; + return j; +} + +void DetCondFloat::share(const Identifier& ident, const int index) { + // add object which is pointing to already existing buffer space + m_bufmap[ident]=index; +} + +const float* DetCondFloat::find(const Identifier& ident) const { + BufferMap::const_iterator itr=m_bufmap.find(ident); + if (itr!=m_bufmap.end()) { + // return pointer to datastructure + return &m_buf[itr->second]; + } else { + // identifier not in map, return null pointer + return 0; + } +} + +int DetCondFloat::findindex(const Identifier& ident) const { + BufferMap::const_iterator itr=m_bufmap.find(ident); + if (itr!=m_bufmap.end()) { + // return index in datastructure, for subsequent share call + return itr->second; + } else { + // identifier not in map, return -ve offset to signal error + return -1; + } +} + +void DetCondFloat::print() const { + std::cout << "DetCondFloat " << m_tag << " has granularity " << m_size << + " with " << m_bufmap.size() << " entries and " << m_buf.size() << + " elements" << std::endl; +} + +void DetCondFloat::print2() const { + print(); + int i=0; + for (BufferMap::const_iterator itr=m_bufmap.begin(); + itr!=m_bufmap.end(); ++itr,++i) { + int j=itr->second; + std::cout << "Element " << i << " ident " << (itr->first).getString() << + "offset " << j << " values:"; + for (int k=j; k<j+m_size; ++k) std::cout << " " << m_buf[k]; + std::cout << std::endl; + } +} diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetCondKeyTrans.cxx b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetCondKeyTrans.cxx new file mode 100755 index 0000000000000000000000000000000000000000..ddae52d9d31634d5a357195c9ce364aec4060a65 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetCondKeyTrans.cxx @@ -0,0 +1,41 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// DetCondKeyTrans.cxx - set of HepGeom::Transform3Ds keyed by string +// Richard Hawkings, started 23/6/05 + +#include <iostream> +#include "DetDescrConditions/DetCondKeyTrans.h" + +DetCondKeyTrans::DetCondKeyTrans() : + m_keytrans() {} + +bool DetCondKeyTrans::getTransform(const std::string& key, + HepGeom::Transform3D& result) const { + KeyTrans::const_iterator ik=m_keytrans.lower_bound(key); + if (ik!=m_keytrans.end()) { + result=(ik->second); + return true; + } else { + return false; + } +} + +bool DetCondKeyTrans::exists(const std::string& key) const { + KeyTrans::const_iterator ik=m_keytrans.lower_bound(key); + return (ik!=m_keytrans.end()); +} + +void DetCondKeyTrans::print() const { + for (KeyTrans::const_iterator ik=m_keytrans.begin(); ik!=m_keytrans.end(); + ++ik) { + CLHEP::Hep3Vector trans=ik->second.getTranslation(); + CLHEP::HepRotation rot=ik->second.getRotation(); + std::cout << "Dump DetCondKeyTrans object:" << std::endl; + std::cout << "Key " << ik->first << " transl [" << trans.x() + << "," << trans.y() << "," << trans.z() << "] rotation (" + << rot.phi() << "," << rot.theta() << "," << rot.psi() << ")" + << std::endl; + } +} diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetDescrConditionsDict_dict_fixes.cxx b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetDescrConditionsDict_dict_fixes.cxx new file mode 100755 index 0000000000000000000000000000000000000000..b9c76f9775e59e80f1a11c04b1bb67997779fd6a --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetDescrConditionsDict_dict_fixes.cxx @@ -0,0 +1,103 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// Generated at Sun Jul 17 15:33:29 2005. Do not modify it + +#ifdef _WIN32 +#pragma warning ( disable : 4786 ) +#ifndef LCGDICT_STRING +#include <string> // Included here since it is sensitive to private->public trick +#endif +#endif +#define private public +#define protected public +#include "../DetDescrConditions/DetDescrConditionsDict.h" +#undef private +#undef protected +#include "ReflectionBuilder/ReflectionBuilder.h" +#include "ReflectionBuilder/CollectionProxy.h" +#include <typeinfo> +using namespace seal::reflect; + +//------Dictionary for class AlignTransMember ------------------------------- +class AlignableTransform__AlignTransMember_dict { + public: + AlignableTransform__AlignTransMember_dict(); + static void* constructor_4747( void*, const std::vector<void*>& ); + static void destructor( void* o ) { ((AlignableTransform::AlignTransMember*)o)->~AlignTransMember(); } + static void* constructor_4749( void* ); + static void* constructor_4750( void*, const std::vector<void*>& ); + static void* method_4751( void* ); + static void* method_4752( void* ); + static void method_4753( void*, const std::vector<void*>& ); +}; +AlignableTransform__AlignTransMember_dict::AlignableTransform__AlignTransMember_dict() { + ClassBuilder _c_("AlignableTransform::AlignTransMember", "", typeid(AlignableTransform::AlignTransMember), sizeof(AlignableTransform::AlignTransMember),std::vector<const std::type_info*>(), false, NOCONTAINER, 0, PUBLIC); + _c_.addField("m_ident", "Identifier", "", (size_t)(&((AlignableTransform::AlignTransMember*)64)->m_ident)-64, PRIVATE ); + _c_.addField("m_trans", "HepGeom::Transform3D", "", (size_t)(&((AlignableTransform::AlignTransMember*)64)->m_trans)-64, PRIVATE ); + _c_.addMethod("AlignTransMember", "", "AlignableTransform::AlignTransMember", "AlignableTransform::AlignTransMember&", constructor_4747, PUBLIC); + _c_.addMethod("~AlignTransMember", "", destructor, PUBLIC); + _c_.addMethod("AlignTransMember", "", "AlignableTransform::AlignTransMember", constructor_4749, PUBLIC); + _c_.addMethod("AlignTransMember", "", "AlignableTransform::AlignTransMember", "Identifier&; HepGeom::Transform3D&", constructor_4750, PUBLIC); + _c_.addMethod("identify", "", "Identifier&", method_4751, PUBLIC); + _c_.addMethod("transform", "", "HepGeom::Transform3D&", method_4752, PUBLIC); + _c_.addMethod("setTransform", "", "HepGeom::Transform3D&", method_4753, PUBLIC); + _c_.build(); +} + +//------Stub functions for class AlignTransMember ------------------------------- +void* AlignableTransform__AlignTransMember_dict::constructor_4747( void* mem, const std::vector<void*>& arg) { + return ::new(mem) AlignableTransform::AlignTransMember(*(const AlignableTransform::AlignTransMember*)arg[0]); +} + +void* AlignableTransform__AlignTransMember_dict::constructor_4749( void* mem) { + return ::new(mem) AlignableTransform::AlignTransMember(); +} + +void* AlignableTransform__AlignTransMember_dict::constructor_4750( void* mem, const std::vector<void*>& arg) { + return ::new(mem) AlignableTransform::AlignTransMember(*(const Identifier*)arg[0], + *(const HepGeom::Transform3D*)arg[1]); +} + +void* AlignableTransform__AlignTransMember_dict::method_4751( void* o) +{ + return (void*)&((const AlignableTransform::AlignTransMember*)o)->identify(); +} + +void* AlignableTransform__AlignTransMember_dict::method_4752( void* o) +{ + return (void*)&((const AlignableTransform::AlignTransMember*)o)->transform(); +} + +void AlignableTransform__AlignTransMember_dict::method_4753( void* o, const std::vector<void*>& arg) +{ + ((AlignableTransform::AlignTransMember*)o)->setTransform(*(const HepGeom::Transform3D*)arg[0]); +} + + +namespace { + struct Dictionaries { + Dictionaries() { + AlignableTransform__AlignTransMember_dict(); + Class::resolvePending(); + } + }; + static Dictionaries instance; +} + + + +// This file has been generated by lcgdict with the --capabilities option +static const char* clnames[] = { +//--Begin DetDescrConditionsDict + "LCGDict/AlignableTransform::AlignTransMember", +//--End DetDescrConditionsDict +//--Final End +}; + +extern "C" void SEAL_CAPABILITIES (const char**& names, int& n ) +{ + names = clnames; + n = sizeof(clnames)/sizeof(char*); +} diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetStatus.cxx b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetStatus.cxx new file mode 100755 index 0000000000000000000000000000000000000000..6701432b2ba1ece095563868a444be83d824b9ac --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetStatus.cxx @@ -0,0 +1,25 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// DetStatus.cxx - class to hold status of one detector +// Richard Hawkings, started 19/12/06 +#include "DetDescrConditions/DetStatus.h" + +DetStatus::DetStatus() {} + +DetStatus::DetStatus(const int fullcode, const float deadfrac, + const float deadthrust) : + m_code(fullcode), m_deadfrac(deadfrac), m_deadthrust(deadthrust) {} + +std::string DetStatus::colour() const { + // endcoding of colours here 0=unknown, 1=RED, 2=YELLOW, 3=GREEN + // only lowest two bits are used - rest is free for subdetector use + // unless code is -1, indicating BLACK (absent) + if (m_code<0) return "BLACK"; + int code=m_code & 3; + if (code==1) return "RED"; + if (code==2) return "YELLOW"; + if (code==3) return "GREEN"; + return "UNKNOWN"; +} diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetStatusMap.cxx b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetStatusMap.cxx new file mode 100755 index 0000000000000000000000000000000000000000..2800f0d1e90f492655d11a048f33c62422457185 --- /dev/null +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/src/DetStatusMap.cxx @@ -0,0 +1,9 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// DetStatusMap.cxx - implementation for DetStatusMap class +// Richard Hawkings started 12/06 +#include "DetDescrConditions/DetStatusMap.h" + +DetStatusMap::DetStatusMap() : m_statmap() {}