Changes in / [941a0b8:c614c02] in sasview


Ignore:
Files:
14 added
11 edited

Legend:

Unmodified
Added
Removed
  • .pydevproject

    rf468791 r75eeb425  
    44<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property> 
    55<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH"> 
    6 <path>/code/src</path> 
     6<path>/trunk/src</path> 
    77</pydev_pathproperty> 
    88</pydev_project> 
  • setup.py

    r76263a5 reda8972  
    136136# sans.dataloader 
    137137package_dir["sans.dataloader"] = os.path.join("src", "sans", "dataloader") 
    138 package_data["sans.dataloader.readers"] = ['defaults.xml'] 
    139 packages.extend(["sans.dataloader","sans.dataloader.readers"]) 
     138package_data["sans.dataloader.readers"] = ['defaults.xml','schema/*.xsd'] 
     139packages.extend(["sans.dataloader","sans.dataloader.readers","sans.dataloader.readers.schema"]) 
    140140 
    141141# sans.calculator 
  • test/sansdataloader/test/cansas1d.xml

    r5777106 reda8972  
    4949                         
    5050                </SASsample> 
    51                 <SASinstrument name="TEST instrument"> 
     51                <SASinstrument> 
    5252                        <name>canSAS instrument</name> 
    5353                        <SASsource name="source name"> 
     
    8585                                        4.150 
    8686                                </SDD> 
    87                                 <orientation> 
     87                                <offset> 
     88                    <x unit="mm">1</x> 
     89                    <y unit="mm">2</y> 
     90                </offset> 
     91                <orientation> 
    8892                                        <roll unit="degree">1.00</roll> 
    8993                                        <pitch unit="degree">0.00</pitch> 
    9094                                        <yaw unit="degree">0.00</yaw> 
    9195                                </orientation> 
    92                                 <offset> 
    93                                         <x unit="mm">1</x> 
    94                                         <y unit="mm">2</y> 
    95                                 </offset> 
    9696                                <beam_center> 
    9797                                        <x unit="mm">322.64</x> 
     
    135135                        <term name="ABS:IZERO">230.09</term> 
    136136                        <term name="ABS:XSECT" unit="mm">1</term> 
    137                         <SASprocessnote/> 
     137                        <SASprocessnote>No Information</SASprocessnote> 
    138138                </SASprocess> 
    139139                <SASnote /> 
  • test/sansdataloader/test/cansas1d_badunits.xml

    r5777106 reda8972  
    4949                         
    5050                </SASsample> 
    51                 <SASinstrument name="TEST instrument"> 
     51                <SASinstrument> 
    5252                        <name>canSAS instrument</name> 
    5353                        <SASsource name="source name"> 
     
    8585                                        4.150 
    8686                                </SDD> 
    87                                 <orientation> 
     87                                <offset> 
     88                    <x unit="nm">1000000</x> 
     89                    <y unit="micron">2000</y> 
     90                </offset> 
     91                <orientation> 
    8892                                        <roll unit="radian">.0174533</roll> 
    8993                                        <pitch unit="rad">0.00</pitch> 
    9094                                        <yaw unit="radian">0.00</yaw> 
    9195                                </orientation> 
    92                                 <offset> 
    93                                         <x unit="nm">1000000</x> 
    94                                         <y unit="micron">2000</y> 
    95                                 </offset> 
    9696                                <beam_center> 
    9797                                        <x unit="m">.32264</x> 
  • test/sansdataloader/test/cansas1d_slit.xml

    r5777106 reda8972  
    1414                                <I unit="1/cm">1000</I> 
    1515                                <Idev unit="1/cm">3</Idev> 
     16                                <dQw unit="1/A">0.001</dQw> 
    1617                                <dQl unit="1/A">0.005</dQl> 
    17                                 <dQw unit="1/A">0.001</dQw> 
    18                                 <Shadowfactor><!-- Shadowfactor is optional --></Shadowfactor> 
     18                <Shadowfactor><!-- Shadowfactor is optional --></Shadowfactor> 
    1919                        </Idata> 
    2020                        <Idata> 
     
    2222                                <I unit="1/cm">1001</I> 
    2323                                <Idev unit="1/cm">4</Idev> 
     24                                <dQw unit="1/A">0.001</dQw> 
    2425                                <dQl unit="1/A">0.005</dQl> 
    25                                 <dQw unit="1/A">0.001</dQw> 
    26                                 <Shadowfactor><!-- Shadowfactor is optional --></Shadowfactor> 
     26                <Shadowfactor><!-- Shadowfactor is optional --></Shadowfactor> 
    2727                        </Idata> 
    2828                </SASdata> 
     
    4949                         
    5050                </SASsample> 
    51                 <SASinstrument name="TEST instrument"> 
     51                <SASinstrument> 
    5252                        <name>canSAS instrument</name> 
    5353                        <SASsource name="source name"> 
     
    8585                                        4.150 
    8686                                </SDD> 
    87                                 <orientation> 
     87                                <offset> 
     88                    <x unit="mm">1</x> 
     89                    <y unit="mm">2</y> 
     90                </offset> 
     91                <orientation> 
    8892                                        <roll unit="degree">1.00</roll> 
    8993                                        <pitch unit="degree">0.00</pitch> 
    9094                                        <yaw unit="degree">0.00</yaw> 
    9195                                </orientation> 
    92                                 <offset> 
    93                                         <x unit="mm">1</x> 
    94                                         <y unit="mm">2</y> 
    95                                 </offset> 
    9696                                <beam_center> 
    9797                                        <x unit="mm">322.64</x> 
  • test/sansdataloader/test/cansas1d_units.xml

    r5777106 r75eeb425  
    4949                         
    5050                </SASsample> 
    51                 <SASinstrument name="TEST instrument"> 
     51                <SASinstrument> 
    5252                        <name>canSAS instrument</name> 
    5353                        <SASsource name="source name"> 
     
    8585                                        4.150 
    8686                                </SDD> 
    87                                 <orientation> 
     87                                <offset> 
     88                    <x unit="nm">1000000</x> 
     89                    <y unit="micron">2000</y> 
     90                </offset> 
     91                <orientation> 
    8892                                        <roll unit="radian">.0174533</roll> 
    8993                                        <pitch unit="rad">0.00</pitch> 
    9094                                        <yaw unit="radian">0.00</yaw> 
    9195                                </orientation> 
    92                                 <offset> 
    93                                         <x unit="nm">1000000</x> 
    94                                         <y unit="micron">2000</y> 
    95                                 </offset> 
    9696                                <beam_center> 
    9797                                        <x unit="m">.32264</x> 
  • test/sansdataloader/test/testLoad.py

    r5777106 ra25d242  
    157157    def testload6(self): 
    158158        """test file with unknown extension""" 
    159         self.assertRaises(ValueError, self.L.load, 'hello.missing') 
     159        self.assertRaises(RuntimeError, self.L.load, 'hello.missing') 
    160160         
    161161        # Lookup is not supported as a public method 
  • test/sansdataloader/test/test_3_columns.txt

    r5777106 reda8972  
    22#A=2.5 
    33#B=4 
    4 0  2.83954  0.6 
     40.000000  2.83954  0.6 
    550.204082  3.44938  0.676531 
    660.408163  5.82026  0.753061 
  • test/sansdataloader/test/utest_abs_reader.py

    r5777106 r75eeb425  
    159159     
    160160    def setUp(self): 
    161         self.data = Loader().load("cansas1d.xml") 
     161        data = Loader().load("cansas1d.xml") 
     162        self.data = data[0] 
    162163  
    163164    def test_cansas_checkdata(self): 
     
    209210 
    210211        self.assertEqual(self.data.sample.orientation_unit, 'degree') 
    211         self.assertEqual(self.data.sample.orientation.x, 22.5) 
    212         self.assertEqual(self.data.sample.orientation.y, 0.02) 
     212        self.assertAlmostEqual(self.data.sample.orientation.x, 22.5, 6) 
     213        self.assertAlmostEqual(self.data.sample.orientation.y, 0.02, 6) 
    213214 
    214215        self.assertEqual(self.data.sample.details[0], "http://chemtools.chem.soton.ac.uk/projects/blog/blogs.php/bit_id/2720")  
     
    259260                 
    260261        if _found1==False or _found2==False: 
    261             print item.distance 
    262262            raise RuntimeError, "Could not find all data %s %s" % (_found1, _found2)  
    263263             
     
    268268         
    269269        self.assertEqual(self.data.detector[0].orientation_unit, "degree") 
    270         self.assertEqual(self.data.detector[0].orientation.x, 1.0) 
     270        self.assertAlmostEqual(self.data.detector[0].orientation.x, 1.0, 6) 
    271271        self.assertEqual(self.data.detector[0].orientation.y, 0.0) 
    272272        self.assertEqual(self.data.detector[0].orientation.z, 0.0) 
     
    319319        filename = "write_test.xml" 
    320320        r.write(filename, self.data) 
    321         self.data = Loader().load(filename) 
     321        data = Loader().load(filename) 
     322        self.data = data[0] 
    322323        self.assertEqual(self.data.filename, filename) 
    323324        self._checkdata() 
     
    329330        """ 
    330331        filename = "cansas1d_units.xml" 
    331         self.data = Loader().load(filename) 
     332        data = Loader().load(filename) 
     333        self.data = data[0] 
    332334        self.assertEqual(self.data.filename, filename) 
    333335        self._checkdata() 
     
    339341        """ 
    340342        filename = "cansas1d_badunits.xml" 
    341         self.data = Loader().load(filename) 
     343        data = Loader().load(filename) 
     344        self.data = data[0] 
    342345        self.assertEqual(self.data.filename, filename) 
    343346        # The followed should not have been loaded 
     
    355358        """ 
    356359        filename = "cansas1d_slit.xml" 
    357         self.data = Loader().load(filename) 
     360        data = Loader().load(filename) 
     361        self.data = data[0] 
    358362        self.assertEqual(self.data.filename, filename) 
    359363        self.assertEqual(self.data.run[0], "1234") 
     
    370374        self.assertEqual(self.data.x[1], 0.03) 
    371375        self.assertAlmostEquals(self.data.y[1], 1001.0) 
    372         self.assertEqual(self.data.dx[1], 0.0) 
     376        self.assertEqual(self.data.dx, None) 
    373377        self.assertEqual(self.data.dxl[1], 0.005) 
    374378        self.assertEqual(self.data.dxw[1], 0.001) 
     
    376380        self.assertEqual(self.data.run_name['1234'], 'run name') 
    377381        self.assertEqual(self.data.title, "Test title") 
    378  
     382         
    379383             
    380384 
  • test/sansdataloader/test/utest_cansas.py

    rffbe487 r75eeb425  
    66 
    77import unittest 
    8 from sans.dataloader.loader import  Loader 
    9 from sans.dataloader.readers.cansas_reader_new import Reader 
     8import numpy 
     9import sans.dataloader.readers.cansas_reader as cansas 
     10from sans.dataloader.loader import Loader 
     11from sans.dataloader.data_info import Data1D 
     12from sans.dataloader.readers.xml_reader import XMLreader 
     13from sans.dataloader.readers.cansas_reader import Reader 
     14from sans.dataloader.readers.cansas_constants import cansasConstants 
    1015 
    1116import os 
    1217import sys 
     18import urllib2 
     19import StringIO 
    1320 
    1421from lxml import etree 
    1522import xml.dom.minidom 
    16 _ZERO = 1e-16 
    17 HAS_CONVERTER = True 
    18 try: 
    19     from sans.data_util.nxsunit import Converter 
    20 except: 
    21     HAS_CONVERTER = False 
    2223  
    23 CANSAS_NS = "cansas1d/1.0"    
    24 ALLOW_ALL = True 
     24CANSAS_FORMAT = cansasConstants.CANSAS_FORMAT 
     25CANSAS_NS = cansasConstants.CANSAS_NS 
    2526     
    2627class cansas_reader(unittest.TestCase): 
     
    2829    def setUp(self): 
    2930        self.loader = Loader() 
    30         self.reader = Reader() 
     31        self.xml_valid = "cansas_test_modified.xml" 
     32        self.xml_invalid = "cansas_test.xml" 
     33        self.cansas1d_badunits = "cansas1d_badunits.xml" 
     34        self.cansas1d = "cansas1d.xml" 
     35        self.cansas1d_slit = "cansas1d_slit.xml" 
     36        self.cansas1d_units = "cansas1d_units.xml" 
     37        self.write_test = "write_test.xml" 
     38        self.isis_1_0 = "ISIS_1_0.xml" 
     39        self.isis_1_1 = "ISIS_1_1.xml" 
     40        self.isis_1_1_notrans = "ISIS_1_1_notrans.xml" 
     41        self.schema_1_0 = "cansas1d_v1_0.xsd" 
     42        self.schema_1_1 = "cansas1d_v1_1.xsd" 
    3143         
    32     def test_checkdata(self): 
    33         output = [] 
    34         ns = [] 
    35         path = "cansas_test.xml" 
    36         if os.path.isfile(path): 
    37             basename = os.path.basename(path) 
    38             root, extension = os.path.splitext(basename) 
    39             if ALLOW_ALL or extension.lower() in self.ext: 
    40                 try: 
    41                     tree = tree = etree.parse(path, parser=etree.ETCompatXMLParser()) 
    42                     # Check the format version number 
    43                     # Specifying the namespace will take care of the file 
    44                     # format version 
    45                     for elem in tree.iter(): 
    46                         tag = elem.tag.replace('{cansas1d/1.0}', '') 
    47                         print 'element: {0}, stripped element: {1}, value: {2}'.format( 
    48                                                                     elem.tag, tag, elem.text) 
    49                     # reader_return = self.reader._parse_entry(tree) 
    50                          
    51                 except Exception as e: 
    52                     exc_type, exc_obj, exc_tb = sys.exc_info() 
    53                     fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] 
    54                     print(exc_type, fname, exc_tb.tb_lineno) 
     44     
     45    def get_number_of_entries(self, dictionary, name, i): 
     46        if dictionary.get(name) is not None: 
     47            i += 1 
     48            name = name.split("_")[0] 
     49            name += "_{0}".format(i) 
     50            name = self.get_number_of_entries(dictionary, name, i) 
     51        return name 
     52     
     53 
     54    def test_xml_validate(self): 
     55        string = "<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" 
     56        string += "\t<xsd:element name=\"a\" type=\"AType\"/>\n" 
     57        string += "\t<xsd:complexType name=\"AType\">\n" 
     58        string += "\t\t<xsd:sequence>\n" 
     59        string += "\t\t\t<xsd:element name=\"b\" type=\"xsd:string\" />\n" 
     60        string += "\t\t</xsd:sequence>\n" 
     61        string += "\t</xsd:complexType>\n" 
     62        string += "</xsd:schema>" 
     63        f = StringIO.StringIO(string) 
     64        xmlschema_doc = etree.parse(f) 
     65        xmlschema = etree.XMLSchema(xmlschema_doc) 
     66        valid = etree.parse(StringIO.StringIO('<a><b></b></a>')) 
     67        invalid = etree.parse(StringIO.StringIO('<a><c></c></a>')) 
     68        self.assertTrue(xmlschema.validate(valid)) 
     69        self.assertFalse(xmlschema.validate(invalid)) 
    5570         
    56         print(output) 
    5771         
     72    def test_real_xml(self): 
     73        reader = XMLreader(self.xml_valid, self.schema_1_0) 
     74        valid = reader.validateXML() 
     75        if valid: 
     76            self.assertTrue(valid) 
     77        else: 
     78            self.assertFalse(valid) 
     79             
     80         
     81    def test_cansas_xml(self): 
     82        filename = "isis_1_1_write_test.xml" 
     83        xmlreader = XMLreader(self.isis_1_1, self.schema_1_1) 
     84        valid = xmlreader.validateXML() 
     85        self.assertTrue(valid) 
     86        reader = Reader() 
     87        dataloader = reader.read(self.isis_1_1) 
     88        for data in dataloader: 
     89            self.assertTrue(data.title == "TK49 c10_SANS") 
     90            self.assertTrue(data.x.size == 138) 
     91            self.assertTrue(len(data.meta_data) == 2) 
     92            self.assertTrue(data.detector[0].distance_unit == "mm") 
     93            reader.write(filename, data) 
     94            reader2 = Reader() 
     95            return_data = reader2.read(filename) 
     96            data_new = return_data 
     97            self.data = return_data[0] 
     98            self.assertTrue(self.data.x.size == 138) 
     99            self.assertTrue(len(self.data.meta_data) == 2) 
     100            self.assertTrue(self.data.detector[0].distance_unit == "mm") 
     101            self.assertTrue(self.data.title == "TK49 c10_SANS") 
     102                     
     103    def test_entry_name_recurse(self): 
     104        test_values = [1,2,3,4,5,6] 
     105        base_key = "key" 
     106        d = {} 
     107        for value in test_values: 
     108            new_key = self.get_number_of_entries(d, base_key, i = 0) 
     109            d[new_key] = value 
     110        self.assertTrue(len(d) == 6) 
     111         
     112     
     113    def test_load_cansas_file(self): 
     114        valid = [] 
     115        reader1 = XMLreader(self.xml_valid, self.schema_1_0) 
     116        self.assertTrue(reader1.validateXML()) 
     117        reader2 = XMLreader(self.xml_invalid, self.schema_1_0) 
     118        self.assertFalse(reader2.validateXML()) 
     119        reader3 = XMLreader(self.xml_valid, self.schema_1_1) 
     120        self.assertFalse(reader3.validateXML()) 
     121        reader4 = XMLreader(self.xml_invalid, self.schema_1_1) 
     122        self.assertFalse(reader4.validateXML()) 
     123        reader5 = XMLreader(self.isis_1_0, self.schema_1_0) 
     124        self.assertTrue(reader5.validateXML()) 
     125        reader6 = XMLreader(self.isis_1_1, self.schema_1_1) 
     126        self.assertTrue(reader6.validateXML()) 
     127        reader7 = XMLreader(self.isis_1_1, self.schema_1_0) 
     128        self.assertFalse(reader7.validateXML()) 
     129         
     130     
     131    def test_old_cansas_files(self): 
     132        reader1 = XMLreader(self.cansas1d, self.schema_1_0) 
     133        self.assertTrue(reader1.validateXML()) 
     134        reader2 = XMLreader(self.cansas1d_units, self.schema_1_0) 
     135        self.assertTrue(reader2.validateXML()) 
     136        reader3 = XMLreader(self.cansas1d_badunits, self.schema_1_0) 
     137        self.assertTrue(reader3.validateXML()) 
     138        reader4 = XMLreader(self.cansas1d_slit, self.schema_1_0) 
     139        self.assertTrue(reader4.validateXML()) 
     140        reader5 = XMLreader(self.write_test, self.schema_1_0) 
     141        self.assertTrue(reader5.validateXML()) 
     142         
     143 
    58144if __name__ == '__main__': 
    59     unittest.main() 
     145    unittest.main()     
  • test/sansdataloader/test/write_test.xml

    r5777106 r75eeb425  
    1616                                        1000.0 
    1717                                </I> 
     18                                <Idev unit="1/cm"> 
     19                                        3.0 
     20                                </Idev> 
    1821                                <Qdev unit="1/A"> 
    1922                                        0.01 
    2023                                </Qdev> 
    21                                 <dQl unit="1/A"> 
    22                                         0.0 
    23                                 </dQl> 
    24                                 <dQw unit="1/A"> 
    25                                         0.0 
    26                                 </dQw> 
    27                                 <Idev unit="1/cm"> 
    28                                         3.0 
    29                                 </Idev> 
    3024                        </Idata> 
    3125                        <Idata> 
     
    3630                                        1001.0 
    3731                                </I> 
     32                                <Idev unit="1/cm"> 
     33                                        4.0 
     34                                </Idev> 
    3835                                <Qdev unit="1/A"> 
    3936                                        0.02 
    4037                                </Qdev> 
    41                                 <dQl unit="1/A"> 
    42                                         0.0 
    43                                 </dQl> 
    44                                 <dQw unit="1/A"> 
    45                                         0.0 
    46                                 </dQw> 
    47                                 <Idev unit="1/cm"> 
    48                                         4.0 
    49                                 </Idev> 
    5038                        </Idata> 
    5139                </SASdata> 
     
    6351                                0.0 
    6452                        </temperature> 
    65                         <details> 
    66                                 http://chemtools.chem.soton.ac.uk/projects/blog/blogs.php/bit_id/2720 
    67                         </details> 
    68                         <details> 
    69                                 Some text here 
    70                         </details> 
    7153                        <position> 
    7254                                <x unit="mm"> 
     
    8567                                </pitch> 
    8668                        </orientation> 
     69                        <details> 
     70                                http://chemtools.chem.soton.ac.uk/projects/blog/blogs.php/bit_id/2720 
     71                        </details> 
     72                        <details> 
     73                                Some text here 
     74                        </details> 
    8775                </SASsample> 
    8876                <SASinstrument> 
     
    9482                                        neutron 
    9583                                </radiation> 
     84                                <beam_size name="bm"> 
     85                                        <x unit="mm"> 
     86                                                12.0 
     87                                        </x> 
     88                                        <y unit="mm"> 
     89                                                13.0 
     90                                        </y> 
     91                                </beam_size> 
    9692                                <beam_shape> 
    9793                                        disc 
    9894                                </beam_shape> 
    99                                 <beam_size name="bm"> 
    100                                         <x unit="mm"> 
    101                                                 12.0 
    102                                         </x> 
    103                                         <y unit="mm"> 
    104                                                 13.0 
    105                                         </y> 
    106                                 </beam_size> 
    10795                                <wavelength unit="A"> 
    10896                                        6.0 
     
    123111                                </length> 
    124112                                <aperture name="source" type="radius"> 
    125                                         <distance unit="mm"> 
    126                                                 11000 
    127                                         </distance> 
    128113                                        <size> 
    129114                                                <x unit="mm"> 
     
    131116                                                </x> 
    132117                                        </size> 
     118                                        <distance unit="mm"> 
     119                                                11000.0 
     120                                        </distance> 
    133121                                </aperture> 
    134122                                <aperture name="sample" type="radius"> 
    135                                         <size name="size name"> 
     123                                        <size> 
    136124                                                <x unit="mm"> 
    137125                                                        1.0 
     
    145133                                </name> 
    146134                                <SDD unit="mm"> 
    147                                         4150 
     135                                        4150.0 
    148136                                </SDD> 
    149137                                <offset> 
     
    155143                                        </y> 
    156144                                </offset> 
    157                                 <beam_center> 
    158                                         <x unit="mm"> 
    159                                                 322.64 
    160                                         </x> 
    161                                         <y unit="mm"> 
    162                                                 327.68 
    163                                         </y> 
    164                                 </beam_center> 
    165                                 <pixel_size> 
    166                                         <x unit="mm"> 
    167                                                 5.0 
    168                                         </x> 
    169                                         <y unit="mm"> 
    170                                                 5.0 
    171                                         </y> 
    172                                 </pixel_size> 
    173145                                <orientation> 
    174146                                        <roll unit="degree"> 
     
    182154                                        </yaw> 
    183155                                </orientation> 
     156                                <beam_center> 
     157                                        <x unit="mm"> 
     158                                                322.64 
     159                                        </x> 
     160                                        <y unit="mm"> 
     161                                                327.68 
     162                                        </y> 
     163                                </beam_center> 
     164                                <pixel_size> 
     165                                        <x unit="mm"> 
     166                                                5.0 
     167                                        </x> 
     168                                        <y unit="mm"> 
     169                                                5.0 
     170                                        </y> 
     171                                </pixel_size> 
    184172                        </SASdetector> 
    185173                </SASinstrument> 
     
    207195                        </term> 
    208196                        <SASprocessnote> 
    209                                 AvA1 0.0000E+00 AsA2 1.0000E+00 XvA3 1.0526E+03 XsA4 
    210                                 5.2200E-02 XfA5 0.0000E+00 
    211                         </SASprocessnote> 
    212                         <SASprocessnote> 
    213                                 S... 13597 0 2.26E+02 2A 5mM 0%D2O Sbak 13594 0 1.13E+02 
    214                                 H2O Buffer 
    215                         </SASprocessnote> 
    216                         <SASprocessnote> 
    217                                 V... 13552 3 1.00E+00 H2O5m 
     197                                 
    218198                        </SASprocessnote> 
    219199                </SASprocess> 
     
    258238                                1 
    259239                        </term> 
     240                        <SASprocessnote> 
     241                                 
     242                        </SASprocessnote> 
    260243                </SASprocess> 
     244                <SASnote/> 
    261245        </SASentry> 
    262246</SASroot> 
Note: See TracChangeset for help on using the changeset viewer.