File indexing completed on 2025-12-16 09:28:06
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/TrackerHitReconstruction_factory.h"
0026
0027 extern "C" {
0028 void InitPlugin(JApplication* app) {
0029 InitJANAPlugin(app);
0030
0031 using namespace eicrecon;
0032
0033
0034 app->Add(new JOmniFactoryGeneratorT<SiliconTrackerDigi_factory>(
0035 "TOFEndcapRawHits", {"EventHeader", "TOFEndcapHits"},
0036 {"TOFEndcapRawHits", "TOFEndcapRawHitAssociations"},
0037 {
0038 .threshold = 6.0 * dd4hep::keV,
0039 .timeResolution = 0.025,
0040 },
0041 app));
0042
0043
0044 app->Add(new JOmniFactoryGeneratorT<TrackerHitReconstruction_factory>(
0045 "TOFEndcapRecHits", {"TOFEndcapRawHits"},
0046 {"TOFEndcapRecHits"},
0047 {
0048 .timeResolution = 0.025,
0049 },
0050 app));
0051
0052 app->Add(new JOmniFactoryGeneratorT<SiliconChargeSharing_factory>(
0053 "TOFEndcapSharedHits", {"TOFEndcapHits"}, {"TOFEndcapSharedHits"},
0054 {
0055
0056 .sigma_mode = SiliconChargeSharingConfig::ESigmaMode::rel,
0057 .sigma_sharingx = 1,
0058 .sigma_sharingy = 1,
0059 .min_edep = 0.001 * dd4hep::keV,
0060 .readout = "TOFEndcapHits",
0061 },
0062 app));
0063
0064 const double x_when_landau_min = -0.22278;
0065 const double landau_min = TMath::Landau(x_when_landau_min, 0, 1, true);
0066 const double sigma_analog = 0.293951 * edm4eic::unit::ns;
0067 const double Vm = 3e-4 * dd4hep::GeV;
0068 const double adc_range = 256;
0069
0070 const double gain = -adc_range / Vm / landau_min * sigma_analog;
0071 const int offset = 3;
0072 app->Add(new JOmniFactoryGeneratorT<PulseGeneration_factory<edm4hep::SimTrackerHit>>(
0073 "TOFEndcapSmoothPulses", {"TOFEndcapSharedHits"}, {"TOFEndcapSmoothPulses"},
0074 {
0075 .pulse_shape_function = "LandauPulse",
0076 .pulse_shape_params = {gain, sigma_analog, offset},
0077 .ignore_thres = 0.05 * adc_range,
0078 .timestep = 0.01 * edm4eic::unit::ns,
0079 },
0080 app));
0081
0082 app->Add(new JOmniFactoryGeneratorT<PulseCombiner_factory>(
0083 "TOFEndcapCombinedPulses", {"TOFEndcapSmoothPulses"}, {"TOFEndcapCombinedPulses"},
0084 {
0085 .minimum_separation = 25 * edm4eic::unit::ns,
0086 },
0087 app));
0088
0089 double risetime = 0.45 * edm4eic::unit::ns;
0090 app->Add(new JOmniFactoryGeneratorT<SiliconPulseDiscretization_factory>(
0091 "TOFEndcapPulses", {"TOFEndcapCombinedPulses"}, {"TOFEndcapPulses"},
0092 {
0093 .EICROC_period = 25 * edm4eic::unit::ns,
0094 .local_period = 25 * edm4eic::unit::ns / 1024,
0095 .global_offset = -offset * sigma_analog + risetime,
0096 },
0097 app));
0098
0099 app->Add(new JOmniFactoryGeneratorT<EICROCDigitization_factory>(
0100 "TOFEndcapADCTDC", {"TOFEndcapPulses"}, {"TOFEndcapADCTDC"}, {}, app));
0101 }
0102 }