14def getRunLumiInfoFragment(jobnumber,task,maxEvents,totalEvents,skipEvents,sequentialEventNumbers=False):
15 """Calculate the specific configuration of the current job in the digi
16 task. Try to make each fragment utilize the same amount of CPU and
17 Cache resources. Exploits the fact that the task when sorted by
18 mu value will have long finishing pieces near the beginning and
19 short pieces near the end. A more even solution is obtained by
20 pairing chunks of maxEvents/2 from the beginning and end of the
21 sorted task.
22 """
23 hiMaxEvents,loMaxEvents=0,0
25 hiMaxEvents=loMaxEvents=int(maxEvents/2)
26 else:
27 hiMaxEvents=int((maxEvents-1)/2)
28 loMaxEvents=int((maxEvents+1)/2)
29 hi_mu_frag=[]
30 lo_mu_frag=[]
31 if hiMaxEvents > 0:
32 hi_mu_frag=getFragment(jobnumber,sorted(task,key=lambda job: job['mu'],reverse=True),hiMaxEvents)
33 if loMaxEvents > 0:
34 lo_mu_frag=getFragment(jobnumber,sorted(task,key=lambda job: job['mu']),loMaxEvents)
35
36 fragment=sorted(sum([hi_mu_frag,lo_mu_frag],[]),key=lambda job: job['run'])
37 if sequentialEventNumbers:
38 return defineSequentialEventNumbers(jobnumber,fragment,totalEvents,skipEvents)
39 else:
40 return fragment
41