Panda-UV runs on Python 3.7+ with the following dependencies:
| Package | Version | Description |
|---|---|---|
| pyteomics | ≥4.5.6 | Mass spectrometry data processing |
| pandas | ≥1.3.5 | Data manipulation |
| numpy | ≥1.21.0 | Numerical computing |
| plotly | ≥5.14.1 | Visualization |
| PyQt5 | ≥5.15.9 | GUI framework |
| tqdm | ≥4.60.0 | Progress bar (for prsm_parser.py) |
| Averagine | built-in | Isotopic envelope calculation (C++ wrapped) |
Isotope Calculation:
- Averagine library (built-in, C++ wrapped) is used for theoretical isotope envelope calculations
- Reference: Rockwood, A.L., & Haimi, P. (2006). Efficient calculation of accurate masses of isotopic peaks. J. Am. Soc. Mass Spectrom., 17(3), 415-419.
Installation:
# Using conda environment file
conda env create -f requirements.yml
conda activate Panda-UV
# Or using pip
pip install pyteomics pandas numpy plotly PyQt5 tqdm| Item | v1.0 (Old) | v2.0 (New) |
|---|---|---|
| File Format | YAML | JSON |
| Modification Config | Separate file paths | Embedded data structure |
| Scan Processing | Single scan_id | Multiple scans list |
| PRSM Mapping | None | prsm_id dictionary |
New Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
| scans | list | [] | List of scan IDs to process |
| prsm_id | dict | {} | Mapping from scan to prsm_id |
| thread | int | 1 | Number of threads for parallel processing |
| msalign_file_dir | str | "" | Path to msalign file (replaces deconv_mass_file_dir) |
Renamed/Modified Parameters:
| Old Name | New Name | Change |
|---|---|---|
| deconv_mass_file_dir | msalign_file_dir | Renamed |
| fixed_mod_file_dir | fixed_mod | File path → Embedded data structure |
| unlocalized_mod_file_dir | unloc_mod | File path → Embedded data structure |
| scan_id | scans | Single value → List |
| None | sequence | New, dict type |
Deprecated Parameters:
fixed_mod_file_dirunlocalized_mod_file_dirdeconv_mass_file_dir
Old v1.0 fixed_mod (file path):
fixed_mod_file_dir: "path/to/fixed_mod.csv"
# CSV format: name, formula, loc
New v2.0 fixed_mod (embedded data):
"fixed_mod": {
"header": ["name", "formula", "loc"],
"1920": [["Acetyl", "C2H2O", 1]],
"4139": [["Acetyl", "C2H2O", 1], ["Carbamidomethyl", "C2H3NO", 2]]
}New v2.0 unloc_mod:
"unloc_mod": {
"header": ["name", "formula", "start_loc", "end_loc", "ion type"],
"3876": [["heme", "C34H31O4Fe", "any", "any", "any"]]
}New v2.0 prsm_id:
"prsm_id": {
"1563": 0,
"1570": 1,
"1920": 100
}| Issue | Solution |
|---|---|
| Components crowded/overlapping | Qt Layout Manager (QGridLayout, QVBoxLayout, QHBoxLayout) |
| Layout broken on window resize | Set minimum window size (1300x950) |
| Fixed coordinate positioning | Responsive layout |
| Table | Columns | Function |
|---|---|---|
| Scan-Sequence | Scan, Sequence | Configure protein sequence for each scan |
| Fixed mod | Scan, name, formula, loc | Configure fixed modifications per scan |
| Unlocalized mod | Scan, name, formula, start_loc, end_loc, ion type | Configure variable modifications |
| PRSM ID | Scan, prsm_id | Configure scan to prsm_id mapping |
Validation Rules:
| Field | Validation | Error Message |
|---|---|---|
| Scan | Non-empty, integer | "Scan must be an integer, got 'xxx'" |
| Sequence | Non-empty | "Sequence cannot be empty" |
| loc | Integer | "'loc' must be an integer, got 'xxx'" |
| start_loc/end_loc | Integer or "any" | "'start_loc' must be an integer or 'any', got 'xxx'" |
| PRSM ID | Integer | "PRSM ID must be an integer, got 'xxx'" |
Error Display Features:
- Error cells highlighted (light red background #FFC8C8)
- Summary error message dialog
- Pre-save completeness check
Parameter: thread - Number of threads
Behavior:
thread = 1: Single-threaded sequential processingthread > 1: Parallel processing using ThreadPoolExecutor
GUI Location: Right settings panel → "Thread count" control
Old version: Can only process one scan at a time (scan_id parameter)
New version: Can configure multiple scans simultaneously, each with its own:
- Protein sequence
- Fixed modifications
- Variable modifications
- PRSM ID
| Old Version | New Version |
|---|---|
| PandaUV_main.py | PandaUV_core.py (PandaUV class) |
| Standalone functions | Class methods |
| Scattered param classes | Unified Param class |
# Param class
class Param:
def get_param_template() # Get default parameter template
def save_param() # Save parameters to JSON
def read_param() # Load parameters from JSON
# PandaUV class
class PandaUV:
def run() # Single-threaded run
def run_parallel() # Multi-threaded run
def initialize() # Initialize environment
def match() # Single scan matchingOld version:
- Prepare fixed_mod.csv file
- Prepare unlocalized_mod.csv file
- Enter file paths in GUI
- Save parameters
New version:
- Add scan and sequence in Scan-Sequence table in GUI
- Add modifications in Fixed mod table (directly embedded)
- Add variable modifications in Unlocalized mod table
- Configure mapping in PRSM ID table
- Save parameters (automatically generates JSON)
v1.0 (YAML):
sequence: 'MQIFVKTLTGKTITLEVEPSDTIENVKAKIQDKEGIPPDQQRLIFAGKQLEDGRTLSDYNIQKESTLHLVLRLRGG'
deconv_mass_file_dir: 'path/to/deconv_mass.csv'
fixed_mod_file_dir: 'path/to/fixed_mod.csv'
unlocalized_mod_file_dir: 'path/to/unloc_mod.csv'
scan_id: 3871
mass_calibration: true
ms_calibration: true
mass_mode: 'M'
terminal_mass_error: 10v2.0 (JSON):
{
"sequence": {
"1563": "MQIFVKTLTGKTITLEVEPSDTIENV...",
"1570": "SGRGKGGLETKGPSSSEL..."
},
"scans": [1563, 1570, 1612],
"msalign_file_dir": "path/to/msalign.msalign",
"fixed_mod": {
"header": ["name", "formula", "loc"],
"1563": [["Acetyl", "C2H2O", 1]],
"1570": [["Carbamidomethyl", "C2H3NO", 2]]
},
"unloc_mod": {
"header": ["name", "formula", "start_loc", "end_loc", "ion type"],
"1563": [["heme", "C34H31O4Fe", "any", "any", "any"]]
},
"prsm_id": {
"1563": 0,
"1570": 1,
"1612": 10
},
"thread": 4,
"mass_calibration": false,
"ms_calibration": false,
"mass_mode": "M",
"terminal_mass_error": 10
}- Dataset Location: examples/20200110_ubiquitin_193nm_1_2mj_monomer_Z6_1428_1
- Description: Single protein (Ubiquitin) example demonstrating basic Panda-UV usage
- Data Source: UVPD mass spectrometry data of Ubiquitin monomer
- Use Case: Demonstrates single protein analysis with fixed and variable modifications
- Dataset Location: examples/CPTAC_Intact_rep1_15Jan15_Bane_C2-14-08-02RZ
- Description: Complex dataset from CPTAC intact proteomics study
- Data Source: Park, J., et al. "Informed-Proteomics: open-source software package for top-down proteomics." Nat. Methods 14.9 (2017): 909-914.
- Search Method: TopPIC v1.5.4 (Top-down proteomics identification and characterization)
- Parameter Generation: Generated using prsm_parse.py based on TopPIC search results
- Reference: Basharat, A.R., Ning, X., & Liu, X. "EnvCNN: a convolutional neural network model for evaluating isotopic envelopes in top-down mass-spectral deconvolution." Anal. Chem. 92.11 (2020): 7778-7785.
Related References:
- Park, J., et al. "Informed-Proteomics: open-source software package for top-down proteomics." Nat. Methods 14.9 (2017): 909-914.
- Basharat, A.R., Ning, X., & Liu, X. "EnvCNN: a convolutional neural network model for evaluating isotopic envelopes in top-down mass-spectral deconvolution." Anal. Chem. 92.11 (2020): 7778-7785.
If you use Panda-UV in your research, please cite:
Panda-UV: Zhu, Y., et al. "Panda-UV Unlocks Deeper Protein Characterization with Internal Fragments in Ultraviolet Photodissociation Mass Spectrometry." Anal. Chem. 96.21 (2024): 8474-8483.
| Change | Description |
|---|---|
| Removed | rpy2 package and R environment dependency |
| Removed | r_env_dir parameter |
| Changed | Averagine library (based on emass, built-in C++ wrapped) for isotope envelope calculations |
| File | Change |
|---|---|
| PandaUV_core.py | Removed r_source and r_lock, replaced with Averagine-based calculation |
| PandaUV_core.py | Removed r_env_dir parameter from template |
| PandaUV_GUI.py | Removed R env dir input field |
| Scoring_function_utils.py | Replaced R-based get_iso_peak_arr with Averagine.formula_to_iso |
emass provides efficient isotopic envelope calculations without requiring R runtime:
- Rockwood, A.L., & Haimi, P. (2006). Efficient calculation of accurate masses of isotopic peaks. J. Am. Soc. Mass Spectrom., 17(3), 415-419.
- Added global lock (self.lock) for thread-safe isotope calculations
- Lock protects averagine module calls in multi-threaded processing
- Basic GUI and CLI implementation
- Single scan processing mode
- Separate file storage for modification data
- Core fragment matching algorithm
- PCC scoring system
- Mass calibration functionality