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