File indexing completed on 2025-11-04 09:26:48
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 }