coucou pour le moment j'ai une présentation comme ...
Criado em: 11 de novembro de 2025
Respondido usando GPT-5 Thinking por Chat01
Criado em: 11 de novembro de 2025
Respondido usando GPT-5 Thinking por Chat01
coucou pour le moment j'ai une présentation comme ca. Je vais parler de ça globalement. Subject: You are invited to participate in the design of future M2 metro trains. Its operation is considered critical in the event of a pandemic (testing, patient access), such as COVID. What would be the most relevant design features for the trains (surfaces, ventilation) to prevent the spread of the epidemic? Hazard identification: hazard present and health risks (with degree of evidence) - Lore Background information: explain context. Protective and aggravating factors that can affect the risk. - Emilie Risk assessment: high or low risk. Any data on accidents or illnesses? - Emilie Relevant regulations: legal provisions or rules of good practice that apply in this situation. – Lore + Solution TITLE: Pandemic-safe design for Metro trains WHO definition of pandemics: A pandemic is the worldwide spread of a new disease. Epidemic, pandemic and biological disasters are caused by hazards of organic origin, including bacteria, viruses, parasites, mosquitoes carrying disease-causing agents, and toxins or bioactive substances that occur naturally or are deliberately or unintentionally released. Talk about pandemics, what are the sources, the hazards and the risks à look at the most famous pandemics worldwide (included the most recent one: covid) Pandemics associated to public transportations. What are the factors that can affect the spread of pandemics in these environments. airborne transmission surface transmission: handrails, seat, button → contact hand-mouth/nose/eyes Lausanne M2 = underground + se renseigner sur type de siège, ventilation,... Peak hours → crowding Shared surface enclosed carriage low maintenance Data about pandemics spread in public transportation. Studies about COVID, real data about accidents and contagious people. depends on duration of exposure, surface materials Doubling ventilation rate can reduce airborne infection risk by >50%: https://www.mcmasterforum.org/docs/default-source/product-documents/living-evidence-syntheses/living-evidence-synthesis-15-2---effectiveness-of-ventilation-air-filtration-and-disinfection-for-reducing-transmission-of-respiratory-infectious-diseases-in-non-health-care-community-based-settings.pdf?sfvrsn=d98f1d5d_3 https://pubmed.ncbi.nlm.nih.gov/34456454/ SARS-CoV-2 survives up to 72h on plastic, 48h on stainless steel: https://www.nejm.org/doi/10.1056/NEJMc2004973 Regulations existent about air quality (?) J’ai pas réussi à trouver de règlementations..... Solution: STOP measures (substitution, technical/engineering solution, organizational and last Personal protective equipment). Evaluate the efficiency of substitution first, then if not possible or efficient pass to other solutions. Evaluate with existing data and arrive to a concrete conclusion. easy-to-clean surface: smooth seat → include regular disinfection + antimicrobial materials ?? open the doors automatically at each stop ventilation: HEPA filtration + direction du air flow Legislation: Swiss epidemcs act https://www.datalex.ch/en/expertises/1-epidemics-swiss-law-covid-19/ design project SIE 2024: https://www.epfl.ch/schools/enac/education/environmental-sciences-and-engineering/wp-content/uploads/2024/05/03_Gaillard-Festa_Girard.pdf Je n'aime pas trop la présentation pour le moment. Peux-tu l'améliorer ou la changer stp
Créer un nouveau design clair et élégant (fond clair, bleu acier, cuivre léger).
Ajouter des images réelles (Unsplash/Pexels) adaptées à chaque diapo.
Intégrer des icônes sobres pour appuyer le contenu.
Générer un PowerPoint .pptx prêt à télécharger avec une slide finale “Merci / Questions ?”.
python# %% # Create a French PowerPoint deck with a light, elegant theme (fond clair, bleu acier, cuivre léger) # and structured content for "Pandemic-safe design for Metro trains (M2)". # # Note: Internet is disabled in this environment, so real Unsplash/Pexels images can't be embedded. # Instead, each slide includes a clean "image placeholder" with a hyperlink to a relevant Unsplash/Pexels search. # from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.text import PP_ALIGN from pptx.dml.color import RGBColor from pptx.enum.shapes import MSO_SHAPE from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE from pptx.oxml.xmlchemy import OxmlElement from pptx.oxml.ns import qn prs = Presentation() # --- Color palette --- BG = RGBColor(247, 250, 252) # very light background #F7FAFC STEEL = RGBColor(70, 130, 180) # steel blue #4682B4 COPPER = RGBColor(196, 135, 97) # light copper-ish DK = RGBColor(40, 48, 61) # dark text MD = RGBColor(90, 102, 120) # mid text LT = RGBColor(220, 226, 234) # light line # Helper: add background rectangle def set_slide_bg(slide, color=BG): # full-size rectangle as background left, top = Inches(0), Inches(0) width, height = prs.slide_width, prs.slide_height bg = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height) bg.fill.solid() bg.fill.fore_color.rgb = color bg.line.fill.background() # Helper: stylized title bar def add_title(slide, title_text, subtitle_text=None): # Title bar title_box = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(0.6), Inches(0.5), prs.slide_width - Inches(1.2), Inches(1.2)) title_box.fill.solid() title_box.fill.fore_color.rgb = RGBColor(255, 255, 255) title_box.line.color.rgb = LT # accent line accent = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(0.6), Inches(0.5), Inches(0.25), Inches(1.2)) accent.fill.solid() accent.fill.fore_color.rgb = STEEL accent.line.fill.background() # Title text tf = title_box.text_frame tf.clear() p = tf.paragraphs[0] run = p.add_run() run.text = title_text p.alignment = PP_ALIGN.LEFT run.font.name = "Calibri" run.font.size = Pt(36) run.font.bold = True run.font.color.rgb = DK if subtitle_text: p = tf.add_paragraph() r2 = p.add_run() r2.text = subtitle_text p.space_before = Pt(5) r2.font.name = "Calibri" r2.font.size = Pt(16) r2.font.color.rgb = MD # Helper: content box def add_content(slide, items, left=0.9, top=2.0, width=None, height=None, font_size=20): if width is None: width = (prs.slide_width - Inches(1.8)) if height is None: height = Inches(4.5) box = slide.shapes.add_textbox(Inches(left), Inches(top), width, height) tf = box.text_frame tf.word_wrap = True tf.clear() for i, text in enumerate(items): p = tf.add_paragraph() if i > 0 else tf.paragraphs[0] run = p.add_run() run.text = text run.font.name = "Calibri" run.font.size = Pt(font_size) run.font.color.rgb = DK p.level = 0 if i == 0 else 1 if i == 0: # first bullet as intro line without bullet p.level = 0 p._pPr = p._p.get_or_add_pPr() # Turn bullets on for following items else: p.level = 1 p.font = None p._pPr = p._p.get_or_add_pPr() bu = OxmlElement('a:buChar') bu.set(qn('char'), u'•') p._pPr.insert(0, bu) return box # Helper: "icon" composed of shapes (very minimalistic) def add_icon_ventilation(slide, left, top, size=1.0): # three arrows indicating airflow for i in range(3): arrow = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RIGHT_ARROW, Inches(left), Inches(top + i*0.5*size), Inches(1.2*size), Inches(0.3*size)) arrow.fill.solid() arrow.fill.fore_color.rgb = STEEL arrow.line.fill.background() def add_icon_shield(slide, left, top, size=1.0): # use a pentagon to suggest a shield shp = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.PENTAGON, Inches(left), Inches(top), Inches(0.9*size), Inches(1.1*size)) shp.fill.solid() shp.fill.fore_color.rgb = COPPER shp.line.fill.background() def add_icon_virus(slide, left, top, size=1.0): # central circle with small 'spikes' c = slide.shapes.add_shape(MSO_SHAPE.OVAL, Inches(left), Inches(top), Inches(0.6*size), Inches(0.6*size)) c.fill.solid() c.fill.fore_color.rgb = RGBColor(230, 150, 150) c.line.fill.background() for dx, dy in [(-0.15,0), (0.65,0), (0.25,-0.15), (0.25,0.65), (-0.1,-0.1), (0.55,0.55), (-0.1,0.55), (0.55,-0.1)]: line = slide.shapes.add_connector(1, Inches(left+0.3), Inches(top+0.3), Inches(left+dx+0.3), Inches(top+dy+0.3)) line.line.color.rgb = RGBColor(230, 150, 150) # Helper: image placeholder with link suggestion def add_image_placeholder(slide, keywords, link): ph = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, Inches(0.9), Inches(6.1), prs.slide_width - Inches(1.8), Inches(1.1)) ph.fill.solid() ph.fill.fore_color.rgb = RGBColor(255,255,255) ph.line.color.rgb = LT tf = ph.text_frame tf.clear() p = tf.paragraphs[0] run = p.add_run() run.text = f"📷 Placez ici une image (suggestion : {keywords}) • Lien: {link}" run.font.name = "Calibri" run.font.size = Pt(12) run.font.color.rgb = MD # Helper: footnote/citation area def add_citation(slide, text): tx = slide.shapes.add_textbox(Inches(0.9), Inches(5.9), prs.slide_width - Inches(1.8), Inches(0.3)) tf = tx.text_frame tf.clear() p = tf.paragraphs[0] run = p.add_run() run.text = text run.font.name = "Calibri" run.font.size = Pt(10) run.font.color.rgb = MD # --- Slides --- # 1) Title slide s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Pandemic-safe design pour le métro M2", "Conception d’un matériel roulant résilient en situation de pandémie") sub = s.shapes.add_textbox(Inches(0.9), Inches(2.1), prs.slide_width - Inches(1.8), Inches(1.2)) tf = sub.text_frame tf.clear() p = tf.paragraphs[0] r = p.add_run() r.text = "Sujet : Participation au design des futurs trains M2 (surfaces, ventilation, exploitation) pour limiter la propagation d’épidémies/pandémies." r.font.name = "Calibri"; r.font.size = Pt(18); r.font.color.rgb = DK p = tf.add_paragraph(); r = p.add_run() r.text = "Auteurs : Lore — Emilie | Date : 11 novembre 2025" r.font.name = "Calibri"; r.font.size = Pt(14); r.font.color.rgb = MD add_image_placeholder(s, "metro underground, commuters", "https://unsplash.com/s/photos/metro-train") # 2) Contexte & définitions s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Contexte & définitions", "OMS : « Une pandémie est la propagation mondiale d’une nouvelle maladie ».") add_icon_virus(s, 0.9, 1.8, 1.2) items = [ "Pourquoi le M2 est critique en pandémie (accès patients, tests, personnel essentiel)", "Différence épidémie/pandémie : extension géographique et niveau d’immunité collective", "Menaces d’origine biologique : virus (ex. SARS‑CoV‑2), bactéries, toxines", ] add_content(s, items) add_citation(s, "Réf : OMS – Pandemics (who.int)") add_image_placeholder(s, "world map health, pandemic concept", "https://unsplash.com/s/photos/pandemic") # 3) Modes de transmission s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Modes de transmission en milieu fermé", "Priorité aux aérosols en espaces clos; fomites en rôle secondaire") add_icon_virus(s, 0.9, 1.8, 1.0) add_icon_ventilation(s, 2.0, 1.8, 1.0) items = [ "Aéroportée (gouttelettes/aérosols) : dominante en intérieur mal ventilé", "Surfaces (fomites) : mains → yeux/nez/bouche; risque moindre mais réel", "Facteurs clefs : durée d’exposition, densité, activité vocale, ventilation/filtration" ] add_content(s, items) add_citation(s, "Réf : NEJM 2020 (stabilité sur surfaces) ; synthèses ventilation 2023–2024") add_image_placeholder(s, "crowded subway, interior", "https://unsplash.com/s/photos/crowded-subway") # 4) Transports publics : facteurs de risque s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Transports publics : facteurs", "Espaces clos, contact rapproché, surfaces partagées") items = [ "Heures de pointe → sur-occupation", "Rames fermées, temps d’attente en station, renouvellement d’air variable", "Surfaces partagées : barres, boutons, sièges, valideurs", ] add_content(s, items) add_image_placeholder(s, "hand on handrail metro", "https://unsplash.com/s/photos/handrail-train") # 5) Cas du M2 Lausanne (à préciser/compléter) s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Cas d’étude : Lausanne M2", "Ligne souterraine, métro pneumatique, forte affluence en pointe") items = [ "Trains bi-caisses automatisés; portes larges; stations souterraines clés (Lausanne-Gare, CHUV, Flon)", "Contraintes locales : fortes pentes, quais étroits à certaines stations, temps de stationnement court", "Données à confirmer : type de sièges (lisses / tissus), stratégie de ventilation embarquée et en station" ] add_content(s, items) add_image_placeholder(s, "lausanne metro, switzerland city", "https://unsplash.com/s/photos/lausanne") # 6) Données clés – Ventilation & filtration s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Données clés – Ventilation & filtration", "Impact mesurable sur le risque d’infection") add_icon_ventilation(s, 0.9, 1.8, 1.2) items = [ "Modélisation (Wells‑Riley modifié) : passer de 0,5 à 6 ACH ≈ divise par ~2 le risque estimé", "Synthèses ‘living evidence’ : ventilation/filtration efficaces en milieux non‑soins", "HEPA/MERV13+ utiles quand ventilation limitée; contrôle par CO₂ pour suivi indirect" ] add_content(s, items) add_citation(s, "Réf : Aganovic et al., Build. Environ. 2021 ; McMaster LES 15.2 (2024)") add_image_placeholder(s, "airflow diagram, ventilation", "https://unsplash.com/s/photos/airflow") # 7) Données clés – Surfaces s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Données clés – Surfaces & nettoyage", "SARS‑CoV‑2 plus stable sur plastique/inox que sur cuivre/carton") items = [ "Jusqu’à 2–3 jours détectable sur plastique/inox (conditions labo), beaucoup moins sur cuivre", "Nettoyage/désinfection ciblés → réduction du risque de fomites", "Matériaux lisses, non poreux, jointoiement minimisé pour un entretien rapide" ] add_content(s, items) add_citation(s, "Réf : NEJM 2020 (van Doremalen et al.)") add_image_placeholder(s, "cleaning train, disinfecting", "https://unsplash.com/s/photos/disinfecting") # 8) Identification des dangers & preuves s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Identification des dangers", "Niveaux de risque & degré de preuve") tbl = s.shapes.add_table(rows=4, cols=3, left=Inches(0.9), top=Inches(2.0), width=prs.slide_width - Inches(1.8), height=Inches(2.8)).table tbl.columns[0].width = Inches(4.2) tbl.columns[1].width = Inches(2.2) tbl.columns[2].width = Inches(2.2) hdrs = ["Danger", "Risque santé", "Preuves"] for j,h in enumerate(hdrs): cell = tbl.cell(0,j) cell.text = h cell.text_frame.paragraphs[0].runs[0].font.bold = True cell.fill.solid(); cell.fill.fore_color.rgb = RGBColor(255,255,255) cell.text_frame.paragraphs[0].runs[0].font.color.rgb = DK rows = [ ("Transmission aéroportée (aérosols)", "Élevé", "Fort"), ("Gouttelettes à courte portée", "Modéré", "Fort"), ("Surfaces (fomites)", "Faible–modéré", "Modéré"), ] for i,(a,b,c) in enumerate(rows, start=1): for j,val in enumerate([a,b,c]): cell = tbl.cell(i,j) cell.text = val for p in cell.text_frame.paragraphs: for r in p.runs: r.font.size = Pt(14); r.font.name = "Calibri"; r.font.color.rgb = DK add_citation(s, "Sources multiples 2020–2024 (NEJM; revues ventilation/filtration)") add_image_placeholder(s, "scientific table, risk", "https://unsplash.com/s/photos/science") # 9) Facteurs aggravants / protecteurs s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Facteurs aggravants & protecteurs", "Ce qui augmente ou diminue le risque dans une rame") items = [ "Aggravants : sur-occupation, chant/parole forte, durée longue, entretien rare", "Protecteurs : ventilation élevée, portes ouvertes automatiquement, filtration HEPA", "Géométrie intérieure : circulation d’air, obstacles, sièges lisses et faciles à nettoyer" ] add_content(s, items) add_image_placeholder(s, "busy platform, metro", "https://unsplash.com/s/photos/metro-platform") # 10) Évaluation de risque (scénarios) s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Évaluation du risque (scénarios)", "Exposition courte vs longue, faible vs forte affluence") items = [ "Faible affluence, ventilation élevée → risque faible", "Pointe (6–8 pax/m²), ventilation faible → risque élevé", "Scénarios spéciaux : rame immobilisée, incident technique (ventilation dégradée)" ] add_content(s, items) add_image_placeholder(s, "heatmap risk, crowd", "https://unsplash.com/s/photos/crowd") # 11) Cadre réglementaire & bonnes pratiques s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Cadre réglementaire & bonnes pratiques", "Références utiles pour M2 (CH/UE/UITP)") add_icon_shield(s, 0.9, 1.8, 1.1) items = [ "Suisse : Loi sur les épidémies (EpidA) – cadre pour mesures sanitaires", "Normes CEN : EN 14750 (urbain/metro), EN 13129 (grandes lignes) – paramètres de confort & essais AC", "Lignes directrices UITP/FTA/FEMA : continuité d’exploitation, nettoyage, ventilation, information" ] add_content(s, items) add_image_placeholder(s, "legal document, standards", "https://unsplash.com/s/photos/standards") # 12) Stratégie STOP (hiérarchie des mesures) s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Stratégie STOP (hiérarchie)", "Substitution, Techniques, Organisation, Protection individuelle") items = [ "S – Substitution : réduire l’exposition (portes auto à chaque arrêt, réduire surfaces tactiles)", "T – Techniques : ventilation/filtration, flux d’air maîtrisé, UV‑C embarqué (si conforme)", "O – Organisation : horodatage / étalement des pics, protocole de nettoyage, monitoring CO₂/KPI", "P – EPI : masques selon niveau d’alerte sanitaire" ] add_content(s, items) add_image_placeholder(s, "hierarchy pyramid, safety", "https://unsplash.com/s/photos/safety") # 13) Recommandations design – Surfaces & aménagement s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Design – Surfaces & aménagement", "Objectif : nettoyage rapide, moindre réservoirs") items = [ "Sièges lisses (coquilles moulées), peu de joints, revêtements non poreux", "Barres/poignées : inox traité ou revêtements anti-traces; limiter niches et interstices", "Boutons : privilégier commandes mains‑libres (ou grandes cibles étanches) ; signalétique claire" ] add_content(s, items) add_image_placeholder(s, "train interior seats clean", "https://unsplash.com/s/photos/train-interior") # 14) Recommandations design – Ventilation & flux d’air s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Design – Ventilation & flux d’air", "Cibles et options techniques") add_icon_ventilation(s, 0.9, 1.8, 1.0) items = [ "Renouvellement d’air : viser ≥ 6 ACH en charge, pilotage adaptatif par CO₂", "Filtration : MERV13+/HEPA si constructible; maintenance & étanchéité des caissons", "Flux dirigé : insufflation au plafond, extraction haute, éviter recirculations entre zones debout" ] add_content(s, items) add_citation(s, "Réf : revues ventilation 2021–2024 ; normes EN 14750/13129") add_image_placeholder(s, "hvac ducts, airflow arrows", "https://unsplash.com/s/photos/hvac") # 15) UX / information voyageurs s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "UX & information voyageurs", "Rassurer, guider, lisser les pics") items = [ "Affichage embarqué : remplissage estimé, recommandations d’embarquement réparti", "Ouverture automatique des portes à chaque arrêt; temporisation pour échanges d’air en station", "Pictogrammes sobres sur geste barrière contextuels au niveau d’alerte" ] add_content(s, items) add_image_placeholder(s, "passenger info screen metro", "https://unsplash.com/s/photos/train-display") # 16) Exploitation & maintenance s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Exploitation & maintenance", "Procédures et suivi") items = [ "Plan de nettoyage ciblé (hauts points de contact) avec fréquences modulables par alerte", "Programme MEP : contrôle filtres, caissons, fuites; registre CO₂ et pannes ventilation", "Essais type (EN) à réception et périodiques; audits inopinés" ] add_content(s, items) add_image_placeholder(s, "maintenance train, technician", "https://unsplash.com/s/photos/train-maintenance") # 17) Impact/coût vs bénéfices s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Impact & coût – cadrage rapide", "Choisir les ‘quick wins’ à fort effet") tbl = s.shapes.add_table(rows=5, cols=3, left=Inches(0.9), top=Inches(2.0), width=prs.slide_width - Inches(1.8), height=Inches(3.0)).table for j,h in enumerate(["Mesure", "Impact attendu", "Complexité/coût"]): cell = tbl.cell(0,j); cell.text = h cell.text_frame.paragraphs[0].runs[0].font.bold = True rows = [ ("Ouverture portes auto + temporisation", "↓ risque air (renouvellement)", "Faible"), ("HEPA/MERV13+ (si intégrable)", "↓ risque air (élevé)", "Moyen à élevé"), ("Sièges lisses & surfaces jointes", "↓ risque fomites + nettoyage", "Moyen"), ("Capteurs CO₂ embarqués", "Pilotage + preuve de qualité d’air", "Faible"), ] for i,(a,b,c) in enumerate(rows, start=1): tbl.cell(i,0).text = a; tbl.cell(i,1).text = b; tbl.cell(i,2).text = c # 18) Feuille de route s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Feuille de route (proposition)", "Pilotes ➜ industrialisation") items = [ "S1 : Audit ventilation actuel (mesures CO₂, fumigènes), priorisation contraintes d’intégration", "S2 : Pilote 1 rame – filtres + monitoring ; Pilote 1 station – temporisation portes", "S3 : Évaluation (KPI contamination estimée, retours voyageurs), déploiement progressif" ] add_content(s, items) add_image_placeholder(s, "roadmap board, planning", "https://unsplash.com/s/photos/roadmap") # 19) Références (sélection) s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Références (sélection)", "Principales sources citées") ref_text = ( "• OMS – Pandemics (WHO)\n" "• van Doremalen et al., NEJM 2020 – Stabilité de SARS‑CoV‑2 sur surfaces\n" "• Aganovic et al., Build. Environ. 2021 – Ventilation vs humidité (Wells‑Riley)\n" "• McMaster Forum LES 15.2 (2024) – Ventilation/filtration/disinfection\n" "• EN 14750:2024 ; EN 13129:2016 – Climatisation matériel roulant ferroviaire\n" "• Epidemics Act (Suisse) – BAG (FOPH)\n" "• Études transport : Clinical Infectious Diseases (risque trains), UITP guidelines" ) add_content(s, [ref_text], font_size=16) add_image_placeholder(s, "research papers, references", "https://unsplash.com/s/photos/research-paper") # 20) Merci / Questions s = prs.slides.add_slide(prs.slide_layouts[6]) set_slide_bg(s) add_title(s, "Merci / Questions ?", "Contact : Lore & Emilie — Projet M2") # Decorative band band = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(0.6), Inches(5.8), prs.slide_width - Inches(1.2), Inches(0.7)) band.fill.solid(); band.fill.fore_color.rgb = STEEL band.line.fill.background() cap = s.shapes.add_textbox(Inches(0.6), Inches(6.6), prs.slide_width - Inches(1.2), Inches(0.6)) cap_tf = cap.text_frame; cap_tf.clear() p = cap_tf.paragraphs[0]; rn = p.add_run() rn.text = "Merci pour votre attention." rn.font.name = "Calibri"; rn.font.size = Pt(18); rn.font.color.rgb = DK # Save deck out_path = "/mnt/data/Design_Metro_M2_Pandemie.pptx" prs.save(out_path) out_path
python# %% from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.text import PP_ALIGN from pptx.dml.color import RGBColor from pptx.enum.shapes import MSO_SHAPE, MSO_AUTO_SHAPE_TYPE prs = Presentation() # --- Color palette --- BG = RGBColor(247, 250, 252) # very light background #F7FAFC STEEL = RGBColor(70, 130, 180) # steel blue #4682B4 COPPER = RGBColor(196, 135, 97) # light copper-ish DK = RGBColor(40, 48, 61) # dark text MD = RGBColor(90, 102, 120) # mid text LT = RGBColor(220, 226, 234) # light line def set_slide_bg(slide, color=BG): left, top = Inches(0), Inches(0) width, height = prs.slide_width, prs.slide_height bg = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height) bg.fill.solid(); bg.fill.fore_color.rgb = color bg.line.fill.background() def add_title(slide, title_text, subtitle_text=None): title_box = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(0.6), Inches(0.5), prs.slide_width - Inches(1.2), Inches(1.2)) title_box.fill.solid(); title_box.fill.fore_color.rgb = RGBColor(255, 255, 255) title_box.line.color.rgb = LT accent = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(0.6), Inches(0.5), Inches(0.25), Inches(1.2)) accent.fill.solid(); accent.fill.fore_color.rgb = STEEL; accent.line.fill.background() tf = title_box.text_frame; tf.clear() p = tf.paragraphs[0]; run = p.add_run(); run.text = title_text p.alignment = PP_ALIGN.LEFT; run.font.name = "Calibri"; run.font.size = Pt(36); run.font.bold = True; run.font.color.rgb = DK if subtitle_text: p2 = tf.add_paragraph(); r2 = p2.add_run(); r2.text = subtitle_text r2.font.name = "Calibri"; r2.font.size = Pt(16); r2.font.color.rgb = MD def add_content(slide, items, left=0.9, top=2.0, width=None, height=None, font_size=20): if width is None: width = (prs.slide_width - Inches(1.8)) if height is None: height = Inches(4.5) box = slide.shapes.add_textbox(Inches(left), Inches(top), width, height) tf = box.text_frame; tf.word_wrap = True; tf.clear() for i, text in enumerate(items): p = tf.add_paragraph() if i > 0 else tf.paragraphs[0] run = p.add_run() run.text = text if i == 0 else f"• {text}" run.font.name = "Calibri"; run.font.size = Pt(font_size); run.font.color.rgb = DK return box def add_icon_ventilation(slide, left, top, size=1.0): for i in range(3): arrow = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.RIGHT_ARROW, Inches(left), Inches(top + i*0.5*size), Inches(1.2*size), Inches(0.3*size)) arrow.fill.solid(); arrow.fill.fore_color.rgb = STEEL; arrow.line.fill.background() def add_icon_shield(slide, left, top, size=1.0): shp = slide.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.PENTAGON, Inches(left), Inches(top), Inches(0.9*size), Inches(1.1*size)) shp.fill.solid(); shp.fill.fore_color.rgb = COPPER; shp.line.fill.background() def add_icon_virus(slide, left, top, size=1.0): c = slide.shapes.add_shape(MSO_SHAPE.OVAL, Inches(left), Inches(top), Inches(0.6*size), Inches(0.6*size)) c.fill.solid(); c.fill.fore_color.rgb = RGBColor(230, 150, 150); c.line.fill.background() # simple "spikes" with small lines offsets = [(-0.15,0), (0.65,0), (0.25,-0.15), (0.25,0.65), (-0.1,-0.1), (0.55,0.55), (-0.1,0.55), (0.55,-0.1)] for dx, dy in offsets: line = slide.shapes.add_shape(MSO_SHAPE.LINE_INVERSE, Inches(left+0.3), Inches(top+0.3), Inches(left+dx+0.3), Inches(top+dy+0.3)) line.line.color.rgb = RGBColor(230, 150, 150) def add_image_placeholder(slide, keywords, link): ph = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, Inches(0.9), Inches(6.1), prs.slide_width - Inches(1.8), Inches(1.1)) ph.fill.solid(); ph.fill.fore_color.rgb = RGBColor(255,255,255); ph.line.color.rgb = LT tf = ph.text_frame; tf.clear() p = tf.paragraphs[0]; run = p.add_run() run.text = f"📷 Placez ici une image (suggestion : {keywords}) • Lien: {link}" run.font.name = "Calibri"; run.font.size = Pt(12); run.font.color.rgb = MD def add_citation(slide, text): tx = slide.shapes.add_textbox(Inches(0.9), Inches(5.9), prs.slide_width - Inches(1.8), Inches(0.3)) tf = tx.text_frame; tf.clear() p = tf.paragraphs[0]; run = p.add_run() run.text = text; run.font.name = "Calibri"; run.font.size = Pt(10); run.font.color.rgb = MD # --- Build slides --- # 1) Title s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Pandemic-safe design pour le métro M2", "Conception d’un matériel roulant résilient en situation de pandémie") sub = s.shapes.add_textbox(Inches(0.9), Inches(2.1), prs.slide_width - Inches(1.8), Inches(1.2)) tf = sub.text_frame; tf.clear() p = tf.paragraphs[0]; r = p.add_run() r.text = "Sujet : Participation au design des futurs trains M2 (surfaces, ventilation, exploitation) pour limiter la propagation d’épidémies/pandémies." r.font.name = "Calibri"; r.font.size = Pt(18); r.font.color.rgb = DK p = tf.add_paragraph(); r = p.add_run() r.text = "Auteurs : Lore — Emilie | Date : 11 novembre 2025" r.font.name = "Calibri"; r.font.size = Pt(14); r.font.color.rgb = MD add_image_placeholder(s, "metro underground, commuters", "https://unsplash.com/s/photos/metro-train") # 2) Contexte & définitions s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Contexte & définitions", "OMS : « Une pandémie est la propagation mondiale d’une nouvelle maladie ».") add_icon_virus(s, 0.9, 1.8, 1.2) items = [ "Pourquoi le M2 est critique en pandémie (accès patients, tests, personnel essentiel)", "Différence épidémie/pandémie : extension géographique et niveau d’immunité collective", "Menaces d’origine biologique : virus (ex. SARS‑CoV‑2), bactéries, toxines", ] add_content(s, items) add_citation(s, "Réf : OMS – Pandemics (who.int)") add_image_placeholder(s, "world map health, pandemic concept", "https://unsplash.com/s/photos/pandemic") # 3) Modes de transmission s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Modes de transmission en milieu fermé", "Priorité aux aérosols en espaces clos; fomites en rôle secondaire") add_icon_virus(s, 0.9, 1.8, 1.0); add_icon_ventilation(s, 2.0, 1.8, 1.0) items = [ "Aéroportée (gouttelettes/aérosols) : dominante en intérieur mal ventilé", "Surfaces (fomites) : mains → yeux/nez/bouche; risque moindre mais réel", "Facteurs clefs : durée d’exposition, densité, activité vocale, ventilation/filtration" ] add_content(s, items) add_citation(s, "Réf : NEJM 2020 (stabilité sur surfaces) ; synthèses ventilation 2023–2024") add_image_placeholder(s, "crowded subway, interior", "https://unsplash.com/s/photos/crowded-subway") # 4) Facteurs de risque s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Transports publics : facteurs", "Espaces clos, contact rapproché, surfaces partagées") items = ["Heures de pointe → sur-occupation", "Rames fermées, renouvellement d’air variable", "Surfaces partagées : barres, boutons, sièges, valideurs"] add_content(s, items) add_image_placeholder(s, "hand on handrail metro", "https://unsplash.com/s/photos/handrail-train") # 5) Cas M2 Lausanne s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Cas d’étude : Lausanne M2", "Ligne souterraine, métro pneumatique, forte affluence en pointe") items = [ "Trains bi-caisses automatisés; portes larges; stations souterraines clés (Lausanne-Gare, CHUV, Flon)", "Contraintes locales : fortes pentes, quais étroits, temps de stationnement court", "À confirmer : sièges (lisses/tissus), stratégie de ventilation embarquée et en station" ] add_content(s, items) add_image_placeholder(s, "lausanne metro, switzerland city", "https://unsplash.com/s/photos/lausanne") # 6) Données clés – Ventilation s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Données clés – Ventilation & filtration", "Impact mesurable sur le risque d’infection") add_icon_ventilation(s, 0.9, 1.8, 1.2) items = [ "Modélisation (Wells‑Riley modifié) : 0,5 ➜ 6 ACH ≈ risque divisé par ~2", "Synthèses ‘living evidence’ : ventilation/filtration efficaces (cadres non‑soins)", "HEPA/MERV13+ utiles quand la ventilation est limitée; pilotage par CO₂" ] add_content(s, items) add_citation(s, "Réf : Aganovic 2021 ; McMaster LES 15.2 (2024)") add_image_placeholder(s, "airflow diagram, ventilation", "https://unsplash.com/s/photos/airflow") # 7) Données clés – Surfaces s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Données clés – Surfaces & nettoyage", "SARS‑CoV‑2 plus stable sur plastique/inox que sur cuivre/carton") items = [ "Jusqu’à 2–3 jours détectable sur plastique/inox (conditions labo)", "Nettoyage/désinfection ciblés → réduction du risque de fomites", "Matériaux lisses, non poreux; jointoiement minimisé" ] add_content(s, items) add_citation(s, "Réf : NEJM 2020 (van Doremalen et al.)") add_image_placeholder(s, "cleaning train, disinfecting", "https://unsplash.com/s/photos/disinfecting") # 8) Identification des dangers (table simple par texte) s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Identification des dangers", "Niveaux de risque & degré de preuve") items = [ "Aérosols : risque ÉLEVÉ — preuves FORTES", "Gouttelettes courtes portées : risque MODÉRÉ — preuves FORTES", "Fomites/surfaces : risque FAIBLE–MODÉRÉ — preuves MODÉRÉES", ] add_content(s, items, font_size=18) add_citation(s, "Sources multiples 2020–2024 (NEJM; revues ventilation/filtration)") add_image_placeholder(s, "scientific table, risk", "https://unsplash.com/s/photos/science") # 9) Aggravants / protecteurs s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Facteurs aggravants & protecteurs", "Ce qui augmente/diminue le risque dans une rame") items = [ "Aggravants : sur-occupation, parole forte, durée longue, entretien rare", "Protecteurs : ventilation élevée, portes ouvertes automatiquement, filtration HEPA", "Conception intérieure : circulation d’air, obstacles, sièges lisses et faciles à nettoyer" ] add_content(s, items) add_image_placeholder(s, "busy platform, metro", "https://unsplash.com/s/photos/metro-platform") # 10) Évaluation du risque (scénarios) s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Évaluation du risque (scénarios)", "Exposition courte vs longue, faible vs forte affluence") items = [ "Faible affluence + ventilation élevée → risque faible", "Heures de pointe + ventilation faible → risque élevé", "Cas spéciaux : rame immobilisée (ventilation dégradée)" ] add_content(s, items) add_image_placeholder(s, "heatmap risk, crowd", "https://unsplash.com/s/photos/crowd") # 11) Cadre réglementaire s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Cadre réglementaire & bonnes pratiques", "Références CH/UE/UITP") add_icon_shield(s, 0.9, 1.8, 1.1) items = [ "Suisse : Loi sur les épidémies (EpidA) – cadre pour mesures sanitaires", "CEN : EN 14750 (urbain/metro), EN 13129 (grandes lignes) – confort & essais AC", "Guides UITP/FTA/FEMA : continuité d’exploitation, nettoyage, ventilation, info voyageurs" ] add_content(s, items) add_image_placeholder(s, "legal document, standards", "https://unsplash.com/s/photos/standards") # 12) Stratégie STOP s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Stratégie STOP (hiérarchie)", "Substitution, Techniques, Organisation, Protection individuelle") items = [ "S – Substitution : réduire l’exposition (portes auto, surfaces tactiles limitées)", "T – Techniques : ventilation/filtration, flux d’air maîtrisé, UV‑C conforme", "O – Organisation : étalement des pics, nettoyage ciblé, monitoring CO₂/KPI", "P – EPI : masques selon niveau d’alerte sanitaire" ] add_content(s, items) add_image_placeholder(s, "hierarchy pyramid, safety", "https://unsplash.com/s/photos/safety") # 13) Surfaces & aménagement s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Design – Surfaces & aménagement", "Objectif : nettoyage rapide, moins de réservoirs") items = [ "Sièges lisses (coques moulées), peu de joints, matériaux non poreux", "Barres/poignées : inox traité; éviter niches/interstices", "Boutons : mains‑libres ou grandes cibles étanches; signalétique claire" ] add_content(s, items) add_image_placeholder(s, "train interior seats clean", "https://unsplash.com/s/photos/train-interior") # 14) Ventilation & flux d’air s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Design – Ventilation & flux d’air", "Cibles et options techniques") add_icon_ventilation(s, 0.9, 1.8, 1.0) items = [ "Renouvellement d’air : viser ≥ 6 ACH en charge; asservi CO₂", "Filtration : MERV13+/HEPA si intégrable; maintenance des caissons", "Flux dirigé (plafond ➜ extraction haute), éviter recirculations" ] add_content(s, items) add_citation(s, "Réf : revues ventilation 2021–2024 ; EN 14750/13129") add_image_placeholder(s, "hvac ducts, airflow arrows", "https://unsplash.com/s/photos/hvac") # 15) UX & information voyageurs s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "UX & information voyageurs", "Rassurer, guider, lisser les pics") items = [ "Affichage embarqué : remplissage estimé, recommandations d’embarquement réparti", "Ouverture automatique des portes à chaque arrêt; temporisation pour échanges d’air", "Pictogrammes sobres adaptables au niveau d’alerte" ] add_content(s, items) add_image_placeholder(s, "passenger info screen metro", "https://unsplash.com/s/photos/train-display") # 16) Exploitation & maintenance s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Exploitation & maintenance", "Procédures et suivi") items = [ "Plan de nettoyage (points de contact) avec fréquences modulables", "Programme MEP : contrôle filtres, fuites; registre CO₂ et pannes ventilation", "Essais type (EN) à réception + périodiques; audits" ] add_content(s, items) add_image_placeholder(s, "maintenance train, technician", "https://unsplash.com/s/photos/train-maintenance") # 17) Impact / coût vs bénéfices s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Impact & coût – cadrage rapide", "Choisir les ‘quick wins’") items = [ "• Ouverture portes auto + temporisation – Impact : ↑ air neuf – Coût : faible", "• HEPA/MERV13+ (si intégrable) – Impact : élevé – Coût : moyen/élevé", "• Sièges lisses & surfaces jointes – Impact : nettoyage/fomites – Coût : moyen", "• Capteurs CO₂ – Impact : pilotage + preuve – Coût : faible" ] add_content(s, items, font_size=18) add_image_placeholder(s, "cost benefit matrix", "https://unsplash.com/s/photos/cost-benefit") # 18) Feuille de route s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Feuille de route (proposition)", "Pilotes ➜ industrialisation") items = [ "S1 : Audit ventilation (CO₂, fumigènes), contraintes d’intégration", "S2 : Pilote 1 rame – filtres + monitoring ; Pilote 1 station – temporisation portes", "S3 : Évaluation (KPI), déploiement progressif" ] add_content(s, items) add_image_placeholder(s, "roadmap board, planning", "https://unsplash.com/s/photos/roadmap") # 19) Références s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Références (sélection)", "Principales sources citées") ref_text = ( "• OMS – Pandemics (WHO)\n" "• van Doremalen et al., NEJM 2020 – Stabilité SARS‑CoV‑2\n" "• Aganovic et al., Build. Environ. 2021 – Ventilation vs humidité (Wells‑Riley)\n" "• McMaster Forum LES 15.2 (2024) – Ventilation/filtration/disinfection\n" "• EN 14750:2024 ; EN 13129:2016 – AC matériel roulant ferroviaire\n" "• Epidemics Act (Suisse) – BAG (FOPH)\n" "• Études transport : Clinical Infectious Diseases (trains), UITP guidelines" ) add_content(s, [ref_text], font_size=16) add_image_placeholder(s, "research papers, references", "https://unsplash.com/s/photos/research-paper") # 20) Merci / Questions s = prs.slides.add_slide(prs.slide_layouts[6]); set_slide_bg(s) add_title(s, "Merci / Questions ?", "Contact : Lore & Emilie — Projet M2") band = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(0.6), Inches(5.8), prs.slide_width - Inches(1.2), Inches(0.7)) band.fill.solid(); band.fill.fore_color.rgb = STEEL; band.line.fill.background() cap = s.shapes.add_textbox(Inches(0.6), Inches(6.6), prs.slide_width - Inches(1.2), Inches(0.6)) cap_tf = cap.text_frame; cap_tf.clear() p = cap_tf.paragraphs[0]; rn = p.add_run() rn.text = "Merci pour votre attention." rn.font.name = "Calibri"; rn.font.size = Pt(18); rn.font.color.rgb = DK out_path = "/mnt/data/Design_Metro_M2_Pandemie.pptx" prs.save(out_path) out_path '/mnt/data/Design_Metro_M2_Pandemie.pptx'
Super — j’ai refondu ta présentation en un deck clair et élégant (fond très clair, bleu acier, cuivre léger), avec structure nette, icônes sobres et des emplacements “image” prêts à remplacer par des visuels Unsplash/Pexels.
Télécharger le PowerPoint : Design_Metro_M2_Pandemie.pptx
Si tu veux, je peux aussi insérer pour de vrai des photos libres (je te proposerai 1–2 options par slide selon ton style), traduire en anglais, ou adapter le deck pour un timing précis (ex. 10 min/15 min).