Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-27 07:41:44

0001 {% extends 'base.html' %}
0002 
0003 {% block title %}{{ task.name }} - Prod Task - PCS{% endblock %}
0004 
0005 {% block content %}
0006 <div class="container mt-4">
0007     <nav aria-label="breadcrumb">
0008         <ol class="breadcrumb">
0009             <li class="breadcrumb-item"><a href="{% url 'pcs:pcs_hub' %}">PCS</a></li>
0010             <li class="breadcrumb-item"><a href="{% url 'pcs:prod_task_compose' %}?tab=tasks">Prod Tasks</a></li>
0011             <li class="breadcrumb-item active">{{ task.name }}</li>
0012         </ol>
0013     </nav>
0014 
0015     <div class="d-flex justify-content-between align-items-start mb-3">
0016         <div>
0017             <h2>{{ task.name }}</h2>
0018             <p class="text-muted">
0019                 <span class="badge bg-{% if task.status == 'draft' %}secondary{% elif task.status == 'ready' %}primary{% elif task.status == 'submitted' %}info{% elif task.status == 'completed' %}success{% else %}danger{% endif %}">{{ task.status }}</span>
0020                 Created by {{ task.created_by }} on {{ task.created_at|date:"Y-m-d H:i" }}
0021                 {% if task.updated_at != task.created_at %} | Updated {{ task.updated_at|date:"Y-m-d H:i" }}{% endif %}
0022             </p>
0023         </div>
0024         <div>
0025             <a href="{% url 'pcs:prod_task_compose' %}?tab=tasks&selected={{ task.name|urlencode }}" class="btn btn-dark-green btn-sm">Edit in Compose</a>
0026             <button class="btn btn-secondary btn-sm" id="btn-regen">Regenerate Commands</button>
0027         </div>
0028     </div>
0029 
0030     {% if task.description %}
0031     <p>{{ task.description }}</p>
0032     {% endif %}
0033 
0034     <div class="row">
0035         <div class="col-md-6 mb-3">
0036             <div class="card h-100">
0037                 <div class="card-body">
0038                     <h5 class="card-title">Dataset</h5>
0039                     <table class="table table-sm table-bordered mb-0">
0040                         <tr><td style="width:40%"><strong>Name</strong></td><td><a href="{% url 'pcs:dataset_detail' pk=task.dataset.pk %}">{{ task.dataset.dataset_name }}</a></td></tr>
0041                         <tr><td><strong>DID</strong></td><td><code>{{ task.dataset.did }}</code></td></tr>
0042                         <tr><td><strong>Detector Version</strong></td><td>{{ task.dataset.detector_version }}</td></tr>
0043                         <tr><td><strong>Detector Config</strong></td><td>{{ task.dataset.detector_config }}</td></tr>
0044                     </table>
0045                 </div>
0046             </div>
0047         </div>
0048         <div class="col-md-6 mb-3">
0049             <div class="card h-100">
0050                 <div class="card-body">
0051                     <h5 class="card-title">Production Config</h5>
0052                     <table class="table table-sm table-bordered mb-0">
0053                         <tr><td style="width:40%"><strong>Name</strong></td><td><a href="{% url 'pcs:prod_config_detail' pk=task.prod_config.pk %}">{{ task.prod_config.name }}</a></td></tr>
0054                         <tr><td><strong>JUG_XL Tag</strong></td><td>{{ task.prod_config.jug_xl_tag|default:"-" }}</td></tr>
0055                         <tr><td><strong>Container</strong></td><td><code>{{ task.prod_config.container_image|default:"-" }}</code></td></tr>
0056                         <tr><td><strong>BG Mixing</strong></td><td>{% if task.prod_config.bg_mixing %}Yes{% else %}No{% endif %}</td></tr>
0057                     </table>
0058                 </div>
0059             </div>
0060         </div>
0061     </div>
0062 
0063     <div class="card mb-3">
0064         <div class="card-body">
0065             <h5 class="card-title">Tags</h5>
0066             <table class="table table-sm table-bordered" style="max-width: 800px;">
0067                 <thead><tr><th>Type</th><th>Tag</th><th>Description</th><th>Key Parameters</th></tr></thead>
0068                 <tbody>
0069                     <tr>
0070                         <td>Physics</td>
0071                         <td><a href="{% url 'pcs:tag_compose' tag_type='p' %}?selected={{ task.dataset.physics_tag.tag_label|urlencode }}">{{ task.dataset.physics_tag.tag_label }}</a></td>
0072                         <td>{{ task.dataset.physics_tag.description|truncatewords:10 }}</td>
0073                         <td>{% for k, v in task.dataset.physics_tag.parameters.items %}<code>{{ k }}</code>={{ v }}{% if not forloop.last %}, {% endif %}{% endfor %}</td>
0074                     </tr>
0075                     <tr>
0076                         <td>EvGen</td>
0077                         <td><a href="{% url 'pcs:tag_compose' tag_type='e' %}?selected={{ task.dataset.evgen_tag.tag_label|urlencode }}">{{ task.dataset.evgen_tag.tag_label }}</a></td>
0078                         <td>{{ task.dataset.evgen_tag.description|truncatewords:10 }}</td>
0079                         <td>{% for k, v in task.dataset.evgen_tag.parameters.items %}<code>{{ k }}</code>={{ v }}{% if not forloop.last %}, {% endif %}{% endfor %}</td>
0080                     </tr>
0081                     <tr>
0082                         <td>Simulation</td>
0083                         <td><a href="{% url 'pcs:tag_compose' tag_type='s' %}?selected={{ task.dataset.simu_tag.tag_label|urlencode }}">{{ task.dataset.simu_tag.tag_label }}</a></td>
0084                         <td>{{ task.dataset.simu_tag.description|truncatewords:10 }}</td>
0085                         <td>{% for k, v in task.dataset.simu_tag.parameters.items %}<code>{{ k }}</code>={{ v }}{% if not forloop.last %}, {% endif %}{% endfor %}</td>
0086                     </tr>
0087                     <tr>
0088                         <td>Reconstruction</td>
0089                         <td><a href="{% url 'pcs:tag_compose' tag_type='r' %}?selected={{ task.dataset.reco_tag.tag_label|urlencode }}">{{ task.dataset.reco_tag.tag_label }}</a></td>
0090                         <td>{{ task.dataset.reco_tag.description|truncatewords:10 }}</td>
0091                         <td>{% for k, v in task.dataset.reco_tag.parameters.items %}<code>{{ k }}</code>={{ v }}{% if not forloop.last %}, {% endif %}{% endfor %}</td>
0092                     </tr>
0093                 </tbody>
0094             </table>
0095         </div>
0096     </div>
0097 
0098     {% if task.csv_file %}
0099     <div class="card mb-3">
0100         <div class="card-body">
0101             <h5 class="card-title">Submission</h5>
0102             <table class="table table-sm table-bordered" style="max-width: 600px;">
0103                 <tr><td style="width:30%"><strong>CSV File</strong></td><td><code>{{ task.csv_file }}</code></td></tr>
0104             </table>
0105         </div>
0106     </div>
0107     {% endif %}
0108 
0109     {% if task.overrides %}
0110     <div class="card mb-3">
0111         <div class="card-body">
0112             <h5 class="card-title">Overrides</h5>
0113             <table class="table table-sm table-bordered mb-0">
0114                 {% for key, value in task.overrides.items %}
0115                 <tr><td style="width:40%"><strong>{{ key }}</strong></td><td><code>{{ value }}</code></td></tr>
0116                 {% endfor %}
0117             </table>
0118         </div>
0119     </div>
0120     {% endif %}
0121 
0122     {% if task.condor_command %}
0123     <div class="card mb-3">
0124         <div class="card-body">
0125             <div class="d-flex justify-content-between align-items-center mb-2">
0126                 <h5 class="card-title mb-0">Condor Command</h5>
0127                 <button class="btn btn-secondary btn-sm btn-copy" data-target="condor-cmd">Copy</button>
0128             </div>
0129             <pre id="condor-cmd" class="bg-dark text-light p-3 mb-0" style="font-size: 0.8em; white-space: pre-wrap; word-break: break-all;">{{ task.condor_command }}</pre>
0130         </div>
0131     </div>
0132     {% endif %}
0133 
0134     {% if task.panda_command %}
0135     <div class="card mb-3">
0136         <div class="card-body">
0137             <div class="d-flex justify-content-between align-items-center mb-2">
0138                 <h5 class="card-title mb-0">PanDA Command</h5>
0139                 <button class="btn btn-secondary btn-sm btn-copy" data-target="panda-cmd">Copy</button>
0140             </div>
0141             <pre id="panda-cmd" class="bg-dark text-light p-3 mb-0" style="font-size: 0.8em; white-space: pre-wrap; word-break: break-all;">{{ task.panda_command }}</pre>
0142         </div>
0143     </div>
0144     {% endif %}
0145 
0146     {% if task_params_json %}
0147     <div class="card mb-3">
0148         <div class="card-body">
0149             <div class="d-flex justify-content-between align-items-center mb-2">
0150                 <h5 class="card-title mb-0">JEDI taskParamMap</h5>
0151                 <button class="btn btn-secondary btn-sm btn-copy" data-target="task-params">Copy</button>
0152             </div>
0153             <div class="text-muted mb-2" style="font-size: 0.85em;">
0154                 Computed from current PCS state. Passed to <code>Client.insertTaskParams()</code> for JEDI submission.
0155             </div>
0156             <pre id="task-params" class="bg-dark text-light p-3 mb-0" style="font-size: 0.8em; white-space: pre-wrap;">{{ task_params_json }}</pre>
0157         </div>
0158     </div>
0159     {% elif task_params_error %}
0160     <div class="alert alert-warning mb-3">
0161         <strong>JEDI taskParamMap unavailable:</strong> {{ task_params_error }}
0162     </div>
0163     {% endif %}
0164 
0165     {% if task.panda_task_id or task.condor_cluster_id %}
0166     <div class="card mb-3">
0167         <div class="card-body">
0168             <h5 class="card-title">Tracking</h5>
0169             <table class="table table-sm table-bordered" style="max-width: 600px;">
0170                 {% if task.panda_task_id %}<tr><td><strong>PanDA Task ID</strong></td><td>{{ task.panda_task_id }}</td></tr>{% endif %}
0171                 {% if task.condor_cluster_id %}<tr><td><strong>Condor Cluster ID</strong></td><td>{{ task.condor_cluster_id }}</td></tr>{% endif %}
0172             </table>
0173         </div>
0174     </div>
0175     {% endif %}
0176 </div>
0177 
0178 <script>
0179 document.querySelectorAll('.btn-copy').forEach(btn => {
0180     btn.addEventListener('click', function() {
0181         const pre = document.getElementById(this.dataset.target);
0182         navigator.clipboard.writeText(pre.textContent).then(() => {
0183             this.textContent = 'Copied!';
0184             setTimeout(() => { this.textContent = 'Copy'; }, 1500);
0185         });
0186     });
0187 });
0188 document.getElementById('btn-regen').addEventListener('click', function() {
0189     fetch('{% url "pcs:prod_task_generate_commands" pk=task.pk %}')
0190         .then(r => r.json())
0191         .then(data => { location.reload(); });
0192 });
0193 </script>
0194 {% endblock %}