diff --git a/Analyses/src/CaloHitFinderInspect_module.cc b/Analyses/src/CaloHitFinderInspect_module.cc index 97b03ddade..d498e72d50 100644 --- a/Analyses/src/CaloHitFinderInspect_module.cc +++ b/Analyses/src/CaloHitFinderInspect_module.cc @@ -16,6 +16,7 @@ #include "messagefacility/MessageLogger/MessageLogger.h" #include "Offline/CalorimeterGeom/inc/Calorimeter.hh" +#include "Offline/DataProducts/inc/CaloConst.hh" #include "Offline/GeometryService/inc/GeomHandle.hh" #include "Offline/GeometryService/inc/GeometryService.hh" #include "Offline/GlobalConstantsService/inc/GlobalConstantsHandle.hh" @@ -51,7 +52,6 @@ namespace mu2e { std::string _caloDigiModuleLabel; std::string _caloShowerSimModuleLabel; - double _digiSampling; int _minDigiHitLength; TH1F* _firstAmpOk; @@ -82,7 +82,6 @@ namespace mu2e { art::EDAnalyzer(pset), _caloDigiModuleLabel (pset.get ("caloDigiModuleLabel")), _caloShowerSimModuleLabel(pset.get ("caloShowerSimModuleLabel")), - _digiSampling (pset.get ("digiSampling")), _minDigiHitLength (pset.get ("minDigiHitLength")) {} @@ -182,7 +181,7 @@ namespace mu2e { y.clear(); for (int i=0;i calo_adc_sample_period{ - fhicl::Name("CaloADCSamplePeriod"), - fhicl::Comment("Sample spacing of calorimeter waveforms") - }; }; using Parameters = art::EDProducer::Table; @@ -81,7 +77,6 @@ namespace mu2e{ art::InputTag _calo_digi_tag; art::InputTag _kalseed_tag; SurfaceIdCollection _surface_ids; - double _calo_adc_sample_period; ProditionsHandle _tracker_conditions_handle; art::RandomNumberGenerator::base_engine_t& _engine; BinnedSpectrum _target_distribution; @@ -97,7 +92,6 @@ namespace mu2e{ _tracker_digi_tag(config().tracker_digi_tag()), _calo_digi_tag(config().calo_digi_tag()), _kalseed_tag(config().kalseed_tag()), - _calo_adc_sample_period(config().calo_adc_sample_period()), _engine{createEngine(art::ServiceHandle()->getSeed())}{ // initialize target distribution const auto pset = config().target_distribution.get(); @@ -206,7 +200,7 @@ namespace mu2e{ event.put(std::move(adcss)); // apply the shift to calorimeter digis - double sample_period = _calo_adc_sample_period; + double sample_period = CaloConst::_digitizationPeriod; auto cdigis = std::make_unique(); if (0 < cdigi_handle->size()){ for (const auto& old: *cdigi_handle){ diff --git a/CaloCluster/src/CaloTrigger_module.cc b/CaloCluster/src/CaloTrigger_module.cc index b6ab603eb9..f2af6d1a6e 100644 --- a/CaloCluster/src/CaloTrigger_module.cc +++ b/CaloCluster/src/CaloTrigger_module.cc @@ -9,6 +9,7 @@ #include "Offline/GlobalConstantsService/inc/PhysicsParams.hh" #include "Offline/RecoDataProducts/inc/CaloDigi.hh" #include "Offline/RecoDataProducts/inc/CaloTrigSeed.hh" +#include "Offline/DataProducts/inc/CaloConst.hh" #include #include @@ -39,7 +40,6 @@ namespace mu2e { explicit CaloTrigger(fhicl::ParameterSet const& pset) : art::EDProducer{pset}, caloDigiModuleLabel_(pset.get("caloDigiModuleLabel")), - digiSampling_( pset.get("digiSampling")), windowPeak_( pset.get("windowPeak")), minAmp_( pset.get("minAmplitude")), minSeedAmp_( pset.get("minSeedAmplitude")), @@ -66,7 +66,6 @@ namespace mu2e { private: std::string caloDigiModuleLabel_; - double digiSampling_; unsigned windowPeak_; double minAmp_; double minSeedAmp_; @@ -136,8 +135,8 @@ namespace mu2e { const Calorimeter* cal = ch.get(); int nro = cal->G4Info().get("nSiPMPerCrystal"); - unsigned offsetT0_ = unsigned(blindTime_/digiSampling_); - unsigned nBinTime = unsigned (mbtime_ - blindTime_ + endTimeBuffer_) / digiSampling_; + unsigned offsetT0_ = unsigned(blindTime_/CaloConst::_digitizationPeriod); + unsigned nBinTime = unsigned (mbtime_ - blindTime_ + endTimeBuffer_) / CaloConst::_digitizationPeriod; unsigned winOffsetT0_ = windowPeak_+offsetT0_ ; if (hitList_.size() < nBinTime ) hitList_ = std::vector>(nBinTime,std::list()); @@ -262,10 +261,10 @@ namespace mu2e { if (eDep > minEnergy_){ xc /= cluEnergy; yc /= cluEnergy; - float clutime = (seed->index_+offsetT0_)*digiSampling_-timeCorrection_; + float clutime = (seed->index_+offsetT0_)*CaloConst::_digitizationPeriod-timeCorrection_; // calorimeter trigger variables - float tpeak = (seed->index_+offsetT0_)*digiSampling_-timeCorrection_; + float tpeak = (seed->index_+offsetT0_)*CaloConst::_digitizationPeriod-timeCorrection_; // int iSection = cal->crystal(seed->crId_).diskID(); CaloTrigSeed trigseed(idpeak,epeak,tpeak,rpeak,ring1emax,ring1emax2,ring2emax,eDep,clutime,xc,yc); diff --git a/CaloMC/src/CaloDigiMaker_module.cc b/CaloMC/src/CaloDigiMaker_module.cc index fb53362114..d62bf3d050 100644 --- a/CaloMC/src/CaloDigiMaker_module.cc +++ b/CaloMC/src/CaloDigiMaker_module.cc @@ -13,6 +13,7 @@ #include "Offline/CalorimeterGeom/inc/Calorimeter.hh" #include "Offline/CaloConditions/inc/CalSimParams.hh" +#include "Offline/DataProducts/inc/CaloConst.hh" #include "Offline/DataProducts/inc/CaloSiPMId.hh" #include "Offline/DataProducts/inc/EventWindowMarker.hh" #include "Offline/DAQConditions/inc/EventTiming.hh" @@ -71,9 +72,8 @@ namespace mu2e { pbtmcTag_ (config().pbtmcTag()), digitizationStart_ (config().digitizationStart()), digitizationEnd_ (config().digitizationEnd()), - digiSampling_ (config().pulseCache().digiSampling()), bufferDigi_ (config().bufferDigi()), - startTimeBuffer_ (config().pulseCache().digiSampling()*config().bufferDigi()), + startTimeBuffer_ (CaloConst::_digitizationPeriod*config().bufferDigi()), maxADCCounts_ ((1 << config().nBits()) -1), pulseCache_ (CaloPulseUtil(config().pulseCache())), nBinsPeak_ (config().nBinsPeak()), @@ -116,7 +116,6 @@ namespace mu2e { float digitizationStart_; float digitizationEnd_; float timeFromProtonsToDRMarker_; - float digiSampling_; unsigned bufferDigi_; float startTimeBuffer_; int maxADCCounts_; @@ -181,9 +180,9 @@ namespace mu2e { calorimeter_ = ch.get(); if (calorimeter_->nCrystals()<1 || calorimeter_->G4Info().get("nSiPMPerCrystal")<1) return; - int waveformSize = (digitizationEnd_ - digitizationStart_ + startTimeBuffer_) / digiSampling_; + int waveformSize = (digitizationEnd_ - digitizationStart_ + startTimeBuffer_) / CaloConst::_digitizationPeriod; if (ewMarker.spillType() != EventWindowMarker::SpillType::onspill) { - waveformSize = (ewMarker.eventLength() - digitizationStart_ + startTimeBuffer_) / digiSampling_; + waveformSize = (ewMarker.eventLength() - digitizationStart_ + startTimeBuffer_) / CaloConst::_digitizationPeriod; } int nWaveforms = calorimeter_->nCrystals()*calorimeter_->G4Info().get("nSiPMPerCrystal"); @@ -267,7 +266,7 @@ namespace mu2e { for (const auto PEtime : CaloShowerRO.PETime()) { //PE time is given in DR frame, we need to subtract the event window start and the digi Start time float time = PEtime + pbtmc.pbtime_- digitizationStart_ + timeFromProtonsToDRMarker_ + startTimeBuffer_; - unsigned startSample = std::max(0u,unsigned(time/digiSampling_)); + unsigned startSample = std::max(0u,unsigned(time/CaloConst::_digitizationPeriod)); const auto& pulse = pulseCache_.digitizedPulse(time); unsigned stopSample = std::min(startSample+pulse.size(), waveform.size()); @@ -299,7 +298,7 @@ namespace mu2e { size_t sampleStart = hitStarts[ihit]; size_t sampleStop = hitStops[ihit]; // t0 in digitizer clock ticks, in the digitizer (DR marker) frame, as the DIRAC hit packet reports it - int t0 = int(sampleStart) + std::lround((digitizationStart_ - timeFromProtonsToDRMarker_ - startTimeBuffer_)/digiSampling_); + int t0 = int(sampleStart) + std::lround((digitizationStart_ - timeFromProtonsToDRMarker_ - startTimeBuffer_)/CaloConst::_digitizationPeriod); std::vector wfsample{}; wfsample.reserve(sampleStop-sampleStart); @@ -308,7 +307,7 @@ namespace mu2e { // only consider hits above digitizationStart size_t peakPosition(0u); for (auto i = 0u; i= digitizationStart_ && wfsample[i]>=wfsample[peakPosition]) peakPosition=i; + if ((t0+int(i))*CaloConst::_digitizationPeriod+timeFromProtonsToDRMarker_ >= digitizationStart_ && wfsample[i]>=wfsample[peakPosition]) peakPosition=i; } if (diagLevel_ >2) std::cout<<"[CaloDigiMaker] Start=" << sampleStart << " Stop=" << sampleStop << " peak in position " << peakPosition << std::endl; diff --git a/CaloMC/src/CaloHitTruthMatch_module.cc b/CaloMC/src/CaloHitTruthMatch_module.cc index 6ef25274e6..b32b87c255 100644 --- a/CaloMC/src/CaloHitTruthMatch_module.cc +++ b/CaloMC/src/CaloHitTruthMatch_module.cc @@ -5,6 +5,7 @@ #include "art/Framework/Principal/Event.h" #include "fhiclcpp/types/Atom.h" +#include "Offline/DataProducts/inc/CaloConst.hh" #include "Offline/MCDataProducts/inc/CaloEDepMC.hh" #include "Offline/MCDataProducts/inc/CaloHitMC.hh" #include "Offline/MCDataProducts/inc/CaloShowerSim.hh" @@ -52,7 +53,6 @@ namespace mu2e { caloHitToken_ {consumes(config().caloHitCollection())}, ppToken_ {consumes(config().primaryParticle())}, pulseCache_ (config().pulseCache()), - digiSampling_ (config().pulseCache().digiSampling()), deltaTimeMinus_ (config().deltaTimeMinus()), minAmplitude_ (config().minAmplitude()), fillDetailedMC_ (config().fillDetailedMC()), @@ -77,7 +77,6 @@ namespace mu2e { const art::ProductToken caloHitToken_; const art::ProductToken ppToken_; CaloPulseUtil::Config pulseCache_; - double digiSampling_; double deltaTimeMinus_; double minAmplitude_; bool fillDetailedMC_; @@ -177,13 +176,13 @@ namespace mu2e { // Maximum time difference for an MC hit to be associated, given the reco hit amplitude and the next reco hit time std::size_t nbin(wfBinMax_); while (nbin < wf_.size()) {if (wf_[nbin]*hit.energyDep() < minAmplitude_) break; ++nbin;} - double deltaTimePlus(nbin*digiSampling_); + double deltaTimePlus(nbin*CaloConst::_digitizationPeriod); - if (hitNextIt != sortedHits.end() && (*hitNextIt)->time() - hit.time() - 2*digiSampling_ < deltaTimePlus) - deltaTimePlus = (*hitNextIt)->time() - hit.time() - 2*digiSampling_; + if (hitNextIt != sortedHits.end() && (*hitNextIt)->time() - hit.time() - 2*CaloConst::_digitizationPeriod < deltaTimePlus) + deltaTimePlus = (*hitNextIt)->time() - hit.time() - 2*CaloConst::_digitizationPeriod; if (diagLevel_ > 2) std::cout<<"[CaloHitTruthMatch] inspect hit id/time/energy/length "< caloDigiCollection { Name("caloDigiCollection"), Comment("CaloDigi collection name") }; fhicl::Atom pbttoken { Name("ProtonBunchTimeTag"), Comment("ProtonBunchTime producer")}; - fhicl::Atom digiSampling { Name("digiSampling"), Comment("Digitization time sampling") }; fhicl::Atom deltaTPulses { Name("deltaTPulses"), Comment("Maximum time difference between two signals") }; fhicl::Atom nPEperMeV { Name("nPEperMeV"), Comment("number of photo-electrons per MeV") }; fhicl::Atom noiseLevelMeV { Name("noiseLevelMeV"), Comment("Noise level in MeV") }; @@ -57,7 +56,6 @@ namespace mu2e { EDProducer{config}, caloDigisToken_ {consumes(config().caloDigiCollection())}, pbttoken_ {consumes(config().pbttoken())}, - digiSampling_ (config().digiSampling()), deltaTPulses_ (config().deltaTPulses()), nPEperMeV_ (config().nPEperMeV()), noise2_ (config().noiseLevelMeV()*config().noiseLevelMeV()), @@ -83,7 +81,6 @@ namespace mu2e { art::ProductToken caloDigisToken_; const art::ProductToken pbttoken_; - float digiSampling_; float deltaTPulses_; float nPEperMeV_; float noise2_; @@ -147,8 +144,8 @@ namespace mu2e { baseline /= nSamPed; double eDep = (caloDigi.waveform().at(caloDigi.peakpos())-baseline)*ADCToMeV_;//FIXME! we should use the function ::Peak2MeV, I also think that we should: (i) discard the hit if eDep is <0 (noise/stange pulse), (ii) require a minimum pulse length. gianipez - double time = (caloDigi.t0() + caloDigi.peakpos())*digiSampling_ - pbtOffset; //Giani's definition; t0 in ticks - //double time = (caloDigi.t0() + caloDigi.peakpos()+0.5)*digiSampling_ - pbtOffset; //Bertrand's definition + double time = (caloDigi.t0() + caloDigi.peakpos())*CaloConst::_digitizationPeriod - pbtOffset; //Giani's definition; t0 in ticks + //double time = (caloDigi.t0() + caloDigi.peakpos()+0.5)*CaloConst::_digitizationPeriod - pbtOffset; //Bertrand's definition addPulse(pulseMap, crystalID, time, eDep); if (diagLevel_ > 2) std::cout<<"[CaloHitMakerFast] extracted Digi with crystalID="< pbtTag { Name("ProtonBunchTimeTag"), Comment("ProtonBunchTime producer") }; fhicl::Atom usePBT { Name("UseProtonBunchTime"), Comment("Use the proton bunch time for T0") }; fhicl::Atom processorStrategy { Name("processorStrategy"), Comment("Digi reco processor name") }; - fhicl::Atom digiSampling { Name("digiSampling"), Comment("Calo ADC sampling time (ns)") }; fhicl::Atom maxChi2Cut { Name("maxChi2Cut"), Comment("Chi2 cut for keeping reco digi") }; fhicl::Atom maxPlots { Name("maxPlots"), Comment("Maximum number of waveform plots") }; fhicl::Atom diagLevel { Name("diagLevel"), Comment("Diagnosis level") }; @@ -49,7 +49,6 @@ class CaloRecoDigiMaker : public art::EDProducer { pbtTag_ (config().pbtTag()), usePBT_ (config().usePBT()), processorStrategy_ (config().processorStrategy()), - digiSampling_ (config().digiSampling()), maxChi2Cut_ (config().maxChi2Cut()), maxPlots_ (config().maxPlots()), diagLevel_ (config().diagLevel()) { @@ -90,7 +89,6 @@ class CaloRecoDigiMaker : public art::EDProducer { bool usePBT_; art::ProductToken pbttoken_; const std::string processorStrategy_; - double digiSampling_; double maxChi2Cut_; int maxPlots_; int diagLevel_; @@ -142,7 +140,7 @@ void CaloRecoDigiMaker::extractRecoDigi(const art::ValidHandle x{}, y{}; for (const auto& caloDigi : caloDigis) { int SiPMID = caloDigi.SiPMID(); - double t0 = caloDigi.t0() * digiSampling_; // CaloDigi t0 is in digitizer clock ticks + double t0 = caloDigi.t0() * CaloConst::_digitizationPeriod; // CaloDigi t0 is in digitizer clock ticks double adc2MeV = calCalib.ADC2MeV(SiPMID); const std::vector& waveform = caloDigi.waveform(); @@ -153,7 +151,7 @@ void CaloRecoDigiMaker::extractRecoDigi(const art::ValidHandle #include "Offline/CaloConditions/inc/CalDAQMap.hh" -#include "Offline/ProditionsService/inc/ProditionsHandle.hh" -#include "Offline/RecoDataProducts/inc/IntensityInfoCalo.hh" - #include "Offline/DAQ/inc/CaloDAQUtilities.hh" -#include "Offline/RecoDataProducts/inc/CaloHit.hh" #include "Offline/DataProducts/inc/CaloConst.hh" +#include "Offline/ProditionsService/inc/ProditionsHandle.hh" +#include "Offline/RecoDataProducts/inc/CaloHit.hh" +#include "Offline/RecoDataProducts/inc/IntensityInfoCalo.hh" #include - #include - #include #include #include @@ -55,8 +52,6 @@ class art::CaloHitsFromDataDTCEvents : public EDProducer { fhicl::Atom data_type{fhicl::Name("dataType"), fhicl::Comment("Data type (0:standard, 1:debug, 2:counters)"), 0}; fhicl::Atom diagLevel{fhicl::Name("diagLevel"), fhicl::Comment("diagnostic level")}; - fhicl::Atom digiSampling{fhicl::Name("digiSampling"), - fhicl::Comment("calorimeter sampling period in ns")}; fhicl::Atom deltaTPulses{ fhicl::Name("deltaTPulses"), fhicl::Comment( @@ -105,7 +100,6 @@ class art::CaloHitsFromDataDTCEvents : public EDProducer { int diagLevel_; art::InputTag caloFragmentsTag_; - float digiSampling_; float deltaTPulses_, hitEDepMax_, hitEDepMin_, caphriEDepMax_, caphriEDepMin_, nPEperMeV_, noise2_, nSigmaNoise_; @@ -183,7 +177,7 @@ void art::CaloHitsFromDataDTCEvents::addPulse( art::CaloHitsFromDataDTCEvents::CaloHitsFromDataDTCEvents( const art::EDProducer::Table& config) : art::EDProducer{config}, data_type_(config().data_type()), - diagLevel_(config().diagLevel()), digiSampling_(config().digiSampling()), + diagLevel_(config().diagLevel()), deltaTPulses_(config().deltaTPulses()), hitEDepMax_(config().hitEDepMax()), hitEDepMin_(config().hitEDepMin()), caphriEDepMax_(config().caphriEDepMax()), caphriEDepMin_(config().caphriEDepMin()), nPEperMeV_(config().nPEperMeV()), @@ -332,7 +326,7 @@ void art::CaloHitsFromDataDTCEvents::analyze_calorimeter_( uint16_t crystalID = offlineId.crystal().id(); size_t peakIndex = thisHitPacket.IndexOfMaxDigitizerSample; float eDep = thisHitPeak * peakADC2MeV_[SiPMID]; - float time = (thisHitPacket.Time + peakIndex) * digiSampling_ + timeCalib_[SiPMID]; // packet Time is in clock ticks + float time = (thisHitPacket.Time + peakIndex) * mu2e::CaloConst::_digitizationPeriod + timeCalib_[SiPMID]; // packet Time is in clock ticks bool isCaphri = offlineId.crystal().isCaphri(); if(!isCaphri) ++nhits[offlineId.crystal().disk()]; @@ -407,7 +401,7 @@ void art::CaloHitsFromDataDTCEvents::analyze_calorimeter_( uint16_t crystalID = offlineId.crystal().id(); size_t peakIndex = thisHitPacket.IndexOfMaxDigitizerSample; float eDep = thisHitPeak * peakADC2MeV_[SiPMID]; - float time = (thisHitPacket.Time + peakIndex) * digiSampling_ + timeCalib_[SiPMID]; // packet Time is in clock ticks + float time = (thisHitPacket.Time + peakIndex) * mu2e::CaloConst::_digitizationPeriod + timeCalib_[SiPMID]; // packet Time is in clock ticks bool isCaphri = offlineId.crystal().isCaphri(); if(!isCaphri) ++nhits[offlineId.crystal().disk()]; diff --git a/Mu2eUtilities/inc/CaloNoiseUtil.hh b/Mu2eUtilities/inc/CaloNoiseUtil.hh index 7c2c683d46..2ab5ed3a38 100644 --- a/Mu2eUtilities/inc/CaloNoiseUtil.hh +++ b/Mu2eUtilities/inc/CaloNoiseUtil.hh @@ -37,7 +37,6 @@ namespace mu2e { fhicl::Atom elecNphotPerNs { Name("elecNphotPerNs"), Comment("Electronics noise number of PE / ns ") }; fhicl::Atom rinNphotPerNs { Name("rinNphotPerNs"), Comment("RIN noise number of PE / ns ") }; fhicl::Atom darkNphotPerNs { Name("darkNphotPerNs"), Comment("SiPM Dark noise number of PE / ns ") }; - fhicl::Atom digiSampling { Name("digiSampling"), Comment("Digitization time sampling") }; }; @@ -57,7 +56,6 @@ namespace mu2e { bool generate_; std::string fileName_; std::string prefix_; - double digiSampling_; double noiseRinDark_; double noiseElec_; CLHEP::RandPoissonQ randPoisson_; diff --git a/Mu2eUtilities/inc/CaloPulseUtil.hh b/Mu2eUtilities/inc/CaloPulseUtil.hh index c38eae9ec5..22792af9ec 100644 --- a/Mu2eUtilities/inc/CaloPulseUtil.hh +++ b/Mu2eUtilities/inc/CaloPulseUtil.hh @@ -33,11 +33,10 @@ namespace mu2e { using Comment = fhicl::Comment; fhicl::Atom fileName { Name("fileName"), Comment("Pulse file name") }; fhicl::Atom histName { Name("histName"), Comment("Pulse histogram name") }; - fhicl::Atom digiSampling { Name("digiSampling"), Comment("Digitizer sampling time (ns) ") }; }; CaloPulseUtil(const Config& config); - CaloPulseUtil(const std::string& fileName, const std::string& histName, double digiSampling); + CaloPulseUtil(const std::string& fileName, const std::string& histName); ~CaloPulseUtil() = default; void buildCache(); diff --git a/Mu2eUtilities/src/CaloNoiseUtil.cc b/Mu2eUtilities/src/CaloNoiseUtil.cc index c1db056e71..e150497c0f 100644 --- a/Mu2eUtilities/src/CaloNoiseUtil.cc +++ b/Mu2eUtilities/src/CaloNoiseUtil.cc @@ -1,5 +1,6 @@ #include "cetlib_except/exception.h" #include "art/Framework/Services/Optional/RandomNumberGenerator.h" +#include "Offline/DataProducts/inc/CaloConst.hh" #include "Offline/SeedService/inc/SeedService.hh" #include "Offline/Mu2eUtilities/inc/CaloNoiseUtil.hh" #include "Offline/ConfigTools/inc/ConfigFileLookupPolicy.hh" @@ -24,7 +25,6 @@ namespace mu2e { generate_ {config.generate()}, fileName_ {config.histoFileName()}, prefix_ {config.histoPrefix()}, - digiSampling_ {config.digiSampling()}, noiseRinDark_ {config.rinNphotPerNs() + config.darkNphotPerNs()}, noiseElec_ {config.elecNphotPerNs()}, randPoisson_ {engine}, @@ -121,7 +121,7 @@ namespace mu2e { const auto& pulse = pulseCache_.digitizedPulse(0.0); const unsigned pulseSize = pulse.size(); const unsigned bufferSize = int(0.75*pulseSize); - const double totalTime = (noiseSize+bufferSize)*digiSampling_; + const double totalTime = (noiseSize+bufferSize)*CaloConst::_digitizationPeriod; const int noiseLevelPE = int(totalTime*noiseRinDark_); //Generate the radiation induced noise (RIN) @@ -129,7 +129,7 @@ namespace mu2e { for (int i=0;i