Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • emsmith/athena
  • dzubov/athena
  • pscholer/athena
  • akvam/athena
  • flasagni/athena
  • hartman/athena
  • alux/athena
  • berenice/athena
  • mschott/athena
  • mgenest/athena
  • pbalek/athena
  • dsalvato/athena
  • korcyl/athena
  • tlyubush/athena
  • lyubushk/athena
  • gstark/athena
  • yharris/athena
  • lmonsoni/athena
  • nagano/athena
  • lcorpe/athena
  • lshi/athena
  • rrosten/athena
  • ytsujika/athena
  • tiledemo/athena
  • abagdato/athena
  • fparodi/athena
  • tmoxter/athena
  • lheinric/athena
  • milu/athena
  • pyin/athena
  • juesseiv/athena-celeritas
  • mmlynari/athena
  • matthier/athena
  • jsandesa/athena
  • borisov/athena
  • zchubini/athena
  • mpenzin/athena
  • mcorradi/athena
  • okovanda/athena
  • meevans/athena
  • isiral/athena
  • haa2mu2tau/athena
  • nkvu/athena
  • andre/athena
  • ebakos/athena
  • gwmyers/athena
  • lportale/athena
  • vasothil/athena
  • bwinter/athena
  • brle/athena
  • camacho/athena
  • icioara/athena
  • mcentonz/athena
  • quli/athena
  • mikhail/athena
  • begilber/athena
  • gartoni/athena
  • abkahn/athena
  • mbasso/athena
  • pagacova/athena
  • dgancarc/athena
  • stefania/athena
  • gmarchio/athena
  • jolsson/athena
  • atlasdqm/athena
  • chuanshu/athena
  • yygao/athena
  • shimoji/athena
  • zhenw/athena
  • jojamies/athena
  • cnass/athena
  • beckerov/athena
  • marvin/athena
  • keli/athena
  • passaggi/athena
  • pberta/athena
  • aaboulho/athena
  • hdf5-utils/athena
  • acrobert/athena
  • ktodome/athena
  • ranjitn/athena
  • kastanas/athena
  • cescobar/athena
  • huirun/athena
  • atrzupek/athena
  • lfountas/athena
  • tzorbas/athena
  • aambler/athena
  • ccarrion/athena
  • britzger/athena
  • derendar/athena
  • hanl/athena
  • gipezzul/athena
  • epender/athena
  • mmineev/athena
  • gnn4itkteam/athena
  • phkoenig/athena
  • robertma/athena
  • nguseyno/athena
  • pleier/athena
  • avasyuko/athena
  • nekumari/athena
  • pavel/athena
  • gtateno/athena
  • reznicek/athena
  • jiling/athena
  • aburke/athena
  • herrmant/athena
  • jcordeir/athena
  • xuh/athena
  • lmcelhin/athena
  • averbyts/athena
  • ewallin/athena
  • tnommens/athena
  • tvazquez/athena
  • gascott/athena
  • shbansal/athena
  • ccaminch/athena
  • yuhui/athena
  • lserkin/athena
  • miochoa/athena
  • corentin/athena
  • cdiez/athena
  • berkeleylab/CharmPhysics/athena
  • cpollard/athena
  • madurano/athena_gittutorial
  • hfox/athena
  • ckirfel/athena
  • msykora/athena
  • kjohns/athena
  • jakoubek/athena
  • calfayan/athena
  • atlas/athena
  • toshi/athena
  • dguest/athena
  • aundrus/athena
  • akraszna/athena
  • fwinkl/athena
  • wlampl/athena
  • rhauser/athena
  • phwindis/athena
  • karolos/athena
  • arnaez/athena
  • jmontejo/athena
  • baines/athena
  • damazio/athena
  • mmuskinj/athena
  • okuprash/athena
  • psommer/athena
  • smh/athena
  • bwynne/athena
  • turra/athena
  • tstreble/athena
  • tdado/athena
  • ATLAS-EGamma/athena
  • tadej/athena
  • yuxu/athena
  • abuckley/athena
  • jmasik/athena
  • toyamaza/athena
  • pjacka/athena
  • tamartin/athena
  • rbianchi/athena
  • tbold/athena
  • mhodgkin/athena
  • graemes/athena
  • nstyles/athena
  • sshaw/athena
  • mark/athena
  • shlomit/athena
  • nikiforo/athena
  • fpastore/athena
  • hartj/athena
  • harkusha/athena
  • jcatmore/athena
  • mvozak/athena
  • leggett/athena
  • ebuschma/athena
  • martindl/athena
  • gunal/athena
  • ewelina/athena
  • almaloiz/athena
  • ligang/athena
  • tlari/athena
  • sroe/athena
  • susinha/athena
  • filthaut/athena
  • lfiorini/athena
  • cchan/athena
  • longjon/athena
  • jichen/athena
  • peter/athena
  • cvarni/athena
  • cshimmin/athena
  • wleight/athena
  • nwarrack/athena
  • mihuebne/athena
  • jsallen/athena-high-pt-ms-jets
  • chays/athena
  • dtovey/athena
  • dkar/athena
  • sgeorge/athena
  • alfroch/athena
  • yafu/athena
  • mgignac/athena
  • tkohno/athena
  • mstamenk/athena
  • okepka/athena
  • janovak/athena
  • cohm/athena
  • wiedenat/athena
  • khoo/athena
  • maklein/athena
  • omajersk/athena
  • tmkrtchy/athena
  • dbakshig/athena
  • fernando/athena
  • gingrich/athena
  • schaarsc/athena
  • scheiric/athena
  • ponyisi/athena
  • pleskot/athena
  • ravinab/athena
  • jobalz/athena
  • ekuwertz/athena
  • ebergeas/athena
  • xai/athena
  • ekasimi/athena
  • merrenst/athena
  • afaulkne/athena
  • achishol/athena
  • goetz/athena
  • dpopov/athena
  • alaurier/athena
  • astruebi/athena
  • mtoscani/athena
  • krumnack/athena
  • mdanning/athena
  • clseitz/athena
  • egramsta/athena
  • bmindur/athena
  • hye/athena
  • ppostola/athena
  • efilmer/athena
  • shanisch/athena
  • jpanduro/athena
  • ssarikay/athena
  • ncalace/athena
  • hyamauch/athena
  • rcoelhol/athena
  • aad/athena
  • gpanizzo/athena
  • stelzer/athena
  • tupham/athena
  • ssottoco/athena
  • turnerm/athena
  • nkrengel/athena
  • sutt/athena
  • rkopelia/athena
  • bernius/athena
  • cmcginn/athena
  • stsuno/athena
  • tsulaia/athena
  • vcairo/athena
  • yunju/athena
  • gemmeren/athena
  • ldc/athena
  • mbandier/athena
  • jmacdona/athena
  • ssnyder/athena
  • jdandoy/athena
  • wwalko/athena
  • mehlhase/athena
  • dzanzi/athena
  • jufische/athena
  • emoyse/athena
  • kzoch/athena
  • pgadow/athena
  • nasbah/athena
  • kwhalen/athena
  • bmorgan/athena
  • solodkov/athena
  • amete/athena
  • msaimper/athena
  • rbielski/athena
  • williams/athena
  • rcarney/athena
  • shhirose/athena
  • dcasper/athena
  • cheidegg/athena
  • kkohler/athena
  • heng/athena
  • hhibi/athena
  • mrybar/athena
  • ychiu/athena
  • cdeutsch/athena
  • christos/athena
  • coccaro/athena
  • loch/athena
  • ynoguchi/athena
  • hrussell/athena
  • campanel/athena
  • wbalunas/athena
  • hoide/athena
  • xju/athena
  • yuchou/athena
  • yoyamagu/athena
  • nova/athena
  • todorova/athena
  • sjiggins/athena
  • lidiaz/athena
  • kegraham/athena
  • jbiswal/athena
  • bgokturk/athena
  • aytul/athena
  • kpachal/athena
  • mverissi/athena
  • bouhova/athena
  • guerrero/athena
  • alwang/athena
  • alopezso/athena
  • dhayden/athena
  • mvessell/athena
  • mvanadia/athena
  • omeshkov/athena
  • soumya/athena
  • ruyuan/athena
  • ssantpur/athena
  • fmeloni/athena
  • igrabows/athena
  • kenelson/athena
  • tvarol/athena
  • upatel/athena
  • dshope/athena
  • anperrev/athena
  • korona/athena
  • eramakot/athena
  • dbogavac/athena
  • mhank/athena
  • derue/athena
  • cowagner/athena
  • tursom/athena
  • tnobe/athena
  • fsforza/athena
  • koffas/athena
  • angianni/athena
  • fgiuli/athena
  • falonso/athena
  • chinderk/athena
  • ballbroo/athena
  • diehl/athena
  • myexley/athena
  • davidek/athena
  • hansenph/athena
  • tphamleh/athena
  • salvator/athena
  • ekajomov/athena-general
  • mfujimot/athena
  • masato/athena
  • hirose/athena
  • sarbiolv/athena
  • jmendes/athena
  • stapiaar/athena
  • jhaley/athena
  • ffabbri/athena
  • nwenke/athena
  • tpelzer/athena
  • stavrop/athena
  • cdelitzs/athena
  • agbet/athena
  • dbabal/athena
  • juesseiv/athena
  • gia/athena
  • hmildner/athena
  • kkrizka/athena
  • temoskal/athena
  • dwallace/athena
  • iaizenbe/athena
  • eschanet/athena
  • ckitsaki/athena
  • asonay/athena
  • jteoh/athena
  • lferencz/athena
  • jiawei/athena
  • czhou/athena
  • pmeiring/athena
  • jbeirer/athena
  • liberato/athena
  • mromano/athena
  • rustem/athena
  • nielsenj/athena
  • wachan/athena
  • sswatman/athena
  • asquith/athena
  • miqueits/athena
  • ranovotn/athena
  • elmsheus/athena
  • markowen/athena
  • eparrish/athena
  • fuhe/athena
  • nicholas/athena
  • dakoch/athena
  • esoldato/athena
  • asoukhar/athena
  • aranzazu/athena
  • ndegroot/athena
  • mhance/athena
  • lihan/athena
  • jkempste/athena
  • ginaciog/athena
  • verducci/athena
  • tjunkerm/athena
  • aporeba/athena
  • martis/athena
  • sschramm/athena
  • mswiatlo/athena
  • bcarlson/athena
  • anmrodri/athena
  • mdelmast/athena
  • pliu/athena
  • scamarda/athena
  • ssaha/athena
  • gabarone/athena
  • lstocker/athena
  • mxia/athena
  • fastcalosim_test/athena
  • guindon/athena
  • rlongo/athena
  • amoussa/athena
  • conde/athena
  • mmittal/athena
  • mdonasci/athena
  • chelling/athena
  • ffollega/athena
  • sschmitt/athena
  • hmaguire/athena
  • gialas/athena
  • fcostanz/athena
  • shion/athena
  • cgutscho/athena
  • sberlend/athena
  • dwilbern/athena
  • acts/athena
  • evarnes/athena
  • zsoumaim/athena
  • nifomin/athena
  • eriefel/athena
  • jkremer/athena
  • guescini/athena
  • laforge/athena
  • susy-hackers/athena
  • istin/athena
  • llorente/athena
  • haozturk/athena
  • akotsoke/athena
  • rpoggi/athena
  • acanesse/athena
  • fizisist/athena
  • kkoeneke/athena
  • fengyu/athena
  • cmerlass/athena
  • rkarnam/athena
  • navarrjo/athena
  • chenlian/athena
  • ysmirnov/athena_old
  • ivivarel/athena
  • yanlin/athena
  • amulski/athena
  • pkramer/athena
  • bulekov/athena
  • sanchevi/athena
  • sefernan/athena
  • vcavalie/athena
  • bauerpa/athena
  • restevam/athena
  • smwang/athena
  • csebasti/athena
  • mmazza/athena
  • itrandaf/athena
  • thsjurse/athena
  • mmlynars/athena
  • iyeletsk/athena
  • jgonski/athena
  • wobisch/athena
  • almgadm/athena
  • mtchijov/athena
  • jhinds/athena
  • mwielers/athena
  • emmat/athena
  • tiyang/athena
  • lapereir/athena
  • aleopold/athena
  • lmiller/athena
  • lucam/athena
  • pekman/athena
  • kciesla/athena
  • somadutt/athena
  • zuysal/athena
  • rbalasub/athena
  • salderwe/athena
  • wmccorma/athena
  • masaito/athena
  • pinamont/athena
  • jstupak/athena
  • ycoadou/athena
  • ilongari/athena
  • adye/athena
  • wtaylor/athena
  • kkreul/athena
  • simmons/athena
  • jzeng/athena
  • ssahin/athena
  • kbelobor/athena
  • aoneill/athena
  • fbartels/athena
  • dmaximov/athena
  • kghorban/athena
  • cschiavi/athena
  • gcallea/athena
  • kasai/athena
  • jraine/athena
  • ljeanty/athena
  • mcfayden/athena
  • scarra/athena
  • rozeny/athena
  • brottler/athena
  • nbelyaev/athena
  • ecarlson/athena
  • joheinri/athena
  • aelmouss/athena
  • abandyop/athena
  • khanov/athena
  • gotero/athena
  • rebeca/athena
  • aohatl/athena
  • doglioni/athena
  • amarzin/athena
  • alaperto/athena
  • bhonan/athena
  • bigliett/athena
  • rgarg/athena
  • pmoskvit/athena
  • dpudzha/athena
  • lbozianu/athena
  • paulama/athena
  • mtesta/athena
  • jajimene/athena
  • atlidali/athena
  • vcroft/athena
  • begalli/athena
  • yajun/athena
  • mpokidov/athena
  • torrence/athena
  • hacooke/athena
  • wprzygod/athena
  • sgalantz/athena
  • roward/athena
  • demelian/athena
  • barak/athena
  • csander/athena
  • tofitsch/athena
  • salnikov/athena
  • atsirigo/athena
  • amoroso/athena
  • ozaplati/athena
  • elrossi/athena
  • jsabater/athena
  • mmiralle/athena
  • alory/athena
  • jdevivi/athena
  • klin/athena
  • ymino/athena
  • xchen/athena
  • pottgen/athena
  • pbokan/athena
  • ruth/athena
  • trinn/athena
  • cappelt/athena
  • apetukho/athena
  • xiaoning/athena
  • nishu/athena
  • ratkin/athena
  • paramon/athena
  • bleban/athena
  • nelsonc/athena
  • dpizzi/athena
  • juhofer/athena
  • enarayan/athena
  • ztarem/athena
  • exot-27/athena
  • acassim/athena
  • sampson/athena
  • bburghgr/athena
  • qhu/athena
  • ychow/athena
  • mmarjano/athena
  • mkrivos/athena
  • nviauxma/athena
  • pagessin/athena
  • ibordule/athena
  • hessey/athena
  • watsona/athena
  • LichtenbergGroup/athena
  • wfawcett/athena
  • perj/athena
  • othielma/athena
  • jreich/athena
  • mleblanc/athena
  • jdegens/athena
  • hasada/athena
  • ztao/athena
  • pmendesa/athena
  • sridouan/athena
  • kristin/athena
  • alainb/athena
  • wgeorge/athena
  • xiaohu/athena
  • ludovica/athena
  • bachacou/athena
  • ktsuri/athena
  • yake/athena
  • jlsmith/athena
  • musafdar/athena
  • yama/athena
  • ssu/athena
  • angerami/athena
  • rnayak/athena
  • pebaron/athena-weights
  • gproto/athena
  • jezequel/athena
  • hschwart/athena
  • asalzbur/athena
  • mproffit/athena
  • amendesj/athena
  • rerrabai/athena
  • lhelary/athena
  • csamoila/athena
  • malgren/athena
  • tiany/athena
  • spolacek/athena
  • mprincip/athena
  • bmondal/athena
  • lbeemste/athena
  • asantra/athena
  • aczirkos/athena
  • grabanal/athena
  • kyamaguc/athena
  • jreidels/athena
  • tboeckh/athena
  • silvinha/athena
  • emily/athena
  • holau/athena
  • mdhlamin/athena
  • bozek/athena
  • lkrauth/athena
  • jroloff/athena
  • slawlor/athena
  • tdiasdov/athena
  • carlod/athena
  • bbrueers/athena
  • iramirez/athena
  • mtian/athena
  • idinu/athena
  • mgrabois/athena
  • bcole/athena
  • ecelebi/athena
  • oducu/athena
  • roishi/athena
  • dhirsch/athena
  • jjwilkin/athena
  • yuanchan/athena
  • ygo/athena
  • hmoyanog/athena-4-mr
  • sbiryuko/athena
  • exochell/athena
  • ggustavi/athena
  • diwillia/athena
  • skorn/athena
  • scalvet/athena
  • cgarner/athena
  • jwspence/athena
  • changqia/athena
  • atsiamis/athena
  • honguyen/athena
  • jizamora/athena
  • calpigia/athena
  • adimitri/athena
  • dhangal/athena
  • rysawada/athena
  • cmarcon/athena
  • kpetukho/athena
  • yangx/athena
  • atlidbs/athena
  • iene/athena
  • tqiu/athena
  • jspah/athena
  • tbisanz/athena
  • tzenis/athena
  • athaler/athena
  • dopasqua/athena
  • jkretz/athena
  • jcardena/athena
  • hzuchen/athena
  • lveloce/athena
  • maliev/athena
  • ryamaguc/athena
  • tsano/athena
  • oshukrun/athena
  • mumohdso/athena2
  • fdelrio/athena
  • mbiros/athena
  • iwang/athena
  • dmunozpe/athena
  • okumura/athena
  • mumohdso/athena
  • sagara17/athena
  • rhayes/athena
  • arennie/athena
  • valentem/athena
  • koshimiz/athena
  • atate/athena
  • zearnsha/athena
  • caforio/athena
  • evguillo/athena
  • dossantn/athena
  • zhijie/athena
  • bnachman/athena
  • suyounas/athena
  • maly/athena
  • rjoshi/athena
  • yuzhan/athena
  • lunedic/athena
  • hlin/athena
  • mtost/athena
  • lvannoli/athena
  • crougier/athena
  • machitis/athena
  • thompson/athena
  • mimarine/athena
  • dounwuch/athena
  • omezhens/athena
  • ndebiase/athena
  • saclawso/athena
  • jonierma/athena
  • cprat/athena
  • nkakati/athena
  • echeu/athena
  • mischott/athena
  • hhanif/athena
  • martinpa/athena
  • csauer/athena
  • sahinsoy/athena
  • tiknight/athena
  • jodamp/athena
  • inaryshk/athena
  • fedin/athena
  • wendlanb/athena
  • knikolop/athena
  • xchu/athena
  • lkeszegh/athena
  • pbellos/athena
  • angrigor/athena
  • lbaltes/athena
  • adik/athena
  • jaoliver/athena
  • echeremu/athena
  • eschopf/athena
  • idrivask/athena
  • ignesi/athena
  • ntamir/athena
  • sadykov/athena
  • aikoulou/athena
  • haweber/athena
  • algilber/athena
  • sgurdasa/athena
  • pyanezca/athena
  • pamachad/athena
  • hiito/athena
  • tteixeir/athena
  • tavandaa/athena
  • pbhattar/athena
  • veellajo/athena
  • bsaifudd/athena
  • wolter/athena
  • mdrozdov/athena
  • fdibello/athena
  • nheatley/athena
  • dparedes/athena
  • hsimpson/athena
  • fsili/athena
  • mrenda/athena
  • mzhai/athena
  • zyan/athena
  • minaenko/athena
  • chchau/athena
  • zhangr/athena
  • emmarsha/athena
  • jburzyns/athena
  • phkenned/athena
  • edweik/athena
  • rkusters/athena
  • zmarshal/athena
  • leevans/athena
  • javanden/athena
  • slai/athena
  • awilhahn/athena
  • agaa/athena
  • srdas/athena
  • zfeng/athena
  • kkrowpma/athena
  • zifeng/athena
  • llaatu/athena
  • stsigari/athena
  • adonofri/athena
  • metsai/athena
  • atropina/athena
  • atlaspmb/athena
  • cleonido/athena
  • seggebre/athena
  • yuanda/athena
  • drousso/athena
  • ademaria/athena
  • arombola/athena
  • mnoury/athena
  • ijuarezr/athena
  • kchoi/athena
  • dgillber/athena
  • saktas/athena
  • axiong/athena
  • eyamashi/athena
  • zang/athena
  • matakagi/athena
  • amdesai/athena
  • qibin/athena
  • nlopezca/athena
  • acanbay/athena
  • fbendebb/athena
  • berkeleylab/lowmutracking/athena
  • bshresth/athena
  • tbuanes/athena
  • vtudorac/athena
  • jferrand/athena
  • cbuitrag/athena
  • hpotti/athena
  • hawatson/athena
  • chonghao/athena
  • klassen/athena
  • egodden/athena
  • otheiner/athena-official
  • mfarring/athena
  • parodi/athena
  • dzengerj/athena
  • bballard/athena
  • adaribay/athena
  • lmontana/athena
  • zhuyi/athena
  • dcieri/athena
  • cimcp/athena
  • weixi/athena
  • knakkali/athena
  • buboehm/athena
  • cantel/athena
  • iliadis/athena
  • asansar/athena
  • frenner/athena
  • duperrin/athena
  • kbenkend/athena
  • jburr/athena
  • bstanisl/athena
  • dkoeck/athena
  • mfewell/athena
  • isotarri/athena
  • blumen/athena
  • eegidiop/athena
  • miholzbo/athena
  • smitani/athena
  • alsala/athena
  • czodrows/athena
  • yulei/athena
  • olangrek/athena
  • gshatri/athena
  • clantz/athena
  • jmharris/athena
  • amincer/athena
  • hpang/athena
  • otheiner/athena
  • jgargan/athena
  • ewatton/athena
  • gripelli/athena
  • mleigh/athena
  • jnitschk/athena
  • preselection-hackathon/athena
  • deniso/athena
  • mfernoux/athena
  • bernardo/athena
  • tizuo/athena
  • rushioda/athena
  • sfranche/athena
  • smeriano/athena
  • chandler/athena
  • viruelas/athena
  • pebaron/athena-td
  • ksugizak/athena
  • yusano/athena
  • anghosh/ef-anindya
  • skaur/athena
  • wsherman/athena
  • hriani/athena
  • davetisy/athena
  • jgombas/athena
  • sroygara/athena
  • vcepaiti/athena
  • yochi/athena
  • rtagami/athena
  • apsallid/athena
  • pakontax/athena
  • yuanj/athena
  • dmahon/athena
  • agavrily/athena
  • abunka/athena
  • mcgensvc/athena
  • chji/athena
  • dmclaugh/athena
  • giagu/athena
  • almay/athena
  • islazyk/athena
  • cjmeyer/athena
  • yuwen/athena
  • dkobylia/athena
  • qberthet/athena
  • mshapiro/athena
  • ekay/athena
  • mbarel/athena
  • glamprin/athena
  • baitbenc/athena
  • rdinardo/athena
  • dakiyama/athena
  • osalin/athena
  • cgrefe/athena
  • mlanzacb/athena
  • minlin/athena
  • kazhang/athena
  • szambito/athena
  • hwilkens/athena
  • wsfreund/athena
  • beringer/athena
  • pebaron/athena
  • schaffer/athena
  • tkharlam/athena
  • yyap/athena
  • mspalla/athena
  • mavogel/athena
  • fcalosim/athena
  • spagan/athena
  • smobius/athena
  • enagy/athena
  • carquin/athena
  • rateixei/athena
  • dportill/athena
  • okiverny/athena
  • menke/athena
  • jelena/athena
  • osunnebo/athena
  • desilva/athena
  • chhayes/athena
  • mduehrss/athena
  • jwalder/athena
  • satom/athena
  • lmijovic/athena
  • junpei/athena
  • tilebeam/athena
  • sanmay/athena
  • jstark/athena
  • mcarnesa/athena
  • jedebevc/athena
  • jahreda/athena
  • kiabelin/athena
  • krbjoerk/athena
  • delsart/athena
  • cyoung/athena
  • mtogawa/athena
  • vtskhaya/athena
  • yifany/athena
  • silu/athena
  • jtanaka/athena
  • luxin/athena
  • maslawin/athena
  • faser/offline/athena
  • minghui/athena
  • haoran/athena
  • danning/athena
  • dcasperfaser/athena
  • srettie/athena
  • beddall/athena
  • cfan/athena
  • almeidvi/athena
  • mmontell/athena
  • vmartin/athena
  • kazheng/athena
  • pajones/athena
  • kgupta/athena
  • sudha/athena
  • beltran/athena-fork
  • lhenkelm/athena
  • ssinha/athena
  • lgagnon/athena
  • amorenos/athena
  • dpanchal/athena
  • joana/athena
  • anbaraja/athena
  • serodrig/athena
  • kkawade/athena
  • chiodini/athena
  • mtanasin/athena
  • jshahini/athena
  • apalazzo/athena
  • vbuxbaum/athena
  • gonzalri/athena
  • kburka/athena
  • ehaines/athena
  • lfeligio/athena
  • jaofferm/athena
  • desengup/athena
  • gavrilen/athena
  • gottino/athena
  • qidong/athena
  • rmazini/athena
  • mdidenko/athena
  • sabidi/athena
  • dwkim/athena
  • bkerridg/athena
  • hazeng/athena
  • cdimitri/athena
  • ktackman/athena
  • yche/athena
  • jingjing/athena
  • asciandr/athena
  • ktopolni/athena
  • dabattul/athena
  • attrtcal/athena
  • sgaid/athena
  • thmaurin/athena
  • bochen/athena
  • yoyeh/athena
  • mischott/athena-22
  • lbazzano/athena
  • chjiang/athena
  • rushioda/athena-3
  • pclark/athena
  • krdona/athena
  • meiqi/athena
  • dtorresa/athena
  • kvidalgu/athena
  • nlad/athena
  • aackerma/athena
  • aaikot/athena
  • hmoyanog/athena
  • jcurran/athena
  • yingjun/athena
  • maboelel/athena
  • xinfei/athena
  • xinhui/athena
  • mschefer/athena
  • aivina/athena
  • lesplend/athena
  • zhiliang/athena
  • rmakhman/athena
  • kazheng/athena-physics-val-2023
  • zoduan/athena
  • jlue/athena
  • shhan/athena
  • bdixit/athena
  • alsidley/athena
  • liuk/athena
  • sfrances/athena
  • ragrabar/athena
  • xingguo/athena
  • kyjones/topoetcone-removal
  • shahzad/athena
  • niabicht/athena
  • yunagai/athena
  • keener/athena
  • asehrawa/athena
  • mhoppesc/athena
  • bschlag/athena
  • lcalic/athena-backup
  • greynold/athena
  • llewitt/athena
  • adohnalo/athena
  • yinmiao/athena
  • bruckman/athena
  • kazheng/athena-workingpoint
  • agentry/athena
  • hvanders/athena
  • drankin/athena
  • nkang/athena
  • kbhide/athena
  • asmaga/athena
  • ladamczy/test
  • tbeumker/athenatest
  • tbeumker/athena
  • berkeleylab/acts/athena
  • losanti/athena-23
  • weitao/athena
  • losanti/athena
  • wsong/athena
  • menu-hackathon/athena
  • vmaksimo/athena
  • jiturriz/athena
  • dmankad/athena-idle
  • kyjones/trigger-example
  • dawerner/athena
  • edreyer/athena
  • seggebre/athena-fluencemap-modification
  • gtarna/athena
  • toobauma/athena
  • fisopkov/athena
  • lprimomo/athena
  • maparo/athena
  • smanzoni/athena
  • SecVtx-Lancaster/Athena
  • pgraveli/athena
  • adimri/athena
  • shmukher/athena
  • aackerma/atlas-athena
  • jcrosby/athena
  • rsnyder/athena
  • wstanek/athena
  • tovsiann/athena
  • lrambell/athena
  • atlas-sa-uct/athena
  • ppotepa/athena
  • eullmank/athena
  • achakrav/athena
  • skita/athena
  • lroos/athena
  • zgao/athena
  • mhemmett/athena
  • evitale/athena
  • kgoto/athena
  • xmapekul/athena
  • rashbypi/athena
  • lkretsch/athena
  • ivyas/athena
  • npond/athena
  • thmaurin/athena-sim-flavour
  • arej/athena
  • epasqual/athena
  • aleksand/athena
  • jebohm/athena
  • mbiyabi/athena
  • cvittori/athena
  • hluk/athena
  • dbiswas/athena
  • mkareem/athena
  • mihe/athena
  • aralves/athena
  • dkoeck/anniathenafork
  • tslee/athena
  • rgupta/athena
  • croland/athena
  • mhaacke/athena
  • pkumari/athena
  • cgarvey/athena
  • kesedlac/athena
  • ctosciri/athena-old
  • ctosciri/athena
  • feickert/athena
  • agerwin/athena
  • asoflau/athena
  • ricunnin/athena
  • gtolkach/athena
  • gfrattar/athena
  • gwilliam/athena
  • bdixit/masking-strip-modules
  • bscheuer/athena
  • jfeng2/athena
  • gaofeng/athena
  • kosuzuki/athena
  • svanstro/athena
  • vaustrup/athena
  • ksudo/athena
  • rhiguchi/athena
  • etoyoda/athena
  • hart/athena
  • tnakagaw/athena
  • amakita/athena
  • rmizuhik/athena
  • maoki/athena
  • miyamada/athena
  • rishikaw/athena
  • tpaschoa/athena
  • whopkins/athena
  • kkanke/athena
  • dduda/athena
  • anayaz/athena
  • ferusso/athena
  • smweber/athena
  • aagaard/athena
  • shudong/athena
  • evalient/athena
  • smweber/athena-run-3
  • zyan/athena-muon-calib
  • evalient/athena-dnn-calculator
  • zyan/athena-muon-calib-stream
  • dellacqu/athena
  • sbellman/athena
  • glagafon/project-nimber-1
  • strom/athena-dms
  • brosser/athena
  • strom/athena
  • jsallen/athena
  • leguo/athena
  • aowang/athena
  • ooncel/athena
  • jhoya/athena
  • tygeorge/athena
  • macretar/athena
  • skadir/athena-sadaf
  • glagafon/handi-project
  • wuxi/athena
  • syan/athena-syan
  • osotosan/athena
  • hasun/athena
  • karakawa/athena
  • mnorfolk/athena
  • axgallen/athena-qualification-task
  • schernau/athena
  • glagafon/handi-project-1
  • will/athena
  • aborbely/athena
  • seinfant/athena
  • dmankad/athena-gen
  • mmaroun/ravina-fork
  • axgallen/athena
  • taogawa/athena
  • romar/athena
  • ktariq/athena
  • tmlinare/athena
  • agarabag/athena
  • zuzak/athena
  • vlysenko/athena
  • mahorstm/athena
  • dhagan/athena
  • ibamwidh/athena
  • tizhang/athena
  • atishelm/athena
  • ipolishc/athena
  • huayu/athena
  • frfische/athena
  • jlue/athena-latest
  • xilin/athena
  • jolamber/athena
  • ykhoulak/myathena
  • yil/athena
  • chuanye/athena
  • kifarman/athena
  • nkua-atlas/athena
  • tayoshid/athena
  • dntounis/athena
  • movincen/athena
  • lderamo/athena
  • steinber/athena-main
  • tdingley/athena
  • nischmit/athena
  • dtruncal/athena
  • dongyi/athena
  • hasegawa/athena
  • kazheng/athena-acts
  • malvesca/athena
  • glagafon/dq-optimize
  • openc/athena
  • mnowak/athena
  • anfortma/athena
  • ladamczy/athena
  • mhufnage/athena
  • lsultana/obsolete_athena
  • lsultana/athena
  • yonoda/athena
  • lcalic/athena
  • ekajomov/athena-fork-fix
  • rqian/athena
  • kfung/athena
  • alveltma/athena
  • alpleban/athena
  • pebaron/athena-leprem
  • mmaheshw/athena
  • jdavidso/athena
  • edcritel/athena
  • anstein/athena
  • gbird/athena
  • midandre/athena
  • bglik/athena
  • fcurcio/athena
  • mfurukaw/athena
  • sokkerma/athena
  • kyjones/athena
  • mveen/athena
  • anhodges/athena
  • mvivasal/athena
  • asbrooks/athena
  • mmlynars/athena-v-2
  • jmcgowan/athena
  • tburatov/athena
  • tayoshid/athena-test
  • joroemer/athena
  • ivyoung/athena
  • lboccard/athena
  • dmankad/athena
  • jodafons/athena
  • ctaybi/athena
  • tmclachl/athena
  • drasslof/athena
  • sanchezj/athena-2022
  • anburger/athena
  • jiddon/athena
  • sdahbi/athena
  • sdemiran/athena
  • apfleger/athena
  • fwinkel/athena
  • jwkraus/athena
  • izahir/athena
  • sidoti/athena
  • mmoors/athena
  • goblirsc/athena
  • sanchezj/athena
  • rvinasco/athena
  • esimpson/athena
  • obut/athena
  • rhaberle/athena
  • mungo/athena
  • jhowarth/athena
  • dta/athena_old
  • jecouthu/athena
  • dtrischu/athena
  • klleras/athena
  • janders/athena
  • jchapman/athena
  • avallier/athena
  • fmontere/athena
  • sfuenzal/athena
  • fhenry/athena
  • awharton/Athena
  • zhaotong/athena
  • misantan/athena
  • zalegria/athena
  • gdigrego/athena
  • amelo/athena
  • shaoguan/athena
  • nbruscin/athena
  • acordeir/athena-ed
  • pdougan/athena
  • peiyan/athena
  • mkholoda/athena
  • fkirfel/athena
  • caiy/athena
  • bcervato/athena
  • kchu/athena
  • gfacini/athena
  • backes/athena
  • tayoshid/athena-2024
  • esampson/athena-idart
  • shpeng/athena-2
  • gmercado/athena
  • fwinkl2/athena
  • rhowen/athena
  • gmascare/athena
  • nharriso/athena
  • yvolkotr/athena
  • djlewis/athena
  • esampson/athena-idart-2
  • costanzo/athena
  • esampson/athena-otp
  • pibutti/athena
  • yuematsu/athena
  • alpleban/athena-met
  • yilin/athena
  • astefl/athena
  • bmoser/athena
  • esampson/athena-june-otp
  • wcastigl/athena
  • bdong/athena
  • ksahan/athena
  • thitchin/athena
  • zhanhang/athena
  • lbarrade/athena
  • sosarkar/athena-again
  • msasada/athena
  • agheata/athena
  • txu/athena
  • seth/athena
  • damperia/athena-acts
  • okolay/athena
  • esampson/june-2-otp
  • wema/athena
  • robouque/athena
  • zhangbo/athena
  • mlyukova/athena
  • nsurijr/athena
  • dbaronmo/athena
  • boudreau/athena
  • martyniu/athena
  • eballabe/athena
  • acamplan/athena
  • bngair/met-significance-r-22
  • vsasse/athena
  • bhuth/athena
  • menadeem/athena
  • bngair/me-tsig-athena
  • vkost/athena
  • ksakura/athena
  • atymchys/athena
  • rhicks/athena
  • domatter/athena
  • yanqiw/athena
  • arelycg/athena
  • linghua/athena
  • skadir/athena
  • sgoswami/athena
  • juscerri/athena
  • biliu/athena
  • sosarkar/athena
  • beltran/athena
  • mwessels/athena
  • ddicroce/athena
  • dreikher/athena
  • fladias/athena
  • bdebjani/athena
  • hshaddix/athena
  • lwinkler/athena
  • emoon/athena
  • elham/athena
  • haren/athena
  • cleong/athena
  • sdiefenb/athena-onnx-tutorial
  • mhabedan/athena
  • dwilson/athena
  • dahumphr/athena
  • fivone/athena
  • mads/athena
  • lsanfili/athena
  • echerepa/athena
  • baer/athena
  • dcamarer/athena
  • nkrogh/athena
  • thart/athena
  • scane/athena
  • lifoster/athena
  • kenakamu/athena
  • alancast/athena
  • eskorda/athena
  • glagafon/aaaathena
  • glagafon/athena
  • haotianl/athena
  • rshibata/athena
  • salopez/athena
  • lburke/athena
  • rvavrick/athena
  • ukhurshi/athena
  • glagafon/glagafon-dq
  • pizhang/athena
  • htsoi/athena
  • delitez/athena
  • therwig/athena
  • pachabri/athena
  • lcorazzi/athena
  • casadop/athena
  • mwitkows/athena
  • ezaya/athena
  • jaburles/athena
  • achamber/athena
  • mmantina/athena
  • hzhuang/athena
  • lmonaco/athena
  • rmole/athena
  • jkrupa/athena
  • mfornasi/athena
  • mamirono/athena
  • rpozzi/athena
  • gserenis/athena
  • semami/athena
  • fdattola/athena
  • uepstein/athena
  • ljerala/athena
  • jinglis/athena
  • lechols/athena
  • belderto/athena
  • abesir/athena
  • cmavungu/athena
  • lopezzot/athena
  • jajohnso/athena
  • htorre/athena
  • jlittle/athena
  • robouque/athena-20241115
  • fsiegert/athena
  • tneep/athena
  • lbrown/athena
  • rmole/athena-personal-fork
  • wguerin/athena
  • kfang/athena-fork-kyfang
  • wenjingw/athena
  • toheintz/athena
  • ashirazi/athena
  • wasu/athena
  • amoreira/athena
  • jackersc/athena
  • epompapa/athena
  • prmitra/athena
  • kgrimm/athena-kgrimm
  • nihartma/athena
  • gfazzino/athena
  • aslobodk/athena
  • goetz/athena-acts
  • kdipetri/athena
  • muschmid/athena
  • yazhou/athena
  • alarnold/athena
  • djuarezg/athena
  • mdacunha/athena
  • wlai/athena
  • mborodin/athena
  • falves/athena
  • rohasan/athena
  • alecrhys/athena
  • asickles/athena
  • adsalvad/athena
  • novotnyp/athena
  • ibenaoum/athena
  • christog/athena
  • lvicenik/athena
  • tflee/athena
  • zetao/athena
  • frcastig/athena
  • mfarzali/athena
  • jusilva/athena
  • kkazakov/athena
  • ehampshi/athena
  • tomoya/athena-low-pt-muon-rec
  • exochell/my-athena
  • llarson/athena
  • pusharma/athena
  • gpinheir/athena
  • jecifuen/athena
  • hshaddix/athena-hshaddix
  • nsur/athena-lund
  • mojeda/athena
  • jlieberm/athena
  • chhultqu/athena
  • vchabala/athena
  • misavic/athena
  • jlai/athena
  • nshtokha/athena
  • camccrac/athena
  • yuxuanz/local-athena
  • yukari/athena
  • akraus/athena
  • sizumiya/athena
  • pmourafr/athena
  • zhubacek/athena
  • mfilipig/athena
  • sawyer/athena
  • yanqiw/athena-acts-for-run-3-silicon-tracking
  • mnegrini/athena
  • rkavak/athena
  • zrokavec/athena
  • fdejean/athena
  • ssuravar/athena
  • vpires/athena-vasco
  • beyeo/athena
  • gipoddar/athena
  • gsalvi/athena
  • mtancock/athena-2
  • ndiasper/athena
  • ywng/athena
  • fballi/athena
  • sutuncay/athena
  • stlin/athena
  • hadavand/athena
1578 results
Show changes
Showing
with 304 additions and 1023 deletions
#! /bin/bash
#
# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
#
REPOURL="https://:@gitlab.cern.ch:8443/atlas/athena.git"
DATESTAMP=""
# Function printing the usage information for the script
usage() {
......@@ -11,15 +12,14 @@ usage() {
Usage: tag_build.sh [-d date_stamp] [-u repository_url]
Tag a 'nightly' build based on the current branch and timestamp. If the tag
already exists it will be checked out instead. This script should only be used
by NICOS to tag nightly builds, not for private builds.
for tagging nightly builds, not for private builds.
date_stamp Format YYYY-MM-DDTHHMM (default: \$datestamp)
date_stamp Format YYYY-MM-DDTHHMM
repository_url git repository URL (default: $REPOURL)
EOF
}
# Parse the command line arguments:
DATESTAMP="$datestamp"
while getopts ":d:u:h" opt; do
case $opt in
d)
......@@ -45,12 +45,8 @@ while getopts ":d:u:h" opt; do
esac
done
# Check we got a datestamp and that it's a valid format
if [ "$DATESTAMP" = "" ]; then
echo "No date_stamp defined from NICOS or given as a parameter"
exit 1
fi
echo $DATESTAMP | egrep "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{4}$" >& /dev/null
# Check if datestamp is valid
echo "$DATESTAMP" | grep -E --quiet "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{4}$"
if [ $? != "0" ]; then
echo "Datestamp '$DATESTAMP' does not correspond to the ATLAS format YYYY-MM-DDTHHMM"
exit 1
......@@ -67,11 +63,22 @@ cd $ScriptSrcDir/../..
# Get branch name, then tag/push or checkout if it already exists
BRANCH=$(git symbolic-ref --short HEAD)
TAG="nightly/$BRANCH/$DATESTAMP"
if git rev-parse $TAG > /dev/null 2>&1; then
# Update our local tags in case they are already out of date
git fetch --tags
if git show-ref --quiet --tags $TAG; then
echo "Tag $TAG already exists. Doing checkout..."
git checkout $TAG
else
echo "Creating tag $TAG"
git tag $TAG
git push $REPOURL $TAG
if ! git push $REPOURL $TAG; then
# Extremly unlikely race condition if multiple tag_build.sh run in parallel
# and create the same tag from a different commit hash because a commit was
# done on the branch in the meantime.
echo "Tag $TAG already exists on the remote with a different commit hash. Doing checkout..."
git fetch --tags --force
git checkout $TAG
fi
fi
# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
# Declare the package name:
atlas_subdir( CaloCalibHitRec )
......@@ -12,7 +12,7 @@ atlas_add_library( CaloCalibHitRecLib
PUBLIC_HEADERS CaloCalibHitRec
INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
LINK_LIBRARIES AthenaBaseComps AthenaKernel CaloDmDetDescr CaloGeoHelpers CaloIdentifier CaloSimEvent GaudiKernel Identifier StoreGateLib xAODCaloEvent xAODTruth CaloUtilsLib
PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} AtlasDetDescr CaloDetDescrLib CaloEvent LArRecEvent McParticleEvent TileEvent )
PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} AtlasDetDescr CaloDetDescrLib CaloEvent LArRecEvent TileEvent )
# Component(s) in the package:
atlas_add_component( CaloCalibHitRec
......
......@@ -41,7 +41,7 @@ class CalibHitToCaloCellTool: virtual public AthAlgTool {
CalibHitToCaloCellTool(const std::string& t, const std::string& n, const IInterface* p);
~CalibHitToCaloCellTool();
StatusCode initialize() override;
StatusCode processCalibHitsFromParticle(int barcode=-1) const;
StatusCode processCalibHitsFromParticle() const;
StatusCode finalize() override;
static const InterfaceID& interfaceID() { return IID_CalibHitToCaloCellTool;}
......
/*
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
*/
#ifndef CALOCALIBHITREC_CALOCALIBCLUSTERMOMENTSMAKER2_H
......@@ -38,7 +38,7 @@ class TruthParticleContainer;
#include <set>
#include <map>
#include <atomic>
#include <array>
class CaloCalibClusterMomentsMaker2: public AthAlgTool, virtual public CaloClusterCollectionProcessor
{
......@@ -55,19 +55,10 @@ class CaloCalibClusterMomentsMaker2: public AthAlgTool, virtual public CaloClust
/**
* @brief Class to store cluster number and weight for calorimeter cells
*/
class MyCellInfo {
class MyCellInfo : public std::vector<std::pair<int, double> > {
public:
MyCellInfo(int iClus, double w)
{
m_ClusWeights.emplace_back(iClus, w);
}
void Add(const MyCellInfo& other)
{
for (const std::pair<int, double>& p : other.m_ClusWeights) {
m_ClusWeights.push_back( p );
}
}
std::vector<std::pair<int, double> > m_ClusWeights;
MyCellInfo(int iClus, double w) { this->emplace_back(iClus, w); }
void Add(const MyCellInfo& other) { this->insert(this->end(),other.begin(), other.end()); }
};
typedef std::map<Identifier, MyCellInfo> CellInfoSet_t;
......@@ -79,9 +70,8 @@ class CaloCalibClusterMomentsMaker2: public AthAlgTool, virtual public CaloClust
public:
class ClusCalibEnergy {
public:
double engTot;
std::vector<double > engSmp;
ClusCalibEnergy() : engTot(0) { engSmp.resize(CaloSampling::Unknown+1, 0.0); }
double engTot = 0.0;
std::array<double,CaloSampling::Unknown+1> engSmp;
void Add(double eng, int nsmp)
{
engTot += eng;
......@@ -89,29 +79,17 @@ class CaloCalibClusterMomentsMaker2: public AthAlgTool, virtual public CaloClust
}
};
MyClusInfo() : engCalibOut(0), engCalibDead(0) {
engCalibDeadInArea.resize(CaloDmDescrArea::DMA_MAX,0.0);
engCalibParticle.clear();
}
void Add(double eng, int nsmp, int pid = 0)
{
engCalibIn.Add(eng, nsmp);
std::map<int, ClusCalibEnergy>::iterator pos = engCalibParticle.find(pid);
if(pos != engCalibParticle.end()) {
pos->second.Add(eng, nsmp);
}else{
ClusCalibEnergy tmp;
tmp.Add(eng, nsmp);
engCalibParticle[pid] = tmp;
}
engCalibParticle[pid].Add(eng, nsmp);
}
ClusCalibEnergy engCalibIn;
double engCalibOut;
double engCalibDead;
std::vector<double > engCalibDeadInArea;
std::map<int, ClusCalibEnergy > engCalibParticle;
double engCalibOut = 0.0;
double engCalibDead = 0.0;
std::array<double,CaloDmDescrArea::DMA_MAX> engCalibDeadInArea{};
std::map<int, ClusCalibEnergy > engCalibParticle{};
};
typedef std::vector<MyClusInfo> ClusInfo_t;
......@@ -130,7 +108,6 @@ class CaloCalibClusterMomentsMaker2: public AthAlgTool, virtual public CaloClust
CaloCalibClusterMomentsMaker2(const std::string& type, const std::string& name,
const IInterface* parent);
virtual ~CaloCalibClusterMomentsMaker2() override;
using CaloClusterCollectionProcessor::execute;
virtual StatusCode execute(const EventContext& ctx,
......@@ -215,7 +192,7 @@ class CaloCalibClusterMomentsMaker2: public AthAlgTool, virtual public CaloClust
double m_rmaxOut[3];
std::vector<CalibHitIPhiIEtaRange> *m_i_phi_eta[3];
std::array<std::vector<std::vector<CalibHitIPhiIEtaRange>>,3> m_i_phi_eta;
mutable std::atomic<bool> m_foundAllContainers{};
......@@ -238,8 +215,6 @@ class CaloCalibClusterMomentsMaker2: public AthAlgTool, virtual public CaloClust
int m_MatchDmType;
static double angle_mollier_factor(double x) ;
void get_calib_frac(const std::map<unsigned int,int>& truthBarcodeToPdgCodeMap,
const MyClusInfo& clusInfo, std::vector<double> &engFrac) const;
};
#endif // CALOCALIBCLUSTERMOMENTSMAKER2_H
......
......@@ -27,5 +27,8 @@ private:
/** Toggle storage of invisible and escaped energy - by default this is false, and hence we do not store the invisible or escaped calibration hit truth (ctt) energy. Hence only the EM and nonEM truth ctt energy is stored by default */
Gaudi::Property<bool> m_fullTruthEnergy{this,"storeFullTruthEnergy",false,"Toggle storage of invisible and escaped energy"};
/** Toggle whether to use cell weights or not to calculate calibration hit contribution */
Gaudi::Property<bool> m_useCellWeights{this,"useCellWeights",false,"Toggle whether to use cell weights or not to calculate calibration hit contribution"};
};
#endif
/*
Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
*/
#ifndef CALOCALIBHITREC_ICALOCALIBCLUSTERTRUTHATTRIBUTERTOOL_H
......@@ -27,7 +27,7 @@ public:
virtual StatusCode calculateTruthEnergies(const xAOD::CaloCluster& theCaloCluster
, unsigned int numTruthParticles
, const std::map<Identifier,std::vector<const CaloCalibrationHit*> >& identifierToCaloHitMap
, std::vector<std::pair<unsigned int, double > >& barcodeTrueCalHitEnergy) const = 0;
, std::vector<std::pair<unsigned int, double > >& truthIDTrueCalHitEnergy) const = 0;
DeclareInterfaceID(ICaloCalibClusterTruthAttributerTool,1,0);
......
/*
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
*/
#include "CaloCalibHitRec/CalibHitToCaloCellTool.h"
......@@ -83,7 +83,7 @@ StatusCode CalibHitToCaloCellTool::initialize()
///////////////// EXECUTE //////////////////////
StatusCode CalibHitToCaloCellTool::processCalibHitsFromParticle(int barcode) const
StatusCode CalibHitToCaloCellTool::processCalibHitsFromParticle() const
{
ATH_MSG_DEBUG("in calibHitToCaloCellTool");
......@@ -134,7 +134,6 @@ StatusCode CalibHitToCaloCellTool::processCalibHitsFromParticle(int barcode) con
int unknown_nchan = 0 ;
std::vector<Identifier> ID;
if (barcode<0) barcode = HepMC::SINGLE_PARTICLE; // if no barcode is specified for this event, use the default
std::vector<CaloCell*> CellsEtot;
......@@ -146,7 +145,7 @@ StatusCode CalibHitToCaloCellTool::processCalibHitsFromParticle(int barcode) con
for (unsigned int i=0; i<calibHitContainers.size(); i++) {
for( const auto *const calibhit: *(calibHitContainers[i])) {
//care only for deposits of the given truth particle
if ((int)calibhit->particleID()!=barcode) continue;
if (!MC::isSingleParticle(HepMC::barcode(calibhit))) continue; // FIXME barcode-based
double Etot = calibhit->energyTotal();
double Eem = calibhit->energy(0);
......
/*
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
*/
#include "CaloCalibClusterDecoratorAlgorithm.h"
......@@ -27,16 +27,14 @@ StatusCode CaloCalibClusterDecoratorAlgorithm::execute(const EventContext& ctx)
}
SG::WriteDecorHandle<xAOD::CaloClusterContainer, std::vector< std::pair<unsigned int, double> > > caloClusterWriteDecorHandleNLeadingTruthParticles(m_caloClusterWriteDecorHandleKeyNLeadingTruthParticles, ctx);
StatusCode sc;
for (const auto *thisCaloCluster : *caloClusterWriteDecorHandleNLeadingTruthParticles){
std::vector<std::pair<unsigned int, double > > newBarCodeTruthPairs;
sc = m_truthAttributerTool->calculateTruthEnergies(*thisCaloCluster, m_numTruthParticles, *mapIdentifierToCalibHitsReadHandle, newBarCodeTruthPairs);
if (sc == StatusCode::FAILURE) return sc;
std::vector<std::pair<unsigned int, double > > newTruthIDTruthPairs;
ATH_CHECK(m_truthAttributerTool->calculateTruthEnergies(*thisCaloCluster, m_numTruthParticles, *mapIdentifierToCalibHitsReadHandle, newTruthIDTruthPairs));
for (const auto& thisPair : newBarCodeTruthPairs) ATH_MSG_DEBUG("Cluster Final loop: Particle with barcode " << thisPair.first << " has truth energy of " << thisPair.second << " for cluster with e, eta " << thisCaloCluster->e() << " and " << thisCaloCluster->eta());
caloClusterWriteDecorHandleNLeadingTruthParticles(*thisCaloCluster) = newBarCodeTruthPairs;
for (const auto& thisPair : newTruthIDTruthPairs) ATH_MSG_DEBUG("Cluster Final loop: Particle with truthID " << thisPair.first << " has truth energy of " << thisPair.second << " for cluster with e, eta " << thisCaloCluster->e() << " and " << thisCaloCluster->eta());
caloClusterWriteDecorHandleNLeadingTruthParticles(*thisCaloCluster) = std::move(newTruthIDTruthPairs);
}
return StatusCode::SUCCESS;
......
/*
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
*/
//-----------------------------------------------------------------------
......@@ -35,9 +35,6 @@
#include "CaloIdentifier/CaloCell_ID.h"
#include "CaloIdentifier/CaloDM_ID.h"
#include "McParticleEvent/TruthParticle.h"
#include "McParticleEvent/TruthParticleContainer.h"
#include "StoreGate/ReadHandle.h"
#include "CLHEP/Units/SystemOfUnits.h"
......@@ -124,7 +121,7 @@ CaloCalibClusterMomentsMaker2::CaloCalibClusterMomentsMaker2(const std::string&
m_rmaxOut[2] = 0.3;
for( int im=0;im<3;im++) {
m_i_phi_eta[im] = new std::vector<CalibHitIPhiIEtaRange> [m_n_eta_out];
m_i_phi_eta[im].resize(m_n_eta_out);
}
m_doDeadEnergySharing = false;
m_foundAllContainers = false;
......@@ -142,11 +139,6 @@ CaloCalibClusterMomentsMaker2::CaloCalibClusterMomentsMaker2(const std::string&
}
CaloCalibClusterMomentsMaker2::~CaloCalibClusterMomentsMaker2() {
for( int im=0;im<3;im++)
delete[] m_i_phi_eta[im];
}
//###############################################################################
......@@ -381,28 +373,33 @@ CaloCalibClusterMomentsMaker2::execute(const EventContext& ctx,
if(pos != cellInfo.end() ) {
// i.e. given hit id belongs to one or more clusters
CaloSampling::CaloSample nsmp = CaloSampling::CaloSample(m_calo_id->calo_sample(myId));
for ( const std::pair<int, double>& p : pos->second.m_ClusWeights) {
for ( const std::pair<int, double>& p : pos->second) {
int iClus = p.first;
double weight = p.second;
if(m_useParticleID){
clusInfoVec[iClus].Add(weight * hit->energyTotal(), nsmp, hit->particleID());
const int uniqueID = HepMC::barcode(hit); // FIXME barcode-based until xAOD::TruthParticle supports id rather than barcode
if (uniqueID == HepMC::INVALID_PARTICLE_ID) {
ATH_MSG_ERROR("Invalid uniqueID (barcode) detected - this sample cannot be properly analysed.");
break;
}
clusInfoVec[iClus].Add(weight * hit->energyTotal(), nsmp, (unsigned int)(HepMC::barcode(hit)));
}else{
clusInfoVec[iClus].Add(weight * hit->energyTotal(), nsmp);
}
}
}
if( m_useParticleID && hit->particleID() == 0) {
if( m_useParticleID && HepMC::barcode(hit) == HepMC::UNDEFINED_ID) {
nHitsWithoutParticleID++;
}
nHitsTotal++;
}
}
// if all calibration hits have ParticleID(i.e. barcode)==0 when simulation was done without ParticleID
// if all calibration hits have ParticleID(i.e barcode)==0 when simulation was done without ParticleID
bool doCalibFrac = m_doCalibFrac;
bool useParticleID = m_useParticleID;
if(m_useParticleID && (nHitsTotal == nHitsWithoutParticleID) ) {
msg(MSG::INFO) << "Calibration hits do not have ParticleID, i.e. barcode of particle caused hits is always 0. Continuing without ParticleID machinery."<< endmsg;
ATH_MSG_INFO("Calibration hits do not have ParticleID, barcodes of particle-caused hits are always 0. Continuing without ParticleID machinery.");
useParticleID = false;
}
......@@ -484,8 +481,8 @@ CaloCalibClusterMomentsMaker2::execute(const EventContext& ctx,
// hit is not inside any cluster
const CaloDetDescrElement* myCDDE =
calo_dd_man->get_element(myId);
int pid(0);
if(useParticleID) pid = hit->particleID();
int uniqueID(HepMC::UNDEFINED_ID);
if(useParticleID) uniqueID = HepMC::barcode(hit); // FIXME barcode-based until xAOD::TruthParticle supports id rather than barcode
if ( myCDDE ) {
int jeO = (int)floor(m_n_eta_out*(myCDDE->eta()/m_out_eta_max));
if ( jeO >= -m_n_eta_out && jeO < m_n_eta_out ) {
......@@ -511,7 +508,7 @@ CaloCalibClusterMomentsMaker2::execute(const EventContext& ctx,
MyClusInfo& clusInfo = clusInfoVec[iClus];
// getting access to calibration energy inside cluster caused by same particleID (barcode)
// as given OOC hit
std::map<int, MyClusInfo::ClusCalibEnergy>::iterator pos = clusInfo.engCalibParticle.find(pid);
auto pos = clusInfo.engCalibParticle.find(uniqueID);
if(pos!=clusInfo.engCalibParticle.end()) {
// given cluster have some energy inside caused by same particle as given OOC hitClusEffEnergy
// so the hit will be assigned to this cluster with some weight
......@@ -559,8 +556,8 @@ CaloCalibClusterMomentsMaker2::execute(const EventContext& ctx,
CaloDmDescrElement* myCDDE(nullptr);
myCDDE = m_caloDmDescrManager->get_element(myId);
if ( myCDDE ) {
int pid(0);
if(useParticleID) pid = hit->particleID();
int uniqueID(HepMC::UNDEFINED_ID);
if(useParticleID) uniqueID = HepMC::barcode(hit); // FIXME barcode-based until xAOD::TruthParticle supports id rather than barcode
int jeO = (int)floor(m_n_eta_out*(myCDDE->eta()/m_out_eta_max));
if ( jeO >= -m_n_eta_out && jeO < m_n_eta_out ) {
......@@ -585,11 +582,11 @@ CaloCalibClusterMomentsMaker2::execute(const EventContext& ctx,
MyClusInfo& clusInfo = clusInfoVec[iClus];
// getting access to calibration energy inside cluster caused by same particleID (barcode)
// as given OOC hit
std::map<int, MyClusInfo::ClusCalibEnergy>::iterator pos = clusInfo.engCalibParticle.find(pid);
auto pos = clusInfo.engCalibParticle.find(uniqueID);
if(pos!=clusInfo.engCalibParticle.end()) {
double engClusPidCalib = pos->second.engTot;
double engClusTruthUniqueIDCalib = pos->second.engTot;
if(engClusPidCalib > m_energyMinCalib && theCluster->e()>m_energyMin) {
if(engClusTruthUniqueIDCalib > m_energyMinCalib && theCluster->e()>m_energyMin) {
double sum_smp_energy = 0.0;
// loop over calo sampling numbers registered for given DM area
for(unsigned int i_smp=0; i_smp<dmRegion->m_CaloSampleNeighbours.size(); i_smp++) {
......@@ -617,7 +614,7 @@ CaloCalibClusterMomentsMaker2::execute(const EventContext& ctx,
hitClusNorm += effEner;
}
} // good energetic cluster
} // we ve found a pid
} // we ve found a uniqueID
} // loop over clusters in the list
hitClusIndex.resize(hitClusVecIndex);
hitClusEffEnergy.resize(hitClusVecIndex);
......@@ -650,7 +647,7 @@ CaloCalibClusterMomentsMaker2::execute(const EventContext& ctx,
std::vector<double> engCalibFrac;
engCalibFrac.resize(kCalibFracMax, 0.0);
std::map<unsigned int,int> truthBarcodeToPdgCodeMap;
std::map<unsigned int,int> truthIDToPdgCodeMap;
//loop on truth particle container is slow, so put needed information in a map for faster key lookup in later loops
for ( const auto *thisTruthParticle : *truthParticleContainerReadHandle){
......@@ -660,7 +657,7 @@ CaloCalibClusterMomentsMaker2::execute(const EventContext& ctx,
continue;
}
truthBarcodeToPdgCodeMap[thisTruthParticle->barcode()] = thisTruthParticle->pdgId();
truthIDToPdgCodeMap[HepMC::barcode(thisTruthParticle)] = thisTruthParticle->pdgId(); // FIXME barcode-based xAOD::TruthParticle does not support uniqueID yet
}//truth particle loop
// assign moments
......@@ -699,7 +696,30 @@ CaloCalibClusterMomentsMaker2::execute(const EventContext& ctx,
- eng_calib_dead_leakage;
if(doCalibFrac){
get_calib_frac(truthBarcodeToPdgCodeMap, clusInfo, engCalibFrac);
/*****************************************************************************
Calculation of energy fraction caused by particles of different types
*****************************************************************************/
engCalibFrac.assign(kCalibFracMax, 0.0);
if(clusInfo.engCalibIn.engTot > 0.0) {
// each MyClusInfo has a map of particle's barcode and particle calibration deposits in given cluster
for (const auto& p : clusInfo.engCalibParticle) {
int pdg_id = 0;
if ( auto it = truthIDToPdgCodeMap.find(p.first); it != truthIDToPdgCodeMap.end()) { // FIXME barcode-based until xAOD::TruthParticle supports id rather than barcode
pdg_id = it->second;
} else {
ATH_MSG_WARNING("truthIDToPdgCodeMap cannot find an entry with barcode " << p.first);
continue;
}
if( std::abs(pdg_id) == 211) {
engCalibFrac[kCalibFracHAD] += p.second.engTot;
} else if( pdg_id == 111 || pdg_id == 22 || std::abs(pdg_id)==11) {
engCalibFrac[kCalibFracEM] += p.second.engTot;
} else {
engCalibFrac[kCalibFracREST] += p.second.engTot;
}
}
for(size_t i=0; i<engCalibFrac.size(); i++) engCalibFrac[i] = engCalibFrac[i]/clusInfo.engCalibIn.engTot;
}
}
if ( !m_momentsNames.empty() ) {
......@@ -801,35 +821,3 @@ double CaloCalibClusterMomentsMaker2::angle_mollier_factor(double x)
}
return ff*(1./atan(5.0*1.7/200.0));
}
/* ****************************************************************************
Calculation of energy fraction caused by particles of different types
**************************************************************************** */
void CaloCalibClusterMomentsMaker2::get_calib_frac(const std::map<unsigned int,int>& truthBarcodeToPdgCodeMap,
const MyClusInfo& clusInfo, std::vector<double> &engFrac) const
{
engFrac.assign(kCalibFracMax, 0.0);
if(clusInfo.engCalibIn.engTot <= 0.0) return;
// each MyClusInfo has a map of particle's barcode and particle calibration deposits in given cluster
for (const std::pair<const int, MyClusInfo::ClusCalibEnergy>& p : clusInfo.engCalibParticle) {
unsigned int barcode = p.first;
int pdg_id = 0;
try { pdg_id = truthBarcodeToPdgCodeMap.at(barcode); }
catch (const std::out_of_range& e){
ATH_MSG_WARNING("truthBarcodeToPdgCodeMap cannot find an entry with barcode " << barcode);
continue;
}
if( abs(pdg_id) == 211) {
engFrac[kCalibFracHAD] += p.second.engTot;
}else if( pdg_id == 111 || pdg_id == 22 || abs(pdg_id)==11) {
engFrac[kCalibFracEM] += p.second.engTot;
}else{
engFrac[kCalibFracREST] += p.second.engTot;
}
}
for(unsigned int i=0; i<engFrac.size(); i++) engFrac[i] = engFrac[i]/clusInfo.engCalibIn.engTot;
}
/*
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
*/
#include "CaloCalibHitRec/CaloCalibClusterTruthAttributerTool.h"
......@@ -9,7 +9,7 @@ CaloCalibClusterTruthAttributerTool::CaloCalibClusterTruthAttributerTool(const s
CaloCalibClusterTruthAttributerTool::~CaloCalibClusterTruthAttributerTool()= default;
StatusCode CaloCalibClusterTruthAttributerTool::calculateTruthEnergies(const xAOD::CaloCluster& theCaloCluster, unsigned int numTruthParticles, const std::map<Identifier,std::vector<const CaloCalibrationHit*> >& identifierToCaloHitMap, std::vector<std::pair<unsigned int, double > >& barcodeTrueCalHitEnergy) const{
StatusCode CaloCalibClusterTruthAttributerTool::calculateTruthEnergies(const xAOD::CaloCluster& theCaloCluster, unsigned int numTruthParticles, const std::map<Identifier,std::vector<const CaloCalibrationHit*> >& identifierToCaloHitMap, std::vector<std::pair<unsigned int, double > >& truthIDTrueCalHitEnergy) const{
ATH_MSG_DEBUG("In calculateTruthEnergies");
......@@ -20,10 +20,14 @@ StatusCode CaloCalibClusterTruthAttributerTool::calculateTruthEnergies(const xAO
return StatusCode::FAILURE;
}
std::map<unsigned int, double> barcodeTruePtMap;
std::map<unsigned int, double> truthIDTruePtMap;
//Loop on calorimeter cells to sum up the truth energies of the truth particles.
for (const auto *thisCaloCell : *theCellLinks){
CaloClusterCellLink::const_iterator firstCell = theCellLinks->begin();
CaloClusterCellLink::const_iterator lastCell = theCellLinks->end();
for (; firstCell != lastCell; ++firstCell) {
const CaloCell* thisCaloCell = (*firstCell);
if (!thisCaloCell){
ATH_MSG_WARNING("Have invalid pointer to CaloCell");
......@@ -32,6 +36,9 @@ StatusCode CaloCalibClusterTruthAttributerTool::calculateTruthEnergies(const xAO
//get the unique calorimeter cell identifier
Identifier cellID = thisCaloCell->ID();
//get the weight of the cell
double cellWeight = firstCell.weight();
//look up the calibration hit that corresponds to this calorimeter cell - we use find because not all calorimeter cells will have calibration hits
std::map<Identifier,std::vector<const CaloCalibrationHit*> >::const_iterator identifierToCaloHitMapIterator = identifierToCaloHitMap.find(cellID);
......@@ -39,32 +46,39 @@ StatusCode CaloCalibClusterTruthAttributerTool::calculateTruthEnergies(const xAO
std::vector<const CaloCalibrationHit*> theseCalibrationHits = (*identifierToCaloHitMapIterator).second;
for (const auto *thisCalibrationHit : theseCalibrationHits){
unsigned int barcode = thisCalibrationHit->particleID();
const int truthID = HepMC::barcode(thisCalibrationHit); // FIXME barcode-based until xAOD::TruthParticle supports id rather than barcode
double thisCalHitTruthEnergy = thisCalibrationHit->energyEM() + thisCalibrationHit->energyNonEM();
if (true == m_fullTruthEnergy) thisCalHitTruthEnergy += (thisCalibrationHit->energyEscaped() + thisCalibrationHit->energyInvisible());
auto iterator = barcodeTruePtMap.find(barcode);
if (iterator != barcodeTruePtMap.end()) barcodeTruePtMap[barcode] += thisCalHitTruthEnergy;
else barcodeTruePtMap[barcode] = thisCalHitTruthEnergy;
//This only makes sense to use for clusters that are NOT calibrated
//If the cluster is calibrated this weight includes a calibration factor
//which is not relevant for truth information.
//For uncalibrated clusters it can contain a gemetrical weight
//and also a weight due to pflow reweighting of a cell energy
if (m_useCellWeights) thisCalHitTruthEnergy *= cellWeight;
auto iterator = truthIDTruePtMap.find(truthID);
if (iterator != truthIDTruePtMap.end()) truthIDTruePtMap[truthID] += thisCalHitTruthEnergy;
else truthIDTruePtMap[truthID] = thisCalHitTruthEnergy;
}//calibration hit loop
}//loop on calorimeter cells to sum up truth energies
//now create a vector with the same information as the map, which we can then sort
std::vector<std::pair<unsigned int, double > > barcodeTruePtPairs;
std::vector<std::pair<unsigned int, double > > truthIDTruePtPairs;
barcodeTruePtPairs.reserve(barcodeTruePtMap.size());
for (const auto& thisEntry : barcodeTruePtMap) barcodeTruePtPairs.emplace_back(thisEntry);
truthIDTruePtPairs.reserve(truthIDTruePtMap.size());
for (const auto& thisEntry : truthIDTruePtMap) truthIDTruePtPairs.emplace_back(thisEntry);
//sort vector by calibration hit truth energy
std::sort(barcodeTruePtPairs.begin(),barcodeTruePtPairs.end(),[]( std::pair<unsigned int, double> a, std::pair<unsigned int, double> b) -> bool {return a.second > b.second;} );
std::sort(truthIDTruePtPairs.begin(),truthIDTruePtPairs.end(),[]( std::pair<unsigned int, double> a, std::pair<unsigned int, double> b) -> bool {return a.second > b.second;} );
//store the barcode and truth energy of the top numTruthParticles truth particles
if (numTruthParticles > barcodeTruePtPairs.size()) numTruthParticles = barcodeTruePtPairs.size();
for ( unsigned int counter = 0; counter < numTruthParticles; counter++) barcodeTrueCalHitEnergy.push_back(barcodeTruePtPairs[counter]);
//store the truthID and truth energy of the top numTruthParticles truth particles
if (numTruthParticles > truthIDTruePtPairs.size()) numTruthParticles = truthIDTruePtPairs.size();
for ( unsigned int counter = 0; counter < numTruthParticles; counter++) truthIDTrueCalHitEnergy.push_back(truthIDTruePtPairs[counter]);
for (const auto& thisPair : barcodeTrueCalHitEnergy) ATH_MSG_DEBUG("Truncated loop 2: barcode and true energy are " << thisPair.first << " and " << thisPair.second << " for cluster with e, eta of " << theCaloCluster.e() << " and " << theCaloCluster.eta() );
for (const auto& thisPair : truthIDTrueCalHitEnergy) ATH_MSG_DEBUG("Truncated loop 2: truthID and true energy are " << thisPair.first << " and " << thisPair.second << " for cluster with e, eta of " << theCaloCluster.e() << " and " << theCaloCluster.eta() );
return StatusCode::SUCCESS;
......
# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
def CaloCellPedestalCorrDefault(name='CaloCellPedestalCorr'):
import traceback
from AthenaCommon.Logging import logging
mlog = logging.getLogger( 'CaloCellPedestalCorrDefault' )
from AthenaCommon.GlobalFlags import globalflags
from AthenaCommon.AlgSequence import AthSequencer
condSeq = AthSequencer ('AthCondSeq')
try:
from CaloCellCorrection.CaloCellCorrectionConf import CaloCellPedestalCorr
theCaloCellPedestalCorr = CaloCellPedestalCorr("CaloCellPedestalCorr")
except Exception:
mlog.error("could not get handle to CaloCellPedestalCorr Quit")
traceback.print_exc()
if globalflags.DataSource()=='data' :
from IOVDbSvc.CondDB import conddb
if conddb.isOnline:
folder = '/CALO/Pedestal/CellPedestal'
conddb.addFolder('CALO_ONL',folder,className="CondAttrListCollection")
else:
folder= '/CALO/Ofl/Pedestal/CellPedestal'
conddb.addFolder('CALO_OFL',folder,className="CondAttrListCollection")
from CaloCellCorrection.CaloCellCorrectionConf import CaloCellPedCorrCondAlg
condSeq+=CaloCellPedCorrCondAlg(PedestalShiftFolder=folder)
theCaloCellPedestalCorr.isMC=False
else:
theCaloCellPedestalCorr.isMC=True
from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
from CaloRec.CaloCellFlags import jobproperties
if globalflags.DataSource()=='data' and (not jobproperties.CaloCellFlags.doPileupOffsetBCIDCorr()) and (not athenaCommonFlags.isOnline()):
lumiFolder = '/TRIGGER/LUMI/LBLESTONL'
conddb.addFolder('TRIGGER_ONL',lumiFolder,className="CondAttrListCollection")
condSeq.CaloCellPedCorrCondAlg.Luminosity = -1
condSeq.CaloCellPedCorrCondAlg.LumiFolderName = lumiFolder
if jobproperties.CaloCellFlags.doPileupOffsetBCIDCorr() and (not athenaCommonFlags.isOnline()):
from CaloRec.CaloBCIDAvgAlgDefault import CaloBCIDAvgAlgDefault
CaloBCIDAvgAlgDefault()
theCaloCellPedestalCorr.CaloBCIDAverageKey="CaloBCIDAverage"
else:
theCaloCellPedestalCorr.CaloBCIDAverageKey=""
return theCaloCellPedestalCorr
# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
# Declare the package name:
atlas_subdir( CaloClusterCorrection )
......@@ -33,7 +33,6 @@ atlas_add_test( interpolate_test
atlas_add_test( config_test
SCRIPT python ${CMAKE_CURRENT_SOURCE_DIR}/test/config_t.py
ENVIRONMENT FRONTIER_SERVER=$ENV{FRONTIER_SERVER}
LOG_IGNORE_PATTERN "Current filenames|by peeking|^Py:MetaReader|^Py:AutoConfigFlags|no dictionary for" )
atlas_add_test( CaloScaleCluster_test
......
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
#
# $Id: CaloClusterCorrectionFlags.py,v 1.5 2009-04-21 21:16:21 ssnyder Exp $
#
# File: CaloClusterCorrection/python/CaloClusterCorrectionFlags.py
# Created: Oct 2007, sss
#
""" Define global flags for cluster corrections.
"""
from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer
from AthenaCommon.JobProperties import jobproperties
from CaloClusterCorrection.constants \
import CALOCORR_JO, CALOCORR_POOL, CALOCORR_COOL
class DoSlidingWindowCellWeights (JobProperty):
""" If true, then reweight cells to prevent double-counting between clusters.
"""
statusOn = True
allowedTypes = ['bool']
StoredValue = False
class DoSlidingWindowRemoveDuplicates (JobProperty):
""" If true, then among groups of clusters very close to each other,
remove all clusters but one.
"""
statusOn = True
allowedTypes = ['bool']
StoredValue = False
class DoSlidingWindowRemoveBad (JobProperty):
""" If true, remove clusters with energy below a threshold.
"""
statusOn = True
allowedTypes = ['bool']
StoredValue = True
class DefaultSource (JobProperty):
""" Defines from where we should try to construct the tools.
May be one of CALOCORR_JO, CALOCORR_POOL, CALOCORR_COOL.
May also be a list of them, to try in order.
It may also be set to a string defined in poolfiles to try to
read all tools from that file (except those marked as nopool).
"""
statusOn = True
allowedTypes = ['str', 'list']
StoredValue = [CALOCORR_COOL, CALOCORR_POOL, CALOCORR_JO]
class CaloSwWhichCorrection (JobProperty):
"""Override the default correction version for sliding window clusters.
"""
statusOn = False
allowedTypes = 'str'
StoredValue = None
class CaloTopoEMWhichCorrection (JobProperty):
"""Override the default correction version for EM topo clusters.
"""
statusOn = False
allowedTypes = 'str'
StoredValue = None
class CaloSwCorrectionArgs (JobProperty):
"""This flag allows setting additional correction arguments for
sliding window clusters. It should normally be off, but it may be
set for testing new correction versions.
"""
statusOn = False
allowedTypes = 'dict'
StoredValue = {}
class CaloTopoEMCorrectionArgs (JobProperty):
"""This flag allows setting additional correction arguments for
EM topo clusters. It should normally be off, but it may be
set for testing new correction versions.
"""
statusOn = False
allowedTypes = 'dict'
StoredValue = {}
class CaloSwGeneration (JobProperty):
"""Correction generation string that's embedded in database tags.
This string gets changed every time the database is updated."""
statusOn = False
allowedTypes = 'str'
StoredValue = None
class CaloTopoEMGeneration (JobProperty):
"""Correction generation string that's embedded in database tags.
This string gets changed every time the database is updated."""
statusOn = False
allowedTypes = 'str'
StoredValue = None
class DBSubdetName (JobProperty):
"""This properly allows overriding the subdetector name used for
database connections. It's a dictionary, the keys of which are the
correction classes (normally either `CaloSwClusterCorrections'
or `EMTopoClusterCorrections'). If the correction class isn't
found, we use a key of None instead as a default.
The subdetector name is normally `CALO'. However, it can be set to the
name of a local sqlite file to force reading COOL information from there."""
statusOn = True
allowedTypes = 'dict'
StoredValue = {None : "CALO"}
class CaloClusterCorrectionFlags (JobPropertyContainer):
""" Flags for cluster corrections.
"""
pass
# add the 'Configured' flags container to the top container
jobproperties.add_Container(CaloClusterCorrectionFlags)
for i in [DoSlidingWindowCellWeights,
DoSlidingWindowRemoveDuplicates,
DoSlidingWindowRemoveBad,
DefaultSource,
CaloSwWhichCorrection,
CaloTopoEMWhichCorrection,
CaloSwCorrectionArgs,
CaloTopoEMCorrectionArgs,
CaloSwGeneration,
CaloTopoEMGeneration,
DBSubdetName,
]:
jobproperties.CaloClusterCorrectionFlags.add_JobProperty(i)
caloClusterCorrectionFlags = jobproperties.CaloClusterCorrectionFlags
# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
#
# File: CaloClusterCorrection/python/CaloSwCorrections.py
......@@ -138,36 +138,31 @@
import re
# Need to be sure that we always get run3 configurables in the imported
# steering modules.
from AthenaCommon.Configurable import ConfigurableCABehavior
with ConfigurableCABehavior():
from CaloClusterCorrection.CaloComputeSWcellWeights \
import make_CaloComputeSWcellWeights
from CaloClusterCorrection.CaloSwLayers import make_CaloSwLayers
from CaloClusterCorrection.CaloSwRfac import make_CaloSwRfac
from CaloClusterCorrection.CaloSwEtaoff import make_CaloSwEtaoff
from CaloClusterCorrection.CaloSwPhioff import make_CaloSwPhioff
from CaloClusterCorrection.CaloSwEtamod import make_CaloSwEtamod
from CaloClusterCorrection.CaloSwPhimod import make_CaloSwPhimod
from CaloClusterCorrection.CaloSwClusterUpdate \
import make_CaloSwClusterUpdate
from CaloClusterCorrection.CaloSwGap import make_CaloSwGap
from CaloClusterCorrection.CaloSwLongWeights import make_CaloSwLongWeights
from CaloClusterCorrection.CaloSwCalibHitsCalibration import make_CaloSwCalibHitsCalibration
from CaloClusterCorrection.CaloSwDeadOTX_ps import make_CaloSwDeadOTX_ps
from CaloClusterCorrection.CaloSwDeadOTX_back import make_CaloSwDeadOTX_back
from CaloClusterCorrection.CaloSwTransitionRegionsCorr import make_CaloSwTransitionRegionsCorr
from CaloClusterCorrection.CaloClusterListBadChannel import make_CaloClusterListBadChannel
from CaloClusterCorrection.CaloSwClcon import make_CaloSwClcon
from CaloClusterCorrection.CaloSwTime import make_CaloSwTime
from CaloClusterCorrection.constants import \
CALOCORR_SW, EMB1, EME1, EMB2, EME2
from CaloClusterCorrection.common import CaloClusterCorrSetup
from CaloClusterCorrection.compat import makeFlags, unpackCA
from CaloClusterCorrection.CaloClusterRemoveDuplicates import make_CaloClusterRemoveDuplicates
from CaloClusterCorrection.CaloClusterRemoveBad import make_CaloClusterRemoveBad
from CaloClusterCorrection.CaloComputeSWcellWeights \
import make_CaloComputeSWcellWeights
from CaloClusterCorrection.CaloSwLayers import make_CaloSwLayers
from CaloClusterCorrection.CaloSwRfac import make_CaloSwRfac
from CaloClusterCorrection.CaloSwEtaoff import make_CaloSwEtaoff
from CaloClusterCorrection.CaloSwPhioff import make_CaloSwPhioff
from CaloClusterCorrection.CaloSwEtamod import make_CaloSwEtamod
from CaloClusterCorrection.CaloSwPhimod import make_CaloSwPhimod
from CaloClusterCorrection.CaloSwClusterUpdate \
import make_CaloSwClusterUpdate
from CaloClusterCorrection.CaloSwGap import make_CaloSwGap
from CaloClusterCorrection.CaloSwLongWeights import make_CaloSwLongWeights
from CaloClusterCorrection.CaloSwCalibHitsCalibration import make_CaloSwCalibHitsCalibration
from CaloClusterCorrection.CaloSwDeadOTX_ps import make_CaloSwDeadOTX_ps
from CaloClusterCorrection.CaloSwDeadOTX_back import make_CaloSwDeadOTX_back
from CaloClusterCorrection.CaloSwTransitionRegionsCorr import make_CaloSwTransitionRegionsCorr
from CaloClusterCorrection.CaloClusterListBadChannel import make_CaloClusterListBadChannel
from CaloClusterCorrection.CaloSwClcon import make_CaloSwClcon
from CaloClusterCorrection.CaloSwTime import make_CaloSwTime
from CaloClusterCorrection.constants import \
CALOCORR_SW, EMB1, EME1, EMB2, EME2
from CaloClusterCorrection.common import CaloClusterCorrSetup
from CaloClusterCorrection.CaloClusterRemoveDuplicates import make_CaloClusterRemoveDuplicates
from CaloClusterCorrection.CaloClusterRemoveBad import make_CaloClusterRemoveBad
##############################################################################
......@@ -179,7 +174,7 @@ with ConfigurableCABehavior():
#
def layers (flags, cells_name, *args, **kw):
return make_CaloSwLayers (flags, None, cells_name=cells_name, *args, **kw)
return make_CaloSwLayers (flags, None, *args, cells_name=cells_name, **kw)
def weight (flags, cells_name, *args, **kw):
return make_CaloComputeSWcellWeights (flags, None, *args, **kw)
......@@ -215,7 +210,7 @@ def update (flags, cells_name, *args, **kw):
return make_CaloSwClusterUpdate (flags, None, *args, **kw)
def gap (flags, cells_name, *args, **kw):
return make_CaloSwGap (flags, None, cells_name=cells_name, *args, **kw)
return make_CaloSwGap (flags, None, *args, cells_name=cells_name, **kw)
def lwc (flags, cells_name, *args, **kw):
return make_CaloSwLongWeights (flags, None, *args, **kw)
......@@ -1247,96 +1242,3 @@ def make_CaloSwCorrectionsCfg (flags,
remdup = remdup,
rembad = rembad,
**kw)
##############################################################################
# Backwards compatibility:
# Main entry point to create a list of correction tools (old configuration)
#
#
# Create and return a list of correction tools.
# KEY is a string that specifies the correction type.
# SUFFIX is a string to add to the end of each tool name.
# VERSION specifies which version of corrections to use.
# CORRLIST can be used to explicitly specify which corrections to run.
# CELLS_NAME is the SG key to use to find the calorimeter cells,
# for those corrections that require it.
# SOURCE specifies the source(s) from which tools are configured.
# See above for details.
# None means to use the default.
# If WEIGHTING is true, then cells are weighted to avoid
# double-counting energy for cells that are shared between clusters.
# If REMDUP is true, then in groups of clusters that are very close
# together, we drop all but one.
#
# For more detailed information, see the comments at the start of this file.
#
def make_CaloSwCorrections (key = None,
suffix = '',
version = None,
corrlist = None,
cells_name = None,
source = None,
weighting = False,
remdup = False,
rembad = False,
**kw):
with ConfigurableCABehavior():
ca = CaloSwCorrections.make_corrections (makeFlags(),
corrclass = CALOCORR_SW,
key = key,
suffix = suffix,
version = version,
corrlist = corrlist,
cells_name = cells_name,
source = source,
weighting = weighting,
remdup = remdup,
rembad = rembad,
**kw)
return unpackCA (ca)
#
# Creating an instance of this class gives you something which
# is roughly compatible with the old correction setup interface; i.e.,
# you can use it like
#
# obj.set (alg, '37', corrlist = obj.corrlist37)
#
class CaloSwCorrections_compat:
def __init__ (self, version = None):
self.version = version
return
def set (self, alg, suffix='', corrlist ='ele55', key = None):
if isinstance (corrlist, str):
key = corrlist
corrlist = None
corr = make_CaloSwCorrections (key, suffix, self.version, corrlist)
for c in corr:
alg += c
alg.ClusterCorrectionTools += [c.getFullName()]
# Need to make sure that setup gets run on the tool;
# otherwise, the parameters won't get set.
c.setup()
return
def corrlist (self):
return 'ele55'
corrlist55 = 'ele55'
corrlist35 = 'ele35'
corrlist37 = 'ele37'
corrlistele55 = 'ele55'
corrlistele35 = 'ele35'
corrlistele35 = 'ele35'
corrlistgam = 'gam55'
corrlistgam55 = 'gam55'
corrlistgam35 = 'gam35'
corrlistgam37 = 'gam37'
# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
#
# File: CaloClusterCorrection/python/CaloSwCorrections.py
# Created: Mar 2007, sss
# Purpose: Top-level configuration file for EM topo cluster corrections.
#
# The main entry point here is make_CaloTopoEMCorrectionsCfg, which returns
# a list of correction tools. It can be used either `le menu' --- selecting
# a predefined list of correction tools, or `a la carte' --- explicitly
# specifying the list of tools you want to run.
#
# The simplest way of using it is like this:
#
# make_CaloTopoEMCorrectionsCfg (flags, key)
#
# Here, `key' is a string that denotes the type of cluster which you
# are correcting. It should be something like `ele420' for 4-2-0 electrons,
# `gam630' for 6-3-0 photons, etc.
#
# Tools should have unique names. If you are using the same corrections
# multiple times (in offline and in trigger, for example), you should
# specify the `suffix' argument to make them unique. This is a string
# that will be added to the end of the tool names.
#
# By default, the latest version of the corrections appropriate to the
# geometry being used will be chosen. You can override this selection
# by supplying the `version' argument. It may also be overridden
# with Calo.ClusterCorrection.CaloTopoEMWhichCorrection.
# For the list of known version
# names, see the variable `CaloTopoEMCorrection_versions' below.
# In particular, using version `none' turns off the corrections.
#
# Each individual correction has a version as well, independent
# of the version of the overall correction list. You can override
# the version to be used for individual correction by adding
# parameters of the form CORRECTION_version. For example:
#
# make_CaloTopoEMCorrectionsCfg (flags, key, version='v4', lwc_version='v3')
#
# uses the `v4' corrections, except that we use version `v3' of the
# layer weight corrections. You can also specify CORRECTION_key
# to override the key setting for an individual correction,
# and CORRECTION_XXX to override any individual parameter
# of a correction. For example:
#
# make_CaloTopoEMCorrectionsCfg (flags, key, lwc_degree=2)
#
# makes the full standard set of corrections, except that the interpolation
# degree for the layer weights correction is changed to 2.
#
# You can explicitly specify a list of corrections to run with the
# `corrlist' argument. For example,
#
# make_CaloTopoEMCorrectionsCfg (flags, key, corrlist=[[layers], [update], [gap]])
#
# runs only the `layers', `update', and `gap' corrections. The names
# used here, like `layers' should be functions defined with this
# signature:
#
# def layers (flags, cells_name, suffix, version, key, source, **kw):
#
# Definitions for all the standard corrections are contained in this file.
# Note that the names of these functions are what are used to recognize
# the CORRNAME in additional arguments of the form CORRNAME_XXX.
#
# If you just give the corrections without an explicit version
# (as in the example above), then what we do is this. We first
# find the correction list we would use if the corrlist argument
# had not been specified (the `vcorrlist'). For each correction
# in the corrlist with no specified version, we look in the vcorrlist
# for a matching correction. If we find one, the version from the
# vcorrlist is used. Otherwise, the most recent version of the
# correction is used.
#
# The version of a correction in the corrlist may be explicitly
# specified as the second element in the list. Additional parameter
# settings may be specified as following (name, value) tuples
# in the list. For example:
#
# make_CaloTopoEMCorrectionsCfg (flags,
# key, corrlist=[[layers],
# [update],
# [gap, 'v3', ('degree', 2)]])
#
# says to use version `v3' of the gap correction, and in addition,
# to override the interpolation degree to be 2.
#
# There are three ways in which a correction can get configured: from
# job options, from pool, or from cool. You can specify which ones
# to use by adding the `source' argument to make_CaloTopoEMCorrectionsCfg.
# This is one of the following (defined in constants.py):
#
# - CALOCORR_JO: Configure from job options
# - CALOCORR_POOL: Configure from a pool file
# - CALOCORR_COOL: Configure from cool.
#
# The name of a pool file defined in the dictionary of poolfiles.py
# may also be used.
#
# This parameter may be specified as a list of any of these values; in that
# case, all the possibilities will be tried in order. The default is taken
# from Calo.ClusterCorrection.defaultSource
# if it hasn't been explicitly set. The usual setting is to try first
# cool, then pool, then job options. (Note that there are a couple
# corrections which are not saved to pool/cool and can thus only
# be initialized from job options.)
#
# You may also override the source for an individual correction
# by adding an argument with a name of the form CORRECTION_source.
# The value of this may be anything that could be specified for source;
# in addition, you may explicitly specify a job options parameter class to use
# with a string of the form `MODULE.NAME'.
#
# Need to be sure that we always get run3 configurables in the imported
# steering modules.
from AthenaCommon.Configurable import ConfigurableCABehavior
with ConfigurableCABehavior():
from CaloClusterCorrection.CaloTopoEMmoments import make_CaloTopoEMmoments
from CaloClusterCorrection.CaloTopoEMlayers import make_CaloTopoEMlayers
from CaloClusterCorrection.CaloTopoEMetaoff import make_CaloTopoEMetaoff
from CaloClusterCorrection.CaloTopoEMetaoffSW import make_CaloTopoEMetaoffSW
from CaloClusterCorrection.CaloTopoEMphioff import make_CaloTopoEMphioff
from CaloClusterCorrection.CaloTopoEMphimod import make_CaloTopoEMphimod
from CaloClusterCorrection.CaloTopoEMClusterUpdate \
import make_CaloTopoEMClusterUpdate
from CaloClusterCorrection.CaloTopoEMgap import make_CaloTopoEMgap
from CaloClusterCorrection.CaloClusterListBadChannel import make_CaloClusterListBadChannel
from CaloClusterCorrection.CaloTopoEMlongWeights \
import make_CaloTopoEMlongWeights
from CaloClusterCorrection.constants import CALOCORR_EMTOPO, EMB1, EME1
from CaloClusterCorrection.common import CaloClusterCorrSetup
from CaloClusterCorrection.compat import makeFlags, unpackCA
##############################################################################
# Here we define wrapper functions to set up all of the standard corrections.
# In the case where a correction has multiple versions for different
# samplings, we define multiple wrappers here.
# These are the names to use in the correction list and in the
# arguments to make_CaloTopoEMCorrectionCfg.
#
def moments (flags, cells_name, *args, **kw):
return make_CaloTopoEMmoments (flags, None, *args, **kw)
def layers (flags, cells_name, *args, **kw):
return make_CaloTopoEMlayers (flags, None, cells_name=cells_name, *args, **kw)
def etaoff_sw_b1 (flags, cells_name, *args, **kw):
return make_CaloTopoEMetaoffSW (flags, EMB1, None, *args, **kw)
def etaoff_sw_e1 (flags, cells_name, *args, **kw):
return make_CaloTopoEMetaoffSW (flags, EME1, None, *args, **kw)
# Eta offset in sampling 2.
def etaoff_2 (flags, cells_name, *args, **kw):
return make_CaloTopoEMetaoff (flags, None, *args, **kw)
# Phi offset in sampling 2.
def phioff (flags, cells_name, *args, **kw):
return make_CaloTopoEMphioff (flags, None, *args, **kw)
def phimod (flags, cells_name, *args, **kw):
return make_CaloTopoEMphimod (flags, None, *args, **kw)
def update (flags, cells_name, *args, **kw):
return make_CaloTopoEMClusterUpdate (flags, None, *args, **kw)
def lwc (flags, cells_name, *args, **kw):
return make_CaloTopoEMlongWeights (flags, None, *args, **kw)
def gap (flags, cells_name, *args, **kw):
return make_CaloTopoEMgap (flags, None, *args, **kw)
def listBadChannel (flags, cells_name, *args, **kw):
return make_CaloClusterListBadChannel (flags, CALOCORR_EMTOPO, None, *args, **kw)
##############################################################################
# The class responsible for making the corrections.
#
class CaloTopoEMCorrectionsSetup (CaloClusterCorrSetup):
name = "EM topo"
version_override_flag_name = 'caloTopoEMWhichCorrection'
correction_generation_flag_name = 'caloTopoEMGeneration'
correction_generation_default = "00-02-00"
##########################################################################
# This is the list of all known correction versions.
versions = {
# A special case: disable all corrections except those
# technically required.
'none' : [[moments, 100],
[listBadChannel, 820]],
# From the original job options file.
# I think this was for 6-3-3 clusters.
'v1' : [[moments, 100],
[layers, 101],
[phioff, 'v1', 201],
[etaoff_2, 'v1', 202],
# In sampling 1, use v2 of the SW corrns
[etaoff_sw_b1, 'v2', 203],
[etaoff_sw_e1, 'v2', 204],
[phimod, 'v1', 250],
[update, 'dont_update_e', 300],
],
# From the original DC3 job options file.
# I think this was for 6-3-3 clusters.
'DC3' : [[moments, 100],
[layers, 101],
[phioff, 'v1', 201],
[etaoff_2, 'v1', 202],
# In sampling 1, use v2 of the SW corrns
[etaoff_sw_b1, 'v2', 203],
[etaoff_sw_e1, 'v2', 204],
[phimod, 'v1', 250],
[update, 'dont_update_e', 300],
[lwc, 'v1', 401],
[gap, 'v1', 450],
],
# Same as DC3, except that the phi offset in the endcap is removed.
'DC3-v2' : [[moments, 100],
[layers, 101],
[phioff, 'v2', 201],
[etaoff_2, 'v1', 202],
# In samp 1, use v2 of the SW corrns
[etaoff_sw_b1, 'v2', 203],
[etaoff_sw_e1, 'v2', 204],
[phimod, 'v1', 250],
[update, 'dont_update_e', 300],
[lwc, 'v1', 401],
[gap, 'v1', 450],
[listBadChannel, 820],
],
# Define the list of correction tools to run when
# hierarchical tagging is used.
# All tools that may possibly be used for these corrections
# should be listed here. Tools that are not configured
# from the database should have the proper order and
# version (if any); tools that are configured from the
# database should not have order set and should have the
# version set to `@'.
# The ordering of tools in this list has no significance.
'@' : [[moments, 100],
[layers, 101],
[phioff, '@'],
[etaoff_2, '@'],
[etaoff_sw_b1, '@'],
[etaoff_sw_e1, '@'],
[phimod, '@'],
[update, '@'],
[lwc, '@'],
[gap, '@'],
[listBadChannel, 820]
],
}
# Alias for the newest correction.
newest_version = 'DC3-v2'
##########################################################################
# Mapping between detector description version and the appropriate
# correction version. Anything not listed here gets the most recent
# correction.
#
# These are first matched against a string of the form
# DATASOURCE-GEOM; if that doesn't match, we try just GEOM.
#
# Note: By default, these will be converted to hierarchical tags
# if we read from cool. To disable this, start the version name
# with `NOHIER#'.
#
geom_versions = [
# Use global tag by default for real data.
['data-*' , '@GLOBAL'],
['*' , 'DC3-v2' ],
]
# Handle CaloTopoEMCorrectionArgs.
def make_corrections (self, flags, **kw_in):
kw = {}
kw = flags.Calo.ClusterCorrection.caloTopoEMCorrectionArgs
kw.update (kw_in)
return CaloClusterCorrSetup.make_corrections (self, flags, **kw)
CaloTopoEMCorrections = CaloTopoEMCorrectionsSetup()
##############################################################################
# Main entry point to create a list of correction tools.
#
#
# Create and return a CA of correction tools.
# FLAGS are the configuration flags.
# KEY is a string that specifies the correction type.
# SUFFIX is a string to add to the end of each tool name.
# VERSION specifies which version of corrections to use.
# CORRLIST can be used to explicitly specify which corrections to run.
# CELLS_NAME is the SG key to use to find the calorimeter cells,
# for those corrections that require it.
# SOURCE specifies the source(s) from which tools are configured.
# See above for details.
# None means to use the default.
#
# For more detailed information, see the comments at the start of this file.
#
def make_CaloTopoEMCorrectionsCfg (flags,
key = None,
suffix = '',
version = None,
corrlist = None,
cells_name = None,
source = None,
**kw):
return CaloTopoEMCorrections.make_corrections (flags,
corrclass = CALOCORR_EMTOPO,
key = key,
suffix = suffix,
version = version,
corrlist = corrlist,
cells_name = cells_name,
source = source,
**kw)
##############################################################################
# Backwards compatibility:
# Main entry point to create a list of correction tools (old configuration)
#
#
# Create and return a list of correction tools.
# KEY is a string that specifies the correction type.
# SUFFIX is a string to add to the end of each tool name.
# VERSION specifies which version of corrections to use.
# CORRLIST can be used to explicitly specify which corrections to run.
# CELLS_NAME is the SG key to use to find the calorimeter cells,
# for those corrections that require it.
# SOURCE specifies the source(s) from which tools are configured.
# See above for details.
# None means to use the default.
#
# For more detailed information, see the comments at the start of this file.
#
def make_CaloTopoEMCorrections (key = None,
suffix = '',
version = None,
corrlist = None,
cells_name = None,
source = None,
**kw):
with ConfigurableCABehavior():
ca = CaloTopoEMCorrections.make_corrections (makeFlags(),
corrclass = CALOCORR_EMTOPO,
key = key,
suffix = suffix,
version = version,
corrlist = corrlist,
cells_name = cells_name,
source = source,
**kw)
return unpackCA (ca)
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
#
# File: CaloClusterCorrection/python/CaloTopoEMmoments.py
# Created: Mar 2007, sss, from old job options.
# Purpose: Cluster moments calculation.
#
# This `correction' is responsible for calculating various cluster
# parameters.
#
#
from AthenaConfiguration.ComponentFactory import CompFactory
from CaloClusterCorrection.constants import \
CALOCORR_NOPOOL, CALOCORR_DEFAULT_KEY, CALOCORR_EMTOPO
from CaloClusterCorrection.common import makecorr
from AthenaCommon.SystemOfUnits import deg
from CaloTools.CaloNoiseCondAlg import CaloNoiseCondAlg
CaloNoiseCondAlg()
#
# This table lists all available versions of this correction.
# See common.py for a description of the contents.
#
cls = CompFactory.CaloClusterMomentsMaker # CaloRec
CaloTopoEMmoments_versions = [
['', cls, ['CaloTopoEMmoments.CaloTopoEMmoments_parms', CALOCORR_NOPOOL]],
]
#
# Create a new tool instance.
# FLAGS is the configuration flags instance.
# NAME is the base name for this tool. If defaulted, a name will
# be constructed from the name of the correction, the version, and the key.
# If SUFFIX is not None, it will be added onto the end of the tool name.
# VERSION is a string specifying which of several versions of the correction
# to choose. If defaulted, the latest version of the correction is chosen.
# KEY is a string to specify the type of cluster to which the correction
# applies. The convention is to use `ele55' for 5x5 electron clusters,
# `gam35' for 3x5 photon clusters, and so on.
# SOURCE tells from where we should read the calibration constants.
# See common.py for a description of the possibilities.
# None means to use the default.
# CONFCLASS gives the Configurable class to use to create the tool.
# It may (and usually should) be defaulted.
#
# Additional keyword arguments may be passed to override any tool
# parameters/constants.
#
def make_CaloTopoEMmoments (flags,
name = None,
suffix = None,
version = None,
key = CALOCORR_DEFAULT_KEY,
source = None,
confclass = None,
cells_name = None,
**kw):
return makecorr (flags,
versions = CaloTopoEMmoments_versions,
name = name,
basename = 'EMTopoMoments',
suffix = suffix,
version = version,
key = key,
sampling = None,
source = source,
confclass = confclass,
corrclass = CALOCORR_EMTOPO,
**kw)
class CaloTopoEMmoments_parms:
MaxAxisAngle = 20*deg
MinBadLArQuality = 4000
MomentsNames = [
"FIRST_PHI"
,"FIRST_ETA"
,"SECOND_R"
,"SECOND_LAMBDA"
,"DELTA_PHI"
,"DELTA_THETA"
,"DELTA_ALPHA"
,"CENTER_X"
,"CENTER_Y"
,"CENTER_Z"
,"CENTER_MAG"
,"CENTER_LAMBDA"
,"LATERAL"
,"LONGITUDINAL"
,"FIRST_ENG_DENS"
,"SECOND_ENG_DENS"
,"ENG_FRAC_MAX"
,"ISOLATION"
,"ENG_BAD_CELLS"
,"N_BAD_CELLS"
,"N_BAD_CELLS_CORR"
,"BAD_CELLS_CORR_E"
,"BADLARQ_FRAC"
,"ENG_POS"
,"SIGNIFICANCE"
]
# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
#--
#-- Configures standard cell weight calibration tools (extracted from JetGetter)
#--
#-- Note the input for this calibration is jet driven. The fitted default
#Remark: This code is supposed to work with both old-style config and ComponentAccumulator based config.
#CA-based config is assumed if the additional parameter 'flags' is set to a AthConfigFlags container (and not None)
from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
from AthenaConfiguration.ComponentFactory import CompFactory
from AthenaCommon.Logging import logging
......@@ -99,22 +96,15 @@ class H1Calibration(object):
# folder overriding -----------------------
forceOverrideFolder = False
@staticmethod
def overrideFolder(flags=None):
if flags is None:
#Assume non-CA case, old-style config flags
from AthenaCommon.GlobalFlags import globalflags
isMC=(globalflags.DataSource()!="data")
else:
isMC=flags.Input.isMC
return H1Calibration.forceOverrideFolder or isMC
def overrideFolder(flags):
return H1Calibration.forceOverrideFolder or flags.Input.isMC
#--
#-- Helper functions to access DB parameters. Note that providing a dbtag (like from JetCalibrationDBTag)
#-- overwrites the default tag extracted from the detector description version
#--
@staticmethod
def calibration_dict(dbtag="",flags=None):
def calibration_dict(flags, dbtag=""):
#-- DB tag provided
if dbtag != "":
calibdic = {
......@@ -130,15 +120,7 @@ class H1Calibration(object):
return calibdic
#-- default extraction
else:
if flags is None:
#Assume non-CA case, old-style config flags
from AthenaCommon.GlobalFlags import globalflags
ddv = globalflags.DetDescrVersion()
else:
#Assume ComponentAccumulator case
ddv=flags.GeoModel.AtlasVersion
ddv = flags.GeoModel.AtlasVersion
#-- establish relation between detector description and calibration
if ddv.startswith("ATLAS-CSC"):
if ddv >= "ATLAS-CSC-01-00-01":
......@@ -151,7 +133,7 @@ class H1Calibration(object):
return H1Calibration.calibdicV14
#-- get calibration parameters
@staticmethod
def getCalibDBParams(finder,mainparam,input, onlyCellWeight=False, isMC=False, flags=None):
def getCalibDBParams(flags, finder, mainparam, input, onlyCellWeight=False, isMC=False):
""" Retrieves calibration DB parameters from jet finder specs, returns a triplet (key,folder,tag)
"""
#-- adapt to DB convention
......@@ -160,7 +142,7 @@ class H1Calibration(object):
if param == '7':
param = ''
#-- get dictionary
caldict = H1Calibration.calibration_dict("", flags)
caldict = H1Calibration.calibration_dict(flags)
calibtype = finder+param+input
#-- specific calibration
......@@ -180,8 +162,8 @@ class H1Calibration(object):
if onlyCellWeight:
# then we don't really care : just give back Cone4Tower or Cone4Topo
# and avoid the warning below.
if 'Topo' in input: return H1Calibration.getCalibDBParams('Cone',0.4,'H1Topo',onlyCellWeight,isMC, flags)
else: return H1Calibration.getCalibDBParams('Cone',0.4,'H1Tower',onlyCellWeight,isMC, flags)
if 'Topo' in input: return H1Calibration.getCalibDBParams(flags,'Cone',0.4,'H1Topo',onlyCellWeight,isMC)
else: return H1Calibration.getCalibDBParams(flags,'Cone',0.4,'H1Tower',onlyCellWeight,isMC)
# else try to find a good fall back
_logger.warning("getCalibDBParams: no dedicated calibration for %s %s %s", finder,mainparam,input)
if finder not in [ 'Kt', 'Cone' ] : finder = 'Cone' # fall back to ATLAS Cone
......@@ -190,31 +172,10 @@ class H1Calibration(object):
else: l = [ 0.4, 0.7 ]
(m,mainparam) = min( [ (abs(p-mainparam),p) for p in l ] ) # main parameter optimization (??)
_logger.warning("getCalibDBParams: defaulted calibration to %s %s %s", finder,mainparam,input)
return H1Calibration.getCalibDBParams(finder,mainparam,input,onlyCellWeight,isMC, flags)
#-- load DB folder
@staticmethod
def loadCaloFolder(folder,tag,isMC=False):
from IOVDbSvc.CondDB import conddb
from AthenaCommon.AppMgr import ServiceMgr
IOVDbSvc = CompFactory.IOVDbSvc # IOVDbSvc
ServiceMgr += IOVDbSvc()
IOVDbSvc = ServiceMgr.IOVDbSvc
if isMC:
dbString="CALO_OFL"
else:
dbString="CALO"
if (folder,tag) not in H1Calibration.loaded_folder:
if H1Calibration.overrideFolder():
conddb.addFolder(dbString,folder+'<tag>'+tag+'</tag>',
className = 'CaloRec::ToolConstants')
else:
conddb.addFolder(dbString,folder,
className = 'CaloRec::ToolConstants')
return H1Calibration.getCalibDBParams(flags,finder,mainparam,input,onlyCellWeight,isMC)
H1Calibration.loaded_folder.append( (folder,tag) )
def getCellWeightTool(finder="Cone",mainparam=0.4,input="Topo", onlyCellWeight=False,flags=None):
def getCellWeightTool(flags, finder="Cone", mainparam=0.4, input="Topo", onlyCellWeight=False):
"""
Returns a fully configured H1-style cell weighting calibration tool. This tool only uses cell weights!
Parameters/type:
......@@ -222,33 +183,15 @@ def getCellWeightTool(finder="Cone",mainparam=0.4,input="Topo", onlyCellWeight=F
input/str : input objects triggers calibration weights
mainparam/float: size parameter for jet
"""
H1WeightToolCSC12Generic = CompFactory.H1WeightToolCSC12Generic # CaloClusterCorrection
if flags is None:
#old-style case
from AthenaCommon.GlobalFlags import globalflags
isMC=globalflags.DataSource()!='data'
#-- DB access
(key,folder,tag) = H1Calibration.getCalibDBParams(finder,mainparam,input, onlyCellWeight, isMC)
H1Calibration.loadCaloFolder(folder,tag, isMC)
#-- configure tool
toolName = finder + editParm(mainparam) + input
cellcalibtool = H1WeightToolCSC12Generic("H1Weight"+toolName)
cellcalibtool.DBHandleKey = key
# --
return cellcalibtool
else:
#ComponentAccumulator case
from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
result=ComponentAccumulator()
(key,folder,tag) = H1Calibration.getCalibDBParams(finder,mainparam,input, onlyCellWeight, flags.Input.isMC, flags)
from IOVDbSvc.IOVDbSvcConfig import addFolders
result.merge(addFolders(flags,folder,'CALO_OFL' if flags.Input.isMC else 'CALO',className = 'CaloRec::ToolConstants',
tag=tag if H1Calibration.overrideFolder(flags) else None))
#-- configure tool
toolName = finder + editParm(mainparam) + input
cellcalibtool = H1WeightToolCSC12Generic("H1Weight"+toolName)
cellcalibtool.DBHandleKey = key
result.setPrivateTools(cellcalibtool)
return result
result = ComponentAccumulator()
(key,folder,tag) = H1Calibration.getCalibDBParams(flags,finder,mainparam,input, onlyCellWeight, flags.Input.isMC)
from IOVDbSvc.IOVDbSvcConfig import addFolders
result.merge(addFolders(flags,folder,'CALO_OFL' if flags.Input.isMC else 'CALO',className = 'CaloRec::ToolConstants',
tag=tag if H1Calibration.overrideFolder(flags) else None))
#-- configure tool
toolName = finder + editParm(mainparam) + input
cellcalibtool = CompFactory.H1WeightToolCSC12Generic("H1Weight"+toolName,
DBHandleKey = key)
result.setPrivateTools(cellcalibtool)
return result
#!/usr/bin/env athena.py
# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration.
#
# File: CaloClusterCorrection/python/WriteCaloSwCorrections.py
# Author: scott snyder <snyder@bnl.gov>
# Date: May 2024, from old config version
# Purpose: Write cluster correction constants to pool+cool.
#
CALOCORR_POOLFILE = 'CaloSwCorrections.pool.root'
CALOCORR_COOLFILE = 'swcool.db'
CaloSwCorrKeys = ['ele55', 'ele35', 'ele37',
'gam55', 'gam35', 'gam37']
from AthenaConfiguration.MainServicesConfig import \
MainServicesCfg
from CaloClusterCorrection.WriteCorrectionsConfig import \
WriteCorrectionsFlags, WriteCorrectionsCfg
flags = WriteCorrectionsFlags (CALOCORR_COOLFILE)
cfg = MainServicesCfg (flags)
from CaloClusterCorrection.CaloSwCorrections import CaloSwCorrections
from CaloClusterCorrection.constants import CALOCORR_SW
(corr_output_list, tag_list, ca) =\
CaloSwCorrections.config_for_pool (flags,
CaloSwCorrKeys,
CALOCORR_SW)
cfg.merge (ca)
cfg.merge (WriteCorrectionsCfg (flags, CALOCORR_POOLFILE,
corr_output_list, tag_list))
sc = cfg.run (flags.Exec.MaxEvents)
import sys
sys.exit (sc.isFailure())
#!/usr/bin/env athena.py
# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration.
#
# File: CaloClusterCorrection/python/WriteCaloTopoEMCorrections.py
# Author: scott snyder <snyder@bnl.gov>
# Date: May 2024, from old config version
# Purpose: Write cluster correction constants to pool+cool.
#
CALOCORR_POOLFILE = 'CaloTopoEMCorrections.pool.root'
CALOCORR_COOLFILE = 'topoemcool.db'
CaloTopoEMCorrKeys = ['ele633', 'ele420', 'gam633']
from AthenaConfiguration.MainServicesConfig import \
MainServicesCfg
from CaloClusterCorrection.WriteCorrectionsConfig import \
WriteCorrectionsFlags, WriteCorrectionsCfg
flags = WriteCorrectionsFlags (CALOCORR_COOLFILE)
cfg = MainServicesCfg (flags)
from CaloClusterCorrection.CaloTopoEMCorrections import CaloTopoEMCorrections
from CaloClusterCorrection.constants import CALOCORR_EMTOPO
(corr_output_list, tag_list, ca) =\
CaloTopoEMCorrections.config_for_pool (flags,
CaloTopoEMCorrKeys,
CALOCORR_EMTOPO)
cfg.merge (ca)
cfg.merge (WriteCorrectionsCfg (flags, CALOCORR_POOLFILE,
corr_output_list, tag_list))
sc = cfg.run (flags.Exec.MaxEvents)
import sys
sys.exit (sc.isFailure())
# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration.
#
# File: CaloClusterCorrection/python/WriteCorrectionsConfig.py
# Author: scott snyder <snyder@bnl.gov>
# Date: May 2024, from old config version
# Purpose: Helpers for configuring jobs to write correction constants.
#
from AthenaConfiguration.ComponentFactory import CompFactory
from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
def WriteCorrectionsFlags (coolfile):
from AthenaConfiguration.AllConfigFlags import initConfigFlags
from Campaigns.Utils import Campaign
flags = initConfigFlags()
flags.Exec.MaxEvents = 1
flags.Input.isMC = True
flags.IOVDb.DBConnection = f'sqlite://;schema=${coolfile};dbname=OFLP200'
flags.IOVDb.GlobalTag = 'None'
flags.IOVDb.DatabaseInstance = ''
flags.Input.MCCampaign = Campaign.Unknown
flags.fillFromArgs()
flags.lock()
return flags
def WriteCorrectionsCfg (flags, poolfile,
corr_output_list,
tag_list):
cfg = ComponentAccumulator()
from RegistrationServices.OutputConditionsAlgConfig import OutputConditionsAlgCfg
cfg.merge (OutputConditionsAlgCfg (flags,
outputFile = poolfile,
ObjectList = corr_output_list,
WriteIOV = True,
IOVTagList = tag_list))
from IOVDbSvc.IOVDbSvcConfig import IOVDbSvcCfg
cfg.merge (IOVDbSvcCfg (flags))
cfg.addService (CompFactory.IOVRegistrationSvc (writeKeyInfo = False))
return cfg