Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-25 07:38:24

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2022 - 2025, Dmitry Romanov,  Wouter Deconinck, Kolja Kauder, Barak Schmookler, Honey Khindri, Dmitry Kalinkin
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   // Digitization
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   // Convert raw digitized hits into hits with geometry info (ready for tracking)
0049   app->Add(new JOmniFactoryGeneratorT<TrackerHitReconstruction_factory>(
0050       "TOFEndcapRecHits", {"TOFEndcapRawHits"}, // Input data collection tags
0051       {"TOFEndcapRecHits"},                     // Output data tag
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 } // extern "C"