File indexing completed on 2025-07-13 07:54:06
0001
0002
0003
0004 #include <Evaluator/DD4hepUnits.h>
0005 #include <JANA/JApplicationFwd.h>
0006 #include <string>
0007 #include <variant>
0008
0009 #include "algorithms/calorimetry/ImagingTopoClusterConfig.h"
0010 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0011 #include "factories/calorimetry/CalorimeterClusterRecoCoG_factory.h"
0012 #include "factories/calorimetry/CalorimeterClusterShape_factory.h"
0013 #include "factories/calorimetry/CalorimeterHitDigi_factory.h"
0014 #include "factories/calorimetry/CalorimeterHitReco_factory.h"
0015 #include "factories/calorimetry/CalorimeterIslandCluster_factory.h"
0016 #include "factories/calorimetry/CalorimeterTruthClustering_factory.h"
0017 #include "factories/calorimetry/HEXPLIT_factory.h"
0018 #include "factories/calorimetry/ImagingTopoCluster_factory.h"
0019
0020 extern "C" {
0021 void InitPlugin(JApplication* app) {
0022
0023 using namespace eicrecon;
0024
0025 InitJANAPlugin(app);
0026
0027
0028 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitDigi_factory>(
0029 "EcalFarForwardZDCRawHits", {"EcalFarForwardZDCHits"},
0030 {"EcalFarForwardZDCRawHits", "EcalFarForwardZDCRawHitAssociations"},
0031 {
0032 .eRes{},
0033 .tRes = 0.0 * dd4hep::ns,
0034 .capADC = 32768,
0035 .dyRangeADC = 2000 * dd4hep::MeV,
0036 .pedMeanADC = 400,
0037 .pedSigmaADC = 3.2,
0038 .resolutionTDC = 10 * dd4hep::picosecond,
0039 .corrMeanScale = "1.0",
0040 .readout = "EcalFarForwardZDCHits",
0041 },
0042 app
0043 ));
0044 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitReco_factory>(
0045 "EcalFarForwardZDCRecHits", {"EcalFarForwardZDCRawHits"}, {"EcalFarForwardZDCRecHits"},
0046 {
0047 .capADC = 32768,
0048 .dyRangeADC = 2000. * dd4hep::MeV,
0049 .pedMeanADC = 400,
0050 .pedSigmaADC = 3.2,
0051 .resolutionTDC = 10 * dd4hep::picosecond,
0052 .thresholdFactor = 4.0,
0053 .thresholdValue = 0.0,
0054 .sampFrac = "1.0",
0055 .readout = "EcalFarForwardZDCHits",
0056 },
0057 app
0058 ));
0059 app->Add(new JOmniFactoryGeneratorT<CalorimeterTruthClustering_factory>(
0060 "EcalFarForwardZDCTruthProtoClusters", {"EcalFarForwardZDCRecHits", "EcalFarForwardZDCHits"},
0061 {"EcalFarForwardZDCTruthProtoClusters"},
0062 app
0063 ));
0064 app->Add(new JOmniFactoryGeneratorT<CalorimeterIslandCluster_factory>(
0065 "EcalFarForwardZDCIslandProtoClusters", {"EcalFarForwardZDCRecHits"},
0066 {"EcalFarForwardZDCIslandProtoClusters"},
0067 {
0068 .adjacencyMatrix{},
0069 .peakNeighbourhoodMatrix{},
0070 .readout{},
0071 .sectorDist = 5.0 * dd4hep::cm,
0072 .localDistXY = {50 * dd4hep::cm, 50 * dd4hep::cm},
0073 .localDistXZ{},
0074 .localDistYZ{},
0075 .globalDistRPhi{},
0076 .globalDistEtaPhi{},
0077 .dimScaledLocalDistXY{},
0078 .splitCluster = true,
0079 .minClusterHitEdep = 0.1 * dd4hep::MeV,
0080 .minClusterCenterEdep = 3.0 * dd4hep::MeV,
0081 .transverseEnergyProfileMetric = "globalDistEtaPhi",
0082 .transverseEnergyProfileScale = 1.,
0083 .transverseEnergyProfileScaleUnits{},
0084 },
0085 app
0086 ));
0087
0088 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0089 "EcalFarForwardZDCTruthClustersWithoutShapes",
0090 {
0091 "EcalFarForwardZDCTruthProtoClusters",
0092 "EcalFarForwardZDCRawHitAssociations"
0093 },
0094 {"EcalFarForwardZDCTruthClustersWithoutShapes",
0095 "EcalFarForwardZDCTruthClusterAssociationsWithoutShapes"},
0096 {.energyWeight = "log", .sampFrac = 1.0, .logWeightBase = 3.6, .enableEtaBounds = false},
0097 app
0098 ));
0099
0100 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0101 "EcalFarForwardZDCTruthClusters",
0102 {"EcalFarForwardZDCTruthClustersWithoutShapes",
0103 "EcalFarForwardZDCTruthClusterAssociationsWithoutShapes"},
0104 {"EcalFarForwardZDCTruthClusters", "EcalFarForwardZDCTruthClusterAssociations"},
0105 {.longitudinalShowerInfoAvailable = true, .energyWeight = "log", .logWeightBase = 3.6}, app));
0106
0107 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0108 "EcalFarForwardZDCClustersWithoutShapes",
0109 {
0110 "EcalFarForwardZDCIslandProtoClusters",
0111 "EcalFarForwardZDCRawHitAssociations"
0112 },
0113 {"EcalFarForwardZDCClustersWithoutShapes",
0114 "EcalFarForwardZDCClusterAssociationsWithoutShapes"},
0115 {
0116 .energyWeight = "log",
0117 .sampFrac = 1.0,
0118 .logWeightBase = 6.2,
0119 .enableEtaBounds = false,
0120 },
0121 app
0122 ));
0123
0124 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0125 "EcalFarForwardZDCClusters",
0126 {"EcalFarForwardZDCClustersWithoutShapes",
0127 "EcalFarForwardZDCClusterAssociationsWithoutShapes"},
0128 {"EcalFarForwardZDCClusters", "EcalFarForwardZDCClusterAssociations"},
0129 {.longitudinalShowerInfoAvailable = true, .energyWeight = "log", .logWeightBase = 6.2}, app));
0130
0131 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitDigi_factory>(
0132 "HcalFarForwardZDCRawHits", {"HcalFarForwardZDCHits"},
0133 {"HcalFarForwardZDCRawHits", "HcalFarForwardZDCRawHitAssociations"},
0134 {
0135 .eRes{},
0136 .tRes = 0.0 * dd4hep::ns,
0137 .capADC = 65536,
0138 .dyRangeADC = 1000. * dd4hep::MeV,
0139 .pedMeanADC = 400,
0140 .pedSigmaADC = 2,
0141 .resolutionTDC = 10 * dd4hep::picosecond,
0142 .corrMeanScale = "1.0",
0143 .readout = "HcalFarForwardZDCHits",
0144 },
0145 app
0146 ));
0147
0148 app->Add(new JOmniFactoryGeneratorT<CalorimeterHitReco_factory>(
0149 "HcalFarForwardZDCRecHits", {"HcalFarForwardZDCRawHits"}, {"HcalFarForwardZDCRecHits"},
0150 {
0151 .capADC = 65536,
0152 .dyRangeADC = 1000. * dd4hep::MeV,
0153 .pedMeanADC = 400,
0154 .pedSigmaADC = 2,
0155 .resolutionTDC = 10 * dd4hep::picosecond,
0156 .thresholdFactor = 3.0,
0157 .thresholdValue = 0.0,
0158 .sampFrac = "1.0",
0159 .readout = "HcalFarForwardZDCHits",
0160 .layerField = "layer",
0161 .sectorField = "system",
0162 },
0163 app
0164 ));
0165
0166 app->Add(new JOmniFactoryGeneratorT<HEXPLIT_factory>("HcalFarForwardZDCSubcellHits",
0167 {"HcalFarForwardZDCRecHits"},
0168 {"HcalFarForwardZDCSubcellHits"},
0169 {
0170 .MIP = 472. * dd4hep::keV,
0171 .Emin_in_MIPs = 0.5,
0172 .delta_in_MIPs = 0.01,
0173 .tmax = 269 * dd4hep::ns,
0174 },
0175 app
0176 ));
0177
0178 app->Add(new JOmniFactoryGeneratorT<ImagingTopoCluster_factory>(
0179 "HcalFarForwardZDCImagingProtoClusters", {"HcalFarForwardZDCSubcellHits"},
0180 {"HcalFarForwardZDCImagingProtoClusters"},
0181 {
0182 .neighbourLayersRange = 1,
0183 .localDistXY = {"0.5 * HcalFarForwardZDC_SiPMonTile_HexSideLength",
0184 "0.5 * HcalFarForwardZDC_SiPMonTile_HexSideLength * sin(pi / 3)"},
0185 .layerDistXY = {"0.5 * HcalFarForwardZDC_SiPMonTile_HexSideLength",
0186 "0.5 * HcalFarForwardZDC_SiPMonTile_HexSideLength * sin(pi / 3)"},
0187 .layerMode = eicrecon::ImagingTopoClusterConfig::ELayerMode::xy,
0188 .sectorDist = 10.0 * dd4hep::cm,
0189 .minClusterHitEdep = 50.0 * dd4hep::keV,
0190 .minClusterCenterEdep = 3.0 * dd4hep::MeV,
0191 .minClusterEdep = 11.0 * dd4hep::MeV,
0192 .minClusterNhits = 30,
0193 },
0194 app
0195 ));
0196
0197 app->Add(new JOmniFactoryGeneratorT<CalorimeterIslandCluster_factory>(
0198 "HcalFarForwardZDCIslandProtoClusters", {"HcalFarForwardZDCSubcellHits"},
0199 {"HcalFarForwardZDCIslandProtoClusters"},
0200 {.adjacencyMatrix{},
0201 .peakNeighbourhoodMatrix{},
0202 .readout{},
0203 .sectorDist = 1.5 * dd4hep::cm,
0204 .localDistXY = {"0.9 * HcalFarForwardZDC_SiPMonTile_HexSideLength",
0205 "0.76 * HcalFarForwardZDC_SiPMonTile_HexSideLength * sin(pi / 3)"},
0206 .localDistXZ{},
0207 .localDistYZ{},
0208 .globalDistRPhi{},
0209 .globalDistEtaPhi{},
0210 .dimScaledLocalDistXY{},
0211 .splitCluster = false,
0212 .minClusterHitEdep = 100.0 * dd4hep::keV,
0213 .minClusterCenterEdep = 1.0 * dd4hep::MeV,
0214 .transverseEnergyProfileMetric{},
0215 .transverseEnergyProfileScale{},
0216 .transverseEnergyProfileScaleUnits{}},
0217 app));
0218
0219 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0220 "HcalFarForwardZDCClustersWithoutShapes",
0221 {
0222 "HcalFarForwardZDCImagingProtoClusters",
0223 "HcalFarForwardZDCRawHitAssociations"
0224 },
0225 {"HcalFarForwardZDCClustersWithoutShapes",
0226 "HcalFarForwardZDCClusterAssociationsWithoutShapes"},
0227 {.energyWeight = "log",
0228 .sampFrac = 0.0203,
0229 .logWeightBaseCoeffs = {5.8, 0.65, 0.31},
0230 .logWeightBase_Eref = 50 * dd4hep::GeV},
0231 app
0232 ));
0233
0234 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0235 "HcalFarForwardZDCClusters",
0236 {"HcalFarForwardZDCClustersWithoutShapes",
0237 "HcalFarForwardZDCClusterAssociationsWithoutShapes"},
0238 {"HcalFarForwardZDCClusters", "HcalFarForwardZDCClusterAssociations"},
0239 {.longitudinalShowerInfoAvailable = true,
0240 .energyWeight = "log",
0241 .sampFrac = 0.0203,
0242 .logWeightBaseCoeffs = {5.8, 0.65, 0.31},
0243 .logWeightBase_Eref = 50 * dd4hep::GeV},
0244 app));
0245
0246 app->Add(new JOmniFactoryGeneratorT<CalorimeterTruthClustering_factory>(
0247 "HcalFarForwardZDCTruthProtoClusters", {"HcalFarForwardZDCRecHits", "HcalFarForwardZDCHits"},
0248 {"HcalFarForwardZDCTruthProtoClusters"},
0249 app
0250 ));
0251
0252
0253 app->Add(new JOmniFactoryGeneratorT<CalorimeterIslandCluster_factory>(
0254 "HcalFarForwardZDCIslandProtoClustersBaseline", {"HcalFarForwardZDCRecHits"},
0255 {"HcalFarForwardZDCIslandProtoClustersBaseline"},
0256 {.adjacencyMatrix{},
0257 .peakNeighbourhoodMatrix{},
0258 .readout{},
0259 .sectorDist = 5.0 * dd4hep::cm,
0260 .localDistXY = {50 * dd4hep::cm, 50 * dd4hep::cm},
0261 .localDistXZ{},
0262 .localDistYZ{},
0263 .globalDistRPhi{},
0264 .globalDistEtaPhi{},
0265 .dimScaledLocalDistXY{},
0266 .splitCluster = true,
0267 .minClusterHitEdep = 0.1 * dd4hep::MeV,
0268 .minClusterCenterEdep = 3.0 * dd4hep::MeV,
0269 .transverseEnergyProfileMetric = "globalDistEtaPhi",
0270 .transverseEnergyProfileScale = 1.,
0271 .transverseEnergyProfileScaleUnits{}},
0272 app
0273 ));
0274
0275 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0276 "HcalFarForwardZDCTruthClustersWithoutShapes",
0277 {
0278 "HcalFarForwardZDCTruthProtoClusters",
0279 "HcalFarForwardZDCRawHitAssociations"
0280 },
0281 {"HcalFarForwardZDCTruthClustersWithoutShapes",
0282 "HcalFarForwardZDCTruthClusterAssociationsWithoutShapes"},
0283 {.energyWeight = "log", .sampFrac = 1.0, .logWeightBase = 3.6, .enableEtaBounds = false},
0284 app
0285 ));
0286
0287 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0288 "HcalFarForwardZDCTruthClusters",
0289 {"HcalFarForwardZDCTruthClustersWithoutShapes",
0290 "HcalFarForwardZDCTruthClusterAssociationsWithoutShapes"},
0291 {"HcalFarForwardZDCTruthClusters", "HcalFarForwardZDCTruthClusterAssociations"},
0292 {.longitudinalShowerInfoAvailable = true, .energyWeight = "log", .logWeightBase = 3.6}, app));
0293
0294 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0295 "HcalFarForwardZDCClustersBaselineWithoutShapes",
0296 {
0297 "HcalFarForwardZDCIslandProtoClustersBaseline",
0298 "HcalFarForwardZDCRawHitAssociations"
0299 },
0300 {"HcalFarForwardZDCClustersBaselineWithoutShapes",
0301 "HcalFarForwardZDCClusterAssociationsBaselineWithoutShapes"},
0302 {
0303 .energyWeight = "log",
0304 .sampFrac = 0.0203,
0305 .logWeightBase = 6.2,
0306 .enableEtaBounds = false,
0307 },
0308 app
0309 ));
0310
0311 app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0312 "HcalFarForwardZDCClustersBaseline",
0313 {"HcalFarForwardZDCClustersBaselineWithoutShapes",
0314 "HcalFarForwardZDCClusterAssociationsBaselineWithoutShapes"},
0315 {"HcalFarForwardZDCClustersBaseline", "HcalFarForwardZDCClusterAssociationsBaseline"},
0316 {.longitudinalShowerInfoAvailable = true,
0317 .energyWeight = "log",
0318 .sampFrac = 0.0203,
0319 .logWeightBase = 6.2},
0320 app));
0321 }
0322 }