Skip to content

Commit d9c993e

Browse files
author
Karl Smith
committed
Channged forChannel and forModule to better handle ranges.
The ranges specifed with a colon are now passed to dedicated functions. This resolves a sorting issue and reduces code bloat.
1 parent 55cde64 commit d9c993e

2 files changed

Lines changed: 42 additions & 64 deletions

File tree

Acquisition/Interface/include/PixieSupport.h

Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -28,60 +28,58 @@ class PixieFunction : public std::unary_function<bool, struct PixieFunctionParms
2828
};
2929

3030
template<typename T>
31-
bool forChannel(PixieInterface *pif, int mod, int ch, PixieFunction<T> &f, T par){
31+
bool forChannel(PixieInterface *pif, int modStart, int modStop, int chStart, int chStop, PixieFunction<T> &f, T par){
3232
PixieFunctionParms<T> parms(pif, par);
3333

3434
bool hadError = false;
3535

36-
if (mod < 0) {
37-
for (parms.mod = 0; parms.mod < pif->GetNumberCards(); parms.mod++) {
38-
if (ch < 0) {
39-
for (parms.ch = 0; parms.ch < pif->GetNumberChannels(); parms.ch++) {
40-
if (!f(parms)){ hadError = true; }
41-
}
42-
}
43-
else {
44-
parms.ch = ch;
45-
if (!f(parms))
46-
hadError = true;
47-
}
36+
if (modStart < 0) {
37+
modStart = 0;
38+
modStop = pif->GetNumberCards() - 1;
39+
}
40+
if (chStart < 0) {
41+
chStart = 0;
42+
chStop = pif->GetNumberChannels() - 1;
43+
}
44+
45+
for (parms.mod = modStart; parms.mod <= modStop; parms.mod++) {
46+
for (parms.ch = chStart; parms.ch <= chStop; parms.ch++) {
47+
if (!f(parms)){ hadError = true; }
4848
}
4949
}
50-
else {
51-
parms.mod = mod;
52-
if (ch < 0) {
53-
for (parms.ch = 0; parms.ch < pif->GetNumberChannels(); parms.ch++) {
54-
if (!f(parms)){ hadError = true; }
55-
}
56-
}
57-
else {
58-
parms.ch = ch;
59-
hadError = !f(parms);
60-
}
61-
}
6250

6351
return !hadError;
6452
}
6553

6654
template<typename T>
67-
bool forModule(PixieInterface *pif, int mod, PixieFunction<T> &f, T par)
55+
bool forChannel(PixieInterface *pif, int mod, int ch, PixieFunction<T> &f, T par){
56+
return forChannel(pif, mod, mod, ch, ch, f, par);
57+
}
58+
59+
template<typename T>
60+
bool forModule(PixieInterface *pif, int modStart, int modStop, PixieFunction<T> &f, T par)
6861
{
6962
PixieFunctionParms<T> parms(pif, par);
7063
bool hadError = false;
7164

72-
if (mod < 0) {
73-
for (parms.mod = 0; parms.mod < pif->GetNumberCards(); parms.mod++) {
74-
if (!f(parms)){ hadError = true; }
75-
}
76-
}
77-
else {
78-
parms.mod = mod;
79-
hadError = !f(parms);
65+
if (modStart < 0) {
66+
modStart = 0;
67+
modStop = pif->GetNumberCards() -1;
68+
}
69+
for (parms.mod = modStart; parms.mod <= modStop; parms.mod++) {
70+
if (!f(parms)){ hadError = true; }
8071
}
8172

8273
return !hadError;
8374
}
8475

76+
template<typename T>
77+
bool forModule(PixieInterface *pif, int mod, PixieFunction<T> &f, T par)
78+
{
79+
return forModule(pif, mod, mod, f, par);
80+
}
81+
82+
8583
std::string PadStr(const std::string &input_, int width_);
8684

8785
template<typename T>

Acquisition/Poll/source/poll2_core.cpp

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,12 +1093,8 @@ void Poll::CommandControl(){
10931093

10941094
ParameterChannelWriter writer;
10951095
bool error = false;
1096-
for (int mod = modStart; mod <= modStop; mod++) {
1097-
for (int ch = chStart; ch <= chStop; ch++) {
1098-
if(forChannel(pif, mod, ch, writer, make_pair(arguments.at(2), value))){
1099-
error = true;
1100-
}
1101-
}
1096+
if(forChannel(pif, modStart, modStop, chStart, chStop, writer, make_pair(arguments.at(2), value))){
1097+
error = true;
11021098
}
11031099
if (!error) pif->SaveDSPParameters();
11041100
}
@@ -1135,13 +1131,9 @@ void Poll::CommandControl(){
11351131
}
11361132

11371133
ParameterModuleWriter writer;
1138-
bool error = false;
1139-
for (int mod = modStart; mod <= modStop; mod++) {
1140-
if(!forModule(pif, mod, writer, make_pair(arguments.at(1), value))){
1141-
error = true;
1142-
}
1134+
if(!forModule(pif, modStart, modStop, writer, make_pair(arguments.at(1), value))){
1135+
pif->SaveDSPParameters();
11431136
}
1144-
if (!error) pif->SaveDSPParameters();
11451137
}
11461138
else{
11471139
std::cout << sys_message_head << "Invalid number of parameters to pmwrite\n";
@@ -1170,11 +1162,7 @@ void Poll::CommandControl(){
11701162
}
11711163

11721164
ParameterChannelReader reader;
1173-
for (int mod = modStart; mod <= modStop; mod++) {
1174-
for (int ch = chStart; ch <= chStop; ch++) {
1175-
forChannel(pif, mod, ch, reader, arguments.at(2));
1176-
}
1177-
}
1165+
forChannel(pif, modStart, modStop, chStart, chStop, reader, arguments.at(2));
11781166
}
11791167
else{
11801168
std::cout << sys_message_head << "Invalid number of parameters to pread\n";
@@ -1191,9 +1179,7 @@ void Poll::CommandControl(){
11911179
}
11921180

11931181
ParameterModuleReader reader;
1194-
for (int mod = modStart; mod <= modStop; mod++) {
1195-
forModule(pif, mod, reader, arguments.at(1));
1196-
}
1182+
forModule(pif, modStart, modStop, reader, arguments.at(1));
11971183
}
11981184
else{
11991185
std::cout << sys_message_head << "Invalid number of parameters to pmread\n";
@@ -1215,11 +1201,9 @@ void Poll::CommandControl(){
12151201
}
12161202

12171203
OffsetAdjuster adjuster;
1218-
bool error = false;
1219-
for (int mod = modStart; mod <= modStop; mod++) {
1220-
if(!forModule(pif, mod, adjuster, 0)){ error = true; }
1204+
if(!forModule(pif, modStart, modStop, adjuster, 0)) {
1205+
pif->SaveDSPParameters();
12211206
}
1222-
if (!error) pif->SaveDSPParameters();
12231207
}
12241208
else{
12251209
std::cout << sys_message_head << "Invalid number of parameters to adjust_offsets\n";
@@ -1269,12 +1253,8 @@ void Poll::CommandControl(){
12691253

12701254
std::string dum_str = "CHANNEL_CSRA";
12711255
bool error = false;
1272-
for (int mod = modStart; mod <= modStop; mod++) {
1273-
for (int ch = chStart; ch <= chStop; ch++) {
1274-
if(!forChannel(pif, mod, ch, flipper, dum_str)){
1275-
error = true;
1276-
}
1277-
}
1256+
if(!forChannel(pif, modStart, modStop, chStart, chStop, flipper, dum_str)){
1257+
error = true;
12781258
}
12791259
if (!error) pif->SaveDSPParameters();
12801260
}

0 commit comments

Comments
 (0)