ATLAS Offline Software
Loading...
Searching...
No Matches
ITk::StripDigitizationTool Class Reference

#include <StripDigitizationTool.h>

Inheritance diagram for ITk::StripDigitizationTool:

Public Member Functions

 StripDigitizationTool (const std::string &type, const std::string &name, const IInterface *parent)
virtual ~StripDigitizationTool ()
virtual StatusCode prepareEvent (const EventContext &ctx, unsigned int) override final
 Called before processing physics events.
virtual StatusCode processBunchXing (int bunchXing, SubEventIterator bSubEvents, SubEventIterator eSubEvents) override final
virtual StatusCode mergeEvent (const EventContext &ctx) override final
virtual StatusCode initialize () override final
virtual StatusCode processAllSubEvents (const EventContext &ctx) override final

Static Public Member Functions

static const InterfaceID & interfaceID ()

Protected Member Functions

bool digitizeElement (const EventContext &ctx, SiChargedDiodeCollectionMap &chargedDiodes, TimedHitCollection< SiHit > *&thpcsi, CLHEP::HepRandomEngine *rndmEngine)
void applyProcessorTools (SiChargedDiodeCollection *chargedDiodes, CLHEP::HepRandomEngine *rndmEngine) const
void addSDO (SiChargedDiodeCollection *collection, SG::WriteHandle< InDetSimDataCollection > *simDataCollMap) const
void storeTool (ISiChargedDiodesProcessorTool *p_processor)

Private Member Functions

StatusCode initServices ()
 initialize the required services
StatusCode initFrontEndTool ()
 Initialize the StripFrontEnd AlgTool.
StatusCode initDisabledCells ()
 Initialize the StripRandomDisabledCellGenerator AlgTool.
StatusCode initSurfaceChargesGeneratorTool ()
 Initialize the StripSurfaceChargesGenerator AlgTool.
StatusCode createAndStoreRDO (SiChargedDiodeCollection *chDiodeCollection, SG::WriteHandle< SCT_RDO_Container > *rdoContainer) const
 RDO and SDO methods.
std::unique_ptr< SCT_RDO_CollectioncreateRDO (SiChargedDiodeCollection *collection) const
 Create RDOs from the SiChargedDiodeCollection for the current wafer.
StatusCode getNextEvent (const EventContext &ctx)
void digitizeAllHits (const EventContext &ctx, SG::WriteHandle< SCT_RDO_Container > *rdoContainer, SG::WriteHandle< InDetSimDataCollection > *simDataCollMap, std::vector< bool > *processedElements, TimedHitCollection< SiHit > *thpcsi, CLHEP::HepRandomEngine *rndmEngine)
 digitize all hits
void digitizeNonHits (const EventContext &ctx, SG::WriteHandle< SCT_RDO_Container > *rdoContainer, SG::WriteHandle< InDetSimDataCollection > *simDataCollMap, const std::vector< bool > *processedElements, CLHEP::HepRandomEngine *rndmEngine) const
 digitize SCT without hits
void SetupRdoOutputType (Gaudi::Details::PropertyBase &)
 Called when m_WriteSCT1_RawData is altered.

Private Attributes

FloatProperty m_tfix {this, "FixedTime", -999., "Fixed time for Cosmics run selection"}
BooleanProperty m_enableHits {this, "EnableHits", true, "Enable hits"}
BooleanProperty m_onlyHitElements {this, "OnlyHitElements", false, "Process only elements with hits"}
BooleanProperty m_cosmicsRun {this, "CosmicsRun", false, "Cosmics run selection"}
BooleanProperty m_barrelonly {this, "BarrelOnly", false, "Only Barrel layers"}
BooleanProperty m_randomDisabledCells {this, "RandomDisabledCells", false, "Use Random disabled cells, default no"}
BooleanProperty m_createNoiseSDO {this, "CreateNoiseSDO", false, "Create SDOs for strips with only noise hits (huge increase in SDO collection size"}
IntegerProperty m_HardScatterSplittingMode {this, "HardScatterSplittingMode", 0, "Control pileup & signal splitting. Process all SiHit or just those from signal or background events"}
BooleanProperty m_WriteSCT1_RawData {this, "WriteSCT1_RawData", false, "Write out SCT1_RawData rather than SCT3_RawData"}
BooleanProperty m_onlyUseContainerName {this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."}
SG::ReadHandleKey< SiHitCollectionm_hitsContainerKey {this, "InputObjectName", "StripHits", "Input HITS collection name"}
std::string m_inputObjectName {""}
SG::WriteHandleKey< SCT_RDO_Containerm_rdoContainerKey {this, "OutputObjectName", "SCT_RDOs", "Output Object name"}
SG::WriteHandle< SCT_RDO_Containerm_rdoContainer
 RDO container handle.
SG::WriteHandleKey< InDetSimDataCollectionm_simDataCollMapKey {this, "OutputSDOName", "StripSDO_Map", "Output SDO container name"}
SG::WriteHandle< InDetSimDataCollectionm_simDataCollMap
 SDO Map handle.
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollectionm_stripDetEleCollKey {this, "StripDetEleCollKey", "ITkStripDetectorElementCollection", "Key of SiDetectorElementCollection for SCT"}
ToolHandle< IFrontEndm_sct_FrontEnd {this, "FrontEnd", "StripFrontEnd", "Handle the Front End Electronic tool"}
ToolHandle< ISurfaceChargesGeneratorm_sct_SurfaceChargesGenerator {this, "SurfaceChargesGenerator", "StripSurfaceChargesGenerator", "Choice of using a more detailed charge drift model"}
ToolHandle< IRandomDisabledCellGeneratorm_sct_RandomDisabledCellGenerator {this, "RandomDisabledCellGenerator", "StripRandomDisabledCellGenerator", ""}
ServiceHandle< IAthRNGSvcm_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""}
 Random number service.
ServiceHandle< PileUpMergeSvcm_mergeSvc {this, "MergeSvc", "PileUpMergeSvc", "Merge service used in Pixel & SCT digitization"}
const SCT_IDm_detID {nullptr}
 Handle to the ID helper.
std::unique_ptr< TimedHitCollection< SiHit > > m_thpcsi {nullptr}
std::vector< ISiChargedDiodesProcessorTool * > m_diodeCollectionTools
std::vector< bool > m_processedElements
 vector of processed elements - set by digitizeHits() *‍/
std::vector< std::unique_ptr< SiHitCollection > > m_hitCollPtrs
bool m_HardScatterSplittingSkipper {false}

Detailed Description

Definition at line 58 of file StripDigitizationTool.h.

Constructor & Destructor Documentation

◆ StripDigitizationTool()

ITk::StripDigitizationTool::StripDigitizationTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 45 of file StripDigitizationTool.cxx.

47 :
48 base_class(type, name, parent) {
50}
void SetupRdoOutputType(Gaudi::Details::PropertyBase &)
Called when m_WriteSCT1_RawData is altered.

◆ ~StripDigitizationTool()

ITk::StripDigitizationTool::~StripDigitizationTool ( )
virtualdefault

Member Function Documentation

◆ addSDO()

void ITk::StripDigitizationTool::addSDO ( SiChargedDiodeCollection * collection,
SG::WriteHandle< InDetSimDataCollection > * simDataCollMap ) const
protected

Definition at line 872 of file StripDigitizationTool.cxx.

872 {
873
874 using list_t = SiTotalCharge::list_t;
875 std::vector<InDetSimData::Deposit> deposits;
876 deposits.reserve(5); // no idea what a reasonable number for this would be
877 // with pileup
878 // loop over the charged diodes
879 SiChargedDiodeIterator EndOfDiodeCollection{collection->end()};
880 for (SiChargedDiodeIterator i_chargedDiode{collection->begin()}; i_chargedDiode != EndOfDiodeCollection; ++i_chargedDiode) {
881 deposits.clear();
882 const list_t& charges{(*i_chargedDiode).second.totalCharge().chargeComposition()};
883
884 bool real_particle_hit{false};
885 // loop over the list
886 list_t::const_iterator EndOfChargeList{charges.end()};
887 for (list_t::const_iterator i_ListOfCharges{charges.begin()}; i_ListOfCharges != EndOfChargeList; ++i_ListOfCharges) {
888 const HepMcParticleLink& trkLink{i_ListOfCharges->particleLink()};
889 if (HepMC::ignoreTruthLink(trkLink, m_vetoPileUpTruthLinks)) {
890 continue;
891 }
892 if (not real_particle_hit) {
893 // Types of SiCharges expected from SCT
894 // Noise: barcode==0 and
895 // processType()==SiCharge::noise
896 // Delta Rays: barcode==0 and
897 // processType()==SiCharge::track
898 // Pile Up Tracks With No Truth: barcode!=0 and
899 // processType()==SiCharge::cut_track
900 // Tracks With Truth: barcode!=0 and
901 // processType()==SiCharge::track
902 if (!HepMC::no_truth_link(trkLink) && i_ListOfCharges->processType() == SiCharge::track) {
903 real_particle_hit = true;
904 }
905 }
906 // check if this track number has been already used.
907 const auto theDeposit = std::ranges::find_if(
908 deposits.rbegin(), deposits.rend(),
909 [&trkLink](const InDetSimData::Deposit& deposit) {
910 return deposit.first == trkLink;
911 });
912
913 // if the charge has already hit the Diode add it to the deposit
914 if (theDeposit != deposits.rend()) {
915 theDeposit->second += i_ListOfCharges->charge();
916 } else { // create a new deposit
917 deposits.emplace_back(trkLink, i_ListOfCharges->charge());
918 }
919 }
920
921 // add the simdata object to the map:
922 if (real_particle_hit or m_createNoiseSDO) {
923 InDetDD::SiReadoutCellId roCell{(*i_chargedDiode).second.getReadoutCell()};
924 int strip{roCell.strip()};
925 const InDetDD::SCT_ModuleSideDesign& sctDesign{dynamic_cast<const InDetDD::SCT_ModuleSideDesign&>(collection->design())};
926
927 int row2D{sctDesign.row(strip)};
928 Identifier id_readout;
929 if (row2D < 0) { // SCT sensors and new-style ITkStrip sensors
930 id_readout = m_detID->strip_id(collection->identify(),strip);
931 } else { // old-style (21.9) ITkStrip sensors
932 int strip2D{sctDesign.strip(strip)};
933 id_readout = m_detID->strip_id(collection->identify(),row2D, strip2D);
934 }
935 (*simDataCollMap)->try_emplace(id_readout, std::move(deposits), (*i_chargedDiode).second.flag());
936 }
937 }
938}
SiChargedDiodeMap::iterator SiChargedDiodeIterator
const SCT_ID * m_detID
Handle to the ID helper.
virtual int strip(int stripId1Dim) const
virtual int row(int stripId1Dim) const
int strip() const
Get strip number. Equivalent to phiIndex().
Definition SiCellId.h:131
std::pair< HepMcParticleLink, float > Deposit
virtual Identifier identify() const override final
SiChargedDiodeIterator begin()
const InDetDD::DetectorDesign & design() const
std::vector< SiCharge > list_t
bool no_truth_link(const T &p)
Method to establish if a if the object is linked to something which was never saved to the HepMC Trut...
bool ignoreTruthLink(const T &p, bool vetoPileUp)
Helper function for SDO creation in PileUpTools.

◆ applyProcessorTools()

void ITk::StripDigitizationTool::applyProcessorTools ( SiChargedDiodeCollection * chargedDiodes,
CLHEP::HepRandomEngine * rndmEngine ) const
protected

Definition at line 543 of file StripDigitizationTool.cxx.

543 {
544 ATH_MSG_DEBUG("applyProcessorTools()");
545 int processorNumber{0};
546
547 for (ISiChargedDiodesProcessorTool* proc: m_diodeCollectionTools) {
548 proc->process(*chargedDiodes, rndmEngine);
549
550 processorNumber++;
551 ATH_MSG_DEBUG("Applied processor # " << processorNumber);
552 }
553}
#define ATH_MSG_DEBUG(x)
std::vector< ISiChargedDiodesProcessorTool * > m_diodeCollectionTools

◆ createAndStoreRDO()

StatusCode ITk::StripDigitizationTool::createAndStoreRDO ( SiChargedDiodeCollection * chDiodeCollection,
SG::WriteHandle< SCT_RDO_Container > * rdoContainer ) const
private

RDO and SDO methods.

Create RDOs from the SiChargedDiodeCollection for the current wafer and save to StoreGate

Parameters
chDiodeCollectionlist of the SiChargedDiodes on the current wafer

Definition at line 642 of file StripDigitizationTool.cxx.

642 {
643
644 // Create the RDO collection
645 std::unique_ptr<SCT_RDO_Collection> RDOColl{createRDO(chDiodeCollection)};
646 const IdentifierHash identifyHash{RDOColl->identifyHash()};
647
648 // Add it to storegate
649 Identifier id_coll{RDOColl->identify()};
650 int barrelec{m_detID->barrel_ec(id_coll)};
651
652 if ((not m_barrelonly) or (std::abs(barrelec) <= 1)) {
653 if ((*rdoContainer)->addCollection(RDOColl.release(), identifyHash).isFailure()) {
654 ATH_MSG_FATAL("SCT RDO collection could not be added to container!");
655 return StatusCode::FAILURE;
656 }
657 } else {
658 ATH_MSG_VERBOSE("Not saving SCT_RDO_Collection: " << m_detID->show_to_string(RDOColl->identify()) << " to container!");
659 }
660 return StatusCode::SUCCESS;
661} // StripDigitization::createAndStoreRDO()
#define ATH_MSG_FATAL(x)
#define ATH_MSG_VERBOSE(x)
std::unique_ptr< SCT_RDO_Collection > createRDO(SiChargedDiodeCollection *collection) const
Create RDOs from the SiChargedDiodeCollection for the current wafer.

◆ createRDO()

std::unique_ptr< SCT_RDO_Collection > ITk::StripDigitizationTool::createRDO ( SiChargedDiodeCollection * collection) const
private

Create RDOs from the SiChargedDiodeCollection for the current wafer.

Parameters
collectionlist of the SiChargedDiodes on the current wafer

Definition at line 666 of file StripDigitizationTool.cxx.

666 {
667
668 // create a new SCT RDO collection
669 std::unique_ptr<SCT_RDO_Collection> p_rdocoll;
670
671 // need the DE identifier
672 const Identifier id_de{collection->identify()};
673 IdentifierHash idHash_de{collection->identifyHash()};
674 try {
675 p_rdocoll = std::make_unique<SCT_RDO_Collection>(idHash_de);
676 } catch (const std::bad_alloc&) {
677 ATH_MSG_FATAL("Could not create a new SCT_RDORawDataCollection !");
678 }
679 p_rdocoll->setIdentifier(id_de);
680
681 SiChargedDiodeIterator i_chargedDiode{collection->begin()};
682 SiChargedDiodeIterator i_chargedDiode_end{collection->end()};
683 // Choice of producing SCT1_RawData or SCT3_RawData
684 if (m_WriteSCT1_RawData.value()) {
685 for (; i_chargedDiode != i_chargedDiode_end; ++i_chargedDiode) {
686 unsigned int flagmask{static_cast<unsigned int>((*i_chargedDiode).second.flag() & 0xFE)};
687
688 if (!flagmask) { // now check it wasn't masked:
689 // create new SCT RDO, using method 1 for mask:
690 // GroupSize=1: need readout id, make use of
691 // SiTrackerDetDescr
692 InDetDD::SiReadoutCellId roCell{(*i_chargedDiode).second.getReadoutCell()};
693 int strip{roCell.strip()};
694 if (strip > 0xffff) { // In upgrade layouts strip can be bigger
695 // than 4000
696 ATH_MSG_FATAL("Strip number too big for SCT1 raw data format.");
697 }
698 const Identifier id_readout{m_detID->strip_id(collection->identify(), strip)};
699
700 // build word, masks taken from SiTrackerEvent/SCTRawData.cxx
701 const unsigned int strip_rdo{static_cast<unsigned int>((strip & 0xFFFF) << 16)};
702
703 // user can define what GroupSize is, here 1: TC. Incorrect,
704 // GroupSize >= 1
705 int size{SiHelper::GetStripNum((*i_chargedDiode).second)};
706 unsigned int size_rdo{static_cast<unsigned int>(size & 0xFFFF)};
707
708 // TC. Need to check if there are disabled strips in the cluster
709 int cluscounter{0};
710 if (size > 1) {
711 SiChargedDiodeIterator it2{i_chargedDiode};
712 ++it2;
713 for (; it2 != i_chargedDiode_end; ++it2) {
714 ++cluscounter;
715 if (cluscounter >= size) {
716 break;
717 }
718 if (it2->second.flag() & 0xDE) {
719 int tmp{cluscounter};
720 while ((it2 != i_chargedDiode_end) and (cluscounter < size - 1) and (it2->second.flag() & 0xDE)) {
721 ++it2;
722 ++cluscounter;
723 }
724 if ((it2 != collection->end()) and !(it2->second.flag() & 0xDE)) {
725 SiHelper::ClusterUsed(it2->second, false);
726 SiHelper::SetStripNum(it2->second, size - cluscounter, &msg());
727 }
728 // groupSize=tmp;
729 size_rdo = tmp & 0xFFFF;
730 break;
731 }
732 }
733 }
734 unsigned int StripWord{strip_rdo | size_rdo};
735 SCT1_RawData* p_rdo{new SCT1_RawData(id_readout, StripWord)};
736 if (p_rdo) {
737 p_rdocoll->push_back(p_rdo);
738 }
739 }
740 }
741 } else {
742 // Under the current scheme time bin and ERRORS are hard-coded to
743 // default values.
744 int ERRORS{0};
745 static const std::vector<int> dummyvector;
746 for (; i_chargedDiode != i_chargedDiode_end; ++i_chargedDiode) {
747 unsigned int flagmask{static_cast<unsigned int>((*i_chargedDiode).second.flag() & 0xFE)};
748
749 if (!flagmask) { // Check it wasn't masked
750 int tbin{SiHelper::GetTimeBin((*i_chargedDiode).second)};
751 // create new SCT RDO
752 InDetDD::SiReadoutCellId roCell{(*i_chargedDiode).second.getReadoutCell()};
753 int strip{roCell.strip()};
754 const InDetDD::SCT_ModuleSideDesign& sctDesign{static_cast<const InDetDD::SCT_ModuleSideDesign&>(collection->design())};
755 int row2D{sctDesign.row(strip)};
756 Identifier id_readout;
757 if (row2D < 0) { // SCT sensors
758 id_readout = m_detID->strip_id(collection->identify(), strip);
759 } else { // Upgrade sensors
760 int strip2D{sctDesign.strip(strip)};
761 id_readout = m_detID->strip_id(collection->identify(), row2D, strip2D);
762 }
763
764 // build word (compatible with
765 // StripRawDataByteStreamCnv/src/StripRodDecoder.cxx)
766 int size{SiHelper::GetStripNum((*i_chargedDiode).second)};
767 int groupSize{size};
768
769 // TC. Need to check if there are disabled strips in the cluster
770 int cluscounter{0};
771 if (size > 1) {
772 SiChargedDiode* diode{i_chargedDiode->second.nextInCluster()};
773 while (diode) {//check if there is a further strip in the cluster
774 ++cluscounter;
775 if (cluscounter >= size) {
776 ATH_MSG_WARNING("Cluster size reached while neighbouring strips still defined.");
777 break;
778 }
779 if (diode->flag() & 0xDE) {//see if it is disabled/below threshold/disconnected/etc (0xDE corresponds to BT_SET | DISABLED_SET | BADTOT_SET | DISCONNECTED_SET | MASKOFF_SET)
780 int tmp{cluscounter};
781 while ((cluscounter < size - 1) and (diode->flag() & 0xDE)) { //check its not the end and still disabled
782 diode = diode->nextInCluster();
783 cluscounter++;
784 }
785 if (diode and !(diode->flag() & 0xDE)) {
786 SiHelper::ClusterUsed(*diode, false);
787 SiHelper::SetStripNum(*diode, size - cluscounter, &msg());
788 }
789 groupSize = tmp;
790 break;
791 }
792 diode = diode->nextInCluster();
793 }
794 }
795
796 int stripIn11bits{strip & 0x7ff};
797 if (stripIn11bits != strip) {
798 ATH_MSG_DEBUG("Strip number " << strip << " doesn't fit into 11 bits - will be truncated");
799 }
800
801 unsigned int StripWord{static_cast<unsigned int>(groupSize | (stripIn11bits << 11) | (tbin << 22) | (ERRORS << 25))};
802 SCT3_RawData *p_rdo{new SCT3_RawData(id_readout, StripWord, &dummyvector)};
803 if (p_rdo) {
804 p_rdocoll->push_back(p_rdo);
805 }
806 }
807 }
808 }
809 return p_rdocoll;
810} // StripDigitization::createRDO()
#define ATH_MSG_WARNING(x)
size_t size() const
Number of registered mappings.
virtual IdentifierHash identifyHash() const override final
int flag() const
SiChargedDiode * nextInCluster()
static void ClusterUsed(SiChargedDiode &chDiode, bool flag)
Definition SiHelper.h:121
static void SetStripNum(SiChargedDiode &chDiode, int nstrip, MsgStream *log=nullptr)
Definition SiHelper.h:139
static int GetStripNum(SiChargedDiode &chDiode)
Definition SiHelper.h:199
static int GetTimeBin(SiChargedDiode &chDiode)
Definition SiHelper.h:203
MsgStream & msg
Definition testRead.cxx:32

◆ digitizeAllHits()

void ITk::StripDigitizationTool::digitizeAllHits ( const EventContext & ctx,
SG::WriteHandle< SCT_RDO_Container > * rdoContainer,
SG::WriteHandle< InDetSimDataCollection > * simDataCollMap,
std::vector< bool > * processedElements,
TimedHitCollection< SiHit > * thpcsi,
CLHEP::HepRandomEngine * rndmEngine )
private

digitize all hits

Definition at line 298 of file StripDigitizationTool.cxx.

298 {
300 //
301 // In order to process all element rather than just those with hits we
302 // create a vector to keep track of which elements have been processed.
303 // NB. an element is an sct module
304 //
306 ATH_MSG_DEBUG("Digitizing hits");
307 int hitcount{0}; // First, elements with hits.
308
309 //map with key representing the row of strips
310 SiChargedDiodeCollectionMap chargedDiodesMap;
311
312 while (digitizeElement(ctx, chargedDiodesMap, thpcsi, rndmEngine)) {
313
314 ATH_MSG_DEBUG("Digitizing "<<chargedDiodesMap.size()<<" Element(s)");
315
316 hitcount++; // Hitcount will be a number in the hit collection minus
317 // number of hits in missing mods
318
319 for (SiChargedDiodeCollectionIterator & chargedDiodesIter : chargedDiodesMap){
320
321 SiChargedDiodeCollection & chargedDiodes = *chargedDiodesIter.second;
322 ATH_MSG_DEBUG("Hit collection ID=" << m_detID->show_to_string(chargedDiodes.identify()));
323
324 ATH_MSG_DEBUG("in digitize elements with hits: ec - layer - eta - phi "
325 << m_detID->barrel_ec(chargedDiodes.identify()) << " - "
326 << m_detID->layer_disk(chargedDiodes.identify()) << " - "
327 << m_detID->eta_module(chargedDiodes.identify()) << " - "
328 << m_detID->phi_module(chargedDiodes.identify()) << " - "
329 << " processing hit number " << hitcount);
330
331 // Have a flag to check if the module is present or not
332 // Generally assume it is:
333
334 IdentifierHash idHash{chargedDiodes.identifyHash()};
335
336 assert(idHash < processedElements->size());
337 (*processedElements)[idHash] = true;
338
339 // create and store RDO and SDO
340
341 if (not chargedDiodes.empty()) {
342 StatusCode sc{createAndStoreRDO(&chargedDiodes, rdoContainer)};
343 if (sc.isSuccess()) { // error msg is given inside
344 // createAndStoreRDO()
345 addSDO(&chargedDiodes, simDataCollMap);
346 }
347 }
348
349 chargedDiodes.clear();
350 }
351 }
352 ATH_MSG_DEBUG("hits processed");
353}
static Double_t sc
std::unordered_map< int, std::unique_ptr< SiChargedDiodeCollection > > SiChargedDiodeCollectionMap
std::pair< const int, std::unique_ptr< SiChargedDiodeCollection > > SiChargedDiodeCollectionIterator
bool digitizeElement(const EventContext &ctx, SiChargedDiodeCollectionMap &chargedDiodes, TimedHitCollection< SiHit > *&thpcsi, CLHEP::HepRandomEngine *rndmEngine)
StatusCode createAndStoreRDO(SiChargedDiodeCollection *chDiodeCollection, SG::WriteHandle< SCT_RDO_Container > *rdoContainer) const
RDO and SDO methods.
void addSDO(SiChargedDiodeCollection *collection, SG::WriteHandle< InDetSimDataCollection > *simDataCollMap) const
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ digitizeElement()

bool ITk::StripDigitizationTool::digitizeElement ( const EventContext & ctx,
SiChargedDiodeCollectionMap & chargedDiodes,
TimedHitCollection< SiHit > *& thpcsi,
CLHEP::HepRandomEngine * rndmEngine )
protected

Definition at line 404 of file StripDigitizationTool.cxx.

404 {
405 if (nullptr == thpcsi) {
406 ATH_MSG_ERROR("thpcsi should not be nullptr!");
407
408 return false;
409 }
410
411 chargedDiodesMap.clear();
412
413 // get the iterator pairs for this DetEl
414
416 if (!thpcsi->nextDetectorElement(i, e)) { // no more hits
417 return false;
418 }
419
420 // create the identifier for the collection:
421 ATH_MSG_DEBUG("create ID for the hit collection");
422 const TimedHitPtr<SiHit>& firstHit{*i};
423 int barrel{firstHit->getBarrelEndcap()};
424 Identifier id{m_detID->wafer_id(barrel,
425 firstHit->getLayerDisk(),
426 firstHit->getPhiModule(),
427 firstHit->getEtaModule(),
428 firstHit->getSide())};
429 IdentifierHash waferHash{m_detID->wafer_hash(id)};
430
431 // Get StripDetectorElementCollection
432 SG::ReadCondHandle<InDetDD::SiDetectorElementCollection> stripDetEle(m_stripDetEleCollKey, ctx);
433 const InDetDD::SiDetectorElementCollection* elements(stripDetEle.retrieve());
434 if (elements==nullptr) {
435 ATH_MSG_FATAL(m_stripDetEleCollKey.fullKey() << " could not be retrieved");
436 return false;
437 }
438
439 // get the det element from the manager
440 const InDetDD::SiDetectorElement* sielement{elements->getDetectorElement(waferHash)};
441
442 if (sielement == nullptr) {
443 ATH_MSG_DEBUG("Barrel=" << barrel << " layer=" << firstHit->getLayerDisk() << " Eta=" << firstHit->getEtaModule() << " Phi=" << firstHit->getPhiModule() << " Side=" << firstHit->getSide());
444 ATH_MSG_ERROR("detector manager could not find element with id = " << id);
445 return false;
446 }
447
448
449 //Now we have to get the sub-elements if they exist!
450 const InDetDD::SCT_ModuleSideDesign * thisDesign = static_cast<const InDetDD::SCT_ModuleSideDesign*>(&sielement->design());
451
452 const InDetDD::SCT_ModuleSideDesign * motherDesign = thisDesign->getMother();
453
454 //should become un-ordederd map
455 std::map<int, const InDetDD::SCT_ModuleSideDesign *> children;
456
457 if(motherDesign){
458 //see above
459 children = motherDesign->getChildren();
460 }
461 else {
462 //if no mother/children relationship, just use what you got intially
463 children.emplace(0,thisDesign);
464 }
465
466
467 for (const std::pair <const int, const InDetDD::SCT_ModuleSideDesign *> &subDesign : children){
468
469 //Create the charged diodes collection.
470 //We are incrementing the eta index with the number of the
471 //sub-element (child) in the returned set.
472 //This "fills in" the gaps in the SiHitIdentifiers with the
473 //number of the strip row, such that the SCT_ID is continuous
474 //once we split the single simulated sensor into multiple SiDetectorElements
475 Identifier id_child{m_detID->wafer_id(firstHit->getBarrelEndcap(), firstHit->getLayerDisk(),
476 firstHit->getPhiModule(), firstHit->getEtaModule()+subDesign.first,
477 firstHit->getSide())};
478
479 IdentifierHash hash_child = m_detID->wafer_hash(id_child);
480
481 const InDetDD::SiDetectorElement* sielement_child{elements->getDetectorElement(hash_child)};
482
483 if(sielement_child){
484
485 std::unique_ptr<SiChargedDiodeCollection> thisChargedDiode(std::make_unique<SiChargedDiodeCollection>());
486 int i_index = subDesign.first;
487 thisChargedDiode->setDetectorElement(sielement_child);
488 chargedDiodesMap.insert({i_index,std::move(thisChargedDiode)});
489
490 }
491
492 else ATH_MSG_ERROR("detector manager could not find element with id = "<<id_child<<" Barrel=" << firstHit->getBarrelEndcap() << " layer=" <<
493 firstHit->getLayerDisk() << " Eta=" << firstHit->getEtaModule()+subDesign.first <<" Phi=" << firstHit->getPhiModule()
494 << " Side=" <<firstHit->getSide());
495 }
496
497
498 // Loop over the hits and created charged diodes:
499 while (i != e) {
500 const TimedHitPtr<SiHit>& phit{*i++};
501
502 // skip hits which are more than 10us away
503 if (std::abs(phit->meanTime()) < 10000. * CLHEP::ns) {
504 ATH_MSG_DEBUG("HASH = " << m_detID->wafer_hash(m_detID->wafer_id(phit->getBarrelEndcap(),
505 phit->getLayerDisk(),
506 phit->getPhiModule(),
507 phit->getEtaModule(),
508 phit->getSide())));
509 ATH_MSG_DEBUG("calling process() for all methods");
510
511 if(!motherDesign) {
512 //no row splitting
513 //should only be one diode collection here, so just use it
514 if(chargedDiodesMap.size()>1) {
515 ATH_MSG_WARNING("More DiodesCollections("<<chargedDiodesMap.size()<<") than expected (1). Please check your configuration!");
516 }
517
518 SiDigitizationSurfaceChargeInserter inserter(sielement,chargedDiodesMap[0].get());
519 m_sct_SurfaceChargesGenerator->process(sielement, phit, inserter, rndmEngine, ctx);
520 }
521
522 else{
523 //with row splitting
524 MultiElementChargeInserter inserter(chargedDiodesMap,motherDesign);
525 m_sct_SurfaceChargesGenerator->process(sielement, phit,inserter, rndmEngine, ctx);
526 }
527
528 ATH_MSG_DEBUG("charges filled!");
529 }
530 }
531
532 //Now loop over set of diodes and apply processors
533 for (SiChargedDiodeCollectionIterator & theDiode : chargedDiodesMap){
534 if(theDiode.second) applyProcessorTools(theDiode.second.get(), rndmEngine); // !< Use of the new AlgTool surface
535 }
536 // charges generator class
537 return true;
538}
#define ATH_MSG_ERROR(x)
ToolHandle< ISurfaceChargesGenerator > m_sct_SurfaceChargesGenerator
void applyProcessorTools(SiChargedDiodeCollection *chargedDiodes, CLHEP::HepRandomEngine *rndmEngine) const
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_stripDetEleCollKey
const std::map< int, const SCT_ModuleSideDesign * > & getChildren() const
const SCT_ModuleSideDesign * getMother() const
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
bool nextDetectorElement(const_iterator &b, const_iterator &e)
sets an iterator range with the hits of current detector element returns a bool when done
TimedVector::const_iterator const_iterator
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:132

◆ digitizeNonHits()

void ITk::StripDigitizationTool::digitizeNonHits ( const EventContext & ctx,
SG::WriteHandle< SCT_RDO_Container > * rdoContainer,
SG::WriteHandle< InDetSimDataCollection > * simDataCollMap,
const std::vector< bool > * processedElements,
CLHEP::HepRandomEngine * rndmEngine ) const
private

digitize SCT without hits

Definition at line 356 of file StripDigitizationTool.cxx.

356 {
357 // Get StripDetectorElementCollection
358 SG::ReadCondHandle<InDetDD::SiDetectorElementCollection> stripDetEle(m_stripDetEleCollKey, ctx);
359 const InDetDD::SiDetectorElementCollection* elements{stripDetEle.retrieve()};
360 if (elements==nullptr) {
361 ATH_MSG_FATAL(m_stripDetEleCollKey.fullKey() << " could not be retrieved");
362 return;
363 }
364
365 ATH_MSG_DEBUG("processing elements without hits");
366 SiChargedDiodeCollection chargedDiodes;
367
368 for (unsigned int i{0}; i < processedElements->size(); i++) {
369 if (not (*processedElements)[i]) {
370 IdentifierHash idHash{i};
371 if (not idHash.is_valid()) {
372 ATH_MSG_ERROR("SCT Detector element id hash is invalid = " << i);
373 }
374
375 const InDetDD::SiDetectorElement* element{elements->getDetectorElement(idHash)};
376 if (element) {
377 ATH_MSG_DEBUG("In digitize of untouched elements: layer - phi - eta "
378 << m_detID->layer_disk(element->identify()) << " - "
379 << m_detID->phi_module(element->identify()) << " - "
380 << m_detID->eta_module(element->identify()) << " - "
381 << "size: " << processedElements->size());
382
383 chargedDiodes.setDetectorElement(element);
384 ATH_MSG_DEBUG("calling applyProcessorTools() for NON hits");
385 applyProcessorTools(&chargedDiodes, rndmEngine);
386
387 // Create and store RDO and SDO
388 // Don't create empty ones.
389 if (not chargedDiodes.empty()) {
390 StatusCode sc{createAndStoreRDO(&chargedDiodes, rdoContainer)};
391 if (sc.isSuccess()) {// error msg is given inside
392 // createAndStoreRDO()
393 addSDO(&chargedDiodes, simDataCollMap);
394 }
395 }
396
397 chargedDiodes.clear();
398 }
399 }
400 }
401
402 }
constexpr bool is_valid() const
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
virtual Identifier identify() const override final
identifier of this detector element (inline)
void setDetectorElement(const InDetDD::SolidStateDetectorElementBase *SiElement)

◆ getNextEvent()

StatusCode ITk::StripDigitizationTool::getNextEvent ( const EventContext & ctx)
private

Definition at line 815 of file StripDigitizationTool.cxx.

815 {
816 ATH_MSG_DEBUG("StripDigitizationTool::getNextEvent");
817 // get the container(s)
819 // this is a list<pair<time_t, DataLink<SiHitCollection> >
820
821 // In case of single hits container just load the collection using read handles
823 SG::ReadHandle<SiHitCollection> hitCollection(m_hitsContainerKey, ctx);
824 if (!hitCollection.isValid()) {
825 ATH_MSG_ERROR("Could not get SCT SiHitCollection container " << hitCollection.name() << " from store " << hitCollection.store());
826 return StatusCode::FAILURE;
827 }
828
829 // create a new hits collection
830 m_thpcsi = std::make_unique<TimedHitCollection<SiHit>>(1);
831 m_thpcsi->insert(0, hitCollection.cptr());
832 ATH_MSG_DEBUG("SiHitCollection found with " << hitCollection->size() << " hits");
833
834 return StatusCode::SUCCESS;
835 }
836
837 TimedHitCollList hitCollList;
838 unsigned int numberOfSiHits{0};
839 if (not (m_mergeSvc->retrieveSubEvtsData(m_inputObjectName, hitCollList, numberOfSiHits).isSuccess()) and hitCollList.empty()) {
840 ATH_MSG_ERROR("Could not fill TimedHitCollList");
841 return StatusCode::FAILURE;
842 } else {
843 ATH_MSG_DEBUG(hitCollList.size() << " SiHitCollections with key " << m_inputObjectName << " found");
844 }
845 // create a new hits collection
846 m_thpcsi = std::make_unique<TimedHitCollection<SiHit>>(numberOfSiHits);
847 // now merge all collections into one
848 TimedHitCollList::iterator endColl{hitCollList.end()};
849 for (TimedHitCollList::iterator iColl{hitCollList.begin()}; iColl != endColl; ++iColl) {
850 // decide if this event will be processed depending on
851 // HardScatterSplittingMode & bunchXing
854 continue;
855 }
857 continue;
858 }
861 }
862 const SiHitCollection* p_collection{iColl->second};
863 m_thpcsi->insert(iColl->first, p_collection);
864 ATH_MSG_DEBUG("SiTrackerHitCollection found with " << p_collection->size() << " hits"); // loop on the hit collections
865 }
866 return StatusCode::SUCCESS;
867}
AtlasHitsVector< SiHit > SiHitCollection
size_type size() const
std::unique_ptr< TimedHitCollection< SiHit > > m_thpcsi
ServiceHandle< PileUpMergeSvc > m_mergeSvc
SG::ReadHandleKey< SiHitCollection > m_hitsContainerKey
std::size_t numberOfSiHits(const xAOD::TrackParticle *tp)
return the number of Si hits in the track particle
std::list< value_t > type
type of the collection of timed data object

◆ initDisabledCells()

StatusCode ITk::StripDigitizationTool::initDisabledCells ( )
private

Initialize the StripRandomDisabledCellGenerator AlgTool.

Definition at line 210 of file StripDigitizationTool.cxx.

210 {
211 // +++ Retrieve the StripRandomDisabledCellGenerator
213
215
216 ATH_MSG_INFO("Retrieved the StripRandomDisabledCellGenerator tool:" << m_sct_RandomDisabledCellGenerator);
217 return StatusCode::SUCCESS;
218}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
ToolHandle< IRandomDisabledCellGenerator > m_sct_RandomDisabledCellGenerator
void storeTool(ISiChargedDiodesProcessorTool *p_processor)

◆ initFrontEndTool()

StatusCode ITk::StripDigitizationTool::initFrontEndTool ( )
private

Initialize the StripFrontEnd AlgTool.

Definition at line 182 of file StripDigitizationTool.cxx.

182 {
183 ATH_CHECK(m_sct_FrontEnd.retrieve());
184
186
187 ATH_MSG_DEBUG("Retrieved and initialised tool " << m_sct_FrontEnd);
188 return StatusCode::SUCCESS;
189}
ToolHandle< IFrontEnd > m_sct_FrontEnd

◆ initialize()

StatusCode ITk::StripDigitizationTool::initialize ( )
finaloverridevirtual

Definition at line 57 of file StripDigitizationTool.cxx.

57 {
58 ATH_MSG_DEBUG("StripDigitizationTool::initialize()");
59
60 // +++ Init the services
62
63 // +++ Get the Surface Charges Generator tool
65
66 // +++ Get the Front End tool
68
69 // +++ Initialise for disabled cells from the random disabled cells tool
70 // +++ Default off, since disabled cells taken form configuration in
71 // reconstruction stage
74 ATH_MSG_INFO("Use of Random disabled cells");
75 } else {
77 }
78
79 // check the input object name
80 if (m_hitsContainerKey.key().empty()) {
81 ATH_MSG_FATAL("Property InputObjectName not set !");
82 return StatusCode::FAILURE;
83 }
85 ATH_MSG_DEBUG("Input objects in container : '" << m_inputObjectName << "'");
86
87 // Initialize ReadHandleKey
88 ATH_CHECK(m_hitsContainerKey.initialize(true));
89
90 // +++ Initialize WriteHandleKey
91 ATH_CHECK(m_rdoContainerKey.initialize());
92 ATH_CHECK(m_simDataCollMapKey.initialize());
93
94 // Initialize ReadCondHandleKey
95 ATH_CHECK(m_stripDetEleCollKey.initialize());
96
97 ATH_MSG_DEBUG("SiDigitizationTool::initialize() complete");
98
99 return StatusCode::SUCCESS;
100}
SG::WriteHandleKey< SCT_RDO_Container > m_rdoContainerKey
StatusCode initFrontEndTool()
Initialize the StripFrontEnd AlgTool.
StatusCode initServices()
initialize the required services
StatusCode initSurfaceChargesGeneratorTool()
Initialize the StripSurfaceChargesGenerator AlgTool.
SG::WriteHandleKey< InDetSimDataCollection > m_simDataCollMapKey
StatusCode initDisabledCells()
Initialize the StripRandomDisabledCellGenerator AlgTool.

◆ initServices()

StatusCode ITk::StripDigitizationTool::initServices ( )
private

initialize the required services

Definition at line 194 of file StripDigitizationTool.cxx.

194 {
195 // Get SCT ID helper for hash function and Store them using methods from the
196 // SiDigitization.
197 ATH_CHECK(detStore()->retrieve(m_detID, "SCT_ID"));
198
200 ATH_CHECK(m_mergeSvc.retrieve());
201 }
202 ATH_CHECK(m_rndmSvc.retrieve());
203
204 return StatusCode::SUCCESS;
205}
ServiceHandle< IAthRNGSvc > m_rndmSvc
Random number service.

◆ initSurfaceChargesGeneratorTool()

StatusCode ITk::StripDigitizationTool::initSurfaceChargesGeneratorTool ( )
private

Initialize the StripSurfaceChargesGenerator AlgTool.

Definition at line 166 of file StripDigitizationTool.cxx.

166 {
168
169 if (m_cosmicsRun and m_tfix > -998) {
171 ATH_MSG_INFO("Use of FixedTime = " << m_tfix << " in cosmics");
172 }
173
174 ATH_MSG_DEBUG("Retrieved and initialised tool " << m_sct_SurfaceChargesGenerator);
175
176 return StatusCode::SUCCESS;
177}

◆ interfaceID()

const InterfaceID & ITk::StripDigitizationTool::interfaceID ( )
inlinestatic

Definition at line 161 of file StripDigitizationTool.h.

161 {
163}
static const InterfaceID IID_IStripDigitizationTool("StripDigitizationTool", 1, 0)

◆ mergeEvent()

StatusCode ITk::StripDigitizationTool::mergeEvent ( const EventContext & ctx)
finaloverridevirtual

Definition at line 274 of file StripDigitizationTool.cxx.

274 {
275 ATH_MSG_VERBOSE("StripDigitizationTool::mergeEvent()");
276
277 // Set the RNG to use for this event.
278 ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this);
279 rngWrapper->setSeed( name(), ctx );
280 CLHEP::HepRandomEngine *rndmEngine = rngWrapper->getEngine(ctx);
281
282 if (m_enableHits) {
284 }
285
286 if (not m_onlyHitElements) {
288 }
289
290 m_hitCollPtrs.clear();
291
292 m_thpcsi.reset(nullptr);
293
294 ATH_MSG_DEBUG("Digitize success!");
295 return StatusCode::SUCCESS;
296}
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition RNGWrapper.h:154
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition RNGWrapper.h:108
SG::WriteHandle< InDetSimDataCollection > m_simDataCollMap
SDO Map handle.
std::vector< std::unique_ptr< SiHitCollection > > m_hitCollPtrs
SG::WriteHandle< SCT_RDO_Container > m_rdoContainer
RDO container handle.
std::vector< bool > m_processedElements
vector of processed elements - set by digitizeHits() *‍/
void digitizeAllHits(const EventContext &ctx, SG::WriteHandle< SCT_RDO_Container > *rdoContainer, SG::WriteHandle< InDetSimDataCollection > *simDataCollMap, std::vector< bool > *processedElements, TimedHitCollection< SiHit > *thpcsi, CLHEP::HepRandomEngine *rndmEngine)
digitize all hits
void digitizeNonHits(const EventContext &ctx, SG::WriteHandle< SCT_RDO_Container > *rdoContainer, SG::WriteHandle< InDetSimDataCollection > *simDataCollMap, const std::vector< bool > *processedElements, CLHEP::HepRandomEngine *rndmEngine) const
digitize SCT without hits

◆ prepareEvent()

StatusCode ITk::StripDigitizationTool::prepareEvent ( const EventContext & ctx,
unsigned int  )
finaloverridevirtual

Called before processing physics events.

Definition at line 252 of file StripDigitizationTool.cxx.

252 {
253 ATH_MSG_VERBOSE("StripDigitizationTool::prepareEvent()");
254 // Create the IdentifiableContainer to contain the digit collections Create
255 // a new RDO container
257 ATH_CHECK(m_rdoContainer.record(std::make_unique<SCT_RDO_Container>(m_detID->wafer_hash_max())));
258
259 // Create a map for the SDO and register it into StoreGate
261 ATH_CHECK(m_simDataCollMap.record(std::make_unique<InDetSimDataCollection>()));
262
263 m_processedElements.clear();
264 m_processedElements.resize(m_detID->wafer_hash_max(), false);
265
266 m_thpcsi = std::make_unique<TimedHitCollection<SiHit>>();
268 return StatusCode::SUCCESS;
269}
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())

◆ processAllSubEvents()

StatusCode ITk::StripDigitizationTool::processAllSubEvents ( const EventContext & ctx)
finaloverridevirtual

Definition at line 220 of file StripDigitizationTool.cxx.

220 {
221 if (prepareEvent(ctx, 0).isFailure()) {
222 return StatusCode::FAILURE;
223 }
224 // Set the RNG to use for this event.
225 ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this);
226 rngWrapper->setSeed( name(), ctx );
227 CLHEP::HepRandomEngine *rndmEngine = rngWrapper->getEngine(ctx);
228
229 ATH_MSG_VERBOSE("Begin digitizeAllHits");
230 if (m_enableHits and (not getNextEvent(ctx).isFailure())) {
232 } else {
233 ATH_MSG_DEBUG("no hits found in event!");
234 }
235 ATH_MSG_DEBUG("Digitized Elements with Hits");
236
237 // loop over elements without hits
238 if (not m_onlyHitElements) {
240 ATH_MSG_DEBUG("Digitized Elements without Hits");
241 }
242
243 m_thpcsi.reset(nullptr);
244
245 ATH_MSG_VERBOSE("Digitize success!");
246 return StatusCode::SUCCESS;
247}
virtual StatusCode prepareEvent(const EventContext &ctx, unsigned int) override final
Called before processing physics events.
StatusCode getNextEvent(const EventContext &ctx)

◆ processBunchXing()

StatusCode ITk::StripDigitizationTool::processBunchXing ( int bunchXing,
SubEventIterator bSubEvents,
SubEventIterator eSubEvents )
finaloverridevirtual

Definition at line 555 of file StripDigitizationTool.cxx.

557 {
558 ATH_MSG_VERBOSE("StripDigitizationTool::processBunchXing() " << bunchXing);
559 // decide if this event will be processed depending on
560 // HardScatterSplittingMode & bunchXing
563 return StatusCode::SUCCESS;
564 }
566 return StatusCode::SUCCESS;
567 }
570 }
571
573 TimedHitCollList hitCollList;
574
575 if ((not (m_mergeSvc->retrieveSubSetEvtData(m_inputObjectName, hitCollList, bunchXing,
576 bSubEvents, eSubEvents).isSuccess())) and
577 hitCollList.empty()) {
578 ATH_MSG_ERROR("Could not fill TimedHitCollList");
579 return StatusCode::FAILURE;
580 } else {
581 ATH_MSG_VERBOSE(hitCollList.size() << " SiHitCollections with key " <<
582 m_inputObjectName << " found");
583 }
584
585 TimedHitCollList::iterator endColl{hitCollList.end()};
586 for (TimedHitCollList::iterator iColl{hitCollList.begin()}; iColl != endColl; ++iColl) {
587 std::unique_ptr<SiHitCollection> hitCollPtr{std::make_unique<SiHitCollection>(*iColl->second)};
588 PileUpTimeEventIndex timeIndex{iColl->first};
589 ATH_MSG_DEBUG("SiHitCollection found with " << hitCollPtr->size() <<
590 " hits");
591 ATH_MSG_VERBOSE("time index info. time: " << timeIndex.time()
592 << " index: " << timeIndex.index()
593 << " type: " << timeIndex.type());
594 m_thpcsi->insert(timeIndex, hitCollPtr.get());
595 m_hitCollPtrs.push_back(std::move(hitCollPtr));
596 }
597
598 return StatusCode::SUCCESS;
599
600}
index_type index() const
the index of the component event in PileUpEventInfo
PileUpType type() const
the pileup type - minbias, cavern, beam halo, signal?
time_type time() const
bunch xing time in ns

◆ SetupRdoOutputType()

void ITk::StripDigitizationTool::SetupRdoOutputType ( Gaudi::Details::PropertyBase & )
private

Called when m_WriteSCT1_RawData is altered.

Does nothing, but required by Gaudi.

Definition at line 605 of file StripDigitizationTool.cxx.

605 {
606}

◆ storeTool()

void ITk::StripDigitizationTool::storeTool ( ISiChargedDiodesProcessorTool * p_processor)
inlineprotected

Definition at line 84 of file StripDigitizationTool.h.

84{m_diodeCollectionTools.push_back(p_processor);}

Member Data Documentation

◆ m_barrelonly

BooleanProperty ITk::StripDigitizationTool::m_barrelonly {this, "BarrelOnly", false, "Only Barrel layers"}
private

Definition at line 130 of file StripDigitizationTool.h.

130{this, "BarrelOnly", false, "Only Barrel layers"};

◆ m_cosmicsRun

BooleanProperty ITk::StripDigitizationTool::m_cosmicsRun {this, "CosmicsRun", false, "Cosmics run selection"}
private

Definition at line 129 of file StripDigitizationTool.h.

129{this, "CosmicsRun", false, "Cosmics run selection"};

◆ m_createNoiseSDO

BooleanProperty ITk::StripDigitizationTool::m_createNoiseSDO {this, "CreateNoiseSDO", false, "Create SDOs for strips with only noise hits (huge increase in SDO collection size"}
private

Definition at line 132 of file StripDigitizationTool.h.

132{this, "CreateNoiseSDO", false, "Create SDOs for strips with only noise hits (huge increase in SDO collection size"};

◆ m_detID

const SCT_ID* ITk::StripDigitizationTool::m_detID {nullptr}
private

Handle to the ID helper.

Definition at line 152 of file StripDigitizationTool.h.

152{nullptr};

◆ m_diodeCollectionTools

std::vector<ISiChargedDiodesProcessorTool*> ITk::StripDigitizationTool::m_diodeCollectionTools
private

Definition at line 154 of file StripDigitizationTool.h.

◆ m_enableHits

BooleanProperty ITk::StripDigitizationTool::m_enableHits {this, "EnableHits", true, "Enable hits"}
private

Definition at line 127 of file StripDigitizationTool.h.

127{this, "EnableHits", true, "Enable hits"};

◆ m_HardScatterSplittingMode

IntegerProperty ITk::StripDigitizationTool::m_HardScatterSplittingMode {this, "HardScatterSplittingMode", 0, "Control pileup & signal splitting. Process all SiHit or just those from signal or background events"}
private

Definition at line 133 of file StripDigitizationTool.h.

133{this, "HardScatterSplittingMode", 0, "Control pileup & signal splitting. Process all SiHit or just those from signal or background events"};

◆ m_HardScatterSplittingSkipper

bool ITk::StripDigitizationTool::m_HardScatterSplittingSkipper {false}
private

Definition at line 157 of file StripDigitizationTool.h.

157{false};

◆ m_hitCollPtrs

std::vector<std::unique_ptr<SiHitCollection> > ITk::StripDigitizationTool::m_hitCollPtrs
private

Definition at line 156 of file StripDigitizationTool.h.

◆ m_hitsContainerKey

SG::ReadHandleKey<SiHitCollection> ITk::StripDigitizationTool::m_hitsContainerKey {this, "InputObjectName", "StripHits", "Input HITS collection name"}
private

Definition at line 137 of file StripDigitizationTool.h.

137{this, "InputObjectName", "StripHits", "Input HITS collection name"};

◆ m_inputObjectName

std::string ITk::StripDigitizationTool::m_inputObjectName {""}
private

Definition at line 138 of file StripDigitizationTool.h.

138{""};

◆ m_mergeSvc

ServiceHandle<PileUpMergeSvc> ITk::StripDigitizationTool::m_mergeSvc {this, "MergeSvc", "PileUpMergeSvc", "Merge service used in Pixel & SCT digitization"}
private

Definition at line 150 of file StripDigitizationTool.h.

150{this, "MergeSvc", "PileUpMergeSvc", "Merge service used in Pixel & SCT digitization"};

◆ m_onlyHitElements

BooleanProperty ITk::StripDigitizationTool::m_onlyHitElements {this, "OnlyHitElements", false, "Process only elements with hits"}
private

Definition at line 128 of file StripDigitizationTool.h.

128{this, "OnlyHitElements", false, "Process only elements with hits"};

◆ m_onlyUseContainerName

BooleanProperty ITk::StripDigitizationTool::m_onlyUseContainerName {this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."}
private

Definition at line 136 of file StripDigitizationTool.h.

136{this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."};

◆ m_processedElements

std::vector<bool> ITk::StripDigitizationTool::m_processedElements
private

vector of processed elements - set by digitizeHits() *‍/

Definition at line 155 of file StripDigitizationTool.h.

◆ m_randomDisabledCells

BooleanProperty ITk::StripDigitizationTool::m_randomDisabledCells {this, "RandomDisabledCells", false, "Use Random disabled cells, default no"}
private

Definition at line 131 of file StripDigitizationTool.h.

131{this, "RandomDisabledCells", false, "Use Random disabled cells, default no"};

◆ m_rdoContainer

SG::WriteHandle<SCT_RDO_Container> ITk::StripDigitizationTool::m_rdoContainer
private

RDO container handle.

Definition at line 141 of file StripDigitizationTool.h.

◆ m_rdoContainerKey

SG::WriteHandleKey<SCT_RDO_Container> ITk::StripDigitizationTool::m_rdoContainerKey {this, "OutputObjectName", "SCT_RDOs", "Output Object name"}
private

Definition at line 140 of file StripDigitizationTool.h.

140{this, "OutputObjectName", "SCT_RDOs", "Output Object name"};

◆ m_rndmSvc

ServiceHandle<IAthRNGSvc> ITk::StripDigitizationTool::m_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""}
private

Random number service.

Definition at line 149 of file StripDigitizationTool.h.

149{this, "RndmSvc", "AthRNGSvc", ""};

◆ m_sct_FrontEnd

ToolHandle<IFrontEnd> ITk::StripDigitizationTool::m_sct_FrontEnd {this, "FrontEnd", "StripFrontEnd", "Handle the Front End Electronic tool"}
private

Definition at line 146 of file StripDigitizationTool.h.

146{this, "FrontEnd", "StripFrontEnd", "Handle the Front End Electronic tool"};

◆ m_sct_RandomDisabledCellGenerator

ToolHandle<IRandomDisabledCellGenerator> ITk::StripDigitizationTool::m_sct_RandomDisabledCellGenerator {this, "RandomDisabledCellGenerator", "StripRandomDisabledCellGenerator", ""}
private

Definition at line 148 of file StripDigitizationTool.h.

148{this, "RandomDisabledCellGenerator", "StripRandomDisabledCellGenerator", ""};

◆ m_sct_SurfaceChargesGenerator

ToolHandle<ISurfaceChargesGenerator> ITk::StripDigitizationTool::m_sct_SurfaceChargesGenerator {this, "SurfaceChargesGenerator", "StripSurfaceChargesGenerator", "Choice of using a more detailed charge drift model"}
private

Definition at line 147 of file StripDigitizationTool.h.

147{this, "SurfaceChargesGenerator", "StripSurfaceChargesGenerator", "Choice of using a more detailed charge drift model"};

◆ m_simDataCollMap

SG::WriteHandle<InDetSimDataCollection> ITk::StripDigitizationTool::m_simDataCollMap
private

SDO Map handle.

Definition at line 143 of file StripDigitizationTool.h.

◆ m_simDataCollMapKey

SG::WriteHandleKey<InDetSimDataCollection> ITk::StripDigitizationTool::m_simDataCollMapKey {this, "OutputSDOName", "StripSDO_Map", "Output SDO container name"}
private

Definition at line 142 of file StripDigitizationTool.h.

142{this, "OutputSDOName", "StripSDO_Map", "Output SDO container name"};

◆ m_stripDetEleCollKey

SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> ITk::StripDigitizationTool::m_stripDetEleCollKey {this, "StripDetEleCollKey", "ITkStripDetectorElementCollection", "Key of SiDetectorElementCollection for SCT"}
private

Definition at line 144 of file StripDigitizationTool.h.

144{this, "StripDetEleCollKey", "ITkStripDetectorElementCollection", "Key of SiDetectorElementCollection for SCT"};

◆ m_tfix

FloatProperty ITk::StripDigitizationTool::m_tfix {this, "FixedTime", -999., "Fixed time for Cosmics run selection"}
private

Definition at line 126 of file StripDigitizationTool.h.

126{this, "FixedTime", -999., "Fixed time for Cosmics run selection"};

◆ m_thpcsi

std::unique_ptr<TimedHitCollection<SiHit> > ITk::StripDigitizationTool::m_thpcsi {nullptr}
private

Definition at line 153 of file StripDigitizationTool.h.

153{nullptr};

◆ m_WriteSCT1_RawData

BooleanProperty ITk::StripDigitizationTool::m_WriteSCT1_RawData {this, "WriteSCT1_RawData", false, "Write out SCT1_RawData rather than SCT3_RawData"}
private

Definition at line 134 of file StripDigitizationTool.h.

134{this, "WriteSCT1_RawData", false, "Write out SCT1_RawData rather than SCT3_RawData"};

The documentation for this class was generated from the following files: