src/Controller/CaniculeMeteonormController.php line 479

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\MeteoFranceService;
  4. use App\Service\StationService;
  5. use App\DTO\CaniculeMeteonormDTO;
  6. use App\Form\CaniculeMeteonormType
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use App\Entity\Pluviometrie;
  14. use App\Entity\StationsMeteo;
  15. use Symfony\Component\HttpFoundation\File\UploadedFile;
  16. use App\Form\UploadFichierType;
  17. set_time_limit(36000);
  18. class CaniculeMeteonormController extends AbstractController {
  19.     
  20.     private StationService $stationService;
  21.     
  22.     public function __construct(private MeteoFranceService $meteoServiceStationService $stationService){//, HttpClientInterface $client, CacheInterface $cache, string $apiKey, string $meteoFranceTokenUrl, string $meteoFranceApiUrl) {
  23.        $this->stationService $stationService;
  24.     }
  25.     /**
  26.      * @Route("/caniculeMeteonorm", name="caniculeMeteonorm")
  27.      */
  28.     public function index(Request $requestEntityManagerInterface $em): Response
  29.     {
  30.         ini_set('memory_limit''1024M'); // ou '2G' si besoin
  31.         
  32.         // Créer une instance du DTO pour passer au formulaire
  33.         $CaniculeMeteonormDTO = new CaniculeMeteonormDTO();
  34.         // Créer le formulaire avec l'objet DTO
  35.         $form $this->createForm(CaniculeMeteonormType::class, $CaniculeMeteonormDTO);
  36.         // Gérer la soumission du formulaire
  37.         $form->handleRequest($request);
  38.         if ($form->isSubmitted() && $form->isValid()) {
  39.             // Récupérer les données du formulaire
  40.             $data $form->getData();
  41.           
  42.             $fichier $form->get('fichier')->getData();
  43.             $lignes file($fichier->getPathname(), FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);
  44.             
  45.         $annee 1983;            
  46.         $donneesComfie = [];
  47.         $DH26 = [];
  48.         foreach ($lignes as $ligne) {
  49.             // Largeur fixe : extraits selon les positions données
  50.             $stationId substr($ligne03);
  51.             $temp substr($ligne34);
  52.             $rayonnementGlobal substr($ligne74);
  53.             $rayonnementDiffus substr($ligne114);
  54.             $rayonnementDirect substr($ligne154);
  55.             $ensoleillement substr($ligne194);
  56.             $humidite substr($ligne233);
  57.             $vent substr($ligne263);
  58.             $mois = (int) substr($ligne292);
  59.             $jour = (int) substr($ligne312);
  60.             $heure = (int) substr($ligne332);
  61.             // Nettoyage des valeurs "EEE"
  62.             $val = fn($x) => trim($x) === 'EEE' || str_contains($x'E') ? null intval($x);
  63.             $datetime sprintf('%04d-%02d-%02d %02d:00'$annee$mois$jour$heure 1); // heure 1 = 00h
  64.             $donneesComfie[] = [
  65.                 'datetime' => $datetime,
  66.                 'station' => $stationId,
  67.                 'temperature' => $val($temp) !== null $val($temp) / 10 null,
  68.                 'humidite' => $val($humidite),
  69.                 'vent' => $val($vent),
  70.                 'rayonnement' => $val($rayonnementGlobal),
  71.             ];
  72.         }
  73.         
  74.         $donneesJournalieres = [];
  75.         $DH26['fichier'] = ;
  76. foreach ($donneesComfie as $ligne) {
  77.     $jour substr($ligne['datetime'], 010); // YYYY-MM-DD
  78.     if (!isset($donneesJournalieres[$jour])) {
  79.         $donneesJournalieres[$jour] = [
  80.             'min' => $ligne['temperature'],
  81.             'max' => $ligne['temperature'],
  82.         ];
  83.     } else {
  84.         $donneesJournalieres[$jour]['min'] = min($donneesJournalieres[$jour]['min'], $ligne['temperature']);
  85.         $donneesJournalieres[$jour]['max'] = max($donneesJournalieres[$jour]['max'], $ligne['temperature']);
  86.         if ($ligne['temperature'] >26){
  87.             $DH26['fichier'] = $DH26['fichier'] + $ligne['temperature'] - 26;
  88.         }
  89.     }
  90. }
  91.             // Tu as directement accès à l'objet StationMeteoDTO ici
  92.             $apikey $data->getApikey();  // Accès via la méthode getter
  93.             $stationAPI $data->getStationAPI();  // Accès via la méthode getter
  94.             // Appeler le service pour obtenir les données météo
  95.             
  96.             $stationsData = [];
  97.             $commandeArray = []; // Initialisation pour éviter l'erreur Undefined variable
  98.             $columnDataArray = []; // Initialisation pour stocker les données des colonnes  
  99.             $AnneesEtudiees = [];
  100.             foreach (range(20022024) as $annee) {
  101.                 $AnneesEtudiees[$annee] = [
  102.                     'dateDeb' => "{$annee}-01-01T00%3A00%3A00Z",
  103.                     'dateFin' => "{$annee}-12-31T00%3A00%3A00Z",
  104.                 ];
  105.             }
  106.             foreach ($AnneesEtudiees as $annee => $AnneeEtudiee) {
  107.                 $commande $this->meteoService->getStationDataHoraire($stationAPI$AnneeEtudiee$apikey);
  108.                 $commandeArray[$stationAPI][$annee] = $commande;
  109.                 // Pause pour respecter la limite de 50 requêtes par minute
  110.                 usleep(1300000); // 1,2 secondes = 1 200 000 microsecondes
  111.             }
  112.             $erreur500 null;
  113.             $extractedData = [];
  114.             // Récupération des fichiers à partir des commandes
  115.             foreach ($commandeArray as $stationAPI => $anneesData) {
  116.                 $erreur null;
  117.                 foreach ($anneesData as $AnneeEtudiee => $commandeAnnee) {
  118.                     $commandeId $commandeAnnee['elaboreProduitAvecDemandeResponse']['return'];
  119.                 
  120.                     $csvString $this->meteoService->getFichier($commandeId$apikey);
  121.                     // dump($csvString);
  122.                     // Pause pour respecter la limite de 50 requêtes par minute
  123.                     usleep(1300000); // 1,2 secondes = 1 200 000 microsecondes  
  124.                     if ($csvString == 'Erreur 500') {
  125.                         $erreur500[$commandeId] = $stationAPI;
  126.                         $erreur 1;
  127.                     } else {
  128.                         // Diviser la chaîne en lignes
  129.                         $lines explode("\n"$csvString);
  130.                         // Tableau pour stocker les données extraites
  131.                         $data = [];
  132.                         foreach ($lines as $index => $line) {
  133.                             // Ignorer la première ligne (en-tête)
  134.                             if ($index === 0) {
  135.                                 continue;
  136.                             }
  137.                             // Diviser chaque ligne en colonnes par le séparateur ;
  138.                             $columns explode(";"$line);
  139.                             // Vérifier qu'il y a suffisamment de colonnes
  140.                             if (count($columns) > 2) {
  141.                                 // Extraire ce qui se situe entre le 3ème et 4ème point-virgule
  142.                                 $data['date'] = str_replace(",""."$columns[1]);
  143.                                 $data['temperature'] = str_replace(",""."$columns[10]);
  144.                                 $data['vitesse'] = str_replace(",""."$columns[48]);
  145.                                 $data['direction'] = str_replace(",""."$columns[50]);
  146.                                 $extractedData[] = $data;
  147.                                 $extractedDataParAn[$AnneeEtudiee][] = $data;
  148.                             }
  149.                         }
  150.                     }
  151.                 }
  152.             }
  153.             //////////////////////////////////////////////////////////////////////////////////
  154.             // CALCUL DES CANICULES///////////////////////////////////////////////////////////
  155.             function convertirEnDonneesJournalieres($donneesHoraires,$annee) {
  156.                 $donneesJournalieres = [];
  157.                 $DH26[$annee] = 0;
  158.                 foreach ($donneesHoraires as $donnee) {
  159.                     $dateHeure \DateTime::createFromFormat('YmdH'$donnee['date']);
  160.                     if (!$dateHeure) {
  161.                         throw new \Exception("Format de date invalide : " $donnee['date']);
  162.                     }
  163.                     $jour $dateHeure->format('Y-m-d');
  164.                     $temp floatval($donnee['temperature']);
  165.                     if (!isset($donneesJournalieres[$jour])) {
  166.                         $donneesJournalieres[$jour] = [
  167.                             'date' => $jour,
  168.                             'min' => $temp,
  169.                             'max' => $temp,
  170.                         ];
  171.                     } else {
  172.                         $donneesJournalieres[$jour]['min'] = min($donneesJournalieres[$jour]['min'], $temp);
  173.                         $donneesJournalieres[$jour]['max'] = max($donneesJournalieres[$jour]['max'], $temp);
  174.                                 if ($temp 26) {
  175.                             $DH26[$annee] = round($DH26[$annee] + $temp 26);
  176.                         }
  177.                     }
  178.                 }
  179.                 // On retourne un tableau indexé numériquement pour garder l'ordre chronologique
  180.                 return [array_values($donneesJournalieres), $DH26[$annee]];
  181.             }
  182.             function detecterCaniculesAvecIBM(array $donneesJournalieresfloat $seuilMinfloat $seuilMax): array {
  183.     $canicules = [];
  184.     $buffer = [];
  185.     for ($i 2$i count($donneesJournalieres); $i++) {
  186.         $sous_tableau array_slice($donneesJournalieres$i 23);
  187.         $moy_min array_sum(array_column($sous_tableau'min')) / 3;
  188.         $moy_max array_sum(array_column($sous_tableau'max')) / 3;
  189.         if ($moy_min >= $seuilMin && $moy_max >= $seuilMax) {
  190.             // On ajoute tous les 3 jours du trio dans le buffer
  191.             foreach ($sous_tableau as $jour) {
  192.                 $buffer$jour['date'] ] = $jour// clé = date, pour éviter les doublons
  193.             }
  194.         } else {
  195.             if (count($buffer) >= 3) {
  196.                 $canicules[] = array_values($buffer);
  197.             }
  198.             $buffer = [];
  199.         }
  200.     }
  201.     if (count($buffer) >= 3) {
  202.         $canicules[] = array_values($buffer);
  203.     }
  204.     return $canicules;
  205. }
  206.             function analyserCanicule(array $periode): array {
  207.                 if (empty($periode)) {
  208.                     return [
  209.                         'debut' => null,
  210.                         'fin' => null,
  211.                         'duree' => 0,
  212.                         'intensite_max' => null,
  213.                         'severite' => 0,
  214.                     ];
  215.                 }
  216.                 $dates array_column($periode'date');
  217.                 $maxs array_column($periode'max');
  218.                 // Nouvelle méthode de calcul de la sévérité
  219.                 $severite array_sum(array_map(function ($jour) {
  220.                     $moyenne = ($jour['min'] + $jour['max']) / 2;
  221.                     return $moyenne 24;
  222.                 }, $periode));
  223.                 return [
  224.                     'debut' => reset($dates),
  225.                     'fin' => end($dates),
  226.                     'duree' => count($periode),
  227.                     'intensite_max' => max($maxs),
  228.                     'severite' => $severite,
  229.                 ];
  230.             }
  231.             
  232.           function detecterVaguesDeChaleur(array $donneesJournalieres): array {
  233.     $vagues = [];
  234.     $vagueEnCours = [];
  235.     $joursSous23 0;
  236.     foreach ($donneesJournalieres as $jour) {
  237.         $date $jour['date'];
  238.         $tmin $jour['min'];
  239.         $tmax $jour['max'];
  240.         $moyenne = ($tmin $tmax) / 2;
  241.         if ($moyenne 23) {
  242.             $vagueEnCours[] = $jour;
  243.             $joursSous23 0;
  244.         } elseif ($moyenne 20) {
  245.             // Fin immédiate de la vague
  246.             if (count($vagueEnCours) > 0) {
  247.                 $vagues[] = $vagueEnCours;
  248.             }
  249.             $vagueEnCours = [];
  250.             $joursSous23 0;
  251.         } elseif ($moyenne 23) {
  252.             if (!empty($vagueEnCours)) {
  253.                 $vagueEnCours[] = $jour;
  254.                 $joursSous23++;
  255.                 if ($joursSous23 >= 3) {
  256.                     // Fin après 3 jours consécutifs < 23°C
  257.                     $vagues[] = $vagueEnCours;
  258.                     $vagueEnCours = [];
  259.                     $joursSous23 0;
  260.                 }
  261.             }
  262.         } else {
  263.             $joursSous23 0// Sécurité, même si ce cas ne devrait pas arriver
  264.         }
  265.     }
  266.     // Cas où la vague continue jusqu’à la fin
  267.     if (count($vagueEnCours) > 0) {
  268.         $vagues[] = $vagueEnCours;
  269.     }
  270.     return $vagues;
  271. }          
  272.             
  273. function resumerVaguesDeChaleur(array $vaguesParAn): array {
  274.     $synthese = [];
  275.     foreach ($vaguesParAn as $annee => $vagues) {
  276.         foreach ($vagues as $vague) {
  277.             if (empty($vague)) continue;
  278.             $duree count($vague);
  279.             if ($duree 5) continue; // On ignore les vagues < 5 jours
  280.             $sommeDJR24 0;
  281.             foreach ($vague as $jour) {
  282.                 $moyenne = ($jour['min'] + $jour['max']) / 2;
  283.                 $djr24 max(0$moyenne 24);
  284.                 $sommeDJR24 += $djr24;
  285.             }
  286.             $intensite $sommeDJR24 $duree// DJR24 moyen par jour
  287.             $synthese[] = [
  288.                 'annee' => $annee,
  289.                 'debut' => $vague[0]['date'],
  290.                 'fin' => end($vague)['date'],
  291.                 'duree' => $duree,
  292.                 'intensite' => round($intensite2),
  293.                 'severite' => round($sommeDJR242),
  294.             ];
  295.         }
  296.     }
  297.     return $synthese;
  298. }
  299.             $caniculesParAn = [];
  300.             $vagues = [];
  301.             //Préciser les seuils
  302.             $stationDB $em->getRepository(StationsMeteo::class)->findOneBy(['IdStation' => $stationAPI]);
  303.             $departement $stationDB->getDepartement();
  304.             $seuils $this->getSeuilsParDepartement()[$departement];
  305.             foreach ($extractedDataParAn as $annee => $donneesHoraires) {
  306.                 [$donneesJournalieres,$DH26[$annee]] = convertirEnDonneesJournalieres($donneesHoraires,$annee);
  307.                 //dump($donneesJournalieres);
  308.                 $caniculesParAn[$annee] = detecterCaniculesAvecIBM($donneesJournalieres$seuils['seuil_nuit'], $seuils['seuil_jour']);// Adapter les seuils ici
  309.                 
  310.                 
  311.                 $vagues[$annee] = detecterVaguesDeChaleur($donneesJournalieres);
  312.                 
  313.             }
  314.             $analysesParAn = [];
  315.             $severiteTotaleParAn = [];
  316.             foreach ($caniculesParAn as $annee => $canicules) {
  317.                 foreach ($canicules as $periode) {
  318.                     $analyse analyserCanicule($periode);
  319.                     $analysesParAn[$annee][] = $analyse;
  320.                     // Ajout de la sévérité à la somme annuelle
  321.                     if (!isset($severiteTotaleParAn[$annee])) {
  322.                         $severiteTotaleParAn[$annee] = 0;
  323.                     }
  324.                     $severiteTotaleParAn[$annee] += $analyse['severite'];
  325.                 }
  326.             }
  327.             dump($vagues);
  328.             $synthese resumerVaguesDeChaleur($vagues);
  329.             dump($synthese);
  330. $donneesGraphique = [];
  331. foreach ($synthese as $vague) {
  332.     $mois ucfirst(strftime('%B'strtotime($vague['debut'])));
  333.     $donneesGraphique[] = [
  334.         'x' => $vague['duree'],
  335.         'y' => $vague['intensite'],
  336.         'z' => $vague['severite'], // utile si bubble
  337.         'name' => $mois ' ' $vague['annee'],
  338.     ];
  339. }
  340. // Trier les années par sévérité décroissante
  341.             arsort($severiteTotaleParAn);
  342. // Extraire les 5 années les plus critiques
  343.             $top10Annees array_slice(array_keys($severiteTotaleParAn), 010true);
  344. // Affichage
  345.             $top10AnneesData = [];
  346.             foreach ($top10Annees as $annee) {
  347.                 if (!isset($analysesParAn[$annee])) {
  348.                     continue;
  349.                 }
  350.                 foreach ($analysesParAn[$annee] as $analyse) {
  351.                     if (empty($analyse['debut'])) {
  352.                         continue;
  353.                     }
  354.                     $dateDebut \DateTime::createFromFormat('Y-m-d'$analyse['debut']);
  355.                     $mois $dateDebut->format('F'); // en anglais (ex: July)
  356.                     $mois strtr($mois, [// option : traduction rapide
  357.                         'January' => 'janvier''February' => 'février''March' => 'mars',
  358.                         'April' => 'avril''May' => 'mai''June' => 'juin',
  359.                         'July' => 'juillet''August' => 'août''September' => 'septembre',
  360.                         'October' => 'octobre''November' => 'novembre''December' => 'décembre',
  361.                     ]);
  362.                     $top10AnneesData[] = [
  363.                         'annee' => $annee,
  364.                         'mois' => $mois,
  365.                         'duree' => $analyse['duree'],
  366.                         'intensite_max' => round($analyse['intensite_max'], 1),
  367.                         'severite' => round($analyse['severite']),
  368.                     ];
  369.                 }
  370.             }
  371.             
  372.              $stationKey $this->getKeyById($stationAPI);
  373.              
  374.                  // Renommer la clé "fichier" pour affichage
  375.     $categories array_map(function ($key) {
  376.         return is_int($key) ? $key 'Meteonorm';
  377.     }, array_keys($DH26));
  378.     $valeurs array_values($DH26);
  379.     
  380.         dump($donneesGraphique);
  381.              
  382. // Passer les données au template
  383.             return $this->render('caniculeMeteonorm.html.twig', [
  384.                         'form' => $form->createView(),
  385.                         'top10Canicules' => $top10AnneesData,
  386.                         'stationKey' => $stationKey,
  387.                 'seuils' => $seuils,
  388.                'DH26' => $DH26
  389.                 'categories' => $categories,
  390.                 'valeurs' => $valeurs,
  391.                 'donneesVagues' => $donneesGraphique,
  392.             ]);
  393. //            } catch (\Exception $e) {
  394. //                // Gérer les erreurs
  395. //                $this->addFlash('error', 'Erreur : ' . $e->getMessage());
  396. //            }
  397.         }
  398.         // Rendre la vue du formulaire
  399.         return $this->render('caniculeFormulaire.html.twig', [
  400.                     'form' => $form->createView(),
  401.         ]);
  402.     }
  403.     // Méthode pour obtenir la clé en fonction de l'ID
  404.     public function getKeyById($id)
  405.     {
  406.         // Récupérer le tableau des stations et IDs à partir de StationMeteoType
  407.         $choices $this->stationService->getStationAPIChoices();
  408.      //           caniculeMeteonormType->getStationAPIChoices();
  409.         // Rechercher la clé correspondant à l'ID
  410.         $key array_search($id$choices);
  411.         // Si l'ID est trouvé, retourne la clé, sinon retourne null
  412.         return $key !== false $key null;
  413.     }
  414.     
  415.     public function getSeuilsParDepartement(): array {
  416.     return [
  417.     '01' => ['seuil_jour' => 35'seuil_nuit' => 20],
  418.     '02' => ['seuil_jour' => 33'seuil_nuit' => 18],
  419.     '03' => ['seuil_jour' => 34'seuil_nuit' => 18],
  420.     '04' => ['seuil_jour' => 36'seuil_nuit' => 19],
  421.     '05' => ['seuil_jour' => 34'seuil_nuit' => 18],
  422.     '06' => ['seuil_jour' => 31'seuil_nuit' => 24],
  423.     '07' => ['seuil_jour' => 35'seuil_nuit' => 20],
  424.     '08' => ['seuil_jour' => 33'seuil_nuit' => 18],
  425.     '09' => ['seuil_jour' => 34'seuil_nuit' => 19],
  426.     '10' => ['seuil_jour' => 35'seuil_nuit' => 18],
  427.     '11' => ['seuil_jour' => 35'seuil_nuit' => 22],
  428.     '12' => ['seuil_jour' => 36'seuil_nuit' => 19],
  429.     '13' => ['seuil_jour' => 35'seuil_nuit' => 24],
  430.     '14' => ['seuil_jour' => 31'seuil_nuit' => 18],
  431.     '15' => ['seuil_jour' => 32'seuil_nuit' => 18],
  432.     '16' => ['seuil_jour' => 36'seuil_nuit' => 20],
  433.     '17' => ['seuil_jour' => 35'seuil_nuit' => 20],
  434.     '18' => ['seuil_jour' => 35'seuil_nuit' => 19],
  435.     '19' => ['seuil_jour' => 36'seuil_nuit' => 19],
  436.     '20' => ['seuil_jour' => 33'seuil_nuit' => 23],
  437. //    '2B' => ['seuil_jour' => 33, 'seuil_nuit' => 23],
  438.     '21' => ['seuil_jour' => 34'seuil_nuit' => 19],
  439.     '22' => ['seuil_jour' => 31'seuil_nuit' => 18],
  440.     '23' => ['seuil_jour' => 34'seuil_nuit' => 20],
  441.     '24' => ['seuil_jour' => 36'seuil_nuit' => 20],
  442.     '25' => ['seuil_jour' => 33'seuil_nuit' => 19],
  443.     '26' => ['seuil_jour' => 36'seuil_nuit' => 21],
  444.     '27' => ['seuil_jour' => 34'seuil_nuit' => 19],
  445.     '28' => ['seuil_jour' => 34'seuil_nuit' => 18],
  446.     '29' => ['seuil_jour' => 32'seuil_nuit' => 19],
  447.     '30' => ['seuil_jour' => 36'seuil_nuit' => 23],
  448.     '31' => ['seuil_jour' => 36'seuil_nuit' => 21],
  449.     '32' => ['seuil_jour' => 36'seuil_nuit' => 20],
  450.     '33' => ['seuil_jour' => 35'seuil_nuit' => 21],
  451.     '34' => ['seuil_jour' => 35'seuil_nuit' => 22],
  452.     '35' => ['seuil_jour' => 34'seuil_nuit' => 20],
  453.     '36' => ['seuil_jour' => 35'seuil_nuit' => 19],
  454.     '37' => ['seuil_jour' => 35'seuil_nuit' => 19],
  455.     '38' => ['seuil_jour' => 34'seuil_nuit' => 19],
  456.     '39' => ['seuil_jour' => 34'seuil_nuit' => 20],
  457.     '40' => ['seuil_jour' => 35'seuil_nuit' => 20],
  458.     '41' => ['seuil_jour' => 35'seuil_nuit' => 19],
  459.     '42' => ['seuil_jour' => 35'seuil_nuit' => 19],
  460.     '43' => ['seuil_jour' => 32'seuil_nuit' => 18],
  461.     '44' => ['seuil_jour' => 34'seuil_nuit' => 20],
  462.     '45' => ['seuil_jour' => 34'seuil_nuit' => 19],
  463.     '46' => ['seuil_jour' => 36'seuil_nuit' => 20],
  464.     '47' => ['seuil_jour' => 36'seuil_nuit' => 20],
  465.     '48' => ['seuil_jour' => 33'seuil_nuit' => 18],
  466.     '49' => ['seuil_jour' => 34'seuil_nuit' => 20],
  467.     '50' => ['seuil_jour' => 31'seuil_nuit' => 18],
  468.     '51' => ['seuil_jour' => 34'seuil_nuit' => 18],
  469.     '52' => ['seuil_jour' => 34'seuil_nuit' => 19],
  470.     '53' => ['seuil_jour' => 34'seuil_nuit' => 20],
  471.     '54' => ['seuil_jour' => 34'seuil_nuit' => 18],
  472.     '55' => ['seuil_jour' => 34'seuil_nuit' => 18],
  473.     '56' => ['seuil_jour' => 32'seuil_nuit' => 18],
  474.     '57' => ['seuil_jour' => 34'seuil_nuit' => 19],
  475.     '58' => ['seuil_jour' => 34'seuil_nuit' => 19],
  476.     '59' => ['seuil_jour' => 33'seuil_nuit' => 18],
  477.     '60' => ['seuil_jour' => 34'seuil_nuit' => 18],
  478.     '61' => ['seuil_jour' => 34'seuil_nuit' => 19],
  479.     '62' => ['seuil_jour' => 33'seuil_nuit' => 18],
  480.     '63' => ['seuil_jour' => 34'seuil_nuit' => 19],
  481.     '64' => ['seuil_jour' => 34'seuil_nuit' => 20],
  482.     '65' => ['seuil_jour' => 34'seuil_nuit' => 19],
  483.     '66' => ['seuil_jour' => 35'seuil_nuit' => 23],
  484.     '67' => ['seuil_jour' => 34'seuil_nuit' => 19],
  485.     '68' => ['seuil_jour' => 35'seuil_nuit' => 19],
  486.     '69' => ['seuil_jour' => 34'seuil_nuit' => 20],
  487.     '70' => ['seuil_jour' => 34'seuil_nuit' => 18],
  488.     '71' => ['seuil_jour' => 34'seuil_nuit' => 20],
  489.     '72' => ['seuil_jour' => 35'seuil_nuit' => 20],
  490.     '73' => ['seuil_jour' => 34'seuil_nuit' => 19],
  491.     '74' => ['seuil_jour' => 34'seuil_nuit' => 19],
  492.     '75' => ['seuil_jour' => 31'seuil_nuit' => 21],
  493.     '76' => ['seuil_jour' => 33'seuil_nuit' => 18],
  494.     '77' => ['seuil_jour' => 34'seuil_nuit' => 18],
  495.     '78' => ['seuil_jour' => 33'seuil_nuit' => 20],
  496.     '79' => ['seuil_jour' => 35'seuil_nuit' => 20],
  497.     '80' => ['seuil_jour' => 33'seuil_nuit' => 18],
  498.     '81' => ['seuil_jour' => 36'seuil_nuit' => 21],
  499.     '82' => ['seuil_jour' => 36'seuil_nuit' => 21],
  500.     '83' => ['seuil_jour' => 35'seuil_nuit' => 23],
  501.     '84' => ['seuil_jour' => 36'seuil_nuit' => 21],
  502.     '85' => ['seuil_jour' => 34'seuil_nuit' => 20],
  503.     '86' => ['seuil_jour' => 34'seuil_nuit' => 20],
  504.     '87' => ['seuil_jour' => 35'seuil_nuit' => 19],
  505.     '88' => ['seuil_jour' => 34'seuil_nuit' => 18],
  506.     '89' => ['seuil_jour' => 35'seuil_nuit' => 19],
  507.     '90' => ['seuil_jour' => 33'seuil_nuit' => 18],
  508.     '91' => ['seuil_jour' => 35'seuil_nuit' => 20],
  509.     '92' => ['seuil_jour' => 31'seuil_nuit' => 21],
  510.     '93' => ['seuil_jour' => 31'seuil_nuit' => 21],
  511.     '94' => ['seuil_jour' => 31'seuil_nuit' => 21],
  512.     '95' => ['seuil_jour' => 35'seuil_nuit' => 20],
  513. ];
  514. }
  515.  
  516.     
  517.     
  518. }