From 9924839bd10bf0a50c5f5d19239dc6965c27edbf Mon Sep 17 00:00:00 2001 From: Ming Fang <mingf2@illinois.edu> Date: Mon, 25 Mar 2024 12:54:26 -0500 Subject: [PATCH] fix bug in rewind(): read first two bytes after rewinding v2 files --- pulseParser.py | 3 ++ pulseParserTest.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/pulseParser.py b/pulseParser.py index cbed3fa..05a9f13 100644 --- a/pulseParser.py +++ b/pulseParser.py @@ -140,6 +140,9 @@ class WaveBinFile: """Go to the begnning of the file. """ self._fileObject.seek(0) + if self._version == 2: + # skip first 2 bytes for version 2 + self._fileObject.read(2) self._numberOfPulseUnread = self._numberOfPulses @property diff --git a/pulseParserTest.py b/pulseParserTest.py index 5967eb8..0f666ca 100644 --- a/pulseParserTest.py +++ b/pulseParserTest.py @@ -251,6 +251,76 @@ class TestBinParserV2(unittest.TestCase): self.assertEqual(newPulse['Samples'][-1], lastSample) self.assertEqual(self.binFile.numberOfPulsesUnread, 0) + + def testRewind(self): + skipNumber = self.binFile.totalNumberOfPulses + self.binFile.skipNextNPulses(skipNumber) + self.binFile.rewind() + self.assertEqual(self.binFile.numberOfPulsesUnread, self.binFile.totalNumberOfPulses) + + newPulse = self.binFile.readNextPulse() + self.assertEqual(newPulse['Board'], 0) + self.assertEqual(newPulse['Channel'], 4) + self.assertEqual(newPulse['Time Stamp'], 1721147) + self.assertEqual(newPulse['Energy'], 108) + self.assertEqual(newPulse['Energy Short'], 141) + self.assertEqual(newPulse['Flags'], 16448) + self.assertEqual(newPulse['Waveform Code'], 1) + self.assertEqual(newPulse['Number of Samples'], 496) + + samples = [ + 2932, 2947, 2930, 2904, 2908, 2937, 2941, 2904, 2902, 2925, 2928, + 2917, 2901, 2910, 2928, 2925, 2903, 2893, 2924, 2936, 2916, 2877, + 2877, 2918, 2974, 3134, 3110, 3118, 3158, 3150, 3101, 3074, 3094, + 3107, 3096, 3063, 3059, 3074, 3084, 3079, 3030, 3027, 3055, 3073, + 3009, 2996, 3022, 3039, 3036, 2992, 2987, 3017, 3024, 3003, 2971, + 2979, 3023, 3011, 2978, 2945, 2975, 3019, 3001, 2958, 2947, 2984, + 3008, 2985, 2946, 2946, 2983, 2992, 2950, 2932, 2942, 2970, 2970, + 2936, 2918, 2943, 2964, 2955, 2929, 2927, 2963, 2969, 2940, 2921, + 2932, 2963, 2944, 2920, 2900, 2941, 2961, 2937, 2901, 2916, 2950, + 2955, 2908, 2903, 2937, 2958, 2950, 2920, 2910, 2942, 2957, 2956, + 2927, 2905, 2945, 2961, 2929, 2895, 2923, 2956, 2955, 2920, 2913, + 2940, 2966, 2941, 2918, 2926, 2939, 2957, 2945, 2922, 3208, 3425, + 3407, 3535, 3580, 3577, 3580, 3544, 3483, 3468, 3491, 3474, 3419, + 3381, 3383, 3404, 3390, 3331, 3298, 3313, 3321, 3308, 3248, 3244, + 3258, 3263, 3244, 3181, 3192, 3215, 3204, 3170, 3136, 3154, 3174, + 3148, 3111, 3114, 3140, 3127, 3101, 3090, 3085, 3099, 3106, 3074, + 3059, 3069, 3098, 3080, 3039, 3034, 3059, 3070, 3047, 3006, 3019, + 3053, 3056, 3024, 3005, 3022, 3043, 3010, 2984, 2998, 3018, 3027, + 3002, 2992, 2990, 3016, 3006, 2984, 2972, 2978, 3018, 2992, 2960, + 2946, 2983, 3001, 2962, 2948, 2960, 3000, 2975, 2953, 2964, 2969, + 2983, 2968, 2933, 2929, 2952, 2973, 2946, 2922, 2943, 2971, 2974, + 2940, 2919, 2953, 2975, 2959, 2933, 2923, 2944, 2965, 2952, 2925, + 2929, 2955, 2966, 2938, 2917, 2943, 2963, 2950, 2924, 2921, 2962, + 2945, 2918, 2904, 2938, 2964, 2946, 2913, 2895, 2916, 2965, 2938, + 2905, 2901, 2941, 2950, 2913, 2893, 2906, 2928, 2928, 2908, 2894, + 2912, 2921, 2937, 2907, 2895, 2915, 2933, 2897, 2889, 2915, 2930, + 2915, 2879, 2897, 2917, 2925, 2908, 2884, 2882, 2924, 2932, 2898, + 2874, 2900, 2942, 2919, 2876, 2876, 2911, 2930, 2917, 2877, 2878, + 2923, 2930, 2913, 2876, 2876, 2918, 2928, 2914, 2870, 2893, 2919, + 2925, 2884, 2880, 2898, 2914, 2905, 2880, 2889, 2920, 2914, 2881, + 2881, 2890, 2908, 2906, 2878, 2877, 2902, 2911, 2881, 2876, 2890, + 2909, 2903, 2870, 2864, 2891, 2920, 2896, 2870, 2870, 2897, 2920, + 2899, 2869, 2872, 2914, 2916, 2879, 2864, 2885, 2909, 2899, 2872, + 2874, 2900, 2907, 2887, 2876, 2881, 2904, 2922, 2873, 2867, 2899, + 2924, 2898, 2859, 2873, 2908, 2923, 2884, 2867, 2877, 2914, 2920, + 2887, 2874, 2898, 2918, 2907, 2865, 2864, 2897, 2912, 2897, 2872, + 2877, 2922, 2922, 2890, 2867, 2895, 2929, 2905, 2883, 2880, 2908, + 2923, 2904, 2881, 2884, 2922, 2922, 2898, 2879, 2904, 2932, 2920, + 2882, 2878, 2916, 2936, 2904, 2875, 2888, 2930, 2926, 2895, 2877, + 2899, 2930, 2925, 2889, 2887, 2918, 2943, 2929, 2880, 2893, 2942, + 2940, 2907, 2887, 2916, 2939, 2919, 2906, 2914, 2926, 2935, 2915, + 2879, 2905, 2925, 2923, 2899, 2883, 2906, 2950, 2923, 2886, 2875, + 2922, 2946, 2914, 2880, 2895, 2945, 2932, 2900, 2872, 2900, 2946, + 2935, 2901, 2876, 2911, 2934, 2923, 2885, 2882, 2917, 2931, 2920, + 2895, 2908, 2934, 2929, 2902, 2890, 2911, 2933, 2908, 2901, 2900, + 2936 + ] + for i in range(len(samples)): + self.assertEqual(newPulse['Samples'][i], samples[i]) + + self.assertEqual(self.binFile.numberOfPulsesUnread, + self.binFile.totalNumberOfPulses - 1) if __name__ == '__main__': -- GitLab