Monitor similarity trajectory updates from streaming analysis
Similarity trajectory polling tracks how the RHEED pattern evolves over time relative to reference frames. It follows the same patterns as time series polling but uses dedicated functions from atomscale.similarity.
def latest_similarity(df): """Extract the latest similarity score for deduplication.""" if df.empty or "Similarity" not in df.columns: return None return df.iloc[-1]["Similarity"]for result in iter_poll_trajectory( client, source_id=source_id, interval=5.0, last_n=10, distinct_by=latest_similarity, max_polls=20,): if not result.empty and "Similarity" in result.columns: latest = result.iloc[-1]["Similarity"] print(f"Current similarity: {latest:.3f}")
Use the until parameter to stop polling when a condition is met. By default, trajectory polling stops automatically when no trajectory is active.
def similarity_stabilized(df): """Stop when similarity exceeds 0.95.""" if df.empty or "Similarity" not in df.columns: return False return df.iloc[-1]["Similarity"] > 0.95for result in iter_poll_trajectory( client, source_id=source_id, interval=5.0, distinct_by=latest_similarity, until=similarity_stabilized,): print(f"Similarity: {result.iloc[-1]['Similarity']:.3f}")print("Growth stabilized!")
import asyncioasync def monitor_trajectory(): async for result in aiter_poll_trajectory( client, source_id=source_id, interval=5.0, last_n=10, max_polls=20, ): if not result.empty and "Similarity" in result.columns: print(f"Similarity: {result.iloc[-1]['Similarity']:.3f}")asyncio.run(monitor_trajectory())