@@ -294,7 +294,7 @@ def test_create(self):
294294        notes  =  'test note' 
295295        obs  =  GDNAExtractionProcess .create (
296296            user , plate , kf_robot , ep_robot , tool , kit , 10 ,
297-             'gdna - Test plate 1' ,  
297+             'gdna - Test plate 1' ,
298298            extraction_date = test_date , notes = notes )
299299        self .assertEqual (obs .date , test_date )
300300        self .assertEqual (obs .personnel , user )
@@ -708,35 +708,64 @@ def test_make_2D_array(self):
708708            cols = 4 ).astype (float )
709709        np .testing .assert_allclose (obs , exp2_cp_array )
710710
711+     def  test_rationalize_pico_csv_string (self ):
712+         pico_csv  =  ('Results					\r ' 
713+                     '					\r ' 
714+                     'Well ID\t Well\t [Blanked-RFU]\t [Concentration]		\r ' 
715+                     'SPL1\t A1\t <0.000\t 3.432		\r ' 
716+                     'SPL2\t A2\t 4949.000\t 3.239		\r ' 
717+                     'SPL3\t B1\t >15302.000\t 10.016		\r ' 
718+                     'SPL4\t B2\t 4039.000\t 2.644		\r ' 
719+                     '					\r ' 
720+                     'Curve2 Fitting Results					\r ' 
721+                     '					\r ' 
722+                     'Curve Name\t Curve Formula\t A\t B\t R2\t Fit F Prob\r ' 
723+                     'Curve2\t Y=A*X+B\t 1.53E+003\t 0\t 0.995\t ?????' )
724+ 
725+         expected_output  =  (
726+             'Results					\n ' 
727+             '					\n ' 
728+             'Well ID\t Well\t [Blanked-RFU]\t [Concentration]		\n ' 
729+             'SPL1\t A1\t 0.000\t 3.432		\n ' 
730+             'SPL2\t A2\t 4949.000\t 3.239		\n ' 
731+             'SPL3\t B1\t 15302.000\t 10.016		\n ' 
732+             'SPL4\t B2\t 4039.000\t 2.644		\n ' 
733+             '					\n ' 
734+             'Curve2 Fitting Results					\n ' 
735+             '					\n ' 
736+             'Curve Name\t Curve Formula\t A\t B\t R2\t Fit F Prob\n ' 
737+             'Curve2\t Y=A*X+B\t 1.53E+003\t 0\t 0.995\t ?????' )
738+         output  =  QuantificationProcess ._rationalize_pico_csv_string (pico_csv )
739+         self .assertEqual (output , expected_output )
740+ 
711741    def  test_parse_pico_csv (self ):
712742        # Test a normal sheet 
713-         pico_csv  =  '''Results 
743+         pico_csv1  =  '''Results 
714744
715745        Well ID\t Well\t [Blanked-RFU]\t [Concentration] 
716746        SPL1\t A1\t 5243.000\t 3.432 
717747        SPL2\t A2\t 4949.000\t 3.239 
718748        SPL3\t B1\t 15302.000\t 10.016 
719-         SPL4\t B2\t 4039.000\t 2.644 
749+         SPL4\t B2\t 4039.000\t 2.644   
720750
721751        Curve2 Fitting Results 
722752
723753        Curve Name\t Curve Formula\t A\t B\t R2\t Fit F Prob 
724754        Curve2\t Y=A*X+B\t 1.53E+003\t 0\t 0.995\t ????? 
725755        ''' 
726-         exp_pico_df  =  pd .DataFrame ({'Well' : ['A1' , 'A2' , 'B1' , 'B2' ],
756+         exp_pico_df1  =  pd .DataFrame ({'Well' : ['A1' , 'A2' , 'B1' , 'B2' ],
727757                                    'Sample DNA Concentration' :
728-                                     [3.432 , 3.239 , 10.016 , 2.644 ]})
729-         pico_csv_f  =  StringIO (pico_csv )
730-         obs_pico_df  =  QuantificationProcess ._parse_pico_csv (pico_csv_f )
731-         pd .testing .assert_frame_equal (obs_pico_df , exp_pico_df ,
758+                                         [3.432 , 3.239 , 10.016 , 2.644 ]})
759+         obs_pico_df1  =  QuantificationProcess ._parse_pico_csv (pico_csv1 )
760+         pd .testing .assert_frame_equal (obs_pico_df1 , exp_pico_df1 ,
732761                                      check_like = True )
733762
734-         # Test a sheet that has some ???? zero  values 
735-         pico_csv  =  '''Results 
763+         # Test a sheet that has some ????, <, and >  values 
764+         pico_csv2  =  '''Results 
736765
737766        Well ID\t Well\t [Blanked-RFU]\t [Concentration] 
738-         SPL1\t A1\t 5243.000\t  3 .432 
739-         SPL2\t A2\t 4949.000\t  3.239  
767+         SPL1\t A1\t 5243.000\t  >3 .432 
768+         SPL2\t A2\t 4949.000\t  <0.000  
740769        SPL3\t B1\t 15302.000\t 10.016 
741770        SPL4\t B2\t \t ????? 
742771
@@ -745,28 +774,47 @@ def test_parse_pico_csv(self):
745774        Curve Name\t Curve Formula\t A\t B\t R2\t Fit F Prob 
746775        Curve2\t Y=A*X+B\t 1.53E+003\t 0\t 0.995\t ????? 
747776        ''' 
748-         exp_pico_df  =  pd .DataFrame ({'Well' : ['A1' , 'A2' , 'B1' , 'B2' ],
777+         exp_pico_df2  =  pd .DataFrame ({'Well' : ['A1' , 'A2' , 'B1' , 'B2' ],
749778                                    'Sample DNA Concentration' :
750-                                     [3.432 , 3.239 , 10.016 , np .nan ]})
751-         pico_csv_f  =  StringIO (pico_csv )
752-         obs_pico_df  =  QuantificationProcess ._parse_pico_csv (pico_csv_f )
753-         pd .testing .assert_frame_equal (obs_pico_df , exp_pico_df ,
779+                                         [3.432 , 0.000 , 10.016 , 10.016 ]})
780+         obs_pico_df2  =  QuantificationProcess ._parse_pico_csv (pico_csv2 )
781+         pd .testing .assert_frame_equal (obs_pico_df2 , exp_pico_df2 ,
754782                                      check_like = True )
755783
756-     def   test_parse ( self ): 
757-         pico_csv  =  '''Results 
784+          # Test a sheet that has unexpected value that can't be converted to # 
785+         pico_csv3  =  '''Results 
758786
759787        Well ID\t Well\t [Blanked-RFU]\t [Concentration] 
760788        SPL1\t A1\t 5243.000\t 3.432 
761789        SPL2\t A2\t 4949.000\t 3.239 
762790        SPL3\t B1\t 15302.000\t 10.016 
763-         SPL4\t B2\t  4039.000 \t 2.644  
791+         SPL4\t B2\t  \t fail  
764792
765793        Curve2 Fitting Results 
766794
767795        Curve Name\t Curve Formula\t A\t B\t R2\t Fit F Prob 
768796        Curve2\t Y=A*X+B\t 1.53E+003\t 0\t 0.995\t ????? 
769797        ''' 
798+         with  self .assertRaises (ValueError ):
799+             QuantificationProcess ._parse_pico_csv (pico_csv3 )
800+ 
801+     def  test_parse (self ):
802+         # Test a normal sheet 
803+         # Note that the pico output file appears to have \r (NOT \r\n) 
804+         # line endings 
805+         pico_csv  =  ('Results					\r ' 
806+                     '					\r ' 
807+                     'Well ID\t Well\t [Blanked-RFU]\t [Concentration]		\r ' 
808+                     'SPL1\t A1\t 5243.000\t 3.432		\r ' 
809+                     'SPL2\t A2\t 4949.000\t 3.239		\r ' 
810+                     'SPL3\t B1\t 15302.000\t 10.016		\r ' 
811+                     'SPL4\t B2\t 4039.000\t 2.644		\r ' 
812+                     '					\r ' 
813+                     'Curve2 Fitting Results					\r ' 
814+                     '					\r ' 
815+                     'Curve Name\t Curve Formula\t A\t B\t R2\t Fit F Prob\r ' 
816+                     'Curve2\t Y=A*X+B\t 1.53E+003\t 0\t 0.995\t ?????' )
817+ 
770818        obs  =  QuantificationProcess .parse (pico_csv )
771819        exp  =  np .asarray (
772820            [[3.432 , 3.239 , np .nan , np .nan , np .nan , np .nan , np .nan , np .nan ,
@@ -796,11 +844,11 @@ def test_attributes(self):
796844        self .assertEqual (tester .notes ,None )
797845        obs  =  tester .concentrations 
798846        self .assertEqual (len (obs ), 95 )
799-         self .assertEqual (obs [0 ],  
847+         self .assertEqual (obs [0 ],
800848                         (LibraryPrep16SComposition (1 ), 20.0 , 60.606 ))
801-         self .assertEqual (obs [36 ],  
849+         self .assertEqual (obs [36 ],
802850                         (LibraryPrep16SComposition (37 ), 20.0 , 60.606 ))
803-         self .assertEqual (obs [94 ],  
851+         self .assertEqual (obs [94 ],
804852                         (LibraryPrep16SComposition (95 ), 1.0 , 3.0303 ))
805853
806854        tester  =  QuantificationProcess (4 )
0 commit comments