AMI-M1
Description
AML-M1 (Acute Myeloid Leukemia, French-American-British Classification M1) Definition: AML-M1 is a subtype of acute myeloid leukemia characterized by a proliferation of myeloblasts (immature white blood cells) with minimal maturation. It is classified under the FAB (French-American-British) system as M1, which means “without maturation.” Key Features: Bone marrow and blood contain ≥ 20% myeloblasts with minimal differentiation into mature cells. Myeloblasts typically lack significant granulocytic maturation beyond the blast stage. Common markers: CD13, CD33 are usually positive, HLA-DR often positive. Clinical symptoms: fatigue, anemia, infections, bleeding tendencies due to bone marrow failure. Diagnosis: Bone marrow biopsy showing ≥ 20% myeloblasts. Immunophenotyping showing expression of myeloid markers such as CD13, CD33. Cytogenetic and molecular testing to identify mutations (e.g., FLT3, NPM1) that guide prognosis and treatment. Treatment: Typically involves intensive chemotherapy aimed at inducing remission. May include consolidation chemotherapy and hematopoietic stem cell transplantation in eligible patients. Prognosis: Prognosis depends on various factors including genetic mutations, patient age, and response to treatment. AML-M1 has a variable prognosis; patients with favorable mutations have better outcomes.
Files
Steps to reproduce
import pandas as pd import plotly.express as px from dash import Dash, html, dcc, Input, Output, State, dash_table import dash_bootstrap_components as dbc # Start app app = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP]) app.layout = dbc.Container([ html.H2("AML-M1 Diagnostic Assistant", className="my-4 text-center"), dbc.Row([ dbc.Col([ dcc.Upload( id='upload-data', children=html.Div([ '📤 Drag and Drop or ', html.A('Select a CSV File') ]), style={ 'width': '100%', 'height': '60px', 'lineHeight': '60px', 'borderWidth': '1px', 'borderStyle': 'dashed', 'borderRadius': '5px', 'textAlign': 'center', 'margin': '10px' }, multiple=False ), html.Div(id='output-diagnosis') ], width=6), dbc.Col([ dcc.Graph(id='blast-plot') ], width=6) ]), dbc.Row([ html.Hr(), html.H5("Sample CSV Format:"), dash_table.DataTable( id='example-table', columns=[ {"name": i, "id": i} for i in ["PatientID", "Blasts", "CD13", "CD33", "HLA_DR", "FLT3"] ], data=[{ "PatientID": "P001", "Blasts": 93, "CD13": "Positive", "CD33": "Positive", "HLA_DR": "Positive", "FLT3": "Negative" }], style_table={'overflowX': 'auto'} ) ]) ]) def interpret_row(row): if row['Blasts'] >= 90 and row['CD13'] == 'Positive' and row['CD33'] == 'Positive': return "🔴 Likely AML-M1" elif row['Blasts'] > 50: return "🟠 Suspicious - Further Testing Needed" else: return "🟢 Unlikely AML-M1" @app.callback( [Output('output-diagnosis', 'children'), Output('blast-plot', 'figure')], [Input('upload-data', 'contents')], [State('upload-data', 'filename')] ) def analyze_csv(contents, filename): if contents is None: raise dash.exceptions.PreventUpdate import io, base64 content_type, content_string = contents.split(',') decoded = base64.b64decode(content_string) df = pd.read_csv(io.StringIO(decoded.decode('utf-8'))) df['Diagnosis'] = df.apply(interpret_row, axis=1) diagnosis_table = dash_table.DataTable( columns=[{"name": i, "id": i} for i in df.columns], data=df.to_dict('records'), style_table={'overflowX': 'auto'}, style_cell={'textAlign': 'center'} ) fig = px.bar(df, x='PatientID', y='Blasts', color='Diagnosis', title='Blasts % by Patient') return diagnosis_table, fig if __name__ == '__main__': app.run(debug=True, port=8051)