forked from akornmay/originalDataFlow
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModule.cpp
More file actions
94 lines (77 loc) · 2.3 KB
/
Module.cpp
File metadata and controls
94 lines (77 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "Module.h"
#include "TBM.h"
#include "Statistics.h"
#include "CommonDefs.h"
#include "TH1I.h"
#include "TH2I.h"
using namespace std;
long ro_time;
Module::Module()
{
ROCs.resize(CHIPS_PER_MODULE);
TBMs.resize(LINKS_PER_MODULE);
}
void Module::Init(int id) {
Id=id;
bx_counter=0;
int rocId=0;
for(roc_iter iRoc=ROCs.begin(); iRoc!=ROCs.end(); iRoc++){
iRoc->Init(rocId++, &bx_counter);
}
tbm_iter iTbm=TBMs.begin();
iTbm->Init(ROCs.begin(), ROCs.begin()+CHIPS_PER_LINK[0], 0, &bx_counter);
if(CHIPS_PER_LINK[1]>0) {
iTbm++;
iTbm->Init(ROCs.begin()+CHIPS_PER_LINK[0], ROCs.end(), 1, &bx_counter);
}
}
Module::~Module()
{
ROCs.clear();
TBMs.clear();
}
void Module::AddHits(Event &event) // called once per event
{
if(event.trigger){ // this event will be triggered
for(tbm_iter iTBM=TBMs.begin(); iTBM!=TBMs.end(); iTBM++) iTBM->AddTS(event.clock);
for (roc_iter iRoc=ROCs.begin(); iRoc!=ROCs.end(); iRoc++) iRoc->Trigger(event.clock);
}
hit_iterator hit;
for(hit=event.hits[Id].begin(); hit!=event.hits[Id].end(); hit++){
ROCs[hit->roc].AddHit(*hit);
}
}
void Module::Clock()
{
bx_counter++;
for(tbm_iter iTBM=TBMs.begin(); iTBM!=TBMs.end(); iTBM++) iTBM->Clock();
for(roc_iter iRoc=ROCs.begin(); iRoc!=ROCs.end(); iRoc++) iRoc->Clock();
}
void Module::StatOut()
{
char txt[50];
statistics stat[CHIPS_PER_MODULE];
statistics mod_stat;
mod_stat.Reset();
int i=0;
for(int i=0; i<CHIPS_PER_MODULE; i++) {
cout << endl<<"**********************************************************"<<endl<<endl;
ROCs[i].StatOut(stat[i]);
sprintf(txt, "Roc number %d",i);
stat[i].PrintStat(txt);
mod_stat+=stat[i];
}
cout << endl<<endl<<"**********************************************************"<<endl<<endl;
sprintf(txt, "Module %d",Id);
mod_stat.PrintStat(txt);
i=1;
cout <<endl;
for(tbm_iter iTBM=TBMs.begin(); iTBM!=TBMs.end(); iTBM++){
cout << "Link number "<<i++<<":"<<endl;
cout << " Pixel readout rate = "
<<(double)iTBM->ro_pix/((double) MAX_EVENT*25e-3)<<" MPix/s"<<endl;
cout << " Occupancy = "
<<((double)iTBM->ro_clocks/(double) MAX_EVENT)*100<<" %"<<endl;
}
cout << endl;
}