File indexing completed on 2026-07-24 08:25:36
0001
0002
0003
0004 #include <Evaluator/DD4hepUnits.h>
0005 #include <JANA/JApplication.h>
0006 #include <JANA/JApplicationFwd.h>
0007 #include <JANA/Utils/JTypeInfo.h>
0008 #include <TMath.h>
0009 #include <edm4eic/unit_system.h>
0010 #include <edm4hep/SimTrackerHit.h>
0011 #include <cmath>
0012 #include <map>
0013 #include <memory>
0014 #include <string>
0015 #include <vector>
0016
0017 #include "algorithms/digi/SiliconChargeSharingConfig.h"
0018 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0019 #include "factories/digi/EICROCDigitization_factory.h"
0020 #include "factories/digi/PulseCombiner_factory.h"
0021 #include "factories/digi/PulseGeneration_factory.h"
0022 #include "factories/digi/SiliconChargeSharing_factory.h"
0023 #include "factories/digi/SiliconPulseDiscretization_factory.h"
0024 #include "factories/digi/SiliconTrackerDigi_factory.h"
0025 #include "factories/tracking/LGADHitClustering_factory.h"
0026 #include "factories/tracking/TrackerHitReconstruction_factory.h"
0027
0028 extern "C" {
0029 void InitPlugin(JApplication* app) {
0030 InitJANAPlugin(app);
0031
0032 using namespace eicrecon;
0033
0034
0035
0036
0037 app->Add(new JOmniFactoryGeneratorT<LGADHitClustering_factory>(
0038 "TOFEndcapClusterHits", {"TOFEndcapSharedRecHits"},
0039 {"TOFEndcapClusterHits"},
0040 {
0041 .readout = "TOFEndcapHits",
0042 .useAve = true,
0043 },
0044 app));
0045
0046 app->Add(new JOmniFactoryGeneratorT<SiliconChargeSharing_factory>(
0047 "TOFEndcapSharedHits", {"TOFEndcapHits"}, {"TOFEndcapSharedHits"},
0048 {
0049
0050 .sigma_mode = SiliconChargeSharingConfig::ESigmaMode::rel,
0051 .sigma_sharingx = 0.5,
0052 .sigma_sharingy = 0.5,
0053 .min_edep = 6 * dd4hep::keV,
0054 .readout = "TOFEndcapHits",
0055 },
0056 app));
0057
0058
0059
0060 app->Add(new JOmniFactoryGeneratorT<SiliconTrackerDigi_factory>(
0061 "TOFEndcapSharedRawHits", {"EventHeader", "TOFEndcapSharedHits"},
0062 {"TOFEndcapSharedRawHits", "TOFEndcapSharedRawHitLinks", "TOFEndcapSharedRawHitAssociations"},
0063 {
0064 .threshold = 0.0,
0065 .timeResolution = 0.025,
0066 },
0067 app));
0068
0069
0070 app->Add(new JOmniFactoryGeneratorT<TrackerHitReconstruction_factory>(
0071 "TOFEndcapSharedRecHits", {"TOFEndcapSharedRawHits"},
0072 {"TOFEndcapSharedRecHits"},
0073 {},
0074 app));
0075
0076 const double x_when_landau_min = -0.22278;
0077 const double landau_min = TMath::Landau(x_when_landau_min, 0, 1, true);
0078 const double sigma_analog = 0.293951 * edm4eic::unit::ns;
0079 const double Vm = 3e-4 * dd4hep::GeV;
0080 const double adc_range = 256;
0081
0082 const double gain = -adc_range / Vm / landau_min * sigma_analog;
0083 const int offset = 3;
0084 app->Add(new JOmniFactoryGeneratorT<PulseGeneration_factory<edm4hep::SimTrackerHit>>(
0085 "TOFEndcapSmoothPulses", {"TOFEndcapSharedHits"}, {"TOFEndcapSmoothPulses"},
0086 {
0087 .pulse_shape_function = "LandauPulse",
0088 .pulse_shape_params = {gain, sigma_analog, offset},
0089 .ignore_thres = 0.05 * adc_range,
0090 .timestep = 0.01 * edm4eic::unit::ns,
0091 },
0092 app));
0093
0094 app->Add(new JOmniFactoryGeneratorT<PulseCombiner_factory>(
0095 "TOFEndcapCombinedPulses", {"TOFEndcapSmoothPulses"}, {"TOFEndcapCombinedPulses"},
0096 {
0097 .minimum_separation = 25 * edm4eic::unit::ns,
0098 },
0099 app));
0100
0101 double risetime = 0.45 * edm4eic::unit::ns;
0102 app->Add(new JOmniFactoryGeneratorT<SiliconPulseDiscretization_factory>(
0103 "TOFEndcapPulses", {"TOFEndcapCombinedPulses"}, {"TOFEndcapPulses"},
0104 {
0105 .EICROC_period = 25 * edm4eic::unit::ns,
0106 .local_period = 25 * edm4eic::unit::ns / 1024,
0107 .global_offset = -offset * sigma_analog + risetime,
0108 },
0109 app));
0110
0111 app->Add(new JOmniFactoryGeneratorT<EICROCDigitization_factory>(
0112 "TOFEndcapADCTDC", {"TOFEndcapPulses"}, {"TOFEndcapADCTDC"}, {}, app));
0113 }
0114 }