Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
vpalladi
HgcTpgSim
Commits
efc9b89c
Commit
efc9b89c
authored
Jan 12, 2019
by
dauncey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Throttling and exceeding
parent
56642b92
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
488 additions
and
573 deletions
+488
-573
interface/Buffering/BeSlinkAna.hh
interface/Buffering/BeSlinkAna.hh
+33
-57
interface/Buffering/BeSlinkSim.hh
interface/Buffering/BeSlinkSim.hh
+299
-322
interface/Buffering/EconAna.hh
interface/Buffering/EconAna.hh
+13
-0
interface/Buffering/EconSim.hh
interface/Buffering/EconSim.hh
+67
-165
interface/Buffering/Throttle.hh
interface/Buffering/Throttle.hh
+8
-2
src/DaqDaqBuffer.cpp
src/DaqDaqBuffer.cpp
+68
-27
No files found.
interface/Buffering/BeSlinkAna.hh
View file @
efc9b89c
...
@@ -19,6 +19,9 @@ public:
...
@@ -19,6 +19,9 @@ public:
void
boj
(
const
BeSlinkSim
&
b
,
unsigned
nHistory
=
100000
)
{
void
boj
(
const
BeSlinkSim
&
b
,
unsigned
nHistory
=
100000
)
{
fBeSlinkSim
=&
b
;
fBeSlinkSim
=&
b
;
fPreviousThrottleActive
=
false
;
fRaisedThrottleBx
=-
1
;
fEndedThrottleBx
=-
1
;
std
::
ostringstream
sout
;
std
::
ostringstream
sout
;
sout
<<
"BeSlinkAna"
<<
std
::
setw
(
2
)
<<
std
::
setfill
(
'0'
)
sout
<<
"BeSlinkAna"
<<
std
::
setw
(
2
)
<<
std
::
setfill
(
'0'
)
...
@@ -26,15 +29,7 @@ public:
...
@@ -26,15 +29,7 @@ public:
std
::
string
sHgcroc
[
18
]
=
{
"00"
,
"01"
,
"02"
,
"03"
,
"04"
,
"05"
,
"06"
,
"07"
,
"08"
,
std
::
string
sHgcroc
[
18
]
=
{
"00"
,
"01"
,
"02"
,
"03"
,
"04"
,
"05"
,
"06"
,
"07"
,
"08"
,
"09"
,
"10"
,
"11"
,
"12"
,
"13"
,
"14"
,
"15"
,
"16"
,
"17"
};
"09"
,
"10"
,
"11"
,
"12"
,
"13"
,
"14"
,
"15"
,
"16"
,
"17"
};
/*
hBitmapWordsVsChannels=new TH1I((sout.str()+"BitmapWordsVsChannels").c_str(),
";Number of channels per HGCROC packet;Number of words per HGCROC packet",73,-0.5,72.5);
hLabelsWordsVsChannels=new TH1I((sout.str()+"LabelsWordsVsChannels").c_str(),
";Number of channels per HGCROC packet;Number of words per HGCROC packet",73,-0.5,72.5);
hTotalChannels=new TH1D((sout.str()+"TotalChannels").c_str(),
";ECON total number of channels",1300,0,1300);
*/
hTotalEventWords
=
new
TH1D
((
sout
.
str
()
+
"TotalEventWords"
).
c_str
(),
hTotalEventWords
=
new
TH1D
((
sout
.
str
()
+
"TotalEventWords"
).
c_str
(),
";Total number of bytes per event"
,
250
,
0
,
4000
);
";Total number of bytes per event"
,
250
,
0
,
4000
);
...
@@ -46,45 +41,22 @@ public:
...
@@ -46,45 +41,22 @@ public:
";Number of event buffer words used"
,
1000
,
0
,
10000
);
";Number of event buffer words used"
,
1000
,
0
,
10000
);
hEventBufferUsedHistory
[
e
][
b
]
=
new
TH1I
((
sout
.
str
()
+
"Econ"
+
sHgcroc
[
e
]
+
"Block"
+
sHgcroc
[
b
]
+
"EventBufferUsedHistory"
).
c_str
(),
hEventBufferUsedHistory
[
e
][
b
]
=
new
TH1I
((
sout
.
str
()
+
"Econ"
+
sHgcroc
[
e
]
+
"Block"
+
sHgcroc
[
b
]
+
"EventBufferUsedHistory"
).
c_str
(),
";BX;Number of event buffer words used"
,
nHistory
,
0
,
nHistory
);
";BX;Number of event buffer words used"
,
nHistory
,
0
,
nHistory
);
hEventBufferExceeded
[
e
][
b
]
=
new
TH1D
((
sout
.
str
()
+
"Econ"
+
sHgcroc
[
e
]
+
"Block"
+
sHgcroc
[
b
]
+
"EventBufferExceeded"
).
c_str
(),
";Number of event buffer words used"
,
1000
,
0
,
10000
);
}
}
}
}
/*
for(unsigned h(0);h<18;h++) {
hThrottleActiveHistory
=
new
TH1I
((
sout
.
str
()
+
"ThrottleActiveHistory"
).
c_str
(),
hChannels[h]=new TH1D((sout.str()+"Hgcroc"+sHgcroc[h]+"Channels").c_str(),
";BX;Throttle active"
,
nHistory
,
0
,
nHistory
);
";Number of channels per HGCROC packet",73,0,73);
hRaisedThrottleToL1Accept
=
new
TH1D
((
sout
.
str
()
+
"RaisedThrottleToL1Accept"
).
c_str
(),
hWords[h]=new TH1D((sout.str()+"Hgcroc"+sHgcroc[h]+"Words").c_str(),
";L1Accept - ended throttle (BX)"
,
1000
,
0
,
1000
);
";Number of words per HGCROC packet",60,0,60);
hEndedThrottleToL1Accept
=
new
TH1D
((
sout
.
str
()
+
"EndedThrottleToL1Accept"
).
c_str
(),
hWordsVsChannels[h]=new TH2D((sout.str()+"Hgcroc"+sHgcroc[h]+"WordsVsChannels").c_str(),
";L1Accept - ended throttle (BX)"
,
1000
,
0
,
1000
);
";Number of channels per HGCROC packet;Number of words per HGCROC packet",73,-0.5,72.5,60,-0.5,59.5);
}
*/
}
}
void
analyseL1Accept
(
uint64_t
bx
)
{
void
analyseL1Accept
(
uint64_t
bx
)
{
/*
if
(
fRaisedThrottleBx
!=-
1
)
hRaisedThrottleToL1Accept
->
Fill
(
bx
-
fRaisedThrottleBx
);
unsigned nChannels(0),nWords(0);
if
(
fEndedThrottleBx
!=-
1
)
hEndedThrottleToL1Accept
->
Fill
(
bx
-
fEndedThrottleBx
);
for(unsigned h(0);h<18;h++) {
hChannels[h]->Fill(fEconSim->numberOfChannels(h));
hWords[h]->Fill(fEconSim->numberOfWords(h));
hWordsVsChannels[h]->Fill(fEconSim->numberOfChannels(h),fEconSim->numberOfWords(h));
nChannels+=fEconSim->numberOfChannels(h);
nWords+=fEconSim->numberOfWords(h);
}
hTotalChannels->Fill(nChannels);
hTotalWords->Fill(nWords);
for(unsigned block(0);block<fEconSim->fEconArch.fNumberOfBlocks;block++) {
unsigned nBlockChannels(0),nBlockWords(0);
for(unsigned i(0);i<fEconSim->fEconArch.fHgcrocNumber[block].size();i++) {
unsigned h(fEconSim->fEconArch.fHgcrocNumber[block][i]);
nBlockChannels+=fEconSim->numberOfChannels(h);
nBlockWords+=fEconSim->numberOfWords(h);
}
hBlockTotalChannels[block]->Fill(nBlockChannels);
hBlockTotalWords[block]->Fill(nBlockWords);
}
*/
}
}
void
analyseBx
(
uint64_t
bx
)
{
void
analyseBx
(
uint64_t
bx
)
{
...
@@ -94,12 +66,22 @@ public:
...
@@ -94,12 +66,22 @@ public:
for
(
unsigned
b
(
0
);
b
<
econArch
.
numberOfBlocks
();
b
++
)
{
for
(
unsigned
b
(
0
);
b
<
econArch
.
numberOfBlocks
();
b
++
)
{
hEventBufferUsed
[
e
][
b
]
->
Fill
(
fBeSlinkSim
->
fEventBuffer
[
e
][
b
].
used
());
hEventBufferUsed
[
e
][
b
]
->
Fill
(
fBeSlinkSim
->
fEventBuffer
[
e
][
b
].
used
());
hEventBufferUsedHistory
[
e
][
b
]
->
Fill
(
bx
,
fBeSlinkSim
->
fEventBuffer
[
e
][
b
].
used
());
hEventBufferUsedHistory
[
e
][
b
]
->
Fill
(
bx
,
fBeSlinkSim
->
fEventBuffer
[
e
][
b
].
used
());
if
(
fBeSlinkSim
->
exceededBuffer
())
hEventBufferExceeded
[
e
][
b
]
->
Fill
(
fBeSlinkSim
->
fEventBuffer
[
e
][
b
].
used
());
}
}
}
}
if
(
fBeSlinkSim
->
fL1AcceptEoe
)
{
if
(
fBeSlinkSim
->
fL1AcceptEoe
)
{
hTotalEventWords
->
Fill
(
16
*
fBeSlinkSim
->
fTotalNumberOfEventWords
);
hTotalEventWords
->
Fill
(
16
*
fBeSlinkSim
->
fTotalNumberOfEventWords
);
}
}
if
(
fBeSlinkSim
->
fThrottleActive
)
{
if
(
!
fPreviousThrottleActive
)
fRaisedThrottleBx
=
bx
;
hThrottleActiveHistory
->
Fill
(
bx
);
}
else
{
if
(
fPreviousThrottleActive
)
fEndedThrottleBx
=
bx
;
}
fPreviousThrottleActive
=
fBeSlinkSim
->
fThrottleActive
;
}
}
void
eoj
()
{
void
eoj
()
{
...
@@ -108,24 +90,18 @@ public:
...
@@ -108,24 +90,18 @@ public:
private:
private:
const
BeSlinkSim
*
fBeSlinkSim
;
const
BeSlinkSim
*
fBeSlinkSim
;
//TH1I *hBitmapWordsVsChannels;
bool
fPreviousThrottleActive
;
//TH1I *hLabelsWordsVsChannels;
uint64_t
fRaisedThrottleBx
;
uint64_t
fEndedThrottleBx
;
//TH1D *hMeans;
//TH1D *hChannels[18];
//TH1D *hWords[18];
//TH2D *hWordsVsChannels[18];
//TH1D *hTotalChannels;
//TH1D *hTotalWords;
//TH1D *hBlockTotalChannels[7];
//TH1D *hBlockTotalWords[7];
TH1D
*
hTotalEventWords
;
TH1D
*
hTotalEventWords
;
TH1I
*
hThrottleActiveHistory
;
TH1D
*
hRaisedThrottleToL1Accept
;
TH1D
*
hEndedThrottleToL1Accept
;
TH1D
*
hEventBufferUsed
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
TH1D
*
hEventBufferUsed
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
TH1I
*
hEventBufferUsedHistory
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
TH1I
*
hEventBufferUsedHistory
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
TH1D
*
hEventBufferExceeded
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
};
};
#endif
#endif
interface/Buffering/BeSlinkSim.hh
View file @
efc9b89c
This diff is collapsed.
Click to expand it.
interface/Buffering/EconAna.hh
View file @
efc9b89c
...
@@ -46,6 +46,12 @@ public:
...
@@ -46,6 +46,12 @@ public:
";Number of event buffer words used"
,
50000
,
0
,
50000
);
";Number of event buffer words used"
,
50000
,
0
,
50000
);
hEventBufferUsedHistory
[
block
]
=
new
TH1I
((
sout
.
str
()
+
"Block"
+
sHgcroc
[
block
]
+
"EventBufferUsedHistory"
).
c_str
(),
hEventBufferUsedHistory
[
block
]
=
new
TH1I
((
sout
.
str
()
+
"Block"
+
sHgcroc
[
block
]
+
"EventBufferUsedHistory"
).
c_str
(),
";BX;Number of event buffer words used"
,
nHistory
,
0
,
nHistory
);
";BX;Number of event buffer words used"
,
nHistory
,
0
,
nHistory
);
hEventBufferExceeded
[
block
]
=
new
TH1D
((
sout
.
str
()
+
"Block"
+
sHgcroc
[
block
]
+
"EventBufferExceeded"
).
c_str
(),
";Number of event buffer words used"
,
50000
,
0
,
50000
);
hL1AcceptDifference
[
block
]
=
new
TH1D
((
sout
.
str
()
+
"Block"
+
sHgcroc
[
block
]
+
"L1AcceptDifference"
).
c_str
(),
";Difference in L1Accept numbers"
,
100
,
0
,
100
);
hL1AcceptDifferenceHistory
[
block
]
=
new
TH1I
((
sout
.
str
()
+
"Block"
+
sHgcroc
[
block
]
+
"L1AcceptDifferenceHistory"
).
c_str
(),
";BX;Difference in L1Accept numbers"
,
nHistory
,
0
,
nHistory
);
}
}
for
(
unsigned
c
(
0
);
c
<=
72
;
c
++
)
{
for
(
unsigned
c
(
0
);
c
<=
72
;
c
++
)
{
...
@@ -100,6 +106,10 @@ public:
...
@@ -100,6 +106,10 @@ public:
for
(
unsigned
block
(
0
);
block
<
fEconSim
->
econArch
().
fNumberOfBlocks
;
block
++
)
{
for
(
unsigned
block
(
0
);
block
<
fEconSim
->
econArch
().
fNumberOfBlocks
;
block
++
)
{
hEventBufferUsed
[
block
]
->
Fill
(
fEconSim
->
fEventBuffer
[
block
].
used
());
hEventBufferUsed
[
block
]
->
Fill
(
fEconSim
->
fEventBuffer
[
block
].
used
());
hEventBufferUsedHistory
[
block
]
->
Fill
(
bx
,
fEconSim
->
fEventBuffer
[
block
].
used
());
hEventBufferUsedHistory
[
block
]
->
Fill
(
bx
,
fEconSim
->
fEventBuffer
[
block
].
used
());
if
(
fEconSim
->
exceededBuffer
())
hEventBufferExceeded
[
block
]
->
Fill
(
fEconSim
->
fEventBuffer
[
block
].
used
());
hL1AcceptDifference
[
block
]
->
Fill
(
fEconSim
->
l1AcceptDifference
(
block
));
hL1AcceptDifferenceHistory
[
block
]
->
Fill
(
bx
,
fEconSim
->
l1AcceptDifference
(
block
));
}
}
}
}
...
@@ -124,6 +134,9 @@ private:
...
@@ -124,6 +134,9 @@ private:
TH1D
*
hBlockTotalWords
[
7
];
TH1D
*
hBlockTotalWords
[
7
];
TH1D
*
hEventBufferUsed
[
7
];
TH1D
*
hEventBufferUsed
[
7
];
TH1I
*
hEventBufferUsedHistory
[
7
];
TH1I
*
hEventBufferUsedHistory
[
7
];
TH1D
*
hEventBufferExceeded
[
7
];
TH1D
*
hL1AcceptDifference
[
7
];
TH1I
*
hL1AcceptDifferenceHistory
[
7
];
};
};
#endif
#endif
interface/Buffering/EconSim.hh
View file @
efc9b89c
...
@@ -52,56 +52,6 @@ public:
...
@@ -52,56 +52,6 @@ public:
fActiveInputBuffer
=
0
;
fActiveInputBuffer
=
0
;
fWriteElink
=
0
;
fWriteElink
=
0
;
/*
if(false) {
fNumberOfBlocks=1;
for(unsigned h(0);h<18;h++) {
fHgcrocNumber[0].push_back(h);
}
for(unsigned e(0);e<7;e++) {
fElinkNumber[0].push_back(e);
}
} else {
fNumberOfBlocks=7;
for(unsigned h(0);h<18;h++) {
fHgcrocNumber[h%7].push_back(h);
}
for(unsigned e(0);e<7;e++) {
fElinkNumber[e].push_back(e);
}
}
if(fPrintLevel>1) {
std::cout << "EconSim::ctor() "
<< "Number of blocks = " << fNumberOfBlocks << std::endl;
for(unsigned block(0);block<fNumberOfBlocks;block++) {
std::cout << " Block " << block << ", HGCROCs =";
for(unsigned h(0);h<fHgcrocNumber[block].size();h++) {
std::cout << " " << fHgcrocNumber[block][h];
}
std::cout << ", Elinks =";
for(unsigned e(0);e<fElinkNumber[block].size();e++) {
std::cout << " " << fElinkNumber[block][e];
}
std::cout << std::endl;
}
}
*/
for
(
unsigned
b
(
0
);
b
<
NumberOfParallelBuffers
;
b
++
)
{
for
(
unsigned
b
(
0
);
b
<
NumberOfParallelBuffers
;
b
++
)
{
for
(
unsigned
block
(
0
);
block
<
20
;
block
++
)
{
for
(
unsigned
block
(
0
);
block
<
20
;
block
++
)
{
fReadHgcrocNumber
[
b
][
block
]
=
EconFile
::
MaxNumberOfHgcrocs
;
fReadHgcrocNumber
[
b
][
block
]
=
EconFile
::
MaxNumberOfHgcrocs
;
...
@@ -114,12 +64,11 @@ public:
...
@@ -114,12 +64,11 @@ public:
<<
", word number "
<<
fReadWord
[
b
][
block
]
<<
std
::
endl
;
<<
", word number "
<<
fReadWord
[
b
][
block
]
<<
std
::
endl
;
}
}
}
}
for
(
unsigned
h
(
0
);
h
<
EconFile
::
MaxNumberOfHgcrocs
;
h
++
)
{
for
(
unsigned
h
(
0
);
h
<
EconFile
::
MaxNumberOfHgcrocs
;
h
++
)
{
fFirstBuffer
[
b
][
h
].
resize
(
channelsToWords
(
72
,
false
));
fFirstBuffer
[
b
][
h
].
resize
(
channelsToWords
(
72
,
false
));
}
}
}
}
//fHgcrocToElink[h]=(h%7);
}
}
void
boj
(
unsigned
s
,
unsigned
e
,
const
EconFile
&
f
,
const
EconArch
&
a
)
{
void
boj
(
unsigned
s
,
unsigned
e
,
const
EconFile
&
f
,
const
EconArch
&
a
)
{
...
@@ -128,104 +77,14 @@ public:
...
@@ -128,104 +77,14 @@ public:
fEconFile
=&
f
;
fEconFile
=&
f
;
fEconArch
=&
a
;
fEconArch
=&
a
;
fNewestL1Accept
=
0
;
for
(
unsigned
block
(
0
);
block
<
fEconArch
->
fNumberOfBlocks
;
block
++
)
{
for
(
unsigned
block
(
0
);
block
<
fEconArch
->
fNumberOfBlocks
;
block
++
)
{
fEventBuffer
[
block
].
reset
(
16
*
4096
);
fEventBuffer
[
block
].
reset
(
16
*
4096
);
fOldestL1Accept
[
block
]
=
0
;
}
}
}
#ifdef CRAP
void
initialise
(
unsigned
m
)
{
//assert(fEconFile->fNumberOfHgcrocs<=18);
setFormatBreakEven
();
fActiveInputBuffer
=
0
;
fWriteElink
=
0
;
// Random values for now
/*
for(unsigned h(0);h<fNumberOfHgcrocs;h++) {
fEconFile->fHgcrocMean[h]=0.5*h+1;
fHgcrocToElink[h]=(h%7);
}
*/
for
(
unsigned
h
(
0
);
h
<
18
;
h
++
)
{
fFirstBuffer
[
0
][
h
].
resize
(
channelsToWords
(
72
,
false
));
fFirstBuffer
[
1
][
h
].
resize
(
channelsToWords
(
72
,
false
));
fEconFile
->
fHgcrocMean
[
h
]
=
0.0
;
}
for
(
unsigned
h
(
0
);
h
<
fEconFile
->
fNumberOfHgcrocs
;
h
++
)
{
if
(
m
==
0
)
{
fEconFile
->
fHgcrocMean
[
h
]
=
10
;
if
(
h
<
14
)
fEconFile
->
fHgcrocMean
[
h
]
=
20
;
if
(
h
<
7
)
fEconFile
->
fHgcrocMean
[
h
]
=
35
;
if
(
h
==
6
)
fEconFile
->
fHgcrocMean
[
h
]
=
40
;
}
if
(
m
==
1
)
{
fEconFile
->
fHgcrocMean
[
h
]
=
5
;
if
(
h
<
14
)
fEconFile
->
fHgcrocMean
[
h
]
=
10
;
if
(
h
<
7
)
fEconFile
->
fHgcrocMean
[
h
]
=
15
;
}
if
(
m
==
2
)
{
fEconFile
->
fHgcrocMean
[
h
]
=
3
;
if
(
h
<
14
)
fEconFile
->
fHgcrocMean
[
h
]
=
7
;
if
(
h
<
7
)
fEconFile
->
fHgcrocMean
[
h
]
=
10
;
}
if
(
m
==
3
)
{
fEconFile
->
fHgcrocMean
[
h
]
=
2
;
if
(
h
<
14
)
fEconFile
->
fHgcrocMean
[
h
]
=
4
;
if
(
h
<
7
)
fEconFile
->
fHgcrocMean
[
h
]
=
5
;
}
if
(
m
>=
4
)
{
fEconFile
->
fHgcrocMean
[
h
]
=
1
;
if
(
h
<
14
)
fEconFile
->
fHgcrocMean
[
h
]
=
2
;
if
(
h
<
7
)
fEconFile
->
fHgcrocMean
[
h
]
=
3
;
}
fHgcrocToElink
[
h
]
=
(
h
%
7
);
}
std
::
cout
<<
std
::
endl
<<
"Econ::ctor() number of HGCROCs = "
<<
fEconFile
->
fNumberOfHgcrocs
<<
std
::
endl
;
double
elinkNum
[
7
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
};
double
elinkMean
[
7
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
};
for
(
unsigned
h
(
0
);
h
<
fEconFile
->
fNumberOfHgcrocs
;
h
++
)
{
std
::
cout
<<
" HGCROC "
<<
std
::
setw
(
2
)
<<
h
<<
", average number of channels = "
<<
fEconFile
->
fHgcrocMean
[
h
]
<<
", assigned to Elink = "
<<
fHgcrocToElink
[
h
]
<<
std
::
endl
;
elinkNum
[
fHgcrocToElink
[
h
]]
++
;
elinkMean
[
fHgcrocToElink
[
h
]]
+=
fEconFile
->
fHgcrocMean
[
h
];
}
/*
fTotalNum=0;
fTotalMean=0;
for(unsigned e(0);e<7;e++) {
fTotalNum+=elinkNum[e];
fTotalMean+=elinkMean[e];
std::cout << " Elink " << e << ", number of HGCROCs = " << elinkNum[e]
<< ", total average number of channels = "
<< elinkMean[e] << ", average number of 32-bit words = "
<< 3*elinkNum[e]+0.5*elinkMean[e]
<< std::endl;
}
fTotalWords=3*fTotalNum+0.5*fTotalMean;
std::cout << " ECON, total average number of channels = "
<< fTotalMean << ", average number of 32-bit words = "
<< fTotalWords
<< std::endl;
*/
}
}
#endif
void
slinkNumber
(
unsigned
s
)
{
void
slinkNumber
(
unsigned
s
)
{
fSlink
=
s
;
fSlink
=
s
;
}
}
...
@@ -247,13 +106,20 @@ public:
...
@@ -247,13 +106,20 @@ public:
return
fEconFile
->
fHgcrocMean
[
h
];
return
fEconFile
->
fHgcrocMean
[
h
];
}
}
void
processZs
(
uint
8
_t
bx
,
uint
8
_t
l1a
)
{
void
processZs
(
uint
64
_t
bx
,
uint
64
_t
l1a
)
{
if
(
fPrintLevel
>
3
)
{
if
(
fPrintLevel
>
3
)
{
std
::
cout
<<
"EconSim["
<<
fSlink
<<
"]["
<<
fEcon
<<
"]::processZs("
<<
unsigned
(
bx
)
std
::
cout
<<
"EconSim["
<<
fSlink
<<
"]["
<<
fEcon
<<
"]::processZs("
<<
bx
<<
","
<<
unsigned
(
l1a
)
<<
") "
<<
","
<<
l1a
<<
") "
<<
"Entered"
<<
std
::
endl
;
<<
"Entered"
<<
std
::
endl
;
}
}
fNewestL1Accept
=
l1a
;
if
(
fPrintLevel
>
5
)
{
std
::
cout
<<
"Incrementing newest L1Accept to "
<<
fNewestL1Accept
<<
std
::
endl
;
}
TRandom
&
random
(
Random
::
random
());
TRandom
&
random
(
Random
::
random
());
bool
binomialOrFlat
;
bool
binomialOrFlat
;
...
@@ -311,8 +177,8 @@ public:
...
@@ -311,8 +177,8 @@ public:
}
}
if
(
fPrintLevel
>
4
)
{
if
(
fPrintLevel
>
4
)
{
std
::
cout
<<
"EconSim["
<<
fSlink
<<
"]["
<<
fEcon
<<
"]::processZs("
<<
unsigned
(
bx
)
std
::
cout
<<
"EconSim["
<<
fSlink
<<
"]["
<<
fEcon
<<
"]::processZs("
<<
bx
<<
","
<<
unsigned
(
l1a
)
<<
") "
<<
","
<<
l1a
<<
") "
<<
"Hgcroc "
<<
h
<<
", number of channels = "
<<
"Hgcroc "
<<
h
<<
", number of channels = "
<<
fNumberOfChannels
[
h
]
<<
", words = "
<<
fNumberOfChannels
[
h
]
<<
", words = "
<<
fNumberOfWords
[
h
]
<<
std
::
endl
;
<<
fNumberOfWords
[
h
]
<<
std
::
endl
;
...
@@ -320,23 +186,23 @@ public:
...
@@ -320,23 +186,23 @@ public:
// Create HGCROC header
// Create HGCROC header
HgcrocBoe
hboe
(
fEcon
,
h
,
bx
,
l1a
,
fNumberOfWords
[
h
]);
HgcrocBoe
hboe
(
fEcon
,
h
,
bx
&
0xff
,
l1a
&
0xff
,
fNumberOfWords
[
h
]);
if
(
fPrintLevel
>
4
)
{
if
(
fPrintLevel
>
4
)
{
std
::
cout
<<
"EconSim["
<<
fSlink
<<
"]["
<<
fEcon
<<
"]::processZs("
<<
unsigned
(
bx
)
std
::
cout
<<
"EconSim["
<<
fSlink
<<
"]["
<<
fEcon
<<
"]::processZs("
<<
bx
<<
","
<<
unsigned
(
l1a
)
<<
") "
<<
","
<<
l1a
<<
") "
<<
"Hgcroc "
<<
h
<<
" BOE"
<<
std
::
endl
;
<<
"Hgcroc "
<<
h
<<
" BOE"
<<
std
::
endl
;
hboe
.
print
();
hboe
.
print
();
}
}
// Write data into selected buffer
// Write data into selected buffer
assert
(
(
fActiveInputBuffer
&
0xff
)
==
l1a
);
assert
(
fActiveInputBuffer
==
l1a
);
fFirstBuffer
[
fActiveInputBuffer
%
NumberOfParallelBuffers
][
h
].
resize
(
fNumberOfWords
[
h
]);
fFirstBuffer
[
fActiveInputBuffer
%
NumberOfParallelBuffers
][
h
].
resize
(
fNumberOfWords
[
h
]);
fFirstBuffer
[
fActiveInputBuffer
%
NumberOfParallelBuffers
][
h
][
0
]
=
hboe
.
word
();
fFirstBuffer
[
fActiveInputBuffer
%
NumberOfParallelBuffers
][
h
][
0
]
=
hboe
.
word
();
for
(
unsigned
i
(
1
);
i
<
fNumberOfWords
[
h
];
i
++
)
{
for
(
unsigned
i
(
1
);
i
<
fNumberOfWords
[
h
];
i
++
)
{
fFirstBuffer
[
fActiveInputBuffer
%
NumberOfParallelBuffers
][
h
][
i
]
=
(
l1a
<<
24
)
+
i
;
fFirstBuffer
[
fActiveInputBuffer
%
NumberOfParallelBuffers
][
h
][
i
]
=
(
(
l1a
&
0xff
)
<<
24
)
+
i
;
}
}
}
}
...
@@ -350,14 +216,15 @@ public:
...
@@ -350,14 +216,15 @@ public:
fActiveInputBuffer
++
;
fActiveInputBuffer
++
;
}
}
void
processBx
(
uint32_t
*
a
)
{
void
processBx
(
uint32_t
*
a
)
{
fExceededBuffer
=
false
;
// Switch for different dataflow methods
// Switch for different dataflow methods
if
(
fDataFlowMethod
==
FixedHgcrocMap
)
{
if
(
fDataFlowMethod
==
FixedHgcrocMap
)
{
#ifdef NOT_YET
// 4 words per BX for 7 eLinks
// 4 words per BX for 7 eLinks
unsigned
nWords
(
4
);
unsigned
nWords
(
4
);
...
@@ -367,6 +234,10 @@ public:
...
@@ -367,6 +234,10 @@ public:
<<
nWords
<<
" words per BX"
<<
std
::
endl
;
<<
nWords
<<
" words per BX"
<<
std
::
endl
;
}
}
assert
(
false
);
#ifdef NOT_YET
for
(
unsigned
b
(
0
);
b
<
NumberOfParallelBuffers
;
b
++
)
{
for
(
unsigned
b
(
0
);
b
<
NumberOfParallelBuffers
;
b
++
)
{
if
(
b
!=
(
fActiveInputBuffer
%
NumberOfParallelBuffers
))
{
if
(
b
!=
(
fActiveInputBuffer
%
NumberOfParallelBuffers
))
{
...
@@ -498,12 +369,27 @@ public:
...
@@ -498,12 +369,27 @@ public:
}
}
}
}
//uint64_t d;
if
(
fEventBuffer
[
block
].
used
()
>=
255
)
fExceededBuffer
=
true
;
// Read out for elinks
uint32_t
d
;
uint32_t
d
;
for
(
unsigned
e
(
0
);
e
<
fEconArch
->
fElinkNumber
[
block
].
size
();
e
++
)
{
for
(
unsigned
e
(
0
);
e
<
fEconArch
->
fElinkNumber
[
block
].
size
();
e
++
)
{
//if(fEventBuffer[block].readAndIncrementPtr(d)) a[fEconArch->fElinkNumber[block][e]]=(d&0xffffffff);
//if(fEventBuffer[block].readAndIncrementPtr(d)) a[fEconArch->fElinkNumber[block][e]]=(d&0xffffffff);
if
(
fEventBuffer
[
block
].
readAndIncrementPtr
(
d
))
a
[
fEconArch
->
fElinkNumber
[
block
][
e
]]
=
d
;
if
(
fEventBuffer
[
block
].
readAndIncrementPtr
(
d
))
{
else
a
[
fEconArch
->
fElinkNumber
[
block
][
e
]]
=
0
;
a
[
fEconArch
->
fElinkNumber
[
block
][
e
]]
=
d
;
HgcrocBoe
tempBoe
(
d
);
if
(
tempBoe
.
l1a
()
==
((
fOldestL1Accept
[
block
]
+
1
)
&
0xff
))
{
fOldestL1Accept
[
block
]
++
;
if
(
fPrintLevel
>
5
)
{
std
::
cout
<<
"Incrementing block "
<<
block
<<
" oldest L1Accept to "
<<
fOldestL1Accept
[
block
]
<<
std
::
endl
;
}
}
}
else
a
[
fEconArch
->
fElinkNumber
[
block
][
e
]]
=
0
;
}
}
}
}
...
@@ -521,6 +407,22 @@ public:
...
@@ -521,6 +407,22 @@ public:
}
}
}
}
bool
exceededBuffer
()
const
{
if
(
fPrintLevel
>
5
)
{
if
(
fExceededBuffer
)
{
std
::
cout
<<
"EconSim["
<<
fSlink
<<
"]["
<<
fEcon
<<
"]::exceededBuffer() "
<<
"Buffer exceeded"
<<
std
::
endl
;
}
}
return
fExceededBuffer
;
}
unsigned
l1AcceptDifference
(
unsigned
b
)
const
{
assert
(
b
<
fEconArch
->
fNumberOfBlocks
);
return
fNewestL1Accept
-
fOldestL1Accept
[
b
];
}