Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Blinding/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ cet_build_plugin(MergeDigis art::module
LIBRARIES REG
Offline::Blinding
Offline::TrackerMC
Offline::CaloMC
)

cet_build_plugin(TrackDigiExtractor art::module
Expand Down
54 changes: 44 additions & 10 deletions Blinding/src/MergeDigis_module.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
#include "Offline/TrackerConditions/inc/StrawElectronics.hh"
#include "Offline/TrackerMC/inc/StrawDigiBundle.hh"
#include "Offline/TrackerMC/inc/StrawDigiBundleCollection.hh"
#include "Offline/RecoDataProducts/inc/CaloDigi.hh"
#include "Offline/CaloMC/inc/CaloDigiWrapperCollection.hh"
#include "Offline/CRVConditions/inc/CRVCalib.hh"
#include "Offline/CRVConditions/inc/CRVADCRange.hh"
#include "Offline/CRVResponse/inc/CrvMCHelper.hh"
Expand All @@ -40,6 +42,14 @@ namespace mu2e{
fhicl::Name("MergeStrawDigiMCs"),
fhicl::Comment("True/false to merge tracker MC truth")
};
fhicl::Sequence<art::InputTag> calo_digi_tags{
fhicl::Name("CaloDigiCollections"),
fhicl::Comment("art::InputTags of source CaloDigis")
};
fhicl::Atom<unsigned int> calo_adc_bits{
fhicl::Name("CalorimeterADCBitDepth"),
fhicl::Comment("Bit depth of calorimeter adc readings (temporary)")
};
fhicl::Sequence<art::InputTag> crv_digi_tags{
fhicl::Name("CrvDigiCollections"),
fhicl::Comment("art::InputTags of source CrvDigi")
Expand All @@ -58,6 +68,11 @@ namespace mu2e{
std::vector<art::InputTag> _tracker_digi_tags;
bool _tracker_mc;
ProditionsHandle<StrawElectronics> _tracker_conditions_handle;

// calorimeter
std::vector<art::InputTag> _calo_digi_tags;
CaloDigiWrapper::sample_t _calo_max_adc;

// crv
std::vector<art::InputTag> _crv_digi_tags;
std::vector<art::InputTag> _crv_digimc_tags;
Expand All @@ -73,9 +88,10 @@ namespace mu2e{
art::EDProducer(config),
_tracker_digi_tags(config().tracker_digi_tags()),
_tracker_mc(config().tracker_mc()),
_calo_digi_tags(config().calo_digi_tags()),
_calo_max_adc((1 << config().calo_adc_bits()) - 1),
_crv_digi_tags(config().crv_digi_tags()),
_crv_digimc_tags(config().crv_digimc_tags()){

// tracker
for (const auto& tag: _tracker_digi_tags){
this->consumes<StrawDigiCollection>(tag);
Expand All @@ -84,21 +100,28 @@ namespace mu2e{
this->produces<StrawDigiCollection>();
this->produces<StrawDigiADCWaveformCollection>();

// calorimeter...
for (const auto& tag: _calo_digi_tags){
this->consumes<CaloDigiCollection>(tag);
}
this->produces<CaloDigiCollection>();

// crv...
for (const auto& tag: _crv_digi_tags) this->consumes<CrvDigiCollection>(tag);
for (const auto& tag: _crv_digimc_tags) this->consumes<CrvDigiMCCollection>(tag);
this->produces<CrvDigiCollection>();


// mc truth
if (_tracker_mc){
for (const auto& tag: _tracker_digi_tags){
this->consumes<StrawDigiMCCollection>(tag);
}
this->produces<StrawDigiMCCollection>();
}

// calorimeter...

// crv...
for (const auto& tag: _crv_digi_tags) this->consumes<CrvDigiCollection>(tag);
for (const auto& tag: _crv_digimc_tags) this->consumes<CrvDigiMCCollection>(tag);
this->produces<CrvDigiCollection>();
if(!_crv_digimc_tags.empty()) this->produces<CrvDigiMCCollection>();
if(!_crv_digimc_tags.empty()){
this->produces<CrvDigiMCCollection>();
}
}

void MergeDigis::produce(art::Event& event){
Expand Down Expand Up @@ -129,7 +152,18 @@ namespace mu2e{
event.put(std::move(dgmc));
}

// calorimeter...
// calorimeter: two easy steps:
// i) read all digis into a CaloDigiWrapperCollection
// ii) defer collision resolution to that collection
CaloDigiWrapperCollection wrappers;
for (const auto& tag: _calo_digi_tags){
auto handle = event.getValidHandle<CaloDigiCollection>(tag);
wrappers.Append(*handle);
}
CaloDigiWrapperCollection calo_resolved;
wrappers.ResolveCollisions(_calo_max_adc, calo_resolved);
auto calo_digis = calo_resolved.GetDigis();
event.put(std::move(calo_digis));

// crv...
mergeCrvDigis(event);
Expand Down
2 changes: 2 additions & 0 deletions Blinding/src/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ helper.make_plugins([
'mu2e_SeedService',
'mu2e_TrackerConditions',
'mu2e_TrackerMC',
'mu2e_CaloMC',
])

helper.make_dict_and_map([
Expand All @@ -54,4 +55,5 @@ helper.make_dict_and_map([
'mu2e_SeedService',
'mu2e_TrackerConditions',
'mu2e_TrackerMC',
'mu2e_CaloMC',
])
2 changes: 2 additions & 0 deletions CaloMC/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ cet_make_library(
src/CaloPhotonPropagation.cc
src/CaloWFExtractor.cc
src/ShowerStepUtil.cc
src/CaloDigiWrapper.cc
src/CaloDigiWrapperCollection.cc
LIBRARIES PUBLIC

Offline::CalorimeterGeom
Expand Down
31 changes: 31 additions & 0 deletions CaloMC/inc/CaloDigiWrapper.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Ed Callaghan
// Simple wrapper around calorimeter digis to interface into a partitioning scheme
// September 2025

#ifndef CaloMC_CaloDigiWrapper_hh
#define CaloMC_CaloDigiWrapper_hh

// mu2e
#include "Offline/RecoDataProducts/inc/CaloDigi.hh"

namespace mu2e{
class CaloDigiWrapper{
public:
using SiPMID_t = int;
using sample_t = int;
using pos_t = size_t;
CaloDigiWrapper(const CaloDigi&);
const CaloDigi& Digi() const;

// interface for sorting into buckets of overlapping digitization windows
const double time() const;

protected:
const CaloDigi _digi;

private:
/**/
};
} // namespace mu2e

#endif
62 changes: 62 additions & 0 deletions CaloMC/inc/CaloDigiWrapperCollection.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Ed Callaghan
// Container for CaloDigiWrappers, with functionality to resolve overlapping digitization windows
// September 2025

#ifndef CaloMC_CaloDigiWrapperCollection_hh
#define CaloMC_CaloDigiWrapperCollection_hh

// stl
#include <algorithm>
#include <map>
#include <memory>
#include <vector>

// mu2e
#include "Offline/CaloMC/inc/CaloDigiWrapper.hh"
#include "Offline/TrackerMC/inc/TimeBasedBucket.hh"

namespace mu2e{
using CDWC_iterator = std::vector<CaloDigiWrapper>::iterator;
using CDWC_const_iterator = std::vector<CaloDigiWrapper>::const_iterator;

class CaloDigiWrapperCollection{
public:
using SiPMID_t = CaloDigiWrapper::SiPMID_t;
using sample_t = CaloDigiWrapper::sample_t;
using pos_t = CaloDigiWrapper::pos_t;
// forwarded calls to underlying container
size_t size() const;
CDWC_iterator begin();
CDWC_const_iterator begin() const;
CDWC_iterator end();
CDWC_const_iterator end() const;
CaloDigiWrapper& operator[](size_t);
const CaloDigiWrapper& operator[](size_t) const;
CaloDigiWrapper& front();
const CaloDigiWrapper& front() const;
CaloDigiWrapper& back();
const CaloDigiWrapper& back() const;

// insertion
void Append(const CaloDigiCollection&);
void Append(const CaloDigiWrapper&);

// accessor
std::unique_ptr<CaloDigiCollection> GetDigis() const;

// identify sets of digis with overlapping digitization windows, and
// reduce each such set to a single digi, representing their "sum"
void ResolveCollisions(sample_t, CaloDigiWrapperCollection&);

protected:
std::vector<CaloDigiWrapper> _wrappers;
void ResolveCollision(sample_t,
CaloDigiWrapperCollection&,
CaloDigiWrapperCollection&);

private:
/**/
};
} // namespace mu2e

#endif
2 changes: 1 addition & 1 deletion CaloMC/src/CaloDigiMaker_module.cc
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ namespace mu2e {
digiSampling_ (config().digiSampling()),
bufferDigi_ (config().bufferDigi()),
startTimeBuffer_ (config().digiSampling()*config().bufferDigi()),
maxADCCounts_ (1 << config().nBits()),
maxADCCounts_ ((1 << config().nBits()) - 1),
pulseShape_ (CaloPulseShape(config().digiSampling())),
wfExtractor_ (config().bufferDigi(),config().nBinsPeak(),config().minPeakADC(),config().bufferDigi()),
engine_ (createEngine(art::ServiceHandle<SeedService>()->getSeed())),
Expand Down
23 changes: 23 additions & 0 deletions CaloMC/src/CaloDigiWrapper.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Ed Callaghan
// Simple wrapper around calorimeter digis to interface into a partitioning scheme
// September 2025

#include "Offline/CaloMC/inc/CaloDigiWrapper.hh"

namespace mu2e{
CaloDigiWrapper::CaloDigiWrapper(const CaloDigi& digi):
_digi(digi.SiPMID(), digi.t0(), digi.waveform(), digi.peakpos()){
/**/
}

const CaloDigi& CaloDigiWrapper::Digi() const{
const auto& rv = _digi;
return rv;
}

const double CaloDigiWrapper::time() const{
auto t0 = _digi.t0();
auto rv = static_cast<double>(t0);
return rv;
}
} // namespace mu2e
Loading