DTReadOutGeometryLink

DTReadOutMapping

type

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
#ifndef DTReadOutMapping_H
#define DTReadOutMapping_H
/** \class DTReadOutMapping
 *
 *  Description:
 *       Class to map read-out channels to physical drift tubes
 *       Many details related to this class are described in
 *       internal note IN 2010_033. In particular the compact
 *       format is described there.
 *
 *  \author Paolo Ronchese INFN Padova
 *
 */

//----------------------
// Base Class Headers --
//----------------------

//------------------------------------
// Collaborating Class Declarations --
//------------------------------------
#include "CondFormats/Serialization/interface/Serializable.h"

#include "DataFormats/MuonDetId/interface/DTWireId.h"
#include "DataFormats/Common/interface/AtomicPtrCache.h"
#include "FWCore/Utilities/interface/ConstRespectingPtr.h"

//---------------
// C++ Headers --
//---------------
#include <vector>
#include <string>

class DTReadOutMappingCache;
template <class Key, class Content>
class DTBufferTree;

//              ---------------------
//              -- Class Interface --
//              ---------------------

class DTReadOutGeometryLink {
public:
  DTReadOutGeometryLink();
  ~DTReadOutGeometryLink();

  int dduId;
  int rosId;
  int robId;
  int tdcId;
  int channelId;
  int wheelId;
  int stationId;
  int sectorId;
  int slId;
  int layerId;
  int cellId;

  COND_SERIALIZABLE;
};

class DTReadOutMapping {
public:
  /** Constructor
   */
  DTReadOutMapping();
  DTReadOutMapping(DTReadOutMapping const&) = delete;
  DTReadOutMapping& operator=(DTReadOutMapping const&) = delete;
  DTReadOutMapping(const std::string& cell_map_version, const std::string& rob_map_version);

  /** Destructor
   */
  ~DTReadOutMapping();

  enum type { plain, compact };

  /** Operations
   */
  /// transform identifiers
  int readOutToGeometry(int dduId, int rosId, int robId, int tdcId, int channelId, DTWireId& wireId) const;

  int readOutToGeometry(int dduId,
                        int rosId,
                        int robId,
                        int tdcId,
                        int channelId,
                        int& wheelId,
                        int& stationId,
                        int& sectorId,
                        int& slId,
                        int& layerId,
                        int& cellId) const;

  int geometryToReadOut(int wheelId,
                        int stationId,
                        int sectorId,
                        int slId,
                        int layerId,
                        int cellId,
                        int& dduId,
                        int& rosId,
                        int& robId,
                        int& tdcId,
                        int& channelId) const;
  int geometryToReadOut(const DTWireId& wireId, int& dduId, int& rosId, int& robId, int& tdcId, int& channelId) const;

  type mapType() const;

  /// access parent maps identifiers
  const std::string& mapCellTdc() const;
  std::string& mapCellTdc();
  const std::string& mapRobRos() const;
  std::string& mapRobRos();

  /// clear map
  void clear();

  /// insert connection
  int insertReadOutGeometryLink(int dduId,
                                int rosId,
                                int robId,
                                int tdcId,
                                int channelId,
                                int wheelId,
                                int stationId,
                                int sectorId,
                                int slId,
                                int layerId,
                                int cellId);

  /// Access methods to the connections
  typedef std::vector<DTReadOutGeometryLink>::const_iterator const_iterator;
  const_iterator begin() const;
  const_iterator end() const;

  /// Expand to full map
  const DTReadOutMapping* fullMap() const;

private:
  edm::AtomicPtrCache<DTReadOutMappingCache> const& atomicCache() const { return atomicCache_; }
  edm::AtomicPtrCache<DTReadOutMappingCache>& atomicCache() { return atomicCache_; }

  static DTReadOutMapping* expandMap(const DTReadOutMapping& compMap);

  std::string cellMapVersion;
  std::string robMapVersion;

  std::vector<DTReadOutGeometryLink> readOutChannelDriftTubeMap;

  edm::AtomicPtrCache<DTReadOutMappingCache> atomicCache_ COND_TRANSIENT;
  edm::ConstRespectingPtr<DTBufferTree<int, int> > rgBuf COND_TRANSIENT;
  edm::ConstRespectingPtr<DTBufferTree<int, int> > grBuf COND_TRANSIENT;

  /// read and store full content
  void cacheMap() const;

  std::string mapNameRG() const;
  std::string mapNameGR() const;

  COND_SERIALIZABLE;
};
#endif  // DTReadOutMapping_H