Ë
    ±Gºjœ  ã                  ó\  — d Z ddlmZ ddlZddlmZ ddlZ ej                  d«       ddlm	Z
 ddlmZ ddlZddlmZ ddlmZ ddlmZmZmZ d	d
ge
j.                  d<   de
j.                  d<    ee«      j3                  «       j4                  d   Zedz  Zedz  Zdd„Zedk(  r e«        yy)z@Visual QA for every ME1a PLY component and all CSV defect marks.é    )ÚannotationsN)ÚPathÚAgg)ÚImage)ÚcKDTree)Úply_infoÚ
sample_plyÚfull_scan_checkzApple SD Gothic NeozDejaVu Sanszfont.familyFzaxes.unicode_minusé   zexperiments/ME1a_DTzresults/inspectionc                 ó>
  — t        j                  t        dz  j                  «       «      } t        j                  t        dz  j                  «       «      }t	        j
                  t        dz  «      d   }t        |«      }t        | d   z  g| d   D �cg c]  }t        |z  ‘Œ c}z   }g }t        j                  ddd	d
¬«      \  }}t        |j                  «       |«      D �]™  \  }	}
t        |
«      }t        |d«      \  }}|
|d   k(  r| d   n
t        |«      }|j                  |d¬«      d   }|j!                  t#        |
j%                  t        «      «      |j&                  |d   |d   |d   t)        t	        j*                  |«      «      t)        t	        j,                  |d«      «      t)        t	        j.                  |dk  «      «      dœ«       |d d t1        dt3        |«      dz  «      …   }|	j5                  |d d …df   |d d …df   d|d d …df   dd
¬«       |	j7                  d«       |	j9                  |
j:                  d|j&                  d›d�z   «       |	j=                  d «       |	j?                  d!«       �Œœ |jA                  d"«       |jC                  tD        d#z  d$¬%«       t        jF                  |«       |d   jI                  d&«      }tK        jL                  |«      jO                  d'«      }d(}|jQ                  |jR                  |z  |jT                  |z  f«      }t        j                  d)d
¬«      \  }}	|	jW                  |«       |	jY                  d*«       |D ]Û  }t)        |d+   «      |z  t)        |d,   «      |z  }}|j[                  d-d.«      |j[                  d/d.«      }}|	j5                  |g|gd0d1d2d3¬4«       |	j]                  |d5   › d6|d7   › �||f|d(z   |dz
  fd2d8d9d3dd:œ¬;«       |sŒ•|sŒ˜|	j_                  ta        jb                  ||ft)        |«      |z  t)        |«      |z  d<d=d>¬?«      «       ŒÝ |	j9                  d@«       |jC                  tD        dAz  d$¬%«       t        jF                  |«       tD        dBz  je                  t        jf                  |dC|ti        |jj                  «      dDœd<d¬E«      «       tm        t        jf                  t3        |«      t3        |«      |D �cg c]  }to        |dF   d«      ‘Œ c}dGœ«      «       y c c}w c c}w )HNz%analysis/results/source_manifest.jsonzanalysis/results/defects.jsonz4analysis/results/14h06_all_merge_pointcloud_full.npzÚpointsÚ	fused_plyÚcomponent_plyé   é   )é   é   T)ÚfigsizeÚconstrained_layoutièý  r   Úfused_checkéÿÿÿÿ)ÚworkersÚmin_xyzÚmax_xyzÚnonfinite_verticesgffffffî?é   )ÚfileÚverticesÚfull_bounds_min_mmÚfull_bounds_max_mmr   Úsample_to_fused_p50_mmÚsample_to_fused_p95_mmÚsample_within_5mm_fractionr   i€>  g333333Ó?Úviridis)ÚsÚcÚcmapÚ
rasterizedÚequalÚ
Ú,z pointszscanner X (mm)zscanner Y (mm)zBME1a fused and component PLY: native scanner frame, color = heightzply_components.pngé–   )ÚdpizMerged_Image.pngÚRGBr   )é
   é   ÚoffÚXÚYÚWÚ ÚHé#   ÚredÚwhitegš™™™™™é?)r%   r&   Ú
edgecolorsÚ
linewidthsÚNoÚ ÚErroré	   z#15202b)Ú	facecolorÚalphaÚpad)ÚxytextÚcolorÚfontsizeÚbboxFz#ff5353gÍÌÌÌÌÌô?)ÚfillÚ	edgecolorÚ	linewidthzGME1a merged image with six supplied CSV marks; pixel origin unconfirmedzcsv_defects_on_merged_image.pngzcomponent_audit.jsonzVsampled component points to 350,000-point fused cache; not an independent sample count)ÚrowsÚ
comparisonÚ	csv_marksÚmerged_image_size_xy)Úensure_asciiÚindentr"   )ÚfilesÚdefect_marksÚcomponent_p95_mm)8ÚjsonÚloadsÚROOTÚ	read_textÚnpÚloadr   ÚPROJECTÚpltÚsubplotsÚzipÚravelr   r	   r
   ÚqueryÚappendÚstrÚrelative_toÚcountÚfloatÚmedianÚquantileÚmeanÚmaxÚlenÚscatterÚ
set_aspectÚ	set_titleÚstemÚ
set_xlabelÚ
set_ylabelÚsuptitleÚsavefigÚOUTÚcloseÚ	with_namer   ÚopenÚconvertÚresizeÚwidthÚheightÚimshowÚaxisÚgetÚannotateÚ	add_patchÚpatchesÚ	RectangleÚ
write_textÚdumpsÚlistÚsizeÚprintÚround)ÚmanifestÚdefectÚfusedÚtreeÚpÚpathsrJ   ÚfigÚaxesÚaxÚpathÚinfor   Ú_ÚexactÚdistanceÚshownÚ
image_pathÚimgÚfactorÚsmallÚrowÚxÚyÚwÚhÚrs                              õ!   ì „ì²˜ë¦¬/inspect_me1a_sources.pyÚmainr       s•  € Ü�Z‰ZœÐEÑE×PÑPÓRÓS€HÜ�:‰:”tÐ;Ñ;×FÑFÓHÓI€FÜ
�'‰'”$ÐMÑMÓ
NÈxÑ
X€EÜ	�‹€DÜ�8˜KÑ(Ñ(Ð
)¸hÀÒ>WÓ*XÑ>W¸¬7°1«9Ð>WÑ*XÑ
X€EØ	€DÜ�\‰\˜!˜A fÀÔE�H€CˆÜ�t—z‘z“| E×*‰ˆˆ4Ü�d‹^ˆÜ˜D Ó'‰ˆˆqØ)-¨u°Q©xªˆh�}Ò%¼_ÈTÓ=RˆØ—‘˜F¨2�Ó.¨qÑ1ˆØ�‰œC × 0Ñ 0´Ó 9Ó:ÀdÇjÁjØ*/°	Ñ*:ÐPUÐV_ÑP`Ø*/Ð0DÑ*EÜ.3´B·I±I¸hÓ4GÓ.HÜ.3´B·K±KÀÈÓ4MÓ.NÜ27¼¿¹ÀÈ!ÁÓ8LÓ2MñOô 	Pð Ñ0”s˜1œS ›[¨%Ñ/Ó0Ð0Ñ1ˆØ
�
‰
�5š˜1˜‘:˜e¢A a C™j¨2°²a¸°c±
À	ÐUYˆ
ÔZØ
�‰�gÔ˜rŸ|™|¨D¯I©I¸¸4¿:¹:Àa¸.ÈÐ6PÑ,PÔQØ
�‰Ð&Ô'¨¯©Ð6FÖ(Gð +ð ‡L�LÐUÔVØ‡K�K”Ð(Ñ(¨S€KÔ1´#·)±)¸C´.à�Q‰x×!Ñ!Ð"4Ó5€JÜ�
‰
�:Ó×&Ñ& uÓ-€CØ€FØ
�*‰*�c—i‘i Ñ'¨¯
©
°FÑ(:Ð;Ó
<€EÜ�<‰< ¸4Ô@�F€CˆØ‡I�IˆeÔ�R—W‘W˜U”^ÛˆÜ�#�c‘(‹O˜FÑ"¤5¨¨S©£?°6Ñ#9ˆ!ˆØ�G‰G�C˜‹O˜CŸG™G C¨›Oˆ!ˆØ
�
‰
�A�3˜�s˜R %°7Àbˆ
ÔIØ
�‰�s˜4‘y�k  3 w¡< .Ð1°1°Q°%ÀÀ!ÁÀAÀaÁC¸yØ!¨1¸yÐQSÐZ[Ñ2\ð 	ô 	^â’Ø�L‰Lœ×*Ñ*¨A¨a¨5´°q³¸&±ÄÀqÃÈ&ÁØ#¨iÀ#ôGõ Hð ð ‡L�LÐZÔ[Ø‡K�K”Ð5Ñ5¸#€KÔ>¼s¿y¹yÈ¼~ÜÐ	Ñ×+Ñ+¬D¯J©J¸tØmØ´$°s·x±x³.ñ8BàOTÐ\]ô-_ô `ô 
Œ$�*‰*œc $›i´s¸6³{ÙX\Ó)]ÑX\ÐST¬%°Ð2JÑ0KÈAÕ*NÐX\Ñ)]ñ_ó `õ aùòS +YùòT *^s   ÂTÓ1TÚ__main__)ÚreturnÚNone) Ú__doc__Ú
__future__r   rS   Úpathlibr   Ú
matplotlibÚuseÚmatplotlib.pyplotÚpyplotrZ   Úmatplotlib.patchesr~   ÚnumpyrW   ÚPILr   Úscipy.spatialr   Úaudit_ply_fusionr   r	   r
   ÚrcParamsÚ__file__ÚresolveÚparentsrY   rU   rq   r    Ú__name__© ó    rŸ   Ú<module>r·      s¤   ðá FÝ "ã Ý ã Ø €
‡�ˆuÔ Ý Ý $Û Ý Ý !ç BÑ Bà2°=ÐA€‡�ˆ]Ñ Ø#(€‡�Ð!Ñ "áˆX‹×ÑÓ ×(Ñ(¨Ñ+€ØÐ"Ñ"€ØÐ	Ñ€ó/aðd ˆZÒ™�Ðr¶   