ATLAS Offline Software
Loading...
Searching...
No Matches
AFP_PileUpTool Class Reference

#include <AFP_PileUpTool.h>

Inheritance diagram for AFP_PileUpTool:

Public Member Functions

 AFP_PileUpTool (const std::string &type, const std::string &name, const IInterface *parent)
virtual ~AFP_PileUpTool ()
virtual StatusCode initialize () override final
virtual StatusCode finalize () override final
StatusCode recoSiHits (const EventContext &ctx, std::unique_ptr< AFP_SiDigiCollection > &siDigiCollection) const
 Creates xAOD for silicon detector.
StatusCode recoToFHits (const EventContext &ctx, std::unique_ptr< AFP_TDDigiCollection > &digitCollection) const
 Creates xAOD for time-of-flight detector.
StatusCode recoAll (const EventContext &ctx, std::unique_ptr< AFP_TDDigiCollection > &digitCollection, std::unique_ptr< AFP_SiDigiCollection > &siDigiCollection) const
virtual StatusCode prepareEvent (const EventContext &ctx, const unsigned int nInputEvents) override final
 called before the subevts loop. Not (necessarily) able to access SubEvents
virtual StatusCode processBunchXing (int bunchXing, SubEventIterator bSubEvents, SubEventIterator eSubEvents) override final
 called for each active bunch-crossing to process current SubEvents bunchXing is in ns
virtual StatusCode mergeEvent (const EventContext &ctx) override final
 return false if not interested in certain xing times (in ns) implemented by default in PileUpToolBase as FirstXing<=bunchXing<=LastXing
virtual StatusCode processAllSubEvents (const EventContext &ctx) override final

Protected Member Functions

void newXAODHitToF (std::unique_ptr< xAOD::AFPToFHitContainer > &tofHitContainer, std::unique_ptr< AFP_TDDigiCollection > &collection) const
 Method that creates a new AFPToFHit and sets it valus according to #digi collection.
void newXAODHitSi (std::unique_ptr< xAOD::AFPSiHitContainer > &xAODSiHit, std::unique_ptr< AFP_SiDigiCollection > &collection) const
 Method that creates a new AFPSiHit and sets it valus according to #digi collection.

Protected Attributes

std::unique_ptr< AFP_TDDigiCollectionm_digitCollection
std::unique_ptr< AFP_SiDigiCollectionm_SiDigiCollection

Private Types

enum  QEFF_VER { QE1 =1 , QE2 =2 , nQEffOpts =3 }

Private Member Functions

StatusCode fillTDDigiCollection (AFP_TDSimHitCollection &AFP_TDSimHitColl, CLHEP::HepRandomEngine *rndEngine, const EventContext &ctx)
StatusCode fillTDDigiCollection (TimedHitCollection< AFP_TDSimHit > &thpcAFP, CLHEP::HepRandomEngine *, const EventContext &ctx, std::unique_ptr< AFP_TDDigiCollection > &digitCollection)
StatusCode fillSiDigiCollection (AFP_SIDSimHitCollection &AFP_SIDSimHitColl, const EventContext &ctx)
StatusCode fillSiDigiCollection (TimedHitCollection< AFP_SIDSimHit > &thpcAFP, const EventContext &ctx, std::unique_ptr< AFP_SiDigiCollection > &siDigiCollection)
void createTDDigi (int Station, int Detector, int SensitiveElement, float GlobalTime, float WafeLength, CLHEP::HepRandomEngine *rndEngine)
StatusCode StoreTDDigi (const EventContext &ctx, std::unique_ptr< AFP_TDDigiCollection > &digitCollection) const
void createSiDigi (const EventContext &ctx, int Station, int Detector, int PixelRow, int PixelCol, float PreStepX, float PreStepY, float PreStepZ, float PostStepX, float PostStepY, float PostStepZ, float DepEnergy)
StatusCode StoreSiDigi (const EventContext &ctx, std::unique_ptr< AFP_SiDigiCollection > &siDigiCollection)
void setupQuantumEff ()
void setupTDCOffsets ()
double generateSiNoise (CLHEP::HepRandomEngine *rndEngine) const
 Function that provides random noise (in charge units)
double generateSiCCE (CLHEP::HepRandomEngine *rndEngine) const
 Function that provides charge collection efficiency.
int charge2tot (int) const
 Function that converts quasi-continous charge to discrete time-over-threshold.
int tot2charge (int) const
 Function that converts discrete time-over-threshold to discrete charge.
void addSignalFunc (TH1F &, double) const
 Adds pre-calculated single photoelectron signal function stored in m_SignalVect to the passed histogram.
double getQE (double) const
 Provides quantum efficiency for given wavelength (in nm)
void resetSignalHistograms ()
 Invokes Reset() on all m_SignalHist objects.
bool isPhotoelectronInduced (double, CLHEP::HepRandomEngine *) const
 Returns random response if the photon of given wavelegth induces the photoelectron.
void addPhotoconvTimeSmear (double &, CLHEP::HepRandomEngine *) const
 Modifies the hit time passed as an argument by the photoconversion time smearing.
double getTDC (const TH1F &) const
 Returns the TDC determined from the signal shape passed as an argument.
double getADC (const TH1F &, const double) const
 Returns the ADC determined from the signal shape passed as an (1st) argument; 2nd arg is peak value.
double SignalFun (double Time, double RiseTime, double FallTime, double offset=0.0) const

Private Attributes

Gaudi::Property< std::string > m_totToChargeTransfExpr {this, "TotToChargeTransfExpr", "1909 + x*363 + x*x*141", "Function that transforms time-over-threshold to charge"}
 Function that transforms time-over-threshold to charge.
Gaudi::Property< std::string > m_totToChargeTransfName {this, "TotToChargeTransfName", "TotToChargeTransfFunction", "Name of the function that transforms time-over-threshold to charge"}
TF1 m_totToChargeTransformation
ServiceHandle< PileUpMergeSvcm_mergeSvc {this, "mergeSvc", "PileUpMergeSvc", ""}
ServiceHandle< IAthRNGSvcm_randomSvc {this, "RndmSvc", "AthRNGSvc", ""}
Gaudi::Property< std::string > m_randomStreamName {this, "RandomStreamName", "AFPRndEng", ""}
BooleanProperty m_onlyUseContainerName {this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."}
SG::ReadHandleKey< AFP_TDSimHitCollectionm_TDSimHitCollectionKey {this, "TDSimHitCollectionName", "AFP_TDSimHitCollection"}
std::string m_TDSimHitCollectionName {""}
SG::WriteHandleKey< AFP_TDDigiCollectionm_TDDigiCollectionKey {this, "TDDigiCollectionName", "AFP_TDDigiCollection", "Name of the Collection to hold the output from the AFP digitization, TD part"}
SG::WriteHandleKey< xAOD::AFPToFHitContainerm_AFPHitsContainerNameToF {this, "AFPHitsContainerNameToF", "AFPToFHitContainer"}
SG::ReadHandleKey< AFP_SIDSimHitCollectionm_SIDSimHitCollectionKey {this, "SIDSimHitCollectionName", "AFP_SIDSimHitCollection"}
std::string m_SIDSimHitCollectionName {""}
SG::WriteHandleKey< AFP_SiDigiCollectionm_SiDigiCollectionKey {this, "SiDigiCollectionName", "AFP_SiDigiCollection", "Name of the Collection to hold the output from the AFP digitization, SiD part"}
SG::WriteHandleKey< xAOD::AFPSiHitContainerm_AFPSiHitsContainerName {this, "AFPSiHitsContainerName", "AFPSiHitContainer",""}
Gaudi::Property< double > m_CollectionEff {this, "CollectionEff", 0.6, "Collection efficiency"}
Gaudi::Property< double > m_ConversionSpr {this, "ConversionSpr", 40.0, " Photon-Electron conversion spread in ps"}
Gaudi::Property< double > m_RiseTime {this, "RiseTime", 400., "Pulse rise time in ps"}
Gaudi::Property< double > m_FallTime {this, "FallTime", 1200., "Pulse fall time in ps"}
Gaudi::Property< double > m_TofSignalTimeRangeLength {this, "TofSignalTimeRangeLength", 4000., "in ps"}
Gaudi::Property< double > m_TimeOffset {this, "TimeOffset", 104500., "Offset reflecting time that proton travels from IP to AFP"}
Gaudi::Property< double > m_CfSignalDelay {this, "CfSignalDelay", 200., "Pulse delay for const. frac. discrimination"}
Gaudi::Property< double > m_CfdThr {this, "CfdThr", 0.5, "Constant fraction threshold"}
Gaudi::Property< double > m_SiT_ChargeCollEff {this, "SiT_ChargeCollEff", 0.55, "CCE, adjusted to describe data"}
Gaudi::Property< double > m_SiT_ChargeCollEffSigma {this, "SiT_ChargeCollEffSigma", 0.2, "sigma(CCE), adjusted to describe data"}
Gaudi::Property< double > m_SiT_NoiseMu {this, "SiT_NoiseMu", 160., "unit = number of eh pairs"}
Gaudi::Property< double > m_SiT_NoiseSigma {this, "SiT_NoiseSigma", 10., "unit = number of eh pairs"}
Gaudi::Property< double > m_SiT_Energy2ChargeFactor {this, "SiT_Energy2ChargeFactor", 1000000./3.6, "number of eh pairs per MeV"}
Gaudi::Property< int > m_SiT_ToTThresholdForHit {this, "SiT_ChargeThresholdForHit", 1, ""}
Gaudi::Property< int > m_QEffVer {this, "QEffVer", 1, "quantum efficiency version; QE1=1, QE2=2, nQEffOpts=3"}
AFP_TDSimHitCollection m_mergedTDSimHitList
AFP_SIDSimHitCollection m_mergedSIDSimHitList
double m_QuantumEff_PMT [82] {}
double m_TDC_offsets [4][4][4] {}
int m_ChargeVsTot_LUT [16] {}
const int m_ArrSize
std::vector< float > m_deposited_charge
std::vector< float > m_deposited_energy
std::vector< double > m_SignalVect
 vector with pre-calculated single signal from the photoelectron
TH1F m_SignalHist [4][4][4] {}
 array of histograms storing final signals in the PMTs

structors and AlgTool implementation

Gaudi::Property< int > m_firstXing
Gaudi::Property< int > m_lastXing
Gaudi::Property< int > m_vetoPileUpTruthLinks
bool m_filterPassed {true}
virtual bool toProcess (int bunchXing) const override
 the method this base class helps implementing
virtual bool filterPassed () const override
 dummy implementation of passing filter
virtual void resetFilter () override
 dummy implementation of filter reset

Detailed Description

Definition at line 43 of file AFP_PileUpTool.h.

Member Enumeration Documentation

◆ QEFF_VER

Enumerator
QE1 
QE2 
nQEffOpts 

Definition at line 164 of file AFP_PileUpTool.h.

Constructor & Destructor Documentation

◆ AFP_PileUpTool()

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

Definition at line 19 of file AFP_PileUpTool.cxx.

21 :
22 PileUpToolBase(type, name, parent),
23 m_totToChargeTransformation ("totToChargeTransformation", "1909 + x*363 + x*x*141"),
24 m_ArrSize(645120)
25{
26}
TF1 m_totToChargeTransformation
const int m_ArrSize
PileUpToolBase(const std::string &type, const std::string &name, const IInterface *parent)

◆ ~AFP_PileUpTool()

virtual AFP_PileUpTool::~AFP_PileUpTool ( )
inlinevirtual

Definition at line 50 of file AFP_PileUpTool.h.

50{};

Member Function Documentation

◆ addPhotoconvTimeSmear()

void AFP_PileUpTool::addPhotoconvTimeSmear ( double & t,
CLHEP::HepRandomEngine * rndEngine ) const
private

Modifies the hit time passed as an argument by the photoconversion time smearing.

Definition at line 523 of file AFP_PileUpTool.cxx.

524{
525 t += CLHEP::RandGaussQ::shoot(rndEngine, 5.* m_ConversionSpr, m_ConversionSpr);
526}
Gaudi::Property< double > m_ConversionSpr

◆ addSignalFunc()

void AFP_PileUpTool::addSignalFunc ( TH1F & h,
double x ) const
private

Adds pre-calculated single photoelectron signal function stored in m_SignalVect to the passed histogram.

Definition at line 707 of file AFP_PileUpTool.cxx.

708{
709 int xDiscrete = static_cast<int>(x);
710 int iMin = xDiscrete;
711 int iMax = h.GetNbinsX();
712 if(xDiscrete<0)
713 {
714 iMin = 0;
715 iMax = h.GetNbinsX() + xDiscrete - 1;
716 }
717 for(int i = iMin; i<=iMax; ++i){
718 h.SetBinContent(i, h.GetBinContent(i) + m_SignalVect[i-xDiscrete]);
719 }
720}
#define x
std::vector< double > m_SignalVect
vector with pre-calculated single signal from the photoelectron

◆ charge2tot()

int AFP_PileUpTool::charge2tot ( int ch) const
private

Function that converts quasi-continous charge to discrete time-over-threshold.

Definition at line 148 of file AFP_PileUpTool.cxx.

149{
150 int i = 0;
151 do{
152 if( ch < m_ChargeVsTot_LUT[i] ) break;
153 else ++i;
154 } while( i<16 );
155 return i;
156}
int m_ChargeVsTot_LUT[16]

◆ createSiDigi()

void AFP_PileUpTool::createSiDigi ( const EventContext & ctx,
int Station,
int Detector,
int PixelRow,
int PixelCol,
float PreStepX,
float PreStepY,
float PreStepZ,
float PostStepX,
float PostStepY,
float PostStepZ,
float DepEnergy )
private

Definition at line 624 of file AFP_PileUpTool.cxx.

625{
626 ATH_MSG_DEBUG ( " iterating Pmt, station " << Station << ", detector " << Detector << ", pixel_col " << PixelCol << ", pixel_row " << PixelRow << ", dep_energy" << DepEnergy << " (x,y,z)_pre (" << PreStepX <<"," << PreStepY <<"," << PreStepZ <<"), (x,y,z)_post (" << PostStepX <<"," << PostStepY <<"," << PostStepZ <<")" );
627
628 ATHRNG::RNGWrapper* rngWrapper = m_randomSvc->getEngine(this, m_randomStreamName);
629 rngWrapper->setSeed( m_randomStreamName, ctx );
630 CLHEP::HepRandomEngine* rngEngine = rngWrapper->getEngine(ctx);
631
632 double cce = generateSiCCE(rngEngine);
633 double depositedCharge = DepEnergy * cce * m_SiT_Energy2ChargeFactor;
634
635 ATH_MSG_DEBUG ( "deposted charge for given hit " << depositedCharge );
636
637 if ((PixelCol>=336) || (PixelRow >= 80) || (Station >= 4) || (Detector >= 6 ) )
638 {
639 if (Detector == 11)
640 {
641 ATH_MSG_DEBUG ( "Hit in the vacuum layer in front of the station " << Station );
642 }
643 else
644 {
645 ATH_MSG_WARNING ( "WRONG NUMBER of PIXEL coordinates or station or detector !!!:" );
646 ATH_MSG_WARNING ( "station [max 4] " << Station << ", detector [max 6]" << Detector << ", pixel_col [max 336] " << PixelCol << ", pixel_row [max 80] " << PixelRow );
647 }
648 return;
649 }
650
651 m_deposited_charge[6*336*80*Station + 80*336*Detector + 80*PixelCol + PixelRow] += depositedCharge;
652 m_deposited_energy[6*336*80*Station + 80*336*Detector + 80*PixelCol + PixelRow] += DepEnergy;
653}
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
std::vector< float > m_deposited_energy
Gaudi::Property< double > m_SiT_Energy2ChargeFactor
double generateSiCCE(CLHEP::HepRandomEngine *rndEngine) const
Function that provides charge collection efficiency.
std::vector< float > m_deposited_charge
ServiceHandle< IAthRNGSvc > m_randomSvc
Gaudi::Property< std::string > m_randomStreamName
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition RNGWrapper.h:169
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition RNGWrapper.h:134

◆ createTDDigi()

void AFP_PileUpTool::createTDDigi ( int Station,
int Detector,
int SensitiveElement,
float GlobalTime,
float WafeLength,
CLHEP::HepRandomEngine * rndEngine )
private

Definition at line 529 of file AFP_PileUpTool.cxx.

530{
531 ATH_MSG_DEBUG ( " iterating Pmt " << Station << " " << Detector << " " << SensitiveElement << " " << GlobalTime << " " << WaveLength );
532
533 if ( Station >3 || Station < 0 || Detector >49 || Detector < 10 || (SensitiveElement-1)/2>1 || (SensitiveElement-1)/2<0) {
534 ATH_MSG_ERROR ( "Wrong station, detector or sensitive detector id" );
535 return;
536 }
537
538 if( isPhotoelectronInduced(WaveLength, rndEngine) )
539 {
540 const int train = Detector/10 - 1;
541 const int bar = Detector%10-1;
542 //check index value against array extent
543 if (train<0 or train >3 or bar<0 or bar>3){
544 ATH_MSG_ERROR ( "Wrong train or bar; allowed values are 0-3, actual values "<<train<<", "<<bar);
545 return;
546 }
547
548 double photoelectronTime = GlobalTime - m_TimeOffset - m_TDC_offsets[Station][train][bar];
549 addPhotoconvTimeSmear( photoelectronTime, rndEngine );
550 addSignalFunc( m_SignalHist[Station][train][bar], photoelectronTime );
551 }
552}
#define ATH_MSG_ERROR(x)
double m_TDC_offsets[4][4][4]
void addPhotoconvTimeSmear(double &, CLHEP::HepRandomEngine *) const
Modifies the hit time passed as an argument by the photoconversion time smearing.
void addSignalFunc(TH1F &, double) const
Adds pre-calculated single photoelectron signal function stored in m_SignalVect to the passed histogr...
TH1F m_SignalHist[4][4][4]
array of histograms storing final signals in the PMTs
bool isPhotoelectronInduced(double, CLHEP::HepRandomEngine *) const
Returns random response if the photon of given wavelegth induces the photoelectron.
Gaudi::Property< double > m_TimeOffset

◆ fillSiDigiCollection() [1/2]

StatusCode AFP_PileUpTool::fillSiDigiCollection ( AFP_SIDSimHitCollection & AFP_SIDSimHitColl,
const EventContext & ctx )
private

Definition at line 489 of file AFP_PileUpTool.cxx.

490{
491 AFP_SIDSimHitConstIter it = AFP_SIDSimHitColl.begin();
492 AFP_SIDSimHitConstIter itend = AFP_SIDSimHitColl.end();
493
494 m_deposited_charge.assign(m_ArrSize, 0.f); // here just 6 layers per detector are considered
495
496 for (; it != itend; ++it) {
497 int Station = it->m_nStationID;
498 int Detector = it->m_nDetectorID;
499 int PixelRow = it->m_nPixelRow;
500 int PixelCol = it->m_nPixelCol;
501 float PreStepX = it->m_fPreStepX;
502 float PreStepY = it->m_fPreStepY;
503 float PreStepZ = it->m_fPreStepZ;
504 float PostStepX = it->m_fPostStepX;
505 float PostStepY = it->m_fPostStepY;
506 float PostStepZ = it->m_fPostStepZ;
507 float DepEnergy = it->m_fEnergyDeposit;
508
509 createSiDigi(ctx, Station, Detector, PixelRow, PixelCol, PreStepX, PreStepY, PreStepZ, PostStepX, PostStepY, PostStepZ, DepEnergy);
510 }
512 return StatusCode::SUCCESS;
513}
AtlasHitsVector< AFP_SIDSimHit >::const_iterator AFP_SIDSimHitConstIter
#define ATH_CHECK
Evaluate an expression and check for errors.
void createSiDigi(const EventContext &ctx, int Station, int Detector, int PixelRow, int PixelCol, float PreStepX, float PreStepY, float PreStepZ, float PostStepX, float PostStepY, float PostStepZ, float DepEnergy)
std::unique_ptr< AFP_SiDigiCollection > m_SiDigiCollection
StatusCode StoreSiDigi(const EventContext &ctx, std::unique_ptr< AFP_SiDigiCollection > &siDigiCollection)
const_iterator begin() const
const_iterator end() const

◆ fillSiDigiCollection() [2/2]

StatusCode AFP_PileUpTool::fillSiDigiCollection ( TimedHitCollection< AFP_SIDSimHit > & thpcAFP,
const EventContext & ctx,
std::unique_ptr< AFP_SiDigiCollection > & siDigiCollection )
private

Definition at line 460 of file AFP_PileUpTool.cxx.

461{
462 TimedHitCollection<AFP_SIDSimHit> thpc = thpcAFP;
464
465 m_deposited_charge.assign(m_ArrSize, 0.f); // here just 6 layers per detector are considered
466
467 while (thpc.nextDetectorElement(i, e)) {
468 for (it = i; it != e; ++it) {
469 int Station = (*it)->m_nStationID;
470 int Detector = (*it)->m_nDetectorID;
471 int PixelRow = (*it)->m_nPixelRow;
472 int PixelCol = (*it)->m_nPixelCol;
473 float PreStepX = (*it)->m_fPreStepX;
474 float PreStepY = (*it)->m_fPreStepY;
475 float PreStepZ = (*it)->m_fPreStepZ;
476 float PostStepX = (*it)->m_fPostStepX;
477 float PostStepY = (*it)->m_fPostStepY;
478 float PostStepZ = (*it)->m_fPostStepZ;
479 float DepEnergy = (*it)->m_fEnergyDeposit;
480
481 createSiDigi(ctx, Station, Detector, PixelRow, PixelCol, PreStepX, PreStepY, PreStepZ, PostStepX, PostStepY, PostStepZ, DepEnergy);
482 }
483 }
484 ATH_CHECK(StoreSiDigi(ctx, siDigiCollection));
485 return StatusCode::SUCCESS;
486}
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

◆ fillTDDigiCollection() [1/2]

StatusCode AFP_PileUpTool::fillTDDigiCollection ( AFP_TDSimHitCollection & AFP_TDSimHitColl,
CLHEP::HepRandomEngine * rndEngine,
const EventContext & ctx )
private

Definition at line 437 of file AFP_PileUpTool.cxx.

438{
440
441 AFP_TDSimHitConstIter it = AFP_TDSimHitColl.begin();
442 AFP_TDSimHitConstIter itend = AFP_TDSimHitColl.end();
443
444 for (; it != itend; ++it) {
445 int Station = it->m_nStationID;
446 int Detector = it->m_nDetectorID;
447 int SensitiveElement = it->m_nSensitiveElementID;
448 float GlobalTime = it->m_fGlobalTime;
449 float WaveLength = it->m_fWaveLength;
450
451 if(SensitiveElement%2 == 1) createTDDigi(Station, Detector, SensitiveElement, GlobalTime, WaveLength, rndEngine);
452 }
453
455
456 return StatusCode::SUCCESS;
457}
AtlasHitsVector< AFP_TDSimHit >::const_iterator AFP_TDSimHitConstIter
StatusCode StoreTDDigi(const EventContext &ctx, std::unique_ptr< AFP_TDDigiCollection > &digitCollection) const
std::unique_ptr< AFP_TDDigiCollection > m_digitCollection
void resetSignalHistograms()
Invokes Reset() on all m_SignalHist objects.
void createTDDigi(int Station, int Detector, int SensitiveElement, float GlobalTime, float WafeLength, CLHEP::HepRandomEngine *rndEngine)

◆ fillTDDigiCollection() [2/2]

StatusCode AFP_PileUpTool::fillTDDigiCollection ( TimedHitCollection< AFP_TDSimHit > & thpcAFP,
CLHEP::HepRandomEngine * rndEngine,
const EventContext & ctx,
std::unique_ptr< AFP_TDDigiCollection > & digitCollection )
private

Definition at line 413 of file AFP_PileUpTool.cxx.

414{
416
417 TimedHitCollection<AFP_TDSimHit> thpc = thpcAFP;
419
420 while (thpc.nextDetectorElement(i, e)) {
421 for (it = i; it != e; ++it) {
422 int Station = (*it)->m_nStationID;
423 int Detector = (*it)->m_nDetectorID;
424 int SensitiveElement = (*it)->m_nSensitiveElementID;
425 float GlobalTime = (*it)->m_fGlobalTime;
426 float WaveLength = (*it)->m_fWaveLength;
427
428 if(SensitiveElement%2 == 1) createTDDigi(Station, Detector, SensitiveElement, GlobalTime, WaveLength, rndEngine);
429 }
430 }
431
432 ATH_CHECK(StoreTDDigi(ctx, digitCollection));
433 return StatusCode::SUCCESS;
434}

◆ filterPassed()

virtual bool PileUpToolBase::filterPassed ( ) const
inlineoverridevirtualinherited

dummy implementation of passing filter

Definition at line 49 of file PileUpToolBase.h.

49{ return m_filterPassed; }

◆ finalize()

StatusCode AFP_PileUpTool::finalize ( )
finaloverridevirtual

Definition at line 395 of file AFP_PileUpTool.cxx.

396{
397 return StatusCode::SUCCESS;
398}

◆ generateSiCCE()

double AFP_PileUpTool::generateSiCCE ( CLHEP::HepRandomEngine * rndEngine) const
private

Function that provides charge collection efficiency.

Definition at line 615 of file AFP_PileUpTool.cxx.

616{
617 double eff = CLHEP::RandGaussQ::shoot(rndEngine, m_SiT_ChargeCollEff, m_SiT_ChargeCollEffSigma);
618 eff = eff>1?1:eff;
619 eff = eff<0?0:eff;
620 return eff;
621}
Gaudi::Property< double > m_SiT_ChargeCollEffSigma
Gaudi::Property< double > m_SiT_ChargeCollEff

◆ generateSiNoise()

double AFP_PileUpTool::generateSiNoise ( CLHEP::HepRandomEngine * rndEngine) const
inlineprivate

Function that provides random noise (in charge units)

Definition at line 656 of file AFP_PileUpTool.cxx.

657{
658 return CLHEP::RandGaussQ::shoot(rndEngine, m_SiT_NoiseMu, m_SiT_NoiseSigma);
659}
Gaudi::Property< double > m_SiT_NoiseMu
Gaudi::Property< double > m_SiT_NoiseSigma

◆ getADC()

double AFP_PileUpTool::getADC ( const TH1F & hSignal,
const double threshold ) const
private

Returns the ADC determined from the signal shape passed as an (1st) argument; 2nd arg is peak value.

Definition at line 574 of file AFP_PileUpTool.cxx.

575{
576 int first = hSignal.FindFirstBinAbove(threshold);
577 int last = first;
578 while( hSignal.GetBinContent(++last) > threshold && last < hSignal.GetNbinsX() );
579 double ADC = last-first;
580 return ADC;
581}
bool first
Definition DeMoScan.py:534

◆ getQE()

double AFP_PileUpTool::getQE ( double lambda) const
private

Provides quantum efficiency for given wavelength (in nm)

Definition at line 723 of file AFP_PileUpTool.cxx.

724{
725 int id = (static_cast<int>(lambda)-200)/5;
726 if(id > 81 || id < 0) return 0;
727 return m_QuantumEff_PMT[id];
728}
double m_QuantumEff_PMT[82]

◆ getTDC()

double AFP_PileUpTool::getTDC ( const TH1F & hSignal) const
private

Returns the TDC determined from the signal shape passed as an argument.

Definition at line 555 of file AFP_PileUpTool.cxx.

556{
557 const int nBinsDelay = static_cast<int>(m_CfSignalDelay); // assuming that 1 bin = 1 ps
558 TH1F hSignal_delayed(hSignal);
559 for(int l = hSignal.GetNbinsX(); l>0; l-- ){
560 double val = l > nBinsDelay ? hSignal.GetBinContent(l-nBinsDelay) : 0;
561 hSignal_delayed.SetBinContent(l, val);
562 }
563 TH1F hSignal_forTDC(hSignal);
564 hSignal_forTDC.Add(&hSignal, &hSignal_delayed, -m_CfdThr, 1);
565
566 const int bin = hSignal_forTDC.FindFirstBinAbove(0);
567 double TDC = hSignal_forTDC.GetBinCenter( bin );
568 if( bin-1 <= nBinsDelay ) // very erly signals
569 TDC = 0;
570 return TDC;
571}
Gaudi::Property< double > m_CfdThr
Gaudi::Property< double > m_CfSignalDelay
l
Printing final latex table to .tex output file.
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)

◆ initialize()

StatusCode AFP_PileUpTool::initialize ( )
finaloverridevirtual

Reimplemented from PileUpToolBase.

Definition at line 29 of file AFP_PileUpTool.cxx.

30{
31 ATH_MSG_INFO("AFP_PileUpTool::initialize() called");
32 ATH_MSG_INFO(" CollectionEff: " << m_CollectionEff);
33
34 // Setting up quantum efficincy of PMT (in 5 nm steps)
36
37 m_deposited_charge.resize(m_ArrSize, 0.f); // = 4 x 6 x 336 x 80
38 m_deposited_energy.resize(m_ArrSize, 0.f);
39
40 // Offsets for TOF TDC (to have the average TDC consistent between all trains and bars)
41 for(int i=0; i<4; ++i){
42 for(int j=0; j<4; ++j){
43 for(int k=0; k<4; ++k){
44 m_TDC_offsets[i][j][k] = 0.0;
45 }
46 }
47 }
49
50 m_totToChargeTransformation=TF1(m_totToChargeTransfName.toString().c_str(), m_totToChargeTransfExpr.toString().c_str());
51 for(int i=0; i<16; ++i)
53
54 m_deposited_charge = std::vector<float>(m_ArrSize);
55 m_deposited_energy = std::vector<float>(m_ArrSize);
56
57 m_SignalVect = std::vector<double>( 2*static_cast<unsigned int>( m_TofSignalTimeRangeLength ) );
58 for(unsigned int i=0; i<m_SignalVect.size(); ++i)
59 {
61 }
62
63 for( int i=0; i<4; i++) {
64 for( int j=0; j<4; j++) {
65 for( int k=0; k<4; k++) {
66 // NOTE the signal histograms and the methods processing those signals assume that 1 bin = 1 ps
67 m_SignalHist[i][j][k] = TH1F(Form("m_SignalHist%d%d%d", i, j, k), "", m_TofSignalTimeRangeLength, 0, m_TofSignalTimeRangeLength);
68 }
69 }
70 }
71
72 ATH_CHECK(m_randomSvc.retrieve());
73 ATH_MSG_DEBUG("Retrieved RandomNumber Service");
74
76 ATH_CHECK(m_mergeSvc.retrieve());
77 ATH_MSG_DEBUG("Retrieved PileUpMergeSvc");
78 }
79
80
81 m_mergedTDSimHitList = AFP_TDSimHitCollection("mergedTDSimHitList");
82 m_mergedSIDSimHitList = AFP_SIDSimHitCollection("mergedSIDSimHitList");
83
84 // check the input object names
85 if (m_TDSimHitCollectionKey.key().empty()) {
86 ATH_MSG_FATAL("Property TDSimHitCollectionName not set !");
87 return StatusCode::FAILURE;
88 }
89 if (m_SIDSimHitCollectionKey.key().empty()) {
90 ATH_MSG_FATAL("Property SIDSimHitCollectionName not set !");
91 return StatusCode::FAILURE;
92 }
93
94 // Initialize ReadHandleKeys
97
98 ATH_MSG_INFO("m_onlyUseContainerName = " <<m_onlyUseContainerName);
100 {
102 ATH_MSG_INFO("Input TD SimHits in container : '" <<m_TDSimHitCollectionName << "'");
104 ATH_MSG_INFO("Input SID SimHits in container : '" <<m_SIDSimHitCollectionName << "'");
105 }
106 else
107 {
108 ATH_MSG_INFO("TD SimHits container key: " <<m_TDSimHitCollectionKey);
109 ATH_MSG_INFO("SID SimHits container key: " <<m_SIDSimHitCollectionKey);
110 }
111
112 ATH_CHECK(m_TDDigiCollectionKey.initialize());
113 ATH_CHECK(m_SiDigiCollectionKey.initialize());
114
117
118 return StatusCode::SUCCESS;
119}
AtlasHitsVector< AFP_SIDSimHit > AFP_SIDSimHitCollection
AtlasHitsVector< AFP_TDSimHit > AFP_TDSimHitCollection
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
AFP_SIDSimHitCollection m_mergedSIDSimHitList
SG::ReadHandleKey< AFP_TDSimHitCollection > m_TDSimHitCollectionKey
ServiceHandle< PileUpMergeSvc > m_mergeSvc
Gaudi::Property< double > m_TofSignalTimeRangeLength
SG::WriteHandleKey< xAOD::AFPSiHitContainer > m_AFPSiHitsContainerName
SG::WriteHandleKey< xAOD::AFPToFHitContainer > m_AFPHitsContainerNameToF
Gaudi::Property< std::string > m_totToChargeTransfName
std::string m_TDSimHitCollectionName
double SignalFun(double Time, double RiseTime, double FallTime, double offset=0.0) const
BooleanProperty m_onlyUseContainerName
Gaudi::Property< double > m_RiseTime
Gaudi::Property< std::string > m_totToChargeTransfExpr
Function that transforms time-over-threshold to charge.
Gaudi::Property< double > m_FallTime
SG::WriteHandleKey< AFP_TDDigiCollection > m_TDDigiCollectionKey
std::string m_SIDSimHitCollectionName
SG::WriteHandleKey< AFP_SiDigiCollection > m_SiDigiCollectionKey
Gaudi::Property< double > m_CollectionEff
SG::ReadHandleKey< AFP_SIDSimHitCollection > m_SIDSimHitCollectionKey
AFP_TDSimHitCollection m_mergedTDSimHitList

◆ isPhotoelectronInduced()

bool AFP_PileUpTool::isPhotoelectronInduced ( double lambda,
CLHEP::HepRandomEngine * rndEngine ) const
private

Returns random response if the photon of given wavelegth induces the photoelectron.

Definition at line 516 of file AFP_PileUpTool.cxx.

517{
518 double qEff = getQE( lambda );
519 return CLHEP::RandFlat::shoot(rndEngine, 0.0, 1.0) < qEff*m_CollectionEff;
520}
double getQE(double) const
Provides quantum efficiency for given wavelength (in nm)

◆ mergeEvent()

StatusCode AFP_PileUpTool::mergeEvent ( const EventContext & ctx)
finaloverridevirtual

return false if not interested in certain xing times (in ns) implemented by default in PileUpToolBase as FirstXing<=bunchXing<=LastXing

called at the end of the subevts loop. Not (necessarily) able to access SubEvents

Definition at line 376 of file AFP_PileUpTool.cxx.

377{
378 ATHRNG::RNGWrapper* rngWrapper = m_randomSvc->getEngine(this, m_randomStreamName);
379 rngWrapper->setSeed( m_randomStreamName, ctx );
380 CLHEP::HepRandomEngine* rngEngine = rngWrapper->getEngine(ctx);
381
384
385 SG::WriteHandle<AFP_TDDigiCollection> digitWriteHandle{m_TDDigiCollectionKey, ctx};
386 ATH_CHECK( digitWriteHandle.record(std::move(m_digitCollection)) );
387
388 SG::WriteHandle<AFP_SiDigiCollection> siDigiWriteHandle{m_SiDigiCollectionKey, ctx};
389 ATH_CHECK( siDigiWriteHandle.record(std::move(m_SiDigiCollection)) );
390
391 return StatusCode::SUCCESS;
392}
StatusCode fillTDDigiCollection(AFP_TDSimHitCollection &AFP_TDSimHitColl, CLHEP::HepRandomEngine *rndEngine, const EventContext &ctx)
StatusCode fillSiDigiCollection(AFP_SIDSimHitCollection &AFP_SIDSimHitColl, const EventContext &ctx)
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.

◆ newXAODHitSi()

void AFP_PileUpTool::newXAODHitSi ( std::unique_ptr< xAOD::AFPSiHitContainer > & xAODSiHit,
std::unique_ptr< AFP_SiDigiCollection > & collection ) const
protected

Method that creates a new AFPSiHit and sets it valus according to #digi collection.

Definition at line 165 of file AFP_PileUpTool.cxx.

166{
167 AFP_SiDigiConstIter it = container->begin();
168 AFP_SiDigiConstIter itend = container->end();
169
170 for (; it != itend; ++it) {
171 auto * xAODSiHit = siHitContainer->push_back(std::make_unique<xAOD::AFPSiHit>());
172
173 xAODSiHit->setStationID(it->m_nStationID);
174 xAODSiHit->setPixelLayerID(it->m_nDetectorID);
175 xAODSiHit->setPixelColIDChip(80-it->m_nPixelRow); // Chip is rotated by 90 degree Row-->Col
176 xAODSiHit->setPixelRowIDChip(336-it->m_nPixelCol); // Chip is rotated by 90 degree Col-->Row
177 xAODSiHit->setDepositedCharge( it->m_fADC );
178 int tot = charge2tot( it->m_fADC );
179 tot = tot<16 ? tot : 16;
180 xAODSiHit->setTimeOverThreshold( tot );
181 }
182}
AtlasHitsVector< AFP_SiDigi >::const_iterator AFP_SiDigiConstIter
int charge2tot(int) const
Function that converts quasi-continous charge to discrete time-over-threshold.

◆ newXAODHitToF()

void AFP_PileUpTool::newXAODHitToF ( std::unique_ptr< xAOD::AFPToFHitContainer > & tofHitContainer,
std::unique_ptr< AFP_TDDigiCollection > & collection ) const
protected

Method that creates a new AFPToFHit and sets it valus according to #digi collection.

Definition at line 202 of file AFP_PileUpTool.cxx.

203{
204 AFP_TDDigiConstIter it = container->begin();
205 AFP_TDDigiConstIter itend = container->end();
206
207 for (; it != itend; ++it) {
208 auto * xAODToFHit = tofHitContainer->push_back(std::make_unique<xAOD::AFPToFHit>());
209 xAODToFHit->setStationID(it->m_nStationID);
210 xAODToFHit->setHptdcChannel(-1);
211 xAODToFHit->setBarInTrainID(it->m_nDetectorID%10-1);
212 xAODToFHit->setTrainID(it->m_nDetectorID/10-1);
213 xAODToFHit->setHptdcID(-1);
214 xAODToFHit->setPulseLength(it->m_fADC);
215 xAODToFHit->setTime(it->m_fTDC);
216 }
217}
AtlasHitsVector< AFP_TDDigi >::const_iterator AFP_TDDigiConstIter

◆ prepareEvent()

StatusCode AFP_PileUpTool::prepareEvent ( const EventContext & ctx,
const unsigned int nInputEvents )
finaloverridevirtual

called before the subevts loop. Not (necessarily) able to access SubEvents

Definition at line 316 of file AFP_PileUpTool.cxx.

317{
318 ATH_MSG_DEBUG ( "AFP_PileUpTool::prepareEvent() called for " << nInputEvents << " input events" );
319
320 m_digitCollection = std::make_unique<AFP_TDDigiCollection>();
321 m_mergedTDSimHitList.clear();
322
323 m_SiDigiCollection = std::make_unique<AFP_SiDigiCollection>();
324 m_mergedSIDSimHitList.clear();
325
326 return StatusCode::SUCCESS;
327}

◆ processAllSubEvents()

StatusCode AFP_PileUpTool::processAllSubEvents ( const EventContext & ctx)
finaloverridevirtual

Reimplemented from PileUpToolBase.

Definition at line 220 of file AFP_PileUpTool.cxx.

221{
222 ATH_MSG_DEBUG ( "AFP_PileUpTool::processAllSubEvents()" );
223
226
227 TimedHitCollection<AFP_TDSimHit> thpcAFP_TDPmt;
228 TimedHitCollection<AFP_SIDSimHit> thpcAFP_SiPmt;
229
231 SG::ReadHandle<AFP_TDSimHitCollection> hitCollection(m_TDSimHitCollectionKey, ctx);
232 if (!hitCollection.isValid()) {
233 ATH_MSG_ERROR("Could not get AFP_TDSimHitCollection container " << hitCollection.name() << " from store " << hitCollection.store());
234 return StatusCode::FAILURE;
235 }
236
237 // create a new hits collection
238 thpcAFP_TDPmt = TimedHitCollection<AFP_TDSimHit>(1);
239 thpcAFP_TDPmt.insert(0, hitCollection.cptr());
240 ATH_MSG_DEBUG("AFP_TDSimHitCollection found with " << hitCollection->size() << " hits");
241 }
242 else {
243 TimedTDSimHitCollList TDSimHitCollList;
244 unsigned int numberOfTDSimHits{0};
245 if (not (m_mergeSvc->retrieveSubEvtsData(m_TDSimHitCollectionName, TDSimHitCollList, numberOfTDSimHits).isSuccess()) and TDSimHitCollList.empty()) {
246 ATH_MSG_FATAL ( "Could not fill TimedTDSimHitCollList" );
247 return StatusCode::FAILURE;
248 }
249 ATH_MSG_DEBUG ( " PileUp: Merge " << TDSimHitCollList.size() << " AFP_TDSimHitCollections with key " << m_TDSimHitCollectionName << " found." );
250
251 TimedTDSimHitCollList::iterator iColl (TDSimHitCollList.begin());
252 TimedTDSimHitCollList::iterator endColl(TDSimHitCollList.end());
253
254 while (iColl != endColl) {
255 const AFP_TDSimHitCollection* tmpColl(iColl->second);
256 thpcAFP_TDPmt.insert(iColl->first, tmpColl);
257 ATH_MSG_DEBUG ( " AFP_TDSimHitCollection found with " << tmpColl->size() << " hits " << iColl->first );
258 ++iColl;
259 }
260 }
261
263 SG::ReadHandle<AFP_SIDSimHitCollection> hitCollection(m_SIDSimHitCollectionKey, ctx);
264 if (!hitCollection.isValid()) {
265 ATH_MSG_ERROR("Could not get AFP_SIDSimHitCollection container " << hitCollection.name() << " from store " << hitCollection.store());
266 return StatusCode::FAILURE;
267 }
268
269 // create a new hits collection
270 thpcAFP_SiPmt = TimedHitCollection<AFP_SIDSimHit>(1);
271 thpcAFP_SiPmt.insert(0, hitCollection.cptr());
272 ATH_MSG_DEBUG("AFP_SIDSimHitCollection found with " << hitCollection->size() << " hits");
273 }
274 else {
275 TimedSIDSimHitCollList SIDSimHitCollList;
276 unsigned int numberOfSIDSimHits{0};
277 if (not (m_mergeSvc->retrieveSubEvtsData(m_SIDSimHitCollectionName, SIDSimHitCollList, numberOfSIDSimHits).isSuccess()) and SIDSimHitCollList.empty()) {
278 ATH_MSG_FATAL ( "Could not fill TimedSIDSimHitCollList" );
279 return StatusCode::FAILURE;
280 }
281 ATH_MSG_DEBUG ( " PileUp: Merge " << SIDSimHitCollList.size() << " AFP_SIDSimHitCollections with key " << m_SIDSimHitCollectionName << " found." );
282
283 TimedSIDSimHitCollList::iterator iSiColl (SIDSimHitCollList.begin());
284 TimedSIDSimHitCollList::iterator endSiColl(SIDSimHitCollList.end());
285
286 while (iSiColl != endSiColl) {
287 const AFP_SIDSimHitCollection* tmpSiColl(iSiColl->second);
288 thpcAFP_SiPmt.insert(iSiColl->first, tmpSiColl);
289 ATH_MSG_DEBUG ( " AFP_SIDSimHitCollection found with " << tmpSiColl->size() << " hits " << iSiColl->first );
290 ++iSiColl;
291 }
292 }
293
294 ATHRNG::RNGWrapper* rngWrapper = m_randomSvc->getEngine(this, m_randomStreamName);
295 rngWrapper->setSeed( m_randomStreamName, ctx );
296 CLHEP::HepRandomEngine* rngEngine = rngWrapper->getEngine(ctx);
297
298 std::unique_ptr<AFP_TDDigiCollection> digitCollection = std::make_unique<AFP_TDDigiCollection>();
299 std::unique_ptr<AFP_SiDigiCollection> siDigiCollection = std::make_unique<AFP_SiDigiCollection>();
300
301 ATH_CHECK(fillTDDigiCollection(thpcAFP_TDPmt, rngEngine, ctx, digitCollection));
302 ATH_CHECK(fillSiDigiCollection(thpcAFP_SiPmt, ctx, siDigiCollection));
303
304 ATH_CHECK( recoAll(ctx, digitCollection, siDigiCollection) );
305
306 SG::WriteHandle<AFP_TDDigiCollection> digitWriteHandle{m_TDDigiCollectionKey, ctx};
307 ATH_CHECK( digitWriteHandle.record(std::move(digitCollection)) );
308
309 SG::WriteHandle<AFP_SiDigiCollection> siDigiWriteHandle{m_SiDigiCollectionKey, ctx};
310 ATH_CHECK( siDigiWriteHandle.record(std::move(siDigiCollection)) );
311
312 return StatusCode::SUCCESS;
313}
StatusCode recoAll(const EventContext &ctx, std::unique_ptr< AFP_TDDigiCollection > &digitCollection, std::unique_ptr< AFP_SiDigiCollection > &siDigiCollection) const
void insert(const PileUpTimeEventIndex &timeEventIndex, const AtlasHitsVector< HIT > *inputCollection)
std::list< value_t > type
type of the collection of timed data object

◆ processBunchXing()

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

called for each active bunch-crossing to process current SubEvents bunchXing is in ns

Reimplemented from PileUpToolBase.

Definition at line 330 of file AFP_PileUpTool.cxx.

331{
332 ATH_MSG_DEBUG ( "AFP_PileUpTool::processBunchXing() " << bunchXing );
333 SubEventIterator iEvt = bSubEvents;
334 for (; iEvt!=eSubEvents; ++iEvt) {
335 StoreGateSvc& seStore = *iEvt->ptr()->evtStore();
336 ATH_MSG_VERBOSE ("SubEvt StoreGate " << seStore.name() << " :"
337 << " bunch crossing : " << bunchXing
338 << " time offset : " << iEvt->time()
339 << " event number : " << iEvt->ptr()->eventNumber()
340 << " run number : " << iEvt->ptr()->runNumber()
341 );
342
343 const AFP_TDSimHitCollection* tmpColl = nullptr;
344
345 if (!seStore.retrieve(tmpColl, m_TDSimHitCollectionName).isSuccess()) {
346 ATH_MSG_ERROR ( "SubEvent AFP_TDSimHitCollection not found in StoreGate " << seStore.name() );
347 return StatusCode::FAILURE;
348 }
349
350 ATH_MSG_DEBUG ( "AFP_TDSimHitCollection found with " << tmpColl->size() << " hits" );
351
354
355 for (; iPmt!=ePmt; ++iPmt) m_mergedTDSimHitList.push_back((*iPmt));
356
357 const AFP_SIDSimHitCollection* tmpSiColl = nullptr;
358
359 if (!seStore.retrieve(tmpSiColl, m_SIDSimHitCollectionName).isSuccess()) {
360 ATH_MSG_ERROR ( "SubEvent AFP_SIDSimHitCollection not found in StoreGate " << seStore.name() );
361 return StatusCode::FAILURE;
362 }
363
364 ATH_MSG_DEBUG ( "AFP_TDSimHitCollection found with " << tmpSiColl->size() << " hits" );
365
367 AFP_SIDSimHitCollection::const_iterator eSiPmt = tmpSiColl->end();
368
369 for (; iSiPmt!=eSiPmt; ++iSiPmt) m_mergedSIDSimHitList.push_back((*iSiPmt));
370 }
371
372 return StatusCode::SUCCESS;
373}
#define ATH_MSG_VERBOSE(x)
std::vector< xAOD::EventInfo::SubEvent >::const_iterator SubEventIterator
Definition IPileUpTool.h:22
CONT::const_iterator const_iterator
size_type size() const
StatusCode retrieve(const T *&ptr) const
Retrieve the default object into a const T*.

◆ recoAll()

StatusCode AFP_PileUpTool::recoAll ( const EventContext & ctx,
std::unique_ptr< AFP_TDDigiCollection > & digitCollection,
std::unique_ptr< AFP_SiDigiCollection > & siDigiCollection ) const

Definition at line 122 of file AFP_PileUpTool.cxx.

123{
124 ATH_CHECK( recoSiHits(ctx, siDigiCollection) );
125 ATH_CHECK( recoToFHits(ctx, digitCollection) );
126
127 return StatusCode::SUCCESS;
128}
StatusCode recoToFHits(const EventContext &ctx, std::unique_ptr< AFP_TDDigiCollection > &digitCollection) const
Creates xAOD for time-of-flight detector.
StatusCode recoSiHits(const EventContext &ctx, std::unique_ptr< AFP_SiDigiCollection > &siDigiCollection) const
Creates xAOD for silicon detector.

◆ recoSiHits()

StatusCode AFP_PileUpTool::recoSiHits ( const EventContext & ctx,
std::unique_ptr< AFP_SiDigiCollection > & siDigiCollection ) const

Creates xAOD for silicon detector.

Definition at line 131 of file AFP_PileUpTool.cxx.

132{
133 auto afpSiHits=std::make_unique<xAOD::AFPSiHitContainer>();
134 auto afpSiHitsAux=std::make_unique<xAOD::AFPSiHitAuxContainer>();
135 afpSiHits->setStore(afpSiHitsAux.get());
136
137 newXAODHitSi(afpSiHits, siDigiCollection);
138
139 ATH_MSG_DEBUG("AFP_PileUpTool: after newXAODHitSi, simulated digi container size = "<<siDigiCollection->size()<<", got afpSiHits with size "<<afpSiHits->size());
140
141 SG::WriteHandle<xAOD::AFPSiHitContainer> siHitContainer{m_AFPSiHitsContainerName, ctx};
142 ATH_CHECK( siHitContainer.record(std::move(afpSiHits), std::move(afpSiHitsAux)) );
143
144 return StatusCode::SUCCESS;
145}
void newXAODHitSi(std::unique_ptr< xAOD::AFPSiHitContainer > &xAODSiHit, std::unique_ptr< AFP_SiDigiCollection > &collection) const
Method that creates a new AFPSiHit and sets it valus according to digi collection.

◆ recoToFHits()

StatusCode AFP_PileUpTool::recoToFHits ( const EventContext & ctx,
std::unique_ptr< AFP_TDDigiCollection > & digitCollection ) const

Creates xAOD for time-of-flight detector.

Definition at line 185 of file AFP_PileUpTool.cxx.

186{
187 auto afpToFHits=std::make_unique<xAOD::AFPToFHitContainer>();
188 auto afpToFHitsAux=std::make_unique<xAOD::AFPToFHitAuxContainer>();
189 afpToFHits->setStore(afpToFHitsAux.get());
190
191 newXAODHitToF(afpToFHits, digitCollection);
192
193 ATH_MSG_DEBUG("AFP_PileUpTool: after recoToFHits, simulated TD digi container size = "<<digitCollection->size()<<", got afpToFHits with size "<<afpToFHits->size());
194
195 SG::WriteHandle<xAOD::AFPToFHitContainer> ToFHitsContainer{m_AFPHitsContainerNameToF, ctx};
196 ATH_CHECK(ToFHitsContainer.record(std::move(afpToFHits),std::move(afpToFHitsAux)));
197
198 return StatusCode::SUCCESS;
199}
void newXAODHitToF(std::unique_ptr< xAOD::AFPToFHitContainer > &tofHitContainer, std::unique_ptr< AFP_TDDigiCollection > &collection) const
Method that creates a new AFPToFHit and sets it valus according to digi collection.

◆ resetFilter()

virtual void PileUpToolBase::resetFilter ( )
inlineoverridevirtualinherited

dummy implementation of filter reset

Reimplemented in MergeTruthJetsTool.

Definition at line 51 of file PileUpToolBase.h.

51{ m_filterPassed=true; }

◆ resetSignalHistograms()

void AFP_PileUpTool::resetSignalHistograms ( )
private

Invokes Reset() on all m_SignalHist objects.

Definition at line 401 of file AFP_PileUpTool.cxx.

402{
403 for( int i=0; i<4; i++) {
404 for( int j=0; j<4; j++) {
405 for( int k=0; k<4; k++) {
406 m_SignalHist[i][j][k].Reset();
407 }
408 }
409 }
410}

◆ setupQuantumEff()

void AFP_PileUpTool::setupQuantumEff ( )
private

Definition at line 780 of file AFP_PileUpTool.cxx.

781{
782 switch(m_QEffVer){
783 case QE1:
784 {
785 // QE ver. 1
786 m_QuantumEff_PMT[0]=0.035;
787 m_QuantumEff_PMT[1]=0.047;
788 m_QuantumEff_PMT[3]=0.064;
789 m_QuantumEff_PMT[4]=0.084;
790 m_QuantumEff_PMT[5]=0.101;
791 m_QuantumEff_PMT[6]=0.114;
792 m_QuantumEff_PMT[7]=0.122;
793 m_QuantumEff_PMT[8]=0.128;
794 m_QuantumEff_PMT[9]=0.132;
795 m_QuantumEff_PMT[10]=0.134;
796 m_QuantumEff_PMT[11]=0.135;
797 m_QuantumEff_PMT[12]=0.138;
798 m_QuantumEff_PMT[13]=0.142;
799 m_QuantumEff_PMT[14]=0.146;
800 m_QuantumEff_PMT[15]=0.151;
801 m_QuantumEff_PMT[16]=0.158;
802 m_QuantumEff_PMT[17]=0.164;
803 m_QuantumEff_PMT[18]=0.171;
804 m_QuantumEff_PMT[19]=0.178;
805 m_QuantumEff_PMT[20]=0.185;
806 m_QuantumEff_PMT[21]=0.194;
807 m_QuantumEff_PMT[22]=0.203;
808 m_QuantumEff_PMT[23]=0.211;
809 m_QuantumEff_PMT[24]=0.217;
810 m_QuantumEff_PMT[25]=0.224;
811 m_QuantumEff_PMT[26]=0.229;
812 m_QuantumEff_PMT[27]=0.232;
813 m_QuantumEff_PMT[28]=0.235;
814 m_QuantumEff_PMT[29]=0.237;
815 m_QuantumEff_PMT[30]=0.240;
816 m_QuantumEff_PMT[31]=0.242;
817 m_QuantumEff_PMT[32]=0.244;
818 m_QuantumEff_PMT[33]=0.248;
819 m_QuantumEff_PMT[34]=0.250;
820 m_QuantumEff_PMT[35]=0.253;
821 m_QuantumEff_PMT[36]=0.256;
822 m_QuantumEff_PMT[37]=0.258;
823 m_QuantumEff_PMT[38]=0.260;
824 m_QuantumEff_PMT[39]=0.262;
825 m_QuantumEff_PMT[40]=0.262;
826 m_QuantumEff_PMT[41]=0.261;
827 m_QuantumEff_PMT[42]=0.257;
828 m_QuantumEff_PMT[43]=0.253;
829 m_QuantumEff_PMT[44]=0.250;
830 m_QuantumEff_PMT[45]=0.245;
831 m_QuantumEff_PMT[46]=0.240;
832 m_QuantumEff_PMT[47]=0.235;
833 m_QuantumEff_PMT[48]=0.230;
834 m_QuantumEff_PMT[49]=0.225;
835 m_QuantumEff_PMT[50]=0.221;
836 m_QuantumEff_PMT[51]=0.213;
837 m_QuantumEff_PMT[52]=0.203;
838 m_QuantumEff_PMT[53]=0.191;
839 m_QuantumEff_PMT[54]=0.179;
840 m_QuantumEff_PMT[55]=0.169;
841 m_QuantumEff_PMT[56]=0.161;
842 m_QuantumEff_PMT[57]=0.154;
843 m_QuantumEff_PMT[58]=0.147;
844 m_QuantumEff_PMT[59]=0.141;
845 m_QuantumEff_PMT[60]=0.138;
846 m_QuantumEff_PMT[61]=0.134;
847 m_QuantumEff_PMT[62]=0.129;
848 m_QuantumEff_PMT[63]=0.119;
849 m_QuantumEff_PMT[64]=0.103;
850 m_QuantumEff_PMT[65]=0.086;
851 m_QuantumEff_PMT[66]=0.072;
852 m_QuantumEff_PMT[67]=0.062;
853 m_QuantumEff_PMT[68]=0.055;
854 m_QuantumEff_PMT[69]=0.049;
855 m_QuantumEff_PMT[70]=0.045;
856 m_QuantumEff_PMT[71]=0.041;
857 m_QuantumEff_PMT[72]=0.037;
858 m_QuantumEff_PMT[73]=0.034;
859 m_QuantumEff_PMT[74]=0.031;
860 m_QuantumEff_PMT[75]=0.028;
861 m_QuantumEff_PMT[76]=0.025;
862 m_QuantumEff_PMT[77]=0.022;
863 m_QuantumEff_PMT[78]=0.020;
864 m_QuantumEff_PMT[79]=0.017;
865 m_QuantumEff_PMT[80]=0.015;
866 m_QuantumEff_PMT[81]=0.013;
867 break;
868 }
869 case QE2:
870 {
871 // QE ver. 2
872 m_QuantumEff_PMT[0]=0.042;
873 m_QuantumEff_PMT[1]=0.056;
874 m_QuantumEff_PMT[3]=0.075;
875 m_QuantumEff_PMT[4]=0.095;
876 m_QuantumEff_PMT[5]=0.110;
877 m_QuantumEff_PMT[6]=0.119;
878 m_QuantumEff_PMT[7]=0.123;
879 m_QuantumEff_PMT[8]=0.125;
880 m_QuantumEff_PMT[9]=0.126;
881 m_QuantumEff_PMT[10]=0.125;
882 m_QuantumEff_PMT[11]=0.125;
883 m_QuantumEff_PMT[12]=0.126;
884 m_QuantumEff_PMT[13]=0.130;
885 m_QuantumEff_PMT[14]=0.133;
886 m_QuantumEff_PMT[15]=0.137;
887 m_QuantumEff_PMT[16]=0.143;
888 m_QuantumEff_PMT[17]=0.148;
889 m_QuantumEff_PMT[18]=0.153;
890 m_QuantumEff_PMT[19]=0.159;
891 m_QuantumEff_PMT[20]=0.163;
892 m_QuantumEff_PMT[21]=0.170;
893 m_QuantumEff_PMT[22]=0.179;
894 m_QuantumEff_PMT[23]=0.187;
895 m_QuantumEff_PMT[24]=0.196;
896 m_QuantumEff_PMT[25]=0.204;
897 m_QuantumEff_PMT[26]=0.210;
898 m_QuantumEff_PMT[27]=0.215;
899 m_QuantumEff_PMT[28]=0.220;
900 m_QuantumEff_PMT[29]=0.225;
901 m_QuantumEff_PMT[30]=0.229;
902 m_QuantumEff_PMT[31]=0.232;
903 m_QuantumEff_PMT[32]=0.235;
904 m_QuantumEff_PMT[33]=0.239;
905 m_QuantumEff_PMT[34]=0.243;
906 m_QuantumEff_PMT[35]=0.247;
907 m_QuantumEff_PMT[36]=0.251;
908 m_QuantumEff_PMT[37]=0.252;
909 m_QuantumEff_PMT[38]=0.255;
910 m_QuantumEff_PMT[39]=0.257;
911 m_QuantumEff_PMT[40]=0.259;
912 m_QuantumEff_PMT[41]=0.260;
913 m_QuantumEff_PMT[42]=0.260;
914 m_QuantumEff_PMT[43]=0.261;
915 m_QuantumEff_PMT[44]=0.261;
916 m_QuantumEff_PMT[45]=0.260;
917 m_QuantumEff_PMT[46]=0.258;
918 m_QuantumEff_PMT[47]=0.256;
919 m_QuantumEff_PMT[48]=0.252;
920 m_QuantumEff_PMT[49]=0.249;
921 m_QuantumEff_PMT[50]=0.245;
922 m_QuantumEff_PMT[51]=0.241;
923 m_QuantumEff_PMT[52]=0.236;
924 m_QuantumEff_PMT[53]=0.229;
925 m_QuantumEff_PMT[54]=0.222;
926 m_QuantumEff_PMT[55]=0.213;
927 m_QuantumEff_PMT[56]=0.206;
928 m_QuantumEff_PMT[57]=0.199;
929 m_QuantumEff_PMT[58]=0.193;
930 m_QuantumEff_PMT[59]=0.186;
931 m_QuantumEff_PMT[60]=0.181;
932 m_QuantumEff_PMT[61]=0.177;
933 m_QuantumEff_PMT[62]=0.173;
934 m_QuantumEff_PMT[63]=0.165;
935 m_QuantumEff_PMT[64]=0.150;
936 m_QuantumEff_PMT[65]=0.129;
937 m_QuantumEff_PMT[66]=0.108;
938 m_QuantumEff_PMT[67]=0.092;
939 m_QuantumEff_PMT[68]=0.081;
940 m_QuantumEff_PMT[69]=0.073;
941 m_QuantumEff_PMT[70]=0.066;
942 m_QuantumEff_PMT[71]=0.060;
943 m_QuantumEff_PMT[72]=0.055;
944 m_QuantumEff_PMT[73]=0.050;
945 m_QuantumEff_PMT[74]=0.046;
946 m_QuantumEff_PMT[75]=0.041;
947 m_QuantumEff_PMT[76]=0.037;
948 m_QuantumEff_PMT[77]=0.033;
949 m_QuantumEff_PMT[78]=0.029;
950 m_QuantumEff_PMT[79]=0.025;
951 m_QuantumEff_PMT[80]=0.022;
952 m_QuantumEff_PMT[81]=0.019;
953 break;
954 }
955 default: break;
956 }
957}
Gaudi::Property< int > m_QEffVer

◆ setupTDCOffsets()

void AFP_PileUpTool::setupTDCOffsets ( )
private

Definition at line 743 of file AFP_PileUpTool.cxx.

744{
745 m_TDC_offsets[0][0][0] = -65.125366;
746 m_TDC_offsets[0][0][1] = -78.942017;
747 m_TDC_offsets[0][0][2] = -92.000610;
748 m_TDC_offsets[0][0][3] = -87.115967;
749 m_TDC_offsets[0][1][0] = 21.883667;
750 m_TDC_offsets[0][1][1] = 10.356201;
751 m_TDC_offsets[0][1][2] = 2.336792;
752 m_TDC_offsets[0][1][3] = -9.625732;
753 m_TDC_offsets[0][2][0] = 46.980957;
754 m_TDC_offsets[0][2][1] = 45.204224;
755 m_TDC_offsets[0][2][2] = 53.081421;
756 m_TDC_offsets[0][2][3] = 43.045776;
757 m_TDC_offsets[0][3][0] = 90.227905;
758 m_TDC_offsets[0][3][1] = 84.472900;
759 m_TDC_offsets[0][3][2] = 81.739990;
760 m_TDC_offsets[0][3][3] = 74.882812;
761 m_TDC_offsets[3][0][0] = -23.122681;
762 m_TDC_offsets[3][0][1] = -16.655273;
763 m_TDC_offsets[3][0][2] = -35.254150;
764 m_TDC_offsets[3][0][3] = -27.525635;
765 m_TDC_offsets[3][1][0] = 45.818359;
766 m_TDC_offsets[3][1][1] = 46.052856;
767 m_TDC_offsets[3][1][2] = 58.809570;
768 m_TDC_offsets[3][1][3] = 49.068848;
769 m_TDC_offsets[3][2][0] = 67.897339;
770 m_TDC_offsets[3][2][1] = 78.327393;
771 m_TDC_offsets[3][2][2] = 72.782471;
772 m_TDC_offsets[3][2][3] = 69.975464;
773 m_TDC_offsets[3][3][0] = 96.650635;
774 m_TDC_offsets[3][3][1] = 97.994019;
775 m_TDC_offsets[3][3][2] = 88.561279;
776 m_TDC_offsets[3][3][3] = 79.530396;
777}

◆ SignalFun()

double AFP_PileUpTool::SignalFun ( double Time,
double RiseTime,
double FallTime,
double offset = 0.0 ) const
private

Definition at line 731 of file AFP_PileUpTool.cxx.

732{
733 double f=0;
734 Time -= offset;
735 if ( Time < 0) return f;
736 double p = (FallTime-RiseTime*TMath::Log(1.+FallTime/RiseTime))/TMath::Log(10.);
737 f = TMath::Power(Time/p,RiseTime/p)*TMath::Exp(-(Time/p));
738 f /= (TMath::Power(RiseTime/p,RiseTime/p)*TMath::Exp(-(RiseTime/p)));
739 return f;
740}

◆ StoreSiDigi()

StatusCode AFP_PileUpTool::StoreSiDigi ( const EventContext & ctx,
std::unique_ptr< AFP_SiDigiCollection > & siDigiCollection )
private

Definition at line 662 of file AFP_PileUpTool.cxx.

663{
664 ATHRNG::RNGWrapper* rngWrapper = m_randomSvc->getEngine(this, m_randomStreamName);
665 rngWrapper->setSeed( m_randomStreamName, ctx );
666 CLHEP::HepRandomEngine* rngEngine = rngWrapper->getEngine(ctx);
667
668 long index = 0;
669 while ( index != m_ArrSize ) // here just 6 layers per detector are considered
670 {
671 // adding random noise
673
674 int tot = charge2tot( m_deposited_charge[index] );
675
676 if (tot >= m_SiT_ToTThresholdForHit )
677 {
678 ATH_MSG_DEBUG ( " total # of pairs from dep_energy (with all effects included) " << m_deposited_charge[index]);
679 ATH_MSG_DEBUG ( " total # of pairs from dep_energy (true value)" << m_SiT_Energy2ChargeFactor*m_deposited_energy[index]);
680
681 int station = static_cast<int>(index/(80*336*6));
682 int detector = static_cast<int>((index-station*80*336*6)/(80*336));
683 int column = static_cast<int>((index-station*80*336*6-detector*80*336)/80);
684 int row = static_cast<int>(index-station*80*336*6-detector*80*336-column*80);
685
686 ATH_MSG_DEBUG ( " reversed mapping, station " << station << ", detector " << detector << ", pixel_col " << column << ", pixel_row " << row );
687
688 AFP_SiDigi sidigi;
689
690 sidigi.m_nStationID = station;
691 sidigi.m_nDetectorID = detector;
692 sidigi.m_nPixelCol = column;
693 sidigi.m_nPixelRow = row;
694 sidigi.m_fADC = tot2charge(tot);
695 sidigi.m_fTDC = 0.;
696
697 siDigiCollection->push_back(sidigi);
698 }
699
700 index++;
701 }
702
703 return StatusCode::SUCCESS;
704}
int tot2charge(int) const
Function that converts discrete time-over-threshold to discrete charge.
Gaudi::Property< int > m_SiT_ToTThresholdForHit
double generateSiNoise(CLHEP::HepRandomEngine *rndEngine) const
Function that provides random noise (in charge units)
float m_fTDC
Definition AFP_SiDigi.h:16
int m_nPixelCol
Definition AFP_SiDigi.h:21
int m_nDetectorID
Definition AFP_SiDigi.h:19
float m_fADC
Definition AFP_SiDigi.h:15
int m_nPixelRow
Definition AFP_SiDigi.h:20
int m_nStationID
Definition AFP_SiDigi.h:18
str index
Definition DeMoScan.py:362
row
Appending html table to final .html summary file.

◆ StoreTDDigi()

StatusCode AFP_PileUpTool::StoreTDDigi ( const EventContext & ctx,
std::unique_ptr< AFP_TDDigiCollection > & digitCollection ) const
private

Definition at line 584 of file AFP_PileUpTool.cxx.

585{
586 for( int i=0; i<4; i++) {
587 for( int j=0; j<4; j++) {
588 for( int k=0; k<4; k++){
589
590 const TH1F & hSignal = m_SignalHist[i][j][k];
591 const double peakVal = hSignal.GetBinContent( hSignal.GetMaximumBin() );
592
593 if( peakVal > 2 /*signal from more than two photoel.*/ ){
594
595 const double TDC = getTDC( hSignal );
596 const double ADC = getADC( hSignal, 0.5*peakVal );
597
598 AFP_TDDigi tddigi;
599 tddigi.m_nStationID=i;
600 tddigi.m_nDetectorID=10*(j+1)+k+1; // restoring original numeration of bars and trains
601 tddigi.m_nSensitiveElementID=-1; // this variable is currently redundant
602 tddigi.m_fADC=ADC;
603 tddigi.m_fTDC=TDC;
604
605 digitCollection->push_back(tddigi);
606 }
607 }
608 }
609 }
610
611 return StatusCode::SUCCESS;
612}
double getADC(const TH1F &, const double) const
Returns the ADC determined from the signal shape passed as an (1st) argument; 2nd arg is peak value.
double getTDC(const TH1F &) const
Returns the TDC determined from the signal shape passed as an argument.
int m_nStationID
Definition AFP_TDDigi.h:18
int m_nSensitiveElementID
Definition AFP_TDDigi.h:20
float m_fTDC
Definition AFP_TDDigi.h:16
float m_fADC
Definition AFP_TDDigi.h:15
int m_nDetectorID
Definition AFP_TDDigi.h:19

◆ toProcess()

virtual bool PileUpToolBase::toProcess ( int bunchXing) const
inlineoverridevirtualinherited

the method this base class helps implementing

Reimplemented in MergeHijingParsTool, and MergeTrackRecordCollTool.

Definition at line 32 of file PileUpToolBase.h.

32 {
33 //closed interval [m_firstXing,m_lastXing]
34 return !((m_firstXing > bunchXing) || (bunchXing > m_lastXing));
35 }
Gaudi::Property< int > m_firstXing
Gaudi::Property< int > m_lastXing

◆ tot2charge()

int AFP_PileUpTool::tot2charge ( int tot) const
inlineprivate

Function that converts discrete time-over-threshold to discrete charge.

Definition at line 159 of file AFP_PileUpTool.cxx.

160{
161 return tot>0 ? static_cast<int>( m_totToChargeTransformation.Eval(tot) ) : 0;
162}

Member Data Documentation

◆ m_AFPHitsContainerNameToF

SG::WriteHandleKey<xAOD::AFPToFHitContainer> AFP_PileUpTool::m_AFPHitsContainerNameToF {this, "AFPHitsContainerNameToF", "AFPToFHitContainer"}
private

Definition at line 141 of file AFP_PileUpTool.h.

141{this, "AFPHitsContainerNameToF", "AFPToFHitContainer"};

◆ m_AFPSiHitsContainerName

SG::WriteHandleKey<xAOD::AFPSiHitContainer> AFP_PileUpTool::m_AFPSiHitsContainerName {this, "AFPSiHitsContainerName", "AFPSiHitContainer",""}
private

Definition at line 146 of file AFP_PileUpTool.h.

146{this, "AFPSiHitsContainerName", "AFPSiHitContainer",""};

◆ m_ArrSize

const int AFP_PileUpTool::m_ArrSize
private

Definition at line 174 of file AFP_PileUpTool.h.

◆ m_CfdThr

Gaudi::Property<double> AFP_PileUpTool::m_CfdThr {this, "CfdThr", 0.5, "Constant fraction threshold"}
private

Definition at line 156 of file AFP_PileUpTool.h.

156{this, "CfdThr", 0.5, "Constant fraction threshold"};

◆ m_CfSignalDelay

Gaudi::Property<double> AFP_PileUpTool::m_CfSignalDelay {this, "CfSignalDelay", 200., "Pulse delay for const. frac. discrimination"}
private

Definition at line 155 of file AFP_PileUpTool.h.

155{this, "CfSignalDelay", 200., "Pulse delay for const. frac. discrimination"};

◆ m_ChargeVsTot_LUT

int AFP_PileUpTool::m_ChargeVsTot_LUT[16] {}
private

Definition at line 172 of file AFP_PileUpTool.h.

172{}; // look-up table for charge2tot conversion, 16 = n. of bits

◆ m_CollectionEff

Gaudi::Property<double> AFP_PileUpTool::m_CollectionEff {this, "CollectionEff", 0.6, "Collection efficiency"}
private

Definition at line 149 of file AFP_PileUpTool.h.

149{this, "CollectionEff", 0.6, "Collection efficiency"};

◆ m_ConversionSpr

Gaudi::Property<double> AFP_PileUpTool::m_ConversionSpr {this, "ConversionSpr", 40.0, " Photon-Electron conversion spread in ps"}
private

Definition at line 150 of file AFP_PileUpTool.h.

150{this, "ConversionSpr", 40.0, " Photon-Electron conversion spread in ps"};

◆ m_deposited_charge

std::vector<float> AFP_PileUpTool::m_deposited_charge
private

Definition at line 175 of file AFP_PileUpTool.h.

◆ m_deposited_energy

std::vector<float> AFP_PileUpTool::m_deposited_energy
private

Definition at line 176 of file AFP_PileUpTool.h.

◆ m_digitCollection

std::unique_ptr<AFP_TDDigiCollection> AFP_PileUpTool::m_digitCollection
protected

Definition at line 192 of file AFP_PileUpTool.h.

◆ m_FallTime

Gaudi::Property<double> AFP_PileUpTool::m_FallTime {this, "FallTime", 1200., "Pulse fall time in ps"}
private

Definition at line 152 of file AFP_PileUpTool.h.

152{this, "FallTime", 1200., "Pulse fall time in ps"};

◆ m_filterPassed

bool PileUpToolBase::m_filterPassed {true}
protectedinherited

Definition at line 60 of file PileUpToolBase.h.

60{true};

◆ m_firstXing

Gaudi::Property<int> PileUpToolBase::m_firstXing
protectedinherited
Initial value:
{this, "FirstXing", -999,
"First bunch-crossing in which det is live"}

Definition at line 54 of file PileUpToolBase.h.

54 {this, "FirstXing", -999,
55 "First bunch-crossing in which det is live"};

◆ m_lastXing

Gaudi::Property<int> PileUpToolBase::m_lastXing
protectedinherited
Initial value:
{this, "LastXing", 999,
"Last bunch-crossing in which det is live"}

Definition at line 56 of file PileUpToolBase.h.

56 {this, "LastXing", 999,
57 "Last bunch-crossing in which det is live"};

◆ m_mergedSIDSimHitList

AFP_SIDSimHitCollection AFP_PileUpTool::m_mergedSIDSimHitList
private

Definition at line 168 of file AFP_PileUpTool.h.

◆ m_mergedTDSimHitList

AFP_TDSimHitCollection AFP_PileUpTool::m_mergedTDSimHitList
private

Definition at line 167 of file AFP_PileUpTool.h.

◆ m_mergeSvc

ServiceHandle<PileUpMergeSvc> AFP_PileUpTool::m_mergeSvc {this, "mergeSvc", "PileUpMergeSvc", ""}
private

Definition at line 133 of file AFP_PileUpTool.h.

133{this, "mergeSvc", "PileUpMergeSvc", ""};

◆ m_onlyUseContainerName

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

Definition at line 137 of file AFP_PileUpTool.h.

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

◆ m_QEffVer

Gaudi::Property<int> AFP_PileUpTool::m_QEffVer {this, "QEffVer", 1, "quantum efficiency version; QE1=1, QE2=2, nQEffOpts=3"}
private

Definition at line 165 of file AFP_PileUpTool.h.

165{this, "QEffVer", 1, "quantum efficiency version; QE1=1, QE2=2, nQEffOpts=3"};

◆ m_QuantumEff_PMT

double AFP_PileUpTool::m_QuantumEff_PMT[82] {}
private

Definition at line 170 of file AFP_PileUpTool.h.

170{};

◆ m_randomStreamName

Gaudi::Property<std::string> AFP_PileUpTool::m_randomStreamName {this, "RandomStreamName", "AFPRndEng", ""}
private

Definition at line 135 of file AFP_PileUpTool.h.

135{this, "RandomStreamName", "AFPRndEng", ""};

◆ m_randomSvc

ServiceHandle<IAthRNGSvc> AFP_PileUpTool::m_randomSvc {this, "RndmSvc", "AthRNGSvc", ""}
private

Definition at line 134 of file AFP_PileUpTool.h.

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

◆ m_RiseTime

Gaudi::Property<double> AFP_PileUpTool::m_RiseTime {this, "RiseTime", 400., "Pulse rise time in ps"}
private

Definition at line 151 of file AFP_PileUpTool.h.

151{this, "RiseTime", 400., "Pulse rise time in ps"};

◆ m_SiDigiCollection

std::unique_ptr<AFP_SiDigiCollection> AFP_PileUpTool::m_SiDigiCollection
protected

Definition at line 193 of file AFP_PileUpTool.h.

◆ m_SiDigiCollectionKey

SG::WriteHandleKey<AFP_SiDigiCollection> AFP_PileUpTool::m_SiDigiCollectionKey {this, "SiDigiCollectionName", "AFP_SiDigiCollection", "Name of the Collection to hold the output from the AFP digitization, SiD part"}
private

Definition at line 145 of file AFP_PileUpTool.h.

145{this, "SiDigiCollectionName", "AFP_SiDigiCollection", "Name of the Collection to hold the output from the AFP digitization, SiD part"};

◆ m_SIDSimHitCollectionKey

SG::ReadHandleKey<AFP_SIDSimHitCollection> AFP_PileUpTool::m_SIDSimHitCollectionKey {this, "SIDSimHitCollectionName", "AFP_SIDSimHitCollection"}
private

Definition at line 143 of file AFP_PileUpTool.h.

143{this, "SIDSimHitCollectionName", "AFP_SIDSimHitCollection"};

◆ m_SIDSimHitCollectionName

std::string AFP_PileUpTool::m_SIDSimHitCollectionName {""}
private

Definition at line 144 of file AFP_PileUpTool.h.

144{""};

◆ m_SignalHist

TH1F AFP_PileUpTool::m_SignalHist[4][4][4] {}
private

array of histograms storing final signals in the PMTs

Definition at line 182 of file AFP_PileUpTool.h.

182{}; // station, train, bar

◆ m_SignalVect

std::vector<double> AFP_PileUpTool::m_SignalVect
private

vector with pre-calculated single signal from the photoelectron

Definition at line 179 of file AFP_PileUpTool.h.

◆ m_SiT_ChargeCollEff

Gaudi::Property<double> AFP_PileUpTool::m_SiT_ChargeCollEff {this, "SiT_ChargeCollEff", 0.55, "CCE, adjusted to describe data"}
private

Definition at line 157 of file AFP_PileUpTool.h.

157{this, "SiT_ChargeCollEff", 0.55, "CCE, adjusted to describe data"};

◆ m_SiT_ChargeCollEffSigma

Gaudi::Property<double> AFP_PileUpTool::m_SiT_ChargeCollEffSigma {this, "SiT_ChargeCollEffSigma", 0.2, "sigma(CCE), adjusted to describe data"}
private

Definition at line 158 of file AFP_PileUpTool.h.

158{this, "SiT_ChargeCollEffSigma", 0.2, "sigma(CCE), adjusted to describe data"};

◆ m_SiT_Energy2ChargeFactor

Gaudi::Property<double> AFP_PileUpTool::m_SiT_Energy2ChargeFactor {this, "SiT_Energy2ChargeFactor", 1000000./3.6, "number of eh pairs per MeV"}
private

Definition at line 161 of file AFP_PileUpTool.h.

161{this, "SiT_Energy2ChargeFactor", 1000000./3.6, "number of eh pairs per MeV"};

◆ m_SiT_NoiseMu

Gaudi::Property<double> AFP_PileUpTool::m_SiT_NoiseMu {this, "SiT_NoiseMu", 160., "unit = number of eh pairs"}
private

Definition at line 159 of file AFP_PileUpTool.h.

159{this, "SiT_NoiseMu", 160., "unit = number of eh pairs"};

◆ m_SiT_NoiseSigma

Gaudi::Property<double> AFP_PileUpTool::m_SiT_NoiseSigma {this, "SiT_NoiseSigma", 10., "unit = number of eh pairs"}
private

Definition at line 160 of file AFP_PileUpTool.h.

160{this, "SiT_NoiseSigma", 10., "unit = number of eh pairs"};

◆ m_SiT_ToTThresholdForHit

Gaudi::Property<int> AFP_PileUpTool::m_SiT_ToTThresholdForHit {this, "SiT_ChargeThresholdForHit", 1, ""}
private

Definition at line 162 of file AFP_PileUpTool.h.

162{this, "SiT_ChargeThresholdForHit", 1, ""};

◆ m_TDC_offsets

double AFP_PileUpTool::m_TDC_offsets[4][4][4] {}
private

Definition at line 171 of file AFP_PileUpTool.h.

171{}; // station, train, bar

◆ m_TDDigiCollectionKey

SG::WriteHandleKey<AFP_TDDigiCollection> AFP_PileUpTool::m_TDDigiCollectionKey {this, "TDDigiCollectionName", "AFP_TDDigiCollection", "Name of the Collection to hold the output from the AFP digitization, TD part"}
private

Definition at line 140 of file AFP_PileUpTool.h.

140{this, "TDDigiCollectionName", "AFP_TDDigiCollection", "Name of the Collection to hold the output from the AFP digitization, TD part"};

◆ m_TDSimHitCollectionKey

SG::ReadHandleKey<AFP_TDSimHitCollection> AFP_PileUpTool::m_TDSimHitCollectionKey {this, "TDSimHitCollectionName", "AFP_TDSimHitCollection"}
private

Definition at line 138 of file AFP_PileUpTool.h.

138{this, "TDSimHitCollectionName", "AFP_TDSimHitCollection"};

◆ m_TDSimHitCollectionName

std::string AFP_PileUpTool::m_TDSimHitCollectionName {""}
private

Definition at line 139 of file AFP_PileUpTool.h.

139{""};

◆ m_TimeOffset

Gaudi::Property<double> AFP_PileUpTool::m_TimeOffset {this, "TimeOffset", 104500., "Offset reflecting time that proton travels from IP to AFP"}
private

Definition at line 154 of file AFP_PileUpTool.h.

154{this, "TimeOffset", 104500., "Offset reflecting time that proton travels from IP to AFP"};

◆ m_TofSignalTimeRangeLength

Gaudi::Property<double> AFP_PileUpTool::m_TofSignalTimeRangeLength {this, "TofSignalTimeRangeLength", 4000., "in ps"}
private

Definition at line 153 of file AFP_PileUpTool.h.

153{this, "TofSignalTimeRangeLength", 4000., "in ps"};

◆ m_totToChargeTransfExpr

Gaudi::Property<std::string> AFP_PileUpTool::m_totToChargeTransfExpr {this, "TotToChargeTransfExpr", "1909 + x*363 + x*x*141", "Function that transforms time-over-threshold to charge"}
private

Function that transforms time-over-threshold to charge.

Solution has been adopted from AFP_Raw2DigiTool. The best solution would be to have a single tool providing this method, which would be used in AFP_PileUpTool and AFP_Raw2DigiTool.

Definition at line 129 of file AFP_PileUpTool.h.

129{this, "TotToChargeTransfExpr", "1909 + x*363 + x*x*141", "Function that transforms time-over-threshold to charge"};

◆ m_totToChargeTransfName

Gaudi::Property<std::string> AFP_PileUpTool::m_totToChargeTransfName {this, "TotToChargeTransfName", "TotToChargeTransfFunction", "Name of the function that transforms time-over-threshold to charge"}
private

Definition at line 130 of file AFP_PileUpTool.h.

130{this, "TotToChargeTransfName", "TotToChargeTransfFunction", "Name of the function that transforms time-over-threshold to charge"};

◆ m_totToChargeTransformation

TF1 AFP_PileUpTool::m_totToChargeTransformation
private

Definition at line 131 of file AFP_PileUpTool.h.

◆ m_vetoPileUpTruthLinks

Gaudi::Property<int> PileUpToolBase::m_vetoPileUpTruthLinks
protectedinherited
Initial value:
{this, "VetoPileUpTruthLinks", true,
"Ignore links to suppressed pile-up truth"}

Definition at line 58 of file PileUpToolBase.h.

58 {this, "VetoPileUpTruthLinks", true,
59 "Ignore links to suppressed pile-up truth"};

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