|
ATLAS Offline Software
|
Go to the documentation of this file.
37 #include "GaudiKernel/IIncidentSvc.h"
42 #include "GaudiKernel/ThreadLocalContext.h"
44 #include "CLHEP/Random/RandGaussZiggurat.h"
45 #include "CLHEP/Random/Randomize.h"
46 #include "CLHEP/Random/RandomEngine.h"
54 #include <sys/types.h>
55 #include <unordered_map>
62 template <
typename MSG,
typename T>
63 void printVec(
MSG&
msg,
const std::vector<T>&
v) {
67 template <
typename MSG,
typename T, std::
size_t N>
68 void printVec(
MSG&
msg,
const std::array<T, N>&
v) {
72 constexpr
static int ADCMAX = 1023;
73 constexpr
static int SATURATIONVALUE = 255;
83 m_rngSvc(
"AthRNGSvc",
name),
84 m_condSvc(
"L1CaloCondSvc",
name),
86 m_TTtool(
"LVL1::L1TriggerTowerTool/L1TriggerTowerTool", this),
87 m_mappingTool(
"LVL1::PpmMappingTool/PpmMappingTool", this),
88 m_bstowertool(
"LVL1BS__TrigT1CaloDataAccessV2/TrigT1CaloDataAccessV2", this),
92 m_TileToMeV(s_MEV/4.1),
94 m_isDataReprocessing(false),
95 m_doOverlay(false), m_isReco(false)
142 for(
unsigned int i = 0;
i < 25;
i++) {
154 m_sinThetaHash[ (
unsigned int)(32 + (0.5*0.425)*10.) ] = 1.0/cosh(3.2 + 0.5*0.425);
155 m_sinThetaHash[ (
unsigned int)(32 + (1.5*0.425)*10.) ] = 1.0/cosh(3.2 + 1.5*0.425);
156 m_sinThetaHash[ (
unsigned int)(32 + (2.5*0.425)*10.) ] = 1.0/cosh(3.2 + 2.5*0.425);
157 m_sinThetaHash[ (
unsigned int)(32 + (3.5*0.425)*10.) ] = 1.0/cosh(3.2 + 3.5*0.425);
176 return StatusCode::FAILURE;
182 incSvc->addListener(
this,
"BeginRun");
214 return StatusCode::SUCCESS;
221 if(inc.type() !=
"BeginRun")
return;
243 ATH_MSG_ERROR(
"Could not retrieve database containers. Aborting ...");
244 throw std::runtime_error(
"Run2TriggerTowerMaker: database container not accesible");
249 ATH_MSG_ERROR(
"Could not retrieve channel 0 PprChanDefaults folder. Aborting ...");
250 throw std::runtime_error(
"Run2TriggerTowerMaker: channel 0 of PprChanDefaults not accesible");
265 ATH_MSG_ERROR(
"Could not retrieve database containers for overlay. Aborting ...");
266 throw std::runtime_error(
"Run2TriggerTowerMaker: database container for overlay not accesible");
270 if(!defaultsoverlay) {
271 ATH_MSG_ERROR(
"Could not retrieve channel 0 PprChanDefaults folder for overlay. Aborting ...");
272 throw std::runtime_error(
"Run2TriggerTowerMaker: channel 0 of PprChanDefaults for overlay not accesible");
292 ATH_MSG_WARNING(
"Could not determine if input file is data or simulation. Will assume simulation.");
298 ATH_MSG_INFO(
"Detected data reprocessing. Will take pedestal correction values from input trigger towers.");
307 ATH_MSG_INFO(
"L1Calo overlay job - setting m_isDataReprocessing to false");
315 return StatusCode::SUCCESS;
326 const EventContext& ctx = Gaudi::Hive::currentContext();
346 ATH_MSG_ERROR(
"Unsupported Cell Type!!!!!!");
return StatusCode::FAILURE;
353 const float mu = muDecor(0);
364 return StatusCode::SUCCESS;
370 if (!
db)
return false;
371 if (
db->errorCode() > 0 ||
db->noiseCut() > 0)
return true;
377 if (!
db)
return false;
378 if (
db->disabledBits() > 0)
return true;
386 if (!isDead && !isDisabled)
return true;
395 overlayDataTTs->setStore( &overlayDataTTsAux );
399 std::unordered_map<uint32_t,xAOD::TriggerTower*> overlayMap;
403 char decor_ttNotUsedInOverlay = 0;
404 char decor_ttUsedInOverlay = 1;
406 for (
auto tt:*overlayDataTTs) {
409 decor(*
tt) = decor_ttNotUsedInOverlay;
410 overlayMap.insert( std::make_pair(
tt->coolId() ,
tt ) );
415 bool findSizeOfPrimaryLUT(
true);
416 unsigned int sizeOfPrimaryLUT(0);
423 if (findSizeOfPrimaryLUT) {
424 findSizeOfPrimaryLUT =
false;
425 sizeOfPrimaryLUT =
tt->lut_cp().size();
426 peakOfPrimary =
tt->peak();
430 Itr
match = overlayMap.find(
tt->coolId() );
431 if (
match != overlayMap.end()) {
436 decor(*
match->second) = decor_ttUsedInOverlay;
442 for (Itr
i=overlayMap.begin();
i!=overlayMap.end();++
i) {
444 if (decor(*
tt) == decor_ttNotUsedInOverlay) {
446 std::vector<uint8_t> overlay_lut_cp(sizeOfPrimaryLUT,0.);
447 std::vector<uint8_t> overlay_lut_jep(sizeOfPrimaryLUT,0.);
450 overlay_lut_cp.at(peakOfPrimary) =
tt->cpET();
451 overlay_lut_jep.at(peakOfPrimary) =
tt->jepET();
454 tt->setPeak( peakOfPrimary );
455 tt->setLut_cp( overlay_lut_cp );
456 tt->setLut_jep( overlay_lut_jep );
464 return StatusCode::SUCCESS;
475 ATH_MSG_ERROR(
"Cannot find signal DB for tower 0x"<<std::hex<<sigTT->
coolId()<<std::dec<<
" Aborting...");
476 return StatusCode::FAILURE;
480 ATH_MSG_ERROR(
"Cannot find overlay DB for tower 0x"<<std::hex<<ovTT->
coolId()<<std::dec<<
" Aborting...");
481 return StatusCode::FAILURE;
488 std::vector<int> normOverlayDigits;
492 std::vector<int> sigLutIn,ovLutIn;
497 std::vector<int> lutOut_cp,lutOut_jep;
503 std::size_t peak = lutOut_jep.size()/2;
504 std::vector<uint_least8_t> etResultVectorCp {
uint8_t(lutOut_cp[peak]) };
505 std::vector<uint_least8_t> etResultVectorJep {
uint8_t(lutOut_jep[peak]) };
507 sigTT->
setLut_cp(std::move(etResultVectorCp));
508 sigTT->
setLut_jep(std::move(etResultVectorJep));
510 return StatusCode::SUCCESS;
516 ATH_MSG_ERROR(
"Cannot process calcLutOutCP as lutCpStrategy > 2");
517 return StatusCode::FAILURE;
521 double sigSlope = sigScale * sigDB->
lutCpSlope();
522 double sigOffset = sigScale * sigDB->
lutCpOffset();
525 double ovSlope = ovScale * ovDB->
lutCpSlope();
531 return StatusCode::SUCCESS;
537 ATH_MSG_ERROR(
"Cannot process calcLutOutJEP as lutJepStrategy > 2");
538 return StatusCode::FAILURE;
552 return StatusCode::SUCCESS;
556 const std::vector<int>& ovIN,
const int ovSlope,
const int ovOffset,
const int ovNoiseCut,std::vector<int>&
output)
566 output.reserve(sigIN.size());
568 for (
unsigned int i=0;
i<sigIN.size();++
i) {
573 int outSig =
signal*sigSlope - sigOffset;
574 int outOv =
overlay*ovSlope - ovOffset;
575 int outTmp = outSig + outOv;
578 if (outTmp >= ovNoiseCut) {
579 out = (outSig + outOv + 2048)>>12;
595 std::vector<int> fir;
597 {
db->firCoeff5(),
db->firCoeff4(),
db->firCoeff3(),
db->firCoeff2(),
db->firCoeff1()},
601 int pedCorrectionStrategy =
db->lutCpStrategy();
605 if (pedCorrectionStrategy == 1) {
609 int firPed = (
db->firCoeff5() +
db->firCoeff4() +
db->firCoeff3() +
610 db->firCoeff2() +
db->firCoeff1()) *
int(
db->pedMean() + 0.5);
621 if (pedCorrectionStrategy == 2) {
637 return StatusCode::SUCCESS;
649 if (sigDigits.size() == ovDigits.size()) {
650 for (
auto x:ovDigits) normDigits.push_back(
x );
654 if (sigDigits.size() > ovDigits.size()) {
655 unsigned int pad = (sigDigits.size() - ovDigits.size()) / 2;
656 for (
unsigned int x=0;
x<pad;++
x) normDigits.push_back( 32 );
657 for (
auto x:ovDigits) normDigits.push_back(
x );
658 for (
unsigned int x=0;
x<pad;++
x) normDigits.push_back( 32 );
663 if (sigDigits.size() < ovDigits.size()) {
664 unsigned int offset = (ovDigits.size() - sigDigits.size()) / 2;
665 for (
unsigned int x=0;
x<sigDigits.size();++
x) {
667 normDigits.push_back( ovDigits[
pos] );
682 return StatusCode::SUCCESS;
691 ATH_MSG_ERROR(
"Tower with coolId 0x"<<std::hex<<tower->
coolId()<<std::dec<<
" Not in database! Aborting ...");
692 return StatusCode::FAILURE;
696 int pedCorrectionStrategy(0);
710 std::vector<int> fir;
727 if (pedCorrectionStrategy == 1) {
743 if (pedCorrectionStrategy == 2) {
761 std::vector<int> lutIn;
765 std::vector<int> lutOut_cp;
788 std::vector<int> lutOut_jep;
811 std::vector<int> BCIDOut;
826 std::size_t peak = lutOut_jep.size()/2;
827 std::vector<uint_least8_t> etResultVectorCp {
uint8_t(lutOut_cp[peak]) };
830 std::vector<uint_least8_t> etResultVectorJep {
uint8_t(lutOut_jep[peak]) };
844 std::array<int, 3> bcidDecision {
850 std::array<int, 3> satOverride {
856 if((bcidDecision[
range]) & (0
x1 << (BCIDOut[BCIDOut.size()/2]))) {
857 if((satOverride[
range]) & 0
x1) {
859 etResultVectorCp[0] = SATURATIONVALUE;
860 etResultVectorJep[0] = SATURATIONVALUE;
864 etResultVectorCp[0] = 0;
865 etResultVectorJep[0] = 0;
871 tower->
setLut_cp(std::move(etResultVectorCp));
872 tower->
setLut_jep(std::move(etResultVectorJep));
895 return StatusCode::SUCCESS;
910 return tt->cpET() == 0 && tt->jepET() == 0;
926 return StatusCode::SUCCESS;
952 [
this](
const xAOD::TriggerTower*
tt){return !IsGoodTower(tt,m_deadChannelsContainer,m_disabledTowersContainer);}),
955 return StatusCode::SUCCESS;
966 sc1 = StatusCode::FAILURE;
973 sc2 = StatusCode::FAILURE;
981 sc3 = StatusCode::FAILURE;
985 (sc2==StatusCode::FAILURE) ||
986 (sc3==StatusCode::FAILURE))) {
988 <<
"Found Em LArTTL1 : "<<sc1 <<
endmsg
989 <<
"Found Had LArTTL1 : "<<sc2 <<
endmsg
990 <<
"Found TileTTL1 : "<<sc3<<
endmsg
992 return StatusCode::FAILURE;
996 if(sc1 == StatusCode::SUCCESS) {
999 if(sc2 == StatusCode::SUCCESS) {
1002 if(sc3 == StatusCode::SUCCESS) {
1014 [
this](
const xAOD::TriggerTower*
tt){return !IsGoodTower(tt,m_deadChannelsContainer,m_disabledTowersContainer);}),
1017 return StatusCode::SUCCESS;
1025 ATH_MSG_VERBOSE(
"Looking at retrieved tower number "<<towerNumber++<<
" ***********");
1036 std::vector<float> tower_amps = tower->samples();
1049 amps[
i] = tower_amps[j];
1059 t->setCoolId(coolId.
id());
1071 ATH_MSG_VERBOSE(
"Looking at retrieved tower number "<<towerNumber++<<
" ***********");
1084 unsigned Ieta =
unsigned(fabs(tower_eta)*10.0);
1086 ATH_MSG_WARNING(
"TileTTL1 with invalid index for m_sinThetaHash: Ieta = " << Ieta);
1092 std::vector<float> tower_amps = tower->fsamples();
1101 for(
int i = 0;
i < 7;
i++) {
1117 t->setCoolId(
channelId(tower_eta, tower_phi, 1).
id());
1118 t->setEta(tower_eta);
1119 t->setPhi(tower_phi);
1138 tower->setAdcPeak(digits.size()/2);
1147 double ped = chanCalib->pedMean();
1150 double adcCal = (
m_gainCorr > 0.) ? CLHEP::RandGaussZiggurat::shoot(rndmADCs, 1.,
m_gainCorr) : 1.;
1152 std::vector<int> digits;
1157 double adcNoise = (
m_adcVar > 0.) ? CLHEP::RandGaussZiggurat::shoot(rndmADCs,0.,
m_adcVar) : 0.;
1162 digits.push_back(
digit);
1169 if(
et < bcidEnergyRangeLow)
return 0;
1170 if(
et < bcidEnergyRangeHigh)
return 1;
1176 int region = l1id->
region(
id);
1177 int ieta = l1id->
eta(
id);
1180 double gran[4] = {0.1, 0.2, 0.1, 0.425};
1181 double offset[4] = {0., 2.5, 3.1, 3.2};
1184 if(region>=0 && region<=3) {
1199 double phiMax = l1id->
phi_max(regId);
1200 int iphi = l1id->
phi(
id);
1201 double phi = (iphi+0.5)*2*
M_PI/(phiMax+1);
1222 constexpr
static int NELEMENTS = 33;
1224 float shiftedEta = feta + 4.9;
1226 if(fabs(shiftedEta*10.0 - (
uint)(
eta+1)) < 0.01)
eta++;
1227 if(fabs(shiftedEta) < 0.01)
eta = 0;
1229 constexpr
int nBins = 16;
1230 constexpr
uint map[
nBins] = {2,6,10,14,17,19,21,23,75,77,79,80,83,87,91,95};
1232 if(
eta > 23 &&
eta < 74) {
1237 if(
i < 8) element =
i;
1238 else element =
i + 50;
1243 if (
layer == 1 && (element == 0 || element == 64)) element = 1;
1244 else if (
layer == 1 && (element == 1 || element == 65)) element = 0;
1245 else if (
layer == 1 && (element == 2 || element == 62)) element = 3;
1246 else if (
layer == 1 && (element == 3 || element == 63)) element = 2;
1247 else if (element > 32) element = 65-element;
1250 element = NELEMENTS-element-1;
1263 double nll_slope = 0.001 *
scale;
1264 double nll_offset = 0.001 * par1;
1265 double nll_ampl = 0.001 * par2;
1266 double nll_expo = 0.;
1268 nll_expo = -1. / (4096 * 0.001*par3);
1272 double nll_noise = 0.001 * par4;
1275 if (lutin * slope <
offset + nll_noise * noiseCut) {
1280 int output =
int((((
int)(2048 + nll_slope * (lutin * slope -
offset)))>>12) + nll_offset + nll_ampl *
std::exp(nll_expo * (lutin * slope -
offset)));
1281 if(
output >= 255)
return 255;
def retrieve(aClass, aKey=None)
JetConstituentVector::iterator iterator
const std::vector< uint8_t > & correctionEnabled() const
get correctionEnabled
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
L1CaloPpmDeadChannelsContainer * m_deadChannelsContainer
StatusCode calcLutOutCP(const std::vector< int > &sigLutIn, const L1CaloPprChanCalib *sigDB, const std::vector< int > &ovLutIn, const L1CaloPprChanCalib *ovDB, std::vector< int > &output)
calculate LUT out
StatusCode store()
Stores Trigger Towers in the TES, at a location defined in m_outputLocation.
StatusCode preProcess(int bcid, float mu)
Simulate PreProcessing on analogue amplitudes.
Extra patterns decribing particle interation process.
Folder <-> Object mapping for /TRIGGER/L1Calo/V1/Calibration/PpmDeadChannels .
SG::ReadHandleKey< LArTTL1Container > m_EmTTL1ContainerName
Scalar phi() const
phi method
std::string m_disabledTowersKey
void processLArTowers(const LArTTL1Container *)
extract amplitudes from TTL1
std::string m_chanDefaultsKeyoverlay
const_pointer_type cptr()
Dereference the pointer.
unsigned short lutCpStrategy() const
Scalar eta() const
pseudorapidity method
unsigned short satBcidThreshLow() const
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
unsigned short lutCpSlope() const
const std::vector< uint8_t > & lut_cp() const
get lut_cp
L1CaloPprChanDefaults m_chanDefaultsoverlay
virtual StatusCode addOverlay(int bcid, float mu)
Add overlay data.
int phi_max(const Identifier regId) const
min value of phi index (-999 == failure)
int bcidDecision1() const
std::vector< int > ADC(CLHEP::HepRandomEngine *rndmADCs, L1CaloCoolChannelId channel, const std::vector< double > &s) const
Functions to simulate processing of tower signals.
virtual ~Run2TriggerTowerMaker()
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
void normaliseDigits(const std::vector< int > &sigDigits, const std::vector< int > &ovDigits, std::vector< int > &normDigits)
normalise the number of ADC digits for overlay
unsigned int pedFirSum() const
std::string m_chanDefaultsKey
bool isPresent() const
Is the referenced container present in SG?
int region(const Identifier id) const
return region according to :
unsigned short lutJepNoiseCut() const
const std::vector< int16_t > & correction() const
get correction
void setBcidVec(const std::vector< uint8_t > &)
set bcidVec
StatusCode preProcessTower(int bcid, float mu, xAOD::TriggerTower *tower)
ServiceHandle< L1CaloCondSvc > m_condSvc
StatusCode calcLutOutJEP(const std::vector< int > &sigLutIn, const L1CaloPprChanCalib *sigDB, const std::vector< int > &ovLutIn, const L1CaloPprChanCalib *ovDB, std::vector< int > &output)
Identifier region_id(int pos_neg_z, int sampling, int region) const
build a region (of towers) identifier
ATHRNG::RNGWrapper * m_rndmADCs
#define ATH_MSG_VERBOSE(x)
std::vector< std::vector< double > > m_xaodTowersAmps
constexpr static int s_FIRLENGTH
SG::ReadHandleKey< TileTTL1Container > m_TileTTL1ContainerName
@ IS_SIMULATION
true: simulation, false: data
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
unsigned short bcidEnergyRangeLow() const
std::string m_deadChannelsKey
const std::vector< uint8_t > & bcidVec() const
get bcidVec
@ u
Enums for curvilinear frames.
int EtRange(int et, unsigned short bcidEnergyRangeLow, unsigned short bcidEnergyRangeHigh) const
std::string m_chanCalibKey
int peakFinderCond() const
StatusCode preProcessTower_getLutIn(int bcid, float mu, xAOD::TriggerTower *tower, const L1CaloPprChanCalib *db, const std::vector< int > &digits, std::vector< int > &output)
PreProcess up to LUT in.
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
ToolHandle< IL1TriggerTowerTool > m_TTtool
L1CaloCoolChannelId channelId(double eta, double phi, int layer)
Compute L1CaloCoolChannelId (including support for old geometries)
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
int phi(const Identifier id) const
return phi according to :
std::string m_disabledTowersKeyoverlay
unsigned short satBcidThreshHigh() const
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
unsigned short lutCpOffset() const
SG::ReadHandleKey< TrigConf::L1Menu > m_L1MenuKey
Run2TriggerTowerMaker(const std::string &name, ISvcLocator *pSvcLocator)
bool IsDisabledChannel(const L1CaloDisabledTowers *db) const
std::unique_ptr< xAOD::TriggerTowerAuxContainer > m_xaodTowersAux
constexpr static int s_MEV
L1CaloPprChanDefaults m_chanDefaults
void setPeak(uint8_t)
set peak
L1CaloPprChanCalibContainer * m_chanCalibContainer
double IDeta(const Identifier &id, const CaloLVL1_ID *caloId)
functions to extract eta, phi coordinates from calo tower identifiers
bool m_isDataReprocessing
Handle class for reading a decoration on an object.
Helper class to provide type-safe access to aux data.
std::string m_deadChannelsKeyoverlay
SG::ReadHandleKey< xAOD::EventInfo > m_xaodevtKey
const L1CaloPpmDeadChannels * ppmDeadChannels(unsigned int channelId) const
unsigned short lutJepOffset() const
::StatusCode StatusCode
StatusCode definition for legacy code.
bool IsDeadChannel(const L1CaloPpmDeadChannels *db) const
Database helper functions for dead and disabled towers.
int layer() const
get layer ( 0 = EM, 1 = Had, 2 = FCAL23) - to be confirmed
Description of TriggerTower_v2.
unsigned short satBcidLevel() const
double TTL1Ped(const Identifier &) const
Returns the pedestal (in mV) for TTL1 adcs.
virtual double eta() const final
The pseudorapidity ( ) of the particle.
L1CaloDisabledTowersContainer * m_disabledTowersContainer
int bcidDecision3() const
uint32_t coolId() const
Tower identifiers.
SG::ReadDecorHandleKey< xAOD::EventInfo > m_actMuKey
unsigned short lutCpScale() const
StatusCode execute()
Checks that the Cell Type is supported (terminates with errors if not) and calls relevant routine to ...
unsigned short lutJepSlope() const
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
AuxContainer for TriggerTower_v2.
Folder <-> Object mapping for /TRIGGER/L1Calo/V2/Calibration/Physics/PprChanCalib .
Container class for LArTTL1.
void setCorrection(const std::vector< int16_t > &)
set correction
virtual bool isValid() override final
Can the handle be successfully dereferenced?
double IDphi(const Identifier &id, const CaloLVL1_ID *caloId)
int etaToElement(float feta, int layer) const
unsigned short bcidEnergyRangeHigh() const
TriggerTowerContainer_v2 TriggerTowerContainer
Define the latest version of the TriggerTower container.
Helper class for offline TT identifiers.
unsigned short lutCpNoiseCut() const
int non_linear_lut(int lutin, unsigned short offset, unsigned short slope, unsigned short noiseCut, unsigned short scale, short par1, short par2, short par3, short par4)
ServiceHandle< IAthRNGSvc > m_rngSvc
StatusCode getTriggerTowers()
gets collection of input TriggerTowers for reprocessing
unsigned short firStartBit() const
unsigned short lutJepScale() const
int eta(const Identifier id) const
return eta according to :
std::unique_ptr< xAOD::TriggerTowerContainer > m_xaodTowers
ToolHandle< IL1CaloMappingTool > m_mappingTool
const CaloLVL1_ID * m_caloId
dictionary defaults
This includes now the top quark, the leptons and the bosons.
setEventNumber setTimeStamp bcid
void setLut_cp(const std::vector< uint8_t > &)
set lut_cp
static const std::string xAODTriggerTowerLocation
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
void setLut_jep(const std::vector< uint8_t > &)
set lut_jep
const L1CaloPprChanDefaults * pprChanDefaults(unsigned int channelId) const
Class describing the basic event information.
void processTileTowers(const TileTTL1Container *)
L1CaloDisabledTowersContainer * m_disabledTowersContaineroverlay
int pos_neg_z(const Identifier id) const
return pos_neg_z according to :
const L1CaloPprChanCalib * pprChanCalib(unsigned int channelId) const
std::array< double, m_maxIetaBins > m_sinThetaHash
instead of calculating the expression: double theta =2.
Folder <-> Object mapping for /TRIGGER/L1Calo/V1/Conditions/DisabledTowers .
SG::WriteHandleKey< xAOD::TriggerTowerContainer > m_outputLocation
void calcCombinedLUT(const std::vector< int > &sigIN, const int sigSlope, const int sigOffset, const std::vector< int > &ovIN, const int ovSlope, const int ovOffset, const int ovNoiseCut, std::vector< int > &output)
unsigned short lutJepStrategy() const
StatusCode getCaloTowers()
fetch Calorimeter Towers
#define ATH_MSG_WARNING(x)
L1CaloPprChanCalibContainer * m_chanCalibContaineroverlay
void setCorrectionEnabled(const std::vector< uint8_t > &)
set correctionEnabled
int sampling(const Identifier id) const
return sampling according to :
std::string m_chanCalibKeyoverlay
Handle class for reading a decoration on an object.
int decisionSource() const
void setBcidExt(const std::vector< uint8_t > &)
set bcidExt
constexpr static unsigned int m_maxIetaBins
Handle class for reading from StoreGate.
ToolHandle< LVL1BS::ITrigT1CaloDataAccessV2 > m_bstowertool
void digitize(const EventContext &ctx)
Convert analogue pulses to digits.
SG::ReadHandleKey< LArTTL1Container > m_HadTTL1ContainerName
bool is_tile(const Identifier id) const
Test wether given tower or layer is part of the Tile Calorimeter.
static const std::string xAODTriggerTowerRerunLocation
bool IsGoodTower(const xAOD::TriggerTower *tt, const L1CaloPpmDeadChannelsContainer *dead, const L1CaloDisabledTowersContainer *disabled) const
size_type size() const noexcept
Returns the number of elements in the collection.
Liquid Argon TT L1 sum class.
L1CaloPpmDeadChannelsContainer * m_deadChannelsContaineroverlay
Helper class to provide type-safe access to aux data.
SG::ReadHandleKey< xAOD::TriggerTowerContainer > m_inputTTLocation
bool match(std::string s1, std::string s2)
match the individual directories of two strings
TriggerTower_v2 TriggerTower
Define the latest version of the TriggerTower class.
SG::WriteHandleKey< xAOD::TriggerTowerContainer > m_outputLocationRerun
const std::vector< uint16_t > & adc() const
get adc
int bcidDecision2() const
void handle(const Incident &)
Best if initialisation which uses COOL-derived values is done here rather than in initialize()
double TTL1Calib(const Identifier &) const
Returns the factor which converts amplitude in pCb to mV in TTL1.