ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
GETBasicFrame.cxx
Go to the documentation of this file.
1 #include "GETBasicFrame.h"
2 
3 #include "GETHeaderBase.h"
4 
5 #include <cstdint>
6 #include <cstring>
7 #include <istream>
8 
10 {
11  Clear();
12 }
13 
14 Int_t *GETBasicFrame::GetSample(Int_t agetIdx, Int_t chIdx)
15 {
16  return fSample + GetIndex(agetIdx, chIdx, 0);
17 }
18 
20 {
22 }
23 
24 void GETBasicFrame::Clear(Option_t *)
25 {
27 
28  memset(fSample, 0, sizeof(Int_t) * 4 * 68 * 512);
29 }
30 
31 void GETBasicFrame::Read(ifstream &stream)
32 {
33  Clear();
34 
36 
38  uint8_t data[4];
39  for (Int_t iItem = 0; iItem < GetNItems(); iItem++) {
40  stream.read((Char_t *)data, GetItemSize());
41 
42  UInt_t item = CorrectEndianness(data, 4);
43 
44  UShort_t agetIdx = ((item & 0xc0000000) >> 30);
45  UShort_t chIdx = ((item & 0x3f800000) >> 23);
46  UShort_t tbIdx = ((item & 0x007fc000) >> 14);
47  UShort_t sample = (item & 0x00000fff);
48 
49  fSample[GetIndex(agetIdx, chIdx, tbIdx)] = sample;
50  }
51  } else if (GetFrameType() == GETFRAMEBASICTYPE2) {
52  uint8_t data[2];
53  for (Int_t iItem = 0; iItem < GetNItems(); iItem++) {
54  stream.read((Char_t *)data, GetItemSize());
55 
56  UShort_t item = CorrectEndianness(data, 2);
57 
58  UShort_t agetIdx = ((item & 0xc000) >> 14);
59  UShort_t chIdx = ((iItem / 8) * 2 + iItem % 2) % 68;
60  UShort_t tbIdx = iItem / (68 * 4);
61  UShort_t sample = item & 0x0fff;
62 
63  fSample[GetIndex(agetIdx, chIdx, tbIdx)] = sample;
64  }
65  }
66 
67  stream.ignore(GetFrameSkip());
68 }
69 
70 UInt_t GETBasicFrame::GetIndex(Int_t agetIdx, Int_t chIdx, Int_t tbIdx)
71 {
72  return agetIdx * 68 * 512 + chIdx * 512 + tbIdx;
73 }
GETFRAMEBASICTYPE1
#define GETFRAMEBASICTYPE1
Definition: GETHeaderBase.h:5
GETHeaderBase::GetFrameSize
UInt_t GetFrameSize(Bool_t inBytes=kTRUE)
Definition: GETHeaderBase.cxx:21
GETFRAMEBASICTYPE2
#define GETFRAMEBASICTYPE2
Definition: GETHeaderBase.h:6
GETHeaderBase.h
GETBasicFrameHeader::GetHeaderSkip
UInt_t GetHeaderSkip()
Definition: GETBasicFrameHeader.cxx:92
GETBasicFrame::Clear
void Clear(Option_t *="")
Definition: GETBasicFrame.cxx:24
GETBasicFrame::GETBasicFrame
GETBasicFrame()
Definition: GETBasicFrame.cxx:9
GETBasicFrameHeader::Read
void Read(ifstream &stream)
Definition: GETBasicFrameHeader.cxx:116
GETBasicFrame.h
GETBasicFrameHeader::GetItemSize
UInt_t GetItemSize()
Definition: GETBasicFrameHeader.cxx:19
GETBasicFrameHeader::Clear
void Clear(Option_t *="")
Definition: GETBasicFrameHeader.cxx:97
GETHeaderBase::GetFrameType
UInt_t GetFrameType()
Definition: GETHeaderBase.cxx:29
GETBasicFrameHeader::GetNItems
UInt_t GetNItems()
Definition: GETBasicFrameHeader.cxx:23
GETBASICFRAMEHEADERSIZE
#define GETBASICFRAMEHEADERSIZE
Definition: GETBasicFrameHeader.h:10
GETBasicFrame::GetSample
Int_t * GetSample(Int_t agetIdx, Int_t chIdx)
Definition: GETBasicFrame.cxx:14
GETBasicFrame::GetFrameSkip
Int_t GetFrameSkip()
Definition: GETBasicFrame.cxx:19
GETBasicFrame::Read
void Read(ifstream &stream)
Definition: GETBasicFrame.cxx:31
GETHeaderBase::CorrectEndianness
ULong64_t CorrectEndianness(uint8_t *variable, Short_t length)
Definition: GETHeaderBase.cxx:55