File indexing completed on 2026-05-25 07:38:24
0001
0002
0003
0004 #include <Evaluator/DD4hepUnits.h>
0005 #include <JANA/JApplication.h>
0006 #include <edm4eic/EDM4eicVersion.h>
0007 #include <JANA/JApplicationFwd.h>
0008 #include <JANA/Utils/JTypeInfo.h>
0009 #include <TMath.h>
0010 #include <edm4eic/unit_system.h>
0011 #include <edm4hep/SimTrackerHit.h>
0012 #include <cmath>
0013 #include <map>
0014 #include <memory>
0015 #include <string>
0016 #include <vector>
0017
0018 #include "algorithms/digi/SiliconChargeSharingConfig.h"
0019 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0020 #include "factories/digi/EICROCDigitization_factory.h"
0021 #include "factories/digi/PulseCombiner_factory.h"
0022 #include "factories/digi/PulseGeneration_factory.h"
0023 #include "factories/digi/SiliconChargeSharing_factory.h"
0024 #include "factories/digi/SiliconPulseDiscretization_factory.h"
0025 #include "factories/digi/SiliconTrackerDigi_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 app->Add(new JOmniFactoryGeneratorT<SiliconTrackerDigi_factory>(
0036 "TOFEndcapRawHits", {"EventHeader", "TOFEndcapHits"},
0037 {"TOFEndcapRawHits",
0038 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0039 "TOFEndcapRawHitLinks",
0040 #endif
0041 "TOFEndcapRawHitAssociations"},
0042 {
0043 .threshold = 6.0 * dd4hep::keV,
0044 .timeResolution = 0.025,
0045 },
0046 app));
0047
0048
0049 app->Add(new JOmniFactoryGeneratorT<TrackerHitReconstruction_factory>(
0050 "TOFEndcapRecHits", {"TOFEndcapRawHits"},
0051 {"TOFEndcapRecHits"},
0052 {
0053 .timeResolution = 0.025,
0054 },
0055 app));
0056
0057 app->Add(new JOmniFactoryGeneratorT<SiliconChargeSharing_factory>(
0058 "TOFEndcapSharedHits", {"TOFEndcapHits"}, {"TOFEndcapSharedHits"},
0059 {
0060
0061 .sigma_mode = SiliconChargeSharingConfig::ESigmaMode::rel,
0062 .sigma_sharingx = 1,
0063 .sigma_sharingy = 1,
0064 .min_edep = 0.001 * dd4hep::keV,
0065 .readout = "TOFEndcapHits",
0066 },
0067 app));
0068
0069 const double x_when_landau_min = -0.22278;
0070 const double landau_min = TMath::Landau(x_when_landau_min, 0, 1, true);
0071 const double sigma_analog = 0.293951 * edm4eic::unit::ns;
0072 const double Vm = 3e-4 * dd4hep::GeV;
0073 const double adc_range = 256;
0074
0075 const double gain = -adc_range / Vm / landau_min * sigma_analog;
0076 const int offset = 3;
0077 app->Add(new JOmniFactoryGeneratorT<PulseGeneration_factory<edm4hep::SimTrackerHit>>(
0078 "TOFEndcapSmoothPulses", {"TOFEndcapSharedHits"}, {"TOFEndcapSmoothPulses"},
0079 {
0080 .pulse_shape_function = "LandauPulse",
0081 .pulse_shape_params = {gain, sigma_analog, offset},
0082 .ignore_thres = 0.05 * adc_range,
0083 .timestep = 0.01 * edm4eic::unit::ns,
0084 },
0085 app));
0086
0087 app->Add(new JOmniFactoryGeneratorT<PulseCombiner_factory>(
0088 "TOFEndcapCombinedPulses", {"TOFEndcapSmoothPulses"}, {"TOFEndcapCombinedPulses"},
0089 {
0090 .minimum_separation = 25 * edm4eic::unit::ns,
0091 },
0092 app));
0093
0094 double risetime = 0.45 * edm4eic::unit::ns;
0095 app->Add(new JOmniFactoryGeneratorT<SiliconPulseDiscretization_factory>(
0096 "TOFEndcapPulses", {"TOFEndcapCombinedPulses"}, {"TOFEndcapPulses"},
0097 {
0098 .EICROC_period = 25 * edm4eic::unit::ns,
0099 .local_period = 25 * edm4eic::unit::ns / 1024,
0100 .global_offset = -offset * sigma_analog + risetime,
0101 },
0102 app));
0103
0104 app->Add(new JOmniFactoryGeneratorT<EICROCDigitization_factory>(
0105 "TOFEndcapADCTDC", {"TOFEndcapPulses"}, {"TOFEndcapADCTDC"}, {}, app));
0106 }
0107 }