CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalCalibDataFrame.cc
Go to the documentation of this file.
2 
4  size_(0),
5  hcalPresamples_(0)
6 {
7 }
8 
10  id_(id),
11  size_(0),
12  hcalPresamples_(0)
13 {
14  // TODO : test id for HcalForward
15 }
16 
18  if (size>MAXSAMPLES) size_=MAXSAMPLES;
19  else if (size<=0) size_=0;
20  else size_=size;
21 }
23  hcalPresamples_|=ps&0xF;
24 }
26  electronicsId_=eid;
27 }
28 
29 bool HcalCalibDataFrame::validate(int firstSample, int nSamples) const {
30  int capid=-1;
31  bool ok=true;
32  for (int i=0; ok && i<nSamples && i+firstSample<size_; i++) {
33  if (data_[i+firstSample].er() || !data_[i+firstSample].dv()) ok=false;
34  if (i==0) capid=data_[i+firstSample].capid();
35  if (capid!=data_[i+firstSample].capid()) ok=false;
36  capid=(capid+1)%4;
37  }
38  return ok;
39 }
40 
41 void HcalCalibDataFrame::setZSInfo(bool unsuppressed, bool markAndPass, uint32_t crossingMask) {
42  hcalPresamples_&=0x7FC00F0F; // preserve actual presamples and fiber idle offset
43  if (markAndPass) hcalPresamples_|=0x10;
44  if (unsuppressed) hcalPresamples_|=0x20;
45  hcalPresamples_|=(crossingMask&0x3FF)<<12;
46 }
47 
49  int val=(hcalPresamples_&0xF00)>>8;
50  return (val==0)?(-1000):(((val&0x8)==0)?(-(val&0x7)):(val&0x7));
51 }
52 
54  hcalPresamples_&=0x7FFFF0FF;
55  if (offset>=7) hcalPresamples_|=0xF00;
56  else if (offset>=0) hcalPresamples_|=(0x800)|(offset<<8);
57  else if (offset>=-7) hcalPresamples_|=((-offset)<<8);
58  else hcalPresamples_|=0x700;
59 }
60 
61 std::ostream& operator<<(std::ostream& s, const HcalCalibDataFrame& digi) {
62  s << digi.id() << " " << digi.size() << " samples " << digi.presamples() << " presamples ";
63  if (digi.zsUnsuppressed()) s << " zsUS ";
64  if (digi.zsMarkAndPass()) s << " zsM&P ";
65  if (digi.fiberIdleOffset()!=0) {
66  if (digi.fiberIdleOffset()==-1000) s << " nofiberOffset";
67  else s << " fiberOffset=" << digi.fiberIdleOffset();
68  }
69  s << std::endl;
70  for (int i=0; i<digi.size(); i++)
71  s << " " << digi.sample(i) << std::endl;
72  return s;
73 }
74 
75 
int i
Definition: DBlmapReader.cc:9
void setPresamples(int ps)
int fiberIdleOffset() const
offset of bunch number for this channel relative to nominal set in the unpacker (range is +7-&gt;-7...
void setZSInfo(bool unsuppressed, bool markAndPass, uint32_t crossingMask=0)
bool zsUnsuppressed() const
was ZS unsuppressed?
int presamples() const
number of samples before the sample from the triggered beam crossing (according to the hardware) ...
bool validate(int firstSample=0, int nSamples=100) const
validate appropriate DV and ER bits as well as capid rotation for the specified samples (default is a...
std::ostream & operator<<(std::ostream &out, const ALILine &li)
Definition: ALILine.cc:187
HcalQIESample data_[MAXSAMPLES]
int size() const
total number of samples in the digi
void setSize(int size)
const HcalQIESample & sample(int i) const
access a sample
const HcalCalibDetId & id() const
void setFiberIdleOffset(int offset)
unsigned int offset(bool)
int capid() const
get the Capacitor id
Definition: HcalQIESample.h:28
void setReadoutIds(const HcalElectronicsId &eid)
static const int MAXSAMPLES
HcalElectronicsId electronicsId_
bool zsMarkAndPass() const
was ZS MarkAndPass?
string s
Definition: asciidump.py:422
Readout chain identification for Hcal [31:26] Unused (so far) [25] Trigger-chain id flag [24:20] Read...
tuple size
Write out results.