|
ATLAS Offline Software
|
Go to the documentation of this file.
54 #include <CLHEP/Random/Randomize.h>
56 using namespace CLHEP;
73 , m_tileBadChanTool(
"TileBadChanTool")
74 , m_tileToolEmscale(
"TileCondToolEmscale")
112 for (
int jsamp = 0; jsamp <
m_nSamp; ++jsamp) {
120 ATH_MSG_INFO(
"TileRawChannelToTTL1 initialization completed" );
122 return StatusCode::SUCCESS;
142 float ttL1Calib, ttL1NoiseSigma, ttL1Ped, ttL1Thresh;
146 <<
", tileNoise=" << ((tileNoise) ?
"true" :
"false")
147 <<
", tileThresh=" << ((tileThresh) ?
"true" :
"false") );
160 ATH_CHECK( ttl1Container.
record(std::make_unique<TileTTL1Container>()) );
168 bool ttRawChannel[16];
173 int nRawChannelTot = 0;
176 float ttAmpTotIg = 0.;
177 int minieta, maxieta, posneg;
180 std::vector<float> ttL1samples(
m_nSamp);
213 posneg = minieta = maxieta = 0;
217 memset(ttAmp, 0,
sizeof(ttAmp));
218 memset(ttRawChannel, 0,
sizeof(ttRawChannel));
219 nTT = nIgnore = nRawChannel = 0;
226 HWIdentifier hwid = rawChannel->adc_HWID();
232 rawChannel->amplitude(),
257 if (ttRawChannel[ieta]) {
261 ttRawChannel[ieta] =
true;
263 if (ieta >= minieta && ieta <= maxieta)
267 if (ieta < minieta || ieta > maxieta)
270 if (ieta >= minieta && ieta <= maxieta) {
288 <<
", tower=" << tower
295 if (ieta >= minieta && ieta <= maxieta)
308 nRawChannelTot += nRawChannel;
309 nIgnoreTot += nIgnore;
314 <<
"; posneg=" << posneg
315 <<
", minieta=" << minieta
316 <<
", maxieta=" << maxieta
318 <<
", nRawChannel=" << nRawChannel
319 <<
", nIgnore=" << nIgnore );
325 for (
int ieta = minieta; ieta <= maxieta; ++ieta) {
327 bool Good = ttRawChannel[ieta];
331 if (!ttRawChannel[ieta])
338 ttAmp[ieta] *= ttL1Calib;
348 CLHEP::RandGauss::shootArray(
m_nSamp, Rndm);
349 for (
int jsamp = 0; jsamp <
m_nSamp; ++jsamp) {
350 ttL1samples[jsamp] = ttAmp[ieta] *
m_TTL1Shape[jsamp] + ttL1Ped;
352 ttL1samples[jsamp] += ttL1NoiseSigma * Rndm[jsamp];
355 if (ttL1samples[
m_iTrig] - ttL1Ped < ttL1Thresh)
365 <<
", rawChannelTrue=" << ttRawChannel[ieta]
367 <<
", amp0=" << ttAmp[ieta]
368 <<
", digitIn=" << ttL1samples[
m_iTrig] );
389 ttl1Container->
push_back(std::make_unique<TileTTL1>(ttId[ieta], ttL1samples));
395 ATH_MSG_DEBUG(
"TileRawChannelToTTL1 execution completed." );
397 <<
" nRawChannelTot=" << nRawChannelTot
398 <<
" nIgnoreTot=" << nIgnoreTot
399 <<
" ttAmpTot=" << ttAmpTot
400 <<
" ttAmpTotIg=" << ttAmpTotIg
401 <<
" =>eneTot=" << ttAmpTot + ttAmpTotIg );
403 return StatusCode::SUCCESS;
410 return StatusCode::SUCCESS;
def retrieve(aClass, aKey=None)
SG::WriteHandleKey< TileTTL1Container > m_ttl1ContainerKey
int NdigitSamples() const
Returns the number of sammples (digits) per event.
const TileInfo * m_tileInfo
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
int pmt(const Identifier &id) const
int side(const Identifier &id) const
int sample(const Identifier &id) const
bool msgLvl(const MSG::Level lvl) const
ToolHandle< ITileBadChanTool > m_tileBadChanTool
Tile Bad Channel tool.
ToolHandle< TileCondToolEmscale > m_tileToolEmscale
main Tile Calibration tool
int tower(const Identifier &id) const
#define ATH_MSG_VERBOSE(x)
const std::vector< double > & ttl1Shape() const
Return bunch-X TTL1 shape vector.
int channel(const HWIdentifier &id) const
extract channel field from HW identifier
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
int ros(const HWIdentifier &id) const
extract ros field from HW identifier
int phi(const Identifier id) const
return phi according to :
Handle class for recording to StoreGate.
int adc(const HWIdentifier &id) const
extract adc field from HW identifier
int ItrigSample() const
The sample at which the pulse should ideally peak.
virtual ~TileRawChannelToTTL1()
double TTL1NoiseSigma(const Identifier &) const
Returns the sigma (in mV) of Noise in TTL1 adcs.
::StatusCode StatusCode
StatusCode definition for legacy code.
double TTL1Ped(const Identifier &) const
Returns the pedestal (in mV) for TTL1 adcs.
#define CHECK(...)
Evaluate an expression and check for errors.
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
HWIdentifier drawer_id(int frag) const
ROS HWIdentifer.
Helpers for checking error return status codes and reporting errors.
std::vector< double > m_TTL1Shape
int eta(const Identifier id) const
return eta according to :
value_type push_back(value_type pElem)
Add an element to the end of the collection.
bool TileNoise() const
Noise switched on/off?
bool TileZeroSuppress() const
Zero suppression switched on/off?
int drawer(const HWIdentifier &id) const
extract drawer field from HW identifier
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
std::string to_string(const Identifier &id, int level=0) const
TileRawChannelToTTL1(const std::string &name, ISvcLocator *pSvcLocator)
static unsigned int getDrawerIdx(unsigned int ros, unsigned int drawer)
Returns a drawer hash.
const CaloLVL1_ID * m_TT_ID
const TileHWID * m_tileHWID
int section(const Identifier &id) const
Handle class for reading from StoreGate.
SG::ReadHandleKey< TileRawChannelContainer > m_rawChannelContainerKey
Identifier tower_id(int pos_neg_z, int sampling, int region, int eta, int phi) const
build a tower identifier
double TTL1Thresh(const Identifier &) const
Returns the threshold (in mV) for TTL1 adcs.
double TTL1Calib(const Identifier &) const
Returns the factor which converts amplitude in pCb to mV in TTL1.
double ttl1Phase(const int, const int, const int) const
NGO Need description.