Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-18 08:17:53

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2022 - 2025 Sylvester Joosten, Chao, Chao Peng, Whitney Armstrong, David Lawrence, Friederike Bock, Nathan Brei, Wouter Deconinck, Dmitry Kalinkin, Derek Anderson
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   // Make sure digi and reco use the same value
0029   decltype(CalorimeterHitDigiConfig::capADC) HcalEndcapN_capADC =
0030       32768; // assuming 15 bit ADC like FHCal
0031   decltype(CalorimeterHitDigiConfig::dyRangeADC) HcalEndcapN_dyRangeADC =
0032       200 * dd4hep::MeV; // to be verified with simulations
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", "HcalEndcapNRawHitAssociations"},
0041       {
0042           .eRes{},
0043           .tRes          = 0.0 * dd4hep::ns,
0044           .capADC        = HcalEndcapN_capADC,
0045           .capTime       = 100, // given in ns, 4 samples in HGCROC
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 // TODO: Remove me once fixed
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, // 0.1875 MeV deposition out of 200 MeV max (per layer) --> adc = 10 + 0.1875 / 200 * 32768 == 41
0066           .sampFrac =
0067               "0.0095", // from latest study - implement at level of reco hits rather than clusters
0068           .readout = "HcalEndcapNHits",
0069       },
0070       app // TODO: Remove me once fixed
0071       ));
0072   app->Add(new JOmniFactoryGeneratorT<CalorimeterHitsMerger_factory>(
0073       "HcalEndcapNMergedHits", {"HcalEndcapNRecHits"}, {"HcalEndcapNMergedHits"},
0074       {.readout = "HcalEndcapNHits", .fieldTransformations = {"layer:4", "slice:0"}},
0075       app // TODO: Remove me once fixed
0076       ));
0077   app->Add(new JOmniFactoryGeneratorT<CalorimeterTruthClustering_factory>(
0078       "HcalEndcapNTruthProtoClusters", {"HcalEndcapNMergedHits", "HcalEndcapNHits"},
0079       {"HcalEndcapNTruthProtoClusters"},
0080       app // TODO: Remove me once fixed
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 // TODO: Remove me once fixed
0104       ));
0105   app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0106       "HcalEndcapNTruthClustersWithoutShapes",
0107       {
0108           "HcalEndcapNTruthProtoClusters", // edm4eic::ProtoClusterCollection
0109           "HcalEndcapNRawHitAssociations"  // edm4eic::MCRecoCalorimeterHitAssociationCollection
0110       },
0111       {"HcalEndcapNTruthClustersWithoutShapes",             // edm4eic::Cluster
0112        "HcalEndcapNTruthClusterAssociationsWithoutShapes"}, // edm4eic::MCRecoClusterParticleAssociation
0113       {.energyWeight = "log", .sampFrac = 1.0, .logWeightBase = 6.2, .enableEtaBounds = false},
0114       app // TODO: Remove me once fixed
0115       ));
0116   app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0117       "HcalEndcapNTruthClusters",
0118       {"HcalEndcapNTruthClustersWithoutShapes", "HcalEndcapNTruthClusterAssociationsWithoutShapes"},
0119       {"HcalEndcapNTruthClusters", "HcalEndcapNTruthClusterAssociations"},
0120       {.energyWeight = "log", .logWeightBase = 6.2}, app));
0121   app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0122       "HcalEndcapNClustersWithoutShapes",
0123       {
0124           "HcalEndcapNIslandProtoClusters", // edm4eic::ProtoClusterCollection
0125           "HcalEndcapNRawHitAssociations"   // edm4eic::MCRecoCalorimeterHitAssociationCollection
0126       },
0127       {"HcalEndcapNClustersWithoutShapes",             // edm4eic::Cluster
0128        "HcalEndcapNClusterAssociationsWithoutShapes"}, // edm4eic::MCRecoClusterParticleAssociation
0129       {
0130           .energyWeight    = "log",
0131           .sampFrac        = 1.0,
0132           .logWeightBase   = 6.2,
0133           .enableEtaBounds = false,
0134       },
0135       app // TODO: Remove me once fixed
0136       ));
0137   app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0138       "HcalEndcapNClusters",
0139       {"HcalEndcapNClustersWithoutShapes", "HcalEndcapNClusterAssociationsWithoutShapes"},
0140       {"HcalEndcapNClusters", "HcalEndcapNClusterAssociations"},
0141       {.energyWeight = "log", .logWeightBase = 6.2}, app));
0142   app->Add(new JOmniFactoryGeneratorT<TrackClusterMergeSplitter_factory>(
0143       "HcalEndcapNSplitMergeProtoClusters",
0144       {"HcalEndcapNIslandProtoClusters", "CalorimeterTrackProjections"},
0145       {"HcalEndcapNSplitMergeProtoClusters"},
0146       {.idCalo                       = "HcalEndcapN_ID",
0147        .minSigCut                    = -2.0,
0148        .avgEP                        = 0.60,
0149        .sigEP                        = 0.40,
0150        .drAdd                        = 0.40,
0151        .sampFrac                     = 1.0,
0152        .transverseEnergyProfileScale = 1.0},
0153       app // TODO: remove me once fixed
0154       ));
0155   app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0156       "HcalEndcapNSplitMergeClustersWithoutShapes",
0157       {
0158           "HcalEndcapNSplitMergeProtoClusters", // edm4eic::ProtoClusterCollection
0159           "HcalEndcapNRawHitAssociations" // edm4hep::MCRecoCalorimeterHitAssociationCollection
0160       },
0161       {"HcalEndcapNSplitMergeClustersWithoutShapes",             // edm4eic::Cluster
0162        "HcalEndcapNSplitMergeClusterAssociationsWithoutShapes"}, // edm4eic::MCRecoClusterParticleAssociation
0163       {.energyWeight = "log", .sampFrac = 1.0, .logWeightBase = 6.2, .enableEtaBounds = false},
0164       app // TODO: Remove me once fixed
0165       ));
0166   app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterShape_factory>(
0167       "HcalEndcapNSplitMergeClusters",
0168       {"HcalEndcapNSplitMergeClustersWithoutShapes",
0169        "HcalEndcapNSplitMergeClusterAssociationsWithoutShapes"},
0170       {"HcalEndcapNSplitMergeClusters", "HcalEndcapNSplitMergeClusterAssociations"},
0171       {.energyWeight = "log", .logWeightBase = 6.2}, app));
0172 }
0173 }