{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://scischema.org/schemas/biology/pcr/1.0.0/master-schema.json",
  "version": "1.0.0",
  "title": "Polymerase Chain Reaction (PCR) Process Schema",
  "description": "Comprehensive schema for PCR processes including standard endpoint PCR, real-time qPCR, RT-qPCR, single-cell PCR, PCR-ASO, and droplet digital PCR (ddPCR). Covers reagents, thermal cycling, detection methods, curve analysis, and performance metrics.",
  "type": "object",
  "$defs": {
    "reagent": {
      "type": "object",
      "description": "Standardized structure for reagent quantities and provenance.",
      "properties": {
        "concentration": {
          "type": "number",
          "description": "Concentration in appropriate units (e.g., µM for primers, U/µL for enzymes, mM for dNTPs, ng/µL for DNA).",
          "minimum": 0
        },
        "volume": {
          "type": "number",
          "description": "Volume added to the reaction in µL.",
          "minimum": 0
        },
        "units": {
          "type": "string",
          "description": "Concentration units (e.g., µM, U/µL, mM, ng/µL, copies/µL)."
        },
        "manufacturer": {
          "type": "string",
          "description": "Manufacturer or vendor of the reagent."
        },
        "catalog_number": {
          "type": "string",
          "description": "Manufacturer catalog or part number for the reagent."
        },
        "lot_number": {
          "type": "string",
          "description": "Lot number for traceability."
        }
      },
      "required": [
        "concentration",
        "volume"
      ]
    }
  },
  "properties": {
    "experiment_metadata": {
      "type": "object",
      "description": "Administrative and contextual metadata for the experiment.",
      "properties": {
        "experiment_id": {
          "type": "string",
          "description": "Unique identifier for the PCR experiment."
        },
        "experiment_date": {
          "type": "string",
          "description": "Date when the experiment was conducted.",
          "format": "date"
        },
        "operator": {
          "type": "string",
          "description": "Name or identifier of the person conducting the experiment."
        },
        "lab_notebook_reference": {
          "type": "string",
          "description": "Reference to the lab notebook or electronic record."
        },
        "replicates": {
          "type": "integer",
          "description": "Number of replicates for the experiment.",
          "minimum": 1
        },
        "notes": {
          "type": "string",
          "description": "Additional notes or observations about the experiment."
        }
      },
      "required": [
        "experiment_id"
      ]
    },
    "sample_preparation": {
      "type": "object",
      "description": "Sample origin, type, extraction, and quality.",
      "properties": {
        "sample_type": {
          "type": "string",
          "description": "Type of sample used.",
          "enum": [
            "tissue",
            "blood",
            "cell-free DNA",
            "circulating tumor cells",
            "FFPE",
            "RNA",
            "single-cell",
            "other"
          ]
        },
        "sample_source": {
          "type": "string",
          "description": "Biological source of the sample (e.g., plasma, serum, urine, CSF, sputum, pleural effusion, ascites, stool, fresh tissue, exosomes)."
        },
        "extraction_method": {
          "type": "string",
          "description": "Nucleic acid extraction method (e.g., column-based, magnetic beads, phenol-chloroform, TRIzol, direct lysis)."
        },
        "sample_purity": {
          "type": "string",
          "description": "Description of sample purity."
        },
        "sample_degradation": {
          "type": "string",
          "description": "Assessment of sample degradation.",
          "enum": [
            "intact",
            "partially_degraded",
            "highly_degraded"
          ]
        },
        "archival_sample": {
          "type": "boolean",
          "description": "Indicates if the sample is archival."
        },
        "reverse_transcription": {
          "type": "object",
          "description": "Parameters for RNA reverse transcription (RT-PCR).",
          "properties": {
            "performed": {
              "type": "boolean",
              "description": "Indicates if reverse transcription was performed."
            },
            "enzyme": {
              "type": "string",
              "description": "Type of reverse transcriptase enzyme used.",
              "enum": [
                "M-MLV",
                "SuperScript III",
                "AMV",
                "other"
              ]
            },
            "primer_type": {
              "type": "string",
              "description": "Type of primer used for reverse transcription.",
              "enum": [
                "oligo(dT)",
                "random hexamers",
                "gene-specific primers",
                "other"
              ]
            },
            "temperature": {
              "type": "number",
              "description": "Temperature for reverse transcription in °C.",
              "minimum": 0
            },
            "time": {
              "type": "number",
              "minimum": 0,
              "description": "Duration in minutes."
            },
            "reagent_details": {
              "$ref": "#/$defs/reagent"
            }
          },
          "required": [
            "performed"
          ]
        },
        "single_cell_pcr": {
          "type": "object",
          "description": "Parameters specific to single-cell PCR.",
          "properties": {
            "isolation_method": {
              "type": "string",
              "description": "Cell isolation method (e.g., micromanipulation, laser capture microdissection, flow cytometry, microfluidics)."
            },
            "amplification_bias": {
              "type": "string",
              "description": "Description of bias in amplification of low-, medium-, and high-abundance transcripts."
            },
            "preamplification": {
              "type": "boolean",
              "description": "Indicates if preamplification was performed."
            },
            "preamplification_method": {
              "type": "string",
              "description": "Method used for preamplification."
            }
          }
        }
      }
    },
    "reaction_components": {
      "type": "object",
      "description": "All reagents used in the PCR reaction.",
      "properties": {
        "template_dna": {
          "type": "object",
          "description": "The DNA sample containing the target sequence to be amplified. Can be genomic DNA, plasmid DNA, or cDNA. Includes reagent details for the template DNA.",
          "properties": {
            "type": {
              "type": "string",
              "description": "Type of template.",
              "enum": [
                "genomic DNA",
                "plasmid DNA",
                "cDNA",
                "synthetic DNA",
                "cell lysate",
                "single-cell DNA",
                "cfDNA",
                "ctDNA",
                "RNA",
                "other"
              ]
            },
            "source": {
              "type": "string",
              "description": "Source of the template DNA."
            },
            "initial_quantity": {
              "type": "number",
              "description": "Initial quantity of template in ng, pg, or number of cells.",
              "minimum": 0
            },
            "purity": {
              "type": "string",
              "description": "Description of template purity."
            },
            "degradation_status": {
              "type": "string",
              "description": "Assessment of template degradation."
            },
            "contamination": {
              "type": "string",
              "description": "Description of potential contaminants."
            },
            "reagent_details": {
              "$ref": "#/$defs/reagent"
            }
          },
          "required": [
            "type",
            "reagent_details"
          ]
        },
        "primers": {
          "type": "object",
          "description": "Forward and reverse primers flanking the target region.",
          "properties": {
            "forward_primer": {
              "type": "object",
              "description": "The forward primer sequence (5' to 3') that binds to the 3' end of the template strand.",
              "properties": {
                "sequence": {
                  "type": "string",
                  "description": "Nucleotide sequence of the forward primer.",
                  "pattern": "^[ATCGatcg]+$"
                },
                "length": {
                  "type": "integer",
                  "description": "Length of the forward primer in nucleotides (nt).",
                  "minimum": 1
                },
                "tm": {
                  "type": "number",
                  "description": "Melting temperature (Tm) of the forward primer in °C.",
                  "minimum": 0
                },
                "gc_content": {
                  "type": "number",
                  "description": "GC content of the primer as a percentage.",
                  "minimum": 0,
                  "maximum": 100
                },
                "modifications": {
                  "type": "string",
                  "description": "Chemical modifications."
                },
                "reagent_details": {
                  "$ref": "#/$defs/reagent"
                }
              },
              "required": [
                "sequence",
                "length",
                "reagent_details"
              ]
            },
            "reverse_primer": {
              "type": "object",
              "description": "The reverse primer sequence (5' to 3') that binds to the 3' end of the complementary template strand.",
              "properties": {
                "sequence": {
                  "type": "string",
                  "description": "Nucleotide sequence of the reverse primer.",
                  "pattern": "^[ATCGatcg]+$"
                },
                "length": {
                  "type": "integer",
                  "description": "Length of the reverse primer in nucleotides (nt).",
                  "minimum": 1
                },
                "tm": {
                  "type": "number",
                  "description": "Melting temperature (Tm) of the reverse primer in °C.",
                  "minimum": 0
                },
                "gc_content": {
                  "type": "number",
                  "description": "GC content of the primer as a percentage.",
                  "minimum": 0,
                  "maximum": 100
                },
                "modifications": {
                  "type": "string",
                  "description": "Chemical modifications."
                },
                "reagent_details": {
                  "$ref": "#/$defs/reagent"
                }
              },
              "required": [
                "sequence",
                "length",
                "reagent_details"
              ]
            },
            "nested_primers": {
              "type": "object",
              "description": "Optional nested primer pair for second-stage amplification.",
              "properties": {
                "forward_primer": {
                  "type": "object",
                  "description": "Forward primer used in the second (nested) round of amplification.",
                  "properties": {
                    "sequence": {
                      "type": "string",
                      "description": "Nucleotide sequence of the forward nested primer (5' to 3').",
                      "pattern": "^[ATCGatcg]+$"
                    },
                    "length": {
                      "type": "integer",
                      "description": "Length of the forward nested primer in bases.",
                      "minimum": 1
                    },
                    "tm": {
                      "type": "number",
                      "description": "Melting temperature (Tm) of the forward nested primer in °C.",
                      "minimum": 0
                    },
                    "reagent_details": {
                      "$ref": "#/$defs/reagent"
                    }
                  },
                  "required": [
                    "sequence",
                    "length",
                    "reagent_details"
                  ]
                },
                "reverse_primer": {
                  "type": "object",
                  "description": "Reverse primer used in the second (nested) round of amplification.",
                  "properties": {
                    "sequence": {
                      "type": "string",
                      "description": "Nucleotide sequence of the reverse nested primer (5' to 3').",
                      "pattern": "^[ATCGatcg]+$"
                    },
                    "length": {
                      "type": "integer",
                      "description": "Length of the reverse nested primer in bases.",
                      "minimum": 1
                    },
                    "tm": {
                      "type": "number",
                      "description": "Melting temperature (Tm) of the reverse nested primer in °C.",
                      "minimum": 0
                    },
                    "reagent_details": {
                      "$ref": "#/$defs/reagent"
                    }
                  },
                  "required": [
                    "sequence",
                    "length",
                    "reagent_details"
                  ]
                }
              }
            },
            "allele_specific_primers": {
              "type": "array",
              "description": "Allele-specific primers for SNP or mutation detection.",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name or identifier of the allele-specific primer."
                  },
                  "sequence": {
                    "type": "string",
                    "description": "Nucleotide sequence of the allele-specific primer (5' to 3').",
                    "pattern": "^[ATCGatcg]+$"
                  },
                  "length": {
                    "type": "integer",
                    "description": "Length of the allele-specific primer in bases.",
                    "minimum": 1
                  },
                  "tm": {
                    "type": "number",
                    "description": "Melting temperature (Tm) of the allele-specific primer in °C.",
                    "minimum": 0
                  },
                  "target_allele": {
                    "type": "string",
                    "description": "Allele targeted by the primer."
                  },
                  "reagent_details": {
                    "$ref": "#/$defs/reagent"
                  }
                },
                "required": [
                  "name",
                  "sequence",
                  "length",
                  "target_allele",
                  "reagent_details"
                ]
              }
            },
            "competimer_primers": {
              "type": "array",
              "description": "Competitive primers used to modulate PCR efficiency.",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name or identifier of the competimer primer."
                  },
                  "sequence": {
                    "type": "string",
                    "description": "Nucleotide sequence of the competimer primer (5' to 3').",
                    "pattern": "^[ATCGatcg]+$"
                  },
                  "length": {
                    "type": "integer",
                    "description": "Length of the competimer primer in bases.",
                    "minimum": 1
                  },
                  "modifications": {
                    "type": "string",
                    "description": "e.g., 3' amino modification to prevent extension."
                  },
                  "percentage": {
                    "type": "number",
                    "description": "Percentage of competimer relative to total primer concentration.",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "reagent_details": {
                    "$ref": "#/$defs/reagent"
                  }
                },
                "required": [
                  "name",
                  "sequence",
                  "length",
                  "percentage",
                  "reagent_details"
                ]
              }
            }
          },
          "required": [
            "forward_primer",
            "reverse_primer"
          ]
        },
        "allele_specific_oligonucleotides": {
          "type": "object",
          "description": "ASO probes for hybridization-based SNP detection.",
          "properties": {
            "probes": {
              "type": "array",
              "description": "List of ASO probes used in the experiment.",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name or identifier of the ASO probe."
                  },
                  "sequence": {
                    "type": "string",
                    "description": "Nucleotide sequence of the ASO probe (5' to 3').",
                    "pattern": "^[ATCGatcg]+$"
                  },
                  "length": {
                    "type": "integer",
                    "description": "Length of the ASO probe in bases.",
                    "minimum": 1
                  },
                  "target_allele": {
                    "type": "string",
                    "description": "Allele targeted by the ASO probe."
                  },
                  "labeling": {
                    "type": "string",
                    "description": "Labeling method for the ASO probe.",
                    "enum": [
                      "radioactive",
                      "biotin",
                      "fluorescent",
                      "none"
                    ]
                  },
                  "reagent_details": {
                    "$ref": "#/$defs/reagent"
                  }
                },
                "required": [
                  "name",
                  "sequence",
                  "length",
                  "target_allele",
                  "reagent_details"
                ]
              }
            },
            "hybridization_conditions": {
              "type": "object",
              "description": "Conditions under which ASO probes were hybridized to the target DNA.",
              "properties": {
                "temperature": {
                  "type": "number",
                  "description": "Hybridization temperature in °C.",
                  "minimum": 0
                },
                "buffer": {
                  "type": "string",
                  "description": "Buffer used for hybridization."
                },
                "wash_conditions": {
                  "type": "object",
                  "description": "Stringency wash conditions post-hybridization.",
                  "properties": {
                    "buffer": {
                      "type": "string",
                      "description": "Buffer used for washing."
                    },
                    "temperature": {
                      "type": "number",
                      "description": "Wash temperature in °C.",
                      "minimum": 0
                    },
                    "time": {
                      "type": "number",
                      "description": "Duration of the wash in minutes.",
                      "minimum": 0
                    }
                  },
                  "required": [
                    "buffer",
                    "temperature"
                  ]
                }
              },
              "required": [
                "temperature",
                "buffer"
              ]
            }
          }
        },
        "fluorogenic_probes": {
          "type": "array",
          "description": "Fluorogenic probes for real-time PCR (TaqMan, molecular beacons, Scorpion primers, hybridization probes).",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Name or identifier of the fluorogenic probe."
              },
              "sequence": {
                "type": "string",
                "description": "Nucleotide sequence of the fluorogenic probe (5' to 3').",
                "pattern": "^[ATCGatcg]+$"
              },
              "length": {
                "type": "integer",
                "description": "Length of the fluorogenic probe in bases.",
                "minimum": 1
              },
              "probe_type": {
                "type": "string",
                "description": "Type of fluorogenic probe.",
                "enum": [
                  "TaqMan",
                  "molecular beacon",
                  "Scorpion primer",
                  "hybridization probe",
                  "other"
                ]
              },
              "labeling": {
                "type": "object",
                "description": "Fluorescent dyes used for labeling the probe.",
                "properties": {
                  "reporter_dye": {
                    "type": "string",
                    "description": "Reporter fluorescent dye.",
                    "enum": [
                      "FAM",
                      "VIC",
                      "TET",
                      "HEX",
                      "CY3",
                      "CY5",
                      "ROX",
                      "other"
                    ]
                  },
                  "quencher_dye": {
                    "type": "string",
                    "description": "Quencher fluorescent dye.",
                    "enum": [
                      "TAMRA",
                      "BHQ1",
                      "BHQ2",
                      "MGB",
                      "NFQ",
                      "none",
                      "other"
                    ]
                  }
                },
                "required": [
                  "reporter_dye",
                  "quencher_dye"
                ]
              },
              "target_description": {
                "type": "string",
                "description": "Description of the target sequence."
              },
              "reagent_details": {
                "$ref": "#/$defs/reagent"
              }
            },
            "required": [
              "name",
              "sequence",
              "length",
              "labeling",
              "reagent_details"
            ]
          }
        },
        "dna_polymerase": {
          "type": "object",
          "description": "Name of thermostable DNA polymerase enzyme used. Determines process efficiency and fidelity.",
          "properties": {
            "type": {
              "type": "string",
              "description": "Type of DNA polymerase.",
              "enum": [
                "Taq",
                "Pfu",
                "Phusion",
                "Klenow fragment",
                "Tth",
                "reverse transcriptase",
                "other"
              ]
            },
            "heat_stable": {
              "type": "boolean",
              "description": "Indicates if the polymerase is heat-stable or thermolabile.",
              "default": true
            },
            "nuclease_activity": {
              "type": "string",
              "description": "Type of nuclease activity.",
              "enum": [
                "5'→3' exonuclease",
                "3'→5' exonuclease",
                "none"
              ]
            },
            "reverse_transcriptase_activity": {
              "type": "boolean",
              "description": "Indicates if the polymerase has reverse transcriptase activity."
            },
            "inhibitor_tolerance": {
              "type": "string",
              "description": "Description of polymerase tolerance to inhibitors."
            },
            "reagent_details": {
              "$ref": "#/$defs/reagent"
            }
          },
          "required": [
            "type",
            "reagent_details"
          ]
        },
        "dntps": {
          "type": "object",
          "description": "Deoxynucleotide triphosphates (dNTPs) as building blocks for DNA synthesis.",
          "properties": {
            "ratio": {
              "type": "object",
              "description": "Molar ratio of individual dNTPs (default 1:1:1:1).",
              "properties": {
                "dATP": {
                  "type": "number",
                  "description": "Ratio of dATP.",
                  "minimum": 0
                },
                "dTTP": {
                  "type": "number",
                  "description": "Ratio of dTTP.",
                  "minimum": 0
                },
                "dCTP": {
                  "type": "number",
                  "description": "Ratio of dCTP.",
                  "minimum": 0
                },
                "dGTP": {
                  "type": "number",
                  "description": "Ratio of dGTP.",
                  "minimum": 0
                },
                "dUTP": {
                  "type": "number",
                  "description": "Ratio of dUTP, if used.",
                  "minimum": 0
                }
              }
            },
            "labeling": {
              "type": "string",
              "description": "Type of labeling for dNTPs.",
              "enum": [
                "radioactive",
                "fluorescent",
                "none"
              ]
            },
            "reagent_details": {
              "$ref": "#/$defs/reagent"
            }
          },
          "required": [
            "reagent_details"
          ]
        },
        "buffer_system": {
          "type": "object",
          "description": "The buffer system that maintains optimal pH and ionic conditions for enzyme activity, often including Mg²⁺ concentration.",
          "properties": {
            "type": {
              "type": "string",
              "description": "Type of buffer used."
            },
            "ph": {
              "type": "number",
              "description": "pH of the buffer system, optimized for DNA polymerase activity.",
              "minimum": 0,
              "maximum": 14
            },
            "components": {
              "type": "object",
              "description": "Buffer additives and modifiers, with their concentrations, that influence reaction specificity, stringency, and enzyme performance.",
              "properties": {
                "mgcl2_concentration": {
                  "type": "number",
                  "description": "Concentration of MgCl₂ in mM.",
                  "minimum": 0
                },
                "salt_concentration": {
                  "type": "number",
                  "description": "Concentration of additional salts in mM.",
                  "minimum": 0
                },
                "dmso_concentration": {
                  "type": "number",
                  "description": "Concentration of dimethyl sulfoxide (DMSO) in % (v/v), if used.",
                  "minimum": 0
                },
                "betaine_concentration": {
                  "type": "number",
                  "description": "Concentration of betaine in mM, if used.",
                  "minimum": 0
                },
                "formamide_concentration": {
                  "type": "number",
                  "description": "Concentration of formamide in % (v/v), if used.",
                  "minimum": 0
                },
                "dtt_concentration": {
                  "type": "number",
                  "description": "Concentration of dithiothreitol (DTT) in mM, if used.",
                  "minimum": 0
                },
                "tween_20_concentration": {
                  "type": "number",
                  "description": "Concentration of Tween 20 in % (v/v), if used.",
                  "minimum": 0
                }
              }
            },
            "reagent_details": {
              "$ref": "#/$defs/reagent"
            }
          },
          "required": [
            "type",
            "ph",
            "reagent_details"
          ]
        },
        "internal_controls": {
          "type": "object",
          "description": "Internal controls for normalization or validation (housekeeping genes, competitive templates, spike-ins).",
          "properties": {
            "type": {
              "type": "string",
              "description": "Type of internal control.",
              "enum": [
                "housekeeping gene",
                "competitive template",
                "spike-in",
                "none"
              ]
            },
            "target_description": {
              "type": "string",
              "description": "Description of the internal control target."
            }
          }
        },
        "carryover_prevention": {
          "type": "object",
          "description": "Methods for preventing carryover contamination (UNG/dUTP).",
          "properties": {
            "method": {
              "type": "string",
              "description": "Method used for carryover prevention.",
              "enum": [
                "UNG treatment",
                "dUTP incorporation",
                "physical separation",
                "none"
              ]
            },
            "ung_treatment": {
              "type": "object",
              "description": "Parameters for UNG treatment if used.",
              "properties": {
                "temperature": {
                  "type": "number",
                  "description": "Temperature for UNG incubation in °C.",
                  "minimum": 0
                },
                "time": {
                  "type": "number",
                  "description": "Duration of UNG incubation in minutes.",
                  "minimum": 0
                },
                "reagent_details": {
                  "$ref": "#/$defs/reagent"
                }
              },
              "required": [
                "temperature",
                "time",
                "reagent_details"
              ]
            }
          }
        }
      },
      "required": [
        "template_dna",
        "primers",
        "dna_polymerase",
        "dntps",
        "buffer_system"
      ]
    },
    "thermal_cycling_conditions": {
      "type": "object",
      "description": "Full thermal cycling protocol including initial denaturation, amplification cycles, final extension, and optional hold.",
      "properties": {
        "instrument": {
          "type": "string",
          "description": "Model of thermal cycler (e.g., ABI Prism 7700, GeneAmp PCR System 9600, LightCycler, QX200 Droplet Digital PCR System, CFX384)."
        },
        "initial_denaturation": {
          "type": "object",
          "description": "Initial step to separate double-stranded DNA into single strands.",
          "properties": {
            "temperature": {
              "type": "number",
              "description": "Temperature for initial DNA strand separation in degrees Celsius (°C).",
              "minimum": 0
            },
            "time": {
              "type": "number",
              "description": "Duration of initial denaturation step in seconds.",
              "minimum": 0
            }
          },
          "required": [
            "temperature",
            "time"
          ]
        },
        "reverse_transcription_step": {
          "type": "object",
          "description": "Optional reverse transcription step for RT-qPCR.",
          "properties": {
            "temperature": {
              "type": "number",
              "description": "Temperature for reverse transcription in °C.",
              "minimum": 0
            },
            "time": {
              "type": "number",
              "description": "Duration of reverse transcription in minutes.",
              "minimum": 0
            }
          }
        },
        "cycles": {
          "type": "array",
          "description": "Repeated amplification cycle steps.",
          "items": {
            "type": "object",
            "properties": {
              "denaturation": {
                "type": "object",
                "description": "Step to separate double-stranded DNA into single strands.",
                "properties": {
                  "temperature": {
                    "type": "number",
                    "description": "Temperature in °C.",
                    "minimum": 0
                  },
                  "time": {
                    "type": "number",
                    "description": "Duration in seconds.",
                    "minimum": 0
                  }
                },
                "required": [
                  "temperature",
                  "time"
                ]
              },
              "annealing": {
                "type": "object",
                "description": "Step where primers bind to complementary template sequences.",
                "properties": {
                  "temperature": {
                    "type": "number",
                    "description": "Temperature in °C.",
                    "minimum": 0
                  },
                  "time": {
                    "type": "number",
                    "description": "Duration in seconds.",
                    "minimum": 0
                  }
                },
                "required": [
                  "temperature",
                  "time"
                ]
              },
              "extension": {
                "type": "object",
                "description": "Step where DNA polymerase synthesizes new strands. Time typically proportional to amplicon length.",
                "properties": {
                  "temperature": {
                    "type": "number",
                    "description": "Temperature in °C.",
                    "minimum": 0
                  },
                  "time": {
                    "type": "number",
                    "description": "Duration in seconds.",
                    "minimum": 0
                  }
                },
                "required": [
                  "temperature",
                  "time"
                ]
              },
              "fluorescence_acquisition": {
                "type": "object",
                "description": "Real-time fluorescence monitoring parameters.",
                "properties": {
                  "temperature": {
                    "type": "number",
                    "description": "Temperature at which fluorescence is acquired in °C.",
                    "minimum": 0
                  },
                  "time": {
                    "type": "number",
                    "description": "Duration of fluorescence acquisition in seconds.",
                    "minimum": 0
                  },
                  "acquisition_mode": {
                    "type": "string",
                    "description": "Mode of fluorescence acquisition.",
                    "enum": [
                      "single",
                      "continuous",
                      "none"
                    ]
                  }
                }
              }
            },
            "required": [
              "denaturation",
              "annealing",
              "extension"
            ]
          }
        },
        "final_extension": {
          "type": "object",
          "description": "Final extension step to complete DNA synthesis.",
          "properties": {
            "temperature": {
              "type": "number",
              "description": "Temperature in °C.",
              "minimum": 0
            },
            "time": {
              "type": "number",
              "description": "Duration in seconds.",
              "minimum": 0
            }
          },
          "required": [
            "temperature",
            "time"
          ]
        },
        "number_of_cycles": {
          "type": "integer",
          "description": "Total amplification cycles (e.g., 25 for PCR-ASO, 40 for qPCR).",
          "minimum": 1
        },
        "hold": {
          "type": "object",
          "description": "Optional post-cycling hold step.",
          "properties": {
            "temperature": {
              "type": "number",
              "description": "Temperature in °C.",
              "minimum": 0
            },
            "time": {
              "type": "number",
              "description": "Duration in seconds.",
              "minimum": 0
            }
          }
        },
        "ramp_rate": {
          "type": "number",
          "description": "Rate of temperature change between steps in °C/second."
        },
        "melting_curve_analysis": {
          "type": "object",
          "description": "Post-amplification melting curve parameters.",
          "properties": {
            "start_temperature": {
              "type": "number",
              "description": "Starting temperature for melting curve analysis in °C.",
              "minimum": 0
            },
            "end_temperature": {
              "type": "number",
              "description": "Ending temperature for melting curve analysis in °C.",
              "minimum": 0
            },
            "increment": {
              "type": "number",
              "description": "Temperature increment per step in °C.",
              "minimum": 0
            },
            "hold_time": {
              "type": "number",
              "description": "Hold time at each temperature step in seconds.",
              "minimum": 0
            }
          },
          "required": [
            "start_temperature",
            "end_temperature",
            "increment"
          ]
        },
        "ddpcr_specific": {
          "type": "object",
          "description": "Parameters specific to droplet digital PCR.",
          "properties": {
            "droplet_generation": {
              "type": "object",
              "description": "Parameters for droplet generation in ddPCR.",
              "properties": {
                "oil_type": {
                  "type": "string",
                  "description": "Type of oil used for droplet generation."
                },
                "droplet_volume": {
                  "type": "number",
                  "description": "Volume of each droplet in nanoliters.",
                  "minimum": 0
                },
                "number_of_droplets": {
                  "type": "integer",
                  "description": "Total number of droplets generated.",
                  "minimum": 1
                }
              },
              "required": [
                "oil_type",
                "droplet_volume",
                "number_of_droplets"
              ]
            },
            "droplet_reading": {
              "type": "object",
              "description": "Parameters for reading droplets in ddPCR.",
              "properties": {
                "instrument": {
                  "type": "string",
                  "description": "Model or type of droplet reader."
                },
                "threshold_setting": {
                  "type": "string",
                  "description": "Method for setting threshold for positive droplets.",
                  "enum": [
                    "automatic",
                    "manual",
                    "algorithmic"
                  ]
                },
                "rain_droplet_handling": {
                  "type": "string",
                  "description": "Method for handling rain (intermediate-amplitude) droplets.",
                  "enum": [
                    "exclude",
                    "include",
                    "classify-separately"
                  ]
                },
                "poisson_correction": {
                  "type": "boolean",
                  "description": "Indicates whether Poisson correction was applied to account for droplet partitioning variability.",
                  "default": true
                },
                "limit_of_blank": {
                  "type": "number",
                  "description": "Limit of blank (LOB) for the ddPCR assay."
                },
                "limit_of_detection": {
                  "type": "number",
                  "description": "Limit of detection (LOD) for the ddPCR assay."
                }
              },
              "required": [
                "instrument"
              ]
            }
          }
        }
      },
      "required": [
        "initial_denaturation",
        "cycles",
        "number_of_cycles",
        "final_extension"
      ]
    },
    "amplicon": {
      "type": "object",
      "description": "Properties of the amplified DNA fragment.",
      "properties": {
        "length": {
          "type": "integer",
          "description": "Length of the amplicon in base pairs (bp).",
          "minimum": 1
        },
        "sequence": {
          "type": "string",
          "description": "Reference sequence of the target region.",
          "pattern": "^[ATCGatcg]+$"
        },
        "gc_content": {
          "type": "number",
          "description": "Percentage of guanine (G) and cytosine (C) bases.",
          "minimum": 0,
          "maximum": 100
        },
        "target_description": {
          "type": "string",
          "description": "Description of the target."
        },
        "restriction_sites": {
          "type": "array",
          "description": "Restriction enzyme sites in the amplicon.",
          "items": {
            "type": "object",
            "properties": {
              "enzyme": {
                "type": "string",
                "description": "Name of the restriction enzyme."
              },
              "sequence": {
                "type": "string",
                "description": "Recognition sequence of the enzyme.",
                "pattern": "^[ATCGatcg]+$"
              },
              "position": {
                "type": "integer",
                "description": "Position of the site in the amplicon (1-based indexing).",
                "minimum": 1
              },
              "polymorphic": {
                "type": "boolean",
                "description": "Indicates if the site is polymorphic."
              }
            },
            "required": [
              "enzyme",
              "sequence"
            ]
          }
        }
      },
      "required": [
        "length"
      ]
    },
    "detection_method": {
      "type": "object",
      "description": "Method for visualizing or quantifying PCR products.",
      "properties": {
        "method": {
          "type": "string",
          "description": "Detection technique.",
          "enum": [
            "gel electrophoresis",
            "autoradiography",
            "dot blot",
            "qPCR fluorescence",
            "sequencing",
            "radioactive labeling",
            "oligomer restriction",
            "real-time PCR",
            "melting curve analysis",
            "ddPCR",
            "other"
          ]
        },
        "details": {
          "type": "object",
          "description": "Method-specific configuration and parameters for the selected detection approach.",
          "properties": {
            "gel_electrophoresis": {
              "type": "object",
              "description": "Details for gel electrophoresis detection.",
              "properties": {
                "gel_type": {
                  "type": "string",
                  "description": "Type of gel.",
                  "enum": [
                    "agarose",
                    "polyacrylamide",
                    "NuSieve agarose",
                    "alkaline agarose",
                    "other"
                  ]
                },
                "gel_concentration": {
                  "type": "number",
                  "description": "Gel concentration in %.",
                  "minimum": 0
                },
                "dye": {
                  "type": "string",
                  "description": "Staining dye."
                },
                "buffer": {
                  "type": "string",
                  "description": "Electrophoresis buffer."
                },
                "voltage": {
                  "type": "number",
                  "description": "Voltage applied during electrophoresis in V/cm.",
                  "minimum": 0
                },
                "run_time": {
                  "type": "number",
                  "description": "Duration of electrophoresis in minutes.",
                  "minimum": 0
                }
              }
            },
            "quantitative_analysis": {
              "type": "object",
              "description": "Real-time PCR quantitative analysis parameters.",
              "properties": {
                "instrument": {
                  "type": "string",
                  "description": "Model or type of real-time PCR instrument."
                },
                "baseline_correction": {
                  "type": "object",
                  "description": "Parameters for baseline fluorescence correction.",
                  "properties": {
                    "method": {
                      "type": "string",
                      "description": "Method used for baseline correction.",
                      "enum": [
                        "automatic",
                        "manual",
                        "user-defined"
                      ]
                    },
                    "cycle_range": {
                      "type": "string",
                      "description": "Cycle range used for baseline calculation."
                    }
                  },
                  "required": [
                    "method"
                  ]
                },
                "threshold": {
                  "type": "number",
                  "description": "Threshold value for Ct calculation.",
                  "minimum": 0
                },
                "threshold_method": {
                  "type": "string",
                  "description": "Method used to set the threshold.",
                  "enum": [
                    "automatic",
                    "manual",
                    "dynamic"
                  ]
                },
                "curve_analysis_method": {
                  "type": "string",
                  "description": "Algorithm used for qPCR curve analysis.",
                  "enum": [
                    "Standard-Cq",
                    "LinRegPCR",
                    "FPLM",
                    "DART",
                    "5PSM",
                    "MAK2",
                    "FPK-PCR",
                    "LRE-Emax",
                    "LRE-E100",
                    "Cy0",
                    "PCR-Miner"
                  ]
                },
                "efficiency_model": {
                  "type": "string",
                  "enum": [
                    "constant",
                    "continuously decreasing"
                  ],
                  "description": "Assumption about PCR efficiency across cycles."
                },
                "cq_value": {
                  "type": "number",
                  "description": "Quantification cycle (Cq/Ct): cycle at which fluorescence exceeds threshold.",
                  "minimum": 0
                },
                "cy0_value": {
                  "type": "number",
                  "description": "Cy0: intersection of the abscissa and the tangent at the inflection point of the Richards curve."
                },
                "f0_value": {
                  "type": "number",
                  "description": "Initial fluorescence (F0) associated with target quantity, calculated as Fq/E^Cq."
                },
                "fq_threshold": {
                  "type": "number",
                  "description": "Fluorescence threshold used to determine Cq."
                },
                "fb_baseline": {
                  "type": "number",
                  "description": "Baseline fluorescence independent of amplification."
                },
                "arn": {
                  "type": "number",
                  "description": "Normalized reporter fluorescence (ARn = Rn+ − Rn−)."
                },
                "data_analysis": {
                  "type": "object",
                  "description": "Parameters for data analysis in real-time PCR.",
                  "properties": {
                    "method": {
                      "type": "string",
                      "description": "Method used for data analysis.",
                      "enum": [
                        "Cq",
                        "ΔΔCq",
                        "standard curve",
                        "sigmoidal curve fitting",
                        "efficiency-based",
                        "other"
                      ]
                    },
                    "normalization": {
                      "type": "string",
                      "description": "Method for normalization."
                    },
                    "efficiency_calculation": {
                      "type": "string",
                      "description": "Method for calculating amplification efficiency."
                    },
                    "dynamic_range": {
                      "type": "string",
                      "description": "Dynamic range of the assay in orders of magnitude."
                    },
                    "limit_of_detection": {
                      "type": "number",
                      "description": "Limit of detection (LOD) for the assay in copies or ng."
                    },
                    "limit_of_blank": {
                      "type": "number",
                      "description": "Limit of blank (LOB) for the assay."
                    }
                  },
                  "required": [
                    "method"
                  ]
                },
                "performance_metrics": {
                  "type": "object",
                  "description": "Performance metrics for evaluating qPCR curve analysis methods.",
                  "properties": {
                    "bias": {
                      "type": "number",
                      "description": "Ratio of mean F0 for highest vs. lowest input (expected = input fold difference, e.g., 10,000 for 4 log10 dilution series)."
                    },
                    "precision": {
                      "type": "number",
                      "description": "Within-triplicate variance of observed F0 values."
                    },
                    "resolution": {
                      "type": "number",
                      "description": "Smallest detectable fold-difference at 5% significance level."
                    },
                    "linearity": {
                      "type": "number",
                      "description": "Variance due to deviation from the regression line of log(input) vs. log(F0)."
                    },
                    "amplification_efficiency": {
                      "type": "number",
                      "description": "Amplification efficiency per cycle as fold increase (1–2).",
                      "minimum": 0,
                      "maximum": 2
                    },
                    "dynamic_range": {
                      "type": "string",
                      "description": "Dynamic range of the assay in orders of magnitude."
                    }
                  }
                },
                "ddpcr_analysis": {
                  "type": "object",
                  "description": "Analysis parameters specific to ddPCR, including thresholding and error correction.",
                  "properties": {
                    "absolute_quantification": {
                      "type": "boolean",
                      "description": "Indicates if absolute quantification was performed."
                    },
                    "poisson_correction": {
                      "type": "boolean",
                      "description": "Indicates whether Poisson correction was applied to account for droplet partitioning variability."
                    },
                    "droplet_classification": {
                      "type": "object",
                      "description": "Parameters for droplet classification.",
                      "properties": {
                        "positive_droplets": {
                          "type": "integer",
                          "description": "Number of positive droplets detected.",
                          "minimum": 0
                        },
                        "negative_droplets": {
                          "type": "integer",
                          "description": "Number of negative droplets detected.",
                          "minimum": 0
                        },
                        "total_droplets": {
                          "type": "integer",
                          "description": "Total number of droplets analyzed.",
                          "minimum": 1
                        },
                        "threshold_method": {
                          "type": "string",
                          "description": "Method used to set the threshold for droplet classification."
                        }
                      },
                      "required": [
                        "positive_droplets",
                        "negative_droplets",
                        "total_droplets"
                      ]
                    },
                    "mutation_detection": {
                      "type": "object",
                      "description": "Parameters for mutation detection in ddPCR.",
                      "properties": {
                        "mutation_type": {
                          "type": "string",
                          "description": "Type of mutation detected."
                        },
                        "allele_frequency": {
                          "type": "number",
                          "description": "Allele frequency of the detected mutation.",
                          "minimum": 0,
                          "maximum": 1
                        },
                        "limit_of_detection": {
                          "type": "number",
                          "description": "Limit of detection for the mutation assay."
                        }
                      }
                    }
                  }
                }
              }
            },
            "dot_blot": {
              "type": "object",
              "description": "Details for dot blot detection using ASO probes.",
              "properties": {
                "membrane_type": {
                  "type": "string",
                  "description": "Type of membrane used for dot blot."
                },
                "denaturation_method": {
                  "type": "string",
                  "description": "Method used to denature DNA for dot blot."
                },
                "fixation_method": {
                  "type": "string",
                  "description": "Method used to fix DNA to the membrane."
                },
                "probe_label": {
                  "type": "string",
                  "description": "Labeling method for the probe."
                }
              }
            },
            "autoradiography": {
              "type": "object",
              "description": "Details for autoradiographic detection.",
              "properties": {
                "exposure_time": {
                  "type": "number",
                  "description": "Duration of autoradiographic exposure in hours.",
                  "minimum": 0
                },
                "temperature": {
                  "type": "number",
                  "description": "Temperature during exposure in °C."
                },
                "intensification_screen": {
                  "type": "boolean",
                  "description": "Whether an intensification screen was used."
                }
              }
            }
          }
        }
      },
      "required": [
        "method"
      ]
    },
    "restriction_analysis": {
      "type": "object",
      "description": "Post-PCR restriction enzyme digestion for allele discrimination (e.g., PCR-OR).",
      "properties": {
        "enzymes": {
          "type": "array",
          "description": "Restriction enzymes used.",
          "items": {
            "type": "string"
          }
        },
        "digestion_conditions": {
          "type": "object",
          "description": "Reaction conditions used for the restriction enzyme digestion.",
          "properties": {
            "temperature": {
              "type": "number",
              "description": "Temperature for digestion in °C.",
              "minimum": 0
            },
            "time": {
              "type": "number",
              "description": "Duration of digestion in minutes.",
              "minimum": 0
            },
            "buffer": {
              "type": "string",
              "description": "Buffer used for digestion."
            }
          },
          "required": [
            "temperature",
            "time"
          ]
        },
        "sequential_digestion": {
          "type": "boolean",
          "description": "Indicates if enzymes were used sequentially."
        }
      }
    },
    "efficiency_metrics": {
      "type": "object",
      "description": "Amplification efficiency and yield metrics.",
      "properties": {
        "amplification_efficiency": {
          "type": "number",
          "description": "Efficiency per cycle as fold increase (1–2).",
          "minimum": 0,
          "maximum": 2
        },
        "total_amplification": {
          "type": "number",
          "description": "Total fold amplification.",
          "minimum": 0
        },
        "cq_value": {
          "type": "number",
          "description": "Quantification cycle (Cq/Ct) at which sample fluorescence crosses the detection threshold."
        },
        "dynamic_range": {
          "type": "string",
          "description": "Dynamic range of the assay in orders of magnitude."
        },
        "calculation_method": {
          "type": "string",
          "description": "Method used to calculate efficiency."
        },
        "efficiency_model": {
          "type": "string",
          "description": "Assumption about PCR efficiency: whether it is constant across cycles or decreases progressively. Influences the choice of curve analysis method.",
          "enum": [
            "constant",
            "continuously decreasing"
          ]
        }
      }
    },
    "reaction_volume": {
      "type": "number",
      "description": "Total PCR reaction volume in µL.",
      "minimum": 0
    },
    "experimental_parameters": {
      "type": "object",
      "description": "Additional experimental conditions and observations.",
      "properties": {
        "specificity": {
          "type": "string",
          "description": "Description of amplification specificity."
        },
        "mutagenesis": {
          "type": "object",
          "description": "Details of intentional mutations introduced via primers.",
          "properties": {
            "type": {
              "type": "string",
              "description": "Type of mutagenesis."
            },
            "sequence_added": {
              "type": "string",
              "description": "Sequence added via primer modifications (5' to 3').",
              "pattern": "^[ATCGatcg]+$"
            },
            "position": {
              "type": "integer",
              "description": "Position of the mutation in the amplicon (1-based indexing).",
              "minimum": 1
            }
          }
        },
        "notes": {
          "type": "string",
          "description": "Additional observations."
        },
        "automation": {
          "type": "boolean",
          "description": "Indicates if the PCR process was automated."
        },
        "contamination_control": {
          "type": "string",
          "description": "Methods used to control contamination."
        },
        "inhibition_control": {
          "type": "string",
          "description": "Methods used to control or assess inhibition."
        }
      }
    },
    "controls": {
      "type": "object",
      "description": "Experimental controls.",
      "properties": {
        "negative_control": {
          "type": "boolean",
          "description": "Description of negative control sample used to monitor for false-positive reactions."
        },
        "wild_type_control": {
          "type": "boolean",
          "description": "Description of wild-type control sample containing exclusively the wild-type sequence for comparison."
        },
        "no_template_control": {
          "type": "boolean",
          "description": "Indicates if a no-template control was used."
        },
        "no_reverse_transcriptase_control": {
          "type": "boolean",
          "description": "Indicates if a no-reverse transcriptase control was used for RT-qPCR experiments."
        },
        "positive_control": {
          "type": "boolean",
          "description": "Positive control details."
        }
      }
    }
  },
  "required": [
    "experiment_metadata",
    "reaction_components",
    "thermal_cycling_conditions",
    "amplicon",
    "detection_method",
    "reaction_volume"
  ],
  "unevaluatedProperties": false
}
