I believe a bug was introduced to the compress record between versions 7.0.7 and 7.0.8. The details are outlined below, but it seems like the "N" entry of the compress record is not being used in the latest compress calculations.
Attached is a patch for review that fixes the problem.
Matt Waddel
ORNL
Details: We have a record which reads 12500 entries from a ADC input. The 12500 gets reduced to 125 entries
by averaging 100 elements at a time:
record( waveform, "$(S)_Mag:PS_IKick_$(PsId):CurPsWf" ) {
field( DESC, "PS IKick Gen $(PsId) Waveform")
field( SCAN, "2 second" )
field( NELM, "12500" )
field( FTVL, "LONG" )
field( DTYP, "InjWfGen" )
field( INP, "@$(InpDvc) f=bar1Wf c=$(Chan)" )
}
record( compress, "$(S)_Mag:PS_IKick_$(PsId):SmallCurPsWf" ) {
field( DESC, "Decimated $(PsId) Waveform")
field( INP, "$(S)_Mag:PS_IKick_$(PsId):CurPsWf CP" )
field( ALG, "N to 1 Average" )
field( N, "100" )
field( NSAM, "125" )
}
Here is a small sample of the expanded entries:
$ caget Test_Dev_Mag:PS_IKick_H01:CurPsWf
Test_Dev_Mag:PS_IKick_H01:CurPsWf 12500 1228 1229 1230 1230 1231 1231 1232 1233 1233 1234 1234 1235 1236 1236
1237 1237 1238 1239 1239 1240 1240 1241 1242 1242 1243 1243 1244 1245 1245 1246 1246 1247 1248 1248 1249 1249 1250 1251 1251 1252 1252 1253 1254 1254 1255 1255 1256 1257 1257 1258 1258 1259 1260 1260 1261 1261 1262 1263 1263 1264 1264 1265 1266 1266 1267 1267
1268 1269 1269 1270 1270 1271 1272 1272 1273 1273 1274 1275 1275 1276 1276 1277 1278 1278 1279 1279 1280 1281 1281 1282 1282 1283 1284 1284 1285 1285 1286 1287 1287 1288 1288 1289 1290 1290 1291 1291 1292 1293 1293 1294 1294 1295 1296 1296 1297 1297 1298 1299
1299 1300 1300 1301 1302 1302 1303 1303 1304 1305 1305 1306 1306 1307 1308 1308 1309 1309 1310 1311
...
In version 7.0.7 the SmallCurPsWf results PV looked like this:
$ caget Test_Dev_Mag:PS_IKick_H01:SmallCurPsWf
Test_Dev_Mag:PS_IKick_H01:SmallCurPsWf 125 1258.1 1318.1 1378.1 1438.1 1498.1 1558.1 1618.1 1678.1 1738.1 1798.1 1858.1 1918.1 1978.1 2038.1 2098.1 2158.1 2218.1 2278.1 2338.1 2398.1 2458.1 2518.1 2578.1 2638.1 2698.1 2758.1 2818.1 2878.1 2938.1 2998.1 3058.1
3118.1 3178.1 3238.1 3298.1 3358.1 3418.1 3478.1 3538.1 3598.1 3658.1 3718.1 3778.1 3838.1 3898.1 3958.1 4018.1 4078.1 4138.1 4198.1 4258.1 4318.1 4378.1 4438.1 4498.1 4558.1 4618.1 4678.1 4738.1 4798.1 4858.1 4918.1 4978.1 5038.1 5098.1 5158.1 5218.1 5278.1
5338.1 5398.1 5458.1 5518.1 5578.1 5638.1 5698.1 5758.1 5818.1 5878.1 5938.1 5998.1 6058.1 6118.1 6178.1 6238.1 6298.1 6358.1 6418.1 6478.1 6538.1 6598.1 6658.1 6718.1 6778.1 6838.1 6898.1 6958.1 7018.1 7078.1 7138.1 7198.1 7258.1 7318.1 7378.1 7438.1 7498.1
7558.1 7618.1 7678.1 7738.1 7798.1 7858.1 7918.1 7978.1 8038.1 8098.1 8158.1 8218.1 8278.1 8338.1 8398.1 8458.1 8518.1 8578.1 8638.1 8698.1
However, in version 7.0.8 the output is the same value and each
one of these entries was made every 2 seconds over about a 2 minute time period.
$ caget Test_Dev_Mag:PS_IKick_H01:SmallCurPsWf
Test_Dev_Mag:PS_IKick_H01:SmallCurPsWf 125 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1
4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1
4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1
4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1 4978.1
4978.1 4978.1 4978.1 4978.1
In the algorithm "n" became the total number of elements no matter what the N in "field( N, "100" )" was set
to.
- n = no_elements;
+ n = prec->n;
Let me know if you have any questions.