Trees | Indices | Help |
|
---|
|
1 2 """ 3 This is the mar header interpreter from Fabian by HOS and EK. 4 JPW replaced it with a parser based approach because: 5 this might be hard to maintain, in the even of a single incorrect number somewhere 6 theoretically all header items are picked up by the parser, automatically 7 the pylint score for this was rather low 8 """ 9 1013613 """ 14 Read in the header from an already opened file 15 """ 16 self.header = {} 17 clip = '\x00' 18 l = infile.seek(1024) 19 l = infile.read(3072) 20 # Header information in MarCCD and MarMosaic images are obtained 21 # from http://www.mar-usa.com/support/data.htm 22 #/* File/header format parameters (256 bytes) */ 23 self.header['header_type'] = \ 24 N.fromstring(l[0:4], N.uint32)[0] 25 # UINT32 ; /* flag for header type (can be used as magic number) */ 26 self.header['header_name'] = l[4:4+l[4:20].find(clip)] # char[16] ; /* header name (MMX) */ 27 self.header['header_major_version'] = N.fromstring(l[20:24],N.uint32)[0] # UINT32 ; /* header_major_version (n.) */ 28 self.header['header_minor_version'] = N.fromstring(l[24:28],N.uint32)[0] # UINT32 ; /* header_minor_version (.n) */ 29 self.header['header_byte_orde'] = N.fromstring(l[28:32],N.uint32)[0] # UINT32 r;/* BIG_ENDIAN (Motorola,MIPS); LITTLE_ENDIAN (DEC, Intel) */ 30 self.header['data_byte_order'] = N.fromstring(l[32:36],N.uint32)[0] # UINT32 ; /* BIG_ENDIAN (Motorola,MIPS); LITTLE_ENDIAN (DEC, Intel) */ 31 self.header['header_size'] = N.fromstring(l[36:40],N.uint32)[0] # UINT32 ; /* in bytes */ 32 self.header['frame_type'] = N.fromstring(l[40:44],N.uint32)[0] # UINT32 ; /* flag for frame type */ 33 #self.header['magic_number'] = N.fromstring(l[44:48],N.uint32)[0] # UINT32 ; /* to be used as a flag - usually to indicate new file */ 34 #self.header['compression_type'] = N.fromstring(l[48:52],N.uint32)[0] # UINT32 ; /* type of image compression */ 35 #self.header['compression1'] = N.fromstring(l[52:56],N.uint32)[0] # UINT32 ; /* compression parameter 1 */ 36 #self.header['compression2'] = N.fromstring(l[56:60],N.uint32)[0] # UINT32 ; /* compression parameter 2 */ 37 #self.header['compression3'] = N.fromstring(l[60:64],N.uint32)[0] # UINT32 ; /* compression parameter 3 */ 38 #self.header['compression4'] = N.fromstring(l[64:68],N.uint32)[0] # UINT32 ; /* compression parameter 4 */ 39 #self.header['compression5'] = N.fromstring(l[68:72],N.uint32)[0] # UINT32 ; /* compression parameter 4 */ 40 #self.header['compression6'] = N.fromstring(l[72:76],N.uint32)[0] # UINT32 ; /* compression parameter 4 */ 41 #self.header['nheaders'] = N.fromstring(l[76:80],N.uint32)[0] # UINT32 ; /* total number of headers */ 42 self.header['nfast'] = N.fromstring(l[80:84],N.uint32)[0] # UINT32 ; /* number of pixels in one line */ 43 self.header['nslow'] = N.fromstring(l[84:88],N.uint32)[0] # UINT32 ; /* number of lines in image */ 44 self.header['depth'] = N.fromstring(l[88:92],N.uint32)[0] # UINT32 ; /* number of bytes per pixel */ 45 #self.header['record_length'] = N.fromstring(l[92:96],N.uint32)[0] # UINT32 ; /* number of pixels between succesive rows */ 46 self.header['signif_bits'] = N.fromstring(l[96:100],N.uint32)[0] # UINT32 ; /* true depth of data, in bits */ 47 #self.header['data_type'] = N.fromstring(l[100:104],N.uint32)[0] # UINT32 ; /* (signed,unsigned,float...) */ 48 #self.header['saturated_value'] = N.fromstring(l[104:108],N.uint32)[0] # UINT32 ; /* value marks pixel as saturated */ 49 self.header['sequence'] = N.fromstring(l[108:112],N.uint32)[0] # UINT32 ; /* TRUE or FALSE */ 50 self.header['nimages'] = N.fromstring(l[112:116],N.uint32)[0] # UINT32 ; /* total number of images - size of each is nfast*(nslow/nimages) */ 51 self.header['origin'] = N.fromstring(l[116:120],N.uint32)[0] # UINT32 ; /* corner of origin */ 52 self.header['orientation'] = N.fromstring(l[120:124],N.uint32)[0] # UINT32 ; /* direction of fast axis */ 53 self.header['view_direction'] = N.fromstring(l[124:128],N.uint32)[0] # UINT32 ; /* direction to view frame */ 54 self.header['overflow_locatio'] = N.fromstring(l[128:132],N.uint32)[0] # UINT32 n;/* FOLLOWING_HEADER, FOLLOWING_DATA */ 55 self.header['over_8_bits'] = N.fromstring(l[132:136],N.uint32)[0] # UINT32 ; /* # of pixels with counts > 255 */ 56 self.header['over_16_bits'] = N.fromstring(l[136:140],N.uint32)[0] # UINT32 ; /* # of pixels with count > 65535 */ 57 self.header['multiplexed'] = N.fromstring(l[140:144],N.uint32)[0] # UINT32 ; /* multiplex flag */ 58 self.header['nfastimages'] = N.fromstring(l[144:148],N.uint32)[0] # UINT32 ; /* # of images in fast direction */ 59 self.header['nslowimages'] = N.fromstring(l[148:152],N.uint32)[0] # UINT32 ; /* # of images in slow direction */ 60 self.header['background_applied'] = N.fromstring(l[152:156],N.uint32)[0] # UINT32 ; /* flags correction has been applied hold magic number ? */ 61 self.header['bias_applied'] = N.fromstring(l[156:160],N.uint32)[0] # UINT32 ; /* flags correction has been applied - hold magic number ? */ 62 self.header['flatfield_applied'] = N.fromstring(l[160:164],N.uint32)[0] # UINT32 ; /* flags correction has been applied hold magic number ? */ 63 self.header['distortion_applied'] = N.fromstring(l[164:168],N.uint32)[0] # UINT32 ; /* flags correction has been applied hold magic number ? */ 64 #self.header['original_header_type'] = N.fromstring(l[168:172],N.uint32)[0] # UINT32 ; /* Header/frame type from file that frame is read from */ 65 #self.header['file_saved'] = N.fromstring(l[172:176],N.uint32)[0] # UINT32 ; /* Flag that file has been saved, should be zeroed if modified */ 66 #/* Goniostat parameters (128 bytes) */ 67 self.header['xtal_to_detector'] = N.fromstring(l[640:644],N.int32)[0]*1000 #INT32 ; /* 1000*distance in millimeters */ 68 self.header['beam_x'] = N.fromstring(l[644:648],N.int32)[0]*1000 #INT32 ; /* 1000*x beam position (pixels) */ 69 self.header['beam_y'] = N.fromstring(l[648:652],N.int32)[0]*1000 #INT32 ; /* 1000*y beam position (pixels) */ 70 self.header['integration_time'] = N.fromstring(l[652:656],N.int32)[0] #INT32 ; /* integration time in milliseconds */ 71 self.header['exposure_time'] = N.fromstring(l[656:660],N.int32)[0] #INT32 ; /* exposure time in milliseconds */ 72 self.header['readout_time'] = N.fromstring(l[660:664],N.int32)[0] #INT32 ; /* readout time in milliseconds */ 73 self.header['nreads'] = N.fromstring(l[664:668],N.int32)[0] #INT32 ; /* number of readouts to get this image */ 74 self.header['start_twotheta'] = N.fromstring(l[668:672],N.int32)[0]*1000 #INT32 ; /* 1000*two_theta angle */ 75 self.header['start_omega'] = N.fromstring(l[676:680],N.int32)[0]*1000 #INT32 ; /* 1000*omega angle */ 76 self.header['start_chi'] = N.fromstring(l[680:684],N.int32)[0]*1000 #INT32 ; /* 1000*chi angle */ 77 self.header['start_kappa'] = N.fromstring(l[684:688],N.int32)[0]*1000 #INT32 ; /* 1000*kappa angle */ 78 self.header['start_phi'] = N.fromstring(l[688:692],N.int32)[0]*1000 #INT32 ; /* 1000*phi angle */ 79 self.header['start_delta'] = N.fromstring(l[692:696],N.int32)[0]*1000 #INT32 ; /* 1000*delta angle */ 80 self.header['start_gamma'] = N.fromstring(l[696:700],N.int32)[0]*1000 #INT32 ; /* 1000*gamma angle */ 81 self.header['start_xtal_to_detector'] = N.fromstring(l[700:704],N.int32)[0]*1000 #INT32 ; /* 1000*distance in mm (dist in um)*/ 82 self.header['end_twotheta'] = N.fromstring(l[704:708],N.int32)[0]*1000 #INT32 ; /* 1000*two_theta angle */ 83 self.header['end_omega'] = N.fromstring(l[708:712],N.int32)[0]*1000 #INT32 ; /* 1000*omega angle */ 84 self.header['end_chi'] = N.fromstring(l[712:716],N.int32)[0]*1000 #INT32 ; /* 1000*chi angle */ 85 self.header['end_kappa'] = N.fromstring(l[716:720],N.int32)[0]*1000 #INT32 ; /* 1000*kappa angle */ 86 self.header['end_phi'] = N.fromstring(l[720:724],N.int32)[0]*1000 #INT32 ; /* 1000*phi angle */ 87 self.header['end_delta'] = N.fromstring(l[724:728],N.int32)[0]*1000 #INT32 ; /* 1000*delta angle */ 88 self.header['end_gamma'] = N.fromstring(l[728:732],N.int32)[0]*1000 #INT32 ; /* 1000*gamma angle */ 89 self.header['end_xtal_to_detector'] = N.fromstring(l[732:736],N.int32)[0]*1000 #INT32 ; /* 1000*distance in mm (dist in um)*/ 90 self.header['rotation_axis'] = N.fromstring(l[736:740],N.int32)[0] #INT32 ; /* active rotation axis */ 91 self.header['rotation_range'] = N.fromstring(l[740:744],N.int32)[0]*1000 #INT32 ; /* 1000*rotation angle */ 92 self.header['detector_rotx'] = N.fromstring(l[744:748],N.int32)[0]*1000 #INT32 ; /* 1000*rotation of detector around X */ 93 self.header['detector_roty'] = N.fromstring(l[748:752],N.int32)[0]*1000 #INT32 ; /* 1000*rotation of detector around Y */ 94 self.header['detector_rotz'] = N.fromstring(l[752:756],N.int32)[0]*1000 #INT32 ; /* 1000*rotation of detector around Z */ 95 #/* Detector parameters (128 bytes) */ 96 self.header['detector_type'] = N.fromstring(l[768:772],N.int32)[0] #INT32 ; /* detector type */ 97 self.header['pixelsize_x'] = N.fromstring(l[772:776],N.int32)[0] #INT32 ; /* pixel size (nanometers) */ 98 self.header['pixelsize_y'] = N.fromstring(l[776:780],N.int32)[0] #INT32 ; /* pixel size (nanometers) */ 99 self.header['mean_bias'] = N.fromstring(l[780:784],N.int32)[0]*1000 #INT32 ; /* 1000*mean bias value */ 100 self.header['photons_per_100adu'] = N.fromstring(l[784:788],N.int32)[0] #INT32 ; /* photons / 100 ADUs */ 101 self.header['measured_bias'] = N.fromstring(l[788:792],N.int32)[0]*1000 #INT32 [MAXIMAGES]; /* 1000*mean bias value for each image*/ 102 self.header['measured_temperature'] = N.fromstring(l[792:796],N.int32)[0] #INT32 [MAXIMAGES]; /* Temperature of each detector in milliKelvins */ 103 self.header['measured_pressure'] = N.fromstring(l[796:800],N.int32)[0] #INT32 [MAXIMAGES] ; /* Pressure of each chamber in microTorr */ 104 #/* X-ray source parameters (8*4 bytes) */ 105 #self.header['source_type'] = N.fromstring(l[896:900],N.int32)[0] #INT32 ; /* (code) - target, synch. etc */ 106 #self.header['source_dx'] = N.fromstring(l[900:904],N.int32)[0] #INT32 ; /* Optics param. - (size microns) */ 107 #self.header['source_dy'] = N.fromstring(l[904:908],N.int32)[0] #INT32 ; /* Optics param. - (size microns) */ 108 self.header['source_wavelength'] = N.fromstring(l[908:912],N.int32)[0] #INT32 ; /* wavelength (femtoMeters) */ 109 #self.header['source_power'] = N.fromstring(l[912:916],N.int32)[0] #INT32 ; /* (Watts) */ 110 #self.header['source_voltage'] = N.fromstring(l[916:920],N.int32)[0] #INT32 ; /* (Volts) */ 111 #self.header['source_current'] = N.fromstring(l[920:924],N.int32)[0] #INT32 ; /* (microAmps) */ 112 #self.header['source_bias'] = N.fromstring(l[924:928],N.int32)[0] #INT32 ; /* (Volts) */ 113 #self.header['source_polarization_x'] = N.fromstring(l[928:932],N.int32)[0] #INT32 ; /* () */ 114 #self.header['source_polarization_y'] = N.fromstring(l[932:936],N.int32)[0] #INT32 ; /* () */ 115 #/* X-ray optics_parameters (8*4 bytes) */ 116 #self.header['optics_type'] = N.fromstring(l[960:964],N.int32)[0] #INT32 ; /* Optics type (code)*/ 117 #self.header['optics_dx'] = N.fromstring(l[964:968],N.int32)[0] #INT32 ; /* Optics param. - (size microns) */ 118 #self.header['optics_dy'] = N.fromstring(l[968:972],N.int32)[0] #INT32 ; /* Optics param. - (size microns) */ 119 #self.header['optics_wavelength'] = N.fromstring(l[972:976],N.int32)[0] #INT32 ; /* Optics param. - (size microns) */ 120 #self.header['optics_dispersion'] = N.fromstring(l[976:980],N.int32)[0] #INT32 ; /* Optics param. - (*10E6) */ 121 #self.header['optics_crossfire_x'] = N.fromstring(l[980:984],N.int32)[0] #INT32 ; /* Optics param. - (microRadians) */ 122 #self.header['optics_crossfire_y'] = N.fromstring(l[984:988],N.int32)[0] #INT32 ; /* Optics param. - (microRadians) */ 123 #self.header['optics_angle'] = N.fromstring(l[988:992],N.int32)[0] #INT32 ; /* Optics param. - (monoch. 2theta microradians) */ 124 #self.header['optics_polarization_x'] = N.fromstring(l[992:996],N.int32)[0] #INT32 ; /* () */ 125 #self.header['optics_polarization_y'] = N.fromstring(l[996:1000],N.int32)[0] #INT32 ; /* () */ 126 #/* File parameters (1024 bytes) */ 127 self.header['filetitle'] = l[1024:1024+l[1024:1152].find(clip)]#char[128]; /* Title */ 128 self.header['filepath'] = l[1152:1152+l[1152:1280].find(clip)] #char[128]; /* path name for data file */ 129 self.header['filename'] = l[1280:1280+l[1280:1344].find(clip)] #char[64]; /* name of data file */ 130 #self.header['acquire_timestamp'] = l[1344:1344+l[1344:1376].find(clip)] #char[32]; /* date and time of acquisition */ 131 #self.header['header_timestamp'] = l[1376:1376+l[1376:1408].find(clip)] #char[32]; /* date and time of header update */ 132 #self.header['save_timestamp'] = l[1408:1408+l[1408:1440].find(clip)] #char[32]; /* date and time file saved */ 133 self.header['file_comments'] = l[1440:1440+l[1440:1952].find(clip)] #char[512]; /* comments - can be used as desired */ 134 #/* Dataset parameters (512 bytes) */ 135 self.header['dataset_comments'] = l[2048:2048+l[2048:512].find(clip)] #char[512] ; /* comments - can be used as desired */
Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Fri Jun 20 03:53:28 2014 | http://epydoc.sourceforge.net |