Coverage for src/instawell/__init__.py: 100%

17 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-11-07 15:47 -0600

1""" 

2InstaWell: A powerful toolkit for analyzing Differential Scanning Fluorimetry (DSF) data. 

3 

4This package provides a complete pipeline for processing thermal shift assay experiments, 

5from raw data ingestion through melting temperature identification. 

6 

7Basic Usage: 

8 >>> from instawell import setup_experiment, ingest_data, filter_wells 

9 >>> 

10 >>> # Setup experiment 

11 >>> ctx = setup_experiment( 

12 ... experiment_name="my_experiment", 

13 ... raw_data_path="raw.csv", 

14 ... layout_data_path="layout.csv" 

15 ... ) 

16 >>> 

17 >>> # Process data 

18 >>> ingest_data(ctx) 

19 >>> filter_wells(ctx, wells_to_filter=["A1"]) 

20 >>> # ... continue pipeline 

21 

22Pipeline Steps (in order): 

23 1. setup_experiment() - Initialize experiment directory and context 

24 2. ingest_data() - Parse layout and organize raw data 

25 3. filter_wells() - Remove problematic wells 

26 4. average_accross_replicates() - Average technical replicates 

27 5. subtract_background() - Remove background signal (NPC controls) 

28 6. min_max_scale() - Normalize to 0-1 range 

29 7. calculate_derivative() - Compute -dY/dT for Tm identification 

30 8. find_min_temperature() - Extract melting temperatures 

31""" 

32 

33import logging 

34 

35logging.getLogger(__name__).addHandler(logging.NullHandler()) 

36 

37# Core context and configuration 

38# Data models 

39from .core.data_models import Replicate, UniqueCondition 

40from .core.exp_context import ExperimentContext 

41 

42# Parsing utilities 

43from .core.parser import ( 

44 condition_from_string, 

45 condition_to_string, 

46 parse_concentration_to_float, 

47 parse_condition_string, 

48 validate_condition_string, 

49) 

50from .core.steps import StepFiles 

51 

52# Processing pipeline steps 

53from .processing.step_00_setup_experiment import ( 

54 load_experiment_context, 

55 setup_experiment, 

56) 

57from .processing.step_01_ingest_data import ingest_data 

58from .processing.step_02_filter_wells import filter_wells 

59from .processing.step_03_average_replicates import average_accross_replicates 

60from .processing.step_04_subtract_background import subtract_background 

61from .processing.step_05_minmax_scale import min_max_scale 

62from .processing.step_06_calc_derivative import calculate_derivative 

63from .processing.step_07_find_min_temp import find_min_temperature 

64 

65# Utility functions 

66from .utils.utils import split_unqcon_column 

67 

68__all__ = [ 

69 # ===== Experiment Setup ===== 

70 "setup_experiment", 

71 "load_experiment_context", 

72 "ExperimentContext", 

73 "StepFiles", 

74 # ===== Processing Pipeline ===== 

75 "ingest_data", 

76 "filter_wells", 

77 "average_accross_replicates", 

78 "subtract_background", 

79 "min_max_scale", 

80 "calculate_derivative", 

81 "find_min_temperature", 

82 # ===== Data Models ===== 

83 "Replicate", 

84 "UniqueCondition", 

85 # ===== Parsing Utilities ===== 

86 "condition_from_string", 

87 "condition_to_string", 

88 "parse_condition_string", 

89 "parse_concentration_to_float", 

90 "validate_condition_string", 

91 # ===== Utilities ===== 

92 "split_unqcon_column", 

93] 

94 

95__version__ = "0.2.0" # Bumped for new API