501def Pileup( args ):
502
503 fOrbit = 11245.511
504
505 if len(args) < 3:
506 return '<font color="red">ERROR: need at least 3 arguments for pileup calculation: inst.-lumi cross-section-in-mb nbunch [nevents]</font>'
507 try:
508 fstarg = float(args[0])
509 if fstarg < 1e20:
510
511 nprotons = fstarg
512 sigtrans = float(args[1])
513 sigtrans *= 1e-4
514
515 sigma = float(args[2])
516 nbunch = float(args[3])
517 lumi = nprotons**2 * fOrbit * nbunch / (4.0 * pi * sigtrans**2)
518 nevents = 1
519 if len(args) == 5:
520 nevents = float(args[4])
521 else:
522
523 lumi = float(args[0])
524 sigma = float(args[1])
525 nbunch = int(args[2])
526 nevents = 1
527 if len(args) == 4:
528 nevents = int(args[3])
529
530
531 lumi_mb = lumi/1.e27
532 nint, plist = ComputePileup( lumi_mb, sigma, nbunch, fOrbit )
535 print(
" plist ",plist)
536 referenceInfo = '7TeV: 60.3±2.1 mb'
537 referenceInfo += ' [<a href="https://arxiv.org/abs/1104.0326" target="_blank" title="Measurement of the Inelastic Proton-Proton Cross Section at &sqrt;s=7 TeV with the ATLAS Detector at the LHC">arXiv:1104.0326</a>], '
538 referenceInfo += '13TeV: 78.1±2.9mb'
539 referenceInfo += ' [<a href="https://arxiv.org/abs/1606.02625" target="_blank" title="Measurement of the Inelastic Proton-Proton Cross Section at &sqrt;s=13 TeV with the ATLAS Detector at the LHC">arXiv:1606.02625</a>]'
540
541 s = ' '
542 s += '<table class="datasettable" style="font-size: 140%">'
543 s += '<tr><td>Instantaneous luminosity :</td><td> %g cm−2s−1 (= %g mb−1s−1)</td></tr>' % (lumi, lumi_mb)
544 s += '<tr><td>Inelastic cross section :</td><td> %g mb (%s)</td></tr>' % (sigma, referenceInfo)
545 s += '<tr><td>Number of colliding bunches :</td><td> %g</td></tr>' % nbunch
546 s += '<tr><td colspan="2"><hr style="width:100%; #999999; background-color: #999999; height:1px; margin-left:0px; border:0"></td></tr>'
547 s += '<tr><td>Inelastic interaction rate:</td><td>%g Hz</td></tr>' % (lumi_mb*sigma)
548 s += '<tr><td>Average number of interactions per crossing: </td><td> %g</td></tr>' % nint
549 s += '</table>'
550 s += '<hr style="width:100%; #999999; background-color: #999999; height:0px; border:0">\n<p>\n'
551 if nint > 100:
552 s += 'Very large pileup probability (assume Gaussian distribution): %g +- %g' % (nint, sqrt(nint))
553 else:
554 s += '<table class="pileuptable">'
555 s += '<tr><th>Num. of interactions per filled bunch crossing</th><th>Probability per filled bunch crossing</th><th>Probability per triggered minimum bias event*</th>'
556 if nevents>1:
557 s += '<th>Expected number of events in sample*</th>'
558 s += '</tr>'
559
560 pref = 1.0-plist[0]
561 psum = 0
562 for i,p in enumerate(plist):
563 if i>=1:
564 s += '<tr><td>>= %i</td><td>%g</td><td>%g</td>' % (i,1.0-psum,(1.0-psum)/pref)
565 if nevents > 1:
566 nevexp = (1.0-psum)/pref*nevents
567 s += '<td> %g</td>' % (nevexp)
568 s += '</tr>'
569 if p < 1e-15:
570 break
571 psum += p
572 s += '</table><p></p>'
573 s += '<font size=-2>*assuming 100% trigger efficiency for inelastic events</font><br>'
574
575 return s
576
577 except ValueError:
578 return '<font color="red">ERROR: only numerical arguments allowed</font>'
579
580