Skip to content

Commit a0ba0d9

Browse files
authored
Merge pull request cms-sw#33884 from czangela/sipixel_errorchecker_refactor_26_04_2021
Pixel local reco: reduce code duplication in SiPixelRawToDigi related code
2 parents c45844c + 4911f50 commit a0ba0d9

File tree

13 files changed

+375
-570
lines changed

13 files changed

+375
-570
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#ifndef DataFormats_SiPixelDigi_interface_SiPixelDigiConstants
2+
#define DataFormats_SiPixelDigi_interface_SiPixelDigiConstants
3+
4+
#include "FWCore/Utilities/interface/typedefs.h"
5+
#include <cstdint>
6+
7+
using Word64 = cms_uint64_t;
8+
using Word32 = cms_uint32_t;
9+
10+
namespace sipixelconstants {
11+
constexpr cms_uint32_t dummyDetId = 0xffffffff;
12+
13+
constexpr uint32_t CRC_bits = 1;
14+
constexpr uint32_t DCOL_bits = 5; // double column
15+
constexpr uint32_t PXID_bits = 8; // pixel id
16+
constexpr uint32_t ADC_bits = 8;
17+
constexpr uint32_t OMIT_ERR_bits = 1;
18+
// GO BACK TO OLD VALUES. THE 48-CHAN FED DOES NOT NEED A NEW FORMAT 28/9/16 d.k.
19+
constexpr uint32_t LINK_bits = 6; // 7;
20+
constexpr uint32_t ROC_bits = 5; // 4;
21+
22+
constexpr uint32_t CRC_shift = 2;
23+
constexpr uint32_t ADC_shift = 0;
24+
constexpr uint32_t PXID_shift = ADC_shift + ADC_bits;
25+
constexpr uint32_t DCOL_shift = PXID_shift + PXID_bits;
26+
constexpr uint32_t ROC_shift = DCOL_shift + DCOL_bits;
27+
constexpr uint32_t LINK_shift = ROC_shift + ROC_bits;
28+
constexpr uint32_t OMIT_ERR_shift = 20;
29+
30+
constexpr uint64_t CRC_mask = ~(~Word64(0) << CRC_bits);
31+
constexpr uint32_t ERROR_mask = ~(~Word32(0) << ROC_bits);
32+
constexpr uint32_t LINK_mask = ~(~Word32(0) << LINK_bits);
33+
constexpr uint32_t ROC_mask = ~(~Word32(0) << ROC_bits);
34+
constexpr uint32_t OMIT_ERR_mask = ~(~Word32(0) << OMIT_ERR_bits);
35+
constexpr uint32_t DCOL_mask = ~(~Word32(0) << DCOL_bits);
36+
constexpr uint32_t PXID_mask = ~(~Word32(0) << PXID_bits);
37+
constexpr uint32_t ADC_mask = ~(~Word32(0) << ADC_bits);
38+
39+
// Special for layer 1 bpix rocs 6/9/16 d.k. THIS STAYS.
40+
inline namespace phase1layer1 {
41+
constexpr uint32_t COL_bits1_l1 = 6;
42+
constexpr uint32_t ROW_bits1_l1 = 7;
43+
constexpr uint32_t ROW_shift = ADC_shift + ADC_bits;
44+
constexpr uint32_t COL_shift = ROW_shift + ROW_bits1_l1;
45+
constexpr uint32_t COL_mask = ~(~Word32(0) << COL_bits1_l1);
46+
constexpr uint32_t ROW_mask = ~(~Word32(0) << ROW_bits1_l1);
47+
} // namespace phase1layer1
48+
49+
// constexpr functions are available in device code (GPU) as well
50+
inline namespace functions {
51+
inline constexpr uint32_t getLink(uint32_t ww) { return ((ww >> LINK_shift) & LINK_mask); }
52+
inline constexpr uint32_t getROC(uint32_t ww) { return ((ww >> ROC_shift) & ROC_mask); }
53+
inline constexpr uint32_t getADC(uint32_t ww) { return ((ww >> ADC_shift) & ADC_mask); }
54+
inline constexpr uint32_t getCol(uint32_t ww) { return ((ww >> COL_shift) & COL_mask); }
55+
inline constexpr uint32_t getRow(uint32_t ww) { return ((ww >> ROW_shift) & ROW_mask); }
56+
inline constexpr uint32_t getDCol(uint32_t ww) { return ((ww >> DCOL_shift) & DCOL_mask); }
57+
inline constexpr uint32_t getPxId(uint32_t ww) { return ((ww >> PXID_shift) & PXID_mask); }
58+
} // namespace functions
59+
} // namespace sipixelconstants
60+
61+
#endif // DataFormats_SiPixelDigi_interface_SiPixelDigiConstants
Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,27 @@
1-
#ifndef ErrorChecker_H
2-
#define ErrorChecker_H
1+
#ifndef EventFilter_SiPixelRawToDigi_interface_ErrorChecker_h
2+
#define EventFilter_SiPixelRawToDigi_interface_ErrorChecker_h
33
/** \class ErrorChecker
44
*
55
*
66
*/
77

8+
#include "DataFormats/SiPixelDigi/interface/SiPixelDigiConstants.h"
9+
#include "DataFormats/SiPixelRawData/interface/SiPixelFormatterErrors.h"
810
#include "EventFilter/SiPixelRawToDigi/interface/ErrorCheckerBase.h"
9-
#include "FWCore/Utilities/interface/typedefs.h"
1011

1112
class ErrorChecker : public ErrorCheckerBase {
1213
public:
13-
typedef cms_uint32_t Word32;
14-
typedef cms_uint64_t Word64;
15-
16-
typedef std::vector<SiPixelRawDataError> DetErrors;
17-
typedef std::map<cms_uint32_t, DetErrors> Errors;
18-
1914
ErrorChecker();
2015

21-
void setErrorStatus(bool ErrorStatus) override;
22-
23-
bool checkCRC(bool& errorsInEvent, int fedId, const Word64* trailer, Errors& errors) override;
24-
25-
bool checkHeader(bool& errorsInEvent, int fedId, const Word64* header, Errors& errors) override;
26-
27-
bool checkTrailer(bool& errorsInEvent, int fedId, unsigned int nWords, const Word64* trailer, Errors& errors) override;
28-
2916
bool checkROC(bool& errorsInEvent,
3017
int fedId,
3118
const SiPixelFrameConverter* converter,
3219
const SiPixelFedCabling* theCablingTree,
3320
Word32& errorWord,
34-
Errors& errors) override;
35-
36-
void conversionError(
37-
int fedId, const SiPixelFrameConverter* converter, int status, Word32& errorWord, Errors& errors) override;
38-
39-
private:
40-
bool includeErrors;
21+
SiPixelFormatterErrors& errors) const override;
4122

23+
protected:
4224
cms_uint32_t errorDetId(const SiPixelFrameConverter* converter, int errorType, const Word32& word) const override;
4325
};
4426

45-
#endif
27+
#endif // EventFilter_SiPixelRawToDigi_interface_ErrorChecker_h
Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,49 @@
1-
#ifndef ErrorCheckerBase_H
2-
#define ErrorCheckerBase_H
1+
#ifndef EventFilter_SiPixelRawToDigi_interface_ErrorCheckerBase_h
2+
#define EventFilter_SiPixelRawToDigi_interface_ErrorCheckerBase_h
33
/** \class ErrorCheckerBase
44
*
55
*
66
*/
77

8-
#include "DataFormats/SiPixelRawData/interface/SiPixelRawDataError.h"
9-
10-
#include <vector>
11-
#include <map>
8+
#include "DataFormats/SiPixelDigi/interface/SiPixelDigiConstants.h"
9+
#include "DataFormats/SiPixelRawData/interface/SiPixelFormatterErrors.h"
1210

1311
class SiPixelFrameConverter;
1412
class SiPixelFedCabling;
1513

1614
class ErrorCheckerBase {
1715
public:
18-
typedef cms_uint32_t Word32;
19-
typedef cms_uint64_t Word64;
16+
ErrorCheckerBase();
2017

21-
typedef std::vector<SiPixelRawDataError> DetErrors;
22-
typedef std::map<cms_uint32_t, DetErrors> Errors;
18+
virtual ~ErrorCheckerBase() = default;
2319

24-
virtual ~ErrorCheckerBase(){};
20+
void setErrorStatus(bool ErrorStatus);
2521

26-
virtual void setErrorStatus(bool ErrorStatus) = 0;
22+
bool checkCRC(bool& errorsInEvent, int fedId, const Word64* trailer, SiPixelFormatterErrors& errors) const;
2723

28-
virtual bool checkCRC(bool& errorsInEvent, int fedId, const Word64* trailer, Errors& errors) = 0;
24+
bool checkHeader(bool& errorsInEvent, int fedId, const Word64* header, SiPixelFormatterErrors& errors) const;
2925

30-
virtual bool checkHeader(bool& errorsInEvent, int fedId, const Word64* header, Errors& errors) = 0;
26+
bool checkTrailer(
27+
bool& errorsInEvent, int fedId, unsigned int nWords, const Word64* trailer, SiPixelFormatterErrors& errors) const;
3128

32-
virtual bool checkTrailer(
33-
bool& errorsInEvent, int fedId, unsigned int nWords, const Word64* trailer, Errors& errors) = 0;
29+
void conversionError(int fedId,
30+
const SiPixelFrameConverter* converter,
31+
int status,
32+
Word32& errorWord,
33+
SiPixelFormatterErrors& errors) const;
3434

3535
virtual bool checkROC(bool& errorsInEvent,
3636
int fedId,
3737
const SiPixelFrameConverter* converter,
3838
const SiPixelFedCabling* theCablingTree,
3939
Word32& errorWord,
40-
Errors& errors) = 0;
41-
42-
virtual void conversionError(
43-
int fedId, const SiPixelFrameConverter* converter, int status, Word32& errorWord, Errors& errors) = 0;
40+
SiPixelFormatterErrors& errors) const = 0;
4441

45-
private:
42+
protected:
43+
bool includeErrors_;
44+
int getConversionErrorTypeAndIssueLogMessage(int status, int fedId) const;
45+
void addErrorToCollectionDummy(int errorType, int fedId, Word64 word, SiPixelFormatterErrors& errors) const;
4646
virtual cms_uint32_t errorDetId(const SiPixelFrameConverter* converter, int errorType, const Word32& word) const = 0;
4747
};
4848

49-
#endif
49+
#endif // EventFilter_SiPixelRawToDigi_interface_ErrorCheckerBase_h
Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,27 @@
1-
#ifndef ErrorCheckerPhase0_H
2-
#define ErrorCheckerPhase0_H
1+
#ifndef EventFilter_SiPixelRawToDigi_interface_ErrorCheckerPhase0_h
2+
#define EventFilter_SiPixelRawToDigi_interface_ErrorCheckerPhase0_h
33
/** \class ErrorCheckerPhase0
44
*
55
*
66
*/
77

8+
#include "DataFormats/SiPixelDigi/interface/SiPixelDigiConstants.h"
9+
#include "DataFormats/SiPixelRawData/interface/SiPixelFormatterErrors.h"
810
#include "EventFilter/SiPixelRawToDigi/interface/ErrorCheckerBase.h"
9-
#include "FWCore/Utilities/interface/typedefs.h"
1011

1112
class ErrorCheckerPhase0 : public ErrorCheckerBase {
1213
public:
13-
typedef cms_uint32_t Word32;
14-
typedef cms_uint64_t Word64;
15-
16-
typedef std::vector<SiPixelRawDataError> DetErrors;
17-
typedef std::map<cms_uint32_t, DetErrors> Errors;
18-
1914
ErrorCheckerPhase0();
2015

21-
void setErrorStatus(bool ErrorStatus) override;
22-
23-
bool checkCRC(bool& errorsInEvent, int fedId, const Word64* trailer, Errors& errors) override;
24-
25-
bool checkHeader(bool& errorsInEvent, int fedId, const Word64* header, Errors& errors) override;
26-
27-
bool checkTrailer(bool& errorsInEvent, int fedId, unsigned int nWords, const Word64* trailer, Errors& errors) override;
28-
2916
bool checkROC(bool& errorsInEvent,
3017
int fedId,
3118
const SiPixelFrameConverter* converter,
3219
const SiPixelFedCabling* theCablingTree,
3320
Word32& errorWord,
34-
Errors& errors) override;
35-
36-
void conversionError(
37-
int fedId, const SiPixelFrameConverter* converter, int status, Word32& errorWord, Errors& errors) override;
38-
39-
private:
40-
bool includeErrors;
21+
SiPixelFormatterErrors& errors) const override;
4122

23+
protected:
4224
cms_uint32_t errorDetId(const SiPixelFrameConverter* converter, int errorType, const Word32& word) const override;
4325
};
4426

45-
#endif
27+
#endif // EventFilter_SiPixelRawToDigi_interface_ErrorCheckerPhase0_h
Lines changed: 41 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
#ifndef PixelDataFormatter_H
2-
#define PixelDataFormatter_H
1+
#ifndef EventFilter_SiPixelRawToDigi_interface_PixelDataFormatter_h
2+
#define EventFilter_SiPixelRawToDigi_interface_PixelDataFormatter_h
33
/** \class PixelDataFormatter
44
*
55
* Transforms Pixel raw data of a given FED to orca digi
@@ -33,16 +33,20 @@
3333
//
3434
// Add the phase1 format
3535
//
36+
// CMSSW include(s)
3637
#include "CondFormats/SiPixelObjects/interface/SiPixelFrameReverter.h"
3738
#include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
3839
#include "DataFormats/Common/interface/DetSetVector.h"
3940
#include "DataFormats/SiPixelRawData/interface/SiPixelRawDataError.h"
41+
#include "DataFormats/SiPixelDigi/interface/SiPixelDigiConstants.h"
4042
#include "DataFormats/DetId/interface/DetIdCollection.h"
43+
#include "DataFormats/SiPixelDetId/interface/PixelFEDChannel.h"
44+
#include "DataFormats/FEDRawData/interface/FEDRawData.h"
4145
#include "EventFilter/SiPixelRawToDigi/interface/ErrorChecker.h"
4246
#include "EventFilter/SiPixelRawToDigi/interface/ErrorCheckerPhase0.h"
4347
#include "FWCore/Utilities/interface/typedefs.h"
44-
#include "DataFormats/SiPixelDetId/interface/PixelFEDChannel.h"
4548

49+
// standard include(s)
4650
#include <vector>
4751
#include <map>
4852
#include <set>
@@ -56,29 +60,26 @@ class SiPixelFedCablingTree;
5660

5761
class PixelDataFormatter {
5862
public:
59-
typedef edm::DetSetVector<PixelDigi> Collection;
60-
61-
typedef std::map<int, FEDRawData> RawData;
62-
typedef std::vector<PixelDigi> DetDigis;
63-
typedef std::map<cms_uint32_t, DetDigis> Digis;
64-
typedef std::pair<DetDigis::const_iterator, DetDigis::const_iterator> Range;
65-
typedef std::vector<SiPixelRawDataError> DetErrors;
66-
typedef std::map<cms_uint32_t, DetErrors> Errors;
67-
typedef std::vector<PixelFEDChannel> DetBadChannels;
68-
typedef std::map<cms_uint32_t, DetBadChannels> BadChannels;
69-
70-
typedef cms_uint32_t Word32;
71-
typedef cms_uint64_t Word64;
72-
73-
PixelDataFormatter(const SiPixelFedCablingTree* map, bool phase1 = false);
63+
using DetErrors = std::vector<SiPixelRawDataError>;
64+
using Errors = std::map<cms_uint32_t, DetErrors>;
65+
using Collection = edm::DetSetVector<PixelDigi>;
66+
using RawData = std::map<int, FEDRawData>;
67+
using DetDigis = std::vector<PixelDigi>;
68+
using Digis = std::map<cms_uint32_t, DetDigis>;
69+
using DetBadChannels = std::vector<PixelFEDChannel>;
70+
using BadChannels = std::map<cms_uint32_t, DetBadChannels>;
71+
using FEDWordsMap = std::map<int, std::vector<Word32>>;
72+
using ModuleIDSet = std::set<unsigned int>;
73+
74+
PixelDataFormatter(const SiPixelFedCablingTree* map, bool phase1_ = false);
7475

7576
void setErrorStatus(bool ErrorStatus);
7677
void setQualityStatus(bool QualityStatus, const SiPixelQuality* QualityInfo);
77-
void setModulesToUnpack(const std::set<unsigned int>* moduleIds);
78+
void setModulesToUnpack(const ModuleIDSet* moduleIds);
7879
void passFrameReverter(const SiPixelFrameReverter* reverter);
7980

80-
int nDigis() const { return theDigiCounter; }
81-
int nWords() const { return theWordCounter; }
81+
int nDigis() const { return theDigiCounter_; }
82+
int nWords() const { return theWordCounter_; }
8283

8384
void interpretRawData(bool& errorsInEvent, int fedId, const FEDRawData& data, Collection& digis, Errors& errors);
8485

@@ -93,41 +94,33 @@ class PixelDataFormatter {
9394
edmNew::DetSetVector<PixelFEDChannel>& disabled_channelcollection,
9495
DetErrors& nodeterrors);
9596

96-
cms_uint32_t getLinkId(cms_uint32_t word32) { return (word32 >> LINK_shift) & LINK_mask; }
97-
9897
private:
99-
mutable int theDigiCounter;
100-
mutable int theWordCounter;
101-
102-
SiPixelFedCablingTree const* theCablingTree;
103-
const SiPixelFrameReverter* theFrameReverter;
104-
const SiPixelQuality* badPixelInfo;
105-
const std::set<unsigned int>* modulesToUnpack;
106-
107-
bool includeErrors;
108-
bool useQualityInfo;
109-
int allDetDigis;
110-
int hasDetDigis;
111-
std::unique_ptr<ErrorCheckerBase> errorcheck;
112-
113-
// For the 32bit data format (moved from *.cc namespace, keep uppercase for compatibility)
114-
// Add special layer 1 roc for phase1
115-
int ADC_shift, PXID_shift, DCOL_shift, ROC_shift, LINK_shift, ROW_shift, COL_shift;
116-
Word32 LINK_mask, ROC_mask, DCOL_mask, PXID_mask, ADC_mask, ROW_mask, COL_mask;
117-
int maxROCIndex;
118-
bool phase1;
98+
mutable int theDigiCounter_;
99+
mutable int theWordCounter_;
100+
101+
SiPixelFedCablingTree const* theCablingTree_;
102+
const SiPixelFrameReverter* theFrameReverter_;
103+
const SiPixelQuality* badPixelInfo_;
104+
const ModuleIDSet* modulesToUnpack_;
105+
106+
bool includeErrors_;
107+
bool useQualityInfo_;
108+
int allDetDigis_;
109+
int hasDetDigis_;
110+
std::unique_ptr<ErrorCheckerBase> errorcheck_;
111+
112+
int maxROCIndex_;
113+
bool phase1_;
119114

120115
int checkError(const Word32& data) const;
121116

122-
int digi2word(cms_uint32_t detId, const PixelDigi& digi, std::map<int, std::vector<Word32> >& words) const;
123-
int digi2wordPhase1Layer1(cms_uint32_t detId,
124-
const PixelDigi& digi,
125-
std::map<int, std::vector<Word32> >& words) const;
117+
int digi2word(cms_uint32_t detId, const PixelDigi& digi, FEDWordsMap& words) const;
118+
int digi2wordPhase1Layer1(cms_uint32_t detId, const PixelDigi& digi, FEDWordsMap& words) const;
126119

127120
std::string print(const PixelDigi& digi) const;
128121
std::string print(const Word64& word) const;
129122

130123
cms_uint32_t errorDetId(const SiPixelFrameConverter* converter, int fedId, int errorType, const Word32& word) const;
131124
};
132125

133-
#endif
126+
#endif // EventFilter_SiPixelRawToDigi_interface_PixelDataFormatter_h

EventFilter/SiPixelRawToDigi/interface/PixelUnpackingRegions.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
#ifndef PixelUnpackingRegions_H
2-
#define PixelUnpackingRegions_H
1+
#ifndef EventFilter_SiPixelRawToDigi_interface_PixelUnpackingRegions_h
2+
#define EventFilter_SiPixelRawToDigi_interface_PixelUnpackingRegions_h
33

44
#include "FWCore/Framework/interface/Event.h"
55
#include "FWCore/Framework/interface/EventSetup.h"
@@ -126,4 +126,4 @@ class PixelUnpackingRegions {
126126
edm::ESGetToken<SiPixelFedCablingMap, SiPixelFedCablingMapRcd> cablingMapToken_;
127127
};
128128

129-
#endif
129+
#endif // EventFilter_SiPixelRawToDigi_interface_PixelUnpackingRegions_h

0 commit comments

Comments
 (0)