File indexing completed on 2025-09-18 08:17:42
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>> sameLayerDistXY = {1.0 * dd4hep::mm,
0020 1.0 * dd4hep::mm};
0021
0022 std::vector<double> sameLayerDistEtaPhi = {0.01, 0.01};
0023
0024 std::vector<double> sameLayerDistTZ = {1.0 * dd4hep::mm, 1.0 * dd4hep::mm};
0025
0026 std::vector<std::variant<std::string, double>> diffLayerDistXY = {1.0 * dd4hep::mm,
0027 1.0 * dd4hep::mm};
0028
0029 std::vector<double> diffLayerDistEtaPhi = {0.01, 0.01};
0030
0031 std::vector<double> diffLayerDistTZ = {1.0 * dd4hep::mm, 1.0 * dd4hep::mm};
0032
0033 enum class ELayerMode { etaphi = 0, xy = 1, tz = 2 };
0034
0035 ELayerMode sameLayerMode = ELayerMode::xy;
0036
0037 ELayerMode diffLayerMode = ELayerMode::xy;
0038
0039
0040 double sectorDist = 1.0 * dd4hep::cm;
0041
0042
0043 double minClusterHitEdep = 0.;
0044
0045 double minClusterCenterEdep = 0.;
0046
0047 double minClusterEdep = 0.5 * dd4hep::MeV;
0048
0049 std::size_t minClusterNhits = 10;
0050 };
0051
0052 std::istream& operator>>(std::istream& in, ImagingTopoClusterConfig::ELayerMode& layerMode) {
0053 std::string s;
0054 in >> s;
0055
0056 if (s == "etaphi" or s == "0") {
0057 layerMode = ImagingTopoClusterConfig::ELayerMode::etaphi;
0058 } else if (s == "xy" or s == "1") {
0059 layerMode = ImagingTopoClusterConfig::ELayerMode::xy;
0060 } else if (s == "tz" or s == "2") {
0061 layerMode = ImagingTopoClusterConfig::ELayerMode::tz;
0062 } else {
0063 in.setstate(std::ios::failbit);
0064 }
0065
0066 return in;
0067 }
0068 std::ostream& operator<<(std::ostream& out, const ImagingTopoClusterConfig::ELayerMode& layerMode) {
0069 switch (layerMode) {
0070 case ImagingTopoClusterConfig::ELayerMode::etaphi:
0071 out << "etaphi";
0072 break;
0073 case ImagingTopoClusterConfig::ELayerMode::xy:
0074 out << "xy";
0075 break;
0076 case ImagingTopoClusterConfig::ELayerMode::tz:
0077 out << "tz";
0078 break;
0079 default:
0080 out.setstate(std::ios::failbit);
0081 }
0082 return out;
0083 }
0084 }