Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-09-27 07:03:04

0001 // Copyright 2022, David Lawrence
0002 // Subject to the terms in the LICENSE file found in the top-level directory.
0003 //
0004 //
0005 
0006 #include <edm4eic/EDM4eicVersion.h>
0007 #include <Evaluator/DD4hepUnits.h>
0008 #include <JANA/JApplication.h>
0009 #include <math.h>
0010 #include <string>
0011 
0012 #include "algorithms/calorimetry/ImagingTopoClusterConfig.h"
0013 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0014 #include "factories/calorimetry/CalorimeterClusterRecoCoG_factory.h"
0015 #include "factories/calorimetry/CalorimeterHitDigi_factory.h"
0016 #include "factories/calorimetry/CalorimeterHitReco_factory.h"
0017 #include "factories/calorimetry/CalorimeterIslandCluster_factory.h"
0018 #include "factories/calorimetry/CalorimeterTruthClustering_factory.h"
0019 #include "factories/calorimetry/HEXPLIT_factory.h"
0020 #include "factories/calorimetry/ImagingTopoCluster_factory.h"
0021 
0022 extern "C" {
0023     void InitPlugin(JApplication *app) {
0024 
0025         using namespace eicrecon;
0026 
0027         InitJANAPlugin(app);
0028 
0029         // LYSO part of the ZDC
0030         app->Add(new JOmniFactoryGeneratorT<CalorimeterHitDigi_factory>(
0031           "EcalFarForwardZDCRawHits",
0032           {"EcalFarForwardZDCHits"},
0033 #if EDM4EIC_VERSION_MAJOR >= 7
0034           {"EcalFarForwardZDCRawHits", "EcalFarForwardZDCRawHitAssociations"},
0035 #else
0036           {"EcalFarForwardZDCRawHits"},
0037 #endif
0038           {
0039             .tRes = 0.0 * dd4hep::ns,
0040             .capADC = 32768,
0041             .dyRangeADC = 2000 * dd4hep::MeV,
0042             .pedMeanADC = 400,
0043             .pedSigmaADC = 3.2,
0044             .resolutionTDC = 10 * dd4hep::picosecond,
0045             .corrMeanScale = "1.0",
0046             .readout = "EcalFarForwardZDCHits",
0047           },
0048           app   // TODO: Remove me once fixed
0049         ));
0050         app->Add(new JOmniFactoryGeneratorT<CalorimeterHitReco_factory>(
0051           "EcalFarForwardZDCRecHits", {"EcalFarForwardZDCRawHits"}, {"EcalFarForwardZDCRecHits"},
0052           {
0053             .capADC = 32768,
0054             .dyRangeADC = 2000. * dd4hep::MeV,
0055             .pedMeanADC = 400,
0056             .pedSigmaADC = 3.2,
0057             .resolutionTDC = 10 * dd4hep::picosecond,
0058             .thresholdFactor = 4.0,
0059             .thresholdValue = 0.0,
0060             .sampFrac = "1.0",
0061             .readout = "EcalFarForwardZDCHits",
0062           },
0063           app   // TODO: Remove me once fixed
0064         ));
0065         app->Add(new JOmniFactoryGeneratorT<CalorimeterTruthClustering_factory>(
0066           "EcalFarForwardZDCTruthProtoClusters", {"EcalFarForwardZDCRecHits", "EcalFarForwardZDCHits"}, {"EcalFarForwardZDCTruthProtoClusters"},
0067           app   // TODO: Remove me once fixed
0068         ));
0069         app->Add(new JOmniFactoryGeneratorT<CalorimeterIslandCluster_factory>(
0070           "EcalFarForwardZDCIslandProtoClusters", {"EcalFarForwardZDCRecHits"}, {"EcalFarForwardZDCIslandProtoClusters"},
0071           {
0072             .sectorDist = 5.0 * dd4hep::cm,
0073             .localDistXY = {50 * dd4hep::cm, 50 * dd4hep::cm},
0074             .splitCluster = true,
0075             .minClusterHitEdep = 0.1 * dd4hep::MeV,
0076             .minClusterCenterEdep = 3.0 * dd4hep::MeV,
0077             .transverseEnergyProfileMetric = "globalDistEtaPhi",
0078             .transverseEnergyProfileScale = 1.,
0079           },
0080           app   // TODO: Remove me once fixed
0081         ));
0082 
0083         app->Add(
0084           new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0085              "EcalFarForwardZDCTruthClusters",
0086             {"EcalFarForwardZDCTruthProtoClusters",        // edm4eic::ProtoClusterCollection
0087 #if EDM4EIC_VERSION_MAJOR >= 7
0088              "EcalFarForwardZDCRawHitAssociations"},       // edm4eic::MCRecoClusterHitAssociationCollection
0089 #else
0090              "EcalFarForwardZDCHits"},                     // edm4hep::SimCalorimeterHitCollection
0091 #endif
0092             {"EcalFarForwardZDCTruthClusters",             // edm4eic::Cluster
0093              "EcalFarForwardZDCTruthClusterAssociations"}, // edm4eic::MCRecoClusterParticleAssociation
0094             {
0095               .energyWeight = "log",
0096               .sampFrac = 1.0,
0097               .logWeightBase = 3.6,
0098               .longitudinalShowerInfoAvailable = true,
0099               .enableEtaBounds = false
0100             },
0101             app   // TODO: Remove me once fixed
0102           )
0103         );
0104 
0105         app->Add(
0106           new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0107              "EcalFarForwardZDCClusters",
0108             {"EcalFarForwardZDCIslandProtoClusters",  // edm4eic::ProtoClusterCollection
0109 #if EDM4EIC_VERSION_MAJOR >= 7
0110              "EcalFarForwardZDCRawHitAssociations"},  // edm4eic::MCRecoClusterHitAssociationCollection
0111 #else
0112              "EcalFarForwardZDCHits"},                // edm4hep::SimCalorimeterHitCollection
0113 #endif
0114             {"EcalFarForwardZDCClusters",             // edm4eic::Cluster
0115              "EcalFarForwardZDCClusterAssociations"}, // edm4eic::MCRecoClusterParticleAssociation
0116             {
0117               .energyWeight = "log",
0118               .sampFrac = 1.0,
0119               .logWeightBase = 6.2,
0120               .longitudinalShowerInfoAvailable = true,
0121               .enableEtaBounds = false,
0122             },
0123             app   // TODO: Remove me once fixed
0124           )
0125         );
0126 
0127         app->Add(new JOmniFactoryGeneratorT<CalorimeterHitDigi_factory>(
0128           "HcalFarForwardZDCRawHits",
0129           {"HcalFarForwardZDCHits"},
0130 #if EDM4EIC_VERSION_MAJOR >= 7
0131           {"HcalFarForwardZDCRawHits", "HcalFarForwardZDCRawHitAssociations"},
0132 #else
0133           {"HcalFarForwardZDCRawHits"},
0134 #endif
0135           {
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>(
0167           "HcalFarForwardZDCSubcellHits", {"HcalFarForwardZDCRecHits"}, {"HcalFarForwardZDCSubcellHits"},
0168           {
0169             .MIP = 472. * dd4hep::keV,
0170             .Emin_in_MIPs=0.5,
0171             .tmax=269 * dd4hep::ns,
0172           },
0173           app   // TODO: Remove me once fixed
0174         ));
0175 
0176         double side_length=31.3 * dd4hep::mm;
0177         app->Add(new JOmniFactoryGeneratorT<ImagingTopoCluster_factory>(
0178             "HcalFarForwardZDCImagingProtoClusters", {"HcalFarForwardZDCSubcellHits"}, {"HcalFarForwardZDCImagingProtoClusters"},
0179             {
0180                 .neighbourLayersRange = 1,
0181                 .localDistXY = {0.5*side_length, 0.5*side_length*sin(M_PI/3)},
0182                 .layerDistXY = {0.25*side_length, 0.25*side_length*sin(M_PI/3)},
0183                 .layerMode=eicrecon::ImagingTopoClusterConfig::ELayerMode::xy,
0184                 .sectorDist = 10.0 * dd4hep::cm,
0185                 .minClusterHitEdep = 100.0 * dd4hep::keV,
0186                 .minClusterCenterEdep = 3.0 * dd4hep::MeV,
0187                 .minClusterEdep = 11.0 * dd4hep::MeV,
0188                 .minClusterNhits = 100,
0189             },
0190             app   // TODO: Remove me once fixed
0191         ));
0192 
0193         app->Add(new JOmniFactoryGeneratorT<CalorimeterIslandCluster_factory>(
0194           "HcalFarForwardZDCIslandProtoClusters", {"HcalFarForwardZDCSubcellHits"}, {"HcalFarForwardZDCIslandProtoClusters"},
0195           {
0196             .sectorDist = 1.5 * dd4hep::cm,
0197             .localDistXY = {0.9*side_length, 0.76*side_length*sin(M_PI/3)},
0198             .splitCluster = false,
0199             .minClusterHitEdep = 100.0 * dd4hep::keV,
0200             .minClusterCenterEdep = 1.0 * dd4hep::MeV,
0201             // .transverseEnergyProfileMetric = "globalDistEtaPhi",
0202             // .transverseEnergyProfileScale = 1.,
0203           },
0204           app
0205         ));
0206 
0207         app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0208            "HcalFarForwardZDCClusters",
0209           {"HcalFarForwardZDCImagingProtoClusters", // edm4eic::ProtoClusterCollection
0210 #if EDM4EIC_VERSION_MAJOR >= 7
0211            "HcalFarForwardZDCRawHitAssociations"},  // edm4eic::MCRecoCalorimeterHitAssociationCollection
0212 #else
0213            "HcalFarForwardZDCHits"},                // edm4hep::SimCalorimeterHitCollection
0214 #endif
0215           {"HcalFarForwardZDCClusters",             // edm4eic::Cluster
0216            "HcalFarForwardZDCClusterAssociations"}, // edm4eic::MCRecoClusterParticleAssociation
0217           {
0218             .energyWeight = "log",
0219             .sampFrac = 0.0203,
0220             .logWeightBaseCoeffs={5.8,0.65,0.31},
0221             .logWeightBase_Eref=50*dd4hep::GeV,
0222             .longitudinalShowerInfoAvailable = true,
0223           },
0224           app   // TODO: Remove me once fixed
0225         ));
0226 
0227         app->Add(new JOmniFactoryGeneratorT<CalorimeterTruthClustering_factory>(
0228           "HcalFarForwardZDCTruthProtoClusters", {"HcalFarForwardZDCRecHits", "HcalFarForwardZDCHits"}, {"HcalFarForwardZDCTruthProtoClusters"},
0229           app   // TODO: Remove me once fixed
0230         ));
0231 
0232         //Clusters with the baseline algorithm (no HEXPLIT)
0233         app->Add(new JOmniFactoryGeneratorT<CalorimeterIslandCluster_factory>(
0234           "HcalFarForwardZDCIslandProtoClustersBaseline", {"HcalFarForwardZDCRecHits"}, {"HcalFarForwardZDCIslandProtoClustersBaseline"},
0235           {
0236             .sectorDist = 5.0 * dd4hep::cm,
0237             .localDistXY = {50 * dd4hep::cm, 50 * dd4hep::cm},
0238             .splitCluster = true,
0239             .minClusterHitEdep = 0.1 * dd4hep::MeV,
0240             .minClusterCenterEdep = 3.0 * dd4hep::MeV,
0241             .transverseEnergyProfileMetric = "globalDistEtaPhi",
0242             .transverseEnergyProfileScale = 1.,
0243           },
0244           app   // TODO: Remove me once fixed
0245         ));
0246 
0247         app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0248              "HcalFarForwardZDCTruthClusters",
0249             {"HcalFarForwardZDCTruthProtoClusters",        // edm4eic::ProtoClusterCollection
0250 #if EDM4EIC_VERSION_MAJOR >= 7
0251              "HcalFarForwardZDCRawHitAssociations"},       // edm4eic::MCRecoCalorimeterHitAssociationCollection
0252 #else
0253              "HcalFarForwardZDCHits"},                     // edm4hep::SimCalorimeterHitCollection
0254 #endif
0255             {"HcalFarForwardZDCTruthClusters",             // edm4eic::Cluster
0256              "HcalFarForwardZDCTruthClusterAssociations"}, // edm4eic::MCRecoClusterParticleAssociation
0257             {
0258               .energyWeight = "log",
0259               .sampFrac = 1.0,
0260               .logWeightBase = 3.6,
0261               .longitudinalShowerInfoAvailable = true,
0262               .enableEtaBounds = false
0263             },
0264             app   // TODO: Remove me once fixed
0265           )
0266         );
0267 
0268         app->Add(new JOmniFactoryGeneratorT<CalorimeterClusterRecoCoG_factory>(
0269              "HcalFarForwardZDCClustersBaseline",
0270             {"HcalFarForwardZDCIslandProtoClustersBaseline",  // edm4eic::ProtoClusterCollection
0271 #if EDM4EIC_VERSION_MAJOR >= 7
0272              "HcalFarForwardZDCRawHitAssociations"},          // edm4eic::MCRecoCalorimeterHitAssociationCollection
0273 #else
0274              "HcalFarForwardZDCHits"},                        // edm4hep::SimCalorimeterHitCollection
0275 #endif
0276             {"HcalFarForwardZDCClustersBaseline",             // edm4eic::Cluster
0277              "HcalFarForwardZDCClusterAssociationsBaseline"}, // edm4eic::MCRecoClusterParticleAssociation
0278             {
0279               .energyWeight = "log",
0280               .sampFrac = 0.0203,
0281               .logWeightBase = 6.2,
0282               .longitudinalShowerInfoAvailable = true,
0283               .enableEtaBounds = false,
0284             },
0285             app   // TODO: Remove me once fixed
0286           )
0287         );
0288     }
0289 }