{"id":6378,"library":"ilcdirac","title":"iLCDirac - DIRAC extension for ILC/CLIC/FCC","description":"iLCDirac is the iLC/CLIC/FCC extension of DIRAC, providing tools and services for distributed computing within the International Linear Collider, CLIC, and Future Circular Collider communities. It is currently at version 35.0.11 and follows the release schedule of the main DIRAC project, with frequent updates.","status":"active","version":"35.0.11","language":"en","source_language":"en","source_url":"https://github.com/DIRACGrid/ILCDirac","tags":["HEP","physics","distributed computing","grid computing","DIRAC"],"install":[{"cmd":"pip install ilcdirac","lang":"bash","label":"Install latest version"}],"dependencies":[{"reason":"iLCDirac is an extension of the DIRAC framework and requires DIRAC itself to be installed (>=35.0.0).","package":"DIRAC","optional":false}],"imports":[{"note":"Primary class for defining and managing iLC/CLIC/FCC specific jobs within the DIRAC framework.","symbol":"LCJob","correct":"from ILCDIRAC.Interfaces.API.NewInterface.LCJob import LCJob"},{"note":"Example application for high-energy physics data processing, commonly used in iLC/CLIC/FCC experiments.","symbol":"Marlin","correct":"from ILCDIRAC.Interfaces.API.NewInterface.Applications import Marlin"}],"quickstart":{"code":"from ILCDIRAC.Interfaces.API.NewInterface.LCJob import LCJob\nfrom ILCDIRAC.Interfaces.API.NewInterface.Applications import Marlin\n\n# Note: A full DIRAC environment (with configuration and a valid VOMS proxy)\n# is required for actual job submission. This example focuses on API object creation.\n\n# 1. Create an LCJob instance\njob = LCJob()\njob.setName('MyILCDiracJob')\njob.setPlatform('x86_64-slc6-gcc44-opt') # Example platform, choose one appropriate for your grid\njob.setCPUTime(3600) # Example: 1 hour CPU time limit\n\n# 2. Define an application, e.g., Marlin\nmarlin_app = Marlin()\nmarlin_app.setVersion('v01-08-01') # Specify a valid Marlin version available on the grid\nmarlin_app.setSteeringFile('my_steering_file.xml') # Path to a steering file\nmarlin_app.setInputData(['LFN:/ilc/user/exampleuser/input.slcio']) # Logical File Name for input data\n\n# 3. Add the application to the job\njob.appendApplication(marlin_app)\n\n# 4. Define output data and where to store it\njob.setOutputData(['output.root'], OutputSE='CERN-USER') # Store output.root in CERN-USER Storage Element\njob.setOutputSandbox(['stdout.log', 'stderr.log']) # Files to retrieve to local sandbox\n\n# Print job definition summary\nprint(f\"Created ILCDIRAC Job '{job.getName()}'\")\nprint(f\"  Platform: {job.getPlatform()}\")\nprint(f\"  CPU Time: {job.getCPUTime()} seconds\")\nif job.applications:\n    print(f\"  Application: {job.applications[0].__class__.__name__} (Version: {job.applications[0].version})\")\nprint(f\"  Output Data: {job.outputData}\")\nprint(f\"  Output Sandbox: {job.outputSandbox}\")\n\n# To submit this job to the DIRAC grid, you would typically use:\n# from DIRAC.Core.Base.Script import parseCommandLine\n# parseCommandLine() # This initializes the DIRAC environment\n# result = job.submit()\n# if result['OK']:\n#     print(f\"Job submitted with ID: {result['Value']}\")\n# else:\n#     print(f\"Submission failed: {result['Message']}\")","lang":"python","description":"This quickstart demonstrates how to define a basic iLCDirac job using the `LCJob` class and append a `Marlin` application. It covers setting job properties, application details, and output specifications. Note that actual job submission to the grid requires a fully configured DIRAC client environment and a valid VOMS proxy, which are not covered in this minimal code snippet."},"warnings":[{"fix":"Always consult the official DIRAC and ILCDirac release notes and migration guides before upgrading. Update imports and API calls to align with the current `NewInterface` patterns as documented.","message":"Major version upgrades of ILCDirac (e.g., from 34.x to 35.x) or its underlying DIRAC framework often introduce significant API changes, especially in job definition and application handling interfaces. The `NewInterface` implies older interfaces may be deprecated or removed.","severity":"breaking","affected_versions":"All major version transitions (e.g., 34.x to 35.x)"},{"fix":"Follow the comprehensive DIRAC client installation and configuration guides. Ensure a valid VOMS proxy is available using `voms-proxy-init` before attempting job submission to the grid.","message":"ILCDirac is a client library for the DIRAC grid. Actual job submission and interaction with the grid requires a separate DIRAC client installation and configuration, including a valid VOMS proxy for authentication. `pip install ilcdirac` alone only provides the Python library components.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Verify LFNs using DIRAC tools like `dirac-dms-lfns-info` and ensure specified SEs are valid and accessible for your user role within the DIRAC grid configuration.","message":"Incorrectly specified Logical File Names (LFNs) for input/output data, or non-existent/inaccessible Storage Elements (SEs) for outputs, are common causes of job failures on the grid. Paths must be valid within the distributed file system.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-15T00:00:00.000Z","next_check":"2026-07-14T00:00:00.000Z"}