CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CastorDataFrame.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 CASTOR
15 }
16 
18  if (size>MAXSAMPLES) size_=MAXSAMPLES;
19  else if (size<=0) size_=0;
20  else size_=size;
21 }
22 
24  hcalPresamples_|=ps&0xF;
25 }
26 //void CastorDataFrame::setReadoutIds(const HcalElectronicsId& eid) {
27 // electronicsId_=eid;
28 //}
29 
30 bool CastorDataFrame::validate(int firstSample, int nSamples) const {
31  int capid=-1;
32  bool ok=true;
33  for (int i=0; ok && i<nSamples && i+firstSample<size_; i++) {
34  if (data_[i+firstSample].er() || !data_[i+firstSample].dv()) ok=false;
35  if (i==0) capid=data_[i+firstSample].capid();
36  if (capid!=data_[i+firstSample].capid()) ok=false;
37  capid=(capid+1)%4;
38  }
39  return ok;
40 }
41 
42 void CastorDataFrame::setZSInfo(bool unsuppressed, bool markAndPass, uint32_t crossingMask) {
43  hcalPresamples_&=0x7FC00F0F; // preserve actual presamples and fiber idle offset
44  if (markAndPass) hcalPresamples_|=0x10;
45  if (unsuppressed) hcalPresamples_|=0x20;
46  hcalPresamples_|=(crossingMask&0x3FF)<<12;
47 }
48 
50  int val=(hcalPresamples_&0xF00)>>8;
51  return (val==0)?(-1000):(((val&0x8)==0)?(-(val&0x7)):(val&0x7));
52 }
53 
55  hcalPresamples_&=0x7FFFF0FF;
56  if (offset>=7) hcalPresamples_|=0xF00;
57  else if (offset>=0) hcalPresamples_|=(0x800)|(offset<<8);
58  else if (offset>=-7) hcalPresamples_|=((-offset)<<8);
59  else hcalPresamples_|=0x700;
60 }
61 std::ostream& operator<<(std::ostream& s, const CastorDataFrame& digi) {
62  s << digi.id() << " " << digi.size() << " samples " << digi.presamples() << " presamples " << std::endl;
63  if (digi.fiberIdleOffset()!=0) {
64  if (digi.fiberIdleOffset()==-1000) s << " nofiberOffset";
65  else s << " fiberOffset=" << digi.fiberIdleOffset();
66  }
67  for (int i=0; i<digi.size(); i++)
68  s << " " << digi.sample(i) << std::endl;
69  return s;
70 }
71 
72 
void setFiberIdleOffset(int offset)
int i
Definition: DBlmapReader.cc:9
int presamples() const
number of samples before the sample from the triggered beam crossing (according to the hardware) ...
int fiberIdleOffset() const
offset of bunch number for this channel relative to nominal set in the unpacker (range is +7-&gt;-7...
const HcalQIESample & sample(int i) const
access a sample
void setZSInfo(bool unsuppressed, bool markAndPass, uint32_t crossingMask=0)
std::ostream & operator<<(std::ostream &out, const ALILine &li)
Definition: ALILine.cc:187
unsigned int offset(bool)
HcalQIESample data_[MAXSAMPLES]
int capid() const
get the Capacitor id
Definition: HcalQIESample.h:28
size_(0)
Definition: OwnArray.h:181
const HcalCastorDetId & id() const
void setPresamples(int ps)
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...
int size() const
total number of samples in the digi
tuple size
Write out results.
static const int MAXSAMPLES
void setSize(int size)