26 using std::istringstream;
35 const string myname =
"test_PdspOnlineChannel: ";
37 cout << myname <<
"NDEBUG must be off." <<
endl;
40 string line =
"-----------------------------";
42 cout << myname << line <<
endl;
43 string fclfile =
"test_PdspOnlineChannel.fcl";
45 cout << myname <<
"Using existing top-level FCL." <<
endl;
47 cout << myname <<
"Creating top-level FCL." <<
endl;
48 ofstream
fout(fclfile.c_str());
49 fout <<
"#include \"PdspChannelMapService.fcl\"" <<
endl;
50 fout <<
"services: { PdspChannelMapService: @local::pdspchannelmap }" <<
endl;
53 fout <<
" tool_type: PdspOnlineChannel" <<
endl;
55 fout <<
" Ordering: \"FEMB\"" <<
endl;
58 fout <<
" tool_type: ProtoduneOnlineChannel" <<
endl;
65 cout << myname << line <<
endl;
66 cout << myname <<
"Fetching tool manager." <<
endl;
68 assert ( ptm !=
nullptr );
73 std::ifstream
config{fclfile};
76 cout << myname << line <<
endl;
77 cout << myname <<
"Fetching tool." <<
endl;
79 assert( cma !=
nullptr );
83 cout << myname << line <<
endl;
84 cout << myname <<
"Check some good values." <<
endl;
85 for (
Index ichaOff : { 0, 102, 1234, 2560, 8480, 15359 } ) {
86 Index ichaOn = cma->get(ichaOff);
87 cout << myname <<
setw(5) << ichaOff <<
" --> " <<
setw(5) << ichaOn <<
endl;
88 assert( ichaOff != badIndex );
91 cout << myname << line <<
endl;
92 cout << myname <<
"Check some bad values." <<
endl;
93 for (
Index ichaOff : { -1, 15360, 20000 } ) {
94 Index ichaOn = cma->get(ichaOff);
95 cout << myname << ichaOff <<
" --> " << ichaOn <<
endl;
96 assert( ichaOn == badIndex );
99 cout << myname << line <<
endl;
100 cout << myname <<
"Check each online index appears exactly once." <<
endl;
101 const Index ncha = 15360;
104 for (
Index ichaOff=0; ichaOff<ncha; ++ichaOff ) {
105 Index ichaOn = cma->get(ichaOff);
106 if ( nshow*(ichaOff/nshow) == ichaOff || ichaOn >= ncha ) {
108 Index itps = irem/2560;
110 Index ifmb = irem/128 + 1;
112 Index iasc = irem/16 + 1;
113 Index ifch = irem%16;
114 cout << myname <<
" " <<
setw(4) << ichaOff <<
" --> " <<
setw(4) << ichaOn
115 <<
" (" << itps <<
", " <<
setw(2) << ifmb <<
", " 116 << iasc <<
", " <<
setw(2) << ifch <<
")" <<
endl;
118 assert( ichaOn < ncha );
119 if ( offlineChannel[ichaOn] != badIndex ) {
120 cout << myname <<
"ERROR: Online channel " << ichaOn
121 <<
" is mapped to two offline channels:" <<
endl;
122 cout <<
" " << offlineChannel[ichaOn] <<
endl;
123 cout <<
" " << ichaOff <<
endl;
126 assert( onlineCounts[ichaOn] == 0 );
127 onlineCounts[ichaOn] += 1;
128 offlineChannel[ichaOn] = ichaOff;
130 for (
Index ichaOn=0; ichaOn<ncha; ++ichaOn ) {
131 assert( onlineCounts[ichaOn] == 1 );
132 assert( offlineChannel[ichaOn] != badIndex );
135 cout << myname << line <<
endl;
136 cout << myname <<
"Compare with ProtoduneChannelmap." <<
endl;
138 assert( ref !=
nullptr );
139 bool skipDiv1 =
false;
140 for (
Index idiv : {2560, 128, 1} ) {
141 if ( skipDiv1 && idiv == 1 ) {
142 cout << myname <<
"WARNING: Skipping div 1 test" <<
endl;
145 cout << myname <<
"...checking div " << idiv <<
endl;
146 for (
Index ichaOff=0; ichaOff<ncha; ++ichaOff ) {
147 Index ichaOnl = cma->get(ichaOff);
148 Index ichaRef = ref->get(ichaOff);
149 Index ichaOnlDiv = ichaOnl/idiv;
150 Index ichaRefDiv = ichaRef/idiv;
151 if ( ichaOnlDiv != ichaRefDiv ) {
152 cout << myname <<
"Maps disagree:" <<
endl;
153 cout << myname <<
" Offline: " << ichaOff <<
endl;
154 cout << myname <<
" Online: " << ichaOnl <<
" (" << ichaOnlDiv <<
")" <<
endl;
155 cout << myname <<
" Ref: " << ichaRef <<
" (" << ichaRefDiv <<
")" <<
endl;
161 cout << myname << line <<
endl;
162 cout << myname <<
"Done." <<
endl;
169 bool useExistingFcl =
false;
172 string sarg(argv[1]);
173 if ( sarg ==
"-h" ) {
174 cout <<
"Usage: " << argv[0] <<
" [keepFCL] [NSHOW]" <<
endl;
175 cout <<
" keepFCL [false]: If true, existing FCL file is used." <<
endl;
176 cout <<
" NSHOW [64]: Every nshow'th channels will be displayed in log." <<
endl;
179 useExistingFcl = sarg ==
"true" || sarg ==
"1";
182 string sarg(argv[2]);
183 nshow = std::stoi(sarg);
static void load_services(std::string const &config)
int main(int argc, char *argv[])
Q_EXPORT QTSManip setw(int w)
int test_PdspOnlineChannel(bool useExistingFcl=false, Index nshow=64)
void line(double t, double *p, double &x, double &y, double &z)
QTextStream & endl(QTextStream &s)