Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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

import unittest 

from pfs.datamodel.drp import PfsObject 

from pfs.datamodel.drp import PfsReference 

from pfs.datamodel.drp import PfsMerged 

from pfs.datamodel.drp import PfsSingle 

from pfs.datamodel.drp import PfsArm 

import re 

 

 

class FileFormatTestCase(unittest.TestCase): 

""" Checks the format of example datamodel files are 

consistent with that specified in the corresponding 

datamodel classes. 

""" 

 

def extractAttributes(self, cls, fileName): 

matches = re.search(cls.filenameRegex, fileName) 

if not matches: 

self.fail( 

"Unable to parse filename: {} using regex {}" 

.format(fileName, cls.filenameRegex)) 

 

# Cannot use algorithm in PfsSpectra._parseFilename(), 

# specifically cls.filenameKeys, due to ambiguity in parsing 

# integers in hex format (eg objId). Need to parse cls.filenameFormat 

ff = re.search(r'^[a-zA-Z]+(.*)\.fits', cls.filenameFormat)[1] 

cmps = re.findall(r'-{0,1}(0x){0,1}\%\((\w+)\)\d*(\w)', ff) 

fmts = [(kk, tt) for ox, kk, tt in cmps] 

 

d = {} 

for (kk, tt), vv in zip(fmts, matches.groups()): 

if tt == 'd': 

ii = int(vv) 

elif tt == 'x': 

ii = int(vv, 16) 

elif tt == 's': 

ii = vv 

d[kk] = ii 

return d 

 

@unittest.expectedFailure 

def testBadHashInFileName(self): 

self.extractAttributes( 

PfsObject, 

'pfsObject-07621-2,2-001-02468ace1234abcd-003-1234abcddeadbeef.fits') 

 

def testPfsArm(self): 

d = self.extractAttributes(PfsArm, 'pfsArm-123450-b1.fits') 

self.assertEqual(d['visit'], 123450) 

self.assertEqual(d['arm'], 'b') 

self.assertEqual(d['spectrograph'], 1) 

 

def testPfsMerged(self): 

d = self.extractAttributes(PfsMerged, 'pfsMerged-012345.fits') 

self.assertEqual(d['visit'], 12345) 

 

def testPfsReference(self): 

d = self.extractAttributes( 

PfsReference, 'pfsReference-00100-07621-2,2-02468ace1234abcd.fits') 

self.assertEqual(d['tract'], 7621) 

self.assertEqual(d['patch'], '2,2') 

self.assertEqual(d['catId'], 100) 

self.assertEqual(d['objId'], 0x02468ace1234abcd) 

 

def testPfsSingle(self): 

d = self.extractAttributes( 

PfsSingle, 'pfsSingle-12300-76210-2,2-02468ace1234abcd-123450.fits') 

self.assertEqual(d['tract'], 76210) 

self.assertEqual(d['patch'], '2,2') 

self.assertEqual(d['catId'], 12300) 

self.assertEqual(d['objId'], 0x02468ace1234abcd) 

self.assertEqual(d['visit'], 123450) 

 

def testPfsObject(self): 

d = self.extractAttributes( 

PfsObject, 

'pfsObject-12345-07621-2,2-02468ace1234abcd-003-0x1234abcddeadbeef.fits') 

self.assertEqual(d['tract'], 7621) 

self.assertEqual(d['patch'], '2,2') 

self.assertEqual(d['objId'], 0x02468ace1234abcd) 

self.assertEqual(d['catId'], 12345) 

self.assertEqual(d['nVisit'], 3) 

self.assertEqual(d['pfsVisitHash'], 0x1234abcddeadbeef)