HGCalGeomParameters

cellParameters

layerParameters

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 163 164 165
#ifndef HGCalCommonData_HGCalGeomParameters_h
#define HGCalCommonData_HGCalGeomParameters_h

/** \class HGCalGeomParameters
 *
 * this class extracts some geometry constants from CompactView
 * to be used by Reco Geometry/Topology
 *
 *  $Date: 2015/06/25 00:06:50 $
 * \author Sunanda Banerjee, Fermilab <sunanda.banerjee@cern.ch>
 * \author Lindsey Gray, Fermilab <lagray@fnal.gov> (for fixes)
 *
 */

#include <string>
#include <utility>
#include <vector>

#include "DataFormats/GeometryVector/interface/GlobalPoint.h"
#include "DetectorDescription/Core/interface/DDsvalues.h"
#include "DetectorDescription/Core/interface/DDCompactView.h"
#include "DetectorDescription/Core/interface/DDFilteredView.h"
#include "DetectorDescription/DDCMS/interface/DDCompactView.h"
#include "DetectorDescription/DDCMS/interface/DDFilteredView.h"
#include "Geometry/HGCalCommonData/interface/HGCalGeometryMode.h"
#include "Geometry/HGCalCommonData/interface/HGCalParameters.h"
#include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h"

class HGCalGeomParameters {
public:
  HGCalGeomParameters();
  ~HGCalGeomParameters() = default;

  void loadGeometryHexagon(const DDFilteredView& _fv,
                           HGCalParameters& php,
                           const std::string& sdTag1,
                           const DDCompactView* cpv,
                           const std::string& sdTag2,
                           const std::string& sdTag3,
                           HGCalGeometryMode::WaferMode mode);
  void loadGeometryHexagon(const cms::DDCompactView* cpv,
                           HGCalParameters& php,
                           const std::string& sdTag1,
                           const std::string& sdTag2,
                           const std::string& sdTag3,
                           HGCalGeometryMode::WaferMode mode);
  void loadGeometryHexagon8(const DDFilteredView& _fv, HGCalParameters& php, int firstLayer);
  void loadGeometryHexagon8(const cms::DDCompactView* cpv,
                            HGCalParameters& php,
                            const std::string& sdTag1,
                            int firstLayer);
  void loadGeometryHexagonModule(const DDCompactView* cpv,
                                 HGCalParameters& php,
                                 const std::string& sdTag1,
                                 const std::string& sdTag2,
                                 int firstLayer);
  void loadGeometryHexagonModule(const cms::DDCompactView* cpv,
                                 HGCalParameters& php,
                                 const std::string& sdTag1,
                                 const std::string& sdTag2,
                                 int firstLayer);
  void loadSpecParsHexagon(const DDFilteredView& fv,
                           HGCalParameters& php,
                           const DDCompactView* cpv,
                           const std::string& sdTag1,
                           const std::string& sdTag2);
  void loadSpecParsHexagon(const cms::DDFilteredView& fv,
                           HGCalParameters& php,
                           const std::string& sdTag1,
                           const std::string& sdTag2,
                           const std::string& sdTag3,
                           const std::string& sdTag4);
  void loadSpecParsHexagon8(const DDFilteredView& fv, HGCalParameters& php);
  void loadSpecParsHexagon8(const cms::DDFilteredView& fv,
                            const cms::DDVectorsMap& vmap,
                            HGCalParameters& php,
                            const std::string& sdTag1);
  void loadSpecParsTrapezoid(const DDFilteredView& fv, HGCalParameters& php);
  void loadSpecParsTrapezoid(const cms::DDFilteredView& fv,
                             const cms::DDVectorsMap& vmap,
                             HGCalParameters& php,
                             const std::string& sdTag1);
  void loadWaferHexagon(HGCalParameters& php);
  void loadWaferHexagon8(HGCalParameters& php);
  void loadCellParsHexagon(const DDCompactView* cpv, HGCalParameters& php);
  void loadCellParsHexagon(const cms::DDVectorsMap& vmap, HGCalParameters& php);
  void loadCellParsHexagon(const HGCalParameters& php);
  void loadCellTrapezoid(HGCalParameters& php);

  struct layerParameters {
    double rmin, rmax, zpos;
    layerParameters(double rin = 0, double rout = 0, double zp = 0) : rmin(rin), rmax(rout), zpos(zp) {}
  };
  struct cellParameters {
    bool half;
    int wafer;
    GlobalPoint xyz;
    cellParameters(bool h = false, int w = 0, GlobalPoint p = GlobalPoint(0, 0, 0))
        : half(h), wafer(w), xyz(std::move(p)) {}
  };

  constexpr static int siliconFileEE = 2;
  constexpr static int siliconFileHE = 3;
  constexpr static int scintillatorFile = 4;
  constexpr static int siliconCassetteEE = 5;
  constexpr static int siliconCassetteHE = 6;
  constexpr static int scintillatorCassette = 7;
  constexpr static int scintillatorFineCell = 8;

private:
  void loadGeometryHexagon(const std::map<int, HGCalGeomParameters::layerParameters>& layers,
                           std::vector<HGCalParameters::hgtrform>& trforms,
                           std::vector<bool>& trformUse,
                           const std::unordered_map<int32_t, int32_t>& copies,
                           const HGCalParameters::layer_map& copiesInLayers,
                           const std::vector<int32_t>& wafer2copy,
                           const std::vector<HGCalGeomParameters::cellParameters>& wafers,
                           const std::map<int, int>& wafertype,
                           const std::map<int, HGCalGeomParameters::cellParameters>& cellsf,
                           const std::map<int, HGCalGeomParameters::cellParameters>& cellsc,
                           HGCalParameters& php);
  void loadGeometryHexagon8(const std::map<int, HGCalGeomParameters::layerParameters>& layers,
                            std::map<std::pair<int, int>, HGCalParameters::hgtrform>& trforms,
                            const int& firstLayer,
                            HGCalParameters& php);
  void loadSpecParsHexagon(const HGCalParameters& php);
  void loadSpecParsHexagon8(HGCalParameters& php);
  void loadSpecParsHexagon8(HGCalParameters& php,
                            const std::vector<int>& layerType,
                            const std::vector<int>& waferIndex,
                            const std::vector<int>& waferProperties);
  void loadSpecParsTrapezoid(HGCalParameters& php);
  void loadSpecParsTrapezoid(HGCalParameters& php,
                             const std::vector<int>& tileIndex,
                             const std::vector<int>& tileProperty,
                             const std::vector<int>& tileHEX1,
                             const std::vector<int>& tileHEX2,
                             const std::vector<int>& tileHEX3,
                             const std::vector<int>& tileHEX4,
                             const std::vector<int>& tileHEX5,
                             const std::vector<int>& tileHEX6,
                             const std::vector<double>& tileRMin,
                             const std::vector<double>& tileRMax,
                             const std::vector<double>& tileRMinFine,
                             const std::vector<double>& tileRMaxFine,
                             const std::vector<int>& tileRingMin,
                             const std::vector<int>& tileRingMax,
                             const std::vector<int>& tileRingMinFine,
                             const std::vector<int>& tileRingMaxFine);
  std::vector<double> getDDDArray(const std::string& str, const DDsvalues_type& sv, const int nmin);
  std::pair<double, double> cellPosition(const std::vector<cellParameters>& wafers,
                                         std::vector<cellParameters>::const_iterator& itrf,
                                         int wafer,
                                         double xx,
                                         double yy);
  void rescale(std::vector<double>&, const double s);
  void resetZero(std::vector<double>&);

  constexpr static double tan30deg_ = 0.5773502693;
  HGCalGeomTools geomTools_;
  const double sqrt3_;
  double waferSize_;
};

#endif