File indexing completed on 2025-07-10 07:55:25
0001
0002
0003
0004 #pragma once
0005
0006 #include <string>
0007 #include <variant>
0008 #include <iostream>
0009
0010 #include <DD4hep/DD4hepUnits.h>
0011
0012 namespace eicrecon {
0013
0014 struct ImagingTopoClusterConfig {
0015
0016
0017 int neighbourLayersRange = 1;
0018
0019 std::vector<std::variant<std::string, double>> localDistXY = {1.0 * dd4hep::mm, 1.0 * dd4hep::mm};
0020
0021 std::vector<double> layerDistEtaPhi = {0.01, 0.01};
0022
0023 std::vector<std::variant<std::string, double>> layerDistXY = {1.0 * dd4hep::mm, 1.0 * dd4hep::mm};
0024
0025 enum ELayerMode { etaphi = 0, xy = 1 } layerMode = etaphi;
0026
0027
0028 double sectorDist = 1.0 * dd4hep::cm;
0029
0030
0031 double minClusterHitEdep = 0.;
0032
0033 double minClusterCenterEdep = 0.;
0034
0035 double minClusterEdep = 0.5 * dd4hep::MeV;
0036
0037 std::size_t minClusterNhits = 10;
0038 };
0039
0040 std::istream& operator>>(std::istream& in, ImagingTopoClusterConfig::ELayerMode& layerMode) {
0041 std::string s;
0042 in >> s;
0043
0044 if (s == "etaphi" or s == "0") {
0045 layerMode = ImagingTopoClusterConfig::ELayerMode::etaphi;
0046 } else if (s == "xy" or s == "1") {
0047 layerMode = ImagingTopoClusterConfig::ELayerMode::xy;
0048 } else {
0049 in.setstate(std::ios::failbit);
0050 }
0051
0052 return in;
0053 }
0054 std::ostream& operator<<(std::ostream& out, ImagingTopoClusterConfig::ELayerMode& layerMode) {
0055 switch (layerMode) {
0056 case ImagingTopoClusterConfig::ELayerMode::etaphi:
0057 out << "etaphi";
0058 break;
0059 case ImagingTopoClusterConfig::ELayerMode::xy:
0060 out << "xy";
0061 break;
0062 default:
0063 out.setstate(std::ios::failbit);
0064 }
0065 return out;
0066 }
0067 }