HGCalTBGeomParameters

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
#ifndef HGCalCommonData_HGCalTBGeomParameters_h
#define HGCalCommonData_HGCalTBGeomParameters_h

/** \class HGCalTBGeomParameters
 *
 * this class extracts some geometry constants from CompactView
 * to be used by Reco Geometry/Topology
 *
 *  $Date: 2022/12/31 00:06:50 $
 * \author Sunanda Banerjee, Fermilab <sunanda.banerjee@cern.ch>
 *
 */

#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/HGCalTBCommonData/interface/HGCalTBParameters.h"
#include "Geometry/HGCalCommonData/interface/HGCalGeomTools.h"

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

  void loadGeometryHexagon(const DDFilteredView& _fv,
                           HGCalTBParameters& 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,
                           HGCalTBParameters& php,
                           const std::string& sdTag1,
                           const std::string& sdTag2,
                           const std::string& sdTag3,
                           HGCalGeometryMode::WaferMode mode);
  void loadSpecParsHexagon(const DDFilteredView& fv,
                           HGCalTBParameters& php,
                           const DDCompactView* cpv,
                           const std::string& sdTag1,
                           const std::string& sdTag2);
  void loadSpecParsHexagon(const cms::DDFilteredView& fv,
                           HGCalTBParameters& php,
                           const std::string& sdTag1,
                           const std::string& sdTag2,
                           const std::string& sdTag3,
                           const std::string& sdTag4);
  void loadWaferHexagon(HGCalTBParameters& php);
  void loadCellParsHexagon(const DDCompactView* cpv, HGCalTBParameters& php);
  void loadCellParsHexagon(const cms::DDVectorsMap& vmap, HGCalTBParameters& php);
  void loadCellParsHexagon(const HGCalTBParameters& 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)) {}
  };

private:
  void loadGeometryHexagon(const std::map<int, HGCalTBGeomParameters::layerParameters>& layers,
                           std::vector<HGCalTBParameters::hgtrform>& trforms,
                           std::vector<bool>& trformUse,
                           const std::unordered_map<int32_t, int32_t>& copies,
                           const HGCalTBParameters::layer_map& copiesInLayers,
                           const std::vector<int32_t>& wafer2copy,
                           const std::vector<HGCalTBGeomParameters::cellParameters>& wafers,
                           const std::map<int, int>& wafertype,
                           const std::map<int, HGCalTBGeomParameters::cellParameters>& cellsf,
                           const std::map<int, HGCalTBGeomParameters::cellParameters>& cellsc,
                           HGCalTBParameters& php);
  void loadSpecParsHexagon(const HGCalTBParameters& php);
  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