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