| 391 | }}} |
| 392 | |
| 393 | === Docker === |
| 394 | Docker est déployé sur les machines de la ferme locale. Il est possible d'utiliser n'importe quelle image pour définir un environnement d’exécution pour vos jobs. |
| 395 | Les images docker peuvent être trouvées sur le site [https://hub.docker.com/ DockerHub] |
| 396 | |
| 397 | |
| 398 | ==== Exécuter "cat" sur Debian ==== |
| 399 | |
| 400 | **docker.submit** |
| 401 | |
| 402 | {{{ |
| 403 | #universe = docker is optional |
| 404 | universe = docker |
| 405 | |
| 406 | # nom de l'image sur dockerHub |
| 407 | docker_image = debian |
| 408 | |
| 409 | # programme à exécuter dans l'environnement debian avec ses arguments |
| 410 | executable = /bin/cat |
| 411 | arguments = /etc/hosts |
| 412 | |
| 413 | # fichiers de sortie à rapatrier depuis le nœud d’exécution de la ferme locale |
| 414 | should_transfer_files = YES |
| 415 | when_to_transfer_output = ON_EXIT |
| 416 | output = out.$(Process) |
| 417 | error = err.$(Process) |
| 418 | log = log.$(Process) |
| 419 | |
| 420 | # pré-requis pour sélection d'un nœud de la ferme locale où faire tourner le job |
| 421 | request_cpus = 1 |
| 422 | request_memory = 1024M |
| 423 | request_disk = 10240K |
| 424 | |
| 425 | queue 1 |
| 426 | }}} |
| 427 | |
| 428 | ==== Génération d'un histogramme avec ROOT ==== |
| 429 | |
| 430 | ROOT est un programme d'analyse qui n'est pas forcément installé ou configuré sur les machines de la ferme locale. |
| 431 | Il est cependant possible de l'utiliser via une image docker. |
| 432 | |
| 433 | **Candle Histo.C** : le fichier root à executer |
| 434 | {{{ |
| 435 | #include <TROOT.h> |
| 436 | #include <TCanvas.h> |
| 437 | #include <TH2I.h> |
| 438 | #include <TRandom.h> |
| 439 | |
| 440 | void candlehisto() |
| 441 | { |
| 442 | // Définissez la taille du canevas avec une résolution plus élevée |
| 443 | TCanvas *c1 = new TCanvas("c1", "Candle Presets", 1920, 1080); |
| 444 | c1->Divide(3, 2); |
| 445 | |
| 446 | TRandom *rng = new TRandom(); |
| 447 | TH2I *h1 = new TH2I("h1", "Sin", 18, 0, 360, 100, -1.5, 1.5); |
| 448 | h1->GetXaxis()->SetTitle("Deg"); |
| 449 | |
| 450 | float myRand; |
| 451 | for (int i = 0; i < 360; i += 10) |
| 452 | { |
| 453 | for (int j = 0; j < 100; j++) |
| 454 | { |
| 455 | myRand = rng->Gaus(sin(i * 3.14 / 180), 0.2); |
| 456 | h1->Fill(i, myRand); |
| 457 | } |
| 458 | } |
| 459 | |
| 460 | c1->cd(1); |
| 461 | for (int i = 1; i < 7; i++) |
| 462 | { |
| 463 | c1->cd(i); |
| 464 | TString title = TString::Format("CANDLEX%d", i); |
| 465 | TH2I *myhist = (TH2I *)h1->DrawCopy(title); |
| 466 | myhist->SetTitle(title); |
| 467 | } |
| 468 | |
| 469 | // Sauvegardez dans un seul fichier image dans le répertoire courant |
| 470 | TString imgFileName = "output.png"; |
| 471 | c1->SaveAs(imgFileName); |
| 472 | } |
| 473 | |
| 474 | int main() |
| 475 | { |
| 476 | candlehisto(); |
| 477 | return 0; |
| 478 | } |
| 479 | |
| 498 | **candlehisto.submit** : le fichier de soumission |
| 499 | {{{ |
| 500 | #universe = docker is optional |
| 501 | universe = docker |
| 502 | |
| 503 | # nom de l'image sur dockerHub |
| 504 | docker_image = rootproject/root |
| 505 | |
| 506 | # programme à exécuter dans l'environnement ROOT avec ses arguments |
| 507 | executable = /opt/root/bin/root.exe |
| 508 | arguments = -b -q -l candlehisto.C |
| 509 | |
| 510 | # Fichier d'input à transférer sur le nœud où va tourner le job |
| 511 | transfer_input_files = candlehisto.C |
| 512 | |
| 513 | # Fichier de résultat à transférer depuis le nœud ou a tourner le job en fin d’exécution |
| 514 | transfer_output_files = output.png |
| 515 | |
| 516 | should_transfer_files = YES |
| 517 | when_to_transfer_output = ON_EXIT |
| 518 | |
| 519 | # Fichier de logs |
| 520 | output = out.$(ClusterId).$(ProcId) |
| 521 | error = err.$(ClusterId).$(ProcId) |
| 522 | log = log.$(ClusterId).$(ProcId) |
| 523 | |
| 524 | # Pré-requis pour la sélection du nœud local ou faire tourner le job |
| 525 | # mémoire requise |
| 526 | request_memory = 2000M |
| 527 | # type de système requis |
| 528 | +Requirements = OpSysAndVer =?= "AlmaLinux" |
| 529 | # nom de la nœud d’exécution de la ferme locale |
| 530 | +Requirements = machine =?= "lpsc-c27.in2p3.fr" |
| 531 | |
| 532 | queue 1 |
| 533 | |
| 534 | }}} |
| 535 | |