CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
CSCAnodeData2007 Class Reference

#include <CSCAnodeData2007.h>

Inheritance diagram for CSCAnodeData2007:
CSCAnodeDataFormat

Public Member Functions

void add (const CSCWireDigi &, int layer) override
 
 CSCAnodeData2007 (const CSCALCTHeader &)
 a blank one, for Monte Carlo More...
 
 CSCAnodeData2007 (const CSCALCTHeader &, const unsigned short *buf)
 fill from a real datastream More...
 
unsigned short * data () override
 
unsigned short int sizeInWords () const override
 the amount of the input binary buffer read, in 16-bit words More...
 
std::vector< CSCWireDigiwireDigis (int layer) const override
 input layer is from 1 to 6 More...
 
- Public Member Functions inherited from CSCAnodeDataFormat
virtual ~CSCAnodeDataFormat ()
 

Static Public Member Functions

static void selfTest ()
 

Private Types

enum  { MAXFRAMES = 2700 }
 we don't know the size at first. Max should be 7 boards * 32 bins * 6 layers * 2 More...
 

Private Member Functions

CSCAnodeDataFrame2007 findFrame (int tbin, int layer, int layerPart) const
 
int index (int tbin, int layer, int layerPart) const
 
void init (const CSCALCTHeader &)
 

Private Attributes

unsigned int alctBX_
 number of wiregroups in the ALCT More...
 
unsigned short int layerParts_
 
unsigned short int maxWireGroups_
 number of layer parts in the ALCT More...
 
unsigned short int nAFEBs_
 
unsigned short int nTimeBins_
 
unsigned short int sizeInWords2007_
 
unsigned short theDataFrames [MAXFRAMES]
 

Detailed Description

Definition at line 30 of file CSCAnodeData2007.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private

we don't know the size at first. Max should be 7 boards * 32 bins * 6 layers * 2

Enumerator
MAXFRAMES 

Definition at line 54 of file CSCAnodeData2007.h.

54 { MAXFRAMES = 2700 };

Constructor & Destructor Documentation

◆ CSCAnodeData2007() [1/2]

CSCAnodeData2007::CSCAnodeData2007 ( const CSCALCTHeader header)
explicit

a blank one, for Monte Carlo

To get BX from ALCT digis

Definition at line 7 of file CSCAnodeData2007.cc.

8  : nAFEBs_(header.nLCTChipRead()), nTimeBins_(header.NTBins()) {
9  init(header);
10  bzero(theDataFrames, sizeInWords() * 2);
12  alctBX_ = header.BXNCount();
13 }

References alctBX_, RecoTauValidation_cfi::header, init(), sizeInWords(), and theDataFrames.

◆ CSCAnodeData2007() [2/2]

CSCAnodeData2007::CSCAnodeData2007 ( const CSCALCTHeader header,
const unsigned short *  buf 
)

fill from a real datastream

dont memcpy if not 2006 or 2007 To get BX from ALCT digis

Definition at line 15 of file CSCAnodeData2007.cc.

16  : nAFEBs_(header.nLCTChipRead()), nTimeBins_(header.NTBins()) {
17  init(header);
18  memcpy(theDataFrames, buf, sizeInWords() * 2);
19  alctBX_ = header.BXNCount();
21 }

References alctBX_, visDQMUpload::buf, RecoTauValidation_cfi::header, init(), sizeInWords(), and theDataFrames.

Member Function Documentation

◆ add()

void CSCAnodeData2007::add ( const CSCWireDigi digi,
int  layer 
)
overridevirtual

Implements CSCAnodeDataFormat.

Definition at line 83 of file CSCAnodeData2007.cc.

83  {
84  int wireGroup = digi.getWireGroup();
85  // wireGroup = (layerPart*12+j)+1;
86  unsigned layerPart = (wireGroup - 1) / 12;
87  unsigned wireInPart = (wireGroup - 1) % 12;
88 
89  std::vector<int> timeBinsOn = digi.getTimeBinsOn();
90  for (std::vector<int>::const_iterator timeBinOn = timeBinsOn.begin(); timeBinOn != timeBinsOn.end(); ++timeBinOn) {
91  // crash if there's a bad wire number, but don't freak out
92  // if a time bin is out of range
93  // assert(alctBoard < nAFEBs_);
94  if (layerPart >= layerParts_) {
95  edm::LogError("CSCAnodeData|CSCRawToDigi") << "Bad Wire Number for this digi.";
96  return;
97  }
98 
99  if ((*timeBinOn) >= 0 && (*timeBinOn) < nTimeBins_) {
100  CSCAnodeDataFrame2007 frame = findFrame(*timeBinOn, layer, layerPart);
101  frame.addHit(wireInPart);
102  // FIXME doesn't carry over the (currently 0) leading bits
103  theDataFrames[index(*timeBinOn, layer, layerPart)] = frame.data();
104  } else {
105  LogTrace("CSCAnodeData|CSCRawToDigi")
106  << "warning: not saving anode data in bx " << *timeBinOn << ": out of range ";
107  }
108  }
109 }

References findFrame(), amptDefault_cfi::frame, CSCWireDigi::getTimeBinsOn(), CSCWireDigi::getWireGroup(), index(), phase1PixelTopology::layer, layerParts_, LogTrace, nTimeBins_, and theDataFrames.

Referenced by counter.Counter::register(), SequenceTypes.Task::remove(), SequenceTypes.Task::replace(), and selfTest().

◆ data()

unsigned short* CSCAnodeData2007::data ( )
inlineoverridevirtual

Implements CSCAnodeDataFormat.

Definition at line 37 of file CSCAnodeData2007.h.

37 { return theDataFrames; }

References theDataFrames.

◆ findFrame()

CSCAnodeDataFrame2007 CSCAnodeData2007::findFrame ( int  tbin,
int  layer,
int  layerPart 
) const
private

Definition at line 70 of file CSCAnodeData2007.cc.

70  {
71  return CSCAnodeDataFrame2007(theDataFrames[index(tbin, layer, layerPart)]);
72 }

References index(), phase1PixelTopology::layer, and theDataFrames.

Referenced by add(), and wireDigis().

◆ index()

int CSCAnodeData2007::index ( int  tbin,
int  layer,
int  layerPart 
) const
private

Definition at line 74 of file CSCAnodeData2007.cc.

74  {
75  assert(tbin < nTimeBins_);
76  assert(layer <= 6);
77  assert(layerPart < layerParts_);
78  int result = tbin * 6 * layerParts_ + (layer - 1) * layerParts_ + layerPart;
80  return result;
81 }

References cms::cuda::assert(), phase1PixelTopology::layer, layerParts_, MAXFRAMES, nTimeBins_, and mps_fire::result.

Referenced by add(), findFrame(), and BeautifulSoup.PageElement::insert().

◆ init()

void CSCAnodeData2007::init ( const CSCALCTHeader header)
private

the sizes of raw words vary depending on type of the ALCT board number of layer parts for various alct board types: 1 2 3 5 6

Definition at line 23 of file CSCAnodeData2007.cc.

23  {
27  static const unsigned short int layerParts[7] = {3, 3, 4, 6, 6, 8, 10};
28  static const unsigned short int wireGroups[7] = {32, 32, 48, 64, 64, 96, 112};
29  //header.ALCTDigis();
30  sizeInWords2007_ = (1 - header.alctHeader2007().rawOverflow) * 6 * header.alctHeader2007().rawBins *
31  layerParts[header.alctHeader2007().boardType];
32  layerParts_ = layerParts[header.alctHeader2007().boardType];
33  maxWireGroups_ = wireGroups[header.alctHeader2007().boardType];
34 }

References RecoTauValidation_cfi::header, layerParts_, maxWireGroups_, and sizeInWords2007_.

Referenced by CSCAnodeData2007().

◆ selfTest()

void CSCAnodeData2007::selfTest ( )
static

Definition at line 111 of file CSCAnodeData2007.cc.

111  {
112  int wireGroup = 12;
113  int timeBin = 6;
114  CSCWireDigi wireDigi(wireGroup, (1 << timeBin));
116  CSCAnodeData2007 anodeData(header);
117  anodeData.add(wireDigi, 1);
118  anodeData.add(wireDigi, 6);
119 
120  std::vector<CSCWireDigi> wires1 = anodeData.wireDigis(1);
121  std::vector<CSCWireDigi> wires6 = anodeData.wireDigis(6);
122 
123  assert(wires1.size() == 1);
124  assert(wires6.size() == 1);
125  assert(wires1[0].getWireGroup() == wireGroup);
126  assert(wires6[0].getWireGroup() == wireGroup);
127  assert(wires1[0].getTimeBin() == timeBin);
128  assert(wires6[0].getTimeBin() == timeBin);
129 }

References add(), cms::cuda::assert(), RecoTauValidation_cfi::header, and wireDigis().

◆ sizeInWords()

unsigned short int CSCAnodeData2007::sizeInWords ( ) const
inlineoverridevirtual

the amount of the input binary buffer read, in 16-bit words

Implements CSCAnodeDataFormat.

Definition at line 39 of file CSCAnodeData2007.h.

39 { return sizeInWords2007_; }

References sizeInWords2007_.

Referenced by CSCAnodeData2007().

◆ wireDigis()

std::vector< CSCWireDigi > CSCAnodeData2007::wireDigis ( int  layer) const
overridevirtual

input layer is from 1 to 6

BX from ACT (first component)

we know how many layer parts are there from ALCT header

loop over 12 bits in each word (each bit is one wiregroup) we want to stop if we reached the maxWireGroups

loop over tbins

BX from ALCT encoded in wireGroup

end of the loop over bits in the data frame

end of the loop over layer parts

Implements CSCAnodeDataFormat.

Definition at line 36 of file CSCAnodeData2007.cc.

36  {
37  std::vector<CSCWireDigi> digis;
38  uint32_t tbinbits = 0;
39  uint32_t wireGroup = 0;
41  for (int layerPart = 0; layerPart < layerParts_; ++layerPart) {
43  for (int j = 0; (j < 12) && ((layerPart * 12 + j) < maxWireGroups_); ++j) {
46  for (int tbin = 0; tbin < nTimeBins_; ++tbin) {
47  CSCAnodeDataFrame2007 frame = findFrame(tbin, layer, layerPart);
48  if (frame.data() != 0) {
49  if (frame.isHit(j)) {
50  tbinbits = tbinbits + (1 << tbin);
51  }
52  }
53  } //end of tbin loop
54  if (tbinbits != 0) {
55  wireGroup = (layerPart * 12 + j) + 1;
57  uint32_t wireGroupBX = alctBX_;
58  wireGroup = wireGroup | (wireGroupBX << 16);
59  CSCWireDigi digi(wireGroup, tbinbits);
60  LogTrace("CSCAnodeData|CSCRawToDigi") << "Layer " << layer << " " << digi;
61  digis.push_back(digi);
62  tbinbits = 0;
63  }
64  }
65  }
66 
67  return digis;
68 }

References alctBX_, findFrame(), amptDefault_cfi::frame, dqmiolumiharvest::j, phase1PixelTopology::layer, layerParts_, LogTrace, maxWireGroups_, and nTimeBins_.

Referenced by selfTest().

Member Data Documentation

◆ alctBX_

unsigned int CSCAnodeData2007::alctBX_
private

number of wiregroups in the ALCT

Definition at line 62 of file CSCAnodeData2007.h.

Referenced by CSCAnodeData2007(), and wireDigis().

◆ layerParts_

unsigned short int CSCAnodeData2007::layerParts_
private

Definition at line 60 of file CSCAnodeData2007.h.

Referenced by add(), index(), init(), and wireDigis().

◆ maxWireGroups_

unsigned short int CSCAnodeData2007::maxWireGroups_
private

number of layer parts in the ALCT

Definition at line 61 of file CSCAnodeData2007.h.

Referenced by init(), and wireDigis().

◆ nAFEBs_

unsigned short int CSCAnodeData2007::nAFEBs_
private

Definition at line 57 of file CSCAnodeData2007.h.

◆ nTimeBins_

unsigned short int CSCAnodeData2007::nTimeBins_
private

Definition at line 58 of file CSCAnodeData2007.h.

Referenced by add(), index(), and wireDigis().

◆ sizeInWords2007_

unsigned short int CSCAnodeData2007::sizeInWords2007_
private

Definition at line 56 of file CSCAnodeData2007.h.

Referenced by init(), and sizeInWords().

◆ theDataFrames

unsigned short CSCAnodeData2007::theDataFrames[MAXFRAMES]
private

Definition at line 55 of file CSCAnodeData2007.h.

Referenced by add(), CSCAnodeData2007(), data(), and findFrame().

CSCAnodeData2007::theDataFrames
unsigned short theDataFrames[MAXFRAMES]
Definition: CSCAnodeData2007.h:55
CSCWireDigi::getWireGroup
int getWireGroup() const
default
Definition: CSCWireDigi.h:22
cms::cuda::assert
assert(be >=bs)
CSCAnodeData2007::findFrame
CSCAnodeDataFrame2007 findFrame(int tbin, int layer, int layerPart) const
Definition: CSCAnodeData2007.cc:70
CSCAnodeData2007::nTimeBins_
unsigned short int nTimeBins_
Definition: CSCAnodeData2007.h:58
CSCALCTHeader
Definition: CSCALCTHeader.h:21
CSCAnodeData2007::maxWireGroups_
unsigned short int maxWireGroups_
number of layer parts in the ALCT
Definition: CSCAnodeData2007.h:61
CSCAnodeData2007::nAFEBs_
unsigned short int nAFEBs_
Definition: CSCAnodeData2007.h:57
CSCAnodeData2007::alctBX_
unsigned int alctBX_
number of wiregroups in the ALCT
Definition: CSCAnodeData2007.h:62
CSCAnodeData2007::init
void init(const CSCALCTHeader &)
Definition: CSCAnodeData2007.cc:23
CSCAnodeData2007::index
int index(int tbin, int layer, int layerPart) const
Definition: CSCAnodeData2007.cc:74
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
CSCWireDigi::getTimeBinsOn
std::vector< int > getTimeBinsOn() const
return vector of time bins ON
Definition: CSCWireDigi.cc:48
CSCAnodeData2007
Definition: CSCAnodeData2007.h:30
CSCWireDigi
Definition: CSCWireDigi.h:14
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
visDQMUpload.buf
buf
Definition: visDQMUpload.py:154
CSCAnodeData2007::sizeInWords
unsigned short int sizeInWords() const override
the amount of the input binary buffer read, in 16-bit words
Definition: CSCAnodeData2007.h:39
amptDefault_cfi.frame
frame
Definition: amptDefault_cfi.py:12
CSCAnodeData2007::layerParts_
unsigned short int layerParts_
Definition: CSCAnodeData2007.h:60
CSCAnodeData2007::MAXFRAMES
Definition: CSCAnodeData2007.h:54
RecoTauValidation_cfi.header
header
Definition: RecoTauValidation_cfi.py:292
mps_fire.result
result
Definition: mps_fire.py:311
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
CSCAnodeDataFrame2007
Definition: CSCAnodeData2007.h:9
CSCAnodeData2007::sizeInWords2007_
unsigned short int sizeInWords2007_
Definition: CSCAnodeData2007.h:56