Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-13 07:54:06

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2021 - 2025, Chao Peng, Sylvester Joosten, Whitney Armstrong, David Lawrence, Friederike Bock, Wouter Deconinck, Nathan Brei, Sebouh Paul, Dmitry Kalinkin, Barak Schmookler
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   // LYSO part of the ZDC
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 // TODO: Remove me once fixed
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 // TODO: Remove me once fixed
0058       ));
0059   app->Add(new JOmniFactoryGeneratorT<CalorimeterTruthClustering_factory>(
0060       "EcalFarForwardZDCTruthProtoClusters", {"EcalFarForwardZDCRecHits", "EcalFarForwardZDCHits"},
0061       {"EcalFarForwardZDCTruthProtoClusters"},
0062       app // TODO: Remove me once fixed
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 // TODO: Remove me once fixed
0086       ));
0087 
0088   app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0089       "EcalFarForwardZDCTruthClustersWithoutShapes",
0090       {
0091           "EcalFarForwardZDCTruthProtoClusters", // edm4eic::ProtoClusterCollection
0092           "EcalFarForwardZDCRawHitAssociations"  // edm4eic::MCRecoClusterHitAssociationCollection
0093       },
0094       {"EcalFarForwardZDCTruthClustersWithoutShapes",             // edm4eic::Cluster
0095        "EcalFarForwardZDCTruthClusterAssociationsWithoutShapes"}, // edm4eic::MCRecoClusterParticleAssociation
0096       {.energyWeight = "log", .sampFrac = 1.0, .logWeightBase = 3.6, .enableEtaBounds = false},
0097       app // TODO: Remove me once fixed
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", // edm4eic::ProtoClusterCollection
0111           "EcalFarForwardZDCRawHitAssociations"   // edm4eic::MCRecoClusterHitAssociationCollection
0112       },
0113       {"EcalFarForwardZDCClustersWithoutShapes",             // edm4eic::Cluster
0114        "EcalFarForwardZDCClusterAssociationsWithoutShapes"}, // edm4eic::MCRecoClusterParticleAssociation
0115       {
0116           .energyWeight    = "log",
0117           .sampFrac        = 1.0,
0118           .logWeightBase   = 6.2,
0119           .enableEtaBounds = false,
0120       },
0121       app // TODO: Remove me once fixed
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 // TODO: Remove me once fixed
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 // TODO: Remove me once fixed
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 // TODO: Remove me once fixed
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 // TODO: Remove me once fixed
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{}, // = "globalDistEtaPhi",
0215        .transverseEnergyProfileScale{},  // = 1.,
0216        .transverseEnergyProfileScaleUnits{}},
0217       app));
0218 
0219   app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0220       "HcalFarForwardZDCClustersWithoutShapes",
0221       {
0222           "HcalFarForwardZDCImagingProtoClusters", // edm4eic::ProtoClusterCollection
0223           "HcalFarForwardZDCRawHitAssociations" // edm4eic::MCRecoCalorimeterHitAssociationCollection
0224       },
0225       {"HcalFarForwardZDCClustersWithoutShapes",             // edm4eic::Cluster
0226        "HcalFarForwardZDCClusterAssociationsWithoutShapes"}, // edm4eic::MCRecoClusterParticleAssociation
0227       {.energyWeight        = "log",
0228        .sampFrac            = 0.0203,
0229        .logWeightBaseCoeffs = {5.8, 0.65, 0.31},
0230        .logWeightBase_Eref  = 50 * dd4hep::GeV},
0231       app // TODO: Remove me once fixed
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 // TODO: Remove me once fixed
0250       ));
0251 
0252   //Clusters with the baseline algorithm (no HEXPLIT)
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 // TODO: Remove me once fixed
0273       ));
0274 
0275   app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0276       "HcalFarForwardZDCTruthClustersWithoutShapes",
0277       {
0278           "HcalFarForwardZDCTruthProtoClusters", // edm4eic::ProtoClusterCollection
0279           "HcalFarForwardZDCRawHitAssociations" // edm4eic::MCRecoCalorimeterHitAssociationCollection
0280       },
0281       {"HcalFarForwardZDCTruthClustersWithoutShapes",             // edm4eic::Cluster
0282        "HcalFarForwardZDCTruthClusterAssociationsWithoutShapes"}, // edm4eic::MCRecoClusterParticleAssociation
0283       {.energyWeight = "log", .sampFrac = 1.0, .logWeightBase = 3.6, .enableEtaBounds = false},
0284       app // TODO: Remove me once fixed
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", // edm4eic::ProtoClusterCollection
0298           "HcalFarForwardZDCRawHitAssociations" // edm4eic::MCRecoCalorimeterHitAssociationCollection
0299       },
0300       {"HcalFarForwardZDCClustersBaselineWithoutShapes", // edm4eic::Cluster
0301        "HcalFarForwardZDCClusterAssociationsBaselineWithoutShapes"}, // edm4eic::MCRecoClusterParticleAssociation
0302       {
0303           .energyWeight    = "log",
0304           .sampFrac        = 0.0203,
0305           .logWeightBase   = 6.2,
0306           .enableEtaBounds = false,
0307       },
0308       app // TODO: Remove me once fixed
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 }