File indexing completed on 2026-05-13 08:03:22
0001
0002
0003
0004 #include <Evaluator/DD4hepUnits.h>
0005 #include <JANA/JApplicationFwd.h>
0006 #include <JANA/Utils/JTypeInfo.h>
0007 #include <edm4eic/EDM4eicVersion.h>
0008 #include <string>
0009 #include <variant>
0010 #include <vector>
0011
0012 #include "algorithms/calorimetry/HEXPLITConfig.h"
0013 #include "algorithms/calorimetry/ImagingTopoClusterConfig.h"
0014 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0015 #include "factories/calorimetry/CalorimeterClusterRecoCoG_factory.h"
0016 #include "factories/calorimetry/CalorimeterClusterShape_factory.h"
0017 #include "factories/calorimetry/CalorimeterHitDigi_factory.h"
0018 #include "factories/calorimetry/CalorimeterHitReco_factory.h"
0019 #include "factories/calorimetry/CalorimeterIslandCluster_factory.h"
0020 #include "factories/calorimetry/CalorimeterTruthClustering_factory.h"
0021 #include "factories/calorimetry/HEXPLIT_factory.h"
0022 #include "factories/calorimetry/ImagingTopoCluster_factory.h"
0023
0024 extern "C" {
0025 void InitPlugin(JApplication* app) {
0026
0027 using namespace eicrecon;
0028
0029 InitJANAPlugin(app);
0030
0031
0032 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitDigi_factory>(
0033 "EcalFarForwardZDCRawHits", {"EventHeader", "EcalFarForwardZDCHits"},
0034 {"EcalFarForwardZDCRawHits",
0035 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0036 "EcalFarForwardZDCRawHitLinks",
0037 #endif
0038 "EcalFarForwardZDCRawHitAssociations"},
0039 {
0040 .eRes{},
0041 .tRes = 0.0 * dd4hep::ns,
0042 .capADC = 32768,
0043 .dyRangeADC = 2000 * dd4hep::MeV,
0044 .pedMeanADC = 400,
0045 .pedSigmaADC = 3.2,
0046 .resolutionTDC = 10 * dd4hep::picosecond,
0047 .corrMeanScale = "1.0",
0048 .readout = "EcalFarForwardZDCHits",
0049 },
0050 app
0051 ));
0052 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitReco_factory>(
0053 "EcalFarForwardZDCRecHits", {"EcalFarForwardZDCRawHits"}, {"EcalFarForwardZDCRecHits"},
0054 {
0055 .capADC = 32768,
0056 .dyRangeADC = 2000. * dd4hep::MeV,
0057 .pedMeanADC = 400,
0058 .pedSigmaADC = 3.2,
0059 .resolutionTDC = 10 * dd4hep::picosecond,
0060 .thresholdFactor = 4.0,
0061 .thresholdValue = 0.0,
0062 .sampFrac = "1.0",
0063 .readout = "EcalFarForwardZDCHits",
0064 },
0065 app
0066 ));
0067 app->Add(new JOmniFactoryGeneratorT<CalorimeterTruthClustering_factory>(
0068 "EcalFarForwardZDCTruthProtoClusters", {"EcalFarForwardZDCRecHits", "EcalFarForwardZDCHits"},
0069 {"EcalFarForwardZDCTruthProtoClusters"},
0070 app
0071 ));
0072 app->Add(new JOmniFactoryGeneratorT<CalorimeterIslandCluster_factory>(
0073 "EcalFarForwardZDCIslandProtoClusters", {"EcalFarForwardZDCRecHits"},
0074 {"EcalFarForwardZDCIslandProtoClusters"},
0075 {
0076 .adjacencyMatrix{},
0077 .peakNeighbourhoodMatrix{},
0078 .readout{},
0079 .sectorDist = 5.0 * dd4hep::cm,
0080 .localDistXY = {50 * dd4hep::cm, 50 * dd4hep::cm},
0081 .localDistXZ{},
0082 .localDistYZ{},
0083 .globalDistRPhi{},
0084 .globalDistEtaPhi{},
0085 .dimScaledLocalDistXY{},
0086 .splitCluster = true,
0087 .minClusterHitEdep = 0.1 * dd4hep::MeV,
0088 .minClusterCenterEdep = 3.0 * dd4hep::MeV,
0089 .transverseEnergyProfileMetric = "globalDistEtaPhi",
0090 .transverseEnergyProfileScale = 1.,
0091 .transverseEnergyProfileScaleUnits{},
0092 },
0093 app
0094 ));
0095
0096 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0097 "EcalFarForwardZDCTruthClustersWithoutShapes",
0098 {
0099 "EcalFarForwardZDCTruthProtoClusters",
0100 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0101 "EcalFarForwardZDCRawHitLinks",
0102 #endif
0103 "EcalFarForwardZDCRawHitAssociations"
0104 },
0105 {"EcalFarForwardZDCTruthClustersWithoutShapes",
0106 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0107 "EcalFarForwardZDCTruthClusterLinksWithoutShapes",
0108 #endif
0109 "EcalFarForwardZDCTruthClusterAssociationsWithoutShapes"},
0110 {.energyWeight = "log", .sampFrac = 1.0, .logWeightBase = 3.6, .enableEtaBounds = false},
0111 app
0112 ));
0113
0114 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0115 "EcalFarForwardZDCTruthClusters",
0116 {"EcalFarForwardZDCTruthClustersWithoutShapes",
0117 "EcalFarForwardZDCTruthClusterAssociationsWithoutShapes"},
0118 {"EcalFarForwardZDCTruthClusters",
0119 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0120 "EcalFarForwardZDCTruthClusterLinks",
0121 #endif
0122 "EcalFarForwardZDCTruthClusterAssociations"},
0123 {.longitudinalShowerInfoAvailable = true, .energyWeight = "log", .logWeightBase = 3.6}, app));
0124
0125 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0126 "EcalFarForwardZDCClustersWithoutShapes",
0127 {
0128 "EcalFarForwardZDCIslandProtoClusters",
0129 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0130 "EcalFarForwardZDCRawHitLinks",
0131 #endif
0132 "EcalFarForwardZDCRawHitAssociations"
0133 },
0134 {"EcalFarForwardZDCClustersWithoutShapes",
0135 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0136 "EcalFarForwardZDCClusterLinksWithoutShapes",
0137 #endif
0138 "EcalFarForwardZDCClusterAssociationsWithoutShapes"},
0139 {
0140 .energyWeight = "log",
0141 .sampFrac = 1.0,
0142 .logWeightBase = 6.2,
0143 .enableEtaBounds = false,
0144 },
0145 app
0146 ));
0147
0148 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0149 "EcalFarForwardZDCClusters",
0150 {"EcalFarForwardZDCClustersWithoutShapes",
0151 "EcalFarForwardZDCClusterAssociationsWithoutShapes"},
0152 {"EcalFarForwardZDCClusters",
0153 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0154 "EcalFarForwardZDCClusterLinks",
0155 #endif
0156 "EcalFarForwardZDCClusterAssociations"},
0157 {.longitudinalShowerInfoAvailable = true, .energyWeight = "log", .logWeightBase = 6.2}, app));
0158
0159 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitDigi_factory>(
0160 "HcalFarForwardZDCRawHits", {"EventHeader", "HcalFarForwardZDCHits"},
0161 {"HcalFarForwardZDCRawHits",
0162 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0163 "HcalFarForwardZDCRawHitLinks",
0164 #endif
0165 "HcalFarForwardZDCRawHitAssociations"},
0166 {
0167 .eRes{},
0168 .tRes = 0.0 * dd4hep::ns,
0169 .capADC = 65536,
0170 .dyRangeADC = 1000. * dd4hep::MeV,
0171 .pedMeanADC = 400,
0172 .pedSigmaADC = 2,
0173 .resolutionTDC = 10 * dd4hep::picosecond,
0174 .corrMeanScale = "1.0",
0175 .readout = "HcalFarForwardZDCHits",
0176 },
0177 app
0178 ));
0179
0180 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitReco_factory>(
0181 "HcalFarForwardZDCRecHits", {"HcalFarForwardZDCRawHits"}, {"HcalFarForwardZDCRecHits"},
0182 {
0183 .capADC = 65536,
0184 .dyRangeADC = 1000. * dd4hep::MeV,
0185 .pedMeanADC = 400,
0186 .pedSigmaADC = 2,
0187 .resolutionTDC = 10 * dd4hep::picosecond,
0188 .thresholdFactor = 3.0,
0189 .thresholdValue = 0.0,
0190 .sampFrac = "1.0",
0191 .readout = "HcalFarForwardZDCHits",
0192 .layerField = "layer",
0193 .sectorField = "system",
0194 },
0195 app
0196 ));
0197
0198 app->Add(new JOmniFactoryGeneratorT<HEXPLIT_factory>(
0199 "HcalFarForwardZDCSubcellHits", {"HcalFarForwardZDCRecHits"},
0200 {"HcalFarForwardZDCSubcellHits"},
0201 {
0202 .MIP = 630. * dd4hep::keV,
0203 .Emin_in_MIPs = 0.5,
0204 .delta_in_MIPs = 0.01,
0205 .tmax = 269 * dd4hep::ns,
0206 .stag_type = HEXPLITConfig::StaggerType::S2,
0207 },
0208 app
0209 ));
0210
0211 double side_length = 48.8 * dd4hep::mm;
0212 app->Add(new JOmniFactoryGeneratorT<ImagingTopoCluster_factory>(
0213 "HcalFarForwardZDCImagingProtoClusters", {"HcalFarForwardZDCSubcellHits"},
0214 {"HcalFarForwardZDCImagingProtoClusters"},
0215 {
0216 .neighbourLayersRange = 1,
0217 .sameLayerDistXY = {side_length * 0.75, side_length * 0.75},
0218 .diffLayerDistXY = {side_length * 0.75, side_length * 0.75},
0219 .sameLayerMode = eicrecon::ImagingTopoClusterConfig::ELayerMode::xy,
0220 .diffLayerMode = eicrecon::ImagingTopoClusterConfig::ELayerMode::xy,
0221 .sectorDist = 10.0 * dd4hep::cm,
0222 .minClusterHitEdep = 315.0 * dd4hep::keV,
0223 .minClusterCenterEdep = 25 * dd4hep::MeV,
0224 .minClusterEdep = 50.0 * dd4hep::MeV,
0225 .minClusterNhits = 10,
0226 },
0227 app));
0228
0229 app->Add(new JOmniFactoryGeneratorT<CalorimeterIslandCluster_factory>(
0230 "HcalFarForwardZDCIslandProtoClusters", {"HcalFarForwardZDCSubcellHits"},
0231 {"HcalFarForwardZDCIslandProtoClusters"},
0232 {.adjacencyMatrix{},
0233 .peakNeighbourhoodMatrix{},
0234 .readout{},
0235 .sectorDist = 1.5 * dd4hep::cm,
0236 .localDistXY = {"0.55 * HcalFarForwardZDC_SiPMonTile_SquareSideLength",
0237 "0.55 * HcalFarForwardZDC_SiPMonTile_SquareSideLength"},
0238 .localDistXZ{},
0239 .localDistYZ{},
0240 .globalDistRPhi{},
0241 .globalDistEtaPhi{},
0242 .dimScaledLocalDistXY{},
0243 .splitCluster = false,
0244 .minClusterHitEdep = 100.0 * dd4hep::keV,
0245 .minClusterCenterEdep = 1.0 * dd4hep::MeV,
0246 .transverseEnergyProfileMetric{},
0247 .transverseEnergyProfileScale{},
0248 .transverseEnergyProfileScaleUnits{}},
0249 app));
0250
0251 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0252 "HcalFarForwardZDCClustersWithoutShapes",
0253 {
0254 "HcalFarForwardZDCImagingProtoClusters",
0255 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0256 "HcalFarForwardZDCRawHitLinks",
0257 #endif
0258 "HcalFarForwardZDCRawHitAssociations"
0259 },
0260 {"HcalFarForwardZDCClustersWithoutShapes",
0261 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0262 "HcalFarForwardZDCClusterLinksWithoutShapes",
0263 #endif
0264 "HcalFarForwardZDCClusterAssociationsWithoutShapes"},
0265 {.energyWeight = "log",
0266 .sampFrac = 0.0273,
0267 .logWeightBaseCoeffs = {5.8, 0.65, 0.31},
0268 .logWeightBase_Eref = 50 * dd4hep::GeV},
0269 app
0270 ));
0271
0272 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0273 "HcalFarForwardZDCClusters",
0274 {"HcalFarForwardZDCClustersWithoutShapes",
0275 "HcalFarForwardZDCClusterAssociationsWithoutShapes"},
0276 {"HcalFarForwardZDCClusters",
0277 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0278 "HcalFarForwardZDCClusterLinks",
0279 #endif
0280 "HcalFarForwardZDCClusterAssociations"},
0281 {.longitudinalShowerInfoAvailable = true,
0282 .energyWeight = "log",
0283 .sampFrac = 0.0273,
0284 .logWeightBaseCoeffs = {5.8, 0.65, 0.31},
0285 .logWeightBase_Eref = 50 * dd4hep::GeV},
0286 app));
0287
0288 app->Add(new JOmniFactoryGeneratorT<CalorimeterTruthClustering_factory>(
0289 "HcalFarForwardZDCTruthProtoClusters", {"HcalFarForwardZDCRecHits", "HcalFarForwardZDCHits"},
0290 {"HcalFarForwardZDCTruthProtoClusters"},
0291 app
0292 ));
0293
0294
0295 app->Add(new JOmniFactoryGeneratorT<CalorimeterIslandCluster_factory>(
0296 "HcalFarForwardZDCIslandProtoClustersBaseline", {"HcalFarForwardZDCRecHits"},
0297 {"HcalFarForwardZDCIslandProtoClustersBaseline"},
0298 {.adjacencyMatrix{},
0299 .peakNeighbourhoodMatrix{},
0300 .readout{},
0301 .sectorDist = 5.0 * dd4hep::cm,
0302 .localDistXY = {50 * dd4hep::cm, 50 * dd4hep::cm},
0303 .localDistXZ{},
0304 .localDistYZ{},
0305 .globalDistRPhi{},
0306 .globalDistEtaPhi{},
0307 .dimScaledLocalDistXY{},
0308 .splitCluster = true,
0309 .minClusterHitEdep = 0.1 * dd4hep::MeV,
0310 .minClusterCenterEdep = 3.0 * dd4hep::MeV,
0311 .transverseEnergyProfileMetric = "globalDistEtaPhi",
0312 .transverseEnergyProfileScale = 1.,
0313 .transverseEnergyProfileScaleUnits{}},
0314 app
0315 ));
0316
0317 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0318 "HcalFarForwardZDCTruthClustersWithoutShapes",
0319 {
0320 "HcalFarForwardZDCTruthProtoClusters",
0321 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0322 "HcalFarForwardZDCRawHitLinks",
0323 #endif
0324 "HcalFarForwardZDCRawHitAssociations"
0325 },
0326 {"HcalFarForwardZDCTruthClustersWithoutShapes",
0327 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0328 "HcalFarForwardZDCTruthClusterLinksWithoutShapes",
0329 #endif
0330 "HcalFarForwardZDCTruthClusterAssociationsWithoutShapes"},
0331 {.energyWeight = "log", .sampFrac = 1.0, .logWeightBase = 3.6, .enableEtaBounds = false},
0332 app
0333 ));
0334
0335 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0336 "HcalFarForwardZDCTruthClusters",
0337 {"HcalFarForwardZDCTruthClustersWithoutShapes",
0338 "HcalFarForwardZDCTruthClusterAssociationsWithoutShapes"},
0339 {"HcalFarForwardZDCTruthClusters",
0340 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0341 "HcalFarForwardZDCTruthClusterLinks",
0342 #endif
0343 "HcalFarForwardZDCTruthClusterAssociations"},
0344 {.longitudinalShowerInfoAvailable = true, .energyWeight = "log", .logWeightBase = 3.6}, app));
0345
0346 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0347 "HcalFarForwardZDCClustersBaselineWithoutShapes",
0348 {
0349 "HcalFarForwardZDCIslandProtoClustersBaseline",
0350 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0351 "HcalFarForwardZDCRawHitLinks",
0352 #endif
0353 "HcalFarForwardZDCRawHitAssociations"
0354 },
0355 {"HcalFarForwardZDCClustersBaselineWithoutShapes",
0356 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0357 "HcalFarForwardZDCClusterLinksBaselineWithoutShapes",
0358 #endif
0359 "HcalFarForwardZDCClusterAssociationsBaselineWithoutShapes"},
0360 {
0361 .energyWeight = "log",
0362 .sampFrac = 0.0273,
0363 .logWeightBase = 6.2,
0364 .enableEtaBounds = false,
0365 },
0366 app
0367 ));
0368
0369 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0370 "HcalFarForwardZDCClustersBaseline",
0371 {"HcalFarForwardZDCClustersBaselineWithoutShapes",
0372 "HcalFarForwardZDCClusterAssociationsBaselineWithoutShapes"},
0373 {"HcalFarForwardZDCClustersBaseline",
0374 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0375 "HcalFarForwardZDCClusterLinksBaseline",
0376 #endif
0377 "HcalFarForwardZDCClusterAssociationsBaseline"},
0378 {.longitudinalShowerInfoAvailable = true,
0379 .energyWeight = "log",
0380 .sampFrac = 0.0273,
0381 .logWeightBase = 6.2},
0382 app));
0383 }
0384 }