File indexing completed on 2026-10-05 08:20:30
0001
0002
0003
0004 #include <Evaluator/DD4hepUnits.h>
0005 #include <JANA/JApplicationFwd.h>
0006 #include <JANA/Utils/JTypeInfo.h>
0007 #include <string>
0008 #include <variant>
0009 #include <vector>
0010
0011 #include "algorithms/calorimetry/CalorimeterHitDigiConfig.h"
0012 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0013 #include "factories/calorimetry/CalorimeterClusterRecoCoG_factory.h"
0014 #include "factories/calorimetry/CalorimeterClusterShape_factory.h"
0015 #include "factories/calorimetry/CalorimeterHitDigi_factory.h"
0016 #include "factories/calorimetry/CalorimeterHitReco_factory.h"
0017 #include "factories/calorimetry/CalorimeterHitsMerger_factory.h"
0018 #include "factories/calorimetry/CalorimeterIslandCluster_factory.h"
0019 #include "factories/calorimetry/CalorimeterTruthClustering_factory.h"
0020 #include "factories/calorimetry/TrackClusterMergeSplitter_factory.h"
0021
0022 extern "C" {
0023 void InitPlugin(JApplication* app) {
0024
0025 using namespace eicrecon;
0026
0027 InitJANAPlugin(app);
0028
0029 decltype(CalorimeterHitDigiConfig::capADC) HcalEndcapN_capADC =
0030 32768;
0031 decltype(CalorimeterHitDigiConfig::dyRangeADC) HcalEndcapN_dyRangeADC =
0032 200 * dd4hep::MeV;
0033 decltype(CalorimeterHitDigiConfig::pedMeanADC) HcalEndcapN_pedMeanADC = 10;
0034 decltype(CalorimeterHitDigiConfig::pedSigmaADC) HcalEndcapN_pedSigmaADC = 2;
0035 decltype(CalorimeterHitDigiConfig::resolutionTDC) HcalEndcapN_resolutionTDC =
0036 10 * dd4hep::picosecond;
0037
0038 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitDigi_factory>(
0039 "HcalEndcapNRawHits", {"EventHeader", "HcalEndcapNHits"},
0040 {"HcalEndcapNRawHits", "HcalEndcapNRawHitLinks", "HcalEndcapNRawHitAssociations"},
0041 {
0042 .eRes{},
0043 .tRes = 0.0 * dd4hep::ns,
0044 .capADC = HcalEndcapN_capADC,
0045 .capTime = 100,
0046 .dyRangeADC = HcalEndcapN_dyRangeADC,
0047 .pedMeanADC = HcalEndcapN_pedMeanADC,
0048 .pedSigmaADC = HcalEndcapN_pedSigmaADC,
0049 .resolutionTDC = HcalEndcapN_resolutionTDC,
0050 .corrMeanScale = "1.0",
0051 .readout = "HcalEndcapNHits",
0052 },
0053 app
0054 ));
0055 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitReco_factory>(
0056 "HcalEndcapNRecHits", {"HcalEndcapNRawHits"}, {"HcalEndcapNRecHits"},
0057 {
0058 .capADC = HcalEndcapN_capADC,
0059 .dyRangeADC = HcalEndcapN_dyRangeADC,
0060 .pedMeanADC = HcalEndcapN_pedMeanADC,
0061 .pedSigmaADC = HcalEndcapN_pedSigmaADC,
0062 .resolutionTDC = HcalEndcapN_resolutionTDC,
0063 .thresholdFactor = 0.0,
0064 .thresholdValue =
0065 41.0,
0066 .sampFrac =
0067 "0.0095",
0068 .readout = "HcalEndcapNHits",
0069 },
0070 app
0071 ));
0072 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitsMerger_factory>(
0073 "HcalEndcapNMergedHits", {"HcalEndcapNRecHits"}, {"HcalEndcapNMergedHits"},
0074 {.readout = "HcalEndcapNHits", .fieldTransformations = {"layer:4", "slice:0"}},
0075 app
0076 ));
0077 app->Add(new JOmniFactoryGeneratorT<CalorimeterTruthClustering_factory>(
0078 "HcalEndcapNTruthProtoClusters", {"HcalEndcapNMergedHits", "HcalEndcapNRawHitLinks"},
0079 {"HcalEndcapNTruthProtoClusters"},
0080 app
0081 ));
0082 app->Add(new JOmniFactoryGeneratorT<CalorimeterIslandCluster_factory>(
0083 "HcalEndcapNIslandProtoClusters", {"HcalEndcapNMergedHits"},
0084 {"HcalEndcapNIslandProtoClusters"},
0085 {
0086 .adjacencyMatrix{},
0087 .peakNeighbourhoodMatrix{},
0088 .readout{},
0089 .sectorDist = 5.0 * dd4hep::cm,
0090 .localDistXY = {15 * dd4hep::cm, 15 * dd4hep::cm},
0091 .localDistXZ{},
0092 .localDistYZ{},
0093 .globalDistRPhi{},
0094 .globalDistEtaPhi{},
0095 .dimScaledLocalDistXY{},
0096 .splitCluster = true,
0097 .minClusterHitEdep = 0.0 * dd4hep::MeV,
0098 .minClusterCenterEdep = 30.0 * dd4hep::MeV,
0099 .transverseEnergyProfileMetric = "globalDistEtaPhi",
0100 .transverseEnergyProfileScale = 1.,
0101 .transverseEnergyProfileScaleUnits{},
0102 },
0103 app
0104 ));
0105 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0106 "HcalEndcapNTruthClustersWithoutShapes",
0107 {
0108 "HcalEndcapNTruthProtoClusters",
0109 "HcalEndcapNRawHitLinks",
0110 "HcalEndcapNRawHitAssociations"
0111 },
0112 {"HcalEndcapNTruthClustersWithoutShapes", "HcalEndcapNTruthClusterLinksWithoutShapes",
0113 "HcalEndcapNTruthClusterAssociationsWithoutShapes"},
0114 {.energyWeight = "log", .sampFrac = 1.0, .logWeightBase = 6.2, .enableEtaBounds = false},
0115 app
0116 ));
0117 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0118 "HcalEndcapNTruthClusters",
0119 {"HcalEndcapNTruthClustersWithoutShapes", "HcalEndcapNTruthClusterLinksWithoutShapes"},
0120 {"HcalEndcapNTruthClusters", "HcalEndcapNTruthClusterLinks",
0121 "HcalEndcapNTruthClusterAssociations"},
0122 {.energyWeight = "log", .logWeightBase = 6.2}, app));
0123 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0124 "HcalEndcapNClustersWithoutShapes",
0125 {
0126 "HcalEndcapNIslandProtoClusters",
0127 "HcalEndcapNRawHitLinks",
0128 "HcalEndcapNRawHitAssociations"
0129 },
0130 {"HcalEndcapNClustersWithoutShapes", "HcalEndcapNClusterLinksWithoutShapes",
0131 "HcalEndcapNClusterAssociationsWithoutShapes"},
0132 {
0133 .energyWeight = "log",
0134 .sampFrac = 1.0,
0135 .logWeightBase = 6.2,
0136 .enableEtaBounds = false,
0137 },
0138 app
0139 ));
0140 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0141 "HcalEndcapNClusters",
0142 {"HcalEndcapNClustersWithoutShapes", "HcalEndcapNClusterLinksWithoutShapes"},
0143 {"HcalEndcapNClusters", "HcalEndcapNClusterLinks", "HcalEndcapNClusterAssociations"},
0144 {.energyWeight = "log", .logWeightBase = 6.2}, app));
0145 app->Add(new JOmniFactoryGeneratorT<TrackClusterMergeSplitter_factory>(
0146 "HcalEndcapNSplitMergeProtoClusters",
0147 {"HcalEndcapNTrackClusterMatches", "HcalEndcapNClusters", "CalorimeterTrackProjections"},
0148 {"HcalEndcapNSplitMergeProtoClusters", "HcalEndcapNTrackSplitMergeProtoClusterLinks"},
0149 {.minSigCut = -2.0,
0150 .avgEP = 0.60,
0151 .sigEP = 0.40,
0152 .drAdd = 0.40,
0153 .surfaceToUse = 1,
0154 .transverseEnergyProfileScale = 1.0},
0155 app
0156 ));
0157 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0158 "HcalEndcapNSplitMergeClustersWithoutShapes",
0159 {"HcalEndcapNSplitMergeProtoClusters",
0160 "HcalEndcapNRawHitLinks",
0161 "HcalEndcapNRawHitAssociations"},
0162 {"HcalEndcapNSplitMergeClustersWithoutShapes",
0163 "HcalEndcapNSplitMergeClusterLinksWithoutShapes",
0164 "HcalEndcapNSplitMergeClusterAssociationsWithoutShapes"},
0165 {
0166 .energyWeight = "log",
0167 .sampFrac = 1.0,
0168 .logWeightBase = 6.2,
0169 .enableEtaBounds = false,
0170 },
0171 app
0172 ));
0173 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0174 "HcalEndcapNSplitMergeClusters",
0175 {"HcalEndcapNSplitMergeClustersWithoutShapes",
0176 "HcalEndcapNSplitMergeClusterLinksWithoutShapes"},
0177 {"HcalEndcapNSplitMergeClusters", "HcalEndcapNSplitMergeClusterLinks",
0178 "HcalEndcapNSplitMergeClusterAssociations"},
0179 {.energyWeight = "log", .logWeightBase = 6.2}, app));
0180 }
0181 }