ATLAS Offline Software
Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
TileHitVecToCntTool Class Reference

This AlgTool merges TileHits from different AthenaHitVectors and stores the result in a TileHitContainer. More...

#include <TileHitVecToCntTool.h>

Inheritance diagram for TileHitVecToCntTool:
Collaboration diagram for TileHitVecToCntTool:

Public Member Functions

 TileHitVecToCntTool (const std::string &type, const std::string &name, const IInterface *parent)
 Constructor. More...
 
StatusCode initialize () override final
 
virtual StatusCode prepareEvent (const EventContext &ctx, unsigned int) override final
 
virtual StatusCode mergeEvent (const EventContext &ctx) override final
 
virtual StatusCode processBunchXing (int bunchXing, SubEventIterator bSubEvents, SubEventIterator eSubEvents) override final
 
virtual StatusCode processAllSubEvents (const EventContext &ctx) override final
 
StatusCode finalize () override final
 

Private Types

enum  CELL_TOWER { E1_TOWER = 10 }
 

Private Member Functions

StatusCode createContainers ()
 
void processHitVectorForOverlay (const TileHitVector *inputHits, int &nHit, double &eHitTot)
 
void processHitVectorForPileUp (const TileHitVector *inputHits, double SubEvtTimOffset, int &nHit, double &eHitTot, bool isSignal=false)
 
void processHitVectorWithoutPileUp (const TileHitVector *inputHits, int &nHit, double &eHitTot, TileHitNonConstContainer *hitCont, CLHEP::HepRandomEngine *engine)
 
double applyPhotoStatistics (double energy, Identifier pmt_id, CLHEP::HepRandomEngine *engine, const TileSamplingFraction *samplingFraction, int drawerIdx)
 
void findAndMergeE1 (TileHitCollection *coll, int frag_id, TileHitNonConstContainer *hitCont)
 
void findAndMergeMBTS (TileHitCollection *coll, int frag_id, TileHitNonConstContainer *hitCont)
 
void findAndMergeMultipleHitsInChannel (std::unique_ptr< TileHitNonConstContainer > &hitCont)
 
void mergeExtraHitToChannelHit (TileHit *extraHit, TileHit *channelHit)
 
int mbts_index (int side, int phi, int eta) const
 
int e4pr_index (int phi) const
 

Private Attributes

Gaudi::Property< bool > m_onlyUseContainerName {this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."}
 
StringArrayProperty m_inputKeys
 vector with the names of TileHitVectors to use More...
 
SG::ReadHandleKeyArray< TileHitVectorm_hitVectorKeys
 
std::vector< std::string > m_hitVectorNames {}
 
SG::WriteHandleKey< TileHitContainerm_hitContainerKey
 
SG::WriteHandleKey< TileHitContainerm_hitContainer_DigiHSTruthKey
 
SG::ReadCondHandleKey< TileSamplingFractionm_samplingFractionKey
 Name of TileSamplingFraction in condition store. More...
 
bool m_run2 {false}
 if true => RUN2 geometry with E4' and merged E1 More...
 
bool m_run2plus {false}
 if true => RUN2+ geometry with merged E1 (and E4' in RUN2) More...
 
Gaudi::Property< bool > m_pileUp
 if true => pileup mode is activated More...
 
Gaudi::Property< double > m_deltaT
 minimal time granularity for TileHit More...
 
Gaudi::Property< int > m_timeFlag
 special options to deal with times of hits for cosmics and TB More...
 
Gaudi::Property< double > m_triggerTime
 fixed trigger time value (default=0) More...
 
Gaudi::Property< double > m_maxHitTime
 all sub-hits with time above m_maxHitTime will be ignored More...
 
Gaudi::Property< double > m_photoStatisticsWindow
 sum up energy in [-m_photoStatWindow,+m_photoStatWindow] and use it for photostatistics More...
 
Gaudi::Property< int > m_photoElectronStatistics
 photoelectron statistics type: 0 - Poisson, 1 - "new" Poisson + Gauss, 2 - Poisson->Gauss More...
 
Gaudi::Property< bool > m_skipNoHit
 if true => skip events with no Tile hits More...
 
Gaudi::Property< bool > m_rndmEvtOverlay
 If true => overlay with random event (zero-luminosity pile-up) More...
 
Gaudi::Property< bool > m_useTriggerTime
 if true => take trigger time from external tool or from m_triggerTime More...
 
Gaudi::Property< bool > m_doDigiTruth
 
Gaudi::Property< bool > m_usePhotoStatistics
 
Gaudi::Property< bool > m_mergeMultipleHitsInChannel
 
PublicToolHandle< ITriggerTimem_triggerTimeTool
 tool to take the time from More...
 
ServiceHandle< PileUpMergeSvcm_mergeSvc {this, "PileUpMergeSvc", "PileUpMergeSvc", ""}
 
const TileIDm_tileID {nullptr}
 Pointer to TileID helper. More...
 
const TileTBIDm_tileTBID {nullptr}
 Pointer to TileID helper. More...
 
const TileHWIDm_tileHWID {nullptr}
 Pointer to TileID helper. More...
 
ServiceHandle< IAthRNGSvcm_rndmSvc {this, "RndmSvc", "AthRNGSvc", ""}
 Random number generator engine to use. More...
 
Gaudi::Property< std::string > m_randomStreamName {this, "RandomStreamName", "Tile_HitVecToCnt", ""}
 Random Stream Name. More...
 
std::vector< TileHit * > m_allHits
 vector for all TileHits More...
 
std::vector< TileHit * > m_allHits_DigiHSTruth
 vector for all TileHits More...
 
std::unique_ptr< TileHitNonConstContainerm_hits {}
 pointer to hits container More...
 
std::unique_ptr< TileHitNonConstContainerm_hits_DigiHSTruth {}
 pointer to hits container More...
 
int m_mbtsOffset {0}
 
ServiceHandle< TileCablingSvcm_cablingSvc {this, "TileCablingSvc", "TileCablingSvc", ""}
 
const TileCablingServicem_cabling {}
 
TileFragHash m_fragHashFunc
 
std::vector< bool > m_E1merged
 
std::vector< bool > m_MBTSmerged
 

Static Private Attributes

static const int N_SIDE = 2
 
static const int N_PHI = 8
 
static const int N_ETA = 2
 
static const int N_MBTS_CELLS = N_SIDE * N_PHI * N_ETA
 
static const int E4_SIDE = -1
 
static const int E4_ETA = 2
 
static const int E4_N_PHI = 4
 
static const int N_E4PRIME_CELLS = E4_N_PHI
 

structors and AlgTool implementation

virtual bool toProcess (int bunchXing) const override
 the method this base class helps implementing More...
 
virtual StatusCode processAllSubEvents (const EventContext &ctx)=0
 dummy implementation to allow compilation while all Digitization packages are migrated to use this new interface. More...
 
virtual bool filterPassed () const override
 dummy implementation of passing filter More...
 
virtual void resetFilter () override
 dummy implementation of filter reset More...
 
Gaudi::Property< int > m_firstXing
 
Gaudi::Property< int > m_lastXing
 
Gaudi::Property< int > m_vetoPileUpTruthLinks
 
bool m_filterPassed {true}
 

Detailed Description

This AlgTool merges TileHits from different AthenaHitVectors and stores the result in a TileHitContainer.

TileHitVecToCntTool copies all TileHits from TileHitVector (AthenaHitsVector) to TileHitContainer (identifiable container) without any corrections If pileup option is set, all hits are merged, if several hits have the same ID, energy and time from all of them is stored in vectors inside single TileHit

Definition at line 84 of file TileHitVecToCntTool.h.

Member Enumeration Documentation

◆ CELL_TOWER

Enumerator
E1_TOWER 

Definition at line 194 of file TileHitVecToCntTool.h.

194 {E1_TOWER = 10};

Constructor & Destructor Documentation

◆ TileHitVecToCntTool()

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

Constructor.

Definition at line 44 of file TileHitVecToCntTool.cxx.

48 {
49 }

Member Function Documentation

◆ applyPhotoStatistics()

double TileHitVecToCntTool::applyPhotoStatistics ( double  energy,
Identifier  pmt_id,
CLHEP::HepRandomEngine *  engine,
const TileSamplingFraction samplingFraction,
int  drawerIdx 
)
private

Definition at line 1022 of file TileHitVecToCntTool.cxx.

1023  {
1024 
1026  // take number of photoelectrons per GeV divide by 1000 to go to MeV
1027  // and multiply by inverted sampling fraction (about 36, depends on G4 version, sampling and eta)
1028  // to get number of photoelectrons per 1 MeV energy in scintillator
1029  float nPhotoElectrons = samplingFraction->getNumberOfPhotoElectrons(drawerIdx, channel)
1030  / (Gaudi::Units::GeV / Gaudi::Units::MeV) * samplingFraction->getSamplingFraction(drawerIdx, channel);
1031 
1032  nPhotoElectrons = std::round(nPhotoElectrons * 1000) / 1000;
1033 
1034  double pe = energy * nPhotoElectrons;
1035  double pe_scale = 1., RndmPois = 1.;
1036 
1037  switch (m_photoElectronStatistics) {
1038  case 2:
1039  if (pe > 20.0) {
1040  RndmPois = std::max(0.0, RandGaussQ::shoot(engine, pe, sqrt(pe))); // FIXME CLHEP::RandGaussZiggurat is faster and more accurate.
1041  pe_scale = RndmPois / pe;
1042  } else { // pe<=20
1043 
1044  if (pe > 0.) {
1045  double singleMEAN = 1.0; //Parameterization of monoelectron spectra
1046  double singleSIGMA = 1.0;
1047  RndmPois = RandPoissonT::shoot(engine, pe);
1048 
1049  if (RndmPois > 0) {
1050  pe_scale = 0;
1051  for (int i = 0; i < RndmPois; i++)
1052  pe_scale += 1 / (1.08332) * std::max(0., RandGaussQ::shoot(engine, singleMEAN, singleSIGMA)); // FIXME CLHEP::RandGaussZiggurat is faster and more accurate.
1053 
1054  pe_scale /= RndmPois;
1055  } else
1056  pe_scale = 0; //RndmPois==0
1057  }
1058  }
1059  break;
1060 
1061  case 0:
1062  if (pe > 0.0) {
1063  RndmPois = RandPoissonT::shoot(engine, pe);
1064  pe_scale = RndmPois / pe;
1065  }
1066  break;
1067 
1068  case 1:
1069  if (pe > 0.0) {
1070  if (pe > 10.0) {
1071  RndmPois = std::max(0.0, RandGaussQ::shoot(engine, pe, sqrt(pe))); // FIXME CLHEP::RandGaussZiggurat is faster and more accurate.
1072  } else {
1073  int nn = std::max(10, (int) (pe * 10.0));
1074  double * ProbFunc = new double[nn];
1075  ProbFunc[0] = exp(-pe);
1076  for (int i = 1; i < nn; ++i) {
1077  ProbFunc[i] = ProbFunc[i - 1] * pe / i;
1078  }
1079  RandGeneral* RandG = new RandGeneral(ProbFunc, nn, 0);
1080  RndmPois = RandG->shoot(engine) * nn;
1081  //here RndmPois is continuously distributed random value obtained from Poisson
1082  //distribution by approximation.
1083  delete RandG;
1084  delete[] ProbFunc;
1085  }
1086  pe_scale = RndmPois / pe;
1087  }
1088  break;
1089  } //end switch(m_PhElStat)
1090 
1091  ATH_MSG_VERBOSE( "PhotoElec: id=" << m_tileID->to_string(pmt_id,-1)
1092  << " totEne=" << energy
1093  << ", numPhElec=" << nPhotoElectrons
1094  << ", pe=" << pe
1095  << ", rndmPoisson=" << RndmPois
1096  << ", pe_scale=" << pe_scale);
1097 
1098  return pe_scale;
1099 }

◆ createContainers()

StatusCode TileHitVecToCntTool::createContainers ( )
private

Definition at line 239 of file TileHitVecToCntTool.cxx.

239  {
240 
241  ATH_MSG_VERBOSE("TileHitVecToCntTool createContainers started");
242 
243  if (m_pileUp) {
244  m_hits = std::make_unique<TileHitNonConstContainer>(SG::VIEW_ELEMENTS);
247  for (; iHit != lastHit; ++iHit) {
248  TileHit *pHit = (*iHit);
249  pHit->setZero();
250  }
251 
252  if(m_doDigiTruth){
253  m_hits_DigiHSTruth = std::make_unique<TileHitNonConstContainer>(SG::OWN_ELEMENTS);
254  iHit = m_allHits_DigiHSTruth.begin();
255  lastHit = m_allHits_DigiHSTruth.end();
256  for (; iHit != lastHit; ++iHit) {
257  TileHit *pHit = (*iHit);
258  if(pHit == nullptr) continue;
259  pHit->setZero();
260 
261  }
262  }
263  } else {
264  m_hits = std::make_unique<TileHitNonConstContainer>(SG::OWN_ELEMENTS);
265  if(m_doDigiTruth) m_hits_DigiHSTruth = std::make_unique<TileHitNonConstContainer>(SG::OWN_ELEMENTS);
266 
267  }
268 
269  ATH_MSG_VERBOSE("TileHitVecToCntTool createContainers finished");
270 
271  return StatusCode::SUCCESS;
272 
273 }

◆ e4pr_index()

int TileHitVecToCntTool::e4pr_index ( int  phi) const
inlineprivate

Definition at line 185 of file TileHitVecToCntTool.h.

185  {
186  return phi + N_MBTS_CELLS + m_mbtsOffset;
187  }

◆ 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 TileHitVecToCntTool::finalize ( )
finaloverride

Definition at line 997 of file TileHitVecToCntTool.cxx.

997  {
998 
999  ATH_MSG_DEBUG("Finalizing TileHitVecToCntTool");
1000 
1001  if (m_pileUp) {
1004  for (; iHit != lastHit; ++iHit) {
1005  delete (*iHit);
1006  }
1007  if(m_doDigiTruth){
1008  iHit = m_allHits_DigiHSTruth.begin();
1009  lastHit = m_allHits_DigiHSTruth.end();
1010  for (; iHit != lastHit; ++iHit) {
1011  delete (*iHit);
1012  }
1013  }
1014  }
1015 
1016  ATH_MSG_DEBUG("TileHitVecToCntTool finalized");
1017 
1018  return StatusCode::SUCCESS;
1019 
1020 }

◆ findAndMergeE1()

void TileHitVecToCntTool::findAndMergeE1 ( TileHitCollection coll,
int  frag_id,
TileHitNonConstContainer hitCont 
)
private

Definition at line 1102 of file TileHitVecToCntTool.cxx.

1102  {
1103  int module = frag_id & 0x3F;
1104 
1105  TileHitCollection::iterator hitIt = coll->begin();
1106  TileHitCollection::iterator endHitIt = coll->end();
1107 
1108  TileHitCollection::iterator fromHitIt = coll->end();
1109  TileHit* toHit(0);
1110 
1111  for (; hitIt != endHitIt; ++hitIt) {
1112  Identifier pmt_id = (*hitIt)->pmt_ID();
1113  if (m_tileID->tower(pmt_id) == E1_TOWER && m_tileID->sample(pmt_id) == TileID::SAMP_E) {
1114  if (module == m_tileID->module(pmt_id)) {
1115  toHit = *hitIt;
1116  } else {
1117  fromHitIt = hitIt; // need iterator to delete this hit later.
1118  }
1119  }
1120  }
1121 
1122  if (fromHitIt != coll->end()) {
1123  ATH_MSG_VERBOSE("Found TileHit (E1 cell) for merging [" << m_tileID->to_string((*fromHitIt)->pmt_ID(), -1)
1124  << "] in module: " << module);
1125  bool isToHitNew = false;
1126  if (toHit == 0) {
1127  int side = m_tileID->side((*fromHitIt)->pmt_ID());
1129  toHit = new TileHit(to_pmt_id);
1130  isToHitNew = true;
1131  ATH_MSG_VERBOSE("New TileHit (E1 cell) for merging added Id: " << m_tileID->to_string(toHit->pmt_ID(), -1) );
1132  } else {
1133  ATH_MSG_VERBOSE("Found TileHit (E1 cell) for merging Id: " << m_tileID->to_string(toHit->pmt_ID(), -1) );
1134  }
1135 
1136  ATH_MSG_DEBUG( "TileHit (E1 cell) Id: " << m_tileID->to_string((*fromHitIt)->pmt_ID(), -1)
1137  << " will be merged to " << m_tileID->to_string(toHit->pmt_ID(), -1) );
1138 
1139  if (msgLvl(MSG::VERBOSE)) {
1140  msg(MSG::VERBOSE) << "Before merging (E1 cell) => " << (std::string) (**fromHitIt) << endmsg;
1141  msg(MSG::VERBOSE) << "Before merging (E1 cell) => " << (std::string) (*toHit) << endmsg;
1142  }
1143 
1144  toHit->add(*fromHitIt, 0.1);
1145 
1146  if (msgLvl(MSG::VERBOSE)) {
1147  msg(MSG::VERBOSE) << "After merging (E1 cell) => " << (std::string) (*toHit) << endmsg;
1148  msg(MSG::VERBOSE) << "TileHit to be deleted Id (E1 cell): " << m_tileID->to_string((*fromHitIt)->pmt_ID(), -1) << endmsg;
1149  }
1150 
1151  coll->erase(fromHitIt);
1152 
1153  if (isToHitNew) {
1154  hitCont->push_back(toHit);
1155  }
1156  }
1157 }

◆ findAndMergeMBTS()

void TileHitVecToCntTool::findAndMergeMBTS ( TileHitCollection coll,
int  frag_id,
TileHitNonConstContainer hitCont 
)
private

Definition at line 1160 of file TileHitVecToCntTool.cxx.

1160  {
1161  int module = frag_id & 0x3F;
1162 
1163  TileHitCollection::iterator hitIt = coll->begin();
1164  TileHitCollection::iterator endHitIt = coll->end();
1165 
1166  TileHitCollection::iterator fromHitIt = coll->end();
1167  TileHit* toHit(0);
1168 
1169  for (; hitIt != endHitIt; ++hitIt) {
1170  Identifier pmt_id = (*hitIt)->pmt_ID();
1171  if (m_tileTBID->is_tiletb(pmt_id)) {
1172  if (m_tileTBID->phi(pmt_id) % 2 == 0) {
1173  toHit = *hitIt;
1174  } else {
1175  fromHitIt = hitIt; // need iterator to delete this hit later.
1176  }
1177  }
1178  }
1179 
1180  if (fromHitIt != coll->end()) {
1181  ATH_MSG_VERBOSE("Found TileHit (MBTS) for merging [" << m_tileTBID->to_string((*fromHitIt)->pmt_ID(), 0)
1182  << "] in module: " << module);
1183  bool isToHitNew = false;
1184  if (toHit == 0) {
1185  int side = m_tileTBID->side((*fromHitIt)->pmt_ID());
1186  int phi = m_tileTBID->phi((*fromHitIt)->pmt_ID()) - 1;
1187  Identifier to_pmt_id = m_tileTBID->channel_id(side, phi, 1);
1188  toHit = new TileHit(to_pmt_id);
1189  isToHitNew = true;
1190  ATH_MSG_VERBOSE("New TileHit (MBTS) for merging added Id: " << m_tileTBID->to_string(toHit->pmt_ID(), 0) );
1191  } else {
1192  ATH_MSG_VERBOSE("Found TileHit (MBTS) for merging Id: " << m_tileTBID->to_string(toHit->pmt_ID(), 0) );
1193  }
1194 
1195  ATH_MSG_DEBUG( "TileHit (MBTS) Id: " << m_tileTBID->to_string((*fromHitIt)->pmt_ID(), 0)
1196  << " will be merged to " << m_tileTBID->to_string(toHit->pmt_ID(), 0) );
1197 
1198  if (msgLvl(MSG::VERBOSE)) {
1199  msg(MSG::VERBOSE) << "Before merging (MBTS) => " << (std::string) (**fromHitIt) << endmsg;
1200  msg(MSG::VERBOSE) << "Before merging (MBTS) => " << (std::string) (*toHit) << endmsg;
1201  }
1202 
1203  toHit->add(*fromHitIt, 0.1);
1204 
1205  if (msgLvl(MSG::VERBOSE)) {
1206  msg(MSG::VERBOSE) << "After merging (MBTS) => " << (std::string) (*toHit) << endmsg;
1207  msg(MSG::VERBOSE) << "TileHit to be deleted Id (MBTS): "
1208  << m_tileTBID->to_string((*fromHitIt)->pmt_ID(), 0) << endmsg;
1209  }
1210 
1211  coll->erase(fromHitIt);
1212 
1213  if (isToHitNew) {
1214  hitCont->push_back(toHit);
1215  }
1216  }
1217 }

◆ findAndMergeMultipleHitsInChannel()

void TileHitVecToCntTool::findAndMergeMultipleHitsInChannel ( std::unique_ptr< TileHitNonConstContainer > &  hitCont)
private

Definition at line 1219 of file TileHitVecToCntTool.cxx.

1219  {
1220  for (std::unique_ptr<TileHitCollection>& coll : *hitCont) {
1221 
1222  int frag_id = coll->identify();
1223  int module = frag_id & 0x3F;
1224  IdentifierHash frag_hash = m_fragHashFunc(frag_id);
1225  std::vector<TileHit*> hits(48, nullptr);
1226  std::vector<std::unique_ptr<TileHit>> otherModuleHits;
1227  coll->erase(std::remove_if(coll->begin(), coll->end(),
1228  [this, &hits, &otherModuleHits, module, frag_hash] (TileHit* hit) {
1229  Identifier pmt_id = hit->pmt_ID();
1230  int channel = m_tileHWID->channel(hit->pmt_HWID());
1231  TileHit* channelHit = hits[channel];
1232  if (channelHit) {
1233  mergeExtraHitToChannelHit(hit, channelHit);
1234  return true;
1235  } else if (m_run2plus // Special case for merged E1 and MBTS in Run 2+ geometries, which will be merged finally correctly later
1236  && ((m_E1merged[frag_hash] && m_tileID->module(pmt_id) != module
1237  && m_tileID->tower(pmt_id) == E1_TOWER && m_tileID->sample(pmt_id) == TileID::SAMP_E) // Merged E1 in Run 2+ from other module
1238  || (m_MBTSmerged[frag_hash] && m_tileTBID->is_tiletb(pmt_id) && (m_tileTBID->phi(pmt_id) % 2 == 1)))) { // Merged MBTS in Run 2+ from other module
1239  otherModuleHits.push_back(std::make_unique<TileHit>(*hit));
1240  return true;
1241  } else {
1242  hits[channel] = hit;
1243  return false;
1244  }}),
1245  coll->end());
1246 
1247  for (std::unique_ptr<TileHit>& hit : otherModuleHits) {
1248  int channel = m_tileHWID->channel(hit->pmt_HWID());
1249  TileHit* channelHit = hits[channel];
1250  if (channelHit) {
1251  mergeExtraHitToChannelHit(hit.get(), channelHit);
1252  } else {
1253  hits[channel] = hit.get();
1254  coll->push_back(std::move(hit));
1255  }
1256  }
1257  }
1258 }

◆ initialize()

StatusCode TileHitVecToCntTool::initialize ( )
finaloverridevirtual

Reimplemented from PileUpToolBase.

Definition at line 51 of file TileHitVecToCntTool.cxx.

51  {
52 
53  ATH_MSG_DEBUG("TileHitVecToCntTool initialization started");
54 
55  bool error = false;
56 
57  ATH_CHECK(m_rndmSvc.retrieve());
58 
59  // retrieve TileID helper from det store
61 
63 
65 
67 
68  ATH_CHECK(m_cablingSvc.retrieve());
69  m_cabling = m_cablingSvc->cablingService();
70 
73 
74  if (!m_usePhotoStatistics) {
75  ATH_MSG_INFO("No photostatistics effect will be simulated");
76  }
77 
78  if (m_rndmEvtOverlay) {
79  m_pileUp = false;
80  ATH_MSG_INFO("Zero-luminosity pile-up selected");
81  ATH_MSG_INFO("Taking hits from original event only");
82  }
83 
84  if (m_pileUp || m_rndmEvtOverlay) {
85  ATH_MSG_INFO("take events from PileUp service");
86 
88  ATH_CHECK(m_mergeSvc.retrieve());
89  }
90 
91  if (m_useTriggerTime) {
92  ATH_MSG_INFO(" In case of pileup, the trigger time subtraction is done in PileUpSvc");
93  ATH_MSG_INFO(" => TileHitVecToCnt will not apply Trigger Time ");
94  m_useTriggerTime = false;
95  }
96  m_timeFlag = 0;
97 
98  if (m_pileUp) {
99  // prepare vector with all hits
101  if (m_run2){
104  } else {
107  }
108 
109  Identifier hit_id;
110  IdContext pmt_context = m_tileID->pmt_context();
111  for (int i = 0; i < m_mbtsOffset; ++i) {
112  m_tileID->get_id((IdentifierHash) i, hit_id, &pmt_context);
113  TileHit * pHit = new TileHit(hit_id, 0., 0.);
114  pHit->reserve(71); // reserve max possible size for pileup
115  m_allHits[i] = pHit;
116  if(m_doDigiTruth){
117  TileHit * pHit_DigiHSTruth = new TileHit(hit_id, 0., 0.);
118  pHit_DigiHSTruth->reserve(71); // reserve max possible size for pileup
119  m_allHits_DigiHSTruth[i] = pHit_DigiHSTruth;
120  }
121  }
122  for (int side = 0; side < N_SIDE; ++side) {
123  for (int phi = 0; phi < N_PHI; ++phi) {
124  for (int eta = 0; eta < N_ETA; ++eta) {
125  hit_id = m_tileTBID->channel_id((side > 0) ? 1 : -1, phi, eta);
126  TileHit * pHit = new TileHit(hit_id, 0., 0.);
127  pHit->reserve(71); // reserve max possible size for pileup
128  m_allHits[mbts_index(side, phi, eta)] = pHit;
129  if(m_doDigiTruth){
130  TileHit * pHit_DigiHSTruth = new TileHit(hit_id, 0., 0.);
131  pHit_DigiHSTruth->reserve(71); // reserve max possible size for pileup
132  m_allHits_DigiHSTruth[mbts_index(side, phi, eta)] = pHit_DigiHSTruth;
133  }
134  }
135  }
136  }
137  if (m_run2) {
138  for (int phi = 0; phi < E4_N_PHI; ++phi) {
139  hit_id = m_tileTBID->channel_id(E4_SIDE, phi, E4_ETA);
140  TileHit * pHit = new TileHit(hit_id, 0., 0.);
141  pHit->reserve(71); // reserve max possible size for pileup
142  m_allHits[e4pr_index(phi)] = pHit;
143  if(m_doDigiTruth){
144  TileHit * pHit_DigiHSTruth = new TileHit(hit_id, 0., 0.);
145  pHit_DigiHSTruth->reserve(71); // reserve max possible size for pileup
146  m_allHits_DigiHSTruth[e4pr_index(phi)] = pHit_DigiHSTruth;
147  }
148  }
149  }
150  }
151 
152  } else {
153 
154  ATH_MSG_INFO("no pile up");
155 
156  if (m_useTriggerTime) {
157 
158  m_timeFlag = 2;
159 
160  if (!m_triggerTimeTool.empty()) {
161  ATH_MSG_INFO( "Trigger time is taken from external tool '" << m_triggerTimeTool.name()
162  << "'; therefore set HitTimeFlag to 2");
163  if (m_triggerTimeTool.retrieve().isFailure()) {
164  error = true;
165  ATH_MSG_ERROR("Unable to find tool for " << m_triggerTimeTool.name());
166  ATH_MSG_ERROR("Take average time from all hits in event as trigger time");
167  m_useTriggerTime = false;
168  m_triggerTimeTool.setTypeAndName("");
169  }
170  }
171  }
172 
173  switch (m_timeFlag) {
174  case 2:
175  if (m_triggerTimeTool.empty()) {
176  if (m_triggerTime > 0.0) {
177  m_useTriggerTime = true;
178  ATH_MSG_INFO("Fixed trigger time of " << m_triggerTime << " ns will be used");
179  } else if (m_triggerTime < 0.0) {
180  m_useTriggerTime = false;
181  ATH_MSG_INFO( "Minimal hit time will be used as trigger time"
182  << " with random additional shift between 0 and " << -m_triggerTime << " ns");
183  } else {
184  m_useTriggerTime = false;
185  ATH_MSG_INFO("Average time will be calculated in every event");
186  }
187  }
188  break;
189  case 1:
190  ATH_MSG_INFO("Time of all hits will be reset to zero");
191  break;
192  default:
193  ATH_MSG_INFO("Time of all hits will be preserved during copy");
194  m_timeFlag = 0;
195  break;
196  }
197  }
198 
199  if (m_run2plus) {
201 
204 
205  for (int ros = 3; ros < 5; ++ros) {
206  for (int drawer = 0; drawer < 64; ++drawer) {
207  int frag_id = m_tileHWID->frag(ros, drawer);
208  IdentifierHash frag_hash = m_fragHashFunc(frag_id);
209  m_E1merged[frag_hash] = (m_cabling->E1_merged_with_run2plus(ros, drawer) != 0);
211  }
212  }
213  ATH_MSG_INFO("Number of E1 cell to be merged: " << std::count (m_E1merged.begin(), m_E1merged.end(), true));
214  ATH_MSG_INFO("Number of MBTS cell to be merged: " << std::count (m_MBTSmerged.begin(), m_MBTSmerged.end(), true));
215  }
216 
218  m_hitVectorNames = m_inputKeys.value();
219  }
220  else {
221  ATH_CHECK(m_hitVectorKeys.assign(m_inputKeys.value()));
222  }
223  ATH_MSG_DEBUG("Input objects in these containers : '" << m_hitVectorNames << "'");
224 
225  // Initialize ReadHandleKey
227 
230 
231  ATH_MSG_DEBUG("TileHitVecToCntTool initialization completed");
232 
233  if (error)
234  return StatusCode::RECOVERABLE;
235  else
236  return StatusCode::SUCCESS;
237 }

◆ mbts_index()

int TileHitVecToCntTool::mbts_index ( int  side,
int  phi,
int  eta 
) const
inlineprivate

Definition at line 178 of file TileHitVecToCntTool.h.

178  {
179  return (side * N_PHI + phi) * N_ETA + eta + m_mbtsOffset;
180  }

◆ mergeEvent()

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

Definition at line 832 of file TileHitVecToCntTool.cxx.

832  {
833 
834  ATH_MSG_DEBUG("Entering mergeEvent in TileHitVecToCntTool");
835 
836  if (m_pileUp) {
837 
840  std::vector<TileHit *>::iterator iHit_DigiHSTruth = m_allHits_DigiHSTruth.begin();
841 
842  int nHitUni = 0;
843  double eHitInTime = 0.0;
844 
845  ATH_MSG_DEBUG("Hits being stored in container");
846 
847  for (; iHit != lastHit; ++iHit) {
848  TileHit *pHit = (*iHit);
849  TileHit *pHit_DigiHSTruth(nullptr);
850  if(m_doDigiTruth) pHit_DigiHSTruth = new TileHit(**iHit_DigiHSTruth);
851  if (pHit->size() > 1 || pHit->energy() != 0.0) { // hit exists
852  m_hits->push_back(pHit); // store hit in container
853  if(m_doDigiTruth){
854  m_hits_DigiHSTruth->push_back(pHit_DigiHSTruth); // store hit in container
855  }
856  ++nHitUni;
857  eHitInTime += pHit->energy();
858  }
859  if(m_doDigiTruth) ++iHit_DigiHSTruth;
860  }
861 
862 
863  ATH_MSG_DEBUG(" nHitUni=" << nHitUni << " eHitInTime="<< eHitInTime);
864  } else {
867  if (m_doDigiTruth) {
869  }
870  }
871  }
872 
873  if (m_run2plus) {
874  // Merge MBTS and E1 where it is needed.
875 
876  for (std::unique_ptr<TileHitCollection>& coll : *m_hits ) {
877  int frag_id = coll->identify();
878  IdentifierHash frag_hash = m_fragHashFunc(frag_id);
879  if (m_E1merged[frag_hash])
880  findAndMergeE1(coll.get(), frag_id, m_hits.get());
881  else if (m_MBTSmerged[frag_hash]) findAndMergeMBTS(coll.get(), frag_id, m_hits.get());
882  }
883  if(m_doDigiTruth){
886 
887  for (; collIt != endcollIt; ++collIt) {
888  int frag_id = (*collIt)->identify();
889  IdentifierHash frag_hash = m_fragHashFunc(frag_id);
890  if (m_E1merged[frag_hash]) findAndMergeE1((*collIt).get(), frag_id, m_hits_DigiHSTruth.get());
891  else if (m_MBTSmerged[frag_hash]) findAndMergeMBTS((*collIt).get(), frag_id, m_hits_DigiHSTruth.get());
892  }
893  }
894  }
895 
896  //photoelectron statistics.
897  //loop over all hits in TileHitContainer and take energy deposited in certain period of time
898  //std::vector<std::string>::const_iterator hitVecNamesEnd = m_hitVectorNames.end();
899 
900  ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, m_randomStreamName);
901  CLHEP::HepRandomEngine * engine = rngWrapper->getEngine(ctx);
902 
904  ATH_CHECK( samplingFraction.isValid() );
905 
906  TileHitNonConstContainer::iterator collIt_DigiHSTruth;
907  TileHitNonConstContainer::iterator endColl_DigiHSTruth;
908  if(m_doDigiTruth) {
909  collIt_DigiHSTruth = m_hits_DigiHSTruth->begin();
910  endColl_DigiHSTruth = m_hits_DigiHSTruth->end();
911  }
912 
913  for (std::unique_ptr<TileHitCollection>& coll : *m_hits ) {
914  TileHitCollection* coll_DigiHSTruth;
915  TileHitCollection::iterator hitItr_DigiHSTruth;
916  TileHitCollection::iterator hitEnd_DigiHSTruth;
917  if(m_doDigiTruth) {
918  coll_DigiHSTruth = (*collIt_DigiHSTruth).get();
919  hitItr_DigiHSTruth = coll_DigiHSTruth->begin();
920  hitEnd_DigiHSTruth = coll_DigiHSTruth->end();
921  }
922 
923  HWIdentifier drawer_id = m_tileHWID->drawer_id(coll->identify());
924  int ros = m_tileHWID->ros(drawer_id);
925  int drawer = m_tileHWID->drawer(drawer_id);
926  int drawerIdx = TileCalibUtils::getDrawerIdx(ros, drawer);
927 
928  for (TileHit* pHit : *coll) {
929  double ehit = 0.0;
930  int hitsize = pHit->size();
931  for (int i = 0; i < hitsize; ++i) {
932  double thit = pHit->time(i);
933  if (fabs(thit) < m_photoStatisticsWindow) ehit += pHit->energy(i);
934  }
935 
936  Identifier pmt_id = pHit->pmt_ID();
937  //HWIdentifier channel_id = (*hitItr)->pmt_HWID();
938  // for gap/crack scintillators
939  if (m_tileID->sample(pmt_id) == 3) {
940  pmt_id = m_tileID->pmt_id(m_tileID->cell_id(pmt_id), 0);
941  //channel_id = m_cabling->s2h_channel_id(pmt_id);
942  }
943 
944  double scaleFactor = 1.0;
945  if (m_usePhotoStatistics) {
946  scaleFactor = applyPhotoStatistics(ehit, pmt_id, engine, *samplingFraction, drawerIdx);
947  pHit->scale(scaleFactor);
948  }
949 
950  if(m_doDigiTruth){
951  TileHit *pHit_DigiHSTruth = (*hitItr_DigiHSTruth);
952  pHit_DigiHSTruth->scale(scaleFactor);
953 
954  ++hitItr_DigiHSTruth;
955  }
956  }
957 
958  if(m_doDigiTruth) ++collIt_DigiHSTruth;
959  }
960 
961 
962 
963  /* Register the set of TileHits to the event store. */
964  auto hits = std::make_unique<TileHitContainer>
966  size_t hashId = 0;
967  for (std::unique_ptr<TileHitCollection>& coll : *m_hits ) {
968  CHECK(hits->addCollection (coll.release(), hashId++));
969  }
970 
972  ATH_CHECK( hitContainer.record(std::move(hits)) );
973 
974  ATH_MSG_DEBUG("TileHit container registered to the TES with name" << m_hitContainerKey.key());
975 
976  // if (m_skipNoHit && nHit==0) {
977  // setFilterPassed(false);
978  // ATH_MSG_DEBUG ( " No hits, skip this event " );
979  // }
980 
981  if(m_doDigiTruth){
982  auto hits_DigiHSTruth = std::make_unique<TileHitContainer>
984  size_t hashId_DigiHSTruth = 0;
985  for (std::unique_ptr<TileHitCollection>& coll : *m_hits_DigiHSTruth ) {
986  ATH_CHECK(hits_DigiHSTruth->addCollection (coll.release(), hashId_DigiHSTruth++));
987  }
988 
990  ATH_CHECK( hitContainer_DigiHSTruth.record(std::move(hits_DigiHSTruth)) );
991  }
992 
993  ATH_MSG_DEBUG("Exiting mergeEvent in TileHitVecToCntTool");
994  return StatusCode::SUCCESS;
995 }

◆ mergeExtraHitToChannelHit()

void TileHitVecToCntTool::mergeExtraHitToChannelHit ( TileHit extraHit,
TileHit channelHit 
)
private

Definition at line 1260 of file TileHitVecToCntTool.cxx.

1260  {
1261 
1262  ATH_MSG_DEBUG("Found extra hit for channel Id: "
1263  << m_tileID->to_string(extraHit->pmt_ID(), -1) << ", will be merged to "
1264  << m_tileID->to_string(channelHit->pmt_ID(), -1));
1265  ATH_MSG_VERBOSE("Before merging => " << (std::string) (*extraHit));
1266  ATH_MSG_VERBOSE("Before merging => " << (std::string) (*channelHit));
1267 
1268  channelHit->add(extraHit, 0.1);
1269 
1270  ATH_MSG_VERBOSE("After merging => " << (std::string) (*channelHit));
1271 }

◆ prepareEvent()

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

Definition at line 275 of file TileHitVecToCntTool.cxx.

275  {
276 
277  ATH_MSG_DEBUG("TileHitVecToCntTool prepareEvent initialization started");
278 
279  CHECK(this->createContainers());
280 
281  ATH_MSG_DEBUG("TileHitVecToCntTool prepareEvent finished");
282 
283  ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, m_randomStreamName);
284  rngWrapper->setSeed( m_randomStreamName, ctx );
285 
286  return StatusCode::SUCCESS;
287 }

◆ processAllSubEvents() [1/2]

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

Reimplemented from PileUpToolBase.

Definition at line 738 of file TileHitVecToCntTool.cxx.

738  {
739 
740  ATH_MSG_DEBUG("TileHitVecToCntTool processAllSubEvents started");
741  typedef PileUpMergeSvc::TimedList<TileHitVector>::type TimedHitContList;
742 
743  ATH_CHECK(this->createContainers());
744 
745  /* zero all counters and sums */
746  int nHit(0);
747  double eHitTot(0.0);
748 
749  ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, m_randomStreamName);
750  rngWrapper->setSeed( name(), ctx );
751  CLHEP::HepRandomEngine * engine = rngWrapper->getEngine(ctx);
752 
754  auto hitVectorHandles = m_hitVectorKeys.makeHandles(ctx);
755  for (auto & inputHits : hitVectorHandles) {
756  if (!inputHits.isValid()) {
757  ATH_MSG_ERROR("BAD HANDLE"); //FIXME improve error here
758  return StatusCode::FAILURE;
759  }
760  const double SubEvtTimeOffset(0.0);
761  // get HitVector for this subevent
762  ATH_MSG_DEBUG(" New HitCont. TimeOffset=" << SubEvtTimeOffset << ", size =" << inputHits->size());
763  this->processHitVectorForOverlay(inputHits.cptr(), nHit, eHitTot);
764  if(m_doDigiTruth) this->processHitVectorWithoutPileUp(inputHits.cptr(), nHit, eHitTot, m_hits_DigiHSTruth.get(), engine);
765  }
766  ATH_CHECK(this->mergeEvent(ctx));
767  return StatusCode::SUCCESS;
768  }
769 
770  for (const auto& hitVectorName : m_hitVectorNames) {
771 
772  if (m_pileUp || m_rndmEvtOverlay) {
773  TimedHitContList hitContList;
774  // retrive list of pairs (time,container) from PileUp service
775  if (!(m_mergeSvc->retrieveSubEvtsData(hitVectorName, hitContList).isSuccess()) || hitContList.size() == 0) {
776  ATH_MSG_WARNING("Could not fill TimedHitContList for hit vector " << hitVectorName);
777  continue; // continue to the next hit vector
778  }
779 
780  // loop over this list
781  TimedHitContList::iterator iCont(hitContList.begin());
782  TimedHitContList::iterator iEndCont(hitContList.end());
783 
784  if (m_rndmEvtOverlay) { // overlay code
785  if (iCont != iEndCont) { // use only hits from first container
786  // get time for this subevent
787  const double SubEvtTimeOffset(iCont->first.time());
788  if (fabs(SubEvtTimeOffset) > 0.1) {
789  ATH_MSG_ERROR("Wrong time for in-time event: " << SubEvtTimeOffset << " Ignoring all hits ");
790  } else {
791  // get HitVector for this subevent
792  const TileHitVector* inputHits = &(*(iCont->second));
793  ATH_MSG_DEBUG(" New HitCont. TimeOffset=" << SubEvtTimeOffset << ", size =" << inputHits->size());
794  this->processHitVectorForOverlay(inputHits, nHit, eHitTot);
795  if(m_doDigiTruth) this->processHitVectorWithoutPileUp(inputHits, nHit, eHitTot, m_hits_DigiHSTruth.get(), engine);
796  }
797  }
798  } else if (m_pileUp) { // pileup code
799 
800  for (; iCont != iEndCont; ++iCont) {
801  // get time for this subevent
802  const double SubEvtTimeOffset(iCont->first.time());
803  // get HitVector for this subevent
804  const TileHitVector* inputHits = &(*(iCont->second));
805  ATH_MSG_VERBOSE(" New HitCont. TimeOffset=" << SubEvtTimeOffset << ", size =" << inputHits->size());
806  bool isSignal = false;
807  if(iCont == hitContList.begin() ) isSignal = true;
808  this->processHitVectorForPileUp(inputHits, SubEvtTimeOffset, nHit, eHitTot, isSignal);
809  }
810  } // loop over subevent list
811  } else { // no PileUp
812 
813  //**
814  //* Get TileHits from TileHitVector
815  //**
816  SG::ReadHandle<TileHitVector> inputHits(hitVectorName);
817  if (!inputHits.isValid()) {
818  ATH_MSG_WARNING("Hit Vector "<< hitVectorName << " not found in StoreGate");
819  continue; // continue to the next hit vector
820  }
821  this->processHitVectorWithoutPileUp(inputHits.cptr(), nHit, eHitTot, m_hits.get(), engine);
822  if(m_doDigiTruth) this->processHitVectorWithoutPileUp(inputHits.cptr(), nHit, eHitTot, m_hits_DigiHSTruth.get(), engine);
823  }
824 
825  } // end of the loop over different input hitVectorNames (normal hits and MBTS hits)
826 
827  ATH_CHECK(this->mergeEvent(ctx));
828 
829  return StatusCode::SUCCESS;
830 }

◆ processAllSubEvents() [2/2]

virtual StatusCode IPileUpTool::processAllSubEvents
inherited

dummy implementation to allow compilation while all Digitization packages are migrated to use this new interface.

◆ processBunchXing()

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

Reimplemented from PileUpToolBase.

Definition at line 667 of file TileHitVecToCntTool.cxx.

670 {
671 
672  ATH_MSG_DEBUG("Inside TileHitVecToCntTool processBunchXing" << bunchXing);
673  // setFilterPassed(true);
674 
675  ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, m_randomStreamName);
676  CLHEP::HepRandomEngine * engine = rngWrapper->getEngine(Gaudi::Hive::currentContext());
677 
678  SubEventIterator iEvt(bSubEvents);
679  if (m_rndmEvtOverlay && bunchXing != 0) iEvt = eSubEvents; // in overlay skip all events except BC=0
680 
681  while (iEvt != eSubEvents) {
682  /* zero all counters and sums */
683  int nHit(0);
684  double eHitTot(0.0);
685 
686  std::vector<std::string>::const_iterator hitVecNamesItr = m_hitVectorNames.begin();
687  std::vector<std::string>::const_iterator hitVecNamesEnd = m_hitVectorNames.end();
688  for (; hitVecNamesItr != hitVecNamesEnd; ++hitVecNamesItr) {
689 
690  const std::string hitVectorName(*hitVecNamesItr);
691 
692  if (m_pileUp || m_rndmEvtOverlay) {
693 
694  const TileHitVector* inputHits;
695  if (!(m_mergeSvc->retrieveSingleSubEvtData(hitVectorName, inputHits, bunchXing, iEvt))){
696  ATH_MSG_ERROR(" Tile Hit container not found for event key " << hitVectorName);
697  }
698 
699  const double SubEvtTimOffset(iEvt->time());
700 
701  if (m_rndmEvtOverlay) { // overlay code
702  if (fabs(SubEvtTimOffset) > 0.1) {
703  ATH_MSG_ERROR("Wrong time for in-time event: " << SubEvtTimOffset << " Ignoring all hits ");
704  } else {
705  ATH_MSG_DEBUG(" New HitCont. TimeOffset=" << SubEvtTimOffset << ", size =" << inputHits->size());
706  this->processHitVectorForOverlay(inputHits, nHit, eHitTot);
707  //if( m_doDigiTruth && iEvt == bSubEvents) this->processHitVectorWithoutPileUp(inputHits, nHit, eHitTot, m_signalHits, engine);
708  }
709  } else if (m_pileUp) { // pileup code
710  bool isSignal = false;
711  if(iEvt == bSubEvents) isSignal = true;
712  this->processHitVectorForPileUp(inputHits, SubEvtTimOffset, nHit, eHitTot, isSignal);
713  }
714  } else { // no PileUp
715  //**
716  //* Get TileHits from TileHitVector
717  //**
718  const TileHitVector * inputHits = nullptr;
719  if (!(m_mergeSvc->retrieveSingleSubEvtData(hitVectorName, inputHits, bunchXing, iEvt))){
720  ATH_MSG_ERROR(" Tile Hit container not found for event key " << hitVectorName);
721  }
722 
723  this->processHitVectorWithoutPileUp(inputHits, nHit, eHitTot, m_hits.get(), engine);
724  if(m_doDigiTruth) this->processHitVectorWithoutPileUp(inputHits, nHit, eHitTot, m_hits_DigiHSTruth.get(), engine);
725  } // to pile-up or not
726 
727  } // end of the loop over different input hitVectorNames (normal hits and MBTS hits)
728 
729  ++iEvt;
730  if (m_rndmEvtOverlay) iEvt = eSubEvents; // in overlay skip all events except fisrt one
731  } // subEvent loop
732 
733  ATH_MSG_DEBUG("Exiting processBunchXing in TileHitVecToCntTool");
734 
735  return StatusCode::SUCCESS;
736 }

◆ processHitVectorForOverlay()

void TileHitVecToCntTool::processHitVectorForOverlay ( const TileHitVector inputHits,
int &  nHit,
double &  eHitTot 
)
private

Definition at line 289 of file TileHitVecToCntTool.cxx.

289  {
290 
291  TileHitVecConstIterator inpItr = inputHits->begin();
292  TileHitVecConstIterator end = inputHits->end();
293 
294  for (; inpItr != end; ++inpItr) {
295 
296  const TileHit * cinp = &(*inpItr);
297 
298  eHitTot += cinp->energy(); // not really correct if TileHit contains vector of energies
299  // but eHitTot is needed for debug purposes only
300  TileHit * pHit = new TileHit(*cinp);
301  m_hits->push_back(pHit);
302  ++nHit;
303 
304  if (msgLvl(MSG::VERBOSE)) {
305  int hitsize = cinp->size();
306  double eHit = 0.0;
307  double tHit = 0.0;
308  for (int i = 0; i < hitsize; ++i) {
309  eHit += cinp->energy(i);
310  tHit += cinp->time(i) * cinp->energy(i);
311  }
312  if (eHit > 0.0)
313  tHit /= eHit;
314  else
315  tHit = cinp->time();
316 
317  eHitTot += eHit - cinp->energy(); // put total energy instead of first hit energy
318 
319  msg(MSG::VERBOSE) << " nHit=" << nHit
320  << " id=" << m_tileID->to_string(cinp->identify(), -1)
321  << " eHit=" << eHit
322  << " tHit=" << tHit
323  << " Copy hit: ener=";
324  for (int i = 0; i < hitsize; ++i)
325  msg(MSG::VERBOSE) << cinp->energy(i) << " ";
326  msg(MSG::VERBOSE) << "time=";
327  for (int i = 0; i < hitsize; ++i)
328  msg(MSG::VERBOSE) << cinp->time(i) << " ";
329  msg(MSG::VERBOSE) << endmsg;
330  }
331  }
332  return;
333 }

◆ processHitVectorForPileUp()

void TileHitVecToCntTool::processHitVectorForPileUp ( const TileHitVector inputHits,
double  SubEvtTimOffset,
int &  nHit,
double &  eHitTot,
bool  isSignal = false 
)
private

Definition at line 335 of file TileHitVecToCntTool.cxx.

336  {
337 
338  IdContext pmt_context = m_tileID->pmt_context();
339  IdContext tbchannel_context = m_tileTBID->channel_context();
340  IdentifierHash hit_idhash;
341 
342  const bool inTimeEvent(fabs(SubEvtTimOffset) < m_deltaT);
343  // Loop over hits in this HitVector
344  TileHitVecConstIterator inpItr = inputHits->begin();
345  TileHitVecConstIterator end = inputHits->end();
346 
347  for (; inpItr != end; ++inpItr) {
348 
349  const TileHit * cinp = &(*inpItr);
350  Identifier hit_id = cinp->identify();
351 
352  if (m_tileTBID->is_tiletb(hit_id)) {
353  int side = std::max(0, m_tileTBID->type(hit_id));
354  int phi = m_tileTBID->module(hit_id);
355  int eta = m_tileTBID->channel(hit_id);
356  if (eta < 2)
357  hit_idhash = mbts_index(side, phi, eta);
358  else
359  hit_idhash = e4pr_index(phi);
360  } else {
361  m_tileID->get_hash(hit_id, hit_idhash, &pmt_context);
362  }
363 
364  if (hit_idhash >= m_allHits.size()) {
365  // Seems to be E4pr or MBTS hit in minimum bias while geometry is used without them => skipping
366  continue;
367  }
368 
369  double ener = cinp->energy();
370  double time = cinp->time() + SubEvtTimOffset;
371 
372  ++nHit;
373  eHitTot += ener;
374 
375  TileHit * pHit = m_allHits[hit_idhash];
376  TileHit * pHit_DigiHSTruth(nullptr);
377  if(m_doDigiTruth) pHit_DigiHSTruth = m_allHits_DigiHSTruth[hit_idhash];
378 
379  if (0 == pHit) {
380 
381  // keep this "if" just in case there is a bug somewhere ... ( will be removed soon)
382  ATH_MSG_ERROR(" new hit AND MEMORY LEAK HERE!!!");
383 
384  if (inTimeEvent) {
385  pHit = new TileHit(hit_id, ener, time, m_deltaT);
386  if(m_doDigiTruth && isSignal) pHit_DigiHSTruth = new TileHit(hit_id, ener, time, m_deltaT);
387  else if(m_doDigiTruth) pHit_DigiHSTruth = new TileHit(hit_id, 0.0, 0.0);
388  } else {
389  pHit = new TileHit(hit_id, 0.0, 0.0); // create in-time hit with zero energy
390  pHit->add(ener, time, m_deltaT);
391  if(m_doDigiTruth){
392  pHit_DigiHSTruth = new TileHit(hit_id, 0.0, 0.0); // create in-time hit with zero energy
393  pHit_DigiHSTruth->add(ener, time, m_deltaT);
394  }
395  }
396  m_allHits[hit_idhash] = pHit;
397  if(m_doDigiTruth) m_allHits_DigiHSTruth[hit_idhash] = pHit_DigiHSTruth;
398 
399  if (msgLvl(MSG::VERBOSE)) {
400  HWIdentifier channel_id = pHit->pmt_HWID();
401  msg(MSG::VERBOSE) << " nH=" << nHit
402  << " id=" << m_tileID->to_string(hit_id, -1)
403  << " HWid=" << m_tileID->to_string(channel_id)
404  << " e=" << ener
405  << " time=" << time
406  << " offs=" << SubEvtTimOffset
407  << " new hit" << endmsg;
408  }
409 
410  } else {
411 
412  if (time < m_maxHitTime){
413  pHit->add(ener, time, m_deltaT);
414  if(m_doDigiTruth){
415  if(isSignal) {
416  pHit_DigiHSTruth->add(ener, time, m_deltaT);
417  } else {
418  pHit_DigiHSTruth->add(0,time, m_deltaT);
419  }
420  }
421  }
422 
423  if (msgLvl(MSG::VERBOSE)) {
424  if (pHit->size() > 1 || pHit->energy() != 0.0)
425  msg(MSG::VERBOSE) << " nHit=" << nHit
426  << " id=" << m_tileID->to_string(hit_id, -1)
427  << " ener=" << ener
428  << " time=" << time
429  << " offs=" << SubEvtTimOffset
430  << " double hit" << endmsg;
431  else
432  msg(MSG::VERBOSE) << " nH=" << nHit
433  << " id=" << m_tileID->to_string(hit_id, -1)
434  << " HWid=" << m_tileID->to_string(pHit->pmt_HWID())
435  << " e=" << ener
436  << " time=" << time
437  << " offs=" << SubEvtTimOffset
438  << " new hit" << endmsg;
439  }
440  }
441 
442  int hitsize = cinp->size();
443  for (int ind = 1; ind < hitsize; ++ind) { // if we have double hits in original hit
444  ener = cinp->energy(ind); // merge all of them with appropriate time
445  time = cinp->time(ind) + SubEvtTimOffset;
446 
447  ++nHit;
448  eHitTot += ener;
449 
450  if (time < m_maxHitTime){
451  pHit->add(ener, time, m_deltaT);
452  if(m_doDigiTruth){
453  if(isSignal)
454  pHit_DigiHSTruth->add(ener, time, m_deltaT);
455  else
456  pHit_DigiHSTruth->add(0, time, m_deltaT);
457  }
458  }
459 
460  if (msgLvl(MSG::VERBOSE))
461  msg(MSG::VERBOSE) << " nHit=" << nHit
462  << " id=" << m_tileID->to_string(hit_id, -1)
463  << " ener=" << ener
464  << " time=" << time
465  << " double hit from single hit" << endmsg;
466  }
467  } // loop over hits in one vector
468  return;
469 }

◆ processHitVectorWithoutPileUp()

void TileHitVecToCntTool::processHitVectorWithoutPileUp ( const TileHitVector inputHits,
int &  nHit,
double &  eHitTot,
TileHitNonConstContainer hitCont,
CLHEP::HepRandomEngine *  engine 
)
private

Definition at line 471 of file TileHitVecToCntTool.cxx.

471  {
472 
473  TileHitVecConstIterator inpItr = inputHits->begin();
474  TileHitVecConstIterator end = inputHits->end();
475 
476  //**
477  //* Iterate over hits, creating new TileHits
478  //* Add each TileHit to the TileHitContainer.
479  //**
480 
481  switch (m_timeFlag) {
482 
483  case 0: {
484  for (; inpItr != end; ++inpItr) {
485  const TileHit * cinp = &(*inpItr);
486  eHitTot += cinp->energy(); // not really correct if TileHit contains vector of energies
487  // but eHitTot is needed for debug purposes only
488  TileHit * pHit = new TileHit(*cinp);
489  hitCont->push_back(pHit);
490  ++nHit;
491 
492  if (msgLvl(MSG::VERBOSE)) {
493  int hitsize = cinp->size();
494  double eHit = 0.0;
495  double tHit = 0.0;
496  for (int i = 0; i < hitsize; ++i) {
497  eHit += cinp->energy(i);
498  tHit += cinp->time(i) * cinp->energy(i);
499  }
500  if (eHit > 0.0)
501  tHit /= eHit;
502  else
503  tHit = cinp->time();
504 
505  eHitTot += eHit - cinp->energy(); // put total energy instead of first hit energy
506 
507  msg(MSG::VERBOSE) << " nHit=" << nHit
508  << " id=" << m_tileID->to_string(cinp->identify(), -1)
509  << " eHit=" << eHit
510  << " tHit=" << tHit
511  << " Copy hit: ener=";
512  for (int i = 0; i < hitsize; ++i)
513  msg(MSG::VERBOSE) << cinp->energy(i) << " ";
514  msg(MSG::VERBOSE) << "time=";
515  for (int i = 0; i < hitsize; ++i)
516  msg(MSG::VERBOSE) << cinp->time(i) << " ";
517  msg(MSG::VERBOSE) << endmsg;
518  }
519  }
520  break;
521  }
522 
523  case 1: {
524 
525  for (; inpItr != end; ++inpItr) {
526  const TileHit * cinp = &(*inpItr);
527  int size = cinp->size();
528  double eHit = 0.0;
529  for (int i = 0; i < size; ++i) {
530  eHit += cinp->energy(i);
531  }
532  eHitTot += eHit;
533 
534  // create hit with total energy at time=0 instead of original one
535  Identifier pmID = cinp->pmt_ID();
536  TileHit * pHit = new TileHit(pmID, eHit, 0.);
537 
538  hitCont->push_back(pHit);
539  ++nHit;
540 
541  if (msgLvl(MSG::VERBOSE)) {
542  int hitsize = cinp->size();
543  msg(MSG::VERBOSE) << " nHit=" << nHit
544  << " id=" << m_tileID->to_string(cinp->identify(), -1)
545  << " eHit=" << eHit
546  << " tHit=0.0"
547  << " Input hit: ener=";
548  for (int i = 0; i < hitsize; ++i)
549  msg(MSG::VERBOSE) << cinp->energy(i) << " ";
550  msg(MSG::VERBOSE) << "time=";
551  for (int i = 0; i < hitsize; ++i)
552  msg(MSG::VERBOSE) << cinp->time(i) << " ";
553  msg(MSG::VERBOSE) << endmsg;
554  }
555  }
556  break;
557 
558  }
559 
560  case 2: {
561 
562  double avtime = 0.0;
563 
564  if (m_useTriggerTime) {
565 
566  if (m_triggerTimeTool.empty()) {
567  avtime = m_triggerTime;
568  } else {
569  avtime = m_triggerTimeTool->time();
570  }
571  ATH_MSG_DEBUG("Trigger time used : " << avtime);
572 
573  } else {
574 
575  if (m_triggerTime < 0.0) {
576 
577  avtime = 1.0e20;
578 
579  // loop to find minimal time
580  for (; inpItr != end; ++inpItr) {
581  const TileHit * cinp = &(*inpItr);
582  int size = cinp->size();
583  for (int i = 0; i < size; ++i) {
584  if (cinp->time(i) < avtime) avtime = cinp->time(i);
585  }
586  }
587  ATH_MSG_DEBUG("Minimal time in input event " << avtime);
588  double shift = RandFlat::shoot(engine, m_triggerTime, 0.0);
589  ATH_MSG_DEBUG("Minimal time after random shift " << shift);
590  avtime -= shift; // subtracting negative shift value here
591 
592  } else {
593 
594  double weight = 0.0;
595 
596  // loop to calculate average time
597  for (; inpItr != end; ++inpItr) {
598  const TileHit * cinp = &(*inpItr);
599  int size = cinp->size();
600  for (int i = 0; i < size; ++i) {
601  avtime += cinp->time(i) * cinp->energy(i);
602  weight += cinp->energy(i);
603  }
604  }
605  if (weight > 0.0)
606  avtime /= weight;
607  else
608  avtime = 0.0;
609 
610  ATH_MSG_DEBUG("Average time used : " << avtime);
611  }
612 
613  // reset iterator to the first hit
614  inpItr = inputHits->begin();
615  }
616 
617  for (; inpItr != end; ++inpItr) {
618  const TileHit * cinp = &(*inpItr);
619  TileHit * pHit = new TileHit(*cinp);
620  // subract average time from all time bins in the hit
621  int size = pHit->size();
622  for (int i = 0; i < size; ++i) {
623  pHit->setTime(pHit->time(i) - avtime, i);
624  eHitTot += cinp->energy(i);
625  }
626 
627  hitCont->push_back(pHit);
628  ++nHit;
629 
630  if (msgLvl(MSG::VERBOSE)) {
631  int hitsize = pHit->size();
632  double eHit = 0.0;
633  double tHit = 0.0;
634  for (int i = 0; i < hitsize; ++i) {
635  eHit += pHit->energy(i);
636  tHit += pHit->time(i) * cinp->energy(i);
637  }
638  if (eHit > 0.0)
639  tHit /= eHit;
640  else
641  tHit = cinp->time(); // just first time
642 
643  msg(MSG::VERBOSE) << " nHit=" << nHit
644  << " id=" << m_tileID->to_string(pHit->identify(), -1)
645  << " eHit=" << eHit
646  << " tHit=" << tHit
647  << " Output hit: ener=";
648  for (int i = 0; i < hitsize; ++i)
649  msg(MSG::VERBOSE) << pHit->energy(i) << " ";
650  msg(MSG::VERBOSE) << "time=";
651  for (int i = 0; i < hitsize; ++i)
652  msg(MSG::VERBOSE) << pHit->time(i) << " ";
653  msg(MSG::VERBOSE) << endmsg;
654  }
655  }
656  break;
657  }
658 
659  default:
660  ATH_MSG_ERROR("unexpected value m_timeFlag=" << m_timeFlag);
661  break;
662  }
663 
664  return;
665 }

◆ 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; }

◆ 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  }

Member Data Documentation

◆ E4_ETA

const int TileHitVecToCntTool::E4_ETA = 2
staticprivate

Definition at line 182 of file TileHitVecToCntTool.h.

◆ E4_N_PHI

const int TileHitVecToCntTool::E4_N_PHI = 4
staticprivate

Definition at line 183 of file TileHitVecToCntTool.h.

◆ E4_SIDE

const int TileHitVecToCntTool::E4_SIDE = -1
staticprivate

Definition at line 181 of file TileHitVecToCntTool.h.

◆ m_allHits

std::vector<TileHit*> TileHitVecToCntTool::m_allHits
private

vector for all TileHits

Definition at line 168 of file TileHitVecToCntTool.h.

◆ m_allHits_DigiHSTruth

std::vector<TileHit*> TileHitVecToCntTool::m_allHits_DigiHSTruth
private

vector for all TileHits

Definition at line 169 of file TileHitVecToCntTool.h.

◆ m_cabling

const TileCablingService* TileHitVecToCntTool::m_cabling {}
private

Definition at line 190 of file TileHitVecToCntTool.h.

◆ m_cablingSvc

ServiceHandle<TileCablingSvc> TileHitVecToCntTool::m_cablingSvc {this, "TileCablingSvc", "TileCablingSvc", ""}
private

Definition at line 189 of file TileHitVecToCntTool.h.

◆ m_deltaT

Gaudi::Property<double> TileHitVecToCntTool::m_deltaT
private
Initial value:
{this, "DeltaT", 1.0*Gaudi::Units::nanosecond,
"Minimal Time granularity in TileHit (default=1ns)"}

minimal time granularity for TileHit

Definition at line 131 of file TileHitVecToCntTool.h.

◆ m_doDigiTruth

Gaudi::Property<bool> TileHitVecToCntTool::m_doDigiTruth
private
Initial value:
{this, "DoHSTruthReconstruction", false,
"DigiTruth reconstruction"}

Definition at line 149 of file TileHitVecToCntTool.h.

◆ m_E1merged

std::vector<bool> TileHitVecToCntTool::m_E1merged
private

Definition at line 192 of file TileHitVecToCntTool.h.

◆ m_filterPassed

bool PileUpToolBase::m_filterPassed {true}
protectedinherited

Definition at line 60 of file PileUpToolBase.h.

◆ 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.

◆ m_fragHashFunc

TileFragHash TileHitVecToCntTool::m_fragHashFunc
private

Definition at line 191 of file TileHitVecToCntTool.h.

◆ m_hitContainer_DigiHSTruthKey

SG::WriteHandleKey<TileHitContainer> TileHitVecToCntTool::m_hitContainer_DigiHSTruthKey
private
Initial value:
{this,"TileHitContainer_DigiHSTruth","TileHitCnt_DigiHSTruth",
"Output DigiHSTruth Tile hit container key"}

Definition at line 118 of file TileHitVecToCntTool.h.

◆ m_hitContainerKey

SG::WriteHandleKey<TileHitContainer> TileHitVecToCntTool::m_hitContainerKey
private
Initial value:
{this,"TileHitContainer","TileHitCnt",
"Output Tile hit container key"}

Definition at line 115 of file TileHitVecToCntTool.h.

◆ m_hits

std::unique_ptr<TileHitNonConstContainer> TileHitVecToCntTool::m_hits {}
private

pointer to hits container

Definition at line 170 of file TileHitVecToCntTool.h.

◆ m_hits_DigiHSTruth

std::unique_ptr<TileHitNonConstContainer> TileHitVecToCntTool::m_hits_DigiHSTruth {}
private

pointer to hits container

Definition at line 171 of file TileHitVecToCntTool.h.

◆ m_hitVectorKeys

SG::ReadHandleKeyArray<TileHitVector> TileHitVecToCntTool::m_hitVectorKeys
private

Definition at line 112 of file TileHitVecToCntTool.h.

◆ m_hitVectorNames

std::vector<std::string> TileHitVecToCntTool::m_hitVectorNames {}
private

Definition at line 113 of file TileHitVecToCntTool.h.

◆ m_inputKeys

StringArrayProperty TileHitVecToCntTool::m_inputKeys
private
Initial value:
{this, "TileHitVectors", {"TileHitVec"},
"Name of input hit vectors (default=TileHitVec)" }

vector with the names of TileHitVectors to use

Definition at line 110 of file TileHitVecToCntTool.h.

◆ 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.

◆ m_maxHitTime

Gaudi::Property<double> TileHitVecToCntTool::m_maxHitTime
private
Initial value:
{this, "MaxHitTime", 150.5*Gaudi::Units::nanosecond,
"All sub-hits with time above m_maxHitTime will be ignored"}

all sub-hits with time above m_maxHitTime will be ignored

Definition at line 137 of file TileHitVecToCntTool.h.

◆ m_MBTSmerged

std::vector<bool> TileHitVecToCntTool::m_MBTSmerged
private

Definition at line 193 of file TileHitVecToCntTool.h.

◆ m_mbtsOffset

int TileHitVecToCntTool::m_mbtsOffset {0}
private

Definition at line 173 of file TileHitVecToCntTool.h.

◆ m_mergeMultipleHitsInChannel

Gaudi::Property<bool> TileHitVecToCntTool::m_mergeMultipleHitsInChannel
private
Initial value:
{this, "MergeMultipleHitsInChannel", true,
"Find and merge multiple hits for the same channel in container (default=true)"}

Definition at line 153 of file TileHitVecToCntTool.h.

◆ m_mergeSvc

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

Definition at line 158 of file TileHitVecToCntTool.h.

◆ m_onlyUseContainerName

Gaudi::Property<bool> TileHitVecToCntTool::m_onlyUseContainerName {this, "OnlyUseContainerName", true, "Don't use the ReadHandleKey directly. Just extract the container name from it."}
private

Definition at line 109 of file TileHitVecToCntTool.h.

◆ m_photoElectronStatistics

Gaudi::Property<int> TileHitVecToCntTool::m_photoElectronStatistics
private
Initial value:
{this, "PhotostatType", 2,
"Method to apply photostatistics (default=2)"}

photoelectron statistics type: 0 - Poisson, 1 - "new" Poisson + Gauss, 2 - Poisson->Gauss

Definition at line 141 of file TileHitVecToCntTool.h.

◆ m_photoStatisticsWindow

Gaudi::Property<double> TileHitVecToCntTool::m_photoStatisticsWindow
private
Initial value:
{this, "PhotostatWindow", 62.5*Gaudi::Units::nanosecond,
"Sum up energy in [-m_photoStatWindow,+m_photoStatWindow] and use it for photostatistics"}

sum up energy in [-m_photoStatWindow,+m_photoStatWindow] and use it for photostatistics

Definition at line 139 of file TileHitVecToCntTool.h.

◆ m_pileUp

Gaudi::Property<bool> TileHitVecToCntTool::m_pileUp
private
Initial value:
{this, "PileUp", false,
"To switch on pileup (default=false)"}

if true => pileup mode is activated

Definition at line 129 of file TileHitVecToCntTool.h.

◆ m_randomStreamName

Gaudi::Property<std::string> TileHitVecToCntTool::m_randomStreamName {this, "RandomStreamName", "Tile_HitVecToCnt", ""}
private

Random Stream Name.

Definition at line 166 of file TileHitVecToCntTool.h.

◆ m_rndmEvtOverlay

Gaudi::Property<bool> TileHitVecToCntTool::m_rndmEvtOverlay
private
Initial value:
{this, "RndmEvtOverlay", false,
"Pileup and/or noise added by overlaying random events (default=false)"}

If true => overlay with random event (zero-luminosity pile-up)

Definition at line 145 of file TileHitVecToCntTool.h.

◆ m_rndmSvc

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

Random number generator engine to use.

Definition at line 164 of file TileHitVecToCntTool.h.

◆ m_run2

bool TileHitVecToCntTool::m_run2 {false}
private

if true => RUN2 geometry with E4' and merged E1

Definition at line 127 of file TileHitVecToCntTool.h.

◆ m_run2plus

bool TileHitVecToCntTool::m_run2plus {false}
private

if true => RUN2+ geometry with merged E1 (and E4' in RUN2)

Definition at line 128 of file TileHitVecToCntTool.h.

◆ m_samplingFractionKey

SG::ReadCondHandleKey<TileSamplingFraction> TileHitVecToCntTool::m_samplingFractionKey
private
Initial value:
{this,
"TileSamplingFraction", "TileSamplingFraction", "Input Tile sampling fraction"}

Name of TileSamplingFraction in condition store.

Definition at line 124 of file TileHitVecToCntTool.h.

◆ m_skipNoHit

Gaudi::Property<bool> TileHitVecToCntTool::m_skipNoHit
private
Initial value:
{this, "SkipNoHit", false,
"Skip events with no Tile hits (default=false)"}

if true => skip events with no Tile hits

Definition at line 143 of file TileHitVecToCntTool.h.

◆ m_tileHWID

const TileHWID* TileHitVecToCntTool::m_tileHWID {nullptr}
private

Pointer to TileID helper.

Definition at line 162 of file TileHitVecToCntTool.h.

◆ m_tileID

const TileID* TileHitVecToCntTool::m_tileID {nullptr}
private

Pointer to TileID helper.

Definition at line 160 of file TileHitVecToCntTool.h.

◆ m_tileTBID

const TileTBID* TileHitVecToCntTool::m_tileTBID {nullptr}
private

Pointer to TileID helper.

Definition at line 161 of file TileHitVecToCntTool.h.

◆ m_timeFlag

Gaudi::Property<int> TileHitVecToCntTool::m_timeFlag
private
Initial value:
{this, "HitTimeFlag", 0,
"Special options to deal with times of hits for cosmics and TB (default=0)"}

special options to deal with times of hits for cosmics and TB

Definition at line 133 of file TileHitVecToCntTool.h.

◆ m_triggerTime

Gaudi::Property<double> TileHitVecToCntTool::m_triggerTime
private
Initial value:
{this, "TriggerTime", 0.0,
"Fixed trigger time value (default=0)"}

fixed trigger time value (default=0)

Definition at line 135 of file TileHitVecToCntTool.h.

◆ m_triggerTimeTool

PublicToolHandle<ITriggerTime> TileHitVecToCntTool::m_triggerTimeTool
private
Initial value:
{this, "TriggerTimeTool", "",
"Name of trigger time tool (default='')"}

tool to take the time from

Definition at line 155 of file TileHitVecToCntTool.h.

◆ m_usePhotoStatistics

Gaudi::Property<bool> TileHitVecToCntTool::m_usePhotoStatistics
private
Initial value:
{this,
"usePhotoStatistics", true, "Simulate photo statistics effect (default=true)"}

Definition at line 151 of file TileHitVecToCntTool.h.

◆ m_useTriggerTime

Gaudi::Property<bool> TileHitVecToCntTool::m_useTriggerTime
private
Initial value:
{this, "UseTriggerTime", false,
"Take trigger time from external tool (default=false)"}

if true => take trigger time from external tool or from m_triggerTime

Definition at line 147 of file TileHitVecToCntTool.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.

◆ N_E4PRIME_CELLS

const int TileHitVecToCntTool::N_E4PRIME_CELLS = E4_N_PHI
staticprivate

Definition at line 184 of file TileHitVecToCntTool.h.

◆ N_ETA

const int TileHitVecToCntTool::N_ETA = 2
staticprivate

Definition at line 176 of file TileHitVecToCntTool.h.

◆ N_MBTS_CELLS

const int TileHitVecToCntTool::N_MBTS_CELLS = N_SIDE * N_PHI * N_ETA
staticprivate

Definition at line 177 of file TileHitVecToCntTool.h.

◆ N_PHI

const int TileHitVecToCntTool::N_PHI = 8
staticprivate

Definition at line 175 of file TileHitVecToCntTool.h.

◆ N_SIDE

const int TileHitVecToCntTool::N_SIDE = 2
staticprivate

Definition at line 174 of file TileHitVecToCntTool.h.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
TileHit::scale
void scale(float coeff)
Scale energy of all sub-hits in a hit
Definition: TileHit.cxx:117
TileHitVecToCntTool::N_E4PRIME_CELLS
static const int N_E4PRIME_CELLS
Definition: TileHitVecToCntTool.h:184
TileHit::identify
Identifier identify(void) const
Return logical ID of the pmt.
Definition: TileSimEvent/TileSimEvent/TileHit.h:76
TileHitVecToCntTool::m_cabling
const TileCablingService * m_cabling
Definition: TileHitVecToCntTool.h:190
TileSamplingFraction::getSamplingFraction
float getSamplingFraction(unsigned int drawerIdx, unsigned int channel) const
Return Tile Calorimeter sampling fraction.
Definition: TileSamplingFraction.h:53
ATHRNG::RNGWrapper::setSeed
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition: RNGWrapper.h:169
TileTBID::channel_id
Identifier channel_id(int type, int module, int channel) const
identifer for one channel of a Tile testbeam detector
Definition: TileTBID.cxx:196
TileHitVecToCntTool::createContainers
StatusCode createContainers()
Definition: TileHitVecToCntTool.cxx:239
TileTBID::to_string
std::string to_string(const Identifier &id, int level=0) const
extract all fields from TileTB identifier Identifier get_all_fields ( const Identifier & id,...
Definition: TileTBID.cxx:48
TileHitVecToCntTool::E4_N_PHI
static const int E4_N_PHI
Definition: TileHitVecToCntTool.h:183
TileHitVecToCntTool::m_hitContainer_DigiHSTruthKey
SG::WriteHandleKey< TileHitContainer > m_hitContainer_DigiHSTruthKey
Definition: TileHitVecToCntTool.h:118
max
#define max(a, b)
Definition: cfImp.cxx:41
TileHitVecToCntTool::m_hitContainerKey
SG::WriteHandleKey< TileHitContainer > m_hitContainerKey
Definition: TileHitVecToCntTool.h:115
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
TileTBID::is_tiletb
bool is_tiletb(const Identifier &id) const
Test ID if it is TileTBID.
Definition: TileTBID.cxx:86
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
PileUpToolBase::m_filterPassed
bool m_filterPassed
Definition: PileUpToolBase.h:60
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
python.SystemOfUnits.nanosecond
int nanosecond
Definition: SystemOfUnits.py:119
TileHitVecToCntTool::E4_SIDE
static const int E4_SIDE
Definition: TileHitVecToCntTool.h:181
TileHitVecToCntTool::m_samplingFractionKey
SG::ReadCondHandleKey< TileSamplingFraction > m_samplingFractionKey
Name of TileSamplingFraction in condition store.
Definition: TileHitVecToCntTool.h:124
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
TileHitVecToCntTool::m_tileTBID
const TileTBID * m_tileTBID
Pointer to TileID helper.
Definition: TileHitVecToCntTool.h:161
TileHitVecConstIterator
AtlasHitsVector< TileHit >::const_iterator TileHitVecConstIterator
Definition: TileHitVector.h:30
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
TileHitVecToCntTool::m_mergeSvc
ServiceHandle< PileUpMergeSvc > m_mergeSvc
Definition: TileHitVecToCntTool.h:158
python.SystemOfUnits.MeV
int MeV
Definition: SystemOfUnits.py:154
MuonGM::round
float round(const float toRound, const unsigned int decimals)
Definition: Mdt.cxx:27
AtlasHitsVector
Definition: AtlasHitsVector.h:33
Tile_Base_ID::side
int side(const Identifier &id) const
Definition: Tile_Base_ID.cxx:153
TileHitVecToCntTool::m_hitVectorNames
std::vector< std::string > m_hitVectorNames
Definition: TileHitVecToCntTool.h:113
Tile_Base_ID::sample
int sample(const Identifier &id) const
Definition: Tile_Base_ID.cxx:171
TileHitVecToCntTool::m_pileUp
Gaudi::Property< bool > m_pileUp
if true => pileup mode is activated
Definition: TileHitVecToCntTool.h:129
TileHitVecToCntTool::m_timeFlag
Gaudi::Property< int > m_timeFlag
special options to deal with times of hits for cosmics and TB
Definition: TileHitVecToCntTool.h:133
TileHitVecToCntTool::m_mbtsOffset
int m_mbtsOffset
Definition: TileHitVecToCntTool.h:173
DataVector::get
const T * get(size_type n) const
Access an element, as an rvalue.
TileHitVecToCntTool::m_hits_DigiHSTruth
std::unique_ptr< TileHitNonConstContainer > m_hits_DigiHSTruth
pointer to hits container
Definition: TileHitVecToCntTool.h:171
TileHWID::frag
int frag(const HWIdentifier &id) const
extract frag field from HW identifier
Definition: TileHWID.h:181
TileHWID::drawer_hash_max
size_type drawer_hash_max(void) const
drawer hash table max size
Definition: TileHWID.h:268
Tile_Base_ID::GAPDET
@ GAPDET
Definition: Tile_Base_ID.h:48
Tile_Base_ID::tower
int tower(const Identifier &id) const
Definition: Tile_Base_ID.cxx:165
TileHitVecToCntTool::m_inputKeys
StringArrayProperty m_inputKeys
vector with the names of TileHitVectors to use
Definition: TileHitVecToCntTool.h:110
Tile_Base_ID::SAMP_E
@ SAMP_E
Definition: Tile_Base_ID.h:55
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
TileHitVecToCntTool::m_mergeMultipleHitsInChannel
Gaudi::Property< bool > m_mergeMultipleHitsInChannel
Definition: TileHitVecToCntTool.h:153
PileUpToolBase::m_lastXing
Gaudi::Property< int > m_lastXing
Definition: PileUpToolBase.h:56
TileHitCollection
Definition: TileHitCollection.h:12
TileTBID::type
int type(const Identifier &id) const
extract type field from TileTB identifier
Definition: Calorimeter/CaloIdentifier/CaloIdentifier/TileTBID.h:146
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
TileHitVecToCntTool::processHitVectorForOverlay
void processHitVectorForOverlay(const TileHitVector *inputHits, int &nHit, double &eHitTot)
Definition: TileHitVecToCntTool.cxx:289
HWIdentifier
Definition: HWIdentifier.h:13
AtlasHitsVector::begin
const_iterator begin() const
Definition: AtlasHitsVector.h:131
LArG4AODNtuplePlotter.pe
pe
Definition: LArG4AODNtuplePlotter.py:116
TileHitVecToCntTool::m_hitVectorKeys
SG::ReadHandleKeyArray< TileHitVector > m_hitVectorKeys
Definition: TileHitVecToCntTool.h:112
Example_ReadSampleNoise.drawer
drawer
Definition: Example_ReadSampleNoise.py:39
TileHit::size
int size(void) const
Return length of energy/time vectors
Definition: TileSimEvent/TileSimEvent/TileHit.h:94
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
TileTBID::module
int module(const Identifier &id) const
extract module field from TileTB identifier
Definition: Calorimeter/CaloIdentifier/CaloIdentifier/TileTBID.h:150
TileHWID::channel
int channel(const HWIdentifier &id) const
extract channel field from HW identifier
Definition: TileHWID.h:189
TileHitVecToCntTool::m_useTriggerTime
Gaudi::Property< bool > m_useTriggerTime
if true => take trigger time from external tool or from m_triggerTime
Definition: TileHitVecToCntTool.h:147
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
TileHWID::ros
int ros(const HWIdentifier &id) const
extract ros field from HW identifier
Definition: TileHWID.h:167
PileUpMergeSvc::TimedList::type
std::list< value_t > type
type of the collection of timed data object
Definition: PileUpMergeSvc.h:75
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
TRT::Hit::side
@ side
Definition: HitInfo.h:83
TileHitVecToCntTool::m_cablingSvc
ServiceHandle< TileCablingSvc > m_cablingSvc
Definition: TileHitVecToCntTool.h:189
TileSamplingFraction::getNumberOfPhotoElectrons
float getNumberOfPhotoElectrons(unsigned int drawerIdx, unsigned int channel) const
Return number of photoelectrons per 1 GeV in Tile Calorimeter scintilator.
Definition: TileSamplingFraction.h:58
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
python.PyAthena.module
module
Definition: PyAthena.py:134
TileHitVecToCntTool::processHitVectorWithoutPileUp
void processHitVectorWithoutPileUp(const TileHitVector *inputHits, int &nHit, double &eHitTot, TileHitNonConstContainer *hitCont, CLHEP::HepRandomEngine *engine)
Definition: TileHitVecToCntTool.cxx:471
TileHitVecToCntTool::m_run2plus
bool m_run2plus
if true => RUN2+ geometry with merged E1 (and E4' in RUN2)
Definition: TileHitVecToCntTool.h:128
TileHitVecToCntTool::N_MBTS_CELLS
static const int N_MBTS_CELLS
Definition: TileHitVecToCntTool.h:177
TileHitVecToCntTool::m_run2
bool m_run2
if true => RUN2 geometry with E4' and merged E1
Definition: TileHitVecToCntTool.h:127
TileCablingService::isRun2PlusCabling
bool isRun2PlusCabling() const
Definition: TileCablingService.h:278
Tile_Base_ID::get_id
virtual int get_id(const IdentifierHash &hash_id, Identifier &id, const IdContext *context=0) const
create compact id from hash id (return == 0 for OK)
Definition: Tile_Base_ID.cxx:1077
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TileRawDataNonConstContainer< TileHitCollection >::iterator
std::vector< std::unique_ptr< TileHitCollection > >::iterator iterator
Definition: TileRawDataNonConstContainer.h:42
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
Tile_Base_ID::module
int module(const Identifier &id) const
Definition: Tile_Base_ID.cxx:159
TileHitVecToCntTool::m_usePhotoStatistics
Gaudi::Property< bool > m_usePhotoStatistics
Definition: TileHitVecToCntTool.h:151
TileHit::reserve
void reserve(int len)
Reserve length of energy and time vectors in a hit
Definition: TileSimEvent/TileSimEvent/TileHit.h:69
DataModel_detail::iterator
(Non-const) Iterator class for DataVector/DataList.
Definition: DVLIterator.h:184
lumiFormat.i
int i
Definition: lumiFormat.py:92
SG::OWN_ELEMENTS
@ OWN_ELEMENTS
this data object owns its elements
Definition: OwnershipPolicy.h:17
TileTBID::channel_context
IdContext channel_context(void) const
idContext for channels
Definition: TileTBID.cxx:314
TileHitVecToCntTool::m_tileHWID
const TileHWID * m_tileHWID
Pointer to TileID helper.
Definition: TileHitVecToCntTool.h:162
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
TileHitVecToCntTool::mergeEvent
virtual StatusCode mergeEvent(const EventContext &ctx) override final
Definition: TileHitVecToCntTool.cxx:832
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TileHitVecToCntTool::m_rndmSvc
ServiceHandle< IAthRNGSvc > m_rndmSvc
Random number generator engine to use.
Definition: TileHitVecToCntTool.h:164
TileHitVecToCntTool::m_onlyUseContainerName
Gaudi::Property< bool > m_onlyUseContainerName
Definition: TileHitVecToCntTool.h:109
LArG4ShowerLibProcessing.hits
hits
Definition: LArG4ShowerLibProcessing.py:136
TileHitVecToCntTool::m_rndmEvtOverlay
Gaudi::Property< bool > m_rndmEvtOverlay
If true => overlay with random event (zero-luminosity pile-up)
Definition: TileHitVecToCntTool.h:145
TileHitVecToCntTool::m_deltaT
Gaudi::Property< double > m_deltaT
minimal time granularity for TileHit
Definition: TileHitVecToCntTool.h:131
TileHitVecToCntTool::findAndMergeMultipleHitsInChannel
void findAndMergeMultipleHitsInChannel(std::unique_ptr< TileHitNonConstContainer > &hitCont)
Definition: TileHitVecToCntTool.cxx:1219
TileHitVecToCntTool::m_fragHashFunc
TileFragHash m_fragHashFunc
Definition: TileHitVecToCntTool.h:191
TileHit::add
int add(float energy, float time)
Add sub-hit to a given hit.
Definition: TileHit.cxx:74
createCoolChannelIdFile.channel_id
channel_id
Definition: createCoolChannelIdFile.py:52
test_pyathena.parent
parent
Definition: test_pyathena.py:15
PileUpToolBase::PileUpToolBase
PileUpToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition: PileUpToolBase.cxx:7
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TileHitVecToCntTool::m_triggerTimeTool
PublicToolHandle< ITriggerTime > m_triggerTimeTool
tool to take the time from
Definition: TileHitVecToCntTool.h:155
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
maskDeadModules.ros
ros
Definition: maskDeadModules.py:35
TileHitVecToCntTool::mergeExtraHitToChannelHit
void mergeExtraHitToChannelHit(TileHit *extraHit, TileHit *channelHit)
Definition: TileHitVecToCntTool.cxx:1260
TileCablingService::isRun2Cabling
bool isRun2Cabling() const
Definition: TileCablingService.h:277
TileFragHash::initialize
void initialize(const TileHWID *tileHWID, TYPE type=Default)
Definition: TileFragHash.cxx:23
TileTBID::channel
int channel(const Identifier &id) const
extract channel field from TileTB identifier
Definition: Calorimeter/CaloIdentifier/CaloIdentifier/TileTBID.h:154
Tile_Base_ID::get_hash
virtual int get_hash(const Identifier &id, IdentifierHash &hash_id, const IdContext *context=0) const
create hash id from compact id (return == 0 for OK)
Definition: Tile_Base_ID.cxx:1151
TileHitVecToCntTool::findAndMergeMBTS
void findAndMergeMBTS(TileHitCollection *coll, int frag_id, TileHitNonConstContainer *hitCont)
Definition: TileHitVecToCntTool.cxx:1160
TileRawDataNonConstContainer::push_back
void push_back(element_t *rc)
Definition: TileRawDataNonConstContainer.h:68
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
TileHitVecToCntTool::e4pr_index
int e4pr_index(int phi) const
Definition: TileHitVecToCntTool.h:185
TileHitVecToCntTool::mbts_index
int mbts_index(int side, int phi, int eta) const
Definition: TileHitVecToCntTool.h:178
TileHitVecToCntTool::m_hits
std::unique_ptr< TileHitNonConstContainer > m_hits
pointer to hits container
Definition: TileHitVecToCntTool.h:170
TileHitVecToCntTool::m_allHits
std::vector< TileHit * > m_allHits
vector for all TileHits
Definition: TileHitVecToCntTool.h:168
TileHWID::drawer_id
HWIdentifier drawer_id(int frag) const
ROS HWIdentifer.
Definition: TileHWID.cxx:186
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TileCablingService::is_MBTS_merged_run2plus
bool is_MBTS_merged_run2plus(int module) const
Definition: TileCablingService.cxx:2453
ATHRNG::RNGWrapper
A wrapper class for event-slot-local random engines.
Definition: RNGWrapper.h:56
TileHitVecToCntTool::m_maxHitTime
Gaudi::Property< double > m_maxHitTime
all sub-hits with time above m_maxHitTime will be ignored
Definition: TileHitVecToCntTool.h:137
TileHitVecToCntTool::m_allHits_DigiHSTruth
std::vector< TileHit * > m_allHits_DigiHSTruth
vector for all TileHits
Definition: TileHitVecToCntTool.h:169
TileHitVecToCntTool::N_ETA
static const int N_ETA
Definition: TileHitVecToCntTool.h:176
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TileHit
Definition: TileSimEvent/TileSimEvent/TileHit.h:30
ATHRNG::RNGWrapper::getEngine
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition: RNGWrapper.h:134
Tile_Base_ID::pmt_hash_max
size_type pmt_hash_max(void) const
Definition: Tile_Base_ID.cxx:1318
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
TileHitVecToCntTool::m_MBTSmerged
std::vector< bool > m_MBTSmerged
Definition: TileHitVecToCntTool.h:193
TileHitVecToCntTool::m_photoStatisticsWindow
Gaudi::Property< double > m_photoStatisticsWindow
sum up energy in [-m_photoStatWindow,+m_photoStatWindow] and use it for photostatistics
Definition: TileHitVecToCntTool.h:139
TileHWID::drawer
int drawer(const HWIdentifier &id) const
extract drawer field from HW identifier
Definition: TileHWID.h:171
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
TileHit::pmt_HWID
HWIdentifier pmt_HWID(void) const
Return pmt hardware ID (== channel ID)
Definition: TileHit.cxx:125
Tile_Base_ID::to_string
std::string to_string(const Identifier &id, int level=0) const
Definition: Tile_Base_ID.cxx:52
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TileHit::energy
float energy(int ind=0) const
Return energy of ind-th sub-hit
Definition: TileSimEvent/TileSimEvent/TileHit.h:90
TileHitVecToCntTool::m_doDigiTruth
Gaudi::Property< bool > m_doDigiTruth
Definition: TileHitVecToCntTool.h:149
Tile_Base_ID::pmt_id
Identifier pmt_id(const Identifier &any_id) const
Definition: Tile_Base_ID.cxx:640
AtlasHitsVector::end
const_iterator end() const
Definition: AtlasHitsVector.h:134
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
PileUpToolBase::m_firstXing
Gaudi::Property< int > m_firstXing
Definition: PileUpToolBase.h:54
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:569
TileHit::setTime
void setTime(float t, int ind=0)
Set time of ind-th sub-hit in a hit
Definition: TileSimEvent/TileSimEvent/TileHit.h:65
TileHitVecToCntTool::E4_ETA
static const int E4_ETA
Definition: TileHitVecToCntTool.h:182
TileHitVecToCntTool::findAndMergeE1
void findAndMergeE1(TileHitCollection *coll, int frag_id, TileHitNonConstContainer *hitCont)
Definition: TileHitVecToCntTool.cxx:1102
TileHitVecToCntTool::m_photoElectronStatistics
Gaudi::Property< int > m_photoElectronStatistics
photoelectron statistics type: 0 - Poisson, 1 - "new" Poisson + Gauss, 2 - Poisson->Gauss
Definition: TileHitVecToCntTool.h:141
Tile_Base_ID::pmt_context
IdContext pmt_context(void) const
id for PMTs
Definition: Tile_Base_ID.cxx:1065
AtlasHitsVector::size
size_type size() const
Definition: AtlasHitsVector.h:143
TileTBID::phi
int phi(const Identifier &id) const
extract phi field from MBTS identifier
Definition: Calorimeter/CaloIdentifier/CaloIdentifier/TileTBID.h:165
SubEventIterator
std::vector< xAOD::EventInfo::SubEvent >::const_iterator SubEventIterator
Definition: IPileUpTool.h:22
TileCalibUtils::getDrawerIdx
static unsigned int getDrawerIdx(unsigned int ros, unsigned int drawer)
Returns a drawer hash.
Definition: TileCalibUtils.cxx:60
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
TileHitVecToCntTool::processHitVectorForPileUp
void processHitVectorForPileUp(const TileHitVector *inputHits, double SubEvtTimOffset, int &nHit, double &eHitTot, bool isSignal=false)
Definition: TileHitVecToCntTool.cxx:335
IdentifierHash
Definition: IdentifierHash.h:38
DataVector::erase
iterator erase(iterator position)
Remove element at a given position.
TileHitVecToCntTool::m_tileID
const TileID * m_tileID
Pointer to TileID helper.
Definition: TileHitVecToCntTool.h:160
Tile_Base_ID::cell_id
Identifier cell_id(const Identifier &any_id) const
Definition: Tile_Base_ID.cxx:581
TileHit::time
float time(int ind=0) const
Return time of ind-th sub-hit
Definition: TileSimEvent/TileSimEvent/TileHit.h:92
TileHitVecToCntTool::E1_TOWER
@ E1_TOWER
Definition: TileHitVecToCntTool.h:194
error
Definition: IImpactPoint3dEstimator.h:70
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
IdContext
class IdContext
Definition: IdContext.h:34
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
TileHitVecToCntTool::m_randomStreamName
Gaudi::Property< std::string > m_randomStreamName
Random Stream Name.
Definition: TileHitVecToCntTool.h:166
TileHitVecToCntTool::m_E1merged
std::vector< bool > m_E1merged
Definition: TileHitVecToCntTool.h:192
TileHit::setZero
void setZero()
Resize energy/time vectors in a hit to one and set energy/time to zero
Definition: TileSimEvent/TileSimEvent/TileHit.h:71
TileCablingService::E1_merged_with_run2plus
int E1_merged_with_run2plus(int ros, int module) const
Definition: TileCablingService.cxx:2457
checkFileSG.ind
list ind
Definition: checkFileSG.py:118
TileHitVecToCntTool::N_PHI
static const int N_PHI
Definition: TileHitVecToCntTool.h:175
TileHit::pmt_ID
Identifier pmt_ID(void) const
Return logical ID of the pmt.
Definition: TileSimEvent/TileSimEvent/TileHit.h:78
TileHitVecToCntTool::m_triggerTime
Gaudi::Property< double > m_triggerTime
fixed trigger time value (default=0)
Definition: TileHitVecToCntTool.h:135
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
TileTBID::side
int side(const Identifier &id) const
define synonyms for minimum bias scintillators
Definition: Calorimeter/CaloIdentifier/CaloIdentifier/TileTBID.h:161
TileHitVecToCntTool::applyPhotoStatistics
double applyPhotoStatistics(double energy, Identifier pmt_id, CLHEP::HepRandomEngine *engine, const TileSamplingFraction *samplingFraction, int drawerIdx)
Definition: TileHitVecToCntTool.cxx:1022
TileCablingService::s2h_channel_id
HWIdentifier s2h_channel_id(const Identifier &id) const
Definition: TileCablingService.cxx:1076
TileHitVecToCntTool::N_SIDE
static const int N_SIDE
Definition: TileHitVecToCntTool.h:174