ATLAS Offline Software
Loading...
Searching...
No Matches
CscRawDataCnv_p2.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
6#include "CscRawDataCnv_p2.h"
7#include "GaudiKernel/GaudiException.h"
8#include <TString.h> // for Form
9
10void
11CscRawDataCnv_p2::transToPers(const CscRawData* trans, CscRawData_p2* pers, MsgStream &)
12{
13 pers->m_amps = trans->samples();
14 pers->m_address = trans->address();
15 pers->m_id = trans->identify();
16 pers->m_time = trans->time();
17 pers->m_rpuID = trans->rpuID();
18 pers->m_width = trans->width();
19 pers->m_isTimeComputed = trans->isTimeComputed();
20 if (m_idHelp) {
21 // translate the transient (positional) hash into a geometrical hash as expected by the p2 persistent data format
22 if (!m_idHelp->hasCSC()) std::cout << "CscRawDataCnv_p2::transToPers: !m_idHelp.hasCSC()" << std::endl;
23 IdContext context = m_idHelp->cscIdHelper().channel_context();
24 Identifier id;
25 IdentifierHash geoHash;
26 if (!m_idHelp->cscIdHelper().get_id(trans->hashId(), id, &context)) {
27 if (!m_idHelp->cscIdHelper().get_channel_hash(id, geoHash)) pers->m_hashId = geoHash;
28 }
29 } else {
30 throw std::runtime_error(Form("File: %s, Line: %d\nCscRawDataCnv_p2::transToPers() - No MuonIdHelperSvc present (needed for channel hash conversion)", __FILE__, __LINE__));
31 }
32}
33
34
35// schema evolution for case a) below https://savannah.cern.ch/bugs/?56002
36// There can be two cases:
37// (a) Reco in 15.5.X.Y or after reading RDO made in 15.3.X.Y and before.
38// (b) both reco and simulation in 15.5.X.Y or after
39void
40CscRawDataCnv_p2::persToTrans(const CscRawData_p2* pers, CscRawData* trans, MsgStream &)
41{
42 // Fix for CSC phi strip - see https://savannah.cern.ch/bugs/?56002
43 int stationEta = ( ((pers->m_address & 0x00001000) >> 12 ) == 0x0) ? -1 : 1;
44 int measuresPhi = ( (pers->m_address & 0x00000100) >> 8);
45
46 uint32_t address = 0;
47 if (stationEta==1 && measuresPhi ==1) { // for Wheel A phi strips
48 uint32_t oldFirstStrip = uint32_t (pers->m_address & 0x000000FF); // ( 0 ~ 47 )
49 uint32_t newFirstStrip = uint32_t(47-oldFirstStrip) - pers->m_width + 1; // flip and then shift the firstStrip by 1 - width
50 // width is a number of strips in cluster
51 uint32_t flippedAddress = pers->m_address - oldFirstStrip + newFirstStrip;
52 address = flippedAddress;
53
55 // log message to confirm "flip and shift" correctly. stripId ranges ( 1-48 )
57 // std::cout << " CscRawDataCnv_p2 " << std::hex << pers->m_address << " ===> " << address << std::dec
58 // << " Strips [" << int(oldFirstStrip+1) << "," << int(oldFirstStrip+trans->m_width) << "] ===> ["
59 // << int(newFirstStrip)+1 << "," << int(newFirstStrip + trans->m_width) << "] "
60 // << " compared to Correct [" << 47-int(oldFirstStrip)+1 << "," << 47-int(oldFirstStrip) - int(trans->m_width)+1+1 << "]"
61 // << std::endl;
62
63 } else {
64 address = pers->m_address;
65 }
66
67 *trans = CscRawData (pers->m_amps,
68 address,
69 pers->m_id,
70 pers->m_rpuID,
71 pers->m_width);
72 // translate the persistent p2 (geometrical) hash into a positional hash (as expected by the transient data format)
73 trans->setHashID(pers->m_hashId);
74 if (pers->m_isTimeComputed)
75 trans->setTime (pers->m_time);
76}
Muon::IMuonIdHelperSvc * m_idHelp
virtual void transToPers(const CscRawData *transObj, CscRawData_p2 *persObj, MsgStream &log)
virtual void persToTrans(const CscRawData_p2 *persObj, CscRawData *transObj, MsgStream &log)
uint16_t m_width
number of consecutive strips forming the on-line cluster
uint32_t m_address
online identifier of the first strip in the ROD cluster
uint16_t m_rpuID
SPU -Sparsifier Processing Unit - identifier in which this strip is.
std::vector< uint16_t > m_amps
in common with _p1
uint32_t m_hashId
offline hash identifier of the first strip in the online cluster
bool m_isTimeComputed
failed to compute the time in the ROD or not - if failure m_time = 0
uint16_t m_time
online peaking time of the first strip: this is 0 if failed to compute time in the ROD
uint16_t m_id
online identifier of the collection in which this strip is
Class to hold the electronic output for a single CSC readout channel: n sampling ADC data + the addre...
Definition CscRawData.h:21
uint16_t time() const
Definition CscRawData.h:127
uint32_t address() const
Definition CscRawData.h:131
uint32_t hashId() const
Definition CscRawData.h:132
void setHashID(uint32_t hash)
Definition CscRawData.h:121
uint16_t rpuID() const
data access methods
Definition CscRawData.h:125
uint16_t identify() const
Definition CscRawData.h:126
uint16_t width() const
Definition CscRawData.h:128
const std::vector< uint16_t > & samples() const
Definition CscRawData.h:130
void setTime(uint16_t time)
Definition CscRawData.h:119
bool isTimeComputed() const
Definition CscRawData.h:129
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition IdContext.h:26
This is a "hash" representation of an Identifier.